1
0
forked from aniani/vim

patch 8.1.1919: using window options when passing a buffer to popup_create()

Problem:    Using current window option values when passing a buffer to
            popup_create().
Solution:   Clear the window-local options. (closes #4857)
This commit is contained in:
Bram Moolenaar 2019-08-24 15:50:46 +02:00
parent e9a891f255
commit 4645104be4
5 changed files with 18 additions and 3 deletions

View File

@ -3892,9 +3892,10 @@ set_number_default(char *name, long val)
/*
* Set all window-local and buffer-local options to the Vim default.
* local-global options will use the global value.
* When "do_buffer" is FALSE don't set buffer-local options.
*/
void
set_local_options_default(win_T *wp)
set_local_options_default(win_T *wp, int do_buffer)
{
win_T *save_curwin = curwin;
int i;
@ -3909,6 +3910,7 @@ set_local_options_default(win_T *wp)
char_u *varp = get_varp_scope(p, OPT_LOCAL);
if (p->indir != PV_NONE
&& (do_buffer || (p->indir & PV_BUF) == 0)
&& !(options[i].flags & P_NODEFAULT)
&& !optval_default(p, varp, FALSE))
set_option_default(i, OPT_LOCAL, FALSE);

View File

@ -1543,6 +1543,7 @@ popup_create(typval_T *argvars, typval_T *rettv, create_type_T type)
// use existing buffer
new_buffer = FALSE;
win_init_popup_win(wp, buf);
set_local_options_default(wp, FALSE);
buffer_ensure_loaded(buf);
}
else
@ -1556,7 +1557,7 @@ popup_create(typval_T *argvars, typval_T *rettv, create_type_T type)
win_init_popup_win(wp, buf);
set_local_options_default(wp);
set_local_options_default(wp, TRUE);
set_string_option_direct_in_buf(buf, (char_u *)"buftype", -1,
(char_u *)"popup", OPT_FREE|OPT_LOCAL, 0);
set_string_option_direct_in_buf(buf, (char_u *)"bufhidden", -1,

View File

@ -2,7 +2,7 @@
void set_init_1(int clean_arg);
void set_string_default(char *name, char_u *val);
void set_number_default(char *name, long val);
void set_local_options_default(win_T *wp);
void set_local_options_default(win_T *wp, int do_buffer);
void free_all_options(void);
void set_init_2(void);
void set_init_3(void);

View File

@ -1814,15 +1814,25 @@ func Test_popupwin_with_buffer()
call writefile(['some text', 'in a buffer'], 'XsomeFile')
let buf = bufadd('XsomeFile')
call assert_equal(0, bufloaded(buf))
setlocal number
call setbufvar(buf, "&wrapmargin", 13)
let winid = popup_create(buf, {})
call assert_notequal(0, winid)
let pos = popup_getpos(winid)
call assert_equal(2, pos.height)
call assert_equal(1, bufloaded(buf))
" window-local option is set to default, buffer-local is not
call assert_equal(0, getwinvar(winid, '&number'))
call assert_equal(13, getbufvar(buf, '&wrapmargin'))
call popup_close(winid)
call assert_equal({}, popup_getpos(winid))
call assert_equal(1, bufloaded(buf))
exe 'bwipe! ' .. buf
setlocal nonumber
edit test_popupwin.vim
let winid = popup_create(bufnr(''), {})

View File

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