diff options
author | luukvbaal <31730729+luukvbaal@users.noreply.github.com> | 2023-02-02 10:35:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-02 09:35:51 +0000 |
commit | 64fa75a86a9e2e301e884e21911d71688fc8f122 (patch) | |
tree | cd9286f4df6659bc4432403b285e46ad9bdfcd00 /src/nvim/screen.c | |
parent | 2c5906b55bb6092121f4d3b032d5449da7675c2b (diff) | |
download | rneovim-64fa75a86a9e2e301e884e21911d71688fc8f122.tar.gz rneovim-64fa75a86a9e2e301e884e21911d71688fc8f122.tar.bz2 rneovim-64fa75a86a9e2e301e884e21911d71688fc8f122.zip |
fix(column): estimate 'statuscolumn' width appropriately
Problem: The 'statuscolumn' width is being estimated without the
proper context. In particular, this resulted in the fact
that a custom fold column could be included in the estimated
`number_width()`, and doubly added when actually drawing the
statuscolumn due to `win_col_off()` also adding the
`'foldcolumn'` width. Resulting in a status column that is
`'foldcolumn'` cells wider than necessary.
Solution: Estimate 'statuscolumn' width in `get_statuscol_str()` when
a buffer's line count has changed.
Diffstat (limited to 'src/nvim/screen.c')
-rw-r--r-- | src/nvim/screen.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index ebff52cd69..05da6e0ef1 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -768,7 +768,6 @@ void comp_col(void) /// Otherwise it depends on 'numberwidth' and the line count. int number_width(win_T *wp) { - int n; linenr_T lnum; if (wp->w_p_rnu && !wp->w_p_nu) { @@ -784,17 +783,13 @@ int number_width(win_T *wp) } wp->w_nrwidth_line_count = lnum; - // make best estimate for 'statuscolumn' + // reset for 'statuscolumn' if (*wp->w_p_stc != NUL) { - char buf[MAXPATHL]; - wp->w_nrwidth_width = 0; - n = build_statuscol_str(wp, lnum, 0, 0, NUL, buf, NULL, NULL); - n = MAX(n, (wp->w_p_nu || wp->w_p_rnu) * (int)wp->w_p_nuw); - wp->w_nrwidth_width = MIN(n, MAX_NUMBERWIDTH); + wp->w_nrwidth_width = (wp->w_p_nu || wp->w_p_rnu) * (int)wp->w_p_nuw; return wp->w_nrwidth_width; } - n = 0; + int n = 0; do { lnum /= 10; n++; |