]> granicus.if.org Git - vim/commitdiff
patch 8.1.2060: "precedes" in 'listchars' not used properly v8.1.2060
authorBram Moolenaar <Bram@vim.org>
Fri, 20 Sep 2019 15:00:17 +0000 (17:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 20 Sep 2019 15:00:17 +0000 (17:00 +0200)
Problem:    "precedes" in 'listchars' not used properly.
Solution:   Correctly handle the "precedes" char in list mode for long lines.
            (Christian Brabandt, closes #4953)

runtime/doc/options.txt
src/drawline.c
src/testdir/test_display.vim
src/testdir/view_util.vim
src/version.c

index 9f3d1dae67382c27266daef610876f6f787ca755..1dd74919bc35d3fad523f752b6807e0348292e01 100644 (file)
@@ -4842,9 +4842,9 @@ A jump table for the options with a short description can be found at |Q_op|.
                        off and the line continues beyond the right of the
                        screen.
                                                        *lcs-precedes*
-         precedes:c    Character to show in the first column, when 'wrap'
-                       is off and there is text preceding the character
-                       visible in the first column.
+         precedes:c    Character to show in the first visible column of the
+                       physical line, when there is text preceding the
+                       character visible in the first column.
                                                        *lcs-conceal*
          conceal:c     Character to show in place of concealed text, when
                        'conceallevel' is set to 1.
index 39ec5ed4060263fd0fe1632486d1c906c2ff6a29..5916458be3438c9de91ba6b39597c9f1d8712281 100644 (file)
@@ -2482,7 +2482,9 @@ win_line(
        // special character (via 'listchars' option "precedes:<char>".
        if (lcs_prec_todo != NUL
                && wp->w_p_list
-               && (wp->w_p_wrap ? wp->w_skipcol > 0 : wp->w_leftcol > 0)
+               && (wp->w_p_wrap ?
+                   (wp->w_skipcol > 0  && row == 0) :
+                   wp->w_leftcol > 0)
 #ifdef FEAT_DIFF
                && filler_todo <= 0
 #endif
index 6856759ecc6e9c62112bc5d22e7ec818b781488d..f500dc7891e8e07cbfde61fed2bd4d455d903095 100644 (file)
@@ -103,3 +103,58 @@ func Test_scroll_without_region()
   call StopVimInTerminal(buf)
   call delete('Xtestscroll')
 endfunc
+
+func Test_display_listchars_precedes()
+  call NewWindow(10, 10)
+  " Need a physical line that wraps over the complete
+  " window size
+  call append(0, repeat('aaa aaa aa ', 10))
+  call append(1, repeat(['bbb bbb bbb bbb'], 2))
+  " remove blank trailing line
+  $d
+  set list nowrap
+  call cursor(1, 1)
+  " move to end of line and scroll 2 characters back
+  norm! $2zh
+  let lines=ScreenLines([1,4], winwidth(0)+1)
+  let expect = [
+        \ " aaa aa $ |",
+        \ "$         |",
+        \ "$         |",
+        \ "~         |",
+        \ ]
+  call assert_equal(expect, lines)
+  set list listchars+=precedes:< nowrap
+  call cursor(1, 1)
+  " move to end of line and scroll 2 characters back
+  norm! $2zh
+  let lines = ScreenLines([1,4], winwidth(0)+1)
+  let expect = [
+        \ "<aaa aa $ |",
+        \ "<         |",
+        \ "<         |",
+        \ "~         |",
+        \ ]
+  call assert_equal(expect, lines)
+  set wrap
+  call cursor(1, 1)
+  " the complete line should be displayed in the window
+  norm! $
+
+  let lines = ScreenLines([1,10], winwidth(0)+1)
+  let expect = [
+        \ "<aaa aaa a|",
+        \ "a aaa aaa |",
+        \ "aa aaa aaa|",
+        \ " aa aaa aa|",
+        \ "a aa aaa a|",
+        \ "aa aa aaa |",
+        \ "aaa aa aaa|",
+        \ " aaa aa aa|",
+        \ "a aaa aa a|",
+        \ "aa aaa aa |",
+        \ ]
+  call assert_equal(expect, lines)
+  set list& listchars& wrap&
+  bw!
+endfunc
index 72786da1b000e4a8cfd19c40b880bae0eff39cad..1cdce216020dc6ccb5862d026bc38ec5f874ae68 100644 (file)
@@ -54,6 +54,7 @@ endfunction
 function! NewWindow(height, width) abort
   exe a:height . 'new'
   exe a:width . 'vsp'
+  set winfixwidth winfixheight
   redraw!
 endfunction
 
index eb2631d218705e92107aac33a93252ad478d55cd..76873d76234cf2006b23085ea58d30e0881f5f19 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2060,
 /**/
     2059,
 /**/