summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-01 15:52:55 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-01 15:52:55 +0100
commit1f4ee19eefecd8f70b7cbe8ee9db8ace6352e23e (patch)
tree8ea197ca6ccd87da47eb3f21894f842f77364112
parent05a8061eecd9969ee6cde008f54ded77462b649e (diff)
patch 9.0.0130: cursor position wrong when inserting around virtual textv9.0.0130
Problem: Cursor position wrong when inserting around virtual text. Solution: Update the cursor position properly.
-rw-r--r--src/drawline.c7
-rw-r--r--src/edit.c9
-rw-r--r--src/testdir/dumps/Test_prop_inserts_text_1.dump4
-rw-r--r--src/testdir/dumps/Test_prop_inserts_text_2.dump4
-rw-r--r--src/testdir/test_textprop.vim16
-rw-r--r--src/version.c2
6 files changed, 29 insertions, 13 deletions
diff --git a/src/drawline.c b/src/drawline.c
index af8c053b7c..949d6f998a 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -1589,13 +1589,6 @@ win_line(
n_attr_skip = added;
}
}
-
- // If the cursor is on or after this position,
- // move it forward.
- if (wp == curwin
- && lnum == curwin->w_cursor.lnum
- && curwin->w_cursor.col >= vcol)
- curwin->w_cursor.col += n_extra;
}
// reset the ID in the copy to avoid it being used
// again
diff --git a/src/edit.c b/src/edit.c
index 0e715c2d1b..c3aa888780 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -288,8 +288,13 @@ edit(
conceal_check_cursor_line(cursor_line_was_concealed);
#endif
- // need to position cursor again when on a TAB
- if (gchar_cursor() == TAB)
+ // Need to position cursor again when on a TAB and when on a char with
+ // virtual text.
+ if (gchar_cursor() == TAB
+#ifdef FEAT_PROP_POPUP
+ || curbuf->b_has_textprop
+#endif
+ )
curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
/*
diff --git a/src/testdir/dumps/Test_prop_inserts_text_1.dump b/src/testdir/dumps/Test_prop_inserts_text_1.dump
index f536bd50d2..dfa491b1af 100644
--- a/src/testdir/dumps/Test_prop_inserts_text_1.dump
+++ b/src/testdir/dumps/Test_prop_inserts_text_1.dump
@@ -1,6 +1,6 @@
|i+0&#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d| |s|o
-|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0&#5fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g> @27
+|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0&#5fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n>g| @27
|~+0#4040ff13&| @58
|~| @58
|~| @58
-| +0#0000000&@41|1|,|7@1|-|9|3| @6|A|l@1|
+| +0#0000000&@41|1|,|7|6|-|9|2| @6|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_inserts_text_2.dump b/src/testdir/dumps/Test_prop_inserts_text_2.dump
index 4d8b725325..360f00ddcc 100644
--- a/src/testdir/dumps/Test_prop_inserts_text_2.dump
+++ b/src/testdir/dumps/Test_prop_inserts_text_2.dump
@@ -1,6 +1,6 @@
| +0#0000e05#a8a8a8255@1|i+0#0000000#ffffff0|n|s|e|r|t| |s|o|m|e| |t|e|x|t| |S+0#ffffff16#e000002|O|M|E| |h+0#0000000#ffffff0|e|r|e| |a|n|d| |o|t|h|e|r| |t|e|x|t| |O+0&#ffff4012|T|H|E|R| |t+0&#ffffff0|h|e|r|e| |a|n|d|
-| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0&#5fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n|g> @23
+| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t| |a|f|t|e|r| |M+0&#5fd7ff255|O|R|E| |w+0&#ffffff0|r|a|p@1|i|n>g| @23
|~+0#4040ff13&| @58
|~| @58
|~| @58
-| +0#0000000&@41|1|,|7@1|-|9|3| @6|A|l@1|
+| +0#0000000&@41|1|,|7|6|-|9|2| @6|A|l@1|
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 5ac787e5e2..2a74dc7e3c 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2256,4 +2256,20 @@ func Test_removed_prop_with_text_cleans_up_array()
bwipe!
endfunc
+def Test_insert_text_before_virtual_text()
+ new foobar
+ setline(1, '12345678')
+ prop_type_add('test', {highlight: 'Search'})
+ prop_add(1, 5, {
+ type: 'test',
+ text: ' virtual text '
+ })
+ normal! f4axyz
+ normal! f5iXYZ
+ assert_equal('1234xyzXYZ5678', getline(1))
+
+ prop_type_delete('test')
+ bwipe!
+enddef
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index f4c63f1f70..6a8ad9b24f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 130,
+/**/
129,
/**/
128,