From 0ce39108684ed7b6af03e47da0a4e0a022e41936 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 13 Jul 2023 08:32:17 +0800 Subject: fix(ui): cursor pos with left gravity inline virt_text at eol (#24329) Problem: Cursor is not after inline virtual text with left gravity when inserting after the end of the line. Solution: Add width of inline virtual text with left gravity to cursor virtcol in Insert mode even if on a NUL. --- src/nvim/charset.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/nvim/charset.c b/src/nvim/charset.c index c2745a66a0..c6efb4b3b4 100644 --- a/src/nvim/charset.c +++ b/src/nvim/charset.c @@ -1089,12 +1089,11 @@ void getvcol(win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *en // cursor at end *cursor = vcol + incr - 1; } else { - if (!on_NUL) { - // cursor is after inserted text, unless on the NUL + if (!on_NUL || !(State & MODE_NORMAL)) { vcol += cts.cts_cur_text_width_left; - if ((State & MODE_INSERT) == 0) { - vcol += cts.cts_cur_text_width_right; - } + } + if (!on_NUL && (State & MODE_NORMAL)) { + vcol += cts.cts_cur_text_width_right; } // cursor at start *cursor = vcol + head; -- cgit