Skip to content

Commit

Permalink
patch 8.1.1919: using window options when passing a buffer to popup_c…
Browse files Browse the repository at this point in the history
…reate()

Problem:    Using current window option values when passing a buffer to
            popup_create().
Solution:   Clear the window-local options. (closes vim#4857)
  • Loading branch information
brammool committed Aug 24, 2019
1 parent e9a891f commit 4645104
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 3 deletions.
4 changes: 3 additions & 1 deletion src/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
3 changes: 2 additions & 1 deletion src/popupwin.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/proto/option.pro
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions src/testdir/test_popupwin.vim
Original file line number Diff line number Diff line change
Expand Up @@ -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(''), {})
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1919,
/**/
1918,
/**/
Expand Down

0 comments on commit 4645104

Please sign in to comment.