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:
@@ -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
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
19
src/sign.c
19
src/sign.c
@@ -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;
|
||||||
|
10
src/testdir/dumps/Test_popupwin_sign_1.dump
Normal file
10
src/testdir/dumps/Test_popupwin_sign_1.dump
Normal 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|
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user