0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

updated for version 7.0220

This commit is contained in:
Bram Moolenaar
2006-03-10 21:34:27 +00:00
parent 1056d98844
commit 4e42719355
4 changed files with 114 additions and 14 deletions

View File

@@ -1792,8 +1792,8 @@ vgetorpeek(advance)
int local_State;
int mlen;
int max_mlen;
#ifdef FEAT_CMDL_INFO
int i;
#ifdef FEAT_CMDL_INFO
int new_wcol, new_wrow;
#endif
#ifdef FEAT_GUI
@@ -2309,6 +2309,17 @@ vgetorpeek(advance)
}
#endif
#ifdef FEAT_EVAL
/*
* Handle ":map <expr>": evaluate the {rhs} as an
* expression.
*/
if (mp->m_expr)
s = eval_to_string(mp->m_str, NULL, FALSE);
else
#endif
s = mp->m_str;
/*
* Insert the 'to' part in the typebuf.tb_buf.
* If 'from' field is the same as the start of the
@@ -2317,13 +2328,23 @@ vgetorpeek(advance)
* If m_noremap is set, don't remap the whole 'to'
* part.
*/
if (ins_typebuf(mp->m_str,
mp->m_noremap != REMAP_YES
if (s == NULL)
i = FAIL;
else
{
i = ins_typebuf(s,
mp->m_noremap != REMAP_YES
? mp->m_noremap
: STRNCMP(mp->m_str, mp->m_keys,
: STRNCMP(s, mp->m_keys,
(size_t)keylen) != 0
? REMAP_YES : REMAP_SKIP,
0, TRUE, cmd_silent || mp->m_silent) == FAIL)
0, TRUE, cmd_silent || mp->m_silent);
#ifdef FEAT_EVAL
if (mp->m_expr)
vim_free(s);
#endif
}
if (i == FAIL)
{
c = -1;
break;
@@ -2955,6 +2976,9 @@ do_map(maptype, arg, mode, abbrev)
mapblock_T **map_table;
int unique = FALSE;
int silent = FALSE;
#ifdef FEAT_EVAL
int expr = FALSE;
#endif
int noremap;
keys = arg;
@@ -2967,7 +2991,7 @@ do_map(maptype, arg, mode, abbrev)
else
noremap = REMAP_YES;
/* Accept <buffer>, <silent>, <script> and <unique> in any order. */
/* Accept <buffer>, <silent>, <expr> <script> and <unique> in any order. */
for (;;)
{
#ifdef FEAT_LOCALMAP
@@ -3003,6 +3027,16 @@ do_map(maptype, arg, mode, abbrev)
noremap = REMAP_SCRIPT;
continue;
}
/*
* Check for "<expr>": {rhs} is an expression.
*/
if (STRNCMP(keys, "<expr>", 6) == 0)
{
keys = skipwhite(keys + 6);
expr = TRUE;
continue;
}
#endif
/*
* Check for "<unique>": don't overwrite an existing mapping.
@@ -3328,6 +3362,7 @@ do_map(maptype, arg, mode, abbrev)
mp->m_silent = silent;
mp->m_mode = mode;
#ifdef FEAT_EVAL
mp->m_expr = expr;
mp->m_script_ID = current_SID;
#endif
did_it = TRUE;
@@ -3413,6 +3448,7 @@ do_map(maptype, arg, mode, abbrev)
mp->m_silent = silent;
mp->m_mode = mode;
#ifdef FEAT_EVAL
mp->m_expr = expr;
mp->m_script_ID = current_SID;
#endif
@@ -3835,11 +3871,18 @@ set_context_in_map_cmd(xp, cmd, arg, forceit, isabbrev, isunmap, cmdidx)
arg = skipwhite(arg + 8);
continue;
}
#ifdef FEAT_EVAL
if (STRNCMP(arg, "<script>", 8) == 0)
{
arg = skipwhite(arg + 8);
continue;
}
if (STRNCMP(arg, "<expr>", 6) == 0)
{
arg = skipwhite(arg + 6);
continue;
}
#endif
break;
}
xp->xp_pattern = arg;
@@ -3879,7 +3922,7 @@ ExpandMappings(regmatch, num_file, file)
{
count = 0;
for (i = 0; i < 4; ++i)
for (i = 0; i < 5; ++i)
{
if (i == 0)
p = (char_u *)"<silent>";
@@ -3888,9 +3931,11 @@ ExpandMappings(regmatch, num_file, file)
#ifdef FEAT_EVAL
else if (i == 2)
p = (char_u *)"<script>";
else if (i == 3)
p = (char_u *)"<expr>";
#endif
#ifdef FEAT_LOCALMAP
else if (i == 3 && !expand_buffer)
else if (i == 4 && !expand_buffer)
p = (char_u *)"<buffer>";
#endif
else
@@ -4002,6 +4047,7 @@ check_abbr(c, ptr, col, mincol)
int len;
int scol; /* starting column of the abbr. */
int j;
char_u *s;
#ifdef FEAT_MBYTE
char_u tb[MB_MAXBYTES + 4];
#else
@@ -4148,10 +4194,23 @@ check_abbr(c, ptr, col, mincol)
/* insert the last typed char */
(void)ins_typebuf(tb, 1, 0, TRUE, mp->m_silent);
}
#ifdef FEAT_EVAL
if (mp->m_expr)
s = eval_to_string(mp->m_str, NULL, FALSE);
else
#endif
s = mp->m_str;
if (s != NULL)
{
/* insert the to string */
(void)ins_typebuf(mp->m_str, mp->m_noremap, 0, TRUE, mp->m_silent);
(void)ins_typebuf(s, mp->m_noremap, 0, TRUE, mp->m_silent);
/* no abbrev. for these chars */
typebuf.tb_no_abbr_cnt += (int)STRLEN(mp->m_str) + j + 1;
typebuf.tb_no_abbr_cnt += (int)STRLEN(s) + j + 1;
#ifdef FEAT_EVAL
if (mp->m_expr)
vim_free(s);
#endif
}
tb[0] = Ctrl_H;
tb[1] = NUL;
@@ -4310,6 +4369,13 @@ makemap(fd, buf)
return FAIL;
if (mp->m_silent && fputs(" <silent>", fd) < 0)
return FAIL;
#ifdef FEAT_EVAL
if (mp->m_noremap == REMAP_SCRIPT
&& fputs("<script>", fd) < 0)
return FAIL;
if (mp->m_expr && fputs(" <expr>", fd) < 0)
return FAIL;
#endif
if ( putc(' ', fd) < 0
|| put_escstr(fd, mp->m_keys, 0) == FAIL