aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/vim.c
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-11-11 00:52:50 +0100
committerLuuk van Baal <luukvbaal@gmail.com>2023-11-17 15:10:15 +0100
commitc4afb9788c4f139eb2e3b7aa4d6a6a20b67ba156 (patch)
treeabc3a6da1906ea61f40aaacf3bdb813c27e19d64 /src/nvim/api/vim.c
parentba58c6f8a44c9c37e97fce1d802dc5b5defceb3d (diff)
downloadrneovim-c4afb9788c4f139eb2e3b7aa4d6a6a20b67ba156.tar.gz
rneovim-c4afb9788c4f139eb2e3b7aa4d6a6a20b67ba156.tar.bz2
rneovim-c4afb9788c4f139eb2e3b7aa4d6a6a20b67ba156.zip
refactor(sign): move legacy signs to extmarks
Problem: The legacy signlist data structures and associated functions are redundant since the introduction of extmark signs. Solution: Store signs defined through the legacy commands in a hashmap, placed signs in the extmark tree. Replace signlist associated functions. Usage of the legacy sign commands should yield no change in behavior with the exception of: - "orphaned signs" are now always removed when the line it is placed on is deleted. This used to depend on the value of 'signcolumn'. - It is no longer possible to place multiple signs with the same identifier in a single group on multiple lines. This will now move the sign instead. Moreover, both signs placed through the legacy sign commands and through |nvim_buf_set_extmark()|: - Will show up in both |sign-place| and |nvim_buf_get_extmarks()|. - Are displayed by increasing sign identifier, left to right. Extmark signs used to be ordered decreasingly as opposed to legacy signs.
Diffstat (limited to 'src/nvim/api/vim.c')
-rw-r--r--src/nvim/api/vim.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 1d5898c488..88cbdbe1de 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -2196,13 +2196,12 @@ Dictionary nvim_eval_statusline(String str, Dict(eval_statusline) *opts, Error *
}
}
if (statuscol_lnum) {
- HlPriId line = { 0 };
- HlPriId cul = { 0 };
- HlPriId num = { 0 };
+ int line_id = 0;
+ int cul_id = 0;
+ int num_id = 0;
linenr_T lnum = statuscol_lnum;
- int num_signs = buf_get_signattrs(wp->w_buffer, lnum, sattrs, &num, &line, &cul);
- decor_redraw_signs(wp->w_buffer, lnum - 1, &num_signs, sattrs, &num, &line, &cul);
wp->w_scwidth = win_signcol_count(wp);
+ decor_redraw_signs(wp, wp->w_buffer, lnum - 1, sattrs, &line_id, &cul_id, &num_id);
statuscol.sattrs = sattrs;
statuscol.foldinfo = fold_info(wp, lnum);
@@ -2215,9 +2214,9 @@ Dictionary nvim_eval_statusline(String str, Dict(eval_statusline) *opts, Error *
statuscol.use_cul = lnum == wp->w_cursorline && (wp->w_p_culopt_flags & CULOPT_NBR);
}
- statuscol.sign_cul_id = statuscol.use_cul ? cul.hl_id : 0;
- if (num.hl_id) {
- stc_hl_id = num.hl_id;
+ statuscol.sign_cul_id = statuscol.use_cul ? cul_id : 0;
+ if (num_id) {
+ stc_hl_id = num_id;
} else if (statuscol.use_cul) {
stc_hl_id = HLF_CLN + 1;
} else if (wp->w_p_rnu) {