changeset 17845:b6acc24df7de v8.1.1919

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 <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Sat, 24 Aug 2019 16:00:04 +0200
parents 168181338e11
children 6b66c868f9aa
files src/option.c src/popupwin.c src/proto/option.pro src/testdir/test_popupwin.vim src/version.c
diffstat 5 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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,
--- 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);
--- 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(''), {})
--- 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,