diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-09-14 16:09:57 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-14 16:09:57 +0100 |
commit | 702bd6c7c61073c0907fd7608911aebee4acd337 (patch) | |
tree | 83bc9559cd5c5803b671f70c129d274aaffdfd76 | |
parent | febe13892ede37d2a8462b9921e05a55e059db0c (diff) | |
download | vim-git-702bd6c7c61073c0907fd7608911aebee4acd337.tar.gz |
patch 9.0.0464: with virtual text "above" indenting doesn't work wellv9.0.0464
Problem: With virtual text "above" indenting doesn't work well.
Solution: Ignore text properties while adjusting indent. (issue #11084)
-rw-r--r-- | src/charset.c | 2 | ||||
-rw-r--r-- | src/globals.h | 3 | ||||
-rw-r--r-- | src/indent.c | 6 | ||||
-rw-r--r-- | src/testdir/test_textprop.vim | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 28 insertions, 1 deletions
diff --git a/src/charset.c b/src/charset.c index a19e55b62..c5edaf41e 100644 --- a/src/charset.c +++ b/src/charset.c @@ -954,7 +954,7 @@ init_chartabsize_arg( cts->cts_line = line; cts->cts_ptr = ptr; #ifdef FEAT_PROP_POPUP - if (lnum > 0) + if (lnum > 0 && !ignore_text_props) { char_u *prop_start; int count; diff --git a/src/globals.h b/src/globals.h index 3d75e20d0..521832428 100644 --- a/src/globals.h +++ b/src/globals.h @@ -755,6 +755,9 @@ EXTERN int popup_visible INIT(= FALSE); EXTERN int popup_uses_mouse_move INIT(= FALSE); EXTERN int text_prop_frozen INIT(= 0); + +// when TRUE computing the cursor position ignores text properties. +EXTERN int ignore_text_props INIT(= FALSE); #endif // When set the popup menu will redraw soon using the pum_win_ values. Do not diff --git a/src/indent.c b/src/indent.c index 134336c12..51585ec9e 100644 --- a/src/indent.c +++ b/src/indent.c @@ -1289,6 +1289,9 @@ change_indent( // for the following tricks we don't want list mode save_p_list = curwin->w_p_list; curwin->w_p_list = FALSE; +#ifdef FEAT_PROP_POPUP + ignore_text_props = TRUE; +#endif vc = getvcol_nolist(&curwin->w_cursor); vcol = vc; @@ -1440,6 +1443,9 @@ change_indent( ++start_col; } } +#ifdef FEAT_PROP_POPUP + ignore_text_props = FALSE; +#endif // For MODE_VREPLACE state, we also have to fix the replace stack. In this // case it is always possible because we backspace over the whole line and diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim index 5167e8e3b..0a4037b9e 100644 --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -2892,6 +2892,22 @@ func Test_props_with_text_above() call StopVimInTerminal(buf) endfunc +func Test_prop_above_with_indent() + new + call setline(1, ['first line', ' second line', ' line below']) + setlocal cindent + call prop_type_add('indented', #{highlight: 'Search'}) + call prop_add(3, 0, #{type: 'indented', text: 'here', text_align: 'above', text_padding_left: 4}) + call assert_equal(' line below', getline(3)) + + exe "normal 3G2|a\<CR>" + call assert_equal(' ', getline(3)) + call assert_equal(' line below', getline(4)) + + bwipe! + call prop_type_delete('indented') +endfunc + func Test_props_with_text_override() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c index 1c2e49ffd..45afd9d02 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 464, +/**/ 463, /**/ 462, |