vim-patch:9.0.0130: cursor position wrong when inserting around virtual text

Problem:    Cursor position wrong when inserting around virtual text.
Solution:   Update the cursor position properly.

1f4ee19eef

Co-authored-by: tom-anders <13141438+tom-anders@users.noreply.github.com>
This commit is contained in:
Ibby
2023-03-19 18:32:44 +11:00
committed by bfredl
parent a38d7f9984
commit 0e1f3b5acf
4 changed files with 10 additions and 2 deletions

View File

@@ -808,6 +808,7 @@ struct file_buffer {
MarkTree b_marktree[1];
Map(uint32_t, uint32_t) b_extmark_ns[1]; // extmark namespaces
size_t b_virt_text_inline; // number of inline virtual texts
size_t b_virt_line_blocks; // number of virt_line blocks
size_t b_signs; // number of sign extmarks
size_t b_signs_with_text; // number of sign extmarks with text

View File

@@ -95,6 +95,10 @@ void decor_remove(buf_T *buf, int row, int row2, Decoration *decor)
{
decor_redraw(buf, row, row2, decor);
if (decor) {
if (kv_size(decor->virt_text) && decor->virt_text_pos == kVTInline) {
assert(buf->b_virt_text_inline > 0);
buf->b_virt_text_inline--;
}
if (kv_size(decor->virt_lines)) {
assert(buf->b_virt_line_blocks > 0);
buf->b_virt_line_blocks--;

View File

@@ -232,7 +232,7 @@ static void insert_enter(InsertState *s)
stop_insert_mode = false;
// need to position cursor again when on a TAB
if (gchar_cursor() == TAB) {
if (gchar_cursor() == TAB || curbuf->b_virt_text_inline > 0) {
curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
}
@@ -3471,7 +3471,7 @@ static bool ins_esc(long *count, int cmdchar, bool nomove)
State = MODE_NORMAL;
may_trigger_modechanged();
// need to position cursor again when on a TAB
if (gchar_cursor() == TAB) {
if (gchar_cursor() == TAB || curbuf->b_virt_text_inline > 0) {
curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
}

View File

@@ -148,6 +148,9 @@ revised:
}
if (decor) {
if (kv_size(decor->virt_text) && decor->virt_text_pos == kVTInline) {
buf->b_virt_text_inline++;
}
if (kv_size(decor->virt_lines)) {
buf->b_virt_line_blocks++;
}