diff options
author | VanaIgr <vanaigranov@gmail.com> | 2023-12-18 20:57:04 -0600 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2024-01-22 09:04:45 +0800 |
commit | cdf848a314bf91a0c87c717f9a44742dea877515 (patch) | |
tree | 3dda7a0c7117944ce95b4f2237fdcf9c066af131 /src/nvim/getchar.c | |
parent | b5653984e5de514410b5654d2a9b92bdcb9eedf3 (diff) | |
download | rneovim-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.c | 22 |
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; |