mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0794: there is no way to find out if modifyOtherKeys has been seen
Problem: There is no way to find out if an escape sequence with modifyOtherKeys has been seen. Solution: Add a notice with ":verbose map".
This commit is contained in:
parent
605d02a9b7
commit
9f62ea01a0
@ -989,6 +989,11 @@ mapping, see |map-bar|.
|
|||||||
WARNING: if you map <C-[> you may very well break any key codes that start
|
WARNING: if you map <C-[> you may very well break any key codes that start
|
||||||
with Esc. Make sure it comes AFTER other mappings.
|
with Esc. Make sure it comes AFTER other mappings.
|
||||||
|
|
||||||
|
Vim automatically detects if the modifyOtherKeys mode was enabled when it
|
||||||
|
spots an escape sequence that must have been created by it. To see if Vim
|
||||||
|
detected such an escape sequence use `:verbose map`, the first line will then
|
||||||
|
show "Seen modifyOtherKeys: true" (possibly translated).
|
||||||
|
|
||||||
A known side effect is that in Insert mode the raw escape sequence is inserted
|
A known side effect is that in Insert mode the raw escape sequence is inserted
|
||||||
after the CTRL-V key. This can be used to check whether modifyOtherKeys is
|
after the CTRL-V key. This can be used to check whether modifyOtherKeys is
|
||||||
enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you get one byte then
|
enabled: In Insert mode type CTRL-SHIFT-V CTRL-V, if you get one byte then
|
||||||
|
104
src/map.c
104
src/map.c
@ -136,6 +136,9 @@ map_mode_to_chars(int mode)
|
|||||||
return (char_u *)mapmode.ga_data;
|
return (char_u *)mapmode.ga_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Output a line for one mapping.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
showmap(
|
showmap(
|
||||||
mapblock_T *mp,
|
mapblock_T *mp,
|
||||||
@ -281,6 +284,61 @@ map_add(
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* List mappings. When "haskey" is FALSE all mappings, otherwise mappings that
|
||||||
|
* match "keys[keys_len]".
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
list_mappings(
|
||||||
|
int keyround,
|
||||||
|
int abbrev,
|
||||||
|
int haskey,
|
||||||
|
char_u *keys,
|
||||||
|
int keys_len,
|
||||||
|
int mode,
|
||||||
|
int *did_local)
|
||||||
|
{
|
||||||
|
if (p_verbose > 0 && keyround == 1 && seenModifyOtherKeys)
|
||||||
|
msg_puts(_("Seen modifyOtherKeys: true"));
|
||||||
|
|
||||||
|
// need to loop over all global hash lists
|
||||||
|
for (int hash = 0; hash < 256 && !got_int; ++hash)
|
||||||
|
{
|
||||||
|
mapblock_T *mp;
|
||||||
|
|
||||||
|
if (abbrev)
|
||||||
|
{
|
||||||
|
if (hash != 0) // there is only one abbreviation list
|
||||||
|
break;
|
||||||
|
mp = curbuf->b_first_abbr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mp = curbuf->b_maphash[hash];
|
||||||
|
for ( ; mp != NULL && !got_int; mp = mp->m_next)
|
||||||
|
{
|
||||||
|
// check entries with the same mode
|
||||||
|
if (!mp->m_simplified && (mp->m_mode & mode) != 0)
|
||||||
|
{
|
||||||
|
if (!haskey) // show all entries
|
||||||
|
{
|
||||||
|
showmap(mp, TRUE);
|
||||||
|
*did_local = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int n = mp->m_keylen;
|
||||||
|
if (STRNCMP(mp->m_keys, keys,
|
||||||
|
(size_t)(n < keys_len ? n : keys_len)) == 0)
|
||||||
|
{
|
||||||
|
showmap(mp, TRUE);
|
||||||
|
*did_local = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* map[!] : show all key mappings
|
* map[!] : show all key mappings
|
||||||
* map[!] {lhs} : show key mapping for {lhs}
|
* map[!] {lhs} : show key mapping for {lhs}
|
||||||
@ -503,8 +561,6 @@ do_map(
|
|||||||
int did_local = FALSE;
|
int did_local = FALSE;
|
||||||
int keyround1_simplified = keyround == 1 && did_simplify;
|
int keyround1_simplified = keyround == 1 && did_simplify;
|
||||||
int round;
|
int round;
|
||||||
int hash;
|
|
||||||
int new_hash;
|
|
||||||
|
|
||||||
if (keyround == 2)
|
if (keyround == 2)
|
||||||
{
|
{
|
||||||
@ -585,7 +641,7 @@ do_map(
|
|||||||
&& haskey && hasarg && maptype != MAPTYPE_UNMAP)
|
&& haskey && hasarg && maptype != MAPTYPE_UNMAP)
|
||||||
{
|
{
|
||||||
// need to loop over all global hash lists
|
// need to loop over all global hash lists
|
||||||
for (hash = 0; hash < 256 && !got_int; ++hash)
|
for (int hash = 0; hash < 256 && !got_int; ++hash)
|
||||||
{
|
{
|
||||||
if (abbrev)
|
if (abbrev)
|
||||||
{
|
{
|
||||||
@ -619,42 +675,8 @@ do_map(
|
|||||||
// When listing global mappings, also list buffer-local ones here.
|
// When listing global mappings, also list buffer-local ones here.
|
||||||
if (map_table != curbuf->b_maphash && !hasarg
|
if (map_table != curbuf->b_maphash && !hasarg
|
||||||
&& maptype != MAPTYPE_UNMAP)
|
&& maptype != MAPTYPE_UNMAP)
|
||||||
{
|
list_mappings(keyround, abbrev, haskey, keys, len,
|
||||||
// need to loop over all global hash lists
|
mode, &did_local);
|
||||||
for (hash = 0; hash < 256 && !got_int; ++hash)
|
|
||||||
{
|
|
||||||
if (abbrev)
|
|
||||||
{
|
|
||||||
if (hash != 0) // there is only one abbreviation list
|
|
||||||
break;
|
|
||||||
mp = curbuf->b_first_abbr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mp = curbuf->b_maphash[hash];
|
|
||||||
for ( ; mp != NULL && !got_int; mp = mp->m_next)
|
|
||||||
{
|
|
||||||
// check entries with the same mode
|
|
||||||
if (!mp->m_simplified && (mp->m_mode & mode) != 0)
|
|
||||||
{
|
|
||||||
if (!haskey) // show all entries
|
|
||||||
{
|
|
||||||
showmap(mp, TRUE);
|
|
||||||
did_local = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
n = mp->m_keylen;
|
|
||||||
if (STRNCMP(mp->m_keys, keys,
|
|
||||||
(size_t)(n < len ? n : len)) == 0)
|
|
||||||
{
|
|
||||||
showmap(mp, TRUE);
|
|
||||||
did_local = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find an entry in the maphash[] list that matches.
|
// Find an entry in the maphash[] list that matches.
|
||||||
// For :unmap we may loop two times: once to try to unmap an entry with
|
// For :unmap we may loop two times: once to try to unmap an entry with
|
||||||
@ -666,7 +688,7 @@ do_map(
|
|||||||
&& !did_it && !got_int; ++round)
|
&& !did_it && !got_int; ++round)
|
||||||
{
|
{
|
||||||
// need to loop over all hash lists
|
// need to loop over all hash lists
|
||||||
for (hash = 0; hash < 256 && !got_int; ++hash)
|
for (int hash = 0; hash < 256 && !got_int; ++hash)
|
||||||
{
|
{
|
||||||
if (abbrev)
|
if (abbrev)
|
||||||
{
|
{
|
||||||
@ -792,7 +814,7 @@ do_map(
|
|||||||
|
|
||||||
// May need to put this entry into another hash
|
// May need to put this entry into another hash
|
||||||
// list.
|
// list.
|
||||||
new_hash = MAP_HASH(mp->m_mode, mp->m_keys[0]);
|
int new_hash = MAP_HASH(mp->m_mode, mp->m_keys[0]);
|
||||||
if (!abbrev && new_hash != hash)
|
if (!abbrev && new_hash != hash)
|
||||||
{
|
{
|
||||||
*mpp = mp->m_next;
|
*mpp = mp->m_next;
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
794,
|
||||||
/**/
|
/**/
|
||||||
793,
|
793,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user