Patch 8.2.1690
Problem: Text properties not adjusted for "I" in Visual block mode.
Solution: Call inserted_bytes().
Files: src/ops.c, src/change.c, src/proto/change.pro,
src/testdir/test_textprop.vim
*** ../vim-8.2.1689/src/ops.c 2020-09-15 20:34:04.832428486 +0200
--- src/ops.c 2020-09-15 21:22:26.144272811 +0200
***************
*** 481,486 ****
--- 481,487 ----
int count = 0; // extra spaces to replace a cut TAB
int spaces = 0; // non-zero if cutting a TAB
colnr_T offset; // pointer along new line
+ colnr_T startcol; // column where insert starts
unsigned s_len; // STRLEN(s)
char_u *newp, *oldp; // new, old lines
linenr_T lnum; // loop var
***************
*** 553,561 ****
// insert pre-padding
vim_memset(newp + offset, ' ', (size_t)spaces);
// copy the new text
! mch_memmove(newp + offset + spaces, s, (size_t)s_len);
offset += s_len;
if (spaces && !bdp->is_short)
--- 554,563 ----
// insert pre-padding
vim_memset(newp + offset, ' ', (size_t)spaces);
+ startcol = offset + spaces;
// copy the new text
! mch_memmove(newp + startcol, s, (size_t)s_len);
offset += s_len;
if (spaces && !bdp->is_short)
***************
*** 574,579 ****
--- 576,585 ----
ml_replace(lnum, newp, FALSE);
+ if (b_insert)
+ // correct any text properties
+ inserted_bytes(lnum, startcol, s_len);
+
if (lnum == oap->end.lnum)
{
// Set "']" mark to the end of the block instead of the end of
*** ../vim-8.2.1689/src/change.c 2020-05-30 20:30:42.888816585 +0200
--- src/change.c 2020-09-15 21:16:24.961107605 +0200
***************
*** 693,699 ****
* Like changed_bytes() but also adjust text properties for "added" bytes.
* When "added" is negative text was deleted.
*/
! static void
inserted_bytes(linenr_T lnum, colnr_T col, int added UNUSED)
{
#ifdef FEAT_PROP_POPUP
--- 693,699 ----
* Like changed_bytes() but also adjust text properties for "added" bytes.
* When "added" is negative text was deleted.
*/
! void
inserted_bytes(linenr_T lnum, colnr_T col, int added UNUSED)
{
#ifdef FEAT_PROP_POPUP
*** ../vim-8.2.1689/src/proto/change.pro 2019-12-12 12:55:15.000000000
+0100
--- src/proto/change.pro 2020-09-15 21:17:36.504954514 +0200
***************
*** 9,14 ****
--- 9,15 ----
void invoke_listeners(buf_T *buf);
void remove_listeners(buf_T *buf);
void changed_bytes(linenr_T lnum, colnr_T col);
+ void inserted_bytes(linenr_T lnum, colnr_T col, int added);
void appended_lines(linenr_T lnum, long count);
void appended_lines_mark(linenr_T lnum, long count);
void deleted_lines(linenr_T lnum, long count);
*** ../vim-8.2.1689/src/testdir/test_textprop.vim 2020-09-15
20:34:04.832428486 +0200
--- src/testdir/test_textprop.vim 2020-09-15 21:33:34.066497138 +0200
***************
*** 1314,1317 ****
--- 1314,1348 ----
call prop_type_delete('test')
endfunc
+ func Test_prop_block_insert()
+ new
+ call prop_type_add('test', {'highlight': 'ErrorMsg'})
+ call setline(1, ['one ', 'two '])
+ call prop_add(1, 1, {'length': 3, 'type': 'test'})
+ call prop_add(2, 1, {'length': 3, 'type': 'test'})
+
+ " insert "xx" in the first column of both lines
+ exe "normal! gg0\<C-V>jIxx\<Esc>"
+ eval getline(1, 2)->assert_equal(['xxone ', 'xxtwo '])
+ let expected = [#{id: 0, col: 3, end: 1, type: 'test', length: 3, start: 1}]
+ eval prop_list(1)->assert_equal(expected)
+ eval prop_list(2)->assert_equal(expected)
+
+ " insert "yy" inside the text props to make them longer
+ exe "normal! gg03l\<C-V>jIyy\<Esc>"
+ eval getline(1, 2)->assert_equal(['xxoyyne ', 'xxtyywo '])
+ let expected[0].length = 5
+ eval prop_list(1)->assert_equal(expected)
+ eval prop_list(2)->assert_equal(expected)
+
+ " insert "zz" after the text props, text props don't change
+ exe "normal! gg07l\<C-V>jIzz\<Esc>"
+ eval getline(1, 2)->assert_equal(['xxoyynezz ', 'xxtyywozz '])
+ eval prop_list(1)->assert_equal(expected)
+ eval prop_list(2)->assert_equal(expected)
+
+ bwipe!
+ call prop_type_delete('test')
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.1689/src/version.c 2020-09-15 20:52:03.164972054 +0200
--- src/version.c 2020-09-15 21:17:28.680971620 +0200
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 1690,
/**/
--
"I love deadlines. I especially like the whooshing sound they
make as they go flying by."
-- Douglas Adams
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202009151934.08FJYmfg1973587%40masaka.moolenaar.net.