0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

patch 9.0.1802: Multiline regex with Visual selection fails with virtual text

Problem:  Multiline regex with Visual selection fails when Visual
          selection contains virtual text after last char.
Solution: Only include virtual text after last char when getting full
          line length.

closes: #12908

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
This commit is contained in:
zeertzjq 2023-08-27 19:11:46 +02:00 committed by Christian Brabandt
parent b49ad28d73
commit e3daa06be1
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
7 changed files with 44 additions and 3 deletions

View File

@ -809,7 +809,7 @@ win_linetabsize_cts(chartabsize_T *cts, colnr_T len)
cts->cts_vcol += win_lbr_chartabsize(cts, NULL); cts->cts_vcol += win_lbr_chartabsize(cts, NULL);
#ifdef FEAT_PROP_POPUP #ifdef FEAT_PROP_POPUP
// check for a virtual text at the end of a line or on an empty line // check for a virtual text at the end of a line or on an empty line
if (cts->cts_has_prop_with_text && *cts->cts_ptr == NUL) if (len == MAXCOL && cts->cts_has_prop_with_text && *cts->cts_ptr == NUL)
{ {
(void)win_lbr_chartabsize(cts, NULL); (void)win_lbr_chartabsize(cts, NULL);
cts->cts_vcol += cts->cts_cur_text_width; cts->cts_vcol += cts->cts_cur_text_width;
@ -1196,8 +1196,7 @@ win_lbr_chartabsize(
|| (tp->tp_col == MAXCOL || (tp->tp_col == MAXCOL
&& ((tp->tp_flags & TP_FLAG_ALIGN_ABOVE) && ((tp->tp_flags & TP_FLAG_ALIGN_ABOVE)
? col == 0 ? col == 0
: s[0] == NUL : s[0] == NUL && cts->cts_with_trailing)))
&& cts->cts_with_trailing)))
&& -tp->tp_id - 1 < gap->ga_len) && -tp->tp_id - 1 < gap->ga_len)
{ {
char_u *p = ((char_u **)gap->ga_data)[-tp->tp_id - 1]; char_u *p = ((char_u **)gap->ga_data)[-tp->tp_id - 1];

View File

@ -0,0 +1,8 @@
|X+0&#ffff4012@59
|a+0&#e0e0e08@1>a+0&#ffffff0| @56
|X+0&#ffff4012@59
@1| +0&#ffffff0@58
|b+0&#e0e0e08@2|b+0&#ffffff0@2| @53
|~+0#4040ff13&| @58
|~| @58
|-+2#0000000&@1| |V|I|S|U|A|L| |B|L|O|C|K| |-@1| +0&&@13|3|x|3| @6|2|,|3| @10|A|l@1|

View File

@ -0,0 +1,8 @@
|X+0&#ffff4012@59
>a+0&#ffffff0@2| @56
|X+0&#ffff4012@59
@1| +0&#ffffff0@58
|b@5| @53
|~+0#4040ff13&| @58
|~| @58
|s+0#e000002&|e|a|r|c|h| |h|i|t| |B|O|T|.@2|t|i|n|u|i|n|g| |a|t| |T|O|P| +0#0000000&@10|2|,|1| @10|A|l@1|

View File

@ -0,0 +1,8 @@
|X+0&#ffff4012@59
|a+0&#ffffff0@2| @56
|c>X+0&#ffff4012@58
@2| +0&#ffffff0@57
|b@5| @53
|~+0#4040ff13&| @58
|~| @58
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@29|3|,|2| @10|A|l@1|

View File

@ -0,0 +1,8 @@
|X+0&#ffff4012@59
>a+0&#ffffff0@2| @56
|c|X+0&#ffff4012@58
@2| +0&#ffffff0@57
|b@5| @53
|~+0#4040ff13&| @58
|~| @58
|s+0#e000002&|e|a|r|c|h| |h|i|t| |B|O|T|.@2|t|i|n|u|i|n|g| |a|t| |T|O|P| +0#0000000&@10|2|,|1| @10|A|l@1|

View File

@ -3235,6 +3235,14 @@ func Test_props_with_text_empty_line()
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_4', {}) call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_4', {})
call term_sendkeys(buf, "j") call term_sendkeys(buf, "j")
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_5', {}) call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_5', {})
call term_sendkeys(buf, "0\<C-V>2l2k")
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_6', {})
call term_sendkeys(buf, "\<Esc>/aaa\\n\\%V\<CR>")
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_7', {})
call term_sendkeys(buf, "3ggic")
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_8', {})
call term_sendkeys(buf, "\<Esc>/aaa\\nc\\%V\<CR>")
call VerifyScreenDump(buf, 'Test_prop_with_text_empty_line_9', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc

View File

@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1802,
/**/ /**/
1801, 1801,
/**/ /**/