Mercurial > vim
diff src/sign.c @ 35568:fff85588c140 v9.1.0538
patch 9.1.0538: not possible to assign priority when defining a sign
Commit: https://github.com/vim/vim/commit/b975ddfdf96644b8df808415dee36f99abd48753
Author: LemonBoy <thatlemon@gmail.com>
Date: Sat Jul 6 18:04:09 2024 +0200
patch 9.1.0538: not possible to assign priority when defining a sign
Problem: not possible to assign priority when defining a sign
(Mathias Fu?enegger)
Solution: Add the priority argument for the :sign-define ex command and
the sign_define() function (LemonBoy)
Use the specified value instead of the default one (SIGN_DEF_PRIO) when
no priority is explicitly specified in sign_place or :sign place.
fixes: #8334
closes: #15124
Signed-off-by: LemonBoy <thatlemon@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 06 Jul 2024 18:15:03 +0200 |
parents | 04d9dff67d99 |
children | f2d9ef5eb778 |
line wrap: on
line diff
--- a/src/sign.c +++ b/src/sign.c @@ -34,6 +34,7 @@ struct sign int sn_text_hl; // highlight ID for text int sn_cul_hl; // highlight ID for text on current line when 'cursorline' is set int sn_num_hl; // highlight ID for line number + int sn_priority; // default priority of this sign, -1 means SIGN_DEF_PRIO }; static sign_T *first_sign = NULL; @@ -1047,7 +1048,8 @@ sign_define_by_name( char_u *text, char_u *texthl, char_u *culhl, - char_u *numhl) + char_u *numhl, + int prio) { sign_T *sp_prev; sign_T *sp; @@ -1083,6 +1085,8 @@ sign_define_by_name( if (text != NULL && (sign_define_init_text(sp, text) == FAIL)) return FAIL; + sp->sn_priority = prio; + if (linehl != NULL) { if (*linehl == NUL) @@ -1206,6 +1210,10 @@ sign_place( if (*sign_id == 0) *sign_id = sign_group_get_next_signid(buf, sign_group); + // Use the default priority value for this sign. + if (prio == -1) + prio = (sp->sn_priority != -1) ? sp->sn_priority : SIGN_DEF_PRIO; + if (lnum > 0) // ":sign place {id} line={lnum} name={name} file={fname}": // place a sign @@ -1338,6 +1346,7 @@ sign_define_cmd(char_u *sign_name, char_ char_u *texthl = NULL; char_u *culhl = NULL; char_u *numhl = NULL; + int prio = -1; int failed = FALSE; // set values for a defined sign. @@ -1377,6 +1386,12 @@ sign_define_cmd(char_u *sign_name, char_ arg += 6; numhl = vim_strnsave(arg, p - arg); } + else if (STRNCMP(arg, "priority=", 9) == 0) + { + arg += 9; + prio = atoi((char *)arg); + arg = skiptowhite(arg); + } else { semsg(_(e_invalid_argument_str), arg); @@ -1386,7 +1401,7 @@ sign_define_cmd(char_u *sign_name, char_ } if (!failed) - sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl); + sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl, prio); vim_free(icon); vim_free(text); @@ -1721,7 +1736,7 @@ ex_sign(exarg_T *eap) linenr_T lnum = -1; char_u *sign_name = NULL; char_u *group = NULL; - int prio = SIGN_DEF_PRIO; + int prio = -1; // Parse command line arguments if (parse_sign_cmd_args(idx, arg, &sign_name, &id, &group, &prio, @@ -1750,6 +1765,8 @@ sign_getinfo(sign_T *sp, dict_T *retdict dict_add_string(retdict, "icon", sp->sn_icon); if (sp->sn_text != NULL) dict_add_string(retdict, "text", sp->sn_text); + if (sp->sn_priority > 0) + dict_add_number(retdict, "priority", sp->sn_priority); if (sp->sn_line_hl > 0) { p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE); @@ -1913,6 +1930,7 @@ sign_gui_started(void) sign_list_defined(sign_T *sp) { char_u *p; + char lbuf[MSG_BUF_LEN]; smsg("sign %s", sp->sn_name); if (sp->sn_icon != NULL) @@ -1931,6 +1949,11 @@ sign_list_defined(sign_T *sp) msg_puts(" text="); msg_outtrans(sp->sn_text); } + if (sp->sn_priority > 0) + { + vim_snprintf(lbuf, MSG_BUF_LEN, " priority=%d", sp->sn_priority); + msg_puts(lbuf); + } if (sp->sn_line_hl > 0) { msg_puts(" linehl="); @@ -2088,7 +2111,8 @@ get_sign_name(expand_T *xp UNUSED, int i { char *define_arg[] = { - "culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", NULL + "culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", "priority=", + NULL }; return (char_u *)define_arg[idx]; } @@ -2261,6 +2285,7 @@ sign_define_from_dict(char_u *name_arg, char_u *texthl = NULL; char_u *culhl = NULL; char_u *numhl = NULL; + int prio = -1; int retval = -1; if (name_arg == NULL) @@ -2281,9 +2306,10 @@ sign_define_from_dict(char_u *name_arg, texthl = dict_get_string(dict, "texthl", TRUE); culhl = dict_get_string(dict, "culhl", TRUE); numhl = dict_get_string(dict, "numhl", TRUE); + prio = dict_get_number_def(dict, "priority", -1); } - if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl) == OK) + if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl, prio) == OK) retval = 0; cleanup: @@ -2511,7 +2537,7 @@ sign_place_from_dict( buf_T *buf = NULL; dictitem_T *di; linenr_T lnum = 0; - int prio = SIGN_DEF_PRIO; + int prio = -1; int notanum = FALSE; int ret_sign_id = -1;