mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 05:28:33 +00:00
keymap: Make replace_termcodes and friends accept length and cpo_flags
Reasons: - One does not have to do `s[len] = NUL` to work with these functions if they do not need to replace the whole string: thus `s` may be const. - One does not have to save/restore p_cpo to work with them.
This commit is contained in:
@@ -2688,22 +2688,24 @@ do_map (
|
||||
goto theend;
|
||||
}
|
||||
|
||||
/*
|
||||
* If mapping has been given as ^V<C_UP> say, then replace the term codes
|
||||
* with the appropriate two bytes. If it is a shifted special key, unshift
|
||||
* it too, giving another two bytes.
|
||||
* replace_termcodes() may move the result to allocated memory, which
|
||||
* needs to be freed later (*keys_buf and *arg_buf).
|
||||
* replace_termcodes() also removes CTRL-Vs and sometimes backslashes.
|
||||
*/
|
||||
if (haskey)
|
||||
keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
|
||||
// If mapping has been given as ^V<C_UP> say, then replace the term codes
|
||||
// with the appropriate two bytes. If it is a shifted special key, unshift
|
||||
// it too, giving another two bytes.
|
||||
// replace_termcodes() may move the result to allocated memory, which
|
||||
// needs to be freed later (*keys_buf and *arg_buf).
|
||||
// replace_termcodes() also removes CTRL-Vs and sometimes backslashes.
|
||||
if (haskey) {
|
||||
keys = replace_termcodes(keys, STRLEN(keys), &keys_buf, true, true, special,
|
||||
CPO_TO_CPO_FLAGS);
|
||||
}
|
||||
orig_rhs = rhs;
|
||||
if (hasarg) {
|
||||
if (STRICMP(rhs, "<nop>") == 0) /* "<Nop>" means nothing */
|
||||
if (STRICMP(rhs, "<nop>") == 0) { // "<Nop>" means nothing
|
||||
rhs = (char_u *)"";
|
||||
else
|
||||
rhs = replace_termcodes(rhs, &arg_buf, FALSE, TRUE, special);
|
||||
} else {
|
||||
rhs = replace_termcodes(rhs, STRLEN(rhs), &arg_buf, false, true, special,
|
||||
CPO_TO_CPO_FLAGS);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3270,7 +3272,8 @@ int map_to_exists(char_u *str, char_u *modechars, int abbr)
|
||||
char_u *buf;
|
||||
int retval;
|
||||
|
||||
rhs = replace_termcodes(str, &buf, FALSE, TRUE, FALSE);
|
||||
rhs = replace_termcodes(str, STRLEN(str), &buf, false, true, false,
|
||||
CPO_TO_CPO_FLAGS);
|
||||
|
||||
if (vim_strchr(modechars, 'n') != NULL)
|
||||
mode |= NORMAL;
|
||||
@@ -3465,7 +3468,7 @@ int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)
|
||||
mp = maphash[hash];
|
||||
for (; mp; mp = mp->m_next) {
|
||||
if (mp->m_mode & expand_mapmodes) {
|
||||
p = translate_mapping(mp->m_keys, TRUE);
|
||||
p = translate_mapping(mp->m_keys, true, CPO_TO_CPO_FLAGS);
|
||||
if (p != NULL && vim_regexec(regmatch, p, (colnr_T)0)) {
|
||||
if (round == 1)
|
||||
++count;
|
||||
@@ -4190,14 +4193,15 @@ void add_map(char_u *map, int mode)
|
||||
// Returns NULL when there is a problem.
|
||||
static char_u * translate_mapping (
|
||||
char_u *str,
|
||||
int expmap // TRUE when expanding mappings on command-line
|
||||
int expmap, // True when expanding mappings on command-line
|
||||
int cpo_flags // Value of various flags present in &cpo
|
||||
)
|
||||
{
|
||||
garray_T ga;
|
||||
ga_init(&ga, 1, 40);
|
||||
|
||||
int cpo_bslash = (vim_strchr(p_cpo, CPO_BSLASH) != NULL);
|
||||
int cpo_special = (vim_strchr(p_cpo, CPO_SPECI) != NULL);
|
||||
bool cpo_bslash = !(cpo_flags&FLAG_CPO_BSLASH);
|
||||
bool cpo_special = !(cpo_flags&FLAG_CPO_SPECI);
|
||||
|
||||
for (; *str; ++str) {
|
||||
int c = *str;
|
||||
|
Reference in New Issue
Block a user