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 <Bram@moolenaar.net>
+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 |<amatch>|
++ 				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 <g> or <z>,
+*** ../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("<amatch>"))
++ :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("<amatch>"))
++ :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: <number>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <number>, OldVal: <0>, NewVal: <1>, Scope: <global>
++ 
++ 2: Setting local number option
++ Expected: Name: <number>, Oldval: <1>, NewVal: <0>, Scope: <local>
++ Autocmd Option: <number>, OldVal: <1>, NewVal: <0>, Scope: <local>
++ 
++ 3: Setting global number option
++ Expected: Name: <number>, Oldval: <1>, NewVal: <0>, Scope: <global>
++ Autocmd Option: <number>, OldVal: <1>, NewVal: <0>, Scope: <global>
++ 
++ 4: Setting local autoindent option
++ Expected: Name: <autoindent>, Oldval: <0>, NewVal: <1>, Scope: <local>
++ Autocmd Option: <autoindent>, OldVal: <0>, NewVal: <1>, Scope: <local>
++ 
++ 5: Setting global autoindent option
++ Expected: Name: <autoindent>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <autoindent>, OldVal: <0>, NewVal: <1>, Scope: <global>
++ 
++ 6: Setting global autoindent option
++ Expected: Name: <autoindent>, Oldval: <1>, NewVal: <0>, Scope: <global>
++ Autocmd Option: <autoindent>, OldVal: <1>, NewVal: <0>, Scope: <global>
++ 
++ 7: Setting several global list and number option
++ Expected: Name: <list>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <list>, OldVal: <0>, NewVal: <1>, Scope: <global>
++ 
++ 7: Setting several global list and number option
++ Expected: Name: <number>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <number>, OldVal: <0>, NewVal: <1>, Scope: <global>
++ 
++ 8: Setting global acd
++ Expected: Name: <autochdir>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <autochdir>, OldVal: <0>, NewVal: <1>, Scope: <local>
++ 
++ 9: Setting global autoread
++ Expected: Name: <autoread>, Oldval: <0>, NewVal: <1>, Scope: <global>
++ Autocmd Option: <autoread>, OldVal: <0>, NewVal: <1>, Scope: <global>
++ 
++ 10: Setting local autoread
++ Expected: Name: <autoread>, Oldval: <0>, NewVal: <1>, Scope: <local>
++ Autocmd Option: <autoread>, OldVal: <1>, NewVal: <1>, Scope: <local>
++ 
++ 11: Setting global autoread
++ Expected: Name: <autoread>, Oldval: <1>, NewVal: <0>, Scope: <global>
++ Autocmd Option: <autoread>, OldVal: <1>, NewVal: <0>, Scope: <global>
++ 
++ 12: Setting option backspace through :let
++ Expected: Name: <backspace>, Oldval: <>, NewVal: <eol,indent,start>, Scope: <global>
++ Autocmd Option: <backspace>, OldVal: <>, NewVal: <eol,indent,start>, Scope: <global>
++ 
++ 13: Setting option backspace through setbufvar()
++ Expected: Name: <backup>, Oldval: <>, NewVal: <1>, Scope: <local>
++ Autocmd Option: <backup>, OldVal: <0>, NewVal: <1>, Scope: <local>
++ 
++ 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    ///