mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 05:58:33 +00:00
perf: reuse fast character size calculation algorithm from getvcol()
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user