summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-03-03 20:04:03 +0000
committerBram Moolenaar <Bram@vim.org>2022-03-03 20:04:03 +0000
commit21efafe4c25373929979c72dc8aafa119f12dd8b (patch)
treef3fabbfba3e339c35a2567d2c61f1560793d491b
parent0e1574c4069ded47c170fcd7a47a0df66693a5f4 (diff)
downloadvim-git-21efafe4c25373929979c72dc8aafa119f12dd8b.tar.gz
patch 8.2.4501: with 'showbreak' set cursor displayed in wrong positionv8.2.4501
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)
-rw-r--r--src/charset.c3
-rw-r--r--src/testdir/dumps/Test_cursor_position_with_showbreak.dump6
-rw-r--r--src/testdir/test_breakindent.vim22
-rw-r--r--src/version.c2
4 files changed, 32 insertions, 1 deletions
diff --git a/src/charset.c b/src/charset.c
index ed09bd23f..836a9f6ec 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -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
index 000000000..92b79cc47
--- /dev/null
+++ b/src/testdir/dumps/Test_cursor_position_with_showbreak.dump
@@ -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|
diff --git a/src/testdir/test_breakindent.vim b/src/testdir/test_breakindent.vim
index 6258a7ac5..d60b2f4a1 100644
--- a/src/testdir/test_breakindent.vim
+++ b/src/testdir/test_breakindent.vim
@@ -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')
diff --git a/src/version.c b/src/version.c
index ce9e7e51c..18a0442ee 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4501,
+/**/
4500,
/**/
4499,