diff options
Diffstat (limited to 'src/nvim/statusline.c')
-rw-r--r-- | src/nvim/statusline.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index 01729bc4de..b0d3988ce6 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -1641,20 +1641,32 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op char *p = NULL; if (fold) { - size_t n = fill_foldcolumn(out_p, wp, stcp->foldinfo, - (linenr_T)get_vim_var_nr(VV_LNUM), NULL); + schar_T fold_buf[10]; + size_t n = fill_foldcolumn(NULL, wp, stcp->foldinfo, + (linenr_T)get_vim_var_nr(VV_LNUM), 0, fold_buf); stl_items[curitem].minwid = -((stcp->use_cul ? HLF_CLF : HLF_FC) + 1); + size_t buflen = 0; + // TODO(bfredl): this is very backwards. we must support schar_T + // being used directly in 'statuscol' + for (size_t i = 0; i < n; i++) { + schar_get(out_p + buflen, fold_buf[i]); + buflen += strlen(out_p + buflen); + } p = out_p; - p[n] = NUL; } + char buf[SIGN_WIDTH * MAX_SCHAR_SIZE]; size_t buflen = 0; varnumber_T virtnum = get_vim_var_nr(VV_VIRTNUM); for (int i = 0; i < width; i++) { if (!fold) { SignTextAttrs *sattr = virtnum ? NULL : &stcp->sattrs[i]; - p = sattr && sattr->text ? sattr->text : " "; - stl_items[curitem].minwid = -(sattr && sattr->text + p = " "; + if (sattr && sattr->text[0]) { + describe_sign_text(buf, sattr->text); + p = buf; + } + stl_items[curitem].minwid = -(sattr && sattr->text[0] ? (stcp->sign_cul_id ? stcp->sign_cul_id : sattr->hl_id) : (stcp->use_cul ? HLF_CLS : HLF_SC) + 1); } |