Mercurial > vim
changeset 29826:bfd08e50e2c0 v9.0.0252
patch 9.0.0252: cursor in wrong place after virtual text
Commit: https://github.com/vim/vim/commit/f5240b96f721b08d703340ff0b2e67b79fb8b821
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Aug 24 12:24:37 2022 +0100
patch 9.0.0252: cursor in wrong place after virtual text
Problem: Cursor in wrong place after virtual text.
Solution: Do not change the length of a virtual text property.
(closes #10964)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 24 Aug 2022 13:30:03 +0200 |
parents | e0a5c4895556 |
children | db296237ca1d |
files | src/testdir/dumps/Test_prop_text_change_arg_1.dump src/testdir/dumps/Test_prop_text_change_arg_2.dump src/testdir/test_textprop.vim src/textprop.c src/version.c |
diffstat | 5 files changed, 50 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_prop_text_change_arg_1.dump @@ -0,0 +1,5 @@ +>S+0&#ffffff0|e|t|E|r@1|o|r|C|o|d|e|(| |i+0&#ffd7ff255|d|:|-+0#4040ff13#ffffff0|1+0#0000000&|0|,| |i+0&#ffd7ff255|d|:|-+0#4040ff13#ffffff0|2+0#0000000&|0| |)| @29 +|s|e|c|o|n|d| |l|i|n|e| @48 +|~+0#4040ff13&| @58 +|~| @58 +| +0#0000000&@41|1|,|1| @10|A|l@1|
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_prop_text_change_arg_2.dump @@ -0,0 +1,5 @@ +|S+0&#ffffff0|e|t|E|r@1|o|r|C|o|d|e|(| |i+0&#ffd7ff255|d|:|-+0#4040ff13#ffffff0|1+0#0000000&|2|3>4|,| |i+0&#ffd7ff255|d|:|-+0#4040ff13#ffffff0|2+0#0000000&|0| |)| @27 +|s|e|c|o|n|d| |l|i|n|e| @48 +|~+0#4040ff13&| @58 +|~| @58 +| +0#0000000&@41|1|,|1|8|-|2@1| @6|A|l@1|
--- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -3091,4 +3091,40 @@ func Test_insert_text_with_padding() call delete('XscriptPropsPadded') endfunc +func Test_insert_text_change_arg() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + setline(1, ['SetErrorCode( 10, 20 )', 'second line']) + prop_type_add('param', {highlight: 'DiffChange', start_incl: 1}) + prop_type_add('padd', {highlight: 'NonText', start_incl: 1}) + prop_add(1, 15, { + type: 'param', + text: 'id:', + }) + prop_add(1, 15, { + type: 'padd', + text: '-', + }) + prop_add(1, 19, { + type: 'param', + text: 'id:', + }) + prop_add(1, 19, { + type: 'padd', + text: '-', + }) + END + call writefile(lines, 'XscriptPropsChange') + let buf = RunVimInTerminal('-S XscriptPropsChange', #{rows: 5, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_text_change_arg_1', {}) + + call term_sendkeys(buf, "ggf1cw1234\<Esc>") + call VerifyScreenDump(buf, 'Test_prop_text_change_arg_2', {}) + + call StopVimInTerminal(buf) + call delete('XscriptPropsChange') +endfunc + " vim: shiftwidth=2 sts=2 expandtab
--- a/src/textprop.c +++ b/src/textprop.c @@ -2127,7 +2127,8 @@ adjust_prop( else prop->tp_col += added; } - else if (prop->tp_len > 0 && prop->tp_col + prop->tp_len > col) + else if (prop->tp_len > 0 && prop->tp_col + prop->tp_len > col + && prop->tp_id >= 0) // don't change length for virtual text { int after = col - added - (prop->tp_col - 1 + prop->tp_len);