summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-08-24 15:50:46 +0200
committerBram Moolenaar <Bram@vim.org>2019-08-24 15:50:46 +0200
commit4645104be4c521dfdd43621c19e96bda3cac7be2 (patch)
tree2c680ce6963ee9d084fecd01d56588cca875feb0
parente9a891f2559f0ef73596bce025e06bc36b092cbb (diff)
patch 8.1.1919: using window options when passing a buffer to popup_create()v8.1.1919
Problem: Using current window option values when passing a buffer to popup_create(). Solution: Clear the window-local options. (closes #4857)
-rw-r--r--src/option.c4
-rw-r--r--src/popupwin.c3
-rw-r--r--src/proto/option.pro2
-rw-r--r--src/testdir/test_popupwin.vim10
-rw-r--r--src/version.c2
5 files changed, 18 insertions, 3 deletions
diff --git a/src/option.c b/src/option.c
index 215d48a092..19c89f7c2c 100644
--- 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
index 995ae5d6b9..e8abf6dc38 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -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,
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 9712f8644f..3350a1f260 100644
--- 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
index 810a2047c1..abae5dbef6 100644
--- 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
index c79dfbc5f9..9e5a7b225f 100644
--- 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,