0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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.
This commit is contained in:
Bram Moolenaar 2019-01-04 18:07:24 +01:00
parent 7f1664e392
commit 21b5038e02
3 changed files with 35 additions and 2 deletions

View File

@ -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)

View File

@ -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()

View File

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