diff options
Diffstat (limited to 'data/vim/patches/8.1.1423')
-rw-r--r-- | data/vim/patches/8.1.1423 | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1423 b/data/vim/patches/8.1.1423 new file mode 100644 index 000000000..db04c4d5f --- /dev/null +++ b/data/vim/patches/8.1.1423 @@ -0,0 +1,242 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1423 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.1423 +Problem: Popup windows use options from current window and buffer. +Solution: Clear all local options when creating a popup window. +Files: src/popupwin.c, src/option.c, src/proto/option.pro, + src/testdir/test_popupwin.vim + + +*** ../vim-8.1.1422/src/popupwin.c 2019-05-30 14:29:42.597507636 +0200 +--- src/popupwin.c 2019-05-30 15:00:03.807391833 +0200 +*************** +*** 253,258 **** +--- 253,262 ---- + if (buf == NULL) + return; + ml_open(buf); ++ ++ win_init_popup_win(wp, buf); ++ ++ set_local_options_default(wp); + 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, +*************** +*** 262,269 **** + buf->b_p_bl = FALSE; // unlisted buffer + buf->b_locked = TRUE; + +- win_init_popup_win(wp, buf); +- + nr = (int)dict_get_number(d, (char_u *)"tab"); + if (nr == 0) + { +--- 266,271 ---- +*** ../vim-8.1.1422/src/option.c 2019-05-28 23:08:12.072648675 +0200 +--- src/option.c 2019-05-30 15:17:11.233968834 +0200 +*************** +*** 3269,3275 **** + static int findoption(char_u *); + static int find_key_option(char_u *arg_arg, int has_lt); + static void showoptions(int all, int opt_flags); +! static int optval_default(struct vimoption *, char_u *varp); + static void showoneopt(struct vimoption *, int opt_flags); + static int put_setstring(FILE *fd, char *cmd, char *name, char_u **valuep, long_u flags); + static int put_setnum(FILE *fd, char *cmd, char *name, long *valuep); +--- 3269,3275 ---- + static int findoption(char_u *); + static int find_key_option(char_u *arg_arg, int has_lt); + static void showoptions(int all, int opt_flags); +! static int optval_default(struct vimoption *, char_u *varp, int compatible); + static void showoneopt(struct vimoption *, int opt_flags); + static int put_setstring(FILE *fd, char *cmd, char *name, char_u **valuep, long_u flags); + static int put_setnum(FILE *fd, char *cmd, char *name, long *valuep); +*************** +*** 3893,3898 **** +--- 3893,3928 ---- + options[opt_idx].def_val[VI_DEFAULT] = (char_u *)(long_i)val; + } + ++ /* ++ * Set all window-local and buffer-local options to the Vim default. ++ * local-global options will use the global value. ++ */ ++ void ++ set_local_options_default(win_T *wp) ++ { ++ win_T *save_curwin = curwin; ++ int i; ++ ++ curwin = wp; ++ curbuf = curwin->w_buffer; ++ block_autocmds(); ++ ++ for (i = 0; !istermoption(&options[i]); i++) ++ { ++ struct vimoption *p = &(options[i]); ++ char_u *varp = get_varp_scope(p, OPT_LOCAL); ++ ++ if (p->indir != PV_NONE ++ && !(options[i].flags & P_NODEFAULT) ++ && !optval_default(p, varp, FALSE)) ++ set_option_default(i, OPT_LOCAL, FALSE); ++ } ++ ++ unblock_autocmds(); ++ curwin = save_curwin; ++ curbuf = curwin->w_buffer; ++ } ++ + #if defined(EXITFREE) || defined(PROTO) + /* + * Free all options. +*************** +*** 10149,10155 **** + if (varp != NULL + && ((all == 2 && isterm) + || (all == 1 && !isterm) +! || (all == 0 && !optval_default(p, varp)))) + { + if (p->flags & P_BOOL) + len = 1; /* a toggle option fits always */ +--- 10179,10185 ---- + if (varp != NULL + && ((all == 2 && isterm) + || (all == 1 && !isterm) +! || (all == 0 && !optval_default(p, varp, p_cp)))) + { + if (p->flags & P_BOOL) + len = 1; /* a toggle option fits always */ +*************** +*** 10199,10211 **** + * Return TRUE if option "p" has its default value. + */ + static int +! optval_default(struct vimoption *p, char_u *varp) + { + int dvi; + + if (varp == NULL) + return TRUE; /* hidden option is always at default */ +! dvi = ((p->flags & P_VI_DEF) || p_cp) ? VI_DEFAULT : VIM_DEFAULT; + if (p->flags & P_NUM) + return (*(long *)varp == (long)(long_i)p->def_val[dvi]); + if (p->flags & P_BOOL) +--- 10229,10241 ---- + * Return TRUE if option "p" has its default value. + */ + static int +! optval_default(struct vimoption *p, char_u *varp, int compatible) + { + int dvi; + + if (varp == NULL) + return TRUE; /* hidden option is always at default */ +! dvi = ((p->flags & P_VI_DEF) || compatible) ? VI_DEFAULT : VIM_DEFAULT; + if (p->flags & P_NUM) + return (*(long *)varp == (long)(long_i)p->def_val[dvi]); + if (p->flags & P_BOOL) +*************** +*** 10311,10317 **** + + /* Global values are only written when not at the default value. */ + varp = get_varp_scope(p, opt_flags); +! if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp)) + continue; + + round = 2; +--- 10341,10347 ---- + + /* Global values are only written when not at the default value. */ + varp = get_varp_scope(p, opt_flags); +! if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp)) + continue; + + round = 2; +*************** +*** 10327,10333 **** + if (!(opt_flags & OPT_GLOBAL) && !local_only) + { + varp_fresh = get_varp_scope(p, OPT_GLOBAL); +! if (!optval_default(p, varp_fresh)) + { + round = 1; + varp_local = varp; +--- 10357,10363 ---- + if (!(opt_flags & OPT_GLOBAL) && !local_only) + { + varp_fresh = get_varp_scope(p, OPT_GLOBAL); +! if (!optval_default(p, varp_fresh, p_cp)) + { + round = 1; + varp_local = varp; +*** ../vim-8.1.1422/src/proto/option.pro 2019-05-26 21:03:19.940073927 +0200 +--- src/proto/option.pro 2019-05-30 14:42:45.737186164 +0200 +*************** +*** 2,7 **** +--- 2,8 ---- + 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 free_all_options(void); + void set_init_2(void); + void set_init_3(void); +*** ../vim-8.1.1422/src/testdir/test_popupwin.vim 2019-05-30 14:29:42.597507636 +0200 +--- src/testdir/test_popupwin.vim 2019-05-30 15:18:36.037507243 +0200 +*************** +*** 264,266 **** +--- 264,289 ---- + call popup_close(winid) + call assert_equal({}, popup_getoptions(winid)) + endfunc ++ ++ func Test_popup_option_values() ++ new ++ " window-local ++ setlocal number ++ setlocal nowrap ++ " buffer-local ++ setlocal omnifunc=Something ++ " global/buffer-local ++ setlocal path=/there ++ " global/window-local ++ setlocal scrolloff=9 ++ ++ let winid = popup_create('hello', {}) ++ call assert_equal(0, getwinvar(winid, '&number')) ++ call assert_equal(1, getwinvar(winid, '&wrap')) ++ call assert_equal('', getwinvar(winid, '&omnifunc')) ++ call assert_equal(&g:path, getwinvar(winid, '&path')) ++ call assert_equal(&g:scrolloff, getwinvar(winid, '&scrolloff')) ++ ++ call popup_close(winid) ++ bwipe ++ endfunc +*** ../vim-8.1.1422/src/version.c 2019-05-30 14:29:42.597507636 +0200 +--- src/version.c 2019-05-30 14:42:37.873229921 +0200 +*************** +*** 769,770 **** +--- 769,772 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1423, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +51. You put a pillow case over your laptop so your lover doesn't see it while + you are pretending to catch your breath. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |