aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/getchar.c
diff options
context:
space:
mode:
authorVanaIgr <vanaigranov@gmail.com>2023-12-18 20:57:04 -0600
committerzeertzjq <zeertzjq@outlook.com>2024-01-22 09:04:45 +0800
commitcdf848a314bf91a0c87c717f9a44742dea877515 (patch)
tree3dda7a0c7117944ce95b4f2237fdcf9c066af131 /src/nvim/getchar.c
parentb5653984e5de514410b5654d2a9b92bdcb9eedf3 (diff)
downloadrneovim-cdf848a314bf91a0c87c717f9a44742dea877515.tar.gz
rneovim-cdf848a314bf91a0c87c717f9a44742dea877515.tar.bz2
rneovim-cdf848a314bf91a0c87c717f9a44742dea877515.zip
perf: reuse fast character size calculation algorithm from getvcol()
Diffstat (limited to 'src/nvim/getchar.c')
-rw-r--r--src/nvim/getchar.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 23937a6bb5..6515cc84da 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -2502,20 +2502,22 @@ static int vgetorpeek(bool advance)
// we are expecting to truncate the trailing
// white-space, so find the last non-white
// character -- webb
- if (did_ai
- && *skipwhite(get_cursor_line_ptr() + curwin->w_cursor.col) == NUL) {
+ if (did_ai && *skipwhite(get_cursor_line_ptr() + curwin->w_cursor.col) == NUL) {
curwin->w_wcol = 0;
ptr = get_cursor_line_ptr();
- chartabsize_T cts;
- init_chartabsize_arg(&cts, curwin, curwin->w_cursor.lnum, 0, ptr, ptr);
- while (cts.cts_ptr < ptr + curwin->w_cursor.col) {
- if (!ascii_iswhite(*cts.cts_ptr)) {
- curwin->w_wcol = cts.cts_vcol;
+ char *endptr = ptr + curwin->w_cursor.col;
+
+ CharsizeArg arg;
+ CSType cstype = init_charsize_arg(&arg, curwin, curwin->w_cursor.lnum, ptr);
+ StrCharInfo ci = utf_ptr2StrCharInfo(ptr);
+ int vcol = 0;
+ while (ci.ptr < endptr) {
+ if (!ascii_iswhite(ci.chr.value)) {
+ curwin->w_wcol = vcol;
}
- cts.cts_vcol += lbr_chartabsize(&cts);
- cts.cts_ptr += utfc_ptr2len(cts.cts_ptr);
+ vcol += win_charsize(cstype, vcol, ci.ptr, ci.chr.value, &arg).width;
+ ci = utfc_next(ci);
}
- clear_chartabsize_arg(&cts);
curwin->w_wrow = curwin->w_cline_row
+ curwin->w_wcol / curwin->w_width_inner;