diff --git a/7.4.786 b/7.4.786 new file mode 100644 index 0000000..0160fc4 --- /dev/null +++ b/7.4.786 @@ -0,0 +1,700 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.786 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.786 +Problem: It is not possible for a plugin to adjust to a changed setting. +Solution: Add the OptionSet autocommand event. (Christian Brabandt) +Files: runtime/doc/autocmd.txt, runtime/doc/eval.txt, src/eval.c, + src/fileio.c, src/option.c, src/proto/eval.pro, + src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, + src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, + src/testdir/Make_vms.mms, src/testdir/Makefile, + src/testdir/test_autocmd_option.in, + src/testdir/test_autocmd_option.ok, src/vim.h + + +*** ../vim-7.4.785/runtime/doc/autocmd.txt 2015-07-10 17:56:18.211777230 +0200 +--- runtime/doc/autocmd.txt 2015-07-17 15:03:42.523751972 +0200 +*************** +*** 259,264 **** +--- 259,265 ---- + |Syntax| when the 'syntax' option has been set + |EncodingChanged| after the 'encoding' option has been changed + |TermChanged| after the value of 'term' has changed ++ |OptionSet| after setting any option + + Startup and exit + |VimEnter| after doing all the startup stuff +*************** +*** 732,737 **** +--- 745,771 ---- + o Operator-pending + i Insert + c Command line ++ *OptionSet* ++ OptionSet After setting an option. The pattern is ++ matched against the long option name. ++ The |v:option_old| variable indicates the ++ old option value, |v:option_new| variable ++ indicates the newly set value, the ++ |v:option_type| variable indicates whether ++ it's global or local scoped and || ++ indicates what option has been set. ++ ++ Is not triggered on startup and for the 'key' ++ option for obvious reasons. ++ ++ Note: It's a bad idea, to reset an option ++ during this autocommand, since this will ++ probably break plugins. You can always use ++ |noa| to prevent triggering this autocommand. ++ Could be used, to check for existence of the ++ 'backupdir' and 'undodir' options and create ++ directories, if they don't exist yet. ++ + *QuickFixCmdPre* + QuickFixCmdPre Before a quickfix command is run (|:make|, + |:lmake|, |:grep|, |:lgrep|, |:grepadd|, +*** ../vim-7.4.785/runtime/doc/eval.txt 2015-07-10 17:56:18.211777230 +0200 +--- runtime/doc/eval.txt 2015-07-17 15:05:12.834890842 +0200 +*************** +*** 1533,1538 **** +--- 1535,1549 ---- + than String this will cause trouble. + {only when compiled with the |+viminfo| feature} + ++ *v:option_new* ++ v:option_new New value of the option. Valid while executing an |OptionSet| ++ autocommand. ++ *v:option_old* ++ v:option_old Old value of the option. Valid while executing an |OptionSet| ++ autocommand. ++ *v:option_type* ++ v:option_type Scope of the set command. Valid while executing an ++ |OptionSet| autocommand. Can be either "global" or "local" + *v:operator* *operator-variable* + v:operator The last operator given in Normal mode. This is a single + character except for commands starting with or , +*** ../vim-7.4.785/src/eval.c 2015-07-17 13:03:42.096357579 +0200 +--- src/eval.c 2015-07-17 15:07:24.513630864 +0200 +*************** +*** 365,370 **** +--- 365,373 ---- + {VV_NAME("windowid", VAR_NUMBER), VV_RO}, + {VV_NAME("progpath", VAR_STRING), VV_RO}, + {VV_NAME("completed_item", VAR_DICT), VV_RO}, ++ {VV_NAME("option_new", VAR_STRING), VV_RO}, ++ {VV_NAME("option_old", VAR_STRING), VV_RO}, ++ {VV_NAME("option_type", VAR_STRING), VV_RO}, + }; + + /* shorthand */ +*************** +*** 24720,24725 **** +--- 24723,24738 ---- + } + } + ++ /* reset v:option_new, v:option_old and v:option_type */ ++ void ++ reset_v_option_vars() ++ { ++ set_vim_var_string(VV_OPTION_NEW, NULL, -1); ++ set_vim_var_string(VV_OPTION_OLD, NULL, -1); ++ set_vim_var_string(VV_OPTION_TYPE, NULL, -1); ++ } ++ ++ + #endif /* FEAT_EVAL */ + + +*** ../vim-7.4.785/src/fileio.c 2015-07-17 14:16:49.846596759 +0200 +--- src/fileio.c 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 7699,7704 **** +--- 7699,7705 ---- + {"InsertLeave", EVENT_INSERTLEAVE}, + {"InsertCharPre", EVENT_INSERTCHARPRE}, + {"MenuPopup", EVENT_MENUPOPUP}, ++ {"OptionSet", EVENT_OPTIONSET}, + {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST}, + {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE}, + {"QuitPre", EVENT_QUITPRE}, +*************** +*** 7736,7742 **** + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +! NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + }; + + /* +--- 7737,7743 ---- + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +! NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + }; + + /* +*************** +*** 9321,9327 **** + */ + if (fname_io == NULL) + { +! if (event == EVENT_COLORSCHEME) + autocmd_fname = NULL; + else if (fname != NULL && *fname != NUL) + autocmd_fname = fname; +--- 9322,9328 ---- + */ + if (fname_io == NULL) + { +! if (event == EVENT_COLORSCHEME || event == EVENT_OPTIONSET) + autocmd_fname = NULL; + else if (fname != NULL && *fname != NUL) + autocmd_fname = fname; +*************** +*** 9385,9390 **** +--- 9386,9392 ---- + || event == EVENT_SPELLFILEMISSING + || event == EVENT_QUICKFIXCMDPRE + || event == EVENT_COLORSCHEME ++ || event == EVENT_OPTIONSET + || event == EVENT_QUICKFIXCMDPOST) + fname = vim_strsave(fname); + else +*** ../vim-7.4.785/src/option.c 2015-07-17 14:16:49.850596721 +0200 +--- src/option.c 2015-07-17 17:30:22.703747129 +0200 +*************** +*** 4592,4600 **** + { + char_u *save_arg = NULL; + char_u *s = NULL; +! char_u *oldval; /* previous value if *varp */ + char_u *newval; +! char_u *origval; + unsigned newlen; + int comma; + int bs; +--- 4592,4603 ---- + { + char_u *save_arg = NULL; + char_u *s = NULL; +! char_u *oldval = NULL; /* previous value if *varp */ + char_u *newval; +! char_u *origval = NULL; +! #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) +! char_u *saved_origval = NULL; +! #endif + unsigned newlen; + int comma; + int bs; +*************** +*** 4914,4919 **** +--- 4917,4930 ---- + /* Set the new value. */ + *(char_u **)(varp) = newval; + ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (!starting && options[opt_idx].indir != PV_KEY ++ && origval != NULL) ++ /* origval may be freed by ++ * did_set_string_option(), make a copy. */ ++ saved_origval = vim_strsave(origval); ++ #endif ++ + /* Handle side effects, and set the global value for + * ":set" on local options. */ + errmsg = did_set_string_option(opt_idx, (char_u **)varp, +*************** +*** 4922,4927 **** +--- 4933,4956 ---- + /* If error detected, print the error message. */ + if (errmsg != NULL) + goto skip; ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (saved_origval != NULL) ++ { ++ char_u buf_type[7]; ++ ++ sprintf((char *)buf_type, "%s", ++ (opt_flags & OPT_LOCAL) ? "local" : "global"); ++ set_vim_var_string(VV_OPTION_NEW, newval, -1); ++ set_vim_var_string(VV_OPTION_OLD, saved_origval, -1); ++ set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); ++ apply_autocmds(EVENT_OPTIONSET, ++ (char_u *)options[opt_idx].fullname, ++ NULL, FALSE, NULL); ++ reset_v_option_vars(); ++ vim_free(saved_origval); ++ } ++ #endif ++ + } + else /* key code option */ + { +*************** +*** 5668,5673 **** +--- 5697,5705 ---- + char_u *s; + char_u **varp; + char_u *oldval; ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ char_u *saved_oldval = NULL; ++ #endif + char_u *r = NULL; + + if (options[opt_idx].var == NULL) /* don't set hidden option */ +*************** +*** 5683,5691 **** +--- 5715,5744 ---- + : opt_flags); + oldval = *varp; + *varp = s; ++ ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (!starting && options[opt_idx].indir != PV_KEY) ++ saved_oldval = vim_strsave(oldval); ++ #endif + if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL, + opt_flags)) == NULL) + did_set_option(opt_idx, opt_flags, TRUE); ++ ++ /* call autocomamnd after handling side effects */ ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (saved_oldval != NULL) ++ { ++ char_u buf_type[7]; ++ sprintf((char *)buf_type, "%s", ++ (opt_flags & OPT_LOCAL) ? "local" : "global"); ++ set_vim_var_string(VV_OPTION_NEW, s, -1); ++ set_vim_var_string(VV_OPTION_OLD, oldval, -1); ++ set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); ++ apply_autocmds(EVENT_OPTIONSET, (char_u *)options[opt_idx].fullname, NULL, FALSE, NULL); ++ reset_v_option_vars(); ++ vim_free(saved_oldval); ++ } ++ #endif + } + return r; + } +*************** +*** 8230,8237 **** +--- 8283,8307 ---- + * End of handling side effects for bool options. + */ + ++ /* after handling side effects, call autocommand */ ++ + options[opt_idx].flags |= P_WAS_SET; + ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (!starting) ++ { ++ char_u buf_old[2], buf_new[2], buf_type[7]; ++ snprintf((char *)buf_old, 2, "%d", old_value ? TRUE: FALSE); ++ snprintf((char *)buf_new, 2, "%d", value ? TRUE: FALSE); ++ sprintf((char *)buf_type, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global"); ++ set_vim_var_string(VV_OPTION_NEW, buf_new, -1); ++ set_vim_var_string(VV_OPTION_OLD, buf_old, -1); ++ set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); ++ apply_autocmds(EVENT_OPTIONSET, (char_u *) options[opt_idx].fullname, NULL, FALSE, NULL); ++ reset_v_option_vars(); ++ } ++ #endif ++ + comp_col(); /* in case 'ruler' or 'showcmd' changed */ + if (curwin->w_curswant != MAXCOL + && (options[opt_idx].flags & (P_CURSWANT | P_RALL)) != 0) +*************** +*** 8767,8772 **** +--- 8837,8857 ---- + + options[opt_idx].flags |= P_WAS_SET; + ++ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL) ++ if (!starting && errmsg == NULL) ++ { ++ char_u buf_old[11], buf_new[11], buf_type[7]; ++ snprintf((char *)buf_old, 10, "%ld", old_value); ++ snprintf((char *)buf_new, 10, "%ld", value); ++ snprintf((char *)buf_type, 7, "%s", (opt_flags & OPT_LOCAL) ? "local" : "global"); ++ set_vim_var_string(VV_OPTION_NEW, buf_new, -1); ++ set_vim_var_string(VV_OPTION_OLD, buf_old, -1); ++ set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); ++ apply_autocmds(EVENT_OPTIONSET, (char_u *) options[opt_idx].fullname, NULL, FALSE, NULL); ++ reset_v_option_vars(); ++ } ++ #endif ++ + comp_col(); /* in case 'columns' or 'ls' changed */ + if (curwin->w_curswant != MAXCOL + && (options[opt_idx].flags & (P_CURSWANT | P_RALL)) != 0) +*** ../vim-7.4.785/src/proto/eval.pro 2015-07-10 17:56:18.219777154 +0200 +--- src/proto/eval.pro 2015-07-17 17:14:38.408715248 +0200 +*************** +*** 133,138 **** +--- 133,139 ---- + int store_session_globals __ARGS((FILE *fd)); + void last_set_msg __ARGS((scid_T scriptID)); + void ex_oldfiles __ARGS((exarg_T *eap)); ++ void reset_v_option_vars __ARGS((void)); + int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen)); + char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags)); + /* vim: set ft=c : */ +*** ../vim-7.4.785/src/testdir/Make_amiga.mak 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Make_amiga.mak 2015-07-17 15:02:36.916377572 +0200 +*************** +*** 38,43 **** +--- 38,44 ---- + test104.out test105.out test106.out test107.out \ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*************** +*** 188,193 **** +--- 189,195 ---- + test107.out: test107.in + test_argument_0count.out: test_argument_0count.in + test_argument_count.out: test_argument_count.in ++ test_autocmd_option.out: test_autocmd_option.in + test_autoformat_join.out: test_autoformat_join.in + test_breakindent.out: test_breakindent.in + test_changelist.out: test_changelist.in +*** ../vim-7.4.785/src/testdir/Make_dos.mak 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Make_dos.mak 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 37,42 **** +--- 37,43 ---- + test105.out test106.out test107.out\ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*** ../vim-7.4.785/src/testdir/Make_ming.mak 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Make_ming.mak 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 59,64 **** +--- 59,65 ---- + test105.out test106.out test107.out \ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*** ../vim-7.4.785/src/testdir/Make_os2.mak 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Make_os2.mak 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 39,44 **** +--- 39,45 ---- + test105.out test106.out test107.out \ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*** ../vim-7.4.785/src/testdir/Make_vms.mms 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Make_vms.mms 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 98,103 **** +--- 98,104 ---- + test105.out test106.out test107.out \ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*** ../vim-7.4.785/src/testdir/Makefile 2015-07-17 14:16:49.854596682 +0200 +--- src/testdir/Makefile 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 35,40 **** +--- 35,41 ---- + test104.out test105.out test106.out test107.out \ + test_argument_0count.out \ + test_argument_count.out \ ++ test_autocmd_option.out \ + test_autoformat_join.out \ + test_breakindent.out \ + test_changelist.out \ +*** ../vim-7.4.785/src/testdir/test_autocmd_option.in 2015-07-17 17:13:44.769224683 +0200 +--- src/testdir/test_autocmd_option.in 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 0 **** +--- 1,73 ---- ++ Test for option autocommand ++ ++ STARTTEST ++ :so small.vim ++ :if !has("eval") || !has("autocmd") | e! test.ok | w! test.out | qa! | endif ++ :fu! AutoCommand(match) ++ : let c=g:testcase ++ : let item=remove(g:options, 0) ++ : let c.=printf("Expected: Name: <%s>, Oldval: <%s>, NewVal: <%s>, Scope: <%s>\n", item[0], item[1], item[2], item[3]) ++ : let c.=printf("Autocmd Option: <%s>,", a:match) ++ : let c.=printf(" OldVal: <%s>,", v:option_old) ++ : let c.=printf(" NewVal: <%s>,", v:option_new) ++ : let c.=printf(" Scope: <%s>\n", v:option_type) ++ : call setreg('r', printf("%s\n%s", getreg('r'), c)) ++ :endfu ++ :au OptionSet * :call AutoCommand(expand("")) ++ :let g:testcase="1: Setting number option\n" ++ :let g:options=[['number', 0, 1, 'global']] ++ :set nu ++ :let g:testcase="2: Setting local number option\n" ++ :let g:options=[['number', 1, 0, 'local']] ++ :setlocal nonu ++ :let g:testcase="3: Setting global number option\n" ++ :let g:options=[['number', 1, 0, 'global']] ++ :setglobal nonu ++ :let g:testcase="4: Setting local autoindent option\n" ++ :let g:options=[['autoindent', 0, 1, 'local']] ++ :setlocal ai ++ :let g:testcase="5: Setting global autoindent option\n" ++ :let g:options=[['autoindent', 0, 1, 'global']] ++ :setglobal ai ++ :let g:testcase="6: Setting global autoindent option\n" ++ :let g:options=[['autoindent', 1, 0, 'global']] ++ :set ai! ++ : Should not print anything, use :noa ++ :noa :set nonu ++ :let g:testcase="7: Setting several global list and number option\n" ++ :let g:options=[['list', 0, 1, 'global'], ['number', 0, 1, 'global']] ++ :set list nu ++ :noa set nolist nonu ++ :let g:testcase="8: Setting global acd\n" ++ :let g:options=[['autochdir', 0, 1, 'global']] ++ :setlocal acd ++ :let g:testcase="9: Setting global autoread\n" ++ :let g:options=[['autoread', 0, 1, 'global']] ++ :set ar ++ :let g:testcase="10: Setting local autoread\n" ++ :let g:options=[['autoread', 0, 1, 'local']] ++ :setlocal ar ++ :let g:testcase="11: Setting global autoread\n" ++ :let g:options=[['autoread', 1, 0, 'global']] ++ :setglobal invar ++ :let g:testcase="12: Setting option backspace through :let\n" ++ :let g:options=[['backspace', '', 'eol,indent,start', 'global']] ++ :let &bs="eol,indent,start" ++ :let g:testcase="13: Setting option backspace through setbufvar()\n" ++ :let g:options=[['backup', '', '1', 'local']] ++ : "try twice, first time, shouldn't trigger because option name is invalid, second time, it should trigger ++ :call setbufvar(1, '&l:bk', 1) ++ : "should trigger, use correct option name ++ :call setbufvar(1, '&backup', 1) ++ :" Write register now, because next test shouldn't output anything. ++ :$put r ++ :let @r='' ++ :let g:testcase="\n14: Setting key option, shouldn't trigger\n" ++ :let g:options=[['key', 'invalid', 'invalid1', 'invalid']] ++ :setlocal key=blah ++ :setlocal key= ++ :$put =g:testcase ++ :%w! test.out ++ :qa! ++ ENDTEST ++ dummy text +*** ../vim-7.4.785/src/testdir/test_autocmd_option.ok 2015-07-17 17:13:44.777224608 +0200 +--- src/testdir/test_autocmd_option.ok 2015-07-17 14:58:39.362642959 +0200 +*************** +*** 0 **** +--- 1,131 ---- ++ Test for option autocommand ++ ++ STARTTEST ++ :so small.vim ++ :if !has("eval") || !has("autocmd") | e! test.ok | w! test.out | qa! | endif ++ :fu! AutoCommand(match) ++ : let c=g:testcase ++ : let item=remove(g:options, 0) ++ : let c.=printf("Expected: Name: <%s>, Oldval: <%s>, NewVal: <%s>, Scope: <%s>\n", item[0], item[1], item[2], item[3]) ++ : let c.=printf("Autocmd Option: <%s>,", a:match) ++ : let c.=printf(" OldVal: <%s>,", v:option_old) ++ : let c.=printf(" NewVal: <%s>,", v:option_new) ++ : let c.=printf(" Scope: <%s>\n", v:option_type) ++ : call setreg('r', printf("%s\n%s", getreg('r'), c)) ++ :endfu ++ :au OptionSet * :call AutoCommand(expand("")) ++ :let g:testcase="1: Setting number option\n" ++ :let g:options=[['number', 0, 1, 'global']] ++ :set nu ++ :let g:testcase="2: Setting local number option\n" ++ :let g:options=[['number', 1, 0, 'local']] ++ :setlocal nonu ++ :let g:testcase="3: Setting global number option\n" ++ :let g:options=[['number', 1, 0, 'global']] ++ :setglobal nonu ++ :let g:testcase="4: Setting local autoindent option\n" ++ :let g:options=[['autoindent', 0, 1, 'local']] ++ :setlocal ai ++ :let g:testcase="5: Setting global autoindent option\n" ++ :let g:options=[['autoindent', 0, 1, 'global']] ++ :setglobal ai ++ :let g:testcase="6: Setting global autoindent option\n" ++ :let g:options=[['autoindent', 1, 0, 'global']] ++ :set ai! ++ : Should not print anything, use :noa ++ :noa :set nonu ++ :let g:testcase="7: Setting several global list and number option\n" ++ :let g:options=[['list', 0, 1, 'global'], ['number', 0, 1, 'global']] ++ :set list nu ++ :noa set nolist nonu ++ :let g:testcase="8: Setting global acd\n" ++ :let g:options=[['autochdir', 0, 1, 'global']] ++ :setlocal acd ++ :let g:testcase="9: Setting global autoread\n" ++ :let g:options=[['autoread', 0, 1, 'global']] ++ :set ar ++ :let g:testcase="10: Setting local autoread\n" ++ :let g:options=[['autoread', 0, 1, 'local']] ++ :setlocal ar ++ :let g:testcase="11: Setting global autoread\n" ++ :let g:options=[['autoread', 1, 0, 'global']] ++ :setglobal invar ++ :let g:testcase="12: Setting option backspace through :let\n" ++ :let g:options=[['backspace', '', 'eol,indent,start', 'global']] ++ :let &bs="eol,indent,start" ++ :let g:testcase="13: Setting option backspace through setbufvar()\n" ++ :let g:options=[['backup', '', '1', 'local']] ++ : "try twice, first time, shouldn't trigger because option name is invalid, second time, it should trigger ++ :call setbufvar(1, '&l:bk', 1) ++ : "should trigger, use correct option name ++ :call setbufvar(1, '&backup', 1) ++ :" Write register now, because next test shouldn't output anything. ++ :$put r ++ :let @r='' ++ :let g:testcase="\n14: Setting key option, shouldn't trigger\n" ++ :let g:options=[['key', 'invalid', 'invalid1', 'invalid']] ++ :setlocal key=blah ++ :setlocal key= ++ :$put =g:testcase ++ :%w! test.out ++ :qa! ++ ENDTEST ++ dummy text ++ ++ 1: Setting number option ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 2: Setting local number option ++ Expected: Name: , Oldval: <1>, NewVal: <0>, Scope: ++ Autocmd Option: , OldVal: <1>, NewVal: <0>, Scope: ++ ++ 3: Setting global number option ++ Expected: Name: , Oldval: <1>, NewVal: <0>, Scope: ++ Autocmd Option: , OldVal: <1>, NewVal: <0>, Scope: ++ ++ 4: Setting local autoindent option ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 5: Setting global autoindent option ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 6: Setting global autoindent option ++ Expected: Name: , Oldval: <1>, NewVal: <0>, Scope: ++ Autocmd Option: , OldVal: <1>, NewVal: <0>, Scope: ++ ++ 7: Setting several global list and number option ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 7: Setting several global list and number option ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 8: Setting global acd ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 9: Setting global autoread ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 10: Setting local autoread ++ Expected: Name: , Oldval: <0>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <1>, NewVal: <1>, Scope: ++ ++ 11: Setting global autoread ++ Expected: Name: , Oldval: <1>, NewVal: <0>, Scope: ++ Autocmd Option: , OldVal: <1>, NewVal: <0>, Scope: ++ ++ 12: Setting option backspace through :let ++ Expected: Name: , Oldval: <>, NewVal: , Scope: ++ Autocmd Option: , OldVal: <>, NewVal: , Scope: ++ ++ 13: Setting option backspace through setbufvar() ++ Expected: Name: , Oldval: <>, NewVal: <1>, Scope: ++ Autocmd Option: , OldVal: <0>, NewVal: <1>, Scope: ++ ++ 14: Setting key option, shouldn't trigger +*** ../vim-7.4.785/src/vim.h 2015-07-10 17:56:18.219777154 +0200 +--- src/vim.h 2015-07-17 15:01:08.737218443 +0200 +*************** +*** 1335,1340 **** +--- 1335,1341 ---- + EVENT_TEXTCHANGED, /* text was modified */ + EVENT_TEXTCHANGEDI, /* text was modified in Insert mode*/ + EVENT_CMDUNDEFINED, /* command undefined */ ++ EVENT_OPTIONSET, /* option was set */ + NUM_EVENTS /* MUST be the last one */ + }; + +*************** +*** 1898,1904 **** + #define VV_WINDOWID 56 + #define VV_PROGPATH 57 + #define VV_COMPLETED_ITEM 58 +! #define VV_LEN 59 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +--- 1899,1908 ---- + #define VV_WINDOWID 56 + #define VV_PROGPATH 57 + #define VV_COMPLETED_ITEM 58 +! #define VV_OPTION_NEW 59 +! #define VV_OPTION_OLD 60 +! #define VV_OPTION_TYPE 61 +! #define VV_LEN 62 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +*** ../vim-7.4.785/src/version.c 2015-07-17 14:16:49.858596644 +0200 +--- src/version.c 2015-07-17 17:09:30.819636167 +0200 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 786, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +231. You sprinkle Carpet Fresh on the rugs and put your vacuum cleaner + in the front doorway permanently so it always looks like you are + actually attempting to do something about that mess that has amassed + since you discovered the Internet. + + /// 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 ///