mirror of
https://github.com/vim/vim.git
synced 2025-10-22 08:34:29 -04:00
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:
committed by
Christian Brabandt
parent
a977883ef3
commit
f4ccada5c3
@@ -1173,7 +1173,6 @@ win_line(
|
||||
// highlighting
|
||||
int area_attr = 0; // attributes desired by highlighting
|
||||
int search_attr = 0; // attributes desired by 'hlsearch'
|
||||
int ins_match_attr = 0; // attributes desired by PmenuMatch
|
||||
#ifdef FEAT_SYN_HL
|
||||
int vcol_save_attr = 0; // saved attr for 'cursorcolumn'
|
||||
int syntax_attr = 0; // attributes desired by syntax
|
||||
@@ -2012,9 +2011,7 @@ win_line(
|
||||
#endif
|
||||
|
||||
// When still displaying '$' of change command, stop at cursor.
|
||||
if (dollar_vcol >= 0 && wp == curwin
|
||||
&& lnum == wp->w_cursor.lnum
|
||||
&& wlv.vcol >= (long)wp->w_virtcol)
|
||||
if (dollar_vcol >= 0 && in_curline && wlv.vcol >= (long)wp->w_virtcol)
|
||||
{
|
||||
wlv_screen_line(wp, &wlv, FALSE);
|
||||
// Pretend we have finished updating the window. Except when
|
||||
@@ -2565,6 +2562,15 @@ win_line(
|
||||
#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'
|
||||
if (wlv.win_attr != 0)
|
||||
{
|
||||
@@ -3608,8 +3614,7 @@ win_line(
|
||||
// With 'virtualedit' we may never reach cursor position, but we still
|
||||
// need to correct the cursor column, so do that at end of line.
|
||||
if (!did_wcol && wlv.draw_state == WL_LINE
|
||||
&& wp == curwin && lnum == wp->w_cursor.lnum
|
||||
&& conceal_cursor_line(wp)
|
||||
&& in_curline && conceal_cursor_line(wp)
|
||||
&& (wlv.vcol + skip_cells >= wp->w_virtcol || c == NUL))
|
||||
{
|
||||
# ifdef FEAT_RIGHTLEFT
|
||||
@@ -3850,7 +3855,7 @@ win_line(
|
||||
|
||||
// Update w_cline_height and w_cline_folded if the cursor line
|
||||
// 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_height = wlv.row - startrow;
|
||||
@@ -3940,14 +3945,6 @@ win_line(
|
||||
if (wlv.draw_state == WL_LINE)
|
||||
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.
|
||||
// Skip characters that are left of the screen for 'nowrap'.
|
||||
if (wlv.draw_state < WL_LINE || skip_cells <= 0)
|
||||
|
Reference in New Issue
Block a user