mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0168: cursor positioned wrong with two virtual text properties
Problem: Cursor positioned wrong with two virtual text properties close together. (Ben Jackson) Solution: Add the original size, not the computed one. (closes #10864)
This commit is contained in:
parent
38ea2733b4
commit
25463610df
@ -1130,6 +1130,7 @@ win_lbr_chartabsize(
|
||||
# ifdef FEAT_PROP_POPUP
|
||||
if (cts->cts_has_prop_with_text && *line != NUL)
|
||||
{
|
||||
int normal_size = size;
|
||||
int i;
|
||||
int col = (int)(s - line);
|
||||
garray_T *gap = &wp->w_buffer->b_textprop_text;
|
||||
@ -1141,7 +1142,8 @@ win_lbr_chartabsize(
|
||||
// Watch out for the text being deleted. "cts_text_props" is a
|
||||
// copy, the text prop may actually have been removed from the line.
|
||||
if (tp->tp_id < 0
|
||||
&& ((tp->tp_col - 1 >= col && tp->tp_col - 1 < col + size)
|
||||
&& ((tp->tp_col - 1 >= col
|
||||
&& tp->tp_col - 1 < col + normal_size)
|
||||
|| (tp->tp_col == MAXCOL && (s[0] == NUL || s[1] == NUL)
|
||||
&& cts->cts_with_trailing))
|
||||
&& -tp->tp_id - 1 < gap->ga_len)
|
||||
@ -1152,7 +1154,6 @@ win_lbr_chartabsize(
|
||||
{
|
||||
int cells = vim_strsize(p);
|
||||
|
||||
added = wp->w_width - (vcol + size) % wp->w_width;
|
||||
if (tp->tp_col == MAXCOL)
|
||||
{
|
||||
int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
|
||||
@ -1163,8 +1164,11 @@ win_lbr_chartabsize(
|
||||
// Keep in sync with where textprop_size_after_trunc()
|
||||
// is called in win_line().
|
||||
if (!wrap)
|
||||
{
|
||||
added = wp->w_width - (vcol + size) % wp->w_width;
|
||||
cells = textprop_size_after_trunc(wp,
|
||||
below, added, p, &n_used);
|
||||
}
|
||||
// right-aligned does not really matter here, same as
|
||||
// "after"
|
||||
if (below)
|
||||
|
@ -1,6 +1,8 @@
|
||||
|i+0&#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d| |s|o
|
||||
|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n>g| @27
|
||||
|p|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s|t| @40
|
||||
|F|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=|1+0#0000000&|,| |.+0#0000e05&|y|=|2+0#0000000&| |}|;| @34
|
||||
|e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@49
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|1|,|7|6|-|9|2| @6|A|l@1|
|
||||
|
@ -1,6 +1,8 @@
|
||||
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
|
||||
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n>g| @23
|
||||
| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s|t| @38
|
||||
| +0#0000e05#a8a8a8255@1|F+0#0000000#ffffff0|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=|1+0#0000000&|,| |.+0#0000e05&|y|=|2+0#0000000&| |}|;| @32
|
||||
| +0#0000e05#a8a8a8255@1|e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|1|,|7|6|-|9|2| @6|A|l@1|
|
||||
|
@ -1,6 +1,8 @@
|
||||
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
|
||||
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g| @23
|
||||
| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s>t| @38
|
||||
| +0#0000e05#a8a8a8255@1|F+0#0000000#ffffff0|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=|1+0#0000000&|,| |.+0#0000e05&|y|=|2+0#0000000&| |}|;| @32
|
||||
| +0#0000e05#a8a8a8255@1|e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|2|,|7|-|1|9| @7|A|l@1|
|
||||
|
@ -1,6 +1,8 @@
|
||||
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
|
||||
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g| @23
|
||||
| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s|t| @38
|
||||
| +0#0000e05#a8a8a8255@1>e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
| +0#0000e05#a8a8a8255@1|F+0#0000000#ffffff0|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=>1+0#0000000&|,| |.+0#0000e05&|y|=|2+0#0000000&| |}|;| @32
|
||||
| +0#0000e05#a8a8a8255@1|e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
|~+0#4040ff13&| @58
|
||||
| +0#0000000&@41|3|,|0|-|1| @8|A|l@1|
|
||||
|~| @58
|
||||
| +0#0000000&@41|3|,|1|3|-|1|6| @6|A|l@1|
|
||||
|
8
src/testdir/dumps/Test_prop_inserts_text_5.dump
Normal file
8
src/testdir/dumps/Test_prop_inserts_text_5.dump
Normal file
@ -0,0 +1,8 @@
|
||||
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
|
||||
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g| @23
|
||||
| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s|t| @38
|
||||
| +0#0000e05#a8a8a8255@1|F+0#0000000#ffffff0|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=|1+0#0000000&|,| |.+0#0000e05&|y|=>2+0#0000000&| |}|;| @32
|
||||
| +0#0000e05#a8a8a8255@1|e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|3|,|1|6|-|2@1| @6|A|l@1|
|
8
src/testdir/dumps/Test_prop_inserts_text_6.dump
Normal file
8
src/testdir/dumps/Test_prop_inserts_text_6.dump
Normal file
@ -0,0 +1,8 @@
|
||||
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
|
||||
| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g| @23
|
||||
| +0#0000e05#a8a8a8255@1|p+0#0000000#ffffff0|r|e|s+0&#e0e0e08|ö|m|e|和*&|平|t+&|é|x|t|p+0&#ffffff0|o|s|t| @38
|
||||
| +0#0000e05#a8a8a8255@1|F+0#0000000#ffffff0|o@1| |f|o@1| |=| |{| |.+0#0000e05&|x|=|1+0#0000000&|,| |.+0#0000e05&|y|=|2+0#0000000&| |}|;| @32
|
||||
| +0#0000e05#a8a8a8255@1>e+0#ffffff16#e000002|m|p|t|y| |l|i|n|e| +0#0000000#ffffff0@47
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|4|,|0|-|1| @8|A|l@1|
|
@ -2317,11 +2317,16 @@ func Test_prop_inserts_text()
|
||||
call prop_type_add('multibyte', #{highlight: 'Visual'})
|
||||
call prop_add(2, 4, #{type: 'multibyte', text: 'söme和平téxt'})
|
||||
|
||||
call setline(3, '')
|
||||
call prop_add(3, 1, #{type: 'someprop', text: 'empty line'})
|
||||
call setline(3, 'Foo foo = { 1, 2 };')
|
||||
call prop_type_add( 'testprop', #{highlight: 'Comment'})
|
||||
call prop_add(3, 13, #{type: 'testprop', text: '.x='})
|
||||
call prop_add(3, 16, #{type: 'testprop', text: '.y='})
|
||||
|
||||
call setline(4, '')
|
||||
call prop_add(4, 1, #{type: 'someprop', text: 'empty line'})
|
||||
END
|
||||
call writefile(lines, 'XscriptPropsWithText')
|
||||
let buf = RunVimInTerminal('-S XscriptPropsWithText', #{rows: 6, cols: 60})
|
||||
let buf = RunVimInTerminal('-S XscriptPropsWithText', #{rows: 8, cols: 60})
|
||||
call VerifyScreenDump(buf, 'Test_prop_inserts_text_1', {})
|
||||
|
||||
call term_sendkeys(buf, ":set signcolumn=yes\<CR>")
|
||||
@ -2330,8 +2335,13 @@ func Test_prop_inserts_text()
|
||||
call term_sendkeys(buf, "2G$")
|
||||
call VerifyScreenDump(buf, 'Test_prop_inserts_text_3', {})
|
||||
|
||||
call term_sendkeys(buf, "3G")
|
||||
call term_sendkeys(buf, "3Gf1")
|
||||
call VerifyScreenDump(buf, 'Test_prop_inserts_text_4', {})
|
||||
call term_sendkeys(buf, "f2")
|
||||
call VerifyScreenDump(buf, 'Test_prop_inserts_text_5', {})
|
||||
|
||||
call term_sendkeys(buf, "4G")
|
||||
call VerifyScreenDump(buf, 'Test_prop_inserts_text_6', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XscriptPropsWithText')
|
||||
|
@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
168,
|
||||
/**/
|
||||
167,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user