mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -04:00
patch 8.1.1405: "highlight" option of popup windows not supported
Problem: "highlight" option of popup windows not supported. Solution: Implement the "highlight" option.
This commit is contained in:
parent
9d591525a5
commit
20c023aee0
@ -322,8 +322,7 @@ The second argument of |popup_create()| is a dictionary with options:
|
||||
wrap TRUE to make the lines wrap (default TRUE)
|
||||
{not implemented yet}
|
||||
highlight highlight group name to use for the text, stored in
|
||||
'wincolor'
|
||||
{not implemented yet}
|
||||
the 'wincolor' option
|
||||
border list with numbers, defining the border thickness
|
||||
above/right/below/left of the popup; an empty list
|
||||
uses a border of 1 all around
|
||||
|
@ -1447,18 +1447,14 @@ diff_win_options(
|
||||
wp->w_p_wrap_save = wp->w_p_wrap;
|
||||
wp->w_p_wrap = FALSE;
|
||||
# ifdef FEAT_FOLDING
|
||||
curwin = wp;
|
||||
curbuf = curwin->w_buffer;
|
||||
if (!wp->w_p_diff)
|
||||
{
|
||||
if (wp->w_p_diff_saved)
|
||||
free_string_option(wp->w_p_fdm_save);
|
||||
wp->w_p_fdm_save = vim_strsave(wp->w_p_fdm);
|
||||
}
|
||||
set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff",
|
||||
set_string_option_direct_in_win(wp, (char_u *)"fdm", -1, (char_u *)"diff",
|
||||
OPT_LOCAL|OPT_FREE, 0);
|
||||
curwin = old_curwin;
|
||||
curbuf = curwin->w_buffer;
|
||||
if (!wp->w_p_diff)
|
||||
{
|
||||
wp->w_p_fdc_save = wp->w_p_fdc;
|
||||
|
48
src/option.c
48
src/option.c
@ -5953,6 +5953,54 @@ set_string_option_direct(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Like set_string_option_direct(), but for a window-local option in "wp".
|
||||
* Blocks autocommands to avoid the old curwin becoming invalid.
|
||||
*/
|
||||
void
|
||||
set_string_option_direct_in_win(
|
||||
win_T *wp,
|
||||
char_u *name,
|
||||
int opt_idx,
|
||||
char_u *val,
|
||||
int opt_flags,
|
||||
int set_sid)
|
||||
{
|
||||
win_T *save_curwin = curwin;
|
||||
|
||||
block_autocmds();
|
||||
curwin = wp;
|
||||
curbuf = curwin->w_buffer;
|
||||
set_string_option_direct(name, opt_idx, val, opt_flags, set_sid);
|
||||
curwin = save_curwin;
|
||||
curbuf = curwin->w_buffer;
|
||||
unblock_autocmds();
|
||||
}
|
||||
|
||||
/*
|
||||
* Like set_string_option_direct(), but for a buffer-local option in "buf".
|
||||
* Blocks autocommands to avoid the old curbuf becoming invalid.
|
||||
*/
|
||||
void
|
||||
set_string_option_direct_in_buf(
|
||||
buf_T *buf,
|
||||
char_u *name,
|
||||
int opt_idx,
|
||||
char_u *val,
|
||||
int opt_flags,
|
||||
int set_sid)
|
||||
{
|
||||
buf_T *save_curbuf = curbuf;
|
||||
|
||||
block_autocmds();
|
||||
curbuf = buf;
|
||||
curwin->w_buffer = curbuf;
|
||||
set_string_option_direct(name, opt_idx, val, opt_flags, set_sid);
|
||||
curbuf = save_curbuf;
|
||||
curwin->w_buffer = curbuf;
|
||||
unblock_autocmds();
|
||||
}
|
||||
|
||||
/*
|
||||
* Set global value for string option when it's a local option.
|
||||
*/
|
||||
|
@ -23,6 +23,7 @@
|
||||
apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
|
||||
{
|
||||
int nr;
|
||||
char_u *str;
|
||||
|
||||
wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
|
||||
wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
|
||||
@ -52,6 +53,10 @@ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
|
||||
}
|
||||
#endif
|
||||
|
||||
str = dict_get_string(dict, (char_u *)"highlight", TRUE);
|
||||
if (str != NULL)
|
||||
set_string_option_direct_in_win(wp, (char_u *)"wincolor", -1,
|
||||
str, OPT_FREE|OPT_LOCAL, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -94,12 +99,10 @@ f_popup_create(typval_T *argvars, typval_T *rettv)
|
||||
if (buf == NULL)
|
||||
return;
|
||||
ml_open(buf);
|
||||
curbuf = buf;
|
||||
set_string_option_direct((char_u *)"buftype", -1,
|
||||
set_string_option_direct_in_buf(buf, (char_u *)"buftype", -1,
|
||||
(char_u *)"popup", OPT_FREE|OPT_LOCAL, 0);
|
||||
set_string_option_direct((char_u *)"bufhidden", -1,
|
||||
set_string_option_direct_in_buf(buf, (char_u *)"bufhidden", -1,
|
||||
(char_u *)"hide", OPT_FREE|OPT_LOCAL, 0);
|
||||
curbuf = curwin->w_buffer;
|
||||
buf->b_p_ul = -1; // no undo
|
||||
buf->b_p_swf = FALSE; // no swap file
|
||||
buf->b_p_bl = FALSE; // unlisted buffer
|
||||
|
@ -21,6 +21,8 @@ int get_term_opt_idx(char_u **p);
|
||||
int set_term_option_alloced(char_u **p);
|
||||
int was_set_insecurely(char_u *opt, int opt_flags);
|
||||
void set_string_option_direct(char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
|
||||
void set_string_option_direct_in_win(win_T *wp, char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
|
||||
void set_string_option_direct_in_buf(buf_T *buf, char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid);
|
||||
int valid_spellang(char_u *val);
|
||||
char *check_colorcolumn(win_T *wp);
|
||||
char *check_stl_option(char_u *s);
|
||||
|
@ -1,8 +1,8 @@
|
||||
>1+0&#ffffff0| @73
|
||||
|2| @73
|
||||
|3| @8|h+0fd7ff255|e|l@1|o| |t|h|e|r|e| @8|r+0#0000001#ffd7ff255| |o|n|e| @8| +0#0000000#ffffff0@30
|
||||
|4| @22|a+0#0000001#ffd7ff255|n|o|t|h|e|r| |t|w|o| @8| +0#0000000#ffffff0@30
|
||||
|5| @22|a+0#0000001#ffd7ff255|n|o|t|h|e|r| |t|h|r|e@1| @6| +0#0000000#ffffff0@30
|
||||
|3| @8|h+0fd7ff255|e|l@1|o| |t|h|e|r|e| @8|r+0&#afffff255| |o|n|e| @8| +0&#ffffff0@30
|
||||
|4| @22|a+0&#afffff255|n|o|t|h|e|r| |t|w|o| @8| +0&#ffffff0@30
|
||||
|5| @22|a+0&#afffff255|n|o|t|h|e|r| |t|h|r|e@1| @6| +0&#ffffff0@30
|
||||
|6| @73
|
||||
|7| @73
|
||||
|8| @73
|
||||
|
@ -1,8 +1,8 @@
|
||||
| +2&#ffffff0|+| |[|N|o| |N|a|m|e|]| | +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +1#0000000#ffffff0@49|X+8#0000001#e0e0e08
|
||||
>1+0#0000000#ffffff0| @73
|
||||
|2| @8|h+0fd7ff255|e|l@1|o| |t|h|e|r|e| @8|r+0#0000001#ffd7ff255| |o|n|e| @8| +0#0000000#ffffff0@30
|
||||
|3| @22|a+0#0000001#ffd7ff255|n|o|t|h|e|r| |t|w|o| @8| +0#0000000#ffffff0@30
|
||||
|4| @22|a+0#0000001#ffd7ff255|n|o|t|h|e|r| |t|h|r|e@1| @6| +0#0000000#ffffff0@30
|
||||
|2| @8|h+0fd7ff255|e|l@1|o| |t|h|e|r|e| @8|r+0&#afffff255| |o|n|e| @8| +0&#ffffff0@30
|
||||
|3| @22|a+0&#afffff255|n|o|t|h|e|r| |t|w|o| @8| +0&#ffffff0@30
|
||||
|4| @22|a+0&#afffff255|n|o|t|h|e|r| |t|h|r|e@1| @6| +0&#ffffff0@30
|
||||
|5| @73
|
||||
|6| @73
|
||||
|7| @73
|
||||
|
@ -12,10 +12,11 @@ func Test_simple_popup()
|
||||
endif
|
||||
call writefile([
|
||||
\ "call setline(1, range(1, 100))",
|
||||
\ "let winid = popup_create('hello there', {'line': 3, 'col': 11})",
|
||||
\ "hi PopupColor ctermbg=lightblue",
|
||||
\ "call setwinvar(winid, '&wincolor', 'PopupColor')",
|
||||
\ "hi PopupColor1 ctermbg=lightblue",
|
||||
\ "hi PopupColor2 ctermbg=lightcyan",
|
||||
\ "let winid = popup_create('hello there', {'line': 3, 'col': 11, 'highlight': 'PopupColor1'})",
|
||||
\ "let winid2 = popup_create(['another one', 'another two', 'another three'], {'line': 3, 'col': 25})",
|
||||
\ "call setwinvar(winid2, '&wincolor', 'PopupColor2')",
|
||||
\], 'XtestPopup')
|
||||
let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
|
||||
call VerifyScreenDump(buf, 'Test_popupwin_01', {})
|
||||
|
@ -767,6 +767,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1405,
|
||||
/**/
|
||||
1404,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user