changeset 15365:01ee8dc12313 v8.1.0690

patch 8.1.0690: setline() and setbufline() do not clear text properties commit https://github.com/vim/vim/commit/21b5038e02306ce2fd438249055eed372befe51f Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jan 4 18:07:24 2019 +0100 patch 8.1.0690: setline() and setbufline() do not clear text properties Problem: setline() and setbufline() do not clear text properties. Solution: Clear text properties when setting the text.
author Bram Moolenaar <Bram@vim.org>
date Fri, 04 Jan 2019 18:15:04 +0100
parents 08a7f9533397
children 537ee1380f26
files src/evalfunc.c src/testdir/test_textprop.vim src/version.c
diffstat 3 files changed, 35 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -1357,8 +1357,10 @@ set_buffer_lines(
 
 	if (!append && lnum <= curbuf->b_ml.ml_line_count)
 	{
-	    /* existing line, replace it */
-	    if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK)
+	    // Existing line, replace it.
+	    // Removes any existing text properties.
+	    if (u_savesub(lnum) == OK && ml_replace_len(
+		      lnum, line, (colnr_T)STRLEN(line) + 1, TRUE, TRUE) == OK)
 	    {
 		changed_bytes(lnum, 0);
 		if (is_curbuf && lnum == curwin->w_cursor.lnum)
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -261,6 +261,35 @@ func Test_prop_clear_buf()
   bwipe!
 endfunc
 
+func Test_prop_setline()
+  new
+  call AddPropTypes()
+  call SetupPropsInFirstLine()
+  call assert_equal(s:expected_props, prop_list(1))
+
+  call setline(1, 'foobar')
+  call assert_equal([], prop_list(1))
+
+  call DeletePropTypes()
+  bwipe!
+endfunc
+
+func Test_prop_setbufline()
+  new
+  call AddPropTypes()
+  call SetupPropsInFirstLine()
+  let bufnr = bufnr('')
+  wincmd w
+  call assert_equal(s:expected_props, prop_list(1, {'bufnr': bufnr}))
+
+  call setbufline(bufnr, 1, 'foobar')
+  call assert_equal([], prop_list(1, {'bufnr': bufnr}))
+
+  wincmd w
+  call DeletePropTypes()
+  bwipe!
+endfunc
+
 " Setup a three line prop in lines 2 - 4.
 " Add short props in line 1 and 5.
 func Setup_three_line_prop()
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    690,
+/**/
     689,
 /**/
     688,