mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 8.2.4954: inserting line breaks text property spanning two lines
Problem: Inserting line breaks text property spanning more then one line. Solution: Check TP_FLAG_CONT_PREV and TP_FLAG_CONT_NEXT. (closes #10423)
This commit is contained in:
@@ -1958,4 +1958,37 @@ func Test_prop_shift_block()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -1650,11 +1650,12 @@ adjust_prop(
|
|||||||
proptype_T *pt = text_prop_type_by_id(curbuf, prop->tp_type);
|
proptype_T *pt = text_prop_type_by_id(curbuf, prop->tp_type);
|
||||||
int start_incl = (pt != NULL
|
int start_incl = (pt != NULL
|
||||||
&& (pt->pt_flags & PT_FLAG_INS_START_INCL))
|
&& (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
|
int end_incl = (pt != NULL
|
||||||
&& (pt->pt_flags & PT_FLAG_INS_END_INCL));
|
&& (pt->pt_flags & PT_FLAG_INS_END_INCL))
|
||||||
// Do not drop zero-width props if they later can increase in
|
|| (prop->tp_flags & TP_FLAG_CONT_NEXT);
|
||||||
// size.
|
// Do not drop zero-width props if they later can increase in size.
|
||||||
int droppable = !(start_incl || end_incl);
|
int droppable = !(start_incl || end_incl);
|
||||||
adjustres_T res = {TRUE, FALSE};
|
adjustres_T res = {TRUE, FALSE};
|
||||||
|
|
||||||
|
@@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
4954,
|
||||||
/**/
|
/**/
|
||||||
4953,
|
4953,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user