aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2024-02-17 00:44:31 +0100
committerGitHub <noreply@github.com>2024-02-17 07:44:31 +0800
commit5fd1bac65ed07310eda5fd976b651cc493002849 (patch)
treec963a3143594a992272f25392305e09ccce00bc4
parent478273a4233d10b2ab898f1d38f4cfd491acc454 (diff)
downloadrneovim-5fd1bac65ed07310eda5fd976b651cc493002849.tar.gz
rneovim-5fd1bac65ed07310eda5fd976b651cc493002849.tar.bz2
rneovim-5fd1bac65ed07310eda5fd976b651cc493002849.zip
fix(api): don't use stl 'fillchar' for "use_statuscol_lnum" (#27501)
Problem: nvim_eval_statusline() uses "stl" from 'fillchars' with "use_statuscol_lnum". Solution: Reorder "fillchar" else chain.
-rw-r--r--src/nvim/api/vim.c73
-rw-r--r--test/functional/api/vim_spec.lua3
2 files changed, 36 insertions, 40 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index b7cb14867d..1184eb7441 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -2203,49 +2203,44 @@ Dictionary nvim_eval_statusline(String str, Dict(eval_statusline) *opts, Arena *
statuscol_T statuscol = { 0 };
SignTextAttrs sattrs[SIGN_SHOW_MAX] = { 0 };
- if (opts->use_tabline) {
- fillchar = schar_from_ascii(' ');
- } else {
- if (fillchar == 0) {
- if (opts->use_winbar) {
- fillchar = wp->w_p_fcs_chars.wbr;
- } else {
- int attr;
- fillchar = fillchar_status(&attr, wp);
+ if (statuscol_lnum) {
+ int line_id = 0;
+ int cul_id = 0;
+ int num_id = 0;
+ linenr_T lnum = statuscol_lnum;
+ decor_redraw_signs(wp, wp->w_buffer, lnum - 1, sattrs, &line_id, &cul_id, &num_id);
+
+ statuscol.sattrs = sattrs;
+ statuscol.foldinfo = fold_info(wp, lnum);
+ wp->w_cursorline = win_cursorline_standout(wp) ? wp->w_cursor.lnum : 0;
+
+ if (wp->w_p_cul) {
+ if (statuscol.foldinfo.fi_level != 0 && statuscol.foldinfo.fi_lines > 0) {
+ wp->w_cursorline = statuscol.foldinfo.fi_lnum;
}
+ statuscol.use_cul = lnum == wp->w_cursorline && (wp->w_p_culopt_flags & CULOPT_NBR);
}
- if (statuscol_lnum) {
- int line_id = 0;
- int cul_id = 0;
- int num_id = 0;
- linenr_T lnum = statuscol_lnum;
- decor_redraw_signs(wp, wp->w_buffer, lnum - 1, sattrs, &line_id, &cul_id, &num_id);
-
- statuscol.sattrs = sattrs;
- statuscol.foldinfo = fold_info(wp, lnum);
- wp->w_cursorline = win_cursorline_standout(wp) ? wp->w_cursor.lnum : 0;
-
- if (wp->w_p_cul) {
- if (statuscol.foldinfo.fi_level != 0 && statuscol.foldinfo.fi_lines > 0) {
- wp->w_cursorline = statuscol.foldinfo.fi_lnum;
- }
- statuscol.use_cul = lnum == wp->w_cursorline && (wp->w_p_culopt_flags & CULOPT_NBR);
- }
- statuscol.sign_cul_id = statuscol.use_cul ? cul_id : 0;
- if (num_id) {
- stc_hl_id = num_id;
- } else if (statuscol.use_cul) {
- stc_hl_id = HLF_CLN + 1;
- } else if (wp->w_p_rnu) {
- stc_hl_id = (lnum < wp->w_cursor.lnum ? HLF_LNA : HLF_LNB) + 1;
- } else {
- stc_hl_id = HLF_N + 1;
- }
+ statuscol.sign_cul_id = statuscol.use_cul ? cul_id : 0;
+ if (num_id) {
+ stc_hl_id = num_id;
+ } else if (statuscol.use_cul) {
+ stc_hl_id = HLF_CLN + 1;
+ } else if (wp->w_p_rnu) {
+ stc_hl_id = (lnum < wp->w_cursor.lnum ? HLF_LNA : HLF_LNB) + 1;
+ } else {
+ stc_hl_id = HLF_N + 1;
+ }
- set_vim_var_nr(VV_LNUM, lnum);
- set_vim_var_nr(VV_RELNUM, labs(get_cursor_rel_lnum(wp, lnum)));
- set_vim_var_nr(VV_VIRTNUM, 0);
+ set_vim_var_nr(VV_LNUM, lnum);
+ set_vim_var_nr(VV_RELNUM, labs(get_cursor_rel_lnum(wp, lnum)));
+ set_vim_var_nr(VV_VIRTNUM, 0);
+ } else if (fillchar == 0 && !opts->use_tabline) {
+ if (opts->use_winbar) {
+ fillchar = wp->w_p_fcs_chars.wbr;
+ } else {
+ int attr;
+ fillchar = fillchar_status(&attr, wp);
}
}
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index 15b05e4de7..3d2fa7cd1f 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -3806,7 +3806,8 @@ describe('API', function()
it('works with statuscolumn', function()
exec([[
let &stc='%C%s%=%l '
- set cul nu nuw=3 scl=yes:2 fdc=2
+ " should not use "stl" from 'fillchars'
+ set cul nu nuw=3 scl=yes:2 fdc=2 fillchars=stl:#
call setline(1, repeat(['aaaaa'], 5))
let g:ns = nvim_create_namespace('')
call sign_define('a', {'text':'aa', 'texthl':'IncSearch', 'numhl':'Normal'})