0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.4957: text properties in a wrong position after a block change

Problem:    Text properties in a wrong position after a block change.
Solution:   Adjust the properties columns. (closes #10427)
This commit is contained in:
LemonBoy
2022-05-15 13:08:02 +01:00
committed by Bram Moolenaar
parent 395bd1f6d3
commit b559b302e0
3 changed files with 41 additions and 0 deletions

View File

@@ -1814,6 +1814,12 @@ op_change(oparg_T *oap)
oldp += bd.textcol;
STRMOVE(newp + offset, oldp);
ml_replace(linenr, newp, FALSE);
#ifdef FEAT_PROP_POPUP
// Shift the properties for linenr as edit() would do.
if (curbuf->b_has_textprop)
adjust_prop_columns(linenr, bd.textcol,
vpos.coladd + ins_len, 0);
#endif
}
}
check_cursor();

View File

@@ -2003,4 +2003,37 @@ func Test_prop_insert_multiline()
bwipe!
endfunc
func Test_prop_blockwise_change()
new
call AddPropTypes()
call setline(1, ['foooooo', 'bar', 'baaaaz'])
call prop_add(1, 1, #{end_col: 3, type: 'one'})
call prop_add(2, 1, #{end_col: 3, type: 'two'})
call prop_add(3, 1, #{end_col: 3, type: 'three'})
" Replace the first two columns with '123', since 'start_incl' is false the
" prop is not extended.
call feedkeys("gg\<c-v>2jc123\<Esc>", 'nxt')
let lines =<< trim END
123oooooo
123ar
123aaaaz
END
call assert_equal(lines, getline(1, '$'))
let expected = [
\ {'lnum': 1, 'id': 0, 'col': 4, 'type_bufnr': 0, 'end': 1, 'type': 'one',
\ 'length': 1, 'start': 1},
\ {'lnum': 2, 'id': 0, 'col': 4, 'type_bufnr': 0, 'end': 1, 'type': 'two',
\ 'length': 1, 'start': 1},
\ {'lnum': 3, 'id': 0, 'col': 4, 'type_bufnr': 0, 'end': 1 ,
\ 'type': 'three', 'length': 1, 'start': 1}
\ ]
call assert_equal(expected, prop_list(1, #{end_lnum: 10}))
call DeletePropTypes()
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

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