aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-01-15 07:47:13 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-01-15 07:47:13 +0800
commit147f65373ecb5a5582d4cc0eb41ebc9a303181cc (patch)
treee1060a64552437c28d51ebcd7c806525441b8edc /src
parent574a5822023939d534d922eaa345bb7e0633d2b8 (diff)
downloadrneovim-147f65373ecb5a5582d4cc0eb41ebc9a303181cc.tar.gz
rneovim-147f65373ecb5a5582d4cc0eb41ebc9a303181cc.tar.bz2
rneovim-147f65373ecb5a5582d4cc0eb41ebc9a303181cc.zip
vim-patch:8.2.4091: virtcol is recomputed for statusline unnecessarily
Problem: Virtcol is recomputed for statusline unnecessarily. Solution: Just use "w_virtcol". (closes vim/vim#9523) https://github.com/vim/vim/commit/0f112052acaeffd75b7eb001eeb8a246ad12a276
Diffstat (limited to 'src')
-rw-r--r--src/nvim/buffer.c9
-rw-r--r--src/nvim/testdir/test_statusline.vim9
2 files changed, 10 insertions, 8 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index abd22fba26..4157651a7e 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -4001,14 +4001,7 @@ int build_stl_str_hl(win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use
case STL_VIRTCOL:
case STL_VIRTCOL_ALT: {
- // In list mode virtcol needs to be recomputed
- colnr_T virtcol = wp->w_virtcol;
- if (wp->w_p_list && wp->w_p_lcs_chars.tab1 == NUL) {
- wp->w_p_list = false;
- getvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL);
- wp->w_p_list = true;
- }
- virtcol++;
+ colnr_T 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
diff --git a/src/nvim/testdir/test_statusline.vim b/src/nvim/testdir/test_statusline.vim
index a3e4dcdd25..f40c9ae097 100644
--- a/src/nvim/testdir/test_statusline.vim
+++ b/src/nvim/testdir/test_statusline.vim
@@ -186,7 +186,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".