Karsten Hopp 6c970c
To: vim_dev@googlegroups.com
Karsten Hopp 6c970c
Subject: Patch 7.4.338
Karsten Hopp 6c970c
Fcc: outbox
Karsten Hopp 6c970c
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 6c970c
Mime-Version: 1.0
Karsten Hopp 6c970c
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 6c970c
Content-Transfer-Encoding: 8bit
Karsten Hopp 6c970c
------------
Karsten Hopp 6c970c
Karsten Hopp 6c970c
Patch 7.4.338
Karsten Hopp 6c970c
Problem:    Cannot wrap lines taking indent into account.
Karsten Hopp 6c970c
Solution:   Add the 'breakindent' option. (many authors, final improvements by
Karsten Hopp 6c970c
	    Christian Brabandt)
Karsten Hopp 6c970c
Files:	    runtime/doc/eval.txt, runtime/doc/options.txt, runtime/optwin.vim,
Karsten Hopp 6c970c
	    src/buffer.c, src/charset.c, src/edit.c, src/ex_getln.c,
Karsten Hopp 6c970c
	    src/getchar.c, src/misc1.c, src/misc2.c, src/ops.c, src/option.c,
Karsten Hopp 6c970c
	    src/option.h, src/proto/charset.pro, src/proto/misc1.pro,
Karsten Hopp 6c970c
	    src/proto/option.pro, src/screen.c, src/structs.h,
Karsten Hopp 6c970c
	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
Karsten Hopp 6c970c
	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
Karsten Hopp 6c970c
	    src/testdir/Make_vms.mms, src/testdir/Makefile,
Karsten Hopp 6c970c
	    src/testdir/test_breakindent.in, src/testdir/test_breakindent.ok,
Karsten Hopp 6c970c
	    src/ui.c
Karsten Hopp 6c970c
Karsten Hopp 6c970c
Karsten Hopp 6c970c
*** ../vim-7.4.337/runtime/doc/eval.txt	2014-06-17 17:48:21.768628007 +0200
Karsten Hopp 6c970c
--- runtime/doc/eval.txt	2014-06-25 12:57:00.986115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 6639,6646 ****
Karsten Hopp 6c970c
  keymap			Compiled with 'keymap' support.
Karsten Hopp 6c970c
  langmap			Compiled with 'langmap' support.
Karsten Hopp 6c970c
  libcall			Compiled with |libcall()| support.
Karsten Hopp 6c970c
! linebreak		Compiled with 'linebreak', 'breakat' and 'showbreak'
Karsten Hopp 6c970c
! 			support.
Karsten Hopp 6c970c
  lispindent		Compiled with support for lisp indenting.
Karsten Hopp 6c970c
  listcmds		Compiled with commands for the buffer list |:files|
Karsten Hopp 6c970c
  			and the argument list |arglist|.
Karsten Hopp 6c970c
--- 6651,6658 ----
Karsten Hopp 6c970c
  keymap			Compiled with 'keymap' support.
Karsten Hopp 6c970c
  langmap			Compiled with 'langmap' support.
Karsten Hopp 6c970c
  libcall			Compiled with |libcall()| support.
Karsten Hopp 6c970c
! linebreak		Compiled with 'linebreak', 'breakat', 'showbreak' and
Karsten Hopp 6c970c
! 			'breakindent' support.
Karsten Hopp 6c970c
  lispindent		Compiled with support for lisp indenting.
Karsten Hopp 6c970c
  listcmds		Compiled with commands for the buffer list |:files|
Karsten Hopp 6c970c
  			and the argument list |arglist|.
Karsten Hopp 6c970c
*** ../vim-7.4.337/runtime/doc/options.txt	2014-06-17 17:48:21.768628007 +0200
Karsten Hopp 6c970c
--- runtime/doc/options.txt	2014-06-25 12:57:00.986115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1200,1205 ****
Karsten Hopp 6c970c
--- 1200,1237 ----
Karsten Hopp 6c970c
  	break if 'linebreak' is on.  Only works for ASCII and also for 8-bit
Karsten Hopp 6c970c
  	characters when 'encoding' is an 8-bit encoding.
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
+ 						*'breakindent'* *'bri'*
Karsten Hopp 6c970c
+ 'breakindent' 'bri'	boolean (default off)
Karsten Hopp 6c970c
+ 			local to window
Karsten Hopp 6c970c
+ 			{not in Vi}
Karsten Hopp 6c970c
+ 			{not available when compiled without the |+linebreak|
Karsten Hopp 6c970c
+ 			feature}
Karsten Hopp 6c970c
+ 	Every wrapped line will continue visually indented (same amount of
Karsten Hopp 6c970c
+ 	space as the beginning of that line), thus preserving horizontal blocks
Karsten Hopp 6c970c
+ 	of text.
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ 						*'breakindentopt'* *'briopt'*
Karsten Hopp 6c970c
+ 'breakindentopt' 'briopt' string (default empty)
Karsten Hopp 6c970c
+ 			local to window
Karsten Hopp 6c970c
+ 			{not in Vi}
Karsten Hopp 6c970c
+ 			{not available when compiled without the |+linebreak|
Karsten Hopp 6c970c
+ 			feature}
Karsten Hopp 6c970c
+ 	Settings for 'breakindent'. It can consist of the following optional
Karsten Hopp 6c970c
+ 	items and must be seperated by a comma:
Karsten Hopp 6c970c
+ 		min:{n}	    Minimum text width that will be kept after
Karsten Hopp 6c970c
+ 			    applying 'breakindent', even if the resulting
Karsten Hopp 6c970c
+ 			    text should normally be narrower. This prevents
Karsten Hopp 6c970c
+ 			    text indented almost to the right window border
Karsten Hopp 6c970c
+ 			    occupying lot of vertical space when broken.
Karsten Hopp 6c970c
+ 		shift:{n}   After applying 'breakindent', wrapped line
Karsten Hopp 6c970c
+ 			    beginning will be shift by given number of
Karsten Hopp 6c970c
+ 			    characters. It permits dynamic French paragraph
Karsten Hopp 6c970c
+ 			    indentation (negative) or emphasizing the line
Karsten Hopp 6c970c
+ 			    continuation (positive).
Karsten Hopp 6c970c
+ 		sbr	    Display the 'showbreak' value before applying the 
Karsten Hopp 6c970c
+ 			    additional indent.
Karsten Hopp 6c970c
+ 	The default value for min is 20 and shift is 0.
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
  						*'browsedir'* *'bsdir'*
Karsten Hopp 6c970c
  'browsedir' 'bsdir'	string	(default: "last")
Karsten Hopp 6c970c
  			global
Karsten Hopp 6c970c
*** ../vim-7.4.337/runtime/optwin.vim	2014-04-01 12:26:40.241157964 +0200
Karsten Hopp 6c970c
--- runtime/optwin.vim	2014-06-25 12:57:00.990115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 324,329 ****
Karsten Hopp 6c970c
--- 324,335 ----
Karsten Hopp 6c970c
  call append("$", "linebreak\twrap long lines at a character in 'breakat'")
Karsten Hopp 6c970c
  call append("$", "\t(local to window)")
Karsten Hopp 6c970c
  call <SID>BinOptionL("lbr")
Karsten Hopp 6c970c
+ call append("$", "breakindent\tpreserve indentation in wrapped text")
Karsten Hopp 6c970c
+ call append("$", "\t(local to window)")
Karsten Hopp 6c970c
+ call <SID>BinOptionL("bri")
Karsten Hopp 6c970c
+ call append("$", "breakindentopt\tadjust breakindent behaviour")
Karsten Hopp 6c970c
+ call append("$", "\t(local to window)")
Karsten Hopp 6c970c
+ call <SID>OptionL("briopt")
Karsten Hopp 6c970c
  call append("$", "breakat\twhich characters might cause a line break")
Karsten Hopp 6c970c
  call <SID>OptionG("brk", &brk)
Karsten Hopp 6c970c
  call append("$", "showbreak\tstring to put before wrapped screen lines")
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/charset.c	2014-03-23 15:12:29.911264336 +0100
Karsten Hopp 6c970c
--- src/charset.c	2014-06-25 13:23:05.842174966 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 867,875 ****
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      colnr_T	col = startcol;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      while (*s != NUL)
Karsten Hopp 6c970c
! 	col += lbr_chartabsize_adv(&s, col);
Karsten Hopp 6c970c
      return (int)col;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 867,876 ----
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      colnr_T	col = startcol;
Karsten Hopp 6c970c
+     char_u	*line = s; /* pointer to start of line, for breakindent */
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      while (*s != NUL)
Karsten Hopp 6c970c
! 	col += lbr_chartabsize_adv(line, &s, col);
Karsten Hopp 6c970c
      return (int)col;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 877,892 ****
Karsten Hopp 6c970c
   * Like linetabsize(), but for a given window instead of the current one.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! win_linetabsize(wp, p, len)
Karsten Hopp 6c970c
      win_T	*wp;
Karsten Hopp 6c970c
!     char_u	*p;
Karsten Hopp 6c970c
      colnr_T	len;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      colnr_T	col = 0;
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     for (s = p; *s != NUL && (len == MAXCOL || s < p + len); mb_ptr_adv(s))
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, s, col, NULL);
Karsten Hopp 6c970c
      return (int)col;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 878,894 ----
Karsten Hopp 6c970c
   * Like linetabsize(), but for a given window instead of the current one.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! win_linetabsize(wp, line, len)
Karsten Hopp 6c970c
      win_T	*wp;
Karsten Hopp 6c970c
!     char_u	*line;
Karsten Hopp 6c970c
      colnr_T	len;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      colnr_T	col = 0;
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     for (s = line; *s != NUL && (len == MAXCOL || s < line + len);
Karsten Hopp 6c970c
! 								mb_ptr_adv(s))
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, line, s, col, NULL);
Karsten Hopp 6c970c
      return (int)col;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1021,1032 ****
Karsten Hopp 6c970c
   * like chartabsize(), but also check for line breaks on the screen
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! lbr_chartabsize(s, col)
Karsten Hopp 6c970c
      unsigned char	*s;
Karsten Hopp 6c970c
      colnr_T		col;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
!     if (!curwin->w_p_lbr && *p_sbr == NUL)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
--- 1023,1035 ----
Karsten Hopp 6c970c
   * like chartabsize(), but also check for line breaks on the screen
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! lbr_chartabsize(line, s, col)
Karsten Hopp 6c970c
!     char_u		*line; /* start of the line */
Karsten Hopp 6c970c
      unsigned char	*s;
Karsten Hopp 6c970c
      colnr_T		col;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
!     if (!curwin->w_p_lbr && *p_sbr == NUL && !curwin->w_p_bri)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1036,1042 ****
Karsten Hopp 6c970c
  	RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col)
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
!     return win_lbr_chartabsize(curwin, s, col, NULL);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 1039,1045 ----
Karsten Hopp 6c970c
  	RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col)
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
!     return win_lbr_chartabsize(curwin, line == NULL ? s : line, s, col, NULL);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1044,1056 ****
Karsten Hopp 6c970c
   * Call lbr_chartabsize() and advance the pointer.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! lbr_chartabsize_adv(s, col)
Karsten Hopp 6c970c
      char_u	**s;
Karsten Hopp 6c970c
      colnr_T	col;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      int		retval;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     retval = lbr_chartabsize(*s, col);
Karsten Hopp 6c970c
      mb_ptr_adv(*s);
Karsten Hopp 6c970c
      return retval;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
--- 1047,1060 ----
Karsten Hopp 6c970c
   * Call lbr_chartabsize() and advance the pointer.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! lbr_chartabsize_adv(line, s, col)
Karsten Hopp 6c970c
!     char_u	*line; /* start of the line */
Karsten Hopp 6c970c
      char_u	**s;
Karsten Hopp 6c970c
      colnr_T	col;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      int		retval;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     retval = lbr_chartabsize(line, *s, col);
Karsten Hopp 6c970c
      mb_ptr_adv(*s);
Karsten Hopp 6c970c
      return retval;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1063,1070 ****
Karsten Hopp 6c970c
   * value, init to 0 before calling.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! win_lbr_chartabsize(wp, s, col, headp)
Karsten Hopp 6c970c
      win_T	*wp;
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
      colnr_T	col;
Karsten Hopp 6c970c
      int		*headp UNUSED;
Karsten Hopp 6c970c
--- 1067,1075 ----
Karsten Hopp 6c970c
   * value, init to 0 before calling.
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! win_lbr_chartabsize(wp, line, s, col, headp)
Karsten Hopp 6c970c
      win_T	*wp;
Karsten Hopp 6c970c
+     char_u	*line; /* start of the line */
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
      colnr_T	col;
Karsten Hopp 6c970c
      int		*headp UNUSED;
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1086,1094 ****
Karsten Hopp 6c970c
      int		n;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
!      * No 'linebreak' and 'showbreak': return quickly.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
!     if (!wp->w_p_lbr && *p_sbr == NUL)
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
--- 1091,1099 ----
Karsten Hopp 6c970c
      int		n;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
!      * No 'linebreak', 'showbreak' and 'breakindent': return quickly.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
!     if (!wp->w_p_lbr && !wp->w_p_bri && *p_sbr == NUL)
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1163,1173 ****
Karsten Hopp 6c970c
  # endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
!      * May have to add something for 'showbreak' string at start of line
Karsten Hopp 6c970c
       * Set *headp to the size of what we add.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      added = 0;
Karsten Hopp 6c970c
!     if (*p_sbr != NUL && wp->w_p_wrap && col != 0)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	numberextra = win_col_off(wp);
Karsten Hopp 6c970c
  	col += numberextra + mb_added;
Karsten Hopp 6c970c
--- 1168,1179 ----
Karsten Hopp 6c970c
  # endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
!      * May have to add something for 'breakindent' and/or 'showbreak'
Karsten Hopp 6c970c
!      * string at start of line.
Karsten Hopp 6c970c
       * Set *headp to the size of what we add.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      added = 0;
Karsten Hopp 6c970c
!     if ((*p_sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	numberextra = win_col_off(wp);
Karsten Hopp 6c970c
  	col += numberextra + mb_added;
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1180,1186 ****
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    added = vim_strsize(p_sbr);
Karsten Hopp 6c970c
  	    if (tab_corr)
Karsten Hopp 6c970c
  		size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
--- 1186,1197 ----
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    added = 0;
Karsten Hopp 6c970c
! 	    if (*p_sbr != NUL)
Karsten Hopp 6c970c
! 		added += vim_strsize(p_sbr);
Karsten Hopp 6c970c
! 	    if (wp->w_p_bri)
Karsten Hopp 6c970c
! 		added += get_breakindent_win(wp, line);
Karsten Hopp 6c970c
! 
Karsten Hopp 6c970c
  	    if (tab_corr)
Karsten Hopp 6c970c
  		size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1274,1286 ****
Karsten Hopp 6c970c
      colnr_T	vcol;
Karsten Hopp 6c970c
      char_u	*ptr;		/* points to current char */
Karsten Hopp 6c970c
      char_u	*posptr;	/* points to char at pos->col */
Karsten Hopp 6c970c
      int		incr;
Karsten Hopp 6c970c
      int		head;
Karsten Hopp 6c970c
      int		ts = wp->w_buffer->b_p_ts;
Karsten Hopp 6c970c
      int		c;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      vcol = 0;
Karsten Hopp 6c970c
!     ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
Karsten Hopp 6c970c
      if (pos->col == MAXCOL)
Karsten Hopp 6c970c
  	posptr = NULL;  /* continue until the NUL */
Karsten Hopp 6c970c
      else
Karsten Hopp 6c970c
--- 1285,1298 ----
Karsten Hopp 6c970c
      colnr_T	vcol;
Karsten Hopp 6c970c
      char_u	*ptr;		/* points to current char */
Karsten Hopp 6c970c
      char_u	*posptr;	/* points to char at pos->col */
Karsten Hopp 6c970c
+     char_u	*line;		/* start of the line */
Karsten Hopp 6c970c
      int		incr;
Karsten Hopp 6c970c
      int		head;
Karsten Hopp 6c970c
      int		ts = wp->w_buffer->b_p_ts;
Karsten Hopp 6c970c
      int		c;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      vcol = 0;
Karsten Hopp 6c970c
!     line = ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
Karsten Hopp 6c970c
      if (pos->col == MAXCOL)
Karsten Hopp 6c970c
  	posptr = NULL;  /* continue until the NUL */
Karsten Hopp 6c970c
      else
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1288,1299 ****
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
       * This function is used very often, do some speed optimizations.
Karsten Hopp 6c970c
!      * When 'list', 'linebreak' and 'showbreak' are not set use a simple loop.
Karsten Hopp 6c970c
       * Also use this when 'list' is set but tabs take their normal size.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      if ((!wp->w_p_list || lcs_tab1 != NUL)
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
! 	    && !wp->w_p_lbr && *p_sbr == NUL
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
         )
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
--- 1300,1312 ----
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
       * This function is used very often, do some speed optimizations.
Karsten Hopp 6c970c
!      * When 'list', 'linebreak', 'showbreak' and 'breakindent' are not set
Karsten Hopp 6c970c
!      * use a simple loop.
Karsten Hopp 6c970c
       * Also use this when 'list' is set but tabs take their normal size.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      if ((!wp->w_p_list || lcs_tab1 != NUL)
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
! 	    && !wp->w_p_lbr && *p_sbr == NUL && !wp->w_p_bri
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
         )
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1355,1361 ****
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    /* A tab gets expanded, depending on the current column */
Karsten Hopp 6c970c
  	    head = 0;
Karsten Hopp 6c970c
! 	    incr = win_lbr_chartabsize(wp, ptr, vcol, &head;;
Karsten Hopp 6c970c
  	    /* make sure we don't go past the end of the line */
Karsten Hopp 6c970c
  	    if (*ptr == NUL)
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
--- 1368,1374 ----
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    /* A tab gets expanded, depending on the current column */
Karsten Hopp 6c970c
  	    head = 0;
Karsten Hopp 6c970c
! 	    incr = win_lbr_chartabsize(wp, line, ptr, vcol, &head;;
Karsten Hopp 6c970c
  	    /* make sure we don't go past the end of the line */
Karsten Hopp 6c970c
  	    if (*ptr == NUL)
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/edit.c	2014-05-28 21:40:47.092329130 +0200
Karsten Hopp 6c970c
--- src/edit.c	2014-06-25 13:16:43.278160493 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1956,1962 ****
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  		++new_cursor_col;
Karsten Hopp 6c970c
! 	    vcol += lbr_chartabsize(ptr + new_cursor_col, (colnr_T)vcol);
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	vcol = last_vcol;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 1956,1962 ----
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  		++new_cursor_col;
Karsten Hopp 6c970c
! 	    vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol);
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	vcol = last_vcol;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 7126,7134 ****
Karsten Hopp 6c970c
  	for (;;)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    coladvance(v - width);
Karsten Hopp 6c970c
! 	    /* getviscol() is slow, skip it when 'showbreak' is empty and
Karsten Hopp 6c970c
! 	     * there are no multi-byte characters */
Karsten Hopp 6c970c
! 	    if ((*p_sbr == NUL
Karsten Hopp 6c970c
  #  ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  			&& !has_mbyte
Karsten Hopp 6c970c
  #  endif
Karsten Hopp 6c970c
--- 7126,7135 ----
Karsten Hopp 6c970c
  	for (;;)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    coladvance(v - width);
Karsten Hopp 6c970c
! 	    /* getviscol() is slow, skip it when 'showbreak' is empty,
Karsten Hopp 6c970c
! 	     * 'breakindent' is not set and there are no multi-byte
Karsten Hopp 6c970c
! 	     * characters */
Karsten Hopp 6c970c
! 	    if ((*p_sbr == NUL && !curwin->w_p_bri
Karsten Hopp 6c970c
  #  ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  			&& !has_mbyte
Karsten Hopp 6c970c
  #  endif
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 9758,9768 ****
Karsten Hopp 6c970c
  	getvcol(curwin, &fpos, &vcol, NULL, NULL);
Karsten Hopp 6c970c
  	getvcol(curwin, cursor, &want_vcol, NULL, NULL);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
! 	/* Use as many TABs as possible.  Beware of 'showbreak' and
Karsten Hopp 6c970c
! 	 * 'linebreak' adding extra virtual columns. */
Karsten Hopp 6c970c
  	while (vim_iswhite(*ptr))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    i = lbr_chartabsize((char_u *)"\t", vcol);
Karsten Hopp 6c970c
  	    if (vcol + i > want_vcol)
Karsten Hopp 6c970c
  		break;
Karsten Hopp 6c970c
  	    if (*ptr != TAB)
Karsten Hopp 6c970c
--- 9759,9769 ----
Karsten Hopp 6c970c
  	getvcol(curwin, &fpos, &vcol, NULL, NULL);
Karsten Hopp 6c970c
  	getvcol(curwin, cursor, &want_vcol, NULL, NULL);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
! 	/* Use as many TABs as possible.  Beware of 'breakindent', 'showbreak'
Karsten Hopp 6c970c
! 	 * and 'linebreak' adding extra virtual columns. */
Karsten Hopp 6c970c
  	while (vim_iswhite(*ptr))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    i = lbr_chartabsize(NULL, (char_u *)"\t", vcol);
Karsten Hopp 6c970c
  	    if (vcol + i > want_vcol)
Karsten Hopp 6c970c
  		break;
Karsten Hopp 6c970c
  	    if (*ptr != TAB)
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 9784,9794 ****
Karsten Hopp 6c970c
  	if (change_col >= 0)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    int repl_off = 0;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	    /* Skip over the spaces we need. */
Karsten Hopp 6c970c
  	    while (vcol < want_vcol && *ptr == ' ')
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
! 		vcol += lbr_chartabsize(ptr, vcol);
Karsten Hopp 6c970c
  		++ptr;
Karsten Hopp 6c970c
  		++repl_off;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
--- 9785,9796 ----
Karsten Hopp 6c970c
  	if (change_col >= 0)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    int repl_off = 0;
Karsten Hopp 6c970c
+ 	    char_u *line = ptr;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	    /* Skip over the spaces we need. */
Karsten Hopp 6c970c
  	    while (vcol < want_vcol && *ptr == ' ')
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
! 		vcol += lbr_chartabsize(line, ptr, vcol);
Karsten Hopp 6c970c
  		++ptr;
Karsten Hopp 6c970c
  		++repl_off;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10029,10034 ****
Karsten Hopp 6c970c
--- 10031,10037 ----
Karsten Hopp 6c970c
      int	    c;
Karsten Hopp 6c970c
      int	    temp;
Karsten Hopp 6c970c
      char_u  *ptr, *prev_ptr;
Karsten Hopp 6c970c
+     char_u  *line;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10038,10050 ****
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /* try to advance to the cursor column */
Karsten Hopp 6c970c
      temp = 0;
Karsten Hopp 6c970c
!     ptr = ml_get(lnum);
Karsten Hopp 6c970c
      prev_ptr = ptr;
Karsten Hopp 6c970c
      validate_virtcol();
Karsten Hopp 6c970c
      while ((colnr_T)temp < curwin->w_virtcol && *ptr != NUL)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	prev_ptr = ptr;
Karsten Hopp 6c970c
! 	temp += lbr_chartabsize_adv(&ptr, (colnr_T)temp);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
      if ((colnr_T)temp > curwin->w_virtcol)
Karsten Hopp 6c970c
  	ptr = prev_ptr;
Karsten Hopp 6c970c
--- 10041,10053 ----
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /* try to advance to the cursor column */
Karsten Hopp 6c970c
      temp = 0;
Karsten Hopp 6c970c
!     line = ptr = ml_get(lnum);
Karsten Hopp 6c970c
      prev_ptr = ptr;
Karsten Hopp 6c970c
      validate_virtcol();
Karsten Hopp 6c970c
      while ((colnr_T)temp < curwin->w_virtcol && *ptr != NUL)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	prev_ptr = ptr;
Karsten Hopp 6c970c
! 	temp += lbr_chartabsize_adv(line, &ptr, (colnr_T)temp);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
      if ((colnr_T)temp > curwin->w_virtcol)
Karsten Hopp 6c970c
  	ptr = prev_ptr;
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/ex_getln.c	2014-06-25 12:26:42.230046959 +0200
Karsten Hopp 6c970c
--- src/ex_getln.c	2014-06-25 12:57:00.998115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2302,2311 ****
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		p = (char_u *)line_ga.ga_data;
Karsten Hopp 6c970c
  		p[line_ga.ga_len] = NUL;
Karsten Hopp 6c970c
! 		indent = get_indent_str(p, 8);
Karsten Hopp 6c970c
  		indent += sw - indent % sw;
Karsten Hopp 6c970c
  add_indent:
Karsten Hopp 6c970c
! 		while (get_indent_str(p, 8) < indent)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    char_u *s = skipwhite(p);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 2302,2311 ----
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		p = (char_u *)line_ga.ga_data;
Karsten Hopp 6c970c
  		p[line_ga.ga_len] = NUL;
Karsten Hopp 6c970c
! 		indent = get_indent_str(p, 8, FALSE);
Karsten Hopp 6c970c
  		indent += sw - indent % sw;
Karsten Hopp 6c970c
  add_indent:
Karsten Hopp 6c970c
! 		while (get_indent_str(p, 8, FALSE) < indent)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    char_u *s = skipwhite(p);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2357,2367 ****
Karsten Hopp 6c970c
  		else
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    p[line_ga.ga_len] = NUL;
Karsten Hopp 6c970c
! 		    indent = get_indent_str(p, 8);
Karsten Hopp 6c970c
  		    --indent;
Karsten Hopp 6c970c
  		    indent -= indent % get_sw_value(curbuf);
Karsten Hopp 6c970c
  		}
Karsten Hopp 6c970c
! 		while (get_indent_str(p, 8) > indent)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    char_u *s = skipwhite(p);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 2357,2367 ----
Karsten Hopp 6c970c
  		else
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    p[line_ga.ga_len] = NUL;
Karsten Hopp 6c970c
! 		    indent = get_indent_str(p, 8, FALSE);
Karsten Hopp 6c970c
  		    --indent;
Karsten Hopp 6c970c
  		    indent -= indent % get_sw_value(curbuf);
Karsten Hopp 6c970c
  		}
Karsten Hopp 6c970c
! 		while (get_indent_str(p, 8, FALSE) > indent)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
  		    char_u *s = skipwhite(p);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/getchar.c	2014-05-22 18:59:54.510169240 +0200
Karsten Hopp 6c970c
--- src/getchar.c	2014-06-25 13:16:53.946160896 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2675,2681 ****
Karsten Hopp 6c970c
  				{
Karsten Hopp 6c970c
  				    if (!vim_iswhite(ptr[col]))
Karsten Hopp 6c970c
  					curwin->w_wcol = vcol;
Karsten Hopp 6c970c
! 				    vcol += lbr_chartabsize(ptr + col,
Karsten Hopp 6c970c
  							       (colnr_T)vcol);
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  				    if (has_mbyte)
Karsten Hopp 6c970c
--- 2675,2681 ----
Karsten Hopp 6c970c
  				{
Karsten Hopp 6c970c
  				    if (!vim_iswhite(ptr[col]))
Karsten Hopp 6c970c
  					curwin->w_wcol = vcol;
Karsten Hopp 6c970c
! 				    vcol += lbr_chartabsize(ptr, ptr + col,
Karsten Hopp 6c970c
  							       (colnr_T)vcol);
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  				    if (has_mbyte)
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/misc1.c	2014-05-22 14:00:12.698534712 +0200
Karsten Hopp 6c970c
--- src/misc1.c	2014-06-25 13:39:43.598212712 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 32,38 ****
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
  get_indent()
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
--- 32,38 ----
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
  get_indent()
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 42,48 ****
Karsten Hopp 6c970c
  get_indent_lnum(lnum)
Karsten Hopp 6c970c
      linenr_T	lnum;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  #if defined(FEAT_FOLDING) || defined(PROTO)
Karsten Hopp 6c970c
--- 42,48 ----
Karsten Hopp 6c970c
  get_indent_lnum(lnum)
Karsten Hopp 6c970c
      linenr_T	lnum;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  #if defined(FEAT_FOLDING) || defined(PROTO)
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 55,61 ****
Karsten Hopp 6c970c
      buf_T	*buf;
Karsten Hopp 6c970c
      linenr_T	lnum;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 55,61 ----
Karsten Hopp 6c970c
      buf_T	*buf;
Karsten Hopp 6c970c
      linenr_T	lnum;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
!     return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 64,79 ****
Karsten Hopp 6c970c
   * 'tabstop' at "ts"
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! get_indent_str(ptr, ts)
Karsten Hopp 6c970c
      char_u	*ptr;
Karsten Hopp 6c970c
      int		ts;
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      int		count = 0;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      for ( ; *ptr; ++ptr)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	if (*ptr == TAB)    /* count a tab for what it is worth */
Karsten Hopp 6c970c
! 	    count += ts - (count % ts);
Karsten Hopp 6c970c
  	else if (*ptr == ' ')
Karsten Hopp 6c970c
  	    ++count;		/* count a space for one */
Karsten Hopp 6c970c
  	else
Karsten Hopp 6c970c
--- 64,86 ----
Karsten Hopp 6c970c
   * 'tabstop' at "ts"
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
      int
Karsten Hopp 6c970c
! get_indent_str(ptr, ts, list)
Karsten Hopp 6c970c
      char_u	*ptr;
Karsten Hopp 6c970c
      int		ts;
Karsten Hopp 6c970c
+     int		list; /* if TRUE, count only screen size for tabs */
Karsten Hopp 6c970c
  {
Karsten Hopp 6c970c
      int		count = 0;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      for ( ; *ptr; ++ptr)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	if (*ptr == TAB)
Karsten Hopp 6c970c
! 	{
Karsten Hopp 6c970c
! 	    if (!list || lcs_tab1)    /* count a tab for what it is worth */
Karsten Hopp 6c970c
! 		count += ts - (count % ts);
Karsten Hopp 6c970c
! 	    else
Karsten Hopp 6c970c
! 	/* in list mode, when tab is not set, count screen char width for Tab: ^I */
Karsten Hopp 6c970c
! 		count += ptr2cells(ptr);
Karsten Hopp 6c970c
! 	}
Karsten Hopp 6c970c
  	else if (*ptr == ' ')
Karsten Hopp 6c970c
  	    ++count;		/* count a space for one */
Karsten Hopp 6c970c
  	else
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 476,481 ****
Karsten Hopp 6c970c
--- 483,540 ----
Karsten Hopp 6c970c
      return (int)col;
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
+ #if defined(FEAT_LINEBREAK) || defined(PROTO)
Karsten Hopp 6c970c
+ /*
Karsten Hopp 6c970c
+  * Return appropriate space number for breakindent, taking influencing
Karsten Hopp 6c970c
+  * parameters into account. Window must be specified, since it is not
Karsten Hopp 6c970c
+  * necessarily always the current one.
Karsten Hopp 6c970c
+  */
Karsten Hopp 6c970c
+     int
Karsten Hopp 6c970c
+ get_breakindent_win(wp, line)
Karsten Hopp 6c970c
+     win_T	*wp;
Karsten Hopp 6c970c
+     char_u	*line; /* start of the line */
Karsten Hopp 6c970c
+ {
Karsten Hopp 6c970c
+     static int	    prev_indent = 0;  /* cached indent value */
Karsten Hopp 6c970c
+     static long	    prev_ts     = 0L; /* cached tabstop value */
Karsten Hopp 6c970c
+     static char_u   *prev_line = NULL; /* cached pointer to line */
Karsten Hopp 6c970c
+     int		    bri = 0;
Karsten Hopp 6c970c
+     /* window width minus window margin space, i.e. what rests for text */
Karsten Hopp 6c970c
+     const int	    eff_wwidth = W_WIDTH(wp)
Karsten Hopp 6c970c
+ 			    - ((wp->w_p_nu || wp->w_p_rnu)
Karsten Hopp 6c970c
+ 				&& (vim_strchr(p_cpo, CPO_NUMCOL) == NULL)
Karsten Hopp 6c970c
+ 						? number_width(wp) + 1 : 0);
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     /* used cached indent, unless pointer or 'tabstop' changed */
Karsten Hopp 6c970c
+     if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts)
Karsten Hopp 6c970c
+     {
Karsten Hopp 6c970c
+ 	prev_line = line;
Karsten Hopp 6c970c
+ 	prev_ts = wp->w_buffer->b_p_ts;
Karsten Hopp 6c970c
+ 	prev_indent = get_indent_str(line,
Karsten Hopp 6c970c
+ 		  (int)wp->w_buffer->b_p_ts, wp->w_p_list) + wp->w_p_brishift;
Karsten Hopp 6c970c
+     }
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     /* indent minus the length of the showbreak string */
Karsten Hopp 6c970c
+     bri = prev_indent;
Karsten Hopp 6c970c
+     if (wp->w_p_brisbr)
Karsten Hopp 6c970c
+ 	bri -= vim_strsize(p_sbr);
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     /* Add offset for number column, if 'n' is in 'cpoptions' */
Karsten Hopp 6c970c
+     bri += win_col_off2(wp);
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     /* never indent past left window margin */
Karsten Hopp 6c970c
+     if (bri < 0)
Karsten Hopp 6c970c
+ 	bri = 0;
Karsten Hopp 6c970c
+     /* always leave at least bri_min characters on the left,
Karsten Hopp 6c970c
+      * if text width is sufficient */
Karsten Hopp 6c970c
+     else if (bri > eff_wwidth - wp->w_p_brimin)
Karsten Hopp 6c970c
+ 	bri = (eff_wwidth - wp->w_p_brimin < 0)
Karsten Hopp 6c970c
+ 			    ? 0 : eff_wwidth - wp->w_p_brimin;
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     return bri;
Karsten Hopp 6c970c
+ }
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
  #if defined(FEAT_CINDENT) || defined(FEAT_SMARTINDENT)
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  static int cin_is_cinword __ARGS((char_u *line));
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 678,684 ****
Karsten Hopp 6c970c
  	/*
Karsten Hopp 6c970c
  	 * count white space on current line
Karsten Hopp 6c970c
  	 */
Karsten Hopp 6c970c
! 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
Karsten Hopp 6c970c
  	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
Karsten Hopp 6c970c
  	    newindent = second_line_indent; /* for ^^D command in insert mode */
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 737,743 ----
Karsten Hopp 6c970c
  	/*
Karsten Hopp 6c970c
  	 * count white space on current line
Karsten Hopp 6c970c
  	 */
Karsten Hopp 6c970c
! 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE);
Karsten Hopp 6c970c
  	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
Karsten Hopp 6c970c
  	    newindent = second_line_indent; /* for ^^D command in insert mode */
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1201,1207 ****
Karsten Hopp 6c970c
  					|| do_si
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  							   )
Karsten Hopp 6c970c
! 			newindent = get_indent_str(leader, (int)curbuf->b_p_ts);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		    /* Add the indent offset */
Karsten Hopp 6c970c
  		    if (newindent + off < 0)
Karsten Hopp 6c970c
--- 1260,1266 ----
Karsten Hopp 6c970c
  					|| do_si
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  							   )
Karsten Hopp 6c970c
! 			newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		    /* Add the indent offset */
Karsten Hopp 6c970c
  		    if (newindent + off < 0)
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1994,1999 ****
Karsten Hopp 6c970c
--- 2053,2059 ----
Karsten Hopp 6c970c
      char_u	*s;
Karsten Hopp 6c970c
      int		lines = 0;
Karsten Hopp 6c970c
      int		width;
Karsten Hopp 6c970c
+     char_u	*line;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  #ifdef FEAT_DIFF
Karsten Hopp 6c970c
      /* Check for filler lines above this buffer line.  When folded the result
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2009,2020 ****
Karsten Hopp 6c970c
  	return lines + 1;
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     s = ml_get_buf(wp->w_buffer, lnum, FALSE);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      col = 0;
Karsten Hopp 6c970c
      while (*s != NUL && --column >= 0)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL);
Karsten Hopp 6c970c
  	mb_ptr_adv(s);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 2069,2080 ----
Karsten Hopp 6c970c
  	return lines + 1;
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     line = s = ml_get_buf(wp->w_buffer, lnum, FALSE);
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      col = 0;
Karsten Hopp 6c970c
      while (*s != NUL && --column >= 0)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL);
Karsten Hopp 6c970c
  	mb_ptr_adv(s);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2026,2032 ****
Karsten Hopp 6c970c
       * 'ts') -- webb.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      if (*s == TAB && (State & NORMAL) && (!wp->w_p_list || lcs_tab1))
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL) - 1;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
       * Add column offset for 'number', 'relativenumber', 'foldcolumn', etc.
Karsten Hopp 6c970c
--- 2086,2092 ----
Karsten Hopp 6c970c
       * 'ts') -- webb.
Karsten Hopp 6c970c
       */
Karsten Hopp 6c970c
      if (*s == TAB && (State & NORMAL) && (!wp->w_p_list || lcs_tab1))
Karsten Hopp 6c970c
! 	col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL) - 1;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
       * Add column offset for 'number', 'relativenumber', 'foldcolumn', etc.
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 9002,9011 ****
Karsten Hopp 6c970c
  		amount = 2;
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
  		amount = 0;
Karsten Hopp 6c970c
  		while (*that && col)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
! 		    amount += lbr_chartabsize_adv(&that, (colnr_T)amount);
Karsten Hopp 6c970c
  		    col--;
Karsten Hopp 6c970c
  		}
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 9062,9073 ----
Karsten Hopp 6c970c
  		amount = 2;
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
+ 		char_u *line = that;
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
  		amount = 0;
Karsten Hopp 6c970c
  		while (*that && col)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
! 		    amount += lbr_chartabsize_adv(line, &that, (colnr_T)amount);
Karsten Hopp 6c970c
  		    col--;
Karsten Hopp 6c970c
  		}
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 9028,9034 ****
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		    while (vim_iswhite(*that))
Karsten Hopp 6c970c
  		    {
Karsten Hopp 6c970c
! 			amount += lbr_chartabsize(that, (colnr_T)amount);
Karsten Hopp 6c970c
  			++that;
Karsten Hopp 6c970c
  		    }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 9090,9096 ----
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  		    while (vim_iswhite(*that))
Karsten Hopp 6c970c
  		    {
Karsten Hopp 6c970c
! 			amount += lbr_chartabsize(line, that, (colnr_T)amount);
Karsten Hopp 6c970c
  			++that;
Karsten Hopp 6c970c
  		    }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 9066,9080 ****
Karsten Hopp 6c970c
  							       && !quotecount)
Karsten Hopp 6c970c
  				    --parencount;
Karsten Hopp 6c970c
  				if (*that == '\\' && *(that+1) != NUL)
Karsten Hopp 6c970c
! 				    amount += lbr_chartabsize_adv(&that,
Karsten Hopp 6c970c
! 							     (colnr_T)amount);
Karsten Hopp 6c970c
! 				amount += lbr_chartabsize_adv(&that,
Karsten Hopp 6c970c
! 							     (colnr_T)amount);
Karsten Hopp 6c970c
  			    }
Karsten Hopp 6c970c
  			}
Karsten Hopp 6c970c
  			while (vim_iswhite(*that))
Karsten Hopp 6c970c
  			{
Karsten Hopp 6c970c
! 			    amount += lbr_chartabsize(that, (colnr_T)amount);
Karsten Hopp 6c970c
  			    that++;
Karsten Hopp 6c970c
  			}
Karsten Hopp 6c970c
  			if (!*that || *that == ';')
Karsten Hopp 6c970c
--- 9128,9143 ----
Karsten Hopp 6c970c
  							       && !quotecount)
Karsten Hopp 6c970c
  				    --parencount;
Karsten Hopp 6c970c
  				if (*that == '\\' && *(that+1) != NUL)
Karsten Hopp 6c970c
! 				    amount += lbr_chartabsize_adv(
Karsten Hopp 6c970c
! 						line, &that, (colnr_T)amount);
Karsten Hopp 6c970c
! 				amount += lbr_chartabsize_adv(
Karsten Hopp 6c970c
! 						line, &that, (colnr_T)amount);
Karsten Hopp 6c970c
  			    }
Karsten Hopp 6c970c
  			}
Karsten Hopp 6c970c
  			while (vim_iswhite(*that))
Karsten Hopp 6c970c
  			{
Karsten Hopp 6c970c
! 			    amount += lbr_chartabsize(
Karsten Hopp 6c970c
! 						 line, that, (colnr_T)amount);
Karsten Hopp 6c970c
  			    that++;
Karsten Hopp 6c970c
  			}
Karsten Hopp 6c970c
  			if (!*that || *that == ';')
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/misc2.c	2014-05-07 18:35:25.669216052 +0200
Karsten Hopp 6c970c
--- src/misc2.c	2014-06-25 13:21:18.474170904 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 201,210 ****
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    /* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
! 	    csize = win_lbr_chartabsize(curwin, ptr, col, &head;;
Karsten Hopp 6c970c
  	    mb_ptr_adv(ptr);
Karsten Hopp 6c970c
  #else
Karsten Hopp 6c970c
! 	    csize = lbr_chartabsize_adv(&ptr, col);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  	    col += csize;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
--- 201,210 ----
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    /* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
! 	    csize = win_lbr_chartabsize(curwin, line, ptr, col, &head;;
Karsten Hopp 6c970c
  	    mb_ptr_adv(ptr);
Karsten Hopp 6c970c
  #else
Karsten Hopp 6c970c
! 	    csize = lbr_chartabsize_adv(line, &ptr, col);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  	    col += csize;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2156,2162 ****
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
   * Append the text in "gap" below the cursor line and clear "gap".
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
--- 2156,2163 ----
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
! #if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264) \
Karsten Hopp 6c970c
! 	|| defined(PROTO)
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
   * Append the text in "gap" below the cursor line and clear "gap".
Karsten Hopp 6c970c
   */
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/ops.c	2014-06-17 18:16:08.420691059 +0200
Karsten Hopp 6c970c
--- src/ops.c	2014-06-25 13:18:27.082164420 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 420,426 ****
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	for ( ; vim_iswhite(*bd.textstart); )
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize_adv(&bd.textstart, (colnr_T)(bd.start_vcol));
Karsten Hopp 6c970c
  	    total += incr;
Karsten Hopp 6c970c
  	    bd.start_vcol += incr;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
--- 420,428 ----
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  	for ( ; vim_iswhite(*bd.textstart); )
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    /* TODO: is passing bd.textstart for start of the line OK? */
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize_adv(bd.textstart, &bd.textstart,
Karsten Hopp 6c970c
! 						    (colnr_T)(bd.start_vcol));
Karsten Hopp 6c970c
  	    total += incr;
Karsten Hopp 6c970c
  	    bd.start_vcol += incr;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 480,486 ****
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	while (vim_iswhite(*non_white))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize_adv(&non_white, non_white_col);
Karsten Hopp 6c970c
  	    non_white_col += incr;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 482,488 ----
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	while (vim_iswhite(*non_white))
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize_adv(bd.textstart, &non_white, non_white_col);
Karsten Hopp 6c970c
  	    non_white_col += incr;
Karsten Hopp 6c970c
  	}
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 505,511 ****
Karsten Hopp 6c970c
  	    verbatim_copy_width -= bd.start_char_vcols;
Karsten Hopp 6c970c
  	while (verbatim_copy_width < destination_col)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width);
Karsten Hopp 6c970c
  	    if (verbatim_copy_width + incr > destination_col)
Karsten Hopp 6c970c
  		break;
Karsten Hopp 6c970c
  	    verbatim_copy_width += incr;
Karsten Hopp 6c970c
--- 507,517 ----
Karsten Hopp 6c970c
  	    verbatim_copy_width -= bd.start_char_vcols;
Karsten Hopp 6c970c
  	while (verbatim_copy_width < destination_col)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    char_u *line = verbatim_copy_end;
Karsten Hopp 6c970c
! 
Karsten Hopp 6c970c
! 	    /* TODO: is passing verbatim_copy_end for start of the line OK? */
Karsten Hopp 6c970c
! 	    incr = lbr_chartabsize(line, verbatim_copy_end,
Karsten Hopp 6c970c
! 							 verbatim_copy_width);
Karsten Hopp 6c970c
  	    if (verbatim_copy_width + incr > destination_col)
Karsten Hopp 6c970c
  		break;
Karsten Hopp 6c970c
  	    verbatim_copy_width += incr;
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 3617,3623 ****
Karsten Hopp 6c970c
  	    for (ptr = oldp; vcol < col && *ptr; )
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
  		/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
! 		incr = lbr_chartabsize_adv(&ptr, (colnr_T)vcol);
Karsten Hopp 6c970c
  		vcol += incr;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
  	    bd.textcol = (colnr_T)(ptr - oldp);
Karsten Hopp 6c970c
--- 3623,3629 ----
Karsten Hopp 6c970c
  	    for (ptr = oldp; vcol < col && *ptr; )
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
  		/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
! 		incr = lbr_chartabsize_adv(oldp, &ptr, (colnr_T)vcol);
Karsten Hopp 6c970c
  		vcol += incr;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
  	    bd.textcol = (colnr_T)(ptr - oldp);
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 3651,3657 ****
Karsten Hopp 6c970c
  	    /* calculate number of spaces required to fill right side of block*/
Karsten Hopp 6c970c
  	    spaces = y_width + 1;
Karsten Hopp 6c970c
  	    for (j = 0; j < yanklen; j++)
Karsten Hopp 6c970c
! 		spaces -= lbr_chartabsize(&y_array[i][j], 0);
Karsten Hopp 6c970c
  	    if (spaces < 0)
Karsten Hopp 6c970c
  		spaces = 0;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 3657,3663 ----
Karsten Hopp 6c970c
  	    /* calculate number of spaces required to fill right side of block*/
Karsten Hopp 6c970c
  	    spaces = y_width + 1;
Karsten Hopp 6c970c
  	    for (j = 0; j < yanklen; j++)
Karsten Hopp 6c970c
! 		spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0);
Karsten Hopp 6c970c
  	    if (spaces < 0)
Karsten Hopp 6c970c
  		spaces = 0;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 5203,5209 ****
Karsten Hopp 6c970c
      while (bdp->start_vcol < oap->start_vcol && *pstart)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
! 	incr = lbr_chartabsize(pstart, (colnr_T)bdp->start_vcol);
Karsten Hopp 6c970c
  	bdp->start_vcol += incr;
Karsten Hopp 6c970c
  #ifdef FEAT_VISUALEXTRA
Karsten Hopp 6c970c
  	if (vim_iswhite(*pstart))
Karsten Hopp 6c970c
--- 5209,5215 ----
Karsten Hopp 6c970c
      while (bdp->start_vcol < oap->start_vcol && *pstart)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
  	/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
! 	incr = lbr_chartabsize(line, pstart, (colnr_T)bdp->start_vcol);
Karsten Hopp 6c970c
  	bdp->start_vcol += incr;
Karsten Hopp 6c970c
  #ifdef FEAT_VISUALEXTRA
Karsten Hopp 6c970c
  	if (vim_iswhite(*pstart))
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 5272,5278 ****
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
  		/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
  		prev_pend = pend;
Karsten Hopp 6c970c
! 		incr = lbr_chartabsize_adv(&pend, (colnr_T)bdp->end_vcol);
Karsten Hopp 6c970c
  		bdp->end_vcol += incr;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
  	    if (bdp->end_vcol <= oap->end_vcol
Karsten Hopp 6c970c
--- 5278,5287 ----
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
  		/* Count a tab for what it's worth (if list mode not on) */
Karsten Hopp 6c970c
  		prev_pend = pend;
Karsten Hopp 6c970c
! 		/* TODO: is passing prev_pend for start of the line OK?
Karsten Hopp 6c970c
! 		 * perhaps it should be "line". */
Karsten Hopp 6c970c
! 		incr = lbr_chartabsize_adv(prev_pend, &pend,
Karsten Hopp 6c970c
! 						      (colnr_T)bdp->end_vcol);
Karsten Hopp 6c970c
  		bdp->end_vcol += incr;
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
  	    if (bdp->end_vcol <= oap->end_vcol
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 6882,6888 ****
Karsten Hopp 6c970c
  	    validate_virtcol();
Karsten Hopp 6c970c
  	    col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
Karsten Hopp 6c970c
  		    (int)curwin->w_virtcol + 1);
Karsten Hopp 6c970c
! 	    col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p));
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	    if (char_count_cursor == byte_count_cursor
Karsten Hopp 6c970c
  		    && char_count == byte_count)
Karsten Hopp 6c970c
--- 6891,6898 ----
Karsten Hopp 6c970c
  	    validate_virtcol();
Karsten Hopp 6c970c
  	    col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
Karsten Hopp 6c970c
  		    (int)curwin->w_virtcol + 1);
Karsten Hopp 6c970c
! 	    col_print(buf2, sizeof(buf2), (int)STRLEN(p),
Karsten Hopp 6c970c
! 				linetabsize(p));
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  	    if (char_count_cursor == byte_count_cursor
Karsten Hopp 6c970c
  		    && char_count == byte_count)
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/option.c	2014-06-25 11:48:40.733960646 +0200
Karsten Hopp 6c970c
--- src/option.c	2014-06-25 14:31:41.630330672 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 188,193 ****
Karsten Hopp 6c970c
--- 188,197 ----
Karsten Hopp 6c970c
  #ifdef FEAT_ARABIC
Karsten Hopp 6c970c
  # define PV_ARAB	OPT_WIN(WV_ARAB)
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+ # define PV_BRI		OPT_WIN(WV_BRI)
Karsten Hopp 6c970c
+ # define PV_BRIOPT	OPT_WIN(WV_BRIOPT)
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  #ifdef FEAT_DIFF
Karsten Hopp 6c970c
  # define PV_DIFF	OPT_WIN(WV_DIFF)
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 648,653 ****
Karsten Hopp 6c970c
--- 652,675 ----
Karsten Hopp 6c970c
  			    {(char_u *)0L, (char_u *)0L}
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  			    SCRIPTID_INIT},
Karsten Hopp 6c970c
+     {"breakindent",   "bri",  P_BOOL|P_VI_DEF|P_VIM|P_RWIN,
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+ 			    (char_u *)VAR_WIN, PV_BRI,
Karsten Hopp 6c970c
+ 			    {(char_u *)FALSE, (char_u *)0L}
Karsten Hopp 6c970c
+ #else
Karsten Hopp 6c970c
+ 			    (char_u *)NULL, PV_NONE,
Karsten Hopp 6c970c
+ 			    {(char_u *)0L, (char_u *)0L}
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 			    SCRIPTID_INIT},
Karsten Hopp 6c970c
+     {"breakindentopt", "briopt", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_COMMA|P_NODUP,
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+ 			    (char_u *)VAR_WIN, PV_BRIOPT,
Karsten Hopp 6c970c
+ 			    {(char_u *)"", (char_u *)NULL}
Karsten Hopp 6c970c
+ #else
Karsten Hopp 6c970c
+ 			    (char_u *)NULL, PV_NONE,
Karsten Hopp 6c970c
+ 			    {(char_u *)"", (char_u *)NULL}
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 			    SCRIPTID_INIT},
Karsten Hopp 6c970c
      {"browsedir",   "bsdir",P_STRING|P_VI_DEF,
Karsten Hopp 6c970c
  #ifdef FEAT_BROWSE
Karsten Hopp 6c970c
  			    (char_u *)&p_bsdir, PV_NONE,
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 5256,5261 ****
Karsten Hopp 6c970c
--- 5278,5286 ----
Karsten Hopp 6c970c
      /* set cedit_key */
Karsten Hopp 6c970c
      (void)check_cedit();
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     briopt_check();
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 5709,5714 ****
Karsten Hopp 6c970c
--- 5734,5747 ----
Karsten Hopp 6c970c
  		     *p_pm == '.' ? p_pm + 1 : p_pm) == 0)
Karsten Hopp 6c970c
  	    errmsg = (char_u *)N_("E589: 'backupext' and 'patchmode' are equal");
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     /* 'breakindentopt' */
Karsten Hopp 6c970c
+     else if (varp == &curwin->w_p_briopt)
Karsten Hopp 6c970c
+     {
Karsten Hopp 6c970c
+ 	if (briopt_check() == FAIL)
Karsten Hopp 6c970c
+ 	    errmsg = e_invarg;
Karsten Hopp 6c970c
+     }
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /*
Karsten Hopp 6c970c
       * 'isident', 'iskeyword', 'isprint or 'isfname' option: refill chartab[]
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10018,10023 ****
Karsten Hopp 6c970c
--- 10051,10058 ----
Karsten Hopp 6c970c
  	case PV_WRAP:	return (char_u *)&(curwin->w_p_wrap);
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
  	case PV_LBR:	return (char_u *)&(curwin->w_p_lbr);
Karsten Hopp 6c970c
+ 	case PV_BRI:	return (char_u *)&(curwin->w_p_bri);
Karsten Hopp 6c970c
+ 	case PV_BRIOPT: return (char_u *)&(curwin->w_p_briopt);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #ifdef FEAT_SCROLLBIND
Karsten Hopp 6c970c
  	case PV_SCBIND: return (char_u *)&(curwin->w_p_scb);
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10207,10212 ****
Karsten Hopp 6c970c
--- 10242,10249 ----
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
      to->wo_lbr = from->wo_lbr;
Karsten Hopp 6c970c
+     to->wo_bri = from->wo_bri;
Karsten Hopp 6c970c
+     to->wo_briopt = vim_strsave(from->wo_briopt);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #ifdef FEAT_SCROLLBIND
Karsten Hopp 6c970c
      to->wo_scb = from->wo_scb;
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10294,10299 ****
Karsten Hopp 6c970c
--- 10331,10339 ----
Karsten Hopp 6c970c
  #ifdef FEAT_CONCEAL
Karsten Hopp 6c970c
      check_string_option(&wop->wo_cocu);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     check_string_option(&wop->wo_briopt);
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  /*
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 10313,10318 ****
Karsten Hopp 6c970c
--- 10353,10361 ----
Karsten Hopp 6c970c
  # endif
Karsten Hopp 6c970c
      clear_string_option(&wop->wo_fmr);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     clear_string_option(&wop->wo_briopt);
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  #ifdef FEAT_RIGHTLEFT
Karsten Hopp 6c970c
      clear_string_option(&wop->wo_rlc);
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 11927,11929 ****
Karsten Hopp 6c970c
--- 11970,12018 ----
Karsten Hopp 6c970c
  	    ++ptr;
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ #if defined(FEAT_LINEBREAK) || defined(PROTO)
Karsten Hopp 6c970c
+ /*
Karsten Hopp 6c970c
+  * This is called when 'breakindentopt' is changed and when a window is
Karsten Hopp 6c970c
+  * initialized.
Karsten Hopp 6c970c
+  */
Karsten Hopp 6c970c
+     int
Karsten Hopp 6c970c
+ briopt_check()
Karsten Hopp 6c970c
+ {
Karsten Hopp 6c970c
+     char_u	*p;
Karsten Hopp 6c970c
+     int		bri_shift = 0;
Karsten Hopp 6c970c
+     long	bri_min = 20;
Karsten Hopp 6c970c
+     int		bri_sbr = FALSE;
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     p = curwin->w_p_briopt;
Karsten Hopp 6c970c
+     while (*p != NUL)
Karsten Hopp 6c970c
+     {
Karsten Hopp 6c970c
+ 	if (STRNCMP(p, "shift:", 6) == 0
Karsten Hopp 6c970c
+ 		 && ((p[6] == '-' && VIM_ISDIGIT(p[7])) || VIM_ISDIGIT(p[6])))
Karsten Hopp 6c970c
+ 	{
Karsten Hopp 6c970c
+ 	    p += 6;
Karsten Hopp 6c970c
+ 	    bri_shift = getdigits(&p);
Karsten Hopp 6c970c
+ 	}
Karsten Hopp 6c970c
+ 	else if (STRNCMP(p, "min:", 4) == 0 && VIM_ISDIGIT(p[4]))
Karsten Hopp 6c970c
+ 	{
Karsten Hopp 6c970c
+ 	    p += 4;
Karsten Hopp 6c970c
+ 	    bri_min = getdigits(&p);
Karsten Hopp 6c970c
+ 	}
Karsten Hopp 6c970c
+ 	else if (STRNCMP(p, "sbr", 3) == 0)
Karsten Hopp 6c970c
+ 	{
Karsten Hopp 6c970c
+ 	    p += 3;
Karsten Hopp 6c970c
+ 	    bri_sbr = TRUE;
Karsten Hopp 6c970c
+ 	}
Karsten Hopp 6c970c
+ 	if (*p != ',' && *p != NUL)
Karsten Hopp 6c970c
+ 	    return FAIL;
Karsten Hopp 6c970c
+ 	if (*p == ',')
Karsten Hopp 6c970c
+ 	    ++p;
Karsten Hopp 6c970c
+     }
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     curwin->w_p_brishift = bri_shift;
Karsten Hopp 6c970c
+     curwin->w_p_brimin   = bri_min;
Karsten Hopp 6c970c
+     curwin->w_p_brisbr   = bri_sbr;
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+     return OK;
Karsten Hopp 6c970c
+ }
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/option.h	2014-05-28 21:40:47.092329130 +0200
Karsten Hopp 6c970c
--- src/option.h	2014-06-25 12:57:01.002115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 1052,1057 ****
Karsten Hopp 6c970c
--- 1052,1061 ----
Karsten Hopp 6c970c
  #ifdef FEAT_CURSORBIND
Karsten Hopp 6c970c
      , WV_CRBIND
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     , WV_BRI
Karsten Hopp 6c970c
+     , WV_BRIOPT
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  #ifdef FEAT_DIFF
Karsten Hopp 6c970c
      , WV_DIFF
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/proto/charset.pro	2013-08-10 13:37:07.000000000 +0200
Karsten Hopp 6c970c
--- src/proto/charset.pro	2014-06-25 13:22:32.934173721 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 16,22 ****
Karsten Hopp 6c970c
  int chartabsize __ARGS((char_u *p, colnr_T col));
Karsten Hopp 6c970c
  int linetabsize __ARGS((char_u *s));
Karsten Hopp 6c970c
  int linetabsize_col __ARGS((int startcol, char_u *s));
Karsten Hopp 6c970c
! int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
Karsten Hopp 6c970c
  int vim_isIDc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_iswordc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_iswordc_buf __ARGS((int c, buf_T *buf));
Karsten Hopp 6c970c
--- 16,22 ----
Karsten Hopp 6c970c
  int chartabsize __ARGS((char_u *p, colnr_T col));
Karsten Hopp 6c970c
  int linetabsize __ARGS((char_u *s));
Karsten Hopp 6c970c
  int linetabsize_col __ARGS((int startcol, char_u *s));
Karsten Hopp 6c970c
! int win_linetabsize __ARGS((win_T *wp, char_u *line, colnr_T len));
Karsten Hopp 6c970c
  int vim_isIDc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_iswordc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_iswordc_buf __ARGS((int c, buf_T *buf));
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 26,34 ****
Karsten Hopp 6c970c
  int vim_isfilec_or_wc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_isprintc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_isprintc_strict __ARGS((int c));
Karsten Hopp 6c970c
! int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
Karsten Hopp 6c970c
! int lbr_chartabsize_adv __ARGS((char_u **s, colnr_T col));
Karsten Hopp 6c970c
! int win_lbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
Karsten Hopp 6c970c
  int in_win_border __ARGS((win_T *wp, colnr_T vcol));
Karsten Hopp 6c970c
  void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
Karsten Hopp 6c970c
  colnr_T getvcol_nolist __ARGS((pos_T *posp));
Karsten Hopp 6c970c
--- 26,34 ----
Karsten Hopp 6c970c
  int vim_isfilec_or_wc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_isprintc __ARGS((int c));
Karsten Hopp 6c970c
  int vim_isprintc_strict __ARGS((int c));
Karsten Hopp 6c970c
! int lbr_chartabsize __ARGS((char_u *line, unsigned char *s, colnr_T col));
Karsten Hopp 6c970c
! int lbr_chartabsize_adv __ARGS((char_u *line, char_u **s, colnr_T col));
Karsten Hopp 6c970c
! int win_lbr_chartabsize __ARGS((win_T *wp, char_u *line, char_u *s, colnr_T col, int *headp));
Karsten Hopp 6c970c
  int in_win_border __ARGS((win_T *wp, colnr_T vcol));
Karsten Hopp 6c970c
  void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
Karsten Hopp 6c970c
  colnr_T getvcol_nolist __ARGS((pos_T *posp));
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/proto/misc1.pro	2014-05-07 15:10:17.661108310 +0200
Karsten Hopp 6c970c
--- src/proto/misc1.pro	2014-06-25 12:57:01.002115765 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2,10 ****
Karsten Hopp 6c970c
  int get_indent __ARGS((void));
Karsten Hopp 6c970c
  int get_indent_lnum __ARGS((linenr_T lnum));
Karsten Hopp 6c970c
  int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
Karsten Hopp 6c970c
! int get_indent_str __ARGS((char_u *ptr, int ts));
Karsten Hopp 6c970c
  int set_indent __ARGS((int size, int flags));
Karsten Hopp 6c970c
  int get_number_indent __ARGS((linenr_T lnum));
Karsten Hopp 6c970c
  int open_line __ARGS((int dir, int flags, int second_line_indent));
Karsten Hopp 6c970c
  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
Karsten Hopp 6c970c
  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
Karsten Hopp 6c970c
--- 2,11 ----
Karsten Hopp 6c970c
  int get_indent __ARGS((void));
Karsten Hopp 6c970c
  int get_indent_lnum __ARGS((linenr_T lnum));
Karsten Hopp 6c970c
  int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
Karsten Hopp 6c970c
! int get_indent_str __ARGS((char_u *ptr, int ts, int list));
Karsten Hopp 6c970c
  int set_indent __ARGS((int size, int flags));
Karsten Hopp 6c970c
  int get_number_indent __ARGS((linenr_T lnum));
Karsten Hopp 6c970c
+ int get_breakindent_win __ARGS((win_T *wp, char_u *ptr));
Karsten Hopp 6c970c
  int open_line __ARGS((int dir, int flags, int second_line_indent));
Karsten Hopp 6c970c
  int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
Karsten Hopp 6c970c
  int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/proto/option.pro	2014-01-14 16:54:53.000000000 +0100
Karsten Hopp 6c970c
--- src/proto/option.pro	2014-06-25 14:16:04.882295233 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 63,66 ****
Karsten Hopp 6c970c
--- 63,67 ----
Karsten Hopp 6c970c
  long get_sw_value __ARGS((buf_T *buf));
Karsten Hopp 6c970c
  long get_sts_value __ARGS((void));
Karsten Hopp 6c970c
  void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
Karsten Hopp 6c970c
+ int briopt_check __ARGS((void));
Karsten Hopp 6c970c
  /* vim: set ft=c : */
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/screen.c	2014-06-18 21:20:07.232377308 +0200
Karsten Hopp 6c970c
--- src/screen.c	2014-06-25 13:43:39.930221653 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2962,2971 ****
Karsten Hopp 6c970c
  # define WL_SIGN	WL_FOLD		/* column for signs */
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #define WL_NR		WL_SIGN + 1	/* line number */
Karsten Hopp 6c970c
  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
Karsten Hopp 6c970c
! # define WL_SBR		WL_NR + 1	/* 'showbreak' or 'diff' */
Karsten Hopp 6c970c
  #else
Karsten Hopp 6c970c
! # define WL_SBR		WL_NR
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #define WL_LINE		WL_SBR + 1	/* text in the line */
Karsten Hopp 6c970c
      int		draw_state = WL_START;	/* what to draw next */
Karsten Hopp 6c970c
--- 2962,2976 ----
Karsten Hopp 6c970c
  # define WL_SIGN	WL_FOLD		/* column for signs */
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #define WL_NR		WL_SIGN + 1	/* line number */
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+ # define WL_BRI		WL_NR + 1	/* 'breakindent' */
Karsten Hopp 6c970c
+ #else
Karsten Hopp 6c970c
+ # define WL_BRI		WL_NR
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
Karsten Hopp 6c970c
! # define WL_SBR		WL_BRI + 1	/* 'showbreak' or 'diff' */
Karsten Hopp 6c970c
  #else
Karsten Hopp 6c970c
! # define WL_SBR		WL_BRI
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  #define WL_LINE		WL_SBR + 1	/* text in the line */
Karsten Hopp 6c970c
      int		draw_state = WL_START;	/* what to draw next */
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 3301,3307 ****
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  	while (vcol < v && *ptr != NUL)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    c = win_lbr_chartabsize(wp, ptr, (colnr_T)vcol, NULL);
Karsten Hopp 6c970c
  	    vcol += c;
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  	    prev_ptr = ptr;
Karsten Hopp 6c970c
--- 3306,3312 ----
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  	while (vcol < v && *ptr != NUL)
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
! 	    c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL);
Karsten Hopp 6c970c
  	    vcol += c;
Karsten Hopp 6c970c
  #ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  	    prev_ptr = ptr;
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 3670,3675 ****
Karsten Hopp 6c970c
--- 3675,3718 ----
Karsten Hopp 6c970c
  		}
Karsten Hopp 6c970c
  	    }
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+ 	    if (wp->w_p_brisbr && draw_state == WL_BRI - 1
Karsten Hopp 6c970c
+ 					     && n_extra == 0 && *p_sbr != NUL)
Karsten Hopp 6c970c
+ 		/* draw indent after showbreak value */
Karsten Hopp 6c970c
+ 		draw_state = WL_BRI;
Karsten Hopp 6c970c
+ 	    else if (wp->w_p_brisbr && draw_state == WL_SBR && n_extra == 0)
Karsten Hopp 6c970c
+ 		/* After the showbreak, draw the breakindent */
Karsten Hopp 6c970c
+ 		draw_state = WL_BRI - 1;
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ 	    /* draw 'breakindent': indent wrapped text accordingly */
Karsten Hopp 6c970c
+ 	    if (draw_state == WL_BRI - 1 && n_extra == 0)
Karsten Hopp 6c970c
+ 	    {
Karsten Hopp 6c970c
+ 		draw_state = WL_BRI;
Karsten Hopp 6c970c
+ # ifdef FEAT_DIFF
Karsten Hopp 6c970c
+ # endif
Karsten Hopp 6c970c
+ 		if (wp->w_p_bri && n_extra == 0 && row != startrow
Karsten Hopp 6c970c
+ #ifdef FEAT_DIFF
Karsten Hopp 6c970c
+ 			&& filler_lines == 0
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 		   )
Karsten Hopp 6c970c
+ 		{
Karsten Hopp 6c970c
+ 		    char_attr = 0; /* was: hl_attr(HLF_AT); */
Karsten Hopp 6c970c
+ #ifdef FEAT_DIFF
Karsten Hopp 6c970c
+ 		    if (diff_hlf != (hlf_T)0)
Karsten Hopp 6c970c
+ 			char_attr = hl_attr(diff_hlf);
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 		    p_extra = NUL;
Karsten Hopp 6c970c
+ 		    c_extra = ' ';
Karsten Hopp 6c970c
+ 		    n_extra = get_breakindent_win(wp,
Karsten Hopp 6c970c
+ 				       ml_get_buf(wp->w_buffer, lnum, FALSE));
Karsten Hopp 6c970c
+ 		    /* Correct end of highlighted area for 'breakindent',
Karsten Hopp 6c970c
+ 		     * required when 'linebreak' is also set. */
Karsten Hopp 6c970c
+ 		    if (tocol == vcol)
Karsten Hopp 6c970c
+ 			tocol += n_extra;
Karsten Hopp 6c970c
+ 		}
Karsten Hopp 6c970c
+ 	    }
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
  #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
Karsten Hopp 6c970c
  	    if (draw_state == WL_SBR - 1 && n_extra == 0)
Karsten Hopp 6c970c
  	    {
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 4382,4392 ****
Karsten Hopp 6c970c
  		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
Karsten Hopp 6c970c
  							     && !wp->w_p_list)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
! 		    n_extra = win_lbr_chartabsize(wp, ptr - (
Karsten Hopp 6c970c
  # ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  				has_mbyte ? mb_l :
Karsten Hopp 6c970c
  # endif
Karsten Hopp 6c970c
! 				1), (colnr_T)vcol, NULL) - 1;
Karsten Hopp 6c970c
  		    c_extra = ' ';
Karsten Hopp 6c970c
  		    if (vim_iswhite(c))
Karsten Hopp 6c970c
  		    {
Karsten Hopp 6c970c
--- 4425,4438 ----
Karsten Hopp 6c970c
  		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
Karsten Hopp 6c970c
  							     && !wp->w_p_list)
Karsten Hopp 6c970c
  		{
Karsten Hopp 6c970c
! 		    char_u *p = ptr - (
Karsten Hopp 6c970c
  # ifdef FEAT_MBYTE
Karsten Hopp 6c970c
  				has_mbyte ? mb_l :
Karsten Hopp 6c970c
  # endif
Karsten Hopp 6c970c
! 				1);
Karsten Hopp 6c970c
! 		    /* TODO: is passing p for start of the line OK? */
Karsten Hopp 6c970c
! 		    n_extra = win_lbr_chartabsize(wp, p, p, (colnr_T)vcol,
Karsten Hopp 6c970c
! 								    NULL) - 1;
Karsten Hopp 6c970c
  		    c_extra = ' ';
Karsten Hopp 6c970c
  		    if (vim_iswhite(c))
Karsten Hopp 6c970c
  		    {
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 8916,8923 ****
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    if (noinvcurs)
Karsten Hopp 6c970c
  		screen_stop_highlight();
Karsten Hopp 6c970c
! 	    if (row == screen_cur_row && (col > screen_cur_col) &&
Karsten Hopp 6c970c
! 								*T_CRI != NUL)
Karsten Hopp 6c970c
  		term_cursor_right(col - screen_cur_col);
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  		term_windgoto(row, col);
Karsten Hopp 6c970c
--- 8962,8969 ----
Karsten Hopp 6c970c
  	{
Karsten Hopp 6c970c
  	    if (noinvcurs)
Karsten Hopp 6c970c
  		screen_stop_highlight();
Karsten Hopp 6c970c
! 	    if (row == screen_cur_row && (col > screen_cur_col)
Karsten Hopp 6c970c
! 							     && *T_CRI != NUL)
Karsten Hopp 6c970c
  		term_cursor_right(col - screen_cur_col);
Karsten Hopp 6c970c
  	    else
Karsten Hopp 6c970c
  		term_windgoto(row, col);
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/structs.h	2014-06-17 17:48:21.784628008 +0200
Karsten Hopp 6c970c
--- src/structs.h	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 134,139 ****
Karsten Hopp 6c970c
--- 134,145 ----
Karsten Hopp 6c970c
      int		wo_arab;
Karsten Hopp 6c970c
  # define w_p_arab w_onebuf_opt.wo_arab	/* 'arabic' */
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     int		wo_bri;
Karsten Hopp 6c970c
+ # define w_p_bri w_onebuf_opt.wo_bri	/* 'breakindent' */
Karsten Hopp 6c970c
+     char_u		*wo_briopt;
Karsten Hopp 6c970c
+ # define w_p_briopt w_onebuf_opt.wo_briopt /* 'breakindentopt' */
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  #ifdef FEAT_DIFF
Karsten Hopp 6c970c
      int		wo_diff;
Karsten Hopp 6c970c
  # define w_p_diff w_onebuf_opt.wo_diff	/* 'diff' */
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 2189,2194 ****
Karsten Hopp 6c970c
--- 2195,2205 ----
Karsten Hopp 6c970c
  #ifdef FEAT_SYN_HL
Karsten Hopp 6c970c
      int		*w_p_cc_cols;	    /* array of columns to highlight or NULL */
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
+ #ifdef FEAT_LINEBREAK
Karsten Hopp 6c970c
+     int		w_p_brimin;	    /* minimum width for breakindent */
Karsten Hopp 6c970c
+     int		w_p_brishift;	    /* additional shift for breakindent */
Karsten Hopp 6c970c
+     int		w_p_brisbr;	    /* sbr in 'briopt' */
Karsten Hopp 6c970c
+ #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
      /* transform a pointer to a "onebuf" option into a "allbuf" option */
Karsten Hopp 6c970c
  #define GLOBAL_WO(p)	((char *)p + sizeof(winopt_T))
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Make_amiga.mak	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Make_amiga.mak	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 37,42 ****
Karsten Hopp 6c970c
--- 37,43 ----
Karsten Hopp 6c970c
  		test99.out test100.out test101.out test102.out test103.out \
Karsten Hopp 6c970c
  		test104.out test105.out test106.out test107.out \
Karsten Hopp 6c970c
  		test_autoformat_join.out \
Karsten Hopp 6c970c
+ 		test_breakindent.out \
Karsten Hopp 6c970c
  		test_eval.out \
Karsten Hopp 6c970c
  		test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 163,167 ****
Karsten Hopp 6c970c
--- 164,169 ----
Karsten Hopp 6c970c
  test106.out: test106.in
Karsten Hopp 6c970c
  test107.out: test107.in
Karsten Hopp 6c970c
  test_autoformat_join.out: test_autoformat_join.in
Karsten Hopp 6c970c
+ test_breakindent.out: test_breakindent.in
Karsten Hopp 6c970c
  test_eval.out: test_eval.in
Karsten Hopp 6c970c
  test_options.out: test_options.in
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Make_dos.mak	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Make_dos.mak	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 36,41 ****
Karsten Hopp 6c970c
--- 36,42 ----
Karsten Hopp 6c970c
  		test100.out test101.out test102.out test103.out test104.out \
Karsten Hopp 6c970c
  		test105.out test106.out  test107.out\
Karsten Hopp 6c970c
  		test_autoformat_join.out \
Karsten Hopp 6c970c
+ 		test_breakindent.out \
Karsten Hopp 6c970c
  		test_eval.out \
Karsten Hopp 6c970c
  		test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Make_ming.mak	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Make_ming.mak	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 56,61 ****
Karsten Hopp 6c970c
--- 56,62 ----
Karsten Hopp 6c970c
  		test100.out test101.out test102.out test103.out test104.out \
Karsten Hopp 6c970c
  		test105.out test106.out test107.out \
Karsten Hopp 6c970c
  		test_autoformat_join.out \
Karsten Hopp 6c970c
+ 		test_breakindent.out \
Karsten Hopp 6c970c
  		test_eval.out \
Karsten Hopp 6c970c
  		test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Make_os2.mak	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Make_os2.mak	2014-06-25 12:59:45.774121999 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 39,44 ****
Karsten Hopp 6c970c
--- 39,45 ----
Karsten Hopp 6c970c
  		test105.out test106.out test107.out \
Karsten Hopp 6c970c
  		test_autoformat_join.out \
Karsten Hopp 6c970c
  		test_eval.out \
Karsten Hopp 6c970c
+ 		test_breakindent.out \
Karsten Hopp 6c970c
  		test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
  .SUFFIXES: .in .out
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Make_vms.mms	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Make_vms.mms	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 97,102 ****
Karsten Hopp 6c970c
--- 97,103 ----
Karsten Hopp 6c970c
  	 test100.out test101.out test103.out test104.out \
Karsten Hopp 6c970c
  	 test105.out test106.out test107.out \
Karsten Hopp 6c970c
  	 test_autoformat_join.out \
Karsten Hopp 6c970c
+ 	 test_breakindent.out \
Karsten Hopp 6c970c
  	 test_eval.out \
Karsten Hopp 6c970c
  	 test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/Makefile	2014-05-29 11:47:19.804773758 +0200
Karsten Hopp 6c970c
--- src/testdir/Makefile	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 34,39 ****
Karsten Hopp 6c970c
--- 34,40 ----
Karsten Hopp 6c970c
  		test99.out test100.out test101.out test102.out test103.out \
Karsten Hopp 6c970c
  		test104.out test105.out test106.out test107.out \
Karsten Hopp 6c970c
  		test_autoformat_join.out \
Karsten Hopp 6c970c
+ 		test_breakindent.out \
Karsten Hopp 6c970c
  		test_eval.out \
Karsten Hopp 6c970c
  		test_options.out
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/test_breakindent.in	2014-06-25 14:36:28.690341532 +0200
Karsten Hopp 6c970c
--- src/testdir/test_breakindent.in	2014-06-25 14:26:00.994317785 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 0 ****
Karsten Hopp 6c970c
--- 1,79 ----
Karsten Hopp 6c970c
+ Test for breakindent
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ STARTTEST
Karsten Hopp 6c970c
+ :so small.vim
Karsten Hopp 6c970c
+ :if !exists("+breakindent") | e! test.ok | w! test.out | qa! | endif
Karsten Hopp 6c970c
+ :10new|:vsp|:vert resize 20
Karsten Hopp 6c970c
+ :put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"
Karsten Hopp 6c970c
+ :set ts=4 sw=4 sts=4 breakindent
Karsten Hopp 6c970c
+ :fu! ScreenChar(width)
Karsten Hopp 6c970c
+ :	let c=''
Karsten Hopp 6c970c
+ :	for i in range(1,a:width)
Karsten Hopp 6c970c
+ :		let c.=nr2char(screenchar(line('.'), i))
Karsten Hopp 6c970c
+ :	endfor
Karsten Hopp 6c970c
+ :       let c.="\n"
Karsten Hopp 6c970c
+ :	for i in range(1,a:width)
Karsten Hopp 6c970c
+ :		let c.=nr2char(screenchar(line('.')+1, i))
Karsten Hopp 6c970c
+ :	endfor
Karsten Hopp 6c970c
+ :       let c.="\n"
Karsten Hopp 6c970c
+ :	for i in range(1,a:width)
Karsten Hopp 6c970c
+ :		let c.=nr2char(screenchar(line('.')+2, i))
Karsten Hopp 6c970c
+ :	endfor
Karsten Hopp 6c970c
+ :	return c
Karsten Hopp 6c970c
+ :endfu
Karsten Hopp 6c970c
+ :fu DoRecordScreen()
Karsten Hopp 6c970c
+ :	wincmd l
Karsten Hopp 6c970c
+ :	$put =printf(\"\n%s\", g:test)
Karsten Hopp 6c970c
+ :	$put =g:line1
Karsten Hopp 6c970c
+ :	wincmd p
Karsten Hopp 6c970c
+ :endfu
Karsten Hopp 6c970c
+ :let g:test="Test 1: Simple breakindent"
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test="Test 2: Simple breakindent + sbr=>>"
Karsten Hopp 6c970c
+ :set sbr=>>
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test ="Test 3: Simple breakindent + briopt:sbr"
Karsten Hopp 6c970c
+ :set briopt=sbr,min:0 sbr=++
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test ="Test 4: Simple breakindent + min width: 18"
Karsten Hopp 6c970c
+ :set sbr= briopt=min:18
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test =" Test 5: Simple breakindent + shift by 2"
Karsten Hopp 6c970c
+ :set briopt=shift:2,min:0
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test=" Test 6: Simple breakindent + shift by -1"
Karsten Hopp 6c970c
+ :set briopt=shift:-1,min:0
Karsten Hopp 6c970c
+ :let line1=ScreenChar(8)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"
Karsten Hopp 6c970c
+ :set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4
Karsten Hopp 6c970c
+ :let line1=ScreenChar(10)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"
Karsten Hopp 6c970c
+ :set briopt=shift:1,sbr,min:0 nu sbr=# list
Karsten Hopp 6c970c
+ :let line1=ScreenChar(10)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"
Karsten Hopp 6c970c
+ :set briopt-=sbr
Karsten Hopp 6c970c
+ :let line1=ScreenChar(10)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"
Karsten Hopp 6c970c
+ :set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0
Karsten Hopp 6c970c
+ :let line1=ScreenChar(10)
Karsten Hopp 6c970c
+ :call DoRecordScreen()
Karsten Hopp 6c970c
+ :wincmd p
Karsten Hopp 6c970c
+ :let g:test="\n Test 11: strdisplaywidth when breakindent is on"
Karsten Hopp 6c970c
+ :set cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4
Karsten Hopp 6c970c
+ :let text=getline(2) "skip leading tab when calculating text width
Karsten Hopp 6c970c
+ :let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times
Karsten Hopp 6c970c
+ :$put =g:test
Karsten Hopp 6c970c
+ :$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)
Karsten Hopp 6c970c
+ :%w! test.out
Karsten Hopp 6c970c
+ :qa!
Karsten Hopp 6c970c
+ ENDTEST
Karsten Hopp 6c970c
+ dummy text
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/testdir/test_breakindent.ok	2014-06-25 14:36:28.698341532 +0200
Karsten Hopp 6c970c
--- src/testdir/test_breakindent.ok	2014-06-25 12:57:01.006115766 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 0 ****
Karsten Hopp 6c970c
--- 1,55 ----
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ 	abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ Test 1: Simple breakindent
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+     qrst
Karsten Hopp 6c970c
+     GHIJ
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ Test 2: Simple breakindent + sbr=>>
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+     >>qr
Karsten Hopp 6c970c
+     >>EF
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ Test 3: Simple breakindent + briopt:sbr
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+ ++  qrst
Karsten Hopp 6c970c
+ ++  GHIJ
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+ Test 4: Simple breakindent + min width: 18
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+   qrstuv
Karsten Hopp 6c970c
+   IJKLMN
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 5: Simple breakindent + shift by 2
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+       qr
Karsten Hopp 6c970c
+       EF
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 6: Simple breakindent + shift by -1
Karsten Hopp 6c970c
+     abcd
Karsten Hopp 6c970c
+    qrstu
Karsten Hopp 6c970c
+    HIJKL
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr
Karsten Hopp 6c970c
+   2     ab
Karsten Hopp 6c970c
+ ?        m
Karsten Hopp 6c970c
+ ?        x
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr
Karsten Hopp 6c970c
+   2 ^Iabcd
Karsten Hopp 6c970c
+ #      opq
Karsten Hopp 6c970c
+ #      BCD
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 9: breakindent + shift by +1 + 'nu' + sbr=# list
Karsten Hopp 6c970c
+   2 ^Iabcd
Karsten Hopp 6c970c
+        #op
Karsten Hopp 6c970c
+        #AB
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n
Karsten Hopp 6c970c
+   2     ab
Karsten Hopp 6c970c
+ ~       mn
Karsten Hopp 6c970c
+ ~       yz
Karsten Hopp 6c970c
+ 
Karsten Hopp 6c970c
+  Test 11: strdisplaywidth when breakindent is on
Karsten Hopp 6c970c
+ strdisplaywidth: 46 == calculated: 64
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/ui.c	2014-06-12 13:28:26.771694851 +0200
Karsten Hopp 6c970c
--- src/ui.c	2014-06-25 13:22:20.218173240 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 3162,3176 ****
Karsten Hopp 6c970c
      /* try to advance to the specified column */
Karsten Hopp 6c970c
      int		count = 0;
Karsten Hopp 6c970c
      char_u	*ptr;
Karsten Hopp 6c970c
!     char_u	*start;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
Karsten Hopp 6c970c
      while (count < vcol && *ptr != NUL)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
Karsten Hopp 6c970c
  	mb_ptr_adv(ptr);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
!     return (int)(ptr - start);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
--- 3162,3176 ----
Karsten Hopp 6c970c
      /* try to advance to the specified column */
Karsten Hopp 6c970c
      int		count = 0;
Karsten Hopp 6c970c
      char_u	*ptr;
Karsten Hopp 6c970c
!     char_u	*line;
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
!     line = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
Karsten Hopp 6c970c
      while (count < vcol && *ptr != NUL)
Karsten Hopp 6c970c
      {
Karsten Hopp 6c970c
! 	count += win_lbr_chartabsize(wp, line, ptr, count, NULL);
Karsten Hopp 6c970c
  	mb_ptr_adv(ptr);
Karsten Hopp 6c970c
      }
Karsten Hopp 6c970c
!     return (int)(ptr - line);
Karsten Hopp 6c970c
  }
Karsten Hopp 6c970c
  #endif
Karsten Hopp 6c970c
  
Karsten Hopp 6c970c
*** ../vim-7.4.337/src/version.c	2014-06-25 12:26:42.230046959 +0200
Karsten Hopp 6c970c
--- src/version.c	2014-06-25 13:00:26.990123558 +0200
Karsten Hopp 6c970c
***************
Karsten Hopp 6c970c
*** 736,737 ****
Karsten Hopp 6c970c
--- 736,739 ----
Karsten Hopp 6c970c
  {   /* Add new patch number below this line */
Karsten Hopp 6c970c
+ /**/
Karsten Hopp 6c970c
+     338,
Karsten Hopp 6c970c
  /**/
Karsten Hopp 6c970c
Karsten Hopp 6c970c
-- 
Karsten Hopp 6c970c
MORTICIAN:    Bring out your dead!
Karsten Hopp 6c970c
              [clang]
Karsten Hopp 6c970c
              Bring out your dead!
Karsten Hopp 6c970c
              [clang]
Karsten Hopp 6c970c
              Bring out your dead!
Karsten Hopp 6c970c
CUSTOMER:     Here's one -- nine pence.
Karsten Hopp 6c970c
DEAD PERSON:  I'm not dead!
Karsten Hopp 6c970c
                                  The Quest for the Holy Grail (Monty Python)
Karsten Hopp 6c970c
Karsten Hopp 6c970c
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 6c970c
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 6c970c
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp 6c970c
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///