changeset 28841:77a00aa3e215 v8.2.4944

patch 8.2.4944: text properties are wrong after "cc" Commit: https://github.com/vim/vim/commit/d0b1a09f44654bb5e29b09de1311845200f17d90 Author: LemonBoy <thatlemon@gmail.com> Date: Thu May 12 18:45:18 2022 +0100 patch 8.2.4944: text properties are wrong after "cc" Problem: Text properties are wrong after "cc". (Axel Forsman) Solution: Pass the deleted byte count to inserted_bytes(). (closes https://github.com/vim/vim/issues/10412, closes #7737, closes #5763)
author Bram Moolenaar <Bram@vim.org>
date Thu, 12 May 2022 20:00:02 +0200
parents 4318ef970867
children 4c4966f73c6b
files src/change.c src/testdir/test_textprop.vim src/version.c
diffstat 3 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/change.c
+++ b/src/change.c
@@ -2349,11 +2349,15 @@ truncate_line(int fixpos)
     char_u	*newp;
     linenr_T	lnum = curwin->w_cursor.lnum;
     colnr_T	col = curwin->w_cursor.col;
+    char_u	*old_line;
+    int		deleted;
 
+    old_line = ml_get(lnum);
     if (col == 0)
 	newp = vim_strsave((char_u *)"");
     else
-	newp = vim_strnsave(ml_get(lnum), col);
+	newp = vim_strnsave(old_line, col);
+    deleted = (int)STRLEN(old_line) - col;
 
     if (newp == NULL)
 	return FAIL;
@@ -2361,7 +2365,7 @@ truncate_line(int fixpos)
     ml_replace(lnum, newp, FALSE);
 
     // mark the buffer as changed and prepare for displaying
-    changed_bytes(lnum, curwin->w_cursor.col);
+    inserted_bytes(lnum, curwin->w_cursor.col, -deleted);
 
     // If "fixpos" is TRUE we don't want to end up positioned at the NUL.
     if (fixpos && curwin->w_cursor.col > 0)
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -534,6 +534,24 @@ func Test_prop_backspace()
   set bs&
 endfunc
 
+func Test_prop_change()
+  new
+  let expected = SetupOneLine() " 'xonex xtwoxx'
+
+  " Characterwise.
+  exe "normal 7|c$\<Esc>"
+  call assert_equal('xonex ', getline(1))
+  call assert_equal(expected[:0], prop_list(1))
+  " Linewise.
+  exe "normal cc\<Esc>"
+  call assert_equal('', getline(1))
+  call assert_equal([], prop_list(1))
+
+  call DeletePropTypes()
+  bwipe!
+  set bs&
+endfunc
+
 func Test_prop_replace()
   new
   set bs=2
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4944,
+/**/
     4943,
 /**/
     4942,