aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ops.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-05-20 20:50:32 +0800
committerzeertzjq <zeertzjq@outlook.com>2024-05-20 20:59:54 +0800
commite0259b9466a0dd62b74d4aa195b3c5e6c7a183d0 (patch)
tree225a99d08431a6f295c01e60f17ccbe65075a57a /src/nvim/ops.c
parent3383603c134944d374eb0814a2f707a7e3e89b43 (diff)
downloadrneovim-e0259b9466a0dd62b74d4aa195b3c5e6c7a183d0.tar.gz
rneovim-e0259b9466a0dd62b74d4aa195b3c5e6c7a183d0.tar.bz2
rneovim-e0259b9466a0dd62b74d4aa195b3c5e6c7a183d0.zip
vim-patch:9.1.0423: getregionpos() wrong with blockwise mode and multibyte
Problem: getregionpos() wrong with blockwise mode and multibyte. Solution: Use textcol and textlen instead of start_vcol and end_vcol. Handle coladd properly (zeertzjq). Also remove unnecessary buflist_findnr() in add_regionpos_range(), as getregionpos() has already switched buffer. closes: vim/vim#14805 https://github.com/vim/vim/commit/c95e64f41f7f6d1bdc95b047ae9b369743c8637b
Diffstat (limited to 'src/nvim/ops.c')
-rw-r--r--src/nvim/ops.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index d54eea0f3e..707cf5ca9a 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -4258,6 +4258,7 @@ void charwise_block_prep(pos_T start, pos_T end, struct block_def *bdp, linenr_T
char *p = ml_get(lnum);
bdp->startspaces = 0;
bdp->endspaces = 0;
+ bdp->start_char_vcols = 0;
if (lnum == start.lnum) {
startcol = start.col;
@@ -4265,7 +4266,8 @@ void charwise_block_prep(pos_T start, pos_T end, struct block_def *bdp, linenr_T
getvcol(curwin, &start, &cs, NULL, &ce);
if (ce != cs && start.coladd > 0) {
// Part of a tab selected -- but don't double-count it.
- bdp->startspaces = (ce - cs + 1) - start.coladd;
+ bdp->start_char_vcols = ce - cs + 1;
+ bdp->startspaces = bdp->start_char_vcols - start.coladd;
if (bdp->startspaces < 0) {
bdp->startspaces = 0;
}
@@ -4303,6 +4305,7 @@ void charwise_block_prep(pos_T start, pos_T end, struct block_def *bdp, linenr_T
} else {
bdp->textlen = endcol - startcol + inclusive;
}
+ bdp->textcol = startcol;
bdp->textstart = p + startcol;
}