0
0
mirror of https://github.com/vim/vim.git synced 2025-09-30 04:44:14 -04:00

patch 9.0.0464: with virtual text "above" indenting doesn't work well

Problem:    With virtual text "above" indenting doesn't work well.
Solution:   Ignore text properties while adjusting indent. (issue #11084)
This commit is contained in:
Bram Moolenaar
2022-09-14 16:09:57 +01:00
parent febe13892e
commit 702bd6c7c6
5 changed files with 28 additions and 1 deletions

View File

@@ -954,7 +954,7 @@ init_chartabsize_arg(
cts->cts_line = line; cts->cts_line = line;
cts->cts_ptr = ptr; cts->cts_ptr = ptr;
#ifdef FEAT_PROP_POPUP #ifdef FEAT_PROP_POPUP
if (lnum > 0) if (lnum > 0 && !ignore_text_props)
{ {
char_u *prop_start; char_u *prop_start;
int count; int count;

View File

@@ -755,6 +755,9 @@ EXTERN int popup_visible INIT(= FALSE);
EXTERN int popup_uses_mouse_move INIT(= FALSE); EXTERN int popup_uses_mouse_move INIT(= FALSE);
EXTERN int text_prop_frozen INIT(= 0); EXTERN int text_prop_frozen INIT(= 0);
// when TRUE computing the cursor position ignores text properties.
EXTERN int ignore_text_props INIT(= FALSE);
#endif #endif
// When set the popup menu will redraw soon using the pum_win_ values. Do not // When set the popup menu will redraw soon using the pum_win_ values. Do not

View File

@@ -1289,6 +1289,9 @@ change_indent(
// for the following tricks we don't want list mode // for the following tricks we don't want list mode
save_p_list = curwin->w_p_list; save_p_list = curwin->w_p_list;
curwin->w_p_list = FALSE; curwin->w_p_list = FALSE;
#ifdef FEAT_PROP_POPUP
ignore_text_props = TRUE;
#endif
vc = getvcol_nolist(&curwin->w_cursor); vc = getvcol_nolist(&curwin->w_cursor);
vcol = vc; vcol = vc;
@@ -1440,6 +1443,9 @@ change_indent(
++start_col; ++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 // 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 // case it is always possible because we backspace over the whole line and

View File

@@ -2892,6 +2892,22 @@ func Test_props_with_text_above()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc 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() func Test_props_with_text_override()
CheckRunVimInTerminal CheckRunVimInTerminal

View File

@@ -703,6 +703,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
464,
/**/ /**/
463, 463,
/**/ /**/