# HG changeset patch # User Bram Moolenaar # Date 1566655204 -7200 # Node ID b6acc24df7de5982c6c5b0201ec552cb2130b4ef # Parent 168181338e1149dfa8344273efcf8a1b38494ae1 patch 8.1.1919: using window options when passing a buffer to popup_create() Commit: https://github.com/vim/vim/commit/4645104be4c521dfdd43621c19e96bda3cac7be2 Author: Bram Moolenaar Date: Sat Aug 24 15:50:46 2019 +0200 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) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -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); diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -1543,6 +1543,7 @@ popup_create(typval_T *argvars, typval_T // 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 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, diff --git a/src/proto/option.pro b/src/proto/option.pro --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -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); diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -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(''), {}) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1919, +/**/ 1918, /**/ 1917,