| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.196 |
| 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.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 |
| |
| |
| |
| |
| |
| *** 299,304 **** |
| --- 299,306 ---- |
| |InsertEnter| starting Insert mode |
| |InsertChange| when typing <Insert> 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 |
| |
| |
| |
| *** 1293,1298 **** |
| --- 1293,1299 ---- |
| *v:char* *char-variable* |
| v:char Argument for evaluating 'formatexpr' and used for the typed |
| character when using <expr> in an abbreviation |:map-<expr>|. |
| + It is also used by the |InsertPreChar| event. |
| |
| *v:charconvert_from* *charconvert_from-variable* |
| v:charconvert_from |
| |
| |
| |
| *** 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. |
| |
| |
| |
| *** 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); |
| } |
| |
| |
| |
| |
| *** 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}, |
| |
| |
| |
| *** 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}, |
| |
| |
| |
| *** 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 */ |
| |
| |
| |
| *** 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 /// |