diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-11-30 14:21:53 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-11-30 14:21:53 +0100 |
commit | 7257073043252c2e01c8e168e6842a1121797243 (patch) | |
tree | d25b943b34d9c4184e2953dc783ecdc4ba1c02e5 /src/sign.c | |
parent | 310c32e8920140f0db747c6c6eb06b1ee53cdb5a (diff) | |
download | vim-git-7257073043252c2e01c8e168e6842a1121797243.tar.gz |
patch 8.1.2362: cannot place signs in a popup windowv8.1.2362
Problem: Cannot place signs in a popup window. (Maxim Kim)
Solution: Use the group prefix "PopUp" to specify which signs should show up
in a popup window. (closes #5277)
Diffstat (limited to 'src/sign.c')
-rw-r--r-- | src/sign.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/sign.c b/src/sign.c index 134edf09f..f3a1f9df9 100644 --- a/src/sign.c +++ b/src/sign.c @@ -138,7 +138,20 @@ sign_in_group(sign_entry_T *sign, char_u *group) return ((group != NULL && STRCMP(group, "*") == 0) || (group == NULL && sign->se_group == NULL) || (group != NULL && sign->se_group != NULL - && STRCMP(group, sign->se_group->sg_name) == 0)); + && STRCMP(group, sign->se_group->sg_name) == 0)); +} + +/* + * Return TRUE if "sign" is to be displayed in window "wp". + * If the group name starts with "PopUp" it only shows in a popup window. + */ + static int +sign_group_for_window(sign_entry_T *sign, win_T *wp) +{ + int for_popup = sign->se_group != NULL + && STRNCMP("PopUp", sign->se_group->sg_name, 5) == 0; + + return WIN_IS_POPUP(wp) ? for_popup : !for_popup; } /* @@ -484,8 +497,7 @@ buf_get_signattrs(win_T *wp, linenr_T lnum, sign_attrs_T *sattr) if (sign->se_lnum == lnum # ifdef FEAT_TEXT_PROP - && sign_in_group(sign, (char_u *)"popupmenu") - == (WIN_IS_POPUP(wp) ? TRUE : FALSE) + && sign_group_for_window(sign, wp) # endif ) { @@ -2645,8 +2657,7 @@ get_first_valid_sign(win_T *wp) sign_entry_T *sign = wp->w_buffer->b_signlist; # ifdef FEAT_TEXT_PROP - while (sign != NULL && sign_in_group(sign, (char_u *)"popupmenu") - == (WIN_IS_POPUP(wp) ? FALSE : TRUE)) + while (sign != NULL && !sign_group_for_window(sign, wp)) sign = sign->se_next; # endif return sign; |