]> granicus.if.org Git - vim/commitdiff
patch 8.2.4501: with 'showbreak' set cursor displayed in wrong position v8.2.4501
authorBram Moolenaar <Bram@vim.org>
Thu, 3 Mar 2022 20:04:03 +0000 (20:04 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 3 Mar 2022 20:04:03 +0000 (20:04 +0000)
Problem:    With 'showbreak' set and after the end of the line the cursor
            may be displayed in the wrong position.
Solution:   Do not apply 'showbreak' after the end of the line. (closes #9884)

src/charset.c
src/testdir/dumps/Test_cursor_position_with_showbreak.dump [new file with mode: 0644]
src/testdir/test_breakindent.vim
src/version.c

index ed09bd23f4410943581245f2254f72cb29ab8df1..836a9f6ecf88c7ac253a995dca525fcd3a7acb9a 100644 (file)
@@ -1037,9 +1037,10 @@ win_lbr_chartabsize(
      * May have to add something for 'breakindent' and/or 'showbreak'
      * string at start of line.
      * Set *headp to the size of what we add.
+     * Do not use 'showbreak' at the NUL after the text.
      */
     added = 0;
-    sbr = get_showbreak_value(wp);
+    sbr = c == NUL ? empty_option : get_showbreak_value(wp);
     if ((*sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
     {
        colnr_T sbrlen = 0;
diff --git a/src/testdir/dumps/Test_cursor_position_with_showbreak.dump b/src/testdir/dumps/Test_cursor_position_with_showbreak.dump
new file mode 100644 (file)
index 0000000..92b79cc
--- /dev/null
@@ -0,0 +1,6 @@
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@71|X
+> +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e| @61
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|7|4| @9|A|l@1| 
index 6258a7ac5f369efd64066ef618ccd0bcdaeda6cd..d60b2f4a190f298f65b19ec0243a22dd9d16bb82 100644 (file)
@@ -8,6 +8,7 @@ source check.vim
 CheckOption breakindent
 
 source view_util.vim
+source screendump.vim
 
 let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP"
 
@@ -849,6 +850,27 @@ func Test_window_resize_with_linebreak()
   %bw!
 endfunc
 
+func Test_cursor_position_with_showbreak()
+  CheckScreendump
+
+  let lines =<< trim END
+      vim9script
+      &signcolumn = 'yes'
+      &showbreak = '+ '
+      var leftcol: number = win_getid()->getwininfo()->get(0, {})->get('textoff')
+      repeat('x', &columns - leftcol - 1)->setline(1)
+      'second line'->setline(2)
+  END
+  call writefile(lines, 'XscriptShowbreak')
+  let buf = RunVimInTerminal('-S XscriptShowbreak', #{rows: 6})
+
+  call term_sendkeys(buf, "AX")
+  call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak', {})
+
+  call StopVimInTerminal(buf)
+  call delete('XscriptShowbreak')
+endfunc
+
 func Test_no_spurious_match()
   let s:input = printf('- y %s y %s', repeat('x', 50), repeat('x', 50))
   call s:test_windows('setl breakindent breakindentopt=list:-1 formatlistpat=^- hls')
index ce9e7e51c3cd4921e5523c1312951afba3203d03..18a0442ee8f6172a866f38e884fbaac9c66d5f47 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4501,
 /**/
     4500,
 /**/