Mercurial > vim
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(''), {})