diff options
author | Bram Moolenaar <Bram@vim.org> | 2009-09-30 13:17:02 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2009-09-30 13:17:02 +0000 |
commit | da9591ecfd31fab84e9fbca393b198e4de2de880 (patch) | |
tree | 00528af3b2273cc6fd6e33db83d99c883701a3dc | |
parent | becf428bc0ac7f7c5c1cc9e3213c025655c0beea (diff) | |
download | vim-git-da9591ecfd31fab84e9fbca393b198e4de2de880.tar.gz |
updated for version 7.2-266v7.2.266
-rw-r--r-- | runtime/doc/map.txt | 4 | ||||
-rw-r--r-- | src/eval.c | 25 | ||||
-rw-r--r-- | src/getchar.c | 12 | ||||
-rw-r--r-- | src/ops.c | 17 | ||||
-rw-r--r-- | src/proto/eval.pro | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 40 insertions, 21 deletions
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index 607295779..e7b93787c 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -224,6 +224,10 @@ expression is evaluated to obtain the {rhs} that is used. Example: > The result of the InsertDot() function will be inserted. It could check the text before the cursor and start omni completion when some condition is met. +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. For this reason the following is blocked: diff --git a/src/eval.c b/src/eval.c index f94178d66..a48e15293 100644 --- a/src/eval.c +++ b/src/eval.c @@ -18101,6 +18101,31 @@ get_vim_var_list(idx) } /* + * Set v:char to character "c". + */ + void +set_vim_var_char(c) + int c; +{ +#ifdef FEAT_MBYTE + char_u buf[MB_MAXBYTES]; +#else + char_u buf[2]; +#endif + +#ifdef FEAT_MBYTE + if (has_mbyte) + buf[(*mb_char2bytes)(c, buf)] = NUL; + else +#endif + { + buf[0] = c; + buf[1] = NUL; + } + set_vim_var_string(VV_CHAR, buf, -1); +} + +/* * Set v:count to "count" and v:count1 to "count1". * When "set_prevcount" is TRUE first set v:prevcount from v:count. */ diff --git a/src/getchar.c b/src/getchar.c index e81f7cb56..b39ff74a3 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -129,7 +129,7 @@ static void map_free __ARGS((mapblock_T **)); static void validate_maphash __ARGS((void)); static void showmap __ARGS((mapblock_T *mp, int local)); #ifdef FEAT_EVAL -static char_u *eval_map_expr __ARGS((char_u *str)); +static char_u *eval_map_expr __ARGS((char_u *str, int c)); #endif /* @@ -2446,7 +2446,7 @@ vgetorpeek(advance) if (tabuf.typebuf_valid) { vgetc_busy = 0; - s = eval_map_expr(mp->m_str); + s = eval_map_expr(mp->m_str, NUL); vgetc_busy = save_vgetc_busy; } else @@ -4367,9 +4367,9 @@ check_abbr(c, ptr, col, mincol) * abbreviation, but is not inserted into the input stream. */ j = 0; - /* special key code, split up */ if (c != Ctrl_RSB) { + /* special key code, split up */ if (IS_SPECIAL(c) || c == K_SPECIAL) { tb[j++] = K_SPECIAL; @@ -4398,7 +4398,7 @@ check_abbr(c, ptr, col, mincol) } #ifdef FEAT_EVAL if (mp->m_expr) - s = eval_map_expr(mp->m_str); + s = eval_map_expr(mp->m_str, c); else #endif s = mp->m_str; @@ -4434,8 +4434,9 @@ check_abbr(c, ptr, col, mincol) * special characters. */ static char_u * -eval_map_expr(str) +eval_map_expr(str, c) char_u *str; + int c; /* NUL or typed character for abbreviation */ { char_u *res; char_u *p; @@ -4452,6 +4453,7 @@ eval_map_expr(str) #ifdef FEAT_EX_EXTRA ++ex_normal_lock; #endif + set_vim_var_char(c); /* set v:char to the typed character */ save_cursor = curwin->w_cursor; p = eval_to_string(str, NULL, FALSE); --textlock; @@ -4473,11 +4473,6 @@ fex_format(lnum, count, c) int use_sandbox = was_set_insecurely((char_u *)"formatexpr", OPT_LOCAL); int r; -#ifdef FEAT_MBYTE - char_u buf[MB_MAXBYTES]; -#else - char_u buf[2]; -#endif /* * Set v:lnum to the first line number and v:count to the number of lines. @@ -4485,17 +4480,7 @@ fex_format(lnum, count, c) */ set_vim_var_nr(VV_LNUM, lnum); set_vim_var_nr(VV_COUNT, count); - -#ifdef FEAT_MBYTE - if (has_mbyte) - buf[(*mb_char2bytes)(c, buf)] = NUL; - else -#endif - { - buf[0] = c; - buf[1] = NUL; - } - set_vim_var_string(VV_CHAR, buf, -1); + set_vim_var_char(c); /* * Evaluate the function. diff --git a/src/proto/eval.pro b/src/proto/eval.pro index 362b9d90f..d52004676 100644 --- a/src/proto/eval.pro +++ b/src/proto/eval.pro @@ -61,6 +61,7 @@ void set_vim_var_nr __ARGS((int idx, long val)); long get_vim_var_nr __ARGS((int idx)); char_u *get_vim_var_str __ARGS((int idx)); list_T *get_vim_var_list __ARGS((int idx)); +void set_vim_var_char __ARGS((int c)); void set_vcount __ARGS((long count, long count1, int set_prevcount)); void set_vim_var_string __ARGS((int idx, char_u *val, int len)); void set_vim_var_list __ARGS((int idx, list_T *val)); diff --git a/src/version.c b/src/version.c index 3102a6fec..1a7e76527 100644 --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 266, +/**/ 265, /**/ 264, |