0
0
mirror of https://github.com/vim/vim.git synced 2025-10-12 06:44:06 -04:00

patch 8.1.2362: cannot place signs in a popup window

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)
This commit is contained in:
Bram Moolenaar
2019-11-30 14:21:53 +01:00
parent 310c32e892
commit 7257073043
5 changed files with 34 additions and 7 deletions

View File

@@ -73,6 +73,10 @@ other plugins using signs.
The group name "popupmenu" is used by popup windows where 'cursorline' is set. The group name "popupmenu" is used by popup windows where 'cursorline' is set.
To place a sign in a popup window the group name must start with "PopUp".
Other signs will not show in a popup window. The group name "PopUpMenu" is
used by popup windows where 'cursorline' is set.
*sign-priority* *sign-priority*
Each placed sign is assigned a priority value. When multiple signs are placed Each placed sign is assigned a priority value. When multiple signs are placed
on the same line, the attributes of the sign with the highest priority is used on the same line, the attributes of the sign with the highest priority is used

View File

@@ -611,7 +611,7 @@ popup_highlight_curline(win_T *wp)
int sign_id = 0; int sign_id = 0;
char_u *sign_name = popup_get_sign_name(wp); char_u *sign_name = popup_get_sign_name(wp);
buf_delete_signs(wp->w_buffer, (char_u *)"popupmenu"); buf_delete_signs(wp->w_buffer, (char_u *)"PopUpMenu");
if ((wp->w_popup_flags & POPF_CURSORLINE) != 0) if ((wp->w_popup_flags & POPF_CURSORLINE) != 0)
{ {
@@ -626,7 +626,7 @@ popup_highlight_curline(win_T *wp)
sign_define_by_name(sign_name, NULL, (char_u *)linehl, NULL, NULL); sign_define_by_name(sign_name, NULL, (char_u *)linehl, NULL, NULL);
} }
sign_place(&sign_id, (char_u *)"popupmenu", sign_name, sign_place(&sign_id, (char_u *)"PopUpMenu", sign_name,
wp->w_buffer, wp->w_cursor.lnum, SIGN_DEF_PRIO); wp->w_buffer, wp->w_cursor.lnum, SIGN_DEF_PRIO);
redraw_win_later(wp, NOT_VALID); redraw_win_later(wp, NOT_VALID);
} }

View File

@@ -141,6 +141,19 @@ sign_in_group(sign_entry_T *sign, char_u *group)
&& 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;
}
/* /*
* Get the next free sign identifier in the specified group * Get the next free sign identifier in the specified group
*/ */
@@ -484,8 +497,7 @@ buf_get_signattrs(win_T *wp, linenr_T lnum, sign_attrs_T *sattr)
if (sign->se_lnum == lnum if (sign->se_lnum == lnum
# ifdef FEAT_TEXT_PROP # ifdef FEAT_TEXT_PROP
&& sign_in_group(sign, (char_u *)"popupmenu") && sign_group_for_window(sign, wp)
== (WIN_IS_POPUP(wp) ? TRUE : FALSE)
# endif # endif
) )
{ {
@@ -2645,8 +2657,7 @@ get_first_valid_sign(win_T *wp)
sign_entry_T *sign = wp->w_buffer->b_signlist; sign_entry_T *sign = wp->w_buffer->b_signlist;
# ifdef FEAT_TEXT_PROP # ifdef FEAT_TEXT_PROP
while (sign != NULL && sign_in_group(sign, (char_u *)"popupmenu") while (sign != NULL && !sign_group_for_window(sign, wp))
== (WIN_IS_POPUP(wp) ? FALSE : TRUE))
sign = sign->se_next; sign = sign->se_next;
# endif # endif
return sign; return sign;

View File

@@ -0,0 +1,10 @@
|>+0#e000002#ffffff0@1>0+0#ffffff16#ff404010| @71
| +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @71
| +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @71
| +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @23|#+0#ffffff16#ff404010|!|h+0#0000001#ffff4012|e|l@1|o| @12| +0#0000000#ffffff0@27
| +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @23| +0#0000e05#a8a8a8255@1|b+0#0000001#ffd7ff255|r|i|g|h|t| @11| +0#0000000#ffffff0@27
| +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @23| +0#0000e05#a8a8a8255@1|w+0#0000001#ffd7ff255|o|r|l|d| @12| +0#0000000#ffffff0@27
| +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @71
| +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @71
| +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @71
@57|1|,|1| @10|T|o|p|

View File

@@ -737,6 +737,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2362,
/**/ /**/
2361, 2361,
/**/ /**/