]> granicus.if.org Git - vim/commitdiff
patch 9.0.0464: with virtual text "above" indenting doesn't work well v9.0.0464
authorBram Moolenaar <Bram@vim.org>
Wed, 14 Sep 2022 15:09:57 +0000 (16:09 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 14 Sep 2022 15:09:57 +0000 (16:09 +0100)
Problem:    With virtual text "above" indenting doesn't work well.
Solution:   Ignore text properties while adjusting indent. (issue #11084)

src/charset.c
src/globals.h
src/indent.c
src/testdir/test_textprop.vim
src/version.c

index a19e55b6280aada120a0f14160d84c34af868a8d..c5edaf41e089426dd4297d1b50dc09fe5956bb3e 100644 (file)
@@ -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;
index 3d75e20d011fc13f29f24b56a11073e9bc2df0bc..521832428a69793e7133767300d64306e475b36e 100644 (file)
@@ -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
index 134336c12de559534b16d1a1b90b73ad80b72534..51585ec9e8bc25d801705c65a815e5113008f864 100644 (file)
@@ -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
index 5167e8e3b3fa6d330453a67a0f4f15c41c80b875..0a4037b9ef0f7f8cee8153114e901ff448066fbe 100644 (file)
@@ -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
 
index 1c2e49ffdf7c95ef7a5d8758928df830710dbf89..45afd9d027aba1060eeebd608989d199c98a2df3 100644 (file)
@@ -703,6 +703,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    464,
 /**/
     463,
 /**/