Merge pull request #22113 from luukvbaal/nrwidth

fix(column): no longer reset nrwidth_line_count for 'statuscolumn'
This commit is contained in:
Lewis Russell
2023-02-14 14:37:01 +00:00
committed by GitHub
3 changed files with 6 additions and 14 deletions

View File

@@ -415,14 +415,12 @@ static void get_statuscol_str(win_T *wp, linenr_T lnum, int virtnum, statuscol_T
if (wp->w_statuscol_line_count != wp->w_nrwidth_line_count) { if (wp->w_statuscol_line_count != wp->w_nrwidth_line_count) {
wp->w_statuscol_line_count = wp->w_nrwidth_line_count; wp->w_statuscol_line_count = wp->w_nrwidth_line_count;
set_vim_var_nr(VV_VIRTNUM, 0); set_vim_var_nr(VV_VIRTNUM, 0);
build_statuscol_str(wp, wp->w_nrwidth_line_count, 0, stcp->width, build_statuscol_str(wp, wp->w_nrwidth_line_count, 0, stcp);
' ', stcp->text, &stcp->hlrec, stcp);
stcp->width += stcp->truncate; stcp->width += stcp->truncate;
} }
set_vim_var_nr(VV_VIRTNUM, virtnum); set_vim_var_nr(VV_VIRTNUM, virtnum);
int width = build_statuscol_str(wp, lnum, relnum, stcp->width, int width = build_statuscol_str(wp, lnum, relnum, stcp);
' ', stcp->text, &stcp->hlrec, stcp);
// Force a redraw in case of error or when truncated // Force a redraw in case of error or when truncated
if (*wp->w_p_stc == NUL || (stcp->truncate > 0 && wp->w_nrwidth < MAX_NUMBERWIDTH)) { if (*wp->w_p_stc == NUL || (stcp->truncate > 0 && wp->w_nrwidth < MAX_NUMBERWIDTH)) {
if (stcp->truncate) { // Avoid truncating 'statuscolumn' if (stcp->truncate) { // Avoid truncating 'statuscolumn'

View File

@@ -2178,9 +2178,6 @@ static char *set_bool_option(const int opt_idx, char *const varp, const int valu
if (curwin->w_p_spell) { if (curwin->w_p_spell) {
errmsg = did_set_spelllang(curwin); errmsg = did_set_spelllang(curwin);
} }
} else if (((int *)varp == &curwin->w_p_nu || (int *)varp == &curwin->w_p_rnu)
&& *curwin->w_p_stc != NUL) { // '(relative)number' + 'statuscolumn'
curwin->w_nrwidth_line_count = 0;
} }
if ((int *)varp == &curwin->w_p_arab) { if ((int *)varp == &curwin->w_p_arab) {

View File

@@ -874,11 +874,8 @@ void draw_tabline(void)
/// Build the 'statuscolumn' string for line "lnum". When "relnum" == -1, /// Build the 'statuscolumn' string for line "lnum". When "relnum" == -1,
/// the v:lnum and v:relnum variables don't have to be updated. /// the v:lnum and v:relnum variables don't have to be updated.
/// ///
/// @param hlrec HL attributes (can be NULL)
/// @param stcp Status column attributes (can be NULL)
/// @return The width of the built status column string for line "lnum" /// @return The width of the built status column string for line "lnum"
int build_statuscol_str(win_T *wp, linenr_T lnum, long relnum, int maxwidth, int fillchar, int build_statuscol_str(win_T *wp, linenr_T lnum, long relnum, statuscol_T *stcp)
char *buf, stl_hlrec_t **hlrec, statuscol_T *stcp)
{ {
bool fillclick = relnum >= 0 && lnum == wp->w_topline; bool fillclick = relnum >= 0 && lnum == wp->w_topline;
@@ -889,8 +886,8 @@ int build_statuscol_str(win_T *wp, linenr_T lnum, long relnum, int maxwidth, int
StlClickRecord *clickrec; StlClickRecord *clickrec;
char *stc = xstrdup(wp->w_p_stc); char *stc = xstrdup(wp->w_p_stc);
int width = build_stl_str_hl(wp, buf, MAXPATHL, stc, "statuscolumn", OPT_LOCAL, fillchar, int width = build_stl_str_hl(wp, stcp->text, MAXPATHL, stc, "statuscolumn", OPT_LOCAL, ' ',
maxwidth, hlrec, fillclick ? &clickrec : NULL, stcp); stcp->width, &stcp->hlrec, fillclick ? &clickrec : NULL, stcp);
xfree(stc); xfree(stc);
// Only update click definitions once per window per redraw // Only update click definitions once per window per redraw
@@ -898,7 +895,7 @@ int build_statuscol_str(win_T *wp, linenr_T lnum, long relnum, int maxwidth, int
stl_clear_click_defs(wp->w_statuscol_click_defs, wp->w_statuscol_click_defs_size); stl_clear_click_defs(wp->w_statuscol_click_defs, wp->w_statuscol_click_defs_size);
wp->w_statuscol_click_defs = stl_alloc_click_defs(wp->w_statuscol_click_defs, width, wp->w_statuscol_click_defs = stl_alloc_click_defs(wp->w_statuscol_click_defs, width,
&wp->w_statuscol_click_defs_size); &wp->w_statuscol_click_defs_size);
stl_fill_click_defs(wp->w_statuscol_click_defs, clickrec, buf, width, false); stl_fill_click_defs(wp->w_statuscol_click_defs, clickrec, stcp->text, width, false);
} }
return width; return width;