1
0
forked from aniani/vim

patch 8.1.2308: deleting text before zero-width textprop removes it

Problem:    Deleting text before zero-width textprop removes it.
Solution:   Keep zero-width textprop when deleting text.
This commit is contained in:
Bram Moolenaar 2019-11-16 20:41:51 +01:00
parent a37cb55da6
commit ecafcc15ca
3 changed files with 35 additions and 1 deletions

View File

@ -650,6 +650,35 @@ func Test_prop_undo()
call prop_type_delete('comment')
endfunc
func Test_prop_delete_text()
new
call prop_type_add('comment', {'highlight': 'Directory'})
call setline(1, ['oneone', 'twotwo', 'three'])
" zero length property
call prop_add(1, 3, {'type': 'comment'})
let expected = [{'col': 3, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
call assert_equal(expected, prop_list(1))
" delete one char moves the property
normal! x
let expected = [{'col': 2, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
call assert_equal(expected, prop_list(1))
" delete char of the property has no effect
normal! lx
let expected = [{'col': 2, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
call assert_equal(expected, prop_list(1))
" delete more chars moves property to first column, is not deleted
normal! 0xxxx
let expected = [{'col': 1, 'length': 0, 'id': 0, 'type': 'comment', 'start': 1, 'end': 1} ]
call assert_equal(expected, prop_list(1))
bwipe!
call prop_type_delete('comment')
endfunc
" screenshot test with textprop highlighting
func Test_textprop_screenshot_various()
CheckScreendump

View File

@ -1075,10 +1075,13 @@ adjust_prop_columns(
}
else if (bytes_added <= 0 && (tmp_prop.tp_col > col + 1))
{
int len_changed = FALSE;
if (tmp_prop.tp_col + bytes_added < col + 1)
{
tmp_prop.tp_len += (tmp_prop.tp_col - 1 - col) + bytes_added;
tmp_prop.tp_col = col + 1;
len_changed = TRUE;
}
else
tmp_prop.tp_col += bytes_added;
@ -1086,7 +1089,7 @@ adjust_prop_columns(
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
u_savesub(lnum);
dirty = TRUE;
if (tmp_prop.tp_len <= 0)
if (len_changed && tmp_prop.tp_len <= 0)
continue; // drop this text property
}
else if (tmp_prop.tp_len > 0

View File

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