diff options
Diffstat (limited to 'Src/Zle')
-rw-r--r-- | Src/Zle/zle_keymap.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c index b46c74f91..c6646450d 100644 --- a/Src/Zle/zle_keymap.c +++ b/Src/Zle/zle_keymap.c @@ -1029,6 +1029,7 @@ static void add_cursor_key(Keymap km, int tccode, Thingy thingy, int defchar) { char buf[2048]; + int ok = 0; /* * Be careful not to try too hard with bindings for dubious or @@ -1042,7 +1043,18 @@ add_cursor_key(Keymap km, int tccode, Thingy thingy, int defchar) cursorptr = buf; tputs(tcstr[tccode], 1, add_cursor_char); *cursorptr = '\0'; - } else { + + /* + * Sanity checking. If the cursor key is zero-length (unlikely, + * but this is termcap we're talking about), or it's a single + * character which is already bound, then we don't bind it. + */ + if (!buf[0] || (!buf[1] && km->first[STOUC(buf[0])] != t_undefinedkey)) + ok = 0; + else + ok = 1; + } + if (!ok) { /* Assume the normal VT100-like values. */ sprintf(buf, "\33[%c", defchar); } |