aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-03-12 06:56:06 +0800
committerGitHub <noreply@github.com>2024-03-12 06:56:06 +0800
commitcf156377e80232aa904b92e4af29dd6c61952401 (patch)
tree9306bcb4f8e168cea5201fe1d65c88f00b848764 /src
parent9cc755ad6a60e2b028d61c1dca62f8fe20f652d7 (diff)
downloadrneovim-cf156377e80232aa904b92e4af29dd6c61952401.tar.gz
rneovim-cf156377e80232aa904b92e4af29dd6c61952401.tar.bz2
rneovim-cf156377e80232aa904b92e4af29dd6c61952401.zip
vim-patch:8.2.4944: text properties are wrong after "cc" (#27821)
Problem: Text properties are wrong after "cc". (Axel Forsman) Solution: Pass the deleted byte count to inserted_bytes(). (closes vim/vim#10412, closes vim/vim#7737, closes vim/vim#5763) https://github.com/vim/vim/commit/d0b1a09f44654bb5e29b09de1311845200f17d90 Co-authored-by: LemonBoy <thatlemon@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/nvim/change.c11
-rw-r--r--src/nvim/ops.c11
2 files changed, 6 insertions, 16 deletions
diff --git a/src/nvim/change.c b/src/nvim/change.c
index b914bc29fe..3d06c6956e 100644
--- a/src/nvim/change.c
+++ b/src/nvim/change.c
@@ -1935,19 +1935,16 @@ theend:
/// If "fixpos" is true fix the cursor position when done.
void truncate_line(int fixpos)
{
- char *newp;
linenr_T lnum = curwin->w_cursor.lnum;
colnr_T col = curwin->w_cursor.col;
+ char *old_line = ml_get(lnum);
+ char *newp = col == 0 ? xstrdup("") : xstrnsave(old_line, (size_t)col);
+ int deleted = (int)strlen(old_line) - col;
- if (col == 0) {
- newp = xstrdup("");
- } else {
- newp = xstrnsave(ml_get(lnum), (size_t)col);
- }
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, 0);
// If "fixpos" is true we don't want to end up positioned at the NUL.
if (fixpos && curwin->w_cursor.col > 0) {
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 5a0ef66e91..4e27c44262 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -1613,15 +1613,8 @@ int op_delete(oparg_T *oap)
} else {
beginline(0); // cursor in column 0
}
-
- int old_len = (int)strlen(ml_get(curwin->w_cursor.lnum));
- truncate_line(false); // delete the rest of the line
-
- extmark_splice_cols(curbuf,
- (int)curwin->w_cursor.lnum - 1, curwin->w_cursor.col,
- old_len - curwin->w_cursor.col, 0, kExtmarkUndo);
-
- // leave cursor past last char in line
+ truncate_line(false); // delete the rest of the line,
+ // leave cursor past last char in line
if (oap->line_count > 1) {
u_clearline(curbuf); // "U" command not possible after "2cc"
}