[vim] - patchlevel 353

Karsten Hopp karsten at fedoraproject.org
Tue Jul 22 13:45:48 UTC 2014


commit 39439ff64c750995e36734e081ccd9a8630afe2b
Author: Karsten Hopp <karsten at redhat.com>
Date:   Tue Jul 22 15:41:53 2014 +0200

    - patchlevel 353

 7.4.353 |  489 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 489 insertions(+), 0 deletions(-)
---
diff --git a/7.4.353 b/7.4.353
new file mode 100644
index 0000000..c54465d
--- /dev/null
+++ b/7.4.353
@@ -0,0 +1,489 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.4.353
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.353
+Problem:    'linebreak' doesn't work with the 'list' option.
+Solution:   Make it work. (Christian Brabandt)
+Files:	    runtime/doc/options.txt, src/charset.c, src/screen.c,
+	    src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+	    src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+	    src/testdir/Make_vms.mms, src/testdir/Makefile,
+	    src/testdir/test_listlbr.in, src/testdir/test_listlbr.ok
+
+
+*** ../vim-7.4.352/runtime/doc/options.txt	2014-06-25 11:48:40.729960646 +0200
+--- runtime/doc/options.txt	2014-07-02 19:47:21.602363892 +0200
+***************
+*** 1200,1205 ****
+--- 1200,1237 ----
+  	break if 'linebreak' is on.  Only works for ASCII and also for 8-bit
+  	characters when 'encoding' is an 8-bit encoding.
+  
++ 						*'breakindent'* *'bri'*
++ 'breakindent' 'bri'	boolean (default off)
++ 			local to window
++ 			{not in Vi}
++ 			{not available when compiled without the |+linebreak|
++ 			feature}
++ 	Every wrapped line will continue visually indented (same amount of
++ 	space as the beginning of that line), thus preserving horizontal blocks
++ 	of text.
++ 
++ 						*'breakindentopt'* *'briopt'*
++ 'breakindentopt' 'briopt' string (default empty)
++ 			local to window
++ 			{not in Vi}
++ 			{not available when compiled without the |+linebreak|
++ 			feature}
++ 	Settings for 'breakindent'. It can consist of the following optional
++ 	items and must be separated by a comma:
++ 		min:{n}	    Minimum text width that will be kept after
++ 			    applying 'breakindent', even if the resulting
++ 			    text should normally be narrower. This prevents
++ 			    text indented almost to the right window border
++ 			    occupying lot of vertical space when broken.
++ 		shift:{n}   After applying 'breakindent', the wrapped line's
++ 			    beginning will be shifted by the given number of
++ 			    characters.  It permits dynamic French paragraph
++ 			    indentation (negative) or emphasizing the line
++ 			    continuation (positive).
++ 		sbr	    Display the 'showbreak' value before applying the 
++ 			    additional indent.
++ 	The default value for min is 20 and shift is 0.
++ 
+  						*'browsedir'* *'bsdir'*
+  'browsedir' 'bsdir'	string	(default: "last")
+  			global
+*** ../vim-7.4.352/src/charset.c	2014-07-02 19:37:38.462354956 +0200
+--- src/charset.c	2014-07-02 19:47:21.602363892 +0200
+***************
+*** 1120,1126 ****
+      if (wp->w_p_lbr
+  	    && vim_isbreak(c)
+  	    && !vim_isbreak(s[1])
+- 	    && !wp->w_p_list
+  	    && wp->w_p_wrap
+  # ifdef FEAT_VERTSPLIT
+  	    && wp->w_width != 0
+--- 1120,1125 ----
+*** ../vim-7.4.352/src/screen.c	2014-07-02 17:16:51.330225522 +0200
+--- src/screen.c	2014-07-02 19:51:42.082367883 +0200
+***************
+*** 2843,2848 ****
+--- 2843,2849 ----
+      char_u	extra[18];		/* "%ld" and 'fdc' must fit in here */
+      int		n_extra = 0;		/* number of extra chars */
+      char_u	*p_extra = NULL;	/* string of extra chars, plus NUL */
++     char_u	*p_extra_free = NULL;   /* p_extra needs to be freed */
+      int		c_extra = NUL;		/* extra chars, all the same */
+      int		extra_attr = 0;		/* attributes when n_extra != 0 */
+      static char_u *at_end_str = (char_u *)""; /* used for p_extra when
+***************
+*** 4053,4058 ****
+--- 4054,4064 ----
+  	}
+  	else
+  	{
++ 	    if (p_extra_free != NULL)
++ 	    {
++ 		vim_free(p_extra_free);
++ 		p_extra_free = NULL;
++ 	    }
+  	    /*
+  	     * Get a character from the line itself.
+  	     */
+***************
+*** 4424,4431 ****
+  		/*
+  		 * Found last space before word: check for line break.
+  		 */
+! 		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
+! 							     && !wp->w_p_list)
+  		{
+  		    char_u *p = ptr - (
+  # ifdef FEAT_MBYTE
+--- 4430,4436 ----
+  		/*
+  		 * Found last space before word: check for line break.
+  		 */
+! 		if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr))
+  		{
+  		    char_u *p = ptr - (
+  # ifdef FEAT_MBYTE
+***************
+*** 4433,4439 ****
+  # endif
+  				1);
+  		    /* TODO: is passing p for start of the line OK? */
+! 		    n_extra = win_lbr_chartabsize(wp, p, p, (colnr_T)vcol,
+  								    NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+--- 4438,4444 ----
+  # endif
+  				1);
+  		    /* TODO: is passing p for start of the line OK? */
+! 		    n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
+  								    NULL) - 1;
+  		    c_extra = ' ';
+  		    if (vim_iswhite(c))
+***************
+*** 4443,4449 ****
+  			    /* See "Tab alignment" below. */
+  			    FIX_FOR_BOGUSCOLS;
+  #endif
+! 			c = ' ';
+  		    }
+  		}
+  #endif
+--- 4448,4455 ----
+  			    /* See "Tab alignment" below. */
+  			    FIX_FOR_BOGUSCOLS;
+  #endif
+! 			if (!wp->w_p_list)
+! 			    c = ' ';
+  		    }
+  		}
+  #endif
+***************
+*** 4483,4491 ****
+  		 */
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
+  		    /* tab amount depends on current column */
+! 		    n_extra = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+  #ifdef FEAT_CONCEAL
+  		    /* Tab alignment should be identical regardless of
+  		     * 'conceallevel' value. So tab compensates of all
+--- 4489,4538 ----
+  		 */
+  		if (c == TAB && (!wp->w_p_list || lcs_tab1))
+  		{
++ 		    int tab_len = 0;
+  		    /* tab amount depends on current column */
+! 		    tab_len = (int)wp->w_buffer->b_p_ts
+  					- vcol % (int)wp->w_buffer->b_p_ts - 1;
++ #ifdef FEAT_LINEBREAK
++ 		    if (!wp->w_p_lbr)
++ #endif
++ 		    /* tab amount depends on current column */
++ 			n_extra = tab_len;
++ #ifdef FEAT_LINEBREAK
++ 		    else
++ 		    {
++ 			char_u *p;
++ 			int	len = n_extra;
++ 			int	i;
++ 			int	saved_nextra = n_extra;
++ 
++ 			/* if n_extra > 0, it gives the number of chars, to
++ 			 * use for a tab, else we need to calculate the width
++ 			 * for a tab */
++ #ifdef FEAT_MBYTE
++ 			len = (tab_len * mb_char2len(lcs_tab2));
++ 			if (n_extra > 0)
++ 			    len += n_extra - tab_len;
++ #endif
++ 			c = lcs_tab1;
++ 			p = alloc((unsigned)(len + 1));
++ 			vim_memset(p, ' ', len);
++ 			p[len] = NUL;
++ 			p_extra_free = p;
++ 			for (i = 0; i < tab_len; i++)
++ 			{
++ #ifdef FEAT_MBYTE
++ 			    mb_char2bytes(lcs_tab2, p);
++ 			    p += mb_char2len(lcs_tab2);
++ 			    n_extra += mb_char2len(lcs_tab2)
++ 						 - (saved_nextra > 0 ? 1 : 0);
++ #else
++ 			    p[i] = lcs_tab2;
++ #endif
++ 			}
++ 			p_extra = p_extra_free;
++ 		    }
++ #endif
+  #ifdef FEAT_CONCEAL
+  		    /* Tab alignment should be identical regardless of
+  		     * 'conceallevel' value. So tab compensates of all
+***************
+*** 4501,4508 ****
+  		    if (wp->w_p_list)
+  		    {
+  			c = lcs_tab1;
+! 			c_extra = lcs_tab2;
+! 			n_attr = n_extra + 1;
+  			extra_attr = hl_attr(HLF_8);
+  			saved_attr2 = char_attr; /* save current attr */
+  #ifdef FEAT_MBYTE
+--- 4548,4560 ----
+  		    if (wp->w_p_list)
+  		    {
+  			c = lcs_tab1;
+! #ifdef FEAT_LINEBREAK
+! 			if (wp->w_p_lbr)
+! 			    c_extra = NUL; /* using p_extra from above */
+! 			else
+! #endif
+! 			    c_extra = lcs_tab2;
+! 			n_attr = tab_len + 1;
+  			extra_attr = hl_attr(HLF_8);
+  			saved_attr2 = char_attr; /* save current attr */
+  #ifdef FEAT_MBYTE
+***************
+*** 4598,4606 ****
+  		    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
+  			rl_mirror(p_extra);	/* reverse "<12>" */
+  #endif
+- 		    n_extra = byte2cells(c) - 1;
+  		    c_extra = NUL;
+! 		    c = *p_extra++;
+  		    if (!attr_pri)
+  		    {
+  			n_attr = n_extra + 1;
+--- 4650,4674 ----
+  		    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
+  			rl_mirror(p_extra);	/* reverse "<12>" */
+  #endif
+  		    c_extra = NUL;
+! #ifdef FEAT_LINEBREAK
+! 		    if (wp->w_p_lbr)
+! 		    {
+! 			char_u *p;
+! 
+! 			c = *p_extra;
+! 			p = alloc((unsigned)n_extra + 1);
+! 			vim_memset(p, ' ', n_extra);
+! 			STRNCPY(p, p_extra + 1, STRLEN(p_extra) - 1);
+! 			p[n_extra] = NUL;
+! 			p_extra_free = p_extra = p;
+! 		    }
+! 		    else
+! #endif
+! 		    {
+! 			n_extra = byte2cells(c) - 1;
+! 			c = *p_extra++;
+! 		    }
+  		    if (!attr_pri)
+  		    {
+  			n_attr = n_extra + 1;
+*** ../vim-7.4.352/src/testdir/Make_amiga.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_amiga.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+***************
+*** 165,169 ****
+--- 166,171 ----
+  test107.out: test107.in
+  test_autoformat_join.out: test_autoformat_join.in
+  test_breakindent.out: test_breakindent.in
++ test_listlbr.out: test_listlbr.in
+  test_eval.out: test_eval.in
+  test_options.out: test_options.in
+*** ../vim-7.4.352/src/testdir/Make_dos.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_dos.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 37,42 ****
+--- 37,43 ----
+  		test105.out test106.out  test107.out\
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Make_ming.mak	2014-06-25 14:39:35.110348584 +0200
+--- src/testdir/Make_ming.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 57,62 ****
+--- 57,63 ----
+  		test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Make_os2.mak	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Make_os2.mak	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 40,45 ****
+--- 40,46 ----
+  		test_autoformat_join.out \
+  		test_eval.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_options.out
+  
+  .SUFFIXES: .in .out
+*** ../vim-7.4.352/src/testdir/Make_vms.mms	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Make_vms.mms	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 98,103 ****
+--- 98,104 ----
+  	 test105.out test106.out test107.out \
+  	 test_autoformat_join.out \
+  	 test_breakindent.out \
++ 	 test_listlbr.out \
+  	 test_eval.out \
+  	 test_options.out
+  
+*** ../vim-7.4.352/src/testdir/Makefile	2014-06-25 14:39:35.114348584 +0200
+--- src/testdir/Makefile	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 35,40 ****
+--- 35,41 ----
+  		test104.out test105.out test106.out test107.out \
+  		test_autoformat_join.out \
+  		test_breakindent.out \
++ 		test_listlbr.out \
+  		test_eval.out \
+  		test_options.out
+  
+*** ../vim-7.4.352/src/testdir/test_listlbr.in	2014-07-02 19:58:25.642374067 +0200
+--- src/testdir/test_listlbr.in	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 0 ****
+--- 1,62 ----
++ Test for linebreak and list option
++ 
++ STARTTEST
++ :so small.vim
++ :if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
++ :10new|:vsp|:vert resize 20
++ :put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
++ :norm! zt
++ :set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
++ :fu! ScreenChar(width)
++ :	let c=''
++ :	for j in range(1,4)
++ :	    for i in range(1,a:width)
++ :	    	let c.=nr2char(screenchar(j, i))
++ :	    endfor
++ :           let c.="\n"
++ :	endfor
++ :	return c
++ :endfu
++ :fu! DoRecordScreen()
++ :	wincmd l
++ :	$put =printf(\"\n%s\", g:test)
++ :	$put =g:line
++ :	wincmd p
++ :endfu
++ :let g:test="Test 1: set linebreak"
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test="Test 2: set linebreak + set list"
++ :set linebreak list listchars=
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 3: set linebreak + set list + fancy listchars"
++ :exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 4: set linebreak nolist"
++ :set nolist linebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 5: set nolinebreak list"
++ :set list nolinebreak
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :let g:test ="Test 6: set linebreak with tab and 1 line as long as screen: should break!"
++ :set nolist linebreak ts=8
++ :let line="1\t".repeat('a', winwidth(0)-2)
++ :$put =line
++ :$
++ :norm! zt
++ :redraw!
++ :let line=ScreenChar(winwidth(0))
++ :call DoRecordScreen()
++ :%w! test.out
++ :qa!
++ ENDTEST
++ dummy text
+*** ../vim-7.4.352/src/testdir/test_listlbr.ok	2014-07-02 19:58:25.646374067 +0200
+--- src/testdir/test_listlbr.ok	2014-07-02 19:47:21.610363892 +0200
+***************
+*** 0 ****
+--- 1,39 ----
++ 
++ 	abcdef hijklmn	pqrstuvwxyz 1060ABCDEFGHIJKLMNOP 
++ 
++ Test 1: set linebreak
++     abcdef          
++ +hijklmn            
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++ 
++ Test 2: set linebreak + set list
++ ^Iabcdef hijklmn^I  
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++                     
++ 
++ Test 3: set linebreak + set list + fancy listchars
++ ▕———abcdef          
++ +hijklmn▕———        
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ 
++ Test 4: set linebreak nolist
++     abcdef          
++ +hijklmn            
++ +pqrstuvwxyz 1060ABC
++ +DEFGHIJKLMNOP      
++ 
++ Test 5: set nolinebreak list
++ ▕———abcdef hijklmn▕—
++ +pqrstuvwxyz␣1060ABC
++ +DEFGHIJKLMNOPˑ¶    
++ ¶                   
++ 1	aaaaaaaaaaaaaaaaaa
++ 
++ Test 6: set linebreak with tab and 1 line as long as screen: should break!
++ 1                   
++ +aaaaaaaaaaaaaaaaaa 
++ ~                   
++ ~                   
+*** ../vim-7.4.352/src/version.c	2014-07-02 19:37:38.462354956 +0200
+--- src/version.c	2014-07-02 19:57:44.066373430 +0200
+***************
+*** 736,737 ****
+--- 736,739 ----
+  {   /* Add new patch number below this line */
++ /**/
++     353,
+  /**/
+
+-- 
+FATHER:    You only killed the bride's father - that's all -
+LAUNCELOT: Oh dear, I didn't really mean to...
+FATHER:    Didn't mean to?  You put your sword right through his head!
+LAUNCELOT: Gosh - Is he all right?
+                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///


More information about the scm-commits mailing list