]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4954: inserting line breaks text property spanning two lines v8.2.4954
authorLemonBoy <thatlemon@gmail.com>
Sat, 14 May 2022 17:10:15 +0000 (18:10 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 14 May 2022 17:10:15 +0000 (18:10 +0100)
Problem:    Inserting line breaks text property spanning more then one line.
Solution:   Check TP_FLAG_CONT_PREV and TP_FLAG_CONT_NEXT. (closes #10423)

src/testdir/test_textprop.vim
src/textprop.c
src/version.c

index e2988664b9ade0e103ad0c93181456ce2e657aea..a2ba477e7147f3c0b68ce9e507d8054d16901327 100644 (file)
@@ -1958,4 +1958,37 @@ func Test_prop_shift_block()
   bwipe!
 endfunc
 
+func Test_prop_insert_multiline()
+  new
+  call AddPropTypes()
+
+  call setline(1, ['foobar', 'barbaz'])
+  call prop_add(1, 4, #{end_lnum: 2, end_col: 4, type: 'one'})
+
+  call feedkeys("1Goquxqux\<Esc>", 'nxt')
+  call feedkeys("2GOquxqux\<Esc>", 'nxt')
+
+  let lines =<< trim END
+      foobar
+      quxqux
+      quxqux
+      barbaz
+  END
+  call assert_equal(lines, getline(1, '$'))
+  let expected = [
+      \ {'lnum': 1, 'id': 0, 'col': 4, 'type_bufnr': 0, 'end': 0, 'type': 'one',
+      \ 'length': 4 ,'start': 1},
+      \ {'lnum': 2, 'id': 0, 'col': 1, 'type_bufnr': 0, 'end': 0, 'type': 'one',
+      \ 'length': 7, 'start': 0},
+      \ {'lnum': 3, 'id': 0, 'col': 1, 'type_bufnr': 0, 'end': 0, 'type': 'one',
+      \ 'length': 7, 'start': 0},
+      \ {'lnum': 4, 'id': 0, 'col': 1, 'type_bufnr': 0, 'end': 1, 'type': 'one',
+      \ 'length': 3, 'start': 0}
+      \ ]
+  call assert_equal(expected, prop_list(1, #{end_lnum: 10}))
+
+  call DeletePropTypes()
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 5ec983fcbbacc1dad3aeeff0381bec10df8a0923..6fc628a272b8598b5fa40080c56ce0c93e796a19 100644 (file)
@@ -1650,11 +1650,12 @@ adjust_prop(
     proptype_T *pt = text_prop_type_by_id(curbuf, prop->tp_type);
     int                start_incl = (pt != NULL
                                    && (pt->pt_flags & PT_FLAG_INS_START_INCL))
-                                                  || (flags & APC_SUBSTITUTE);
+                               || (flags & APC_SUBSTITUTE)
+                               || (prop->tp_flags & TP_FLAG_CONT_PREV);
     int                end_incl = (pt != NULL
-                                    && (pt->pt_flags & PT_FLAG_INS_END_INCL));
-               // Do not drop zero-width props if they later can increase in
-               // size.
+                                     && (pt->pt_flags & PT_FLAG_INS_END_INCL))
+                               || (prop->tp_flags & TP_FLAG_CONT_NEXT);
+    // Do not drop zero-width props if they later can increase in size.
     int                droppable = !(start_incl || end_incl);
     adjustres_T res = {TRUE, FALSE};
 
index 81bbdf9583c1fc8df2648da38f646ebdac8c317a..b8712f21e25b18b6a42c9391d200bf253e392d05 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4954,
 /**/
     4953,
 /**/