1
0
forked from aniani/vim

patch 9.1.0941: ComplMatchIns doesn't work after multibyte chars

Problem:  ComplMatchIns doesn't work after multibyte chars
          (after v9.1.0936)
Solution: Use (ptr - line) instead of wlv.col (zeertzjq).

closes: #16233

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2024-12-17 20:50:19 +01:00
committed by Christian Brabandt
parent a977883ef3
commit f4ccada5c3
8 changed files with 35 additions and 36 deletions

View File

@@ -1173,7 +1173,6 @@ win_line(
// highlighting // highlighting
int area_attr = 0; // attributes desired by highlighting int area_attr = 0; // attributes desired by highlighting
int search_attr = 0; // attributes desired by 'hlsearch' int search_attr = 0; // attributes desired by 'hlsearch'
int ins_match_attr = 0; // attributes desired by PmenuMatch
#ifdef FEAT_SYN_HL #ifdef FEAT_SYN_HL
int vcol_save_attr = 0; // saved attr for 'cursorcolumn' int vcol_save_attr = 0; // saved attr for 'cursorcolumn'
int syntax_attr = 0; // attributes desired by syntax int syntax_attr = 0; // attributes desired by syntax
@@ -2012,9 +2011,7 @@ win_line(
#endif #endif
// When still displaying '$' of change command, stop at cursor. // When still displaying '$' of change command, stop at cursor.
if (dollar_vcol >= 0 && wp == curwin if (dollar_vcol >= 0 && in_curline && wlv.vcol >= (long)wp->w_virtcol)
&& lnum == wp->w_cursor.lnum
&& wlv.vcol >= (long)wp->w_virtcol)
{ {
wlv_screen_line(wp, &wlv, FALSE); wlv_screen_line(wp, &wlv, FALSE);
// Pretend we have finished updating the window. Except when // Pretend we have finished updating the window. Except when
@@ -2565,6 +2562,15 @@ win_line(
#endif #endif
} }
// Apply ComplMatchIns highlight if needed.
if (wlv.draw_state == WL_LINE
&& (State & MODE_INSERT) && in_curline && ins_compl_active())
{
int ins_match_attr = ins_compl_col_range_attr((int)(ptr - line));
if (ins_match_attr > 0)
wlv.char_attr = hl_combine_attr(wlv.char_attr, ins_match_attr);
}
// combine attribute with 'wincolor' // combine attribute with 'wincolor'
if (wlv.win_attr != 0) if (wlv.win_attr != 0)
{ {
@@ -3608,8 +3614,7 @@ win_line(
// With 'virtualedit' we may never reach cursor position, but we still // With 'virtualedit' we may never reach cursor position, but we still
// need to correct the cursor column, so do that at end of line. // need to correct the cursor column, so do that at end of line.
if (!did_wcol && wlv.draw_state == WL_LINE if (!did_wcol && wlv.draw_state == WL_LINE
&& wp == curwin && lnum == wp->w_cursor.lnum && in_curline && conceal_cursor_line(wp)
&& conceal_cursor_line(wp)
&& (wlv.vcol + skip_cells >= wp->w_virtcol || c == NUL)) && (wlv.vcol + skip_cells >= wp->w_virtcol || c == NUL))
{ {
# ifdef FEAT_RIGHTLEFT # ifdef FEAT_RIGHTLEFT
@@ -3850,7 +3855,7 @@ win_line(
// Update w_cline_height and w_cline_folded if the cursor line // Update w_cline_height and w_cline_folded if the cursor line
// was updated (saves a call to plines() later). // was updated (saves a call to plines() later).
if (wp == curwin && lnum == curwin->w_cursor.lnum) if (in_curline)
{ {
curwin->w_cline_row = startrow; curwin->w_cline_row = startrow;
curwin->w_cline_height = wlv.row - startrow; curwin->w_cline_height = wlv.row - startrow;
@@ -3940,14 +3945,6 @@ win_line(
if (wlv.draw_state == WL_LINE) if (wlv.draw_state == WL_LINE)
vcol_prev = wlv.vcol; vcol_prev = wlv.vcol;
if (wlv.draw_state == WL_LINE
&& (State & MODE_INSERT) && in_curline && ins_compl_active())
{
ins_match_attr = ins_compl_col_range_attr(wlv.col);
if (ins_match_attr > 0)
wlv.char_attr = hl_combine_attr(wlv.char_attr, ins_match_attr);
}
// Store character to be displayed. // Store character to be displayed.
// Skip characters that are left of the screen for 'nowrap'. // Skip characters that are left of the screen for 'nowrap'.
if (wlv.draw_state < WL_LINE || skip_cells <= 0) if (wlv.draw_state < WL_LINE || skip_cells <= 0)

View File

@@ -1,7 +1,7 @@
|f+0#ff404010#ffffff0|o@1> +0#0000000&@71 |α+0&#ffffff0|β|γ| |f+0#ff404010&|o@1> +0#0000000&@67
|f+0#0000001#e0e0e08|o@1| @11| +0#4040ff13#ffffff0@59 |~+0#4040ff13&| @1| +0#0000001#e0e0e08|f|o@1| @11| +0#4040ff13#ffffff0@55
|b+0#0000001#ffd7ff255|a|r| @11| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#ffd7ff255|b|a|r| @11| +0#4040ff13#ffffff0@55
|你*0#0000001#ffd7ff255|好| +&@10| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#ffd7ff255|你*&|好| +&@10| +0#4040ff13#ffffff0@55
|~| @73 |~| @73
|~| @73 |~| @73
|~| @73 |~| @73

View File

@@ -1,7 +1,7 @@
|b+0#ff404010#ffffff0|a|r> +0#0000000&@71 |α+0&#ffffff0|β|γ| |b+0#ff404010&|a|r> +0#0000000&@67
|f+0#0000001#ffd7ff255|o@1| @11| +0#4040ff13#ffffff0@59 |~+0#4040ff13&| @1| +0#0000001#ffd7ff255|f|o@1| @11| +0#4040ff13#ffffff0@55
|b+0#0000001#e0e0e08|a|r| @11| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#e0e0e08|b|a|r| @11| +0#4040ff13#ffffff0@55
|你*0#0000001#ffd7ff255|好| +&@10| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#ffd7ff255|你*&|好| +&@10| +0#4040ff13#ffffff0@55
|~| @73 |~| @73
|~| @73 |~| @73
|~| @73 |~| @73

View File

@@ -1,7 +1,7 @@
|你*0#ff404010#ffffff0|好> +0#0000000&@70 |α+0&#ffffff0|β|γ| |你*0#ff404010&|好> +0#0000000&@66
|f+0#0000001#ffd7ff255|o@1| @11| +0#4040ff13#ffffff0@59 |~+0#4040ff13&| @1| +0#0000001#ffd7ff255|f|o@1| @11| +0#4040ff13#ffffff0@55
|b+0#0000001#ffd7ff255|a|r| @11| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#ffd7ff255|b|a|r| @11| +0#4040ff13#ffffff0@55
|你*0#0000001#e0e0e08|好| +&@10| +0#4040ff13#ffffff0@59 |~| @1| +0#0000001#e0e0e08|你*&|好| +&@10| +0#4040ff13#ffffff0@55
|~| @73 |~| @73
|~| @73 |~| @73
|~| @73 |~| @73

View File

@@ -1,4 +1,4 @@
|f+0&#ffffff0|o@1> @71 |α+0&#ffffff0|β|γ| |f|o@1> @67
|~+0#4040ff13&| @73 |~+0#4040ff13&| @73
|~| @73 |~| @73
|~| @73 |~| @73
@@ -17,4 +17,4 @@
|~| @73 |~| @73
|~| @73 |~| @73
|~| @73 |~| @73
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|4| @10|A|l@1| |-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|1@1|-|8| @7|A|l@1|

View File

@@ -1,4 +1,4 @@
|f+0&#ffffff0|o@1| > @70 |α+0&#ffffff0|β|γ| |f|o@1| > @66
|~+0#4040ff13&| @73 |~+0#4040ff13&| @73
|~| @73 |~| @73
|~| @73 |~| @73
@@ -17,4 +17,4 @@
|~| @73 |~| @73
|~| @73 |~| @73
|~| @73 |~| @73
|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|5| @10|A|l@1| |-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|1|2|-|9| @7|A|l@1|

View File

@@ -1728,29 +1728,29 @@ func Test_pum_matchins_higlight()
let buf = RunVimInTerminal('-S Xscript', {}) let buf = RunVimInTerminal('-S Xscript', {})
call TermWait(buf) call TermWait(buf)
call term_sendkeys(buf, "S\<C-X>\<C-O>") call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>")
call VerifyScreenDump(buf, 'Test_pum_matchins_01', {}) call VerifyScreenDump(buf, 'Test_pum_matchins_01', {})
call term_sendkeys(buf, "\<C-E>\<Esc>") call term_sendkeys(buf, "\<C-E>\<Esc>")
call TermWait(buf) call TermWait(buf)
call term_sendkeys(buf, "S\<C-X>\<C-O>\<C-N>") call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-N>")
call VerifyScreenDump(buf, 'Test_pum_matchins_02', {}) call VerifyScreenDump(buf, 'Test_pum_matchins_02', {})
call term_sendkeys(buf, "\<C-E>\<Esc>") call term_sendkeys(buf, "\<C-E>\<Esc>")
call TermWait(buf) call TermWait(buf)
call term_sendkeys(buf, "S\<C-X>\<C-O>\<C-N>\<C-N>") call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-N>\<C-N>")
call VerifyScreenDump(buf, 'Test_pum_matchins_03', {}) call VerifyScreenDump(buf, 'Test_pum_matchins_03', {})
call term_sendkeys(buf, "\<C-E>\<Esc>") call term_sendkeys(buf, "\<C-E>\<Esc>")
" restore after accept " restore after accept
call TermWait(buf) call TermWait(buf)
call term_sendkeys(buf, "S\<C-X>\<C-O>\<C-Y>") call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<C-Y>")
call VerifyScreenDump(buf, 'Test_pum_matchins_04', {}) call VerifyScreenDump(buf, 'Test_pum_matchins_04', {})
call term_sendkeys(buf, "\<C-E>\<Esc>") call term_sendkeys(buf, "\<C-E>\<Esc>")
" restore after cancel completion " restore after cancel completion
call TermWait(buf) call TermWait(buf)
call term_sendkeys(buf, "S\<C-X>\<C-O>\<Space>") call term_sendkeys(buf, "Sαβγ \<C-X>\<C-O>\<Space>")
call VerifyScreenDump(buf, 'Test_pum_matchins_05', {}) call VerifyScreenDump(buf, 'Test_pum_matchins_05', {})
call term_sendkeys(buf, "\<C-E>\<Esc>") call term_sendkeys(buf, "\<C-E>\<Esc>")

View File

@@ -704,6 +704,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 */
/**/
941,
/**/ /**/
940, 940,
/**/ /**/