aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/statusline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/statusline.c')
-rw-r--r--src/nvim/statusline.c22
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);
}