Mercurial > vim
changeset 27124:8f1f4f6c87ad v8.2.4091
patch 8.2.4091: virtcol is recomputed for statusline unnecessarily
Commit: https://github.com/vim/vim/commit/0f112052acaeffd75b7eb001eeb8a246ad12a276
Author: zeertzjq <zeertzjq@outlook.com>
Date: Fri Jan 14 20:11:38 2022 +0000
patch 8.2.4091: virtcol is recomputed for statusline unnecessarily
Problem: Virtcol is recomputed for statusline unnecessarily.
Solution: Just use "w_virtcol". (closes https://github.com/vim/vim/issues/9523)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 14 Jan 2022 21:15:04 +0100 |
parents | ba99046fbbc4 |
children | 5e68a01e7d02 |
files | src/buffer.c src/testdir/test_statusline.vim src/version.c |
diffstat | 3 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/buffer.c +++ b/src/buffer.c @@ -4610,15 +4610,7 @@ build_stl_str_hl( case STL_VIRTCOL: case STL_VIRTCOL_ALT: - // In list mode virtcol needs to be recomputed - virtcol = wp->w_virtcol; - if (wp->w_p_list && wp->w_lcs_chars.tab1 == NUL) - { - wp->w_p_list = FALSE; - getvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL); - wp->w_p_list = TRUE; - } - ++virtcol; + virtcol = wp->w_virtcol + 1; // Don't display %V if it's the same as %c. if (opt == STL_VIRTCOL_ALT && (virtcol == (colnr_T)(!(State & INSERT) && empty_line
--- a/src/testdir/test_statusline.vim +++ b/src/testdir/test_statusline.vim @@ -196,7 +196,16 @@ func Test_statusline() set virtualedit=all norm 10| call assert_match('^10,-10\s*$', s:get_statusline()) + set list + call assert_match('^10,-10\s*$', s:get_statusline()) set virtualedit& + exe "norm A\<Tab>\<Tab>a\<Esc>" + " In list mode a <Tab> is shown as "^I", which is 2-wide. + call assert_match('^9,-9\s*$', s:get_statusline()) + set list& + " Now the second <Tab> ends at the 16th screen column. + call assert_match('^17,-17\s*$', s:get_statusline()) + undo " %w: Preview window flag, text is "[Preview]". " %W: Preview window flag, text is ",PRV".