diff options
author | bfredl <bjorn.linse@gmail.com> | 2022-03-06 14:09:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-06 14:09:01 +0100 |
commit | 72a04bda90ddb1a333727926f74d0721a7fb45e7 (patch) | |
tree | e6b77c87115314f4f92899e207b5fda6d8c549bf /src/nvim/api/private/helpers.c | |
parent | 8ed9c84481a7d0df0708d11ffa538f832591240f (diff) | |
parent | 30e4cc3b3f2133e9a7170da9da8175832681f39a (diff) | |
download | rneovim-72a04bda90ddb1a333727926f74d0721a7fb45e7.tar.gz rneovim-72a04bda90ddb1a333727926f74d0721a7fb45e7.tar.bz2 rneovim-72a04bda90ddb1a333727926f74d0721a7fb45e7.zip |
Merge pull request #16897 from lewis6991/signs
feat(decorations): support signs
Diffstat (limited to 'src/nvim/api/private/helpers.c')
-rw-r--r-- | src/nvim/api/private/helpers.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 35e8589255..8056950e26 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -1643,3 +1643,39 @@ sctx_T api_set_sctx(uint64_t channel_id) } return old_current_sctx; } + +// adapted from sign.c:sign_define_init_text. +// TODO(lewis6991): Consider merging +int init_sign_text(char_u **sign_text, char_u *text) +{ + char_u *s; + + char_u *endp = text + (int)STRLEN(text); + + // Count cells and check for non-printable chars + int cells = 0; + for (s = text; s < endp; s += utfc_ptr2len(s)) { + if (!vim_isprintc(utf_ptr2char(s))) { + break; + } + cells += utf_ptr2cells(s); + } + // Currently must be empty, one or two display cells + if (s != endp || cells > 2) { + return FAIL; + } + if (cells < 1) { + return OK; + } + + // Allocate one byte more if we need to pad up + // with a space. + size_t len = (size_t)(endp - text + ((cells == 1) ? 1 : 0)); + *sign_text = vim_strnsave(text, len); + + if (cells == 1) { + STRCPY(*sign_text + len - 1, " "); + } + + return OK; +} |