]> granicus.if.org Git - vim/commitdiff
patch 8.1.1919: using window options when passing a buffer to popup_create() v8.1.1919
authorBram Moolenaar <Bram@vim.org>
Sat, 24 Aug 2019 13:50:46 +0000 (15:50 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 24 Aug 2019 13:50:46 +0000 (15:50 +0200)
Problem:    Using current window option values when passing a buffer to
            popup_create().
Solution:   Clear the window-local options. (closes #4857)

src/option.c
src/popupwin.c
src/proto/option.pro
src/testdir/test_popupwin.vim
src/version.c

index 215d48a0922494c88a13b66bcd6c6b35f5c2b93c..19c89f7c2cac0d7947560927ccbe0a35a1de4069 100644 (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);
index 995ae5d6b906e0b789c4bef06c5f89d00b760562..e8abf6dc38f0afb0a55d360bb72536de422a3bda 100644 (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,
index 9712f8644f64ea0b50c265831aec1a953c5c1ab2..3350a1f2603749e89ead50ce2cd5faef92b2b8ce 100644 (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);
index 810a2047c186321614aef3c7050fe539dc5fbea1..abae5dbef659063b3227769d54666cf30d66005a 100644 (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(''), {})
index c79dfbc5f9d68e0faabd27b0694e677a011495d4..9e5a7b225f805548af58b7aa0c18424b5912dc81 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1919,
 /**/
     1918,
 /**/