diff --git a/7.3.196 b/7.3.196 new file mode 100644 index 0000000..0d6be8c --- /dev/null +++ b/7.3.196 @@ -0,0 +1,224 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.196 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.196 +Problem: Can't intercept a character that is going to be inserted. +Solution: Add the InsertCharPre autocommand event. (Jakson A. Aquino) +Files: runtime/doc/autocmd.txt, runtime/doc/eval.txt, + runtime/doc/map.txt, src/edit.c, src/eval.c, src/fileio.c, + src/vim.h + + +*** ../mercurial/vim73/runtime/doc/autocmd.txt 2011-04-28 19:01:26.000000000 +0200 +--- runtime/doc/autocmd.txt 2011-05-19 17:12:17.000000000 +0200 +*************** +*** 299,304 **** +--- 299,306 ---- + |InsertEnter| starting Insert mode + |InsertChange| when typing while in Insert or Replace mode + |InsertLeave| when leaving Insert mode ++ |InsertCharPre| when a character was typed in Insert mode, before ++ inserting it + + |ColorScheme| after loading a color scheme + +*************** +*** 657,662 **** +--- 659,675 ---- + indicates the new mode. + Be careful not to move the cursor or do + anything else that the user does not expect. ++ *InsertCharPre* ++ InsertCharPre When a character is typed in Insert mode, ++ before inserting the char. ++ The |v:char| variable indicates the char typed ++ and can be changed during the event to insert ++ a different character. When |v:char| is set ++ to more than one character this text is ++ inserted literally. ++ It is not allowed to change the text |textlock|. ++ The event is not triggered when 'paste' is ++ set. + *InsertEnter* + InsertEnter Just before starting Insert mode. Also for + Replace mode and Virtual Replace mode. The +*** ../mercurial/vim73/runtime/doc/eval.txt 2011-05-19 12:22:41.000000000 +0200 +--- runtime/doc/eval.txt 2011-05-19 16:55:58.000000000 +0200 +*************** +*** 1293,1298 **** +--- 1293,1299 ---- + *v:char* *char-variable* + v:char Argument for evaluating 'formatexpr' and used for the typed + character when using in an abbreviation |:map-|. ++ It is also used by the |InsertPreChar| event. + + *v:charconvert_from* *charconvert_from-variable* + v:charconvert_from +*** ../mercurial/vim73/runtime/doc/map.txt 2011-05-10 17:17:38.000000000 +0200 +--- runtime/doc/map.txt 2011-05-19 16:40:34.000000000 +0200 +*************** +*** 226,232 **** + + For abbreviations |v:char| is set to the character that was typed to trigger + the abbreviation. You can use this to decide how to expand the {lhs}. You +! can't change v:char and you should not insert it. + + Be very careful about side effects! The expression is evaluated while + obtaining characters, you may very well make the command dysfunctional. +--- 226,232 ---- + + For abbreviations |v:char| is set to the character that was typed to trigger + the abbreviation. You can use this to decide how to expand the {lhs}. You +! you should not either insert or change the v:char. + + Be very careful about side effects! The expression is evaluated while + obtaining characters, you may very well make the command dysfunctional. +*** ../mercurial/vim73/src/edit.c 2011-05-10 14:22:10.000000000 +0200 +--- src/edit.c 2011-05-19 17:20:53.000000000 +0200 +*************** +*** 1381,1390 **** + goto do_intr; + #endif + + /* + * Insert a nomal character. + */ +! normalchar: + #ifdef FEAT_SMARTINDENT + /* Try to perform smart-indenting. */ + ins_try_si(c); +--- 1381,1425 ---- + goto do_intr; + #endif + ++ normalchar: + /* + * Insert a nomal character. + */ +! #ifdef FEAT_AUTOCMD +! if (!p_paste) +! { +! /* Trigger the InsertCharPre event. Lock the text to avoid +! * weird things from happening. */ +! set_vim_var_char(c); +! ++textlock; +! if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, +! FALSE, curbuf)) +! { +! /* Get the new value of v:char. If it is more than one +! * character insert it literally. */ +! char_u *s = get_vim_var_str(VV_CHAR); +! if (MB_CHARLEN(s) > 1) +! { +! if (stop_arrow() != FAIL) +! { +! ins_str(s); +! AppendToRedobuffLit(s, -1); +! } +! c = NUL; +! } +! else +! c = PTR2CHAR(s); +! } +! +! set_vim_var_string(VV_CHAR, NULL, -1); +! --textlock; +! +! /* If the new value is an empty string then don't insert a +! * char. */ +! if (c == NUL) +! break; +! } +! #endif + #ifdef FEAT_SMARTINDENT + /* Try to perform smart-indenting. */ + ins_try_si(c); +*************** +*** 3491,3501 **** + return; + } + p += len; +! #ifdef FEAT_MBYTE +! c = mb_ptr2char(p); +! #else +! c = *p; +! #endif + ins_compl_addleader(c); + } + +--- 3526,3532 ---- + return; + } + p += len; +! c = PTR2CHAR(p); + ins_compl_addleader(c); + } + +*** ../mercurial/vim73/src/eval.c 2011-05-19 14:59:07.000000000 +0200 +--- src/eval.c 2011-05-19 16:40:39.000000000 +0200 +*************** +*** 352,358 **** + {VV_NAME("swapname", VAR_STRING), VV_RO}, + {VV_NAME("swapchoice", VAR_STRING), 0}, + {VV_NAME("swapcommand", VAR_STRING), VV_RO}, +! {VV_NAME("char", VAR_STRING), VV_RO}, + {VV_NAME("mouse_win", VAR_NUMBER), 0}, + {VV_NAME("mouse_lnum", VAR_NUMBER), 0}, + {VV_NAME("mouse_col", VAR_NUMBER), 0}, +--- 352,358 ---- + {VV_NAME("swapname", VAR_STRING), VV_RO}, + {VV_NAME("swapchoice", VAR_STRING), 0}, + {VV_NAME("swapcommand", VAR_STRING), VV_RO}, +! {VV_NAME("char", VAR_STRING), 0}, + {VV_NAME("mouse_win", VAR_NUMBER), 0}, + {VV_NAME("mouse_lnum", VAR_NUMBER), 0}, + {VV_NAME("mouse_col", VAR_NUMBER), 0}, +*** ../mercurial/vim73/src/fileio.c 2011-05-10 16:41:13.000000000 +0200 +--- src/fileio.c 2011-05-19 16:40:39.000000000 +0200 +*************** +*** 7662,7667 **** +--- 7662,7668 ---- + {"InsertChange", EVENT_INSERTCHANGE}, + {"InsertEnter", EVENT_INSERTENTER}, + {"InsertLeave", EVENT_INSERTLEAVE}, ++ {"InsertCharPre", EVENT_INSERTCHARPRE}, + {"MenuPopup", EVENT_MENUPOPUP}, + {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST}, + {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE}, +*** ../mercurial/vim73/src/vim.h 2011-05-10 16:41:13.000000000 +0200 +--- src/vim.h 2011-05-19 16:40:39.000000000 +0200 +*************** +*** 1274,1279 **** +--- 1274,1280 ---- + EVENT_WINENTER, /* after entering a window */ + EVENT_WINLEAVE, /* before leaving a window */ + EVENT_ENCODINGCHANGED, /* after changing the 'encoding' option */ ++ EVENT_INSERTCHARPRE, /* before inserting a char */ + EVENT_CURSORHOLD, /* cursor in same position for a while */ + EVENT_CURSORHOLDI, /* idem, in Insert mode */ + EVENT_FUNCUNDEFINED, /* if calling a function which doesn't exist */ +*** ../vim-7.3.195/src/version.c 2011-05-19 16:35:05.000000000 +0200 +--- src/version.c 2011-05-19 17:15:41.000000000 +0200 +*************** +*** 711,712 **** +--- 711,714 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 196, + /**/ + +-- +I AM THANKFUL... +...for the mess to clean after a party because it means I have +been surrounded by friends. + + /// 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 ///