mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
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:
parent
a37cb55da6
commit
ecafcc15ca
@ -650,6 +650,35 @@ func Test_prop_undo()
|
|||||||
call prop_type_delete('comment')
|
call prop_type_delete('comment')
|
||||||
endfunc
|
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
|
" screenshot test with textprop highlighting
|
||||||
func Test_textprop_screenshot_various()
|
func Test_textprop_screenshot_various()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
|
@ -1075,10 +1075,13 @@ adjust_prop_columns(
|
|||||||
}
|
}
|
||||||
else if (bytes_added <= 0 && (tmp_prop.tp_col > col + 1))
|
else if (bytes_added <= 0 && (tmp_prop.tp_col > col + 1))
|
||||||
{
|
{
|
||||||
|
int len_changed = FALSE;
|
||||||
|
|
||||||
if (tmp_prop.tp_col + bytes_added < col + 1)
|
if (tmp_prop.tp_col + bytes_added < col + 1)
|
||||||
{
|
{
|
||||||
tmp_prop.tp_len += (tmp_prop.tp_col - 1 - col) + bytes_added;
|
tmp_prop.tp_len += (tmp_prop.tp_col - 1 - col) + bytes_added;
|
||||||
tmp_prop.tp_col = col + 1;
|
tmp_prop.tp_col = col + 1;
|
||||||
|
len_changed = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tmp_prop.tp_col += bytes_added;
|
tmp_prop.tp_col += bytes_added;
|
||||||
@ -1086,7 +1089,7 @@ adjust_prop_columns(
|
|||||||
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
|
if ((flags & APC_SAVE_FOR_UNDO) && !dirty)
|
||||||
u_savesub(lnum);
|
u_savesub(lnum);
|
||||||
dirty = TRUE;
|
dirty = TRUE;
|
||||||
if (tmp_prop.tp_len <= 0)
|
if (len_changed && tmp_prop.tp_len <= 0)
|
||||||
continue; // drop this text property
|
continue; // drop this text property
|
||||||
}
|
}
|
||||||
else if (tmp_prop.tp_len > 0
|
else if (tmp_prop.tp_len > 0
|
||||||
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2308,
|
||||||
/**/
|
/**/
|
||||||
2307,
|
2307,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user