1*2cf0b469Srillig /* $NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $ */ 22543e3e6Slukem 36dc2f1dbScgd /*- 46dc2f1dbScgd * Copyright (c) 1992, 1993 56dc2f1dbScgd * The Regents of the University of California. All rights reserved. 66dc2f1dbScgd * 76dc2f1dbScgd * This code is derived from software contributed to Berkeley by 86dc2f1dbScgd * Christos Zoulas of Cornell University. 96dc2f1dbScgd * 106dc2f1dbScgd * Redistribution and use in source and binary forms, with or without 116dc2f1dbScgd * modification, are permitted provided that the following conditions 126dc2f1dbScgd * are met: 136dc2f1dbScgd * 1. Redistributions of source code must retain the above copyright 146dc2f1dbScgd * notice, this list of conditions and the following disclaimer. 156dc2f1dbScgd * 2. Redistributions in binary form must reproduce the above copyright 166dc2f1dbScgd * notice, this list of conditions and the following disclaimer in the 176dc2f1dbScgd * documentation and/or other materials provided with the distribution. 18eb7c1594Sagc * 3. Neither the name of the University nor the names of its contributors 196dc2f1dbScgd * may be used to endorse or promote products derived from this software 206dc2f1dbScgd * without specific prior written permission. 216dc2f1dbScgd * 226dc2f1dbScgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 236dc2f1dbScgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 246dc2f1dbScgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 256dc2f1dbScgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 266dc2f1dbScgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 276dc2f1dbScgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 286dc2f1dbScgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 296dc2f1dbScgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 306dc2f1dbScgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 316dc2f1dbScgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 326dc2f1dbScgd * SUCH DAMAGE. 336dc2f1dbScgd */ 346dc2f1dbScgd 350e0ac6b7Schristos #include "config.h" 366dc2f1dbScgd #if !defined(lint) && !defined(SCCSID) 372543e3e6Slukem #if 0 386dc2f1dbScgd static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; 392543e3e6Slukem #else 40*2cf0b469Srillig __RCSID("$NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $"); 412543e3e6Slukem #endif 426dc2f1dbScgd #endif /* not lint && not SCCSID */ 436dc2f1dbScgd 446dc2f1dbScgd /* 456dc2f1dbScgd * map.c: Editor function definitions 466dc2f1dbScgd */ 47e84df91eSchristos #include <ctype.h> 486dc2f1dbScgd #include <stdlib.h> 49e84df91eSchristos #include <string.h> 50747f6811Schristos 516dc2f1dbScgd #include "el.h" 524fc1f47dSchristos #include "common.h" 534fc1f47dSchristos #include "emacs.h" 544fc1f47dSchristos #include "vi.h" 554fc1f47dSchristos #include "fcns.h" 564fc1f47dSchristos #include "func.h" 57747f6811Schristos #include "help.h" 58747f6811Schristos #include "parse.h" 596dc2f1dbScgd 60469d44f8Schristos static void map_print_key(EditLine *, el_action_t *, const wchar_t *); 61469d44f8Schristos static void map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t); 62469d44f8Schristos static void map_print_all_keys(EditLine *); 63469d44f8Schristos static void map_init_nls(EditLine *); 64469d44f8Schristos static void map_init_meta(EditLine *); 656dc2f1dbScgd 666dc2f1dbScgd /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */ 676dc2f1dbScgd 68d30d584aSlukem 69469d44f8Schristos static const el_action_t el_map_emacs[] = { 706dc2f1dbScgd /* 0 */ EM_SET_MARK, /* ^@ */ 716dc2f1dbScgd /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 726dc2f1dbScgd /* 2 */ ED_PREV_CHAR, /* ^B */ 73a2eaeedbSchristos /* 3 */ ED_IGNORE, /* ^C */ 746dc2f1dbScgd /* 4 */ EM_DELETE_OR_LIST, /* ^D */ 756dc2f1dbScgd /* 5 */ ED_MOVE_TO_END, /* ^E */ 766dc2f1dbScgd /* 6 */ ED_NEXT_CHAR, /* ^F */ 776dc2f1dbScgd /* 7 */ ED_UNASSIGNED, /* ^G */ 786360c4b0Smycroft /* 8 */ EM_DELETE_PREV_CHAR, /* ^H */ 796dc2f1dbScgd /* 9 */ ED_UNASSIGNED, /* ^I */ 806dc2f1dbScgd /* 10 */ ED_NEWLINE, /* ^J */ 816dc2f1dbScgd /* 11 */ ED_KILL_LINE, /* ^K */ 826dc2f1dbScgd /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 836dc2f1dbScgd /* 13 */ ED_NEWLINE, /* ^M */ 846dc2f1dbScgd /* 14 */ ED_NEXT_HISTORY, /* ^N */ 85a2eaeedbSchristos /* 15 */ ED_IGNORE, /* ^O */ 866dc2f1dbScgd /* 16 */ ED_PREV_HISTORY, /* ^P */ 87a2eaeedbSchristos /* 17 */ ED_IGNORE, /* ^Q */ 88152732a3Schristos /* 18 */ EM_INC_SEARCH_PREV, /* ^R */ 89a2eaeedbSchristos /* 19 */ ED_IGNORE, /* ^S */ 906dc2f1dbScgd /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 916dc2f1dbScgd /* 21 */ EM_KILL_LINE, /* ^U */ 926dc2f1dbScgd /* 22 */ ED_QUOTED_INSERT, /* ^V */ 93152732a3Schristos /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 946dc2f1dbScgd /* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */ 956dc2f1dbScgd /* 25 */ EM_YANK, /* ^Y */ 96a2eaeedbSchristos /* 26 */ ED_IGNORE, /* ^Z */ 976dc2f1dbScgd /* 27 */ EM_META_NEXT, /* ^[ */ 98a2eaeedbSchristos /* 28 */ ED_IGNORE, /* ^\ */ 99a2eaeedbSchristos /* 29 */ ED_IGNORE, /* ^] */ 1006dc2f1dbScgd /* 30 */ ED_UNASSIGNED, /* ^^ */ 1016dc2f1dbScgd /* 31 */ ED_UNASSIGNED, /* ^_ */ 1026dc2f1dbScgd /* 32 */ ED_INSERT, /* SPACE */ 1036dc2f1dbScgd /* 33 */ ED_INSERT, /* ! */ 1046dc2f1dbScgd /* 34 */ ED_INSERT, /* " */ 1056dc2f1dbScgd /* 35 */ ED_INSERT, /* # */ 1066dc2f1dbScgd /* 36 */ ED_INSERT, /* $ */ 1076dc2f1dbScgd /* 37 */ ED_INSERT, /* % */ 1086dc2f1dbScgd /* 38 */ ED_INSERT, /* & */ 1096dc2f1dbScgd /* 39 */ ED_INSERT, /* ' */ 1106dc2f1dbScgd /* 40 */ ED_INSERT, /* ( */ 1116dc2f1dbScgd /* 41 */ ED_INSERT, /* ) */ 1126dc2f1dbScgd /* 42 */ ED_INSERT, /* * */ 1136dc2f1dbScgd /* 43 */ ED_INSERT, /* + */ 1146dc2f1dbScgd /* 44 */ ED_INSERT, /* , */ 1156dc2f1dbScgd /* 45 */ ED_INSERT, /* - */ 1166dc2f1dbScgd /* 46 */ ED_INSERT, /* . */ 1176dc2f1dbScgd /* 47 */ ED_INSERT, /* / */ 1186dc2f1dbScgd /* 48 */ ED_DIGIT, /* 0 */ 1196dc2f1dbScgd /* 49 */ ED_DIGIT, /* 1 */ 1206dc2f1dbScgd /* 50 */ ED_DIGIT, /* 2 */ 1216dc2f1dbScgd /* 51 */ ED_DIGIT, /* 3 */ 1226dc2f1dbScgd /* 52 */ ED_DIGIT, /* 4 */ 1236dc2f1dbScgd /* 53 */ ED_DIGIT, /* 5 */ 1246dc2f1dbScgd /* 54 */ ED_DIGIT, /* 6 */ 1256dc2f1dbScgd /* 55 */ ED_DIGIT, /* 7 */ 1266dc2f1dbScgd /* 56 */ ED_DIGIT, /* 8 */ 1276dc2f1dbScgd /* 57 */ ED_DIGIT, /* 9 */ 1286dc2f1dbScgd /* 58 */ ED_INSERT, /* : */ 1296dc2f1dbScgd /* 59 */ ED_INSERT, /* ; */ 1306dc2f1dbScgd /* 60 */ ED_INSERT, /* < */ 1316dc2f1dbScgd /* 61 */ ED_INSERT, /* = */ 1326dc2f1dbScgd /* 62 */ ED_INSERT, /* > */ 1336dc2f1dbScgd /* 63 */ ED_INSERT, /* ? */ 1346dc2f1dbScgd /* 64 */ ED_INSERT, /* @ */ 1356dc2f1dbScgd /* 65 */ ED_INSERT, /* A */ 1366dc2f1dbScgd /* 66 */ ED_INSERT, /* B */ 1376dc2f1dbScgd /* 67 */ ED_INSERT, /* C */ 1386dc2f1dbScgd /* 68 */ ED_INSERT, /* D */ 1396dc2f1dbScgd /* 69 */ ED_INSERT, /* E */ 1406dc2f1dbScgd /* 70 */ ED_INSERT, /* F */ 1416dc2f1dbScgd /* 71 */ ED_INSERT, /* G */ 1426dc2f1dbScgd /* 72 */ ED_INSERT, /* H */ 1436dc2f1dbScgd /* 73 */ ED_INSERT, /* I */ 1446dc2f1dbScgd /* 74 */ ED_INSERT, /* J */ 1456dc2f1dbScgd /* 75 */ ED_INSERT, /* K */ 1466dc2f1dbScgd /* 76 */ ED_INSERT, /* L */ 1476dc2f1dbScgd /* 77 */ ED_INSERT, /* M */ 1486dc2f1dbScgd /* 78 */ ED_INSERT, /* N */ 1496dc2f1dbScgd /* 79 */ ED_INSERT, /* O */ 1506dc2f1dbScgd /* 80 */ ED_INSERT, /* P */ 1516dc2f1dbScgd /* 81 */ ED_INSERT, /* Q */ 1526dc2f1dbScgd /* 82 */ ED_INSERT, /* R */ 1536dc2f1dbScgd /* 83 */ ED_INSERT, /* S */ 1546dc2f1dbScgd /* 84 */ ED_INSERT, /* T */ 1556dc2f1dbScgd /* 85 */ ED_INSERT, /* U */ 1566dc2f1dbScgd /* 86 */ ED_INSERT, /* V */ 1576dc2f1dbScgd /* 87 */ ED_INSERT, /* W */ 1586dc2f1dbScgd /* 88 */ ED_INSERT, /* X */ 1596dc2f1dbScgd /* 89 */ ED_INSERT, /* Y */ 1606dc2f1dbScgd /* 90 */ ED_INSERT, /* Z */ 1616dc2f1dbScgd /* 91 */ ED_INSERT, /* [ */ 1626dc2f1dbScgd /* 92 */ ED_INSERT, /* \ */ 1636dc2f1dbScgd /* 93 */ ED_INSERT, /* ] */ 1646dc2f1dbScgd /* 94 */ ED_INSERT, /* ^ */ 1656dc2f1dbScgd /* 95 */ ED_INSERT, /* _ */ 1666dc2f1dbScgd /* 96 */ ED_INSERT, /* ` */ 1676dc2f1dbScgd /* 97 */ ED_INSERT, /* a */ 1686dc2f1dbScgd /* 98 */ ED_INSERT, /* b */ 1696dc2f1dbScgd /* 99 */ ED_INSERT, /* c */ 1706dc2f1dbScgd /* 100 */ ED_INSERT, /* d */ 1716dc2f1dbScgd /* 101 */ ED_INSERT, /* e */ 1726dc2f1dbScgd /* 102 */ ED_INSERT, /* f */ 1736dc2f1dbScgd /* 103 */ ED_INSERT, /* g */ 1746dc2f1dbScgd /* 104 */ ED_INSERT, /* h */ 1756dc2f1dbScgd /* 105 */ ED_INSERT, /* i */ 1766dc2f1dbScgd /* 106 */ ED_INSERT, /* j */ 1776dc2f1dbScgd /* 107 */ ED_INSERT, /* k */ 1786dc2f1dbScgd /* 108 */ ED_INSERT, /* l */ 1796dc2f1dbScgd /* 109 */ ED_INSERT, /* m */ 1806dc2f1dbScgd /* 110 */ ED_INSERT, /* n */ 1816dc2f1dbScgd /* 111 */ ED_INSERT, /* o */ 1826dc2f1dbScgd /* 112 */ ED_INSERT, /* p */ 1836dc2f1dbScgd /* 113 */ ED_INSERT, /* q */ 1846dc2f1dbScgd /* 114 */ ED_INSERT, /* r */ 1856dc2f1dbScgd /* 115 */ ED_INSERT, /* s */ 1866dc2f1dbScgd /* 116 */ ED_INSERT, /* t */ 1876dc2f1dbScgd /* 117 */ ED_INSERT, /* u */ 1886dc2f1dbScgd /* 118 */ ED_INSERT, /* v */ 1896dc2f1dbScgd /* 119 */ ED_INSERT, /* w */ 1906dc2f1dbScgd /* 120 */ ED_INSERT, /* x */ 1916dc2f1dbScgd /* 121 */ ED_INSERT, /* y */ 1926dc2f1dbScgd /* 122 */ ED_INSERT, /* z */ 1936dc2f1dbScgd /* 123 */ ED_INSERT, /* { */ 1946dc2f1dbScgd /* 124 */ ED_INSERT, /* | */ 1956dc2f1dbScgd /* 125 */ ED_INSERT, /* } */ 1966dc2f1dbScgd /* 126 */ ED_INSERT, /* ~ */ 1976360c4b0Smycroft /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */ 1986dc2f1dbScgd /* 128 */ ED_UNASSIGNED, /* M-^@ */ 1996dc2f1dbScgd /* 129 */ ED_UNASSIGNED, /* M-^A */ 2006dc2f1dbScgd /* 130 */ ED_UNASSIGNED, /* M-^B */ 2016dc2f1dbScgd /* 131 */ ED_UNASSIGNED, /* M-^C */ 2026dc2f1dbScgd /* 132 */ ED_UNASSIGNED, /* M-^D */ 2036dc2f1dbScgd /* 133 */ ED_UNASSIGNED, /* M-^E */ 2046dc2f1dbScgd /* 134 */ ED_UNASSIGNED, /* M-^F */ 2056dc2f1dbScgd /* 135 */ ED_UNASSIGNED, /* M-^G */ 2066dc2f1dbScgd /* 136 */ ED_DELETE_PREV_WORD, /* M-^H */ 2076dc2f1dbScgd /* 137 */ ED_UNASSIGNED, /* M-^I */ 2086dc2f1dbScgd /* 138 */ ED_UNASSIGNED, /* M-^J */ 2096dc2f1dbScgd /* 139 */ ED_UNASSIGNED, /* M-^K */ 2106dc2f1dbScgd /* 140 */ ED_CLEAR_SCREEN, /* M-^L */ 2116dc2f1dbScgd /* 141 */ ED_UNASSIGNED, /* M-^M */ 2126dc2f1dbScgd /* 142 */ ED_UNASSIGNED, /* M-^N */ 2136dc2f1dbScgd /* 143 */ ED_UNASSIGNED, /* M-^O */ 2146dc2f1dbScgd /* 144 */ ED_UNASSIGNED, /* M-^P */ 2156dc2f1dbScgd /* 145 */ ED_UNASSIGNED, /* M-^Q */ 2166dc2f1dbScgd /* 146 */ ED_UNASSIGNED, /* M-^R */ 2176dc2f1dbScgd /* 147 */ ED_UNASSIGNED, /* M-^S */ 2186dc2f1dbScgd /* 148 */ ED_UNASSIGNED, /* M-^T */ 2196dc2f1dbScgd /* 149 */ ED_UNASSIGNED, /* M-^U */ 2206dc2f1dbScgd /* 150 */ ED_UNASSIGNED, /* M-^V */ 2216dc2f1dbScgd /* 151 */ ED_UNASSIGNED, /* M-^W */ 2226dc2f1dbScgd /* 152 */ ED_UNASSIGNED, /* M-^X */ 2236dc2f1dbScgd /* 153 */ ED_UNASSIGNED, /* M-^Y */ 2246dc2f1dbScgd /* 154 */ ED_UNASSIGNED, /* M-^Z */ 2256dc2f1dbScgd /* 155 */ ED_UNASSIGNED, /* M-^[ */ 2266dc2f1dbScgd /* 156 */ ED_UNASSIGNED, /* M-^\ */ 2276dc2f1dbScgd /* 157 */ ED_UNASSIGNED, /* M-^] */ 2286dc2f1dbScgd /* 158 */ ED_UNASSIGNED, /* M-^^ */ 2296dc2f1dbScgd /* 159 */ EM_COPY_PREV_WORD, /* M-^_ */ 2306dc2f1dbScgd /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 2316dc2f1dbScgd /* 161 */ ED_UNASSIGNED, /* M-! */ 2326dc2f1dbScgd /* 162 */ ED_UNASSIGNED, /* M-" */ 2336dc2f1dbScgd /* 163 */ ED_UNASSIGNED, /* M-# */ 2346dc2f1dbScgd /* 164 */ ED_UNASSIGNED, /* M-$ */ 2356dc2f1dbScgd /* 165 */ ED_UNASSIGNED, /* M-% */ 2366dc2f1dbScgd /* 166 */ ED_UNASSIGNED, /* M-& */ 2376dc2f1dbScgd /* 167 */ ED_UNASSIGNED, /* M-' */ 2386dc2f1dbScgd /* 168 */ ED_UNASSIGNED, /* M-( */ 2396dc2f1dbScgd /* 169 */ ED_UNASSIGNED, /* M-) */ 2406dc2f1dbScgd /* 170 */ ED_UNASSIGNED, /* M-* */ 2416dc2f1dbScgd /* 171 */ ED_UNASSIGNED, /* M-+ */ 2426dc2f1dbScgd /* 172 */ ED_UNASSIGNED, /* M-, */ 2436dc2f1dbScgd /* 173 */ ED_UNASSIGNED, /* M-- */ 2446dc2f1dbScgd /* 174 */ ED_UNASSIGNED, /* M-. */ 2456dc2f1dbScgd /* 175 */ ED_UNASSIGNED, /* M-/ */ 2466dc2f1dbScgd /* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */ 2476dc2f1dbScgd /* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */ 2486dc2f1dbScgd /* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */ 2496dc2f1dbScgd /* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */ 2506dc2f1dbScgd /* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */ 2516dc2f1dbScgd /* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */ 2526dc2f1dbScgd /* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */ 2536dc2f1dbScgd /* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */ 2546dc2f1dbScgd /* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */ 2556dc2f1dbScgd /* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */ 2566dc2f1dbScgd /* 186 */ ED_UNASSIGNED, /* M-: */ 2576dc2f1dbScgd /* 187 */ ED_UNASSIGNED, /* M-; */ 2586dc2f1dbScgd /* 188 */ ED_UNASSIGNED, /* M-< */ 2596dc2f1dbScgd /* 189 */ ED_UNASSIGNED, /* M-= */ 2606dc2f1dbScgd /* 190 */ ED_UNASSIGNED, /* M-> */ 2616dc2f1dbScgd /* 191 */ ED_UNASSIGNED, /* M-? */ 2626dc2f1dbScgd /* 192 */ ED_UNASSIGNED, /* M-@ */ 2636dc2f1dbScgd /* 193 */ ED_UNASSIGNED, /* M-A */ 2646dc2f1dbScgd /* 194 */ ED_PREV_WORD, /* M-B */ 2656dc2f1dbScgd /* 195 */ EM_CAPITOL_CASE, /* M-C */ 2666dc2f1dbScgd /* 196 */ EM_DELETE_NEXT_WORD, /* M-D */ 2676dc2f1dbScgd /* 197 */ ED_UNASSIGNED, /* M-E */ 2686dc2f1dbScgd /* 198 */ EM_NEXT_WORD, /* M-F */ 2696dc2f1dbScgd /* 199 */ ED_UNASSIGNED, /* M-G */ 2706dc2f1dbScgd /* 200 */ ED_UNASSIGNED, /* M-H */ 2716dc2f1dbScgd /* 201 */ ED_UNASSIGNED, /* M-I */ 2726dc2f1dbScgd /* 202 */ ED_UNASSIGNED, /* M-J */ 2736dc2f1dbScgd /* 203 */ ED_UNASSIGNED, /* M-K */ 2746dc2f1dbScgd /* 204 */ EM_LOWER_CASE, /* M-L */ 2756dc2f1dbScgd /* 205 */ ED_UNASSIGNED, /* M-M */ 2766dc2f1dbScgd /* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */ 2776dc2f1dbScgd /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 2786dc2f1dbScgd /* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */ 2796dc2f1dbScgd /* 209 */ ED_UNASSIGNED, /* M-Q */ 2806dc2f1dbScgd /* 210 */ ED_UNASSIGNED, /* M-R */ 2816dc2f1dbScgd /* 211 */ ED_UNASSIGNED, /* M-S */ 2826dc2f1dbScgd /* 212 */ ED_UNASSIGNED, /* M-T */ 2836dc2f1dbScgd /* 213 */ EM_UPPER_CASE, /* M-U */ 2846dc2f1dbScgd /* 214 */ ED_UNASSIGNED, /* M-V */ 2856dc2f1dbScgd /* 215 */ EM_COPY_REGION, /* M-W */ 2866dc2f1dbScgd /* 216 */ ED_COMMAND, /* M-X */ 2876dc2f1dbScgd /* 217 */ ED_UNASSIGNED, /* M-Y */ 2886dc2f1dbScgd /* 218 */ ED_UNASSIGNED, /* M-Z */ 2896dc2f1dbScgd /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 2906dc2f1dbScgd /* 220 */ ED_UNASSIGNED, /* M-\ */ 2916dc2f1dbScgd /* 221 */ ED_UNASSIGNED, /* M-] */ 2926dc2f1dbScgd /* 222 */ ED_UNASSIGNED, /* M-^ */ 2936dc2f1dbScgd /* 223 */ ED_UNASSIGNED, /* M-_ */ 2946dc2f1dbScgd /* 223 */ ED_UNASSIGNED, /* M-` */ 2956dc2f1dbScgd /* 224 */ ED_UNASSIGNED, /* M-a */ 2966dc2f1dbScgd /* 225 */ ED_PREV_WORD, /* M-b */ 2976dc2f1dbScgd /* 226 */ EM_CAPITOL_CASE, /* M-c */ 2986dc2f1dbScgd /* 227 */ EM_DELETE_NEXT_WORD, /* M-d */ 2996dc2f1dbScgd /* 228 */ ED_UNASSIGNED, /* M-e */ 3006dc2f1dbScgd /* 229 */ EM_NEXT_WORD, /* M-f */ 3016dc2f1dbScgd /* 230 */ ED_UNASSIGNED, /* M-g */ 3026dc2f1dbScgd /* 231 */ ED_UNASSIGNED, /* M-h */ 3036dc2f1dbScgd /* 232 */ ED_UNASSIGNED, /* M-i */ 3046dc2f1dbScgd /* 233 */ ED_UNASSIGNED, /* M-j */ 3056dc2f1dbScgd /* 234 */ ED_UNASSIGNED, /* M-k */ 3066dc2f1dbScgd /* 235 */ EM_LOWER_CASE, /* M-l */ 3076dc2f1dbScgd /* 236 */ ED_UNASSIGNED, /* M-m */ 3086dc2f1dbScgd /* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */ 3096dc2f1dbScgd /* 238 */ ED_UNASSIGNED, /* M-o */ 3106dc2f1dbScgd /* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */ 3116dc2f1dbScgd /* 240 */ ED_UNASSIGNED, /* M-q */ 3126dc2f1dbScgd /* 241 */ ED_UNASSIGNED, /* M-r */ 3136dc2f1dbScgd /* 242 */ ED_UNASSIGNED, /* M-s */ 3146dc2f1dbScgd /* 243 */ ED_UNASSIGNED, /* M-t */ 3156dc2f1dbScgd /* 244 */ EM_UPPER_CASE, /* M-u */ 3166dc2f1dbScgd /* 245 */ ED_UNASSIGNED, /* M-v */ 3176dc2f1dbScgd /* 246 */ EM_COPY_REGION, /* M-w */ 3186dc2f1dbScgd /* 247 */ ED_COMMAND, /* M-x */ 3196dc2f1dbScgd /* 248 */ ED_UNASSIGNED, /* M-y */ 3206dc2f1dbScgd /* 249 */ ED_UNASSIGNED, /* M-z */ 3216dc2f1dbScgd /* 250 */ ED_UNASSIGNED, /* M-{ */ 3226dc2f1dbScgd /* 251 */ ED_UNASSIGNED, /* M-| */ 3236dc2f1dbScgd /* 252 */ ED_UNASSIGNED, /* M-} */ 3246dc2f1dbScgd /* 253 */ ED_UNASSIGNED, /* M-~ */ 3256dc2f1dbScgd /* 254 */ ED_DELETE_PREV_WORD /* M-^? */ 3266dc2f1dbScgd /* 255 */ 3276dc2f1dbScgd }; 3286dc2f1dbScgd 329d30d584aSlukem 3306dc2f1dbScgd /* 3316dc2f1dbScgd * keymap table for vi. Each index into above tbl; should be 3326dc2f1dbScgd * N_KEYS entries long. Vi mode uses a sticky-extend to do command mode: 3336dc2f1dbScgd * insert mode characters are in the normal keymap, and command mode 3346dc2f1dbScgd * in the extended keymap. 3356dc2f1dbScgd */ 336469d44f8Schristos static const el_action_t el_map_vi_insert[] = { 3376dc2f1dbScgd #ifdef KSHVI 3386dc2f1dbScgd /* 0 */ ED_UNASSIGNED, /* ^@ */ 3396dc2f1dbScgd /* 1 */ ED_INSERT, /* ^A */ 3406dc2f1dbScgd /* 2 */ ED_INSERT, /* ^B */ 3416dc2f1dbScgd /* 3 */ ED_INSERT, /* ^C */ 3426dc2f1dbScgd /* 4 */ VI_LIST_OR_EOF, /* ^D */ 3436dc2f1dbScgd /* 5 */ ED_INSERT, /* ^E */ 3446dc2f1dbScgd /* 6 */ ED_INSERT, /* ^F */ 3456dc2f1dbScgd /* 7 */ ED_INSERT, /* ^G */ 3466dc2f1dbScgd /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 3476dc2f1dbScgd /* 9 */ ED_INSERT, /* ^I */ /* Tab Key */ 3486dc2f1dbScgd /* 10 */ ED_NEWLINE, /* ^J */ 3496dc2f1dbScgd /* 11 */ ED_INSERT, /* ^K */ 3506dc2f1dbScgd /* 12 */ ED_INSERT, /* ^L */ 3516dc2f1dbScgd /* 13 */ ED_NEWLINE, /* ^M */ 3526dc2f1dbScgd /* 14 */ ED_INSERT, /* ^N */ 3536dc2f1dbScgd /* 15 */ ED_INSERT, /* ^O */ 3546dc2f1dbScgd /* 16 */ ED_INSERT, /* ^P */ 355a2eaeedbSchristos /* 17 */ ED_IGNORE, /* ^Q */ 3566dc2f1dbScgd /* 18 */ ED_INSERT, /* ^R */ 357a2eaeedbSchristos /* 19 */ ED_IGNORE, /* ^S */ 3586dc2f1dbScgd /* 20 */ ED_INSERT, /* ^T */ 3596dc2f1dbScgd /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 3606dc2f1dbScgd /* 22 */ ED_QUOTED_INSERT, /* ^V */ 361d30d584aSlukem /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 362d30d584aSlukem /* ED_DELETE_PREV_WORD: Only until strt edit pos */ 3636dc2f1dbScgd /* 24 */ ED_INSERT, /* ^X */ 3646dc2f1dbScgd /* 25 */ ED_INSERT, /* ^Y */ 3656dc2f1dbScgd /* 26 */ ED_INSERT, /* ^Z */ 3666dc2f1dbScgd /* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */ 367a2eaeedbSchristos /* 28 */ ED_IGNORE, /* ^\ */ 3686dc2f1dbScgd /* 29 */ ED_INSERT, /* ^] */ 3696dc2f1dbScgd /* 30 */ ED_INSERT, /* ^^ */ 3706dc2f1dbScgd /* 31 */ ED_INSERT, /* ^_ */ 3716dc2f1dbScgd #else /* !KSHVI */ 372d30d584aSlukem /* 373d30d584aSlukem * NOTE: These mappings do NOT Correspond well 374d30d584aSlukem * to the KSH VI editing assignments. 375d30d584aSlukem * On the other and they are convenient and 376d30d584aSlukem * many people have have gotten used to them. 377d30d584aSlukem */ 378d30d584aSlukem /* 0 */ ED_UNASSIGNED, /* ^@ */ 379d30d584aSlukem /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 380d30d584aSlukem /* 2 */ ED_PREV_CHAR, /* ^B */ 381a2eaeedbSchristos /* 3 */ ED_IGNORE, /* ^C */ 382d30d584aSlukem /* 4 */ VI_LIST_OR_EOF, /* ^D */ 383d30d584aSlukem /* 5 */ ED_MOVE_TO_END, /* ^E */ 384d30d584aSlukem /* 6 */ ED_NEXT_CHAR, /* ^F */ 3856dc2f1dbScgd /* 7 */ ED_UNASSIGNED, /* ^G */ 386a17c7fe4Schristos /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 3876dc2f1dbScgd /* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */ 3886dc2f1dbScgd /* 10 */ ED_NEWLINE, /* ^J */ 3896dc2f1dbScgd /* 11 */ ED_KILL_LINE, /* ^K */ 3906dc2f1dbScgd /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 3916dc2f1dbScgd /* 13 */ ED_NEWLINE, /* ^M */ 3926dc2f1dbScgd /* 14 */ ED_NEXT_HISTORY, /* ^N */ 393a2eaeedbSchristos /* 15 */ ED_IGNORE, /* ^O */ 3946dc2f1dbScgd /* 16 */ ED_PREV_HISTORY, /* ^P */ 395a2eaeedbSchristos /* 17 */ ED_IGNORE, /* ^Q */ 3966dc2f1dbScgd /* 18 */ ED_REDISPLAY, /* ^R */ 397a2eaeedbSchristos /* 19 */ ED_IGNORE, /* ^S */ 3986dc2f1dbScgd /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 3996dc2f1dbScgd /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 4006dc2f1dbScgd /* 22 */ ED_QUOTED_INSERT, /* ^V */ 4016dc2f1dbScgd /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 4026dc2f1dbScgd /* 24 */ ED_UNASSIGNED, /* ^X */ 403a2eaeedbSchristos /* 25 */ ED_IGNORE, /* ^Y */ 404a2eaeedbSchristos /* 26 */ ED_IGNORE, /* ^Z */ 4056dc2f1dbScgd /* 27 */ VI_COMMAND_MODE, /* ^[ */ 406a2eaeedbSchristos /* 28 */ ED_IGNORE, /* ^\ */ 4076dc2f1dbScgd /* 29 */ ED_UNASSIGNED, /* ^] */ 4086dc2f1dbScgd /* 30 */ ED_UNASSIGNED, /* ^^ */ 4096dc2f1dbScgd /* 31 */ ED_UNASSIGNED, /* ^_ */ 4106dc2f1dbScgd #endif /* KSHVI */ 4116dc2f1dbScgd /* 32 */ ED_INSERT, /* SPACE */ 4126dc2f1dbScgd /* 33 */ ED_INSERT, /* ! */ 4136dc2f1dbScgd /* 34 */ ED_INSERT, /* " */ 4146dc2f1dbScgd /* 35 */ ED_INSERT, /* # */ 4156dc2f1dbScgd /* 36 */ ED_INSERT, /* $ */ 4166dc2f1dbScgd /* 37 */ ED_INSERT, /* % */ 4176dc2f1dbScgd /* 38 */ ED_INSERT, /* & */ 4186dc2f1dbScgd /* 39 */ ED_INSERT, /* ' */ 4196dc2f1dbScgd /* 40 */ ED_INSERT, /* ( */ 4206dc2f1dbScgd /* 41 */ ED_INSERT, /* ) */ 4216dc2f1dbScgd /* 42 */ ED_INSERT, /* * */ 4226dc2f1dbScgd /* 43 */ ED_INSERT, /* + */ 4236dc2f1dbScgd /* 44 */ ED_INSERT, /* , */ 4246dc2f1dbScgd /* 45 */ ED_INSERT, /* - */ 4256dc2f1dbScgd /* 46 */ ED_INSERT, /* . */ 4266dc2f1dbScgd /* 47 */ ED_INSERT, /* / */ 4276dc2f1dbScgd /* 48 */ ED_INSERT, /* 0 */ 4286dc2f1dbScgd /* 49 */ ED_INSERT, /* 1 */ 4296dc2f1dbScgd /* 50 */ ED_INSERT, /* 2 */ 4306dc2f1dbScgd /* 51 */ ED_INSERT, /* 3 */ 4316dc2f1dbScgd /* 52 */ ED_INSERT, /* 4 */ 4326dc2f1dbScgd /* 53 */ ED_INSERT, /* 5 */ 4336dc2f1dbScgd /* 54 */ ED_INSERT, /* 6 */ 4346dc2f1dbScgd /* 55 */ ED_INSERT, /* 7 */ 4356dc2f1dbScgd /* 56 */ ED_INSERT, /* 8 */ 4366dc2f1dbScgd /* 57 */ ED_INSERT, /* 9 */ 4376dc2f1dbScgd /* 58 */ ED_INSERT, /* : */ 4386dc2f1dbScgd /* 59 */ ED_INSERT, /* ; */ 4396dc2f1dbScgd /* 60 */ ED_INSERT, /* < */ 4406dc2f1dbScgd /* 61 */ ED_INSERT, /* = */ 4416dc2f1dbScgd /* 62 */ ED_INSERT, /* > */ 4426dc2f1dbScgd /* 63 */ ED_INSERT, /* ? */ 4436dc2f1dbScgd /* 64 */ ED_INSERT, /* @ */ 4446dc2f1dbScgd /* 65 */ ED_INSERT, /* A */ 4456dc2f1dbScgd /* 66 */ ED_INSERT, /* B */ 4466dc2f1dbScgd /* 67 */ ED_INSERT, /* C */ 4476dc2f1dbScgd /* 68 */ ED_INSERT, /* D */ 4486dc2f1dbScgd /* 69 */ ED_INSERT, /* E */ 4496dc2f1dbScgd /* 70 */ ED_INSERT, /* F */ 4506dc2f1dbScgd /* 71 */ ED_INSERT, /* G */ 4516dc2f1dbScgd /* 72 */ ED_INSERT, /* H */ 4526dc2f1dbScgd /* 73 */ ED_INSERT, /* I */ 4536dc2f1dbScgd /* 74 */ ED_INSERT, /* J */ 4546dc2f1dbScgd /* 75 */ ED_INSERT, /* K */ 4556dc2f1dbScgd /* 76 */ ED_INSERT, /* L */ 4566dc2f1dbScgd /* 77 */ ED_INSERT, /* M */ 4576dc2f1dbScgd /* 78 */ ED_INSERT, /* N */ 4586dc2f1dbScgd /* 79 */ ED_INSERT, /* O */ 4596dc2f1dbScgd /* 80 */ ED_INSERT, /* P */ 4606dc2f1dbScgd /* 81 */ ED_INSERT, /* Q */ 4616dc2f1dbScgd /* 82 */ ED_INSERT, /* R */ 4626dc2f1dbScgd /* 83 */ ED_INSERT, /* S */ 4636dc2f1dbScgd /* 84 */ ED_INSERT, /* T */ 4646dc2f1dbScgd /* 85 */ ED_INSERT, /* U */ 4656dc2f1dbScgd /* 86 */ ED_INSERT, /* V */ 4666dc2f1dbScgd /* 87 */ ED_INSERT, /* W */ 4676dc2f1dbScgd /* 88 */ ED_INSERT, /* X */ 4686dc2f1dbScgd /* 89 */ ED_INSERT, /* Y */ 4696dc2f1dbScgd /* 90 */ ED_INSERT, /* Z */ 4706dc2f1dbScgd /* 91 */ ED_INSERT, /* [ */ 4716dc2f1dbScgd /* 92 */ ED_INSERT, /* \ */ 4726dc2f1dbScgd /* 93 */ ED_INSERT, /* ] */ 4736dc2f1dbScgd /* 94 */ ED_INSERT, /* ^ */ 4746dc2f1dbScgd /* 95 */ ED_INSERT, /* _ */ 4756dc2f1dbScgd /* 96 */ ED_INSERT, /* ` */ 4766dc2f1dbScgd /* 97 */ ED_INSERT, /* a */ 4776dc2f1dbScgd /* 98 */ ED_INSERT, /* b */ 4786dc2f1dbScgd /* 99 */ ED_INSERT, /* c */ 4796dc2f1dbScgd /* 100 */ ED_INSERT, /* d */ 4806dc2f1dbScgd /* 101 */ ED_INSERT, /* e */ 4816dc2f1dbScgd /* 102 */ ED_INSERT, /* f */ 4826dc2f1dbScgd /* 103 */ ED_INSERT, /* g */ 4836dc2f1dbScgd /* 104 */ ED_INSERT, /* h */ 4846dc2f1dbScgd /* 105 */ ED_INSERT, /* i */ 4856dc2f1dbScgd /* 106 */ ED_INSERT, /* j */ 4866dc2f1dbScgd /* 107 */ ED_INSERT, /* k */ 4876dc2f1dbScgd /* 108 */ ED_INSERT, /* l */ 4886dc2f1dbScgd /* 109 */ ED_INSERT, /* m */ 4896dc2f1dbScgd /* 110 */ ED_INSERT, /* n */ 4906dc2f1dbScgd /* 111 */ ED_INSERT, /* o */ 4916dc2f1dbScgd /* 112 */ ED_INSERT, /* p */ 4926dc2f1dbScgd /* 113 */ ED_INSERT, /* q */ 4936dc2f1dbScgd /* 114 */ ED_INSERT, /* r */ 4946dc2f1dbScgd /* 115 */ ED_INSERT, /* s */ 4956dc2f1dbScgd /* 116 */ ED_INSERT, /* t */ 4966dc2f1dbScgd /* 117 */ ED_INSERT, /* u */ 4976dc2f1dbScgd /* 118 */ ED_INSERT, /* v */ 4986dc2f1dbScgd /* 119 */ ED_INSERT, /* w */ 4996dc2f1dbScgd /* 120 */ ED_INSERT, /* x */ 5006dc2f1dbScgd /* 121 */ ED_INSERT, /* y */ 5016dc2f1dbScgd /* 122 */ ED_INSERT, /* z */ 5026dc2f1dbScgd /* 123 */ ED_INSERT, /* { */ 5036dc2f1dbScgd /* 124 */ ED_INSERT, /* | */ 5046dc2f1dbScgd /* 125 */ ED_INSERT, /* } */ 5056dc2f1dbScgd /* 126 */ ED_INSERT, /* ~ */ 506a17c7fe4Schristos /* 127 */ VI_DELETE_PREV_CHAR, /* ^? */ 50739f224afSchristos /* 128 */ ED_INSERT, /* M-^@ */ 50839f224afSchristos /* 129 */ ED_INSERT, /* M-^A */ 50939f224afSchristos /* 130 */ ED_INSERT, /* M-^B */ 51039f224afSchristos /* 131 */ ED_INSERT, /* M-^C */ 51139f224afSchristos /* 132 */ ED_INSERT, /* M-^D */ 51239f224afSchristos /* 133 */ ED_INSERT, /* M-^E */ 51339f224afSchristos /* 134 */ ED_INSERT, /* M-^F */ 51439f224afSchristos /* 135 */ ED_INSERT, /* M-^G */ 51539f224afSchristos /* 136 */ ED_INSERT, /* M-^H */ 51639f224afSchristos /* 137 */ ED_INSERT, /* M-^I */ 51739f224afSchristos /* 138 */ ED_INSERT, /* M-^J */ 51839f224afSchristos /* 139 */ ED_INSERT, /* M-^K */ 51939f224afSchristos /* 140 */ ED_INSERT, /* M-^L */ 52039f224afSchristos /* 141 */ ED_INSERT, /* M-^M */ 52139f224afSchristos /* 142 */ ED_INSERT, /* M-^N */ 52239f224afSchristos /* 143 */ ED_INSERT, /* M-^O */ 52339f224afSchristos /* 144 */ ED_INSERT, /* M-^P */ 52439f224afSchristos /* 145 */ ED_INSERT, /* M-^Q */ 52539f224afSchristos /* 146 */ ED_INSERT, /* M-^R */ 52639f224afSchristos /* 147 */ ED_INSERT, /* M-^S */ 52739f224afSchristos /* 148 */ ED_INSERT, /* M-^T */ 52839f224afSchristos /* 149 */ ED_INSERT, /* M-^U */ 52939f224afSchristos /* 150 */ ED_INSERT, /* M-^V */ 53039f224afSchristos /* 151 */ ED_INSERT, /* M-^W */ 53139f224afSchristos /* 152 */ ED_INSERT, /* M-^X */ 53239f224afSchristos /* 153 */ ED_INSERT, /* M-^Y */ 53339f224afSchristos /* 154 */ ED_INSERT, /* M-^Z */ 53439f224afSchristos /* 155 */ ED_INSERT, /* M-^[ */ 53539f224afSchristos /* 156 */ ED_INSERT, /* M-^\ */ 53639f224afSchristos /* 157 */ ED_INSERT, /* M-^] */ 53739f224afSchristos /* 158 */ ED_INSERT, /* M-^^ */ 53839f224afSchristos /* 159 */ ED_INSERT, /* M-^_ */ 53939f224afSchristos /* 160 */ ED_INSERT, /* M-SPACE */ 54039f224afSchristos /* 161 */ ED_INSERT, /* M-! */ 54139f224afSchristos /* 162 */ ED_INSERT, /* M-" */ 54239f224afSchristos /* 163 */ ED_INSERT, /* M-# */ 54339f224afSchristos /* 164 */ ED_INSERT, /* M-$ */ 54439f224afSchristos /* 165 */ ED_INSERT, /* M-% */ 54539f224afSchristos /* 166 */ ED_INSERT, /* M-& */ 54639f224afSchristos /* 167 */ ED_INSERT, /* M-' */ 54739f224afSchristos /* 168 */ ED_INSERT, /* M-( */ 54839f224afSchristos /* 169 */ ED_INSERT, /* M-) */ 54939f224afSchristos /* 170 */ ED_INSERT, /* M-* */ 55039f224afSchristos /* 171 */ ED_INSERT, /* M-+ */ 55139f224afSchristos /* 172 */ ED_INSERT, /* M-, */ 55239f224afSchristos /* 173 */ ED_INSERT, /* M-- */ 55339f224afSchristos /* 174 */ ED_INSERT, /* M-. */ 55439f224afSchristos /* 175 */ ED_INSERT, /* M-/ */ 55539f224afSchristos /* 176 */ ED_INSERT, /* M-0 */ 55639f224afSchristos /* 177 */ ED_INSERT, /* M-1 */ 55739f224afSchristos /* 178 */ ED_INSERT, /* M-2 */ 55839f224afSchristos /* 179 */ ED_INSERT, /* M-3 */ 55939f224afSchristos /* 180 */ ED_INSERT, /* M-4 */ 56039f224afSchristos /* 181 */ ED_INSERT, /* M-5 */ 56139f224afSchristos /* 182 */ ED_INSERT, /* M-6 */ 56239f224afSchristos /* 183 */ ED_INSERT, /* M-7 */ 56339f224afSchristos /* 184 */ ED_INSERT, /* M-8 */ 56439f224afSchristos /* 185 */ ED_INSERT, /* M-9 */ 56539f224afSchristos /* 186 */ ED_INSERT, /* M-: */ 56639f224afSchristos /* 187 */ ED_INSERT, /* M-; */ 56739f224afSchristos /* 188 */ ED_INSERT, /* M-< */ 56839f224afSchristos /* 189 */ ED_INSERT, /* M-= */ 56939f224afSchristos /* 190 */ ED_INSERT, /* M-> */ 57039f224afSchristos /* 191 */ ED_INSERT, /* M-? */ 57139f224afSchristos /* 192 */ ED_INSERT, /* M-@ */ 57239f224afSchristos /* 193 */ ED_INSERT, /* M-A */ 57339f224afSchristos /* 194 */ ED_INSERT, /* M-B */ 57439f224afSchristos /* 195 */ ED_INSERT, /* M-C */ 57539f224afSchristos /* 196 */ ED_INSERT, /* M-D */ 57639f224afSchristos /* 197 */ ED_INSERT, /* M-E */ 57739f224afSchristos /* 198 */ ED_INSERT, /* M-F */ 57839f224afSchristos /* 199 */ ED_INSERT, /* M-G */ 57939f224afSchristos /* 200 */ ED_INSERT, /* M-H */ 58039f224afSchristos /* 201 */ ED_INSERT, /* M-I */ 58139f224afSchristos /* 202 */ ED_INSERT, /* M-J */ 58239f224afSchristos /* 203 */ ED_INSERT, /* M-K */ 58339f224afSchristos /* 204 */ ED_INSERT, /* M-L */ 58439f224afSchristos /* 205 */ ED_INSERT, /* M-M */ 58539f224afSchristos /* 206 */ ED_INSERT, /* M-N */ 58639f224afSchristos /* 207 */ ED_INSERT, /* M-O */ 58739f224afSchristos /* 208 */ ED_INSERT, /* M-P */ 58839f224afSchristos /* 209 */ ED_INSERT, /* M-Q */ 58939f224afSchristos /* 210 */ ED_INSERT, /* M-R */ 59039f224afSchristos /* 211 */ ED_INSERT, /* M-S */ 59139f224afSchristos /* 212 */ ED_INSERT, /* M-T */ 59239f224afSchristos /* 213 */ ED_INSERT, /* M-U */ 59339f224afSchristos /* 214 */ ED_INSERT, /* M-V */ 59439f224afSchristos /* 215 */ ED_INSERT, /* M-W */ 59539f224afSchristos /* 216 */ ED_INSERT, /* M-X */ 59639f224afSchristos /* 217 */ ED_INSERT, /* M-Y */ 59739f224afSchristos /* 218 */ ED_INSERT, /* M-Z */ 59839f224afSchristos /* 219 */ ED_INSERT, /* M-[ */ 59939f224afSchristos /* 220 */ ED_INSERT, /* M-\ */ 60039f224afSchristos /* 221 */ ED_INSERT, /* M-] */ 60139f224afSchristos /* 222 */ ED_INSERT, /* M-^ */ 60239f224afSchristos /* 223 */ ED_INSERT, /* M-_ */ 60339f224afSchristos /* 224 */ ED_INSERT, /* M-` */ 60439f224afSchristos /* 225 */ ED_INSERT, /* M-a */ 60539f224afSchristos /* 226 */ ED_INSERT, /* M-b */ 60639f224afSchristos /* 227 */ ED_INSERT, /* M-c */ 60739f224afSchristos /* 228 */ ED_INSERT, /* M-d */ 60839f224afSchristos /* 229 */ ED_INSERT, /* M-e */ 60939f224afSchristos /* 230 */ ED_INSERT, /* M-f */ 61039f224afSchristos /* 231 */ ED_INSERT, /* M-g */ 61139f224afSchristos /* 232 */ ED_INSERT, /* M-h */ 61239f224afSchristos /* 233 */ ED_INSERT, /* M-i */ 61339f224afSchristos /* 234 */ ED_INSERT, /* M-j */ 61439f224afSchristos /* 235 */ ED_INSERT, /* M-k */ 61539f224afSchristos /* 236 */ ED_INSERT, /* M-l */ 61639f224afSchristos /* 237 */ ED_INSERT, /* M-m */ 61739f224afSchristos /* 238 */ ED_INSERT, /* M-n */ 61839f224afSchristos /* 239 */ ED_INSERT, /* M-o */ 61939f224afSchristos /* 240 */ ED_INSERT, /* M-p */ 62039f224afSchristos /* 241 */ ED_INSERT, /* M-q */ 62139f224afSchristos /* 242 */ ED_INSERT, /* M-r */ 62239f224afSchristos /* 243 */ ED_INSERT, /* M-s */ 62339f224afSchristos /* 244 */ ED_INSERT, /* M-t */ 62439f224afSchristos /* 245 */ ED_INSERT, /* M-u */ 62539f224afSchristos /* 246 */ ED_INSERT, /* M-v */ 62639f224afSchristos /* 247 */ ED_INSERT, /* M-w */ 62739f224afSchristos /* 248 */ ED_INSERT, /* M-x */ 62839f224afSchristos /* 249 */ ED_INSERT, /* M-y */ 62939f224afSchristos /* 250 */ ED_INSERT, /* M-z */ 63039f224afSchristos /* 251 */ ED_INSERT, /* M-{ */ 63139f224afSchristos /* 252 */ ED_INSERT, /* M-| */ 63239f224afSchristos /* 253 */ ED_INSERT, /* M-} */ 63339f224afSchristos /* 254 */ ED_INSERT, /* M-~ */ 63439f224afSchristos /* 255 */ ED_INSERT /* M-^? */ 6356dc2f1dbScgd }; 6366dc2f1dbScgd 637469d44f8Schristos static const el_action_t el_map_vi_command[] = { 6386dc2f1dbScgd /* 0 */ ED_UNASSIGNED, /* ^@ */ 6396dc2f1dbScgd /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 6406dc2f1dbScgd /* 2 */ ED_UNASSIGNED, /* ^B */ 641a2eaeedbSchristos /* 3 */ ED_IGNORE, /* ^C */ 6426dc2f1dbScgd /* 4 */ ED_UNASSIGNED, /* ^D */ 6436dc2f1dbScgd /* 5 */ ED_MOVE_TO_END, /* ^E */ 6446dc2f1dbScgd /* 6 */ ED_UNASSIGNED, /* ^F */ 6456dc2f1dbScgd /* 7 */ ED_UNASSIGNED, /* ^G */ 646a17c7fe4Schristos /* 8 */ ED_DELETE_PREV_CHAR, /* ^H */ 6476dc2f1dbScgd /* 9 */ ED_UNASSIGNED, /* ^I */ 6486dc2f1dbScgd /* 10 */ ED_NEWLINE, /* ^J */ 6496dc2f1dbScgd /* 11 */ ED_KILL_LINE, /* ^K */ 6506dc2f1dbScgd /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 6516dc2f1dbScgd /* 13 */ ED_NEWLINE, /* ^M */ 6526dc2f1dbScgd /* 14 */ ED_NEXT_HISTORY, /* ^N */ 653a2eaeedbSchristos /* 15 */ ED_IGNORE, /* ^O */ 6546dc2f1dbScgd /* 16 */ ED_PREV_HISTORY, /* ^P */ 655a2eaeedbSchristos /* 17 */ ED_IGNORE, /* ^Q */ 6566dc2f1dbScgd /* 18 */ ED_REDISPLAY, /* ^R */ 657a2eaeedbSchristos /* 19 */ ED_IGNORE, /* ^S */ 6586dc2f1dbScgd /* 20 */ ED_UNASSIGNED, /* ^T */ 6596dc2f1dbScgd /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 6606dc2f1dbScgd /* 22 */ ED_UNASSIGNED, /* ^V */ 6616dc2f1dbScgd /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 6626dc2f1dbScgd /* 24 */ ED_UNASSIGNED, /* ^X */ 6636dc2f1dbScgd /* 25 */ ED_UNASSIGNED, /* ^Y */ 6646dc2f1dbScgd /* 26 */ ED_UNASSIGNED, /* ^Z */ 6656dc2f1dbScgd /* 27 */ EM_META_NEXT, /* ^[ */ 666a2eaeedbSchristos /* 28 */ ED_IGNORE, /* ^\ */ 6676dc2f1dbScgd /* 29 */ ED_UNASSIGNED, /* ^] */ 6686dc2f1dbScgd /* 30 */ ED_UNASSIGNED, /* ^^ */ 6696dc2f1dbScgd /* 31 */ ED_UNASSIGNED, /* ^_ */ 6706dc2f1dbScgd /* 32 */ ED_NEXT_CHAR, /* SPACE */ 6716dc2f1dbScgd /* 33 */ ED_UNASSIGNED, /* ! */ 6726dc2f1dbScgd /* 34 */ ED_UNASSIGNED, /* " */ 67339f224afSchristos /* 35 */ VI_COMMENT_OUT, /* # */ 6746dc2f1dbScgd /* 36 */ ED_MOVE_TO_END, /* $ */ 675905b699aSchristos /* 37 */ VI_MATCH, /* % */ 6766dc2f1dbScgd /* 38 */ ED_UNASSIGNED, /* & */ 6776dc2f1dbScgd /* 39 */ ED_UNASSIGNED, /* ' */ 6786dc2f1dbScgd /* 40 */ ED_UNASSIGNED, /* ( */ 6796dc2f1dbScgd /* 41 */ ED_UNASSIGNED, /* ) */ 6806dc2f1dbScgd /* 42 */ ED_UNASSIGNED, /* * */ 6816dc2f1dbScgd /* 43 */ ED_NEXT_HISTORY, /* + */ 6826dc2f1dbScgd /* 44 */ VI_REPEAT_PREV_CHAR, /* , */ 6836dc2f1dbScgd /* 45 */ ED_PREV_HISTORY, /* - */ 68439f224afSchristos /* 46 */ VI_REDO, /* . */ 6856dc2f1dbScgd /* 47 */ VI_SEARCH_PREV, /* / */ 6866dc2f1dbScgd /* 48 */ VI_ZERO, /* 0 */ 6876dc2f1dbScgd /* 49 */ ED_ARGUMENT_DIGIT, /* 1 */ 6886dc2f1dbScgd /* 50 */ ED_ARGUMENT_DIGIT, /* 2 */ 6896dc2f1dbScgd /* 51 */ ED_ARGUMENT_DIGIT, /* 3 */ 6906dc2f1dbScgd /* 52 */ ED_ARGUMENT_DIGIT, /* 4 */ 6916dc2f1dbScgd /* 53 */ ED_ARGUMENT_DIGIT, /* 5 */ 6926dc2f1dbScgd /* 54 */ ED_ARGUMENT_DIGIT, /* 6 */ 6936dc2f1dbScgd /* 55 */ ED_ARGUMENT_DIGIT, /* 7 */ 6946dc2f1dbScgd /* 56 */ ED_ARGUMENT_DIGIT, /* 8 */ 6956dc2f1dbScgd /* 57 */ ED_ARGUMENT_DIGIT, /* 9 */ 6966dc2f1dbScgd /* 58 */ ED_COMMAND, /* : */ 6976dc2f1dbScgd /* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */ 6986dc2f1dbScgd /* 60 */ ED_UNASSIGNED, /* < */ 6996dc2f1dbScgd /* 61 */ ED_UNASSIGNED, /* = */ 7006dc2f1dbScgd /* 62 */ ED_UNASSIGNED, /* > */ 7016dc2f1dbScgd /* 63 */ VI_SEARCH_NEXT, /* ? */ 70239f224afSchristos /* 64 */ VI_ALIAS, /* @ */ 7036dc2f1dbScgd /* 65 */ VI_ADD_AT_EOL, /* A */ 704a17c7fe4Schristos /* 66 */ VI_PREV_BIG_WORD, /* B */ 7056dc2f1dbScgd /* 67 */ VI_CHANGE_TO_EOL, /* C */ 7066dc2f1dbScgd /* 68 */ ED_KILL_LINE, /* D */ 707a17c7fe4Schristos /* 69 */ VI_END_BIG_WORD, /* E */ 7086dc2f1dbScgd /* 70 */ VI_PREV_CHAR, /* F */ 70939f224afSchristos /* 71 */ VI_TO_HISTORY_LINE, /* G */ 7106dc2f1dbScgd /* 72 */ ED_UNASSIGNED, /* H */ 7116dc2f1dbScgd /* 73 */ VI_INSERT_AT_BOL, /* I */ 7126dc2f1dbScgd /* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */ 7136dc2f1dbScgd /* 75 */ ED_SEARCH_PREV_HISTORY, /* K */ 7146dc2f1dbScgd /* 76 */ ED_UNASSIGNED, /* L */ 7156dc2f1dbScgd /* 77 */ ED_UNASSIGNED, /* M */ 7166dc2f1dbScgd /* 78 */ VI_REPEAT_SEARCH_PREV, /* N */ 7176dc2f1dbScgd /* 79 */ ED_SEQUENCE_LEAD_IN, /* O */ 7186dc2f1dbScgd /* 80 */ VI_PASTE_PREV, /* P */ 7196dc2f1dbScgd /* 81 */ ED_UNASSIGNED, /* Q */ 7206dc2f1dbScgd /* 82 */ VI_REPLACE_MODE, /* R */ 7216dc2f1dbScgd /* 83 */ VI_SUBSTITUTE_LINE, /* S */ 7226dc2f1dbScgd /* 84 */ VI_TO_PREV_CHAR, /* T */ 72339f224afSchristos /* 85 */ VI_UNDO_LINE, /* U */ 7246dc2f1dbScgd /* 86 */ ED_UNASSIGNED, /* V */ 725a17c7fe4Schristos /* 87 */ VI_NEXT_BIG_WORD, /* W */ 7266dc2f1dbScgd /* 88 */ ED_DELETE_PREV_CHAR, /* X */ 72739f224afSchristos /* 89 */ VI_YANK_END, /* Y */ 7286dc2f1dbScgd /* 90 */ ED_UNASSIGNED, /* Z */ 7296dc2f1dbScgd /* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */ 7306dc2f1dbScgd /* 92 */ ED_UNASSIGNED, /* \ */ 7316dc2f1dbScgd /* 93 */ ED_UNASSIGNED, /* ] */ 7326dc2f1dbScgd /* 94 */ ED_MOVE_TO_BEG, /* ^ */ 73339f224afSchristos /* 95 */ VI_HISTORY_WORD, /* _ */ 7346dc2f1dbScgd /* 96 */ ED_UNASSIGNED, /* ` */ 7356dc2f1dbScgd /* 97 */ VI_ADD, /* a */ 7366dc2f1dbScgd /* 98 */ VI_PREV_WORD, /* b */ 7376dc2f1dbScgd /* 99 */ VI_CHANGE_META, /* c */ 7386dc2f1dbScgd /* 100 */ VI_DELETE_META, /* d */ 7396dc2f1dbScgd /* 101 */ VI_END_WORD, /* e */ 7406dc2f1dbScgd /* 102 */ VI_NEXT_CHAR, /* f */ 7416dc2f1dbScgd /* 103 */ ED_UNASSIGNED, /* g */ 7426dc2f1dbScgd /* 104 */ ED_PREV_CHAR, /* h */ 7436dc2f1dbScgd /* 105 */ VI_INSERT, /* i */ 7446dc2f1dbScgd /* 106 */ ED_NEXT_HISTORY, /* j */ 7456dc2f1dbScgd /* 107 */ ED_PREV_HISTORY, /* k */ 7466dc2f1dbScgd /* 108 */ ED_NEXT_CHAR, /* l */ 7476dc2f1dbScgd /* 109 */ ED_UNASSIGNED, /* m */ 7486dc2f1dbScgd /* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */ 7496dc2f1dbScgd /* 111 */ ED_UNASSIGNED, /* o */ 7506dc2f1dbScgd /* 112 */ VI_PASTE_NEXT, /* p */ 7516dc2f1dbScgd /* 113 */ ED_UNASSIGNED, /* q */ 7526dc2f1dbScgd /* 114 */ VI_REPLACE_CHAR, /* r */ 7536dc2f1dbScgd /* 115 */ VI_SUBSTITUTE_CHAR, /* s */ 7546dc2f1dbScgd /* 116 */ VI_TO_NEXT_CHAR, /* t */ 7556dc2f1dbScgd /* 117 */ VI_UNDO, /* u */ 75639f224afSchristos /* 118 */ VI_HISTEDIT, /* v */ 7576dc2f1dbScgd /* 119 */ VI_NEXT_WORD, /* w */ 7586dc2f1dbScgd /* 120 */ ED_DELETE_NEXT_CHAR, /* x */ 75939f224afSchristos /* 121 */ VI_YANK, /* y */ 7606dc2f1dbScgd /* 122 */ ED_UNASSIGNED, /* z */ 7616dc2f1dbScgd /* 123 */ ED_UNASSIGNED, /* { */ 76239f224afSchristos /* 124 */ VI_TO_COLUMN, /* | */ 7636dc2f1dbScgd /* 125 */ ED_UNASSIGNED, /* } */ 7646dc2f1dbScgd /* 126 */ VI_CHANGE_CASE, /* ~ */ 7656dc2f1dbScgd /* 127 */ ED_DELETE_PREV_CHAR, /* ^? */ 7666dc2f1dbScgd /* 128 */ ED_UNASSIGNED, /* M-^@ */ 7676dc2f1dbScgd /* 129 */ ED_UNASSIGNED, /* M-^A */ 7686dc2f1dbScgd /* 130 */ ED_UNASSIGNED, /* M-^B */ 7696dc2f1dbScgd /* 131 */ ED_UNASSIGNED, /* M-^C */ 7706dc2f1dbScgd /* 132 */ ED_UNASSIGNED, /* M-^D */ 7716dc2f1dbScgd /* 133 */ ED_UNASSIGNED, /* M-^E */ 7726dc2f1dbScgd /* 134 */ ED_UNASSIGNED, /* M-^F */ 7736dc2f1dbScgd /* 135 */ ED_UNASSIGNED, /* M-^G */ 7746dc2f1dbScgd /* 136 */ ED_UNASSIGNED, /* M-^H */ 7756dc2f1dbScgd /* 137 */ ED_UNASSIGNED, /* M-^I */ 7766dc2f1dbScgd /* 138 */ ED_UNASSIGNED, /* M-^J */ 7776dc2f1dbScgd /* 139 */ ED_UNASSIGNED, /* M-^K */ 7786dc2f1dbScgd /* 140 */ ED_UNASSIGNED, /* M-^L */ 7796dc2f1dbScgd /* 141 */ ED_UNASSIGNED, /* M-^M */ 7806dc2f1dbScgd /* 142 */ ED_UNASSIGNED, /* M-^N */ 7816dc2f1dbScgd /* 143 */ ED_UNASSIGNED, /* M-^O */ 7826dc2f1dbScgd /* 144 */ ED_UNASSIGNED, /* M-^P */ 7836dc2f1dbScgd /* 145 */ ED_UNASSIGNED, /* M-^Q */ 7846dc2f1dbScgd /* 146 */ ED_UNASSIGNED, /* M-^R */ 7856dc2f1dbScgd /* 147 */ ED_UNASSIGNED, /* M-^S */ 7866dc2f1dbScgd /* 148 */ ED_UNASSIGNED, /* M-^T */ 7876dc2f1dbScgd /* 149 */ ED_UNASSIGNED, /* M-^U */ 7886dc2f1dbScgd /* 150 */ ED_UNASSIGNED, /* M-^V */ 7896dc2f1dbScgd /* 151 */ ED_UNASSIGNED, /* M-^W */ 7906dc2f1dbScgd /* 152 */ ED_UNASSIGNED, /* M-^X */ 7916dc2f1dbScgd /* 153 */ ED_UNASSIGNED, /* M-^Y */ 7926dc2f1dbScgd /* 154 */ ED_UNASSIGNED, /* M-^Z */ 7936dc2f1dbScgd /* 155 */ ED_UNASSIGNED, /* M-^[ */ 7946dc2f1dbScgd /* 156 */ ED_UNASSIGNED, /* M-^\ */ 7956dc2f1dbScgd /* 157 */ ED_UNASSIGNED, /* M-^] */ 7966dc2f1dbScgd /* 158 */ ED_UNASSIGNED, /* M-^^ */ 7976dc2f1dbScgd /* 159 */ ED_UNASSIGNED, /* M-^_ */ 7986dc2f1dbScgd /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 7996dc2f1dbScgd /* 161 */ ED_UNASSIGNED, /* M-! */ 8006dc2f1dbScgd /* 162 */ ED_UNASSIGNED, /* M-" */ 8016dc2f1dbScgd /* 163 */ ED_UNASSIGNED, /* M-# */ 8026dc2f1dbScgd /* 164 */ ED_UNASSIGNED, /* M-$ */ 8036dc2f1dbScgd /* 165 */ ED_UNASSIGNED, /* M-% */ 8046dc2f1dbScgd /* 166 */ ED_UNASSIGNED, /* M-& */ 8056dc2f1dbScgd /* 167 */ ED_UNASSIGNED, /* M-' */ 8066dc2f1dbScgd /* 168 */ ED_UNASSIGNED, /* M-( */ 8076dc2f1dbScgd /* 169 */ ED_UNASSIGNED, /* M-) */ 8086dc2f1dbScgd /* 170 */ ED_UNASSIGNED, /* M-* */ 8096dc2f1dbScgd /* 171 */ ED_UNASSIGNED, /* M-+ */ 8106dc2f1dbScgd /* 172 */ ED_UNASSIGNED, /* M-, */ 8116dc2f1dbScgd /* 173 */ ED_UNASSIGNED, /* M-- */ 8126dc2f1dbScgd /* 174 */ ED_UNASSIGNED, /* M-. */ 8136dc2f1dbScgd /* 175 */ ED_UNASSIGNED, /* M-/ */ 8146dc2f1dbScgd /* 176 */ ED_UNASSIGNED, /* M-0 */ 8156dc2f1dbScgd /* 177 */ ED_UNASSIGNED, /* M-1 */ 8166dc2f1dbScgd /* 178 */ ED_UNASSIGNED, /* M-2 */ 8176dc2f1dbScgd /* 179 */ ED_UNASSIGNED, /* M-3 */ 8186dc2f1dbScgd /* 180 */ ED_UNASSIGNED, /* M-4 */ 8196dc2f1dbScgd /* 181 */ ED_UNASSIGNED, /* M-5 */ 8206dc2f1dbScgd /* 182 */ ED_UNASSIGNED, /* M-6 */ 8216dc2f1dbScgd /* 183 */ ED_UNASSIGNED, /* M-7 */ 8226dc2f1dbScgd /* 184 */ ED_UNASSIGNED, /* M-8 */ 8236dc2f1dbScgd /* 185 */ ED_UNASSIGNED, /* M-9 */ 8246dc2f1dbScgd /* 186 */ ED_UNASSIGNED, /* M-: */ 8256dc2f1dbScgd /* 187 */ ED_UNASSIGNED, /* M-; */ 8266dc2f1dbScgd /* 188 */ ED_UNASSIGNED, /* M-< */ 8276dc2f1dbScgd /* 189 */ ED_UNASSIGNED, /* M-= */ 8286dc2f1dbScgd /* 190 */ ED_UNASSIGNED, /* M-> */ 8296dc2f1dbScgd /* 191 */ ED_UNASSIGNED, /* M-? */ 8306dc2f1dbScgd /* 192 */ ED_UNASSIGNED, /* M-@ */ 8316dc2f1dbScgd /* 193 */ ED_UNASSIGNED, /* M-A */ 8326dc2f1dbScgd /* 194 */ ED_UNASSIGNED, /* M-B */ 8336dc2f1dbScgd /* 195 */ ED_UNASSIGNED, /* M-C */ 8346dc2f1dbScgd /* 196 */ ED_UNASSIGNED, /* M-D */ 8356dc2f1dbScgd /* 197 */ ED_UNASSIGNED, /* M-E */ 8366dc2f1dbScgd /* 198 */ ED_UNASSIGNED, /* M-F */ 8376dc2f1dbScgd /* 199 */ ED_UNASSIGNED, /* M-G */ 8386dc2f1dbScgd /* 200 */ ED_UNASSIGNED, /* M-H */ 8396dc2f1dbScgd /* 201 */ ED_UNASSIGNED, /* M-I */ 8406dc2f1dbScgd /* 202 */ ED_UNASSIGNED, /* M-J */ 8416dc2f1dbScgd /* 203 */ ED_UNASSIGNED, /* M-K */ 8426dc2f1dbScgd /* 204 */ ED_UNASSIGNED, /* M-L */ 8436dc2f1dbScgd /* 205 */ ED_UNASSIGNED, /* M-M */ 8446dc2f1dbScgd /* 206 */ ED_UNASSIGNED, /* M-N */ 8456dc2f1dbScgd /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 8466dc2f1dbScgd /* 208 */ ED_UNASSIGNED, /* M-P */ 8476dc2f1dbScgd /* 209 */ ED_UNASSIGNED, /* M-Q */ 8486dc2f1dbScgd /* 210 */ ED_UNASSIGNED, /* M-R */ 8496dc2f1dbScgd /* 211 */ ED_UNASSIGNED, /* M-S */ 8506dc2f1dbScgd /* 212 */ ED_UNASSIGNED, /* M-T */ 8516dc2f1dbScgd /* 213 */ ED_UNASSIGNED, /* M-U */ 8526dc2f1dbScgd /* 214 */ ED_UNASSIGNED, /* M-V */ 8536dc2f1dbScgd /* 215 */ ED_UNASSIGNED, /* M-W */ 8546dc2f1dbScgd /* 216 */ ED_UNASSIGNED, /* M-X */ 8556dc2f1dbScgd /* 217 */ ED_UNASSIGNED, /* M-Y */ 8566dc2f1dbScgd /* 218 */ ED_UNASSIGNED, /* M-Z */ 8576dc2f1dbScgd /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 8586dc2f1dbScgd /* 220 */ ED_UNASSIGNED, /* M-\ */ 8596dc2f1dbScgd /* 221 */ ED_UNASSIGNED, /* M-] */ 8606dc2f1dbScgd /* 222 */ ED_UNASSIGNED, /* M-^ */ 8616dc2f1dbScgd /* 223 */ ED_UNASSIGNED, /* M-_ */ 8626dc2f1dbScgd /* 224 */ ED_UNASSIGNED, /* M-` */ 8636dc2f1dbScgd /* 225 */ ED_UNASSIGNED, /* M-a */ 8646dc2f1dbScgd /* 226 */ ED_UNASSIGNED, /* M-b */ 8656dc2f1dbScgd /* 227 */ ED_UNASSIGNED, /* M-c */ 8666dc2f1dbScgd /* 228 */ ED_UNASSIGNED, /* M-d */ 8676dc2f1dbScgd /* 229 */ ED_UNASSIGNED, /* M-e */ 8686dc2f1dbScgd /* 230 */ ED_UNASSIGNED, /* M-f */ 8696dc2f1dbScgd /* 231 */ ED_UNASSIGNED, /* M-g */ 8706dc2f1dbScgd /* 232 */ ED_UNASSIGNED, /* M-h */ 8716dc2f1dbScgd /* 233 */ ED_UNASSIGNED, /* M-i */ 8726dc2f1dbScgd /* 234 */ ED_UNASSIGNED, /* M-j */ 8736dc2f1dbScgd /* 235 */ ED_UNASSIGNED, /* M-k */ 8746dc2f1dbScgd /* 236 */ ED_UNASSIGNED, /* M-l */ 8756dc2f1dbScgd /* 237 */ ED_UNASSIGNED, /* M-m */ 8766dc2f1dbScgd /* 238 */ ED_UNASSIGNED, /* M-n */ 8776dc2f1dbScgd /* 239 */ ED_UNASSIGNED, /* M-o */ 8786dc2f1dbScgd /* 240 */ ED_UNASSIGNED, /* M-p */ 8796dc2f1dbScgd /* 241 */ ED_UNASSIGNED, /* M-q */ 8806dc2f1dbScgd /* 242 */ ED_UNASSIGNED, /* M-r */ 8816dc2f1dbScgd /* 243 */ ED_UNASSIGNED, /* M-s */ 8826dc2f1dbScgd /* 244 */ ED_UNASSIGNED, /* M-t */ 8836dc2f1dbScgd /* 245 */ ED_UNASSIGNED, /* M-u */ 8846dc2f1dbScgd /* 246 */ ED_UNASSIGNED, /* M-v */ 8856dc2f1dbScgd /* 247 */ ED_UNASSIGNED, /* M-w */ 8866dc2f1dbScgd /* 248 */ ED_UNASSIGNED, /* M-x */ 8876dc2f1dbScgd /* 249 */ ED_UNASSIGNED, /* M-y */ 8886dc2f1dbScgd /* 250 */ ED_UNASSIGNED, /* M-z */ 8896dc2f1dbScgd /* 251 */ ED_UNASSIGNED, /* M-{ */ 8906dc2f1dbScgd /* 252 */ ED_UNASSIGNED, /* M-| */ 8916dc2f1dbScgd /* 253 */ ED_UNASSIGNED, /* M-} */ 8926dc2f1dbScgd /* 254 */ ED_UNASSIGNED, /* M-~ */ 8936dc2f1dbScgd /* 255 */ ED_UNASSIGNED /* M-^? */ 8946dc2f1dbScgd }; 8956dc2f1dbScgd 8966dc2f1dbScgd 8976dc2f1dbScgd /* map_init(): 8986dc2f1dbScgd * Initialize and allocate the maps 8996dc2f1dbScgd */ 900a2d6b270Schristos libedit_private int 901d30d584aSlukem map_init(EditLine *el) 9026dc2f1dbScgd { 9036dc2f1dbScgd 9046dc2f1dbScgd /* 9056dc2f1dbScgd * Make sure those are correct before starting. 9066dc2f1dbScgd */ 9076dc2f1dbScgd #ifdef MAP_DEBUG 9086dc2f1dbScgd if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t)) 9091148c426Sryo EL_ABORT((el->el_errfile, "Emacs map incorrect\n")); 9106dc2f1dbScgd if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t)) 9111148c426Sryo EL_ABORT((el->el_errfile, "Vi command map incorrect\n")); 9126dc2f1dbScgd if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t)) 9131148c426Sryo EL_ABORT((el->el_errfile, "Vi insert map incorrect\n")); 9146dc2f1dbScgd #endif 9156dc2f1dbScgd 916113f06a3Schristos el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt)); 9172f3389ceSchristos if (el->el_map.alt == NULL) 918b71bed95Schristos return -1; 919113f06a3Schristos el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key)); 9202f3389ceSchristos if (el->el_map.key == NULL) 92121a4b1ccSchristos goto out; 9226dc2f1dbScgd el->el_map.emacs = el_map_emacs; 9236dc2f1dbScgd el->el_map.vic = el_map_vi_command; 9246dc2f1dbScgd el->el_map.vii = el_map_vi_insert; 925113f06a3Schristos el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help)); 9262f3389ceSchristos if (el->el_map.help == NULL) 92721a4b1ccSchristos goto out; 9284fc1f47dSchristos (void) memcpy(el->el_map.help, el_func_help, 929a13cd756Schristos sizeof(*el->el_map.help) * EL_NUM_FCNS); 930113f06a3Schristos el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func)); 9312f3389ceSchristos if (el->el_map.func == NULL) 93221a4b1ccSchristos goto out; 9334fc1f47dSchristos memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func) 934a13cd756Schristos * EL_NUM_FCNS); 9356dc2f1dbScgd el->el_map.nfunc = EL_NUM_FCNS; 9366dc2f1dbScgd 9376dc2f1dbScgd #ifdef VIDEFAULT 9386dc2f1dbScgd map_init_vi(el); 9396dc2f1dbScgd #else 9406dc2f1dbScgd map_init_emacs(el); 9416dc2f1dbScgd #endif /* VIDEFAULT */ 942b71bed95Schristos return 0; 94321a4b1ccSchristos out: 94421a4b1ccSchristos map_end(el); 94521a4b1ccSchristos return -1; 9466dc2f1dbScgd } 9476dc2f1dbScgd 9486dc2f1dbScgd 9496dc2f1dbScgd /* map_end(): 9506dc2f1dbScgd * Free the space taken by the editor maps 9516dc2f1dbScgd */ 952a2d6b270Schristos libedit_private void 953d30d584aSlukem map_end(EditLine *el) 9546dc2f1dbScgd { 955d30d584aSlukem 956a13cd756Schristos el_free(el->el_map.alt); 9576dc2f1dbScgd el->el_map.alt = NULL; 958a13cd756Schristos el_free(el->el_map.key); 9596dc2f1dbScgd el->el_map.key = NULL; 9606dc2f1dbScgd el->el_map.emacs = NULL; 9616dc2f1dbScgd el->el_map.vic = NULL; 9626dc2f1dbScgd el->el_map.vii = NULL; 963a13cd756Schristos el_free(el->el_map.help); 9646dc2f1dbScgd el->el_map.help = NULL; 965a13cd756Schristos el_free(el->el_map.func); 9666dc2f1dbScgd el->el_map.func = NULL; 9676dc2f1dbScgd } 9686dc2f1dbScgd 9696dc2f1dbScgd 9706dc2f1dbScgd /* map_init_nls(): 9716dc2f1dbScgd * Find all the printable keys and bind them to self insert 9726dc2f1dbScgd */ 973469d44f8Schristos static void 974d30d584aSlukem map_init_nls(EditLine *el) 9756dc2f1dbScgd { 9766dc2f1dbScgd int i; 977d30d584aSlukem 9786dc2f1dbScgd el_action_t *map = el->el_map.key; 9796dc2f1dbScgd 9806dc2f1dbScgd for (i = 0200; i <= 0377; i++) 981fcf85103Schristos if (iswprint(i)) 9826dc2f1dbScgd map[i] = ED_INSERT; 9836dc2f1dbScgd } 9846dc2f1dbScgd 9856dc2f1dbScgd 9866dc2f1dbScgd /* map_init_meta(): 9876dc2f1dbScgd * Bind all the meta keys to the appropriate ESC-<key> sequence 9886dc2f1dbScgd */ 989469d44f8Schristos static void 990d30d584aSlukem map_init_meta(EditLine *el) 9916dc2f1dbScgd { 9920594af80Schristos wchar_t buf[3]; 9930b7831a3Sperry int i; 9946dc2f1dbScgd el_action_t *map = el->el_map.key; 9956dc2f1dbScgd el_action_t *alt = el->el_map.alt; 9966dc2f1dbScgd 9976dc2f1dbScgd for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++) 9986dc2f1dbScgd continue; 9996dc2f1dbScgd 10006dc2f1dbScgd if (i > 0377) { 10016dc2f1dbScgd for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++) 10026dc2f1dbScgd continue; 10036dc2f1dbScgd if (i > 0377) { 10046dc2f1dbScgd i = 033; 10056dc2f1dbScgd if (el->el_map.type == MAP_VI) 10066dc2f1dbScgd map = alt; 1007d30d584aSlukem } else 10086dc2f1dbScgd map = alt; 10096dc2f1dbScgd } 10100594af80Schristos buf[0] = (wchar_t)i; 10116dc2f1dbScgd buf[2] = 0; 10126dc2f1dbScgd for (i = 0200; i <= 0377; i++) 10136dc2f1dbScgd switch (map[i]) { 10146dc2f1dbScgd case ED_INSERT: 10156dc2f1dbScgd case ED_UNASSIGNED: 10166dc2f1dbScgd case ED_SEQUENCE_LEAD_IN: 10176dc2f1dbScgd break; 10186dc2f1dbScgd default: 10196dc2f1dbScgd buf[1] = i & 0177; 1020d47f9584Schristos keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD); 10216dc2f1dbScgd break; 10226dc2f1dbScgd } 102353b97078Smrg map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN; 10246dc2f1dbScgd } 10256dc2f1dbScgd 10266dc2f1dbScgd 10276dc2f1dbScgd /* map_init_vi(): 10286dc2f1dbScgd * Initialize the vi bindings 10296dc2f1dbScgd */ 1030a2d6b270Schristos libedit_private void 1031d30d584aSlukem map_init_vi(EditLine *el) 10326dc2f1dbScgd { 10330b7831a3Sperry int i; 10346dc2f1dbScgd el_action_t *key = el->el_map.key; 10356dc2f1dbScgd el_action_t *alt = el->el_map.alt; 1036a76c617cSjdolecek const el_action_t *vii = el->el_map.vii; 1037a76c617cSjdolecek const el_action_t *vic = el->el_map.vic; 10386dc2f1dbScgd 10396dc2f1dbScgd el->el_map.type = MAP_VI; 10406dc2f1dbScgd el->el_map.current = el->el_map.key; 10416dc2f1dbScgd 1042d47f9584Schristos keymacro_reset(el); 10436dc2f1dbScgd 10446dc2f1dbScgd for (i = 0; i < N_KEYS; i++) { 10456dc2f1dbScgd key[i] = vii[i]; 10466dc2f1dbScgd alt[i] = vic[i]; 10476dc2f1dbScgd } 10486dc2f1dbScgd 10496dc2f1dbScgd map_init_meta(el); 10506dc2f1dbScgd map_init_nls(el); 10516dc2f1dbScgd 10526dc2f1dbScgd tty_bind_char(el, 1); 105398c7cbebSchristos terminal_bind_arrow(el); 10546dc2f1dbScgd } 10556dc2f1dbScgd 10566dc2f1dbScgd 10576dc2f1dbScgd /* map_init_emacs(): 10586dc2f1dbScgd * Initialize the emacs bindings 10596dc2f1dbScgd */ 1060a2d6b270Schristos libedit_private void 1061d30d584aSlukem map_init_emacs(EditLine *el) 10626dc2f1dbScgd { 10636dc2f1dbScgd int i; 10640594af80Schristos wchar_t buf[3]; 10656dc2f1dbScgd el_action_t *key = el->el_map.key; 10666dc2f1dbScgd el_action_t *alt = el->el_map.alt; 1067a76c617cSjdolecek const el_action_t *emacs = el->el_map.emacs; 10686dc2f1dbScgd 10696dc2f1dbScgd el->el_map.type = MAP_EMACS; 10706dc2f1dbScgd el->el_map.current = el->el_map.key; 1071d47f9584Schristos keymacro_reset(el); 10726dc2f1dbScgd 10736dc2f1dbScgd for (i = 0; i < N_KEYS; i++) { 10746dc2f1dbScgd key[i] = emacs[i]; 10756dc2f1dbScgd alt[i] = ED_UNASSIGNED; 10766dc2f1dbScgd } 10776dc2f1dbScgd 10786dc2f1dbScgd map_init_meta(el); 10796dc2f1dbScgd map_init_nls(el); 10806dc2f1dbScgd 10816dc2f1dbScgd buf[0] = CONTROL('X'); 10826dc2f1dbScgd buf[1] = CONTROL('X'); 10834d132172Smycroft buf[2] = 0; 1084d47f9584Schristos keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD); 10856dc2f1dbScgd 10866dc2f1dbScgd tty_bind_char(el, 1); 108798c7cbebSchristos terminal_bind_arrow(el); 10886dc2f1dbScgd } 10896dc2f1dbScgd 10906dc2f1dbScgd 10916dc2f1dbScgd /* map_set_editor(): 10926dc2f1dbScgd * Set the editor 10936dc2f1dbScgd */ 1094a2d6b270Schristos libedit_private int 10950594af80Schristos map_set_editor(EditLine *el, wchar_t *editor) 10966dc2f1dbScgd { 1097d30d584aSlukem 10980aefc7f9Schristos if (wcscmp(editor, L"emacs") == 0) { 10996dc2f1dbScgd map_init_emacs(el); 1100b71bed95Schristos return 0; 11016dc2f1dbScgd } 11020aefc7f9Schristos if (wcscmp(editor, L"vi") == 0) { 11036dc2f1dbScgd map_init_vi(el); 1104b71bed95Schristos return 0; 11056dc2f1dbScgd } 1106b71bed95Schristos return -1; 11076dc2f1dbScgd } 11086dc2f1dbScgd 11096dc2f1dbScgd 1110f87d2504Slukem /* map_get_editor(): 1111f87d2504Slukem * Retrieve the editor 1112f87d2504Slukem */ 1113a2d6b270Schristos libedit_private int 11140594af80Schristos map_get_editor(EditLine *el, const wchar_t **editor) 1115f87d2504Slukem { 1116f87d2504Slukem 1117f87d2504Slukem if (editor == NULL) 1118b71bed95Schristos return -1; 1119f87d2504Slukem switch (el->el_map.type) { 1120f87d2504Slukem case MAP_EMACS: 11210aefc7f9Schristos *editor = L"emacs"; 1122b71bed95Schristos return 0; 1123f87d2504Slukem case MAP_VI: 11240aefc7f9Schristos *editor = L"vi"; 1125b71bed95Schristos return 0; 1126f87d2504Slukem } 1127b71bed95Schristos return -1; 1128f87d2504Slukem } 1129f87d2504Slukem 1130f87d2504Slukem 11316dc2f1dbScgd /* map_print_key(): 11326dc2f1dbScgd * Print the function description for 1 key 11336dc2f1dbScgd */ 1134469d44f8Schristos static void 11350594af80Schristos map_print_key(EditLine *el, el_action_t *map, const wchar_t *in) 11366dc2f1dbScgd { 11376dc2f1dbScgd char outbuf[EL_BUFSIZ]; 1138d8f11774Schristos el_bindings_t *bp, *ep; 11396dc2f1dbScgd 11406dc2f1dbScgd if (in[0] == '\0' || in[1] == '\0') { 1141d47f9584Schristos (void) keymacro__decode_str(in, outbuf, sizeof(outbuf), ""); 1142d8f11774Schristos ep = &el->el_map.help[el->el_map.nfunc]; 1143d8f11774Schristos for (bp = el->el_map.help; bp < ep; bp++) 11446dc2f1dbScgd if (bp->func == map[(unsigned char) *in]) { 11456dc2f1dbScgd (void) fprintf(el->el_outfile, 1146fcf85103Schristos "%s\t->\t%ls\n", outbuf, bp->name); 11476dc2f1dbScgd return; 11486dc2f1dbScgd } 1149d30d584aSlukem } else 1150d47f9584Schristos keymacro_print(el, in); 11516dc2f1dbScgd } 11526dc2f1dbScgd 11536dc2f1dbScgd 11546dc2f1dbScgd /* map_print_some_keys(): 11556dc2f1dbScgd * Print keys from first to last 11566dc2f1dbScgd */ 1157469d44f8Schristos static void 1158f54e4f97Schristos map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last) 11596dc2f1dbScgd { 1160b779ac86Schristos el_bindings_t *bp, *ep; 11610594af80Schristos wchar_t firstbuf[2], lastbuf[2]; 11626dc2f1dbScgd char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ]; 11636dc2f1dbScgd 11640594af80Schristos firstbuf[0] = first; 11656dc2f1dbScgd firstbuf[1] = 0; 11660594af80Schristos lastbuf[0] = last; 11676dc2f1dbScgd lastbuf[1] = 0; 11686dc2f1dbScgd if (map[first] == ED_UNASSIGNED) { 1169230c3d4eSchristos if (first == last) { 1170d47f9584Schristos (void) keymacro__decode_str(firstbuf, unparsbuf, 1171230c3d4eSchristos sizeof(unparsbuf), STRQQ); 1172d30d584aSlukem (void) fprintf(el->el_outfile, 1173230c3d4eSchristos "%-15s-> is undefined\n", unparsbuf); 1174230c3d4eSchristos } 11756dc2f1dbScgd return; 11766dc2f1dbScgd } 1177b779ac86Schristos ep = &el->el_map.help[el->el_map.nfunc]; 1178b779ac86Schristos for (bp = el->el_map.help; bp < ep; bp++) { 11796dc2f1dbScgd if (bp->func == map[first]) { 11806dc2f1dbScgd if (first == last) { 1181d47f9584Schristos (void) keymacro__decode_str(firstbuf, unparsbuf, 1182230c3d4eSchristos sizeof(unparsbuf), STRQQ); 1183fcf85103Schristos (void) fprintf(el->el_outfile, "%-15s-> %ls\n", 1184230c3d4eSchristos unparsbuf, bp->name); 1185d30d584aSlukem } else { 1186d47f9584Schristos (void) keymacro__decode_str(firstbuf, unparsbuf, 1187230c3d4eSchristos sizeof(unparsbuf), STRQQ); 1188d47f9584Schristos (void) keymacro__decode_str(lastbuf, extrabuf, 1189230c3d4eSchristos sizeof(extrabuf), STRQQ); 1190d30d584aSlukem (void) fprintf(el->el_outfile, 1191fcf85103Schristos "%-4s to %-7s-> %ls\n", 1192230c3d4eSchristos unparsbuf, extrabuf, bp->name); 11936dc2f1dbScgd } 11946dc2f1dbScgd return; 11956dc2f1dbScgd } 11966dc2f1dbScgd } 11976dc2f1dbScgd #ifdef MAP_DEBUG 11986dc2f1dbScgd if (map == el->el_map.key) { 1199d47f9584Schristos (void) keymacro__decode_str(firstbuf, unparsbuf, 1200230c3d4eSchristos sizeof(unparsbuf), STRQQ); 1201d30d584aSlukem (void) fprintf(el->el_outfile, 1202230c3d4eSchristos "BUG!!! %s isn't bound to anything.\n", unparsbuf); 12036dc2f1dbScgd (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n", 12046dc2f1dbScgd first, el->el_map.key[first]); 1205d30d584aSlukem } else { 1206d47f9584Schristos (void) keymacro__decode_str(firstbuf, unparsbuf, 1207230c3d4eSchristos sizeof(unparsbuf), STRQQ); 1208d30d584aSlukem (void) fprintf(el->el_outfile, 1209230c3d4eSchristos "BUG!!! %s isn't bound to anything.\n", unparsbuf); 12106dc2f1dbScgd (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n", 12116dc2f1dbScgd first, el->el_map.alt[first]); 12126dc2f1dbScgd } 12136dc2f1dbScgd #endif 1214ff59a2faSchristos EL_ABORT((el->el_errfile, "Error printing keys\n")); 12156dc2f1dbScgd } 12166dc2f1dbScgd 12176dc2f1dbScgd 12186dc2f1dbScgd /* map_print_all_keys(): 12196dc2f1dbScgd * Print the function description for all keys. 12206dc2f1dbScgd */ 1221469d44f8Schristos static void 1222d30d584aSlukem map_print_all_keys(EditLine *el) 12236dc2f1dbScgd { 12246dc2f1dbScgd int prev, i; 12256dc2f1dbScgd 12266dc2f1dbScgd (void) fprintf(el->el_outfile, "Standard key bindings\n"); 12276dc2f1dbScgd prev = 0; 12286dc2f1dbScgd for (i = 0; i < N_KEYS; i++) { 12296dc2f1dbScgd if (el->el_map.key[prev] == el->el_map.key[i]) 12306dc2f1dbScgd continue; 12316dc2f1dbScgd map_print_some_keys(el, el->el_map.key, prev, i - 1); 12326dc2f1dbScgd prev = i; 12336dc2f1dbScgd } 12346dc2f1dbScgd map_print_some_keys(el, el->el_map.key, prev, i - 1); 12356dc2f1dbScgd 12366dc2f1dbScgd (void) fprintf(el->el_outfile, "Alternative key bindings\n"); 12376dc2f1dbScgd prev = 0; 12386dc2f1dbScgd for (i = 0; i < N_KEYS; i++) { 12396dc2f1dbScgd if (el->el_map.alt[prev] == el->el_map.alt[i]) 12406dc2f1dbScgd continue; 12416dc2f1dbScgd map_print_some_keys(el, el->el_map.alt, prev, i - 1); 12426dc2f1dbScgd prev = i; 12436dc2f1dbScgd } 12446dc2f1dbScgd map_print_some_keys(el, el->el_map.alt, prev, i - 1); 12456dc2f1dbScgd 12466dc2f1dbScgd (void) fprintf(el->el_outfile, "Multi-character bindings\n"); 12470aefc7f9Schristos keymacro_print(el, L""); 12486dc2f1dbScgd (void) fprintf(el->el_outfile, "Arrow key bindings\n"); 12490aefc7f9Schristos terminal_print_arrow(el, L""); 12506dc2f1dbScgd } 12516dc2f1dbScgd 12526dc2f1dbScgd 12536dc2f1dbScgd /* map_bind(): 12546dc2f1dbScgd * Add/remove/change bindings 12556dc2f1dbScgd */ 1256a2d6b270Schristos libedit_private int 12570594af80Schristos map_bind(EditLine *el, int argc, const wchar_t **argv) 12586dc2f1dbScgd { 12596dc2f1dbScgd el_action_t *map; 1260a6d4afbaSchristos int ntype, rem; 12610594af80Schristos const wchar_t *p; 12620594af80Schristos wchar_t inbuf[EL_BUFSIZ]; 12630594af80Schristos wchar_t outbuf[EL_BUFSIZ]; 12640594af80Schristos const wchar_t *in = NULL; 12650594af80Schristos wchar_t *out; 1266b779ac86Schristos el_bindings_t *bp, *ep; 12676dc2f1dbScgd int cmd; 12686dc2f1dbScgd int key; 12696dc2f1dbScgd 12706dc2f1dbScgd if (argv == NULL) 1271b71bed95Schristos return -1; 12726dc2f1dbScgd 12736dc2f1dbScgd map = el->el_map.key; 12746dc2f1dbScgd ntype = XK_CMD; 1275a6d4afbaSchristos key = rem = 0; 12766dc2f1dbScgd for (argc = 1; (p = argv[argc]) != NULL; argc++) 12776dc2f1dbScgd if (p[0] == '-') 12786dc2f1dbScgd switch (p[1]) { 12796dc2f1dbScgd case 'a': 12806dc2f1dbScgd map = el->el_map.alt; 12816dc2f1dbScgd break; 12826dc2f1dbScgd 12836dc2f1dbScgd case 's': 12846dc2f1dbScgd ntype = XK_STR; 12856dc2f1dbScgd break; 12866dc2f1dbScgd case 'k': 12876dc2f1dbScgd key = 1; 12886dc2f1dbScgd break; 12896dc2f1dbScgd 12906dc2f1dbScgd case 'r': 1291a6d4afbaSchristos rem = 1; 12926dc2f1dbScgd break; 12936dc2f1dbScgd 12946dc2f1dbScgd case 'v': 12956dc2f1dbScgd map_init_vi(el); 1296b71bed95Schristos return 0; 12976dc2f1dbScgd 12986dc2f1dbScgd case 'e': 12996dc2f1dbScgd map_init_emacs(el); 1300b71bed95Schristos return 0; 13016dc2f1dbScgd 13026dc2f1dbScgd case 'l': 1303b779ac86Schristos ep = &el->el_map.help[el->el_map.nfunc]; 1304b779ac86Schristos for (bp = el->el_map.help; bp < ep; bp++) 1305d30d584aSlukem (void) fprintf(el->el_outfile, 1306fcf85103Schristos "%ls\n\t%ls\n", 13076dc2f1dbScgd bp->name, bp->description); 1308b71bed95Schristos return 0; 13096dc2f1dbScgd default: 1310d30d584aSlukem (void) fprintf(el->el_errfile, 1311fcf85103Schristos "%ls: Invalid switch `%lc'.\n", 1312f54e4f97Schristos argv[0], (wint_t)p[1]); 13136dc2f1dbScgd } 13146dc2f1dbScgd else 13156dc2f1dbScgd break; 13166dc2f1dbScgd 13176dc2f1dbScgd if (argv[argc] == NULL) { 13186dc2f1dbScgd map_print_all_keys(el); 1319b71bed95Schristos return 0; 13206dc2f1dbScgd } 13216dc2f1dbScgd if (key) 13226dc2f1dbScgd in = argv[argc++]; 1323d30d584aSlukem else if ((in = parse__string(inbuf, argv[argc++])) == NULL) { 1324d30d584aSlukem (void) fprintf(el->el_errfile, 1325fcf85103Schristos "%ls: Invalid \\ or ^ in instring.\n", 13266dc2f1dbScgd argv[0]); 1327b71bed95Schristos return -1; 13286dc2f1dbScgd } 1329a6d4afbaSchristos if (rem) { 13306dc2f1dbScgd if (key) { 133198c7cbebSchristos (void) terminal_clear_arrow(el, in); 1332b71bed95Schristos return -1; 13336dc2f1dbScgd } 13346dc2f1dbScgd if (in[1]) 1335d47f9584Schristos (void) keymacro_delete(el, in); 13366dc2f1dbScgd else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) 1337d47f9584Schristos (void) keymacro_delete(el, in); 13386dc2f1dbScgd else 13396dc2f1dbScgd map[(unsigned char) *in] = ED_UNASSIGNED; 1340b71bed95Schristos return 0; 13416dc2f1dbScgd } 13426dc2f1dbScgd if (argv[argc] == NULL) { 13436dc2f1dbScgd if (key) 134498c7cbebSchristos terminal_print_arrow(el, in); 13456dc2f1dbScgd else 13466dc2f1dbScgd map_print_key(el, map, in); 1347b71bed95Schristos return 0; 13486dc2f1dbScgd } 13496dc2f1dbScgd #ifdef notyet 13506dc2f1dbScgd if (argv[argc + 1] != NULL) { 1351d47f9584Schristos bindkeymacro_usage(); 1352b71bed95Schristos return -1; 13536dc2f1dbScgd } 13546dc2f1dbScgd #endif 13556dc2f1dbScgd 13566dc2f1dbScgd switch (ntype) { 13576dc2f1dbScgd case XK_STR: 13586dc2f1dbScgd if ((out = parse__string(outbuf, argv[argc])) == NULL) { 13596dc2f1dbScgd (void) fprintf(el->el_errfile, 1360fcf85103Schristos "%ls: Invalid \\ or ^ in outstring.\n", argv[0]); 1361b71bed95Schristos return -1; 13626dc2f1dbScgd } 13636dc2f1dbScgd if (key) 1364d47f9584Schristos terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype); 13656dc2f1dbScgd else 1366d47f9584Schristos keymacro_add(el, in, keymacro_map_str(el, out), ntype); 13676dc2f1dbScgd map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 13686dc2f1dbScgd break; 13696dc2f1dbScgd 13706dc2f1dbScgd case XK_CMD: 13716dc2f1dbScgd if ((cmd = parse_cmd(el, argv[argc])) == -1) { 13726dc2f1dbScgd (void) fprintf(el->el_errfile, 1373fcf85103Schristos "%ls: Invalid command `%ls'.\n", 137434e53048Schristos argv[0], argv[argc]); 1375b71bed95Schristos return -1; 13766dc2f1dbScgd } 13776dc2f1dbScgd if (key) 13781da7b962Schristos terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype); 13796dc2f1dbScgd else { 13806dc2f1dbScgd if (in[1]) { 1381d47f9584Schristos keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype); 13826dc2f1dbScgd map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 1383d30d584aSlukem } else { 1384d47f9584Schristos keymacro_clear(el, map, in); 13853d802cf5Schristos map[(unsigned char) *in] = (el_action_t)cmd; 13866dc2f1dbScgd } 13876dc2f1dbScgd } 13886dc2f1dbScgd break; 13896dc2f1dbScgd 1390ae5295eeSchristos /* coverity[dead_error_begin] */ 13916dc2f1dbScgd default: 13925bba7270Schristos EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); 13936dc2f1dbScgd } 1394b71bed95Schristos return 0; 13956dc2f1dbScgd } 13966dc2f1dbScgd 13976dc2f1dbScgd 13986dc2f1dbScgd /* map_addfunc(): 13996dc2f1dbScgd * add a user defined function 14006dc2f1dbScgd */ 1401a2d6b270Schristos libedit_private int 14020594af80Schristos map_addfunc(EditLine *el, const wchar_t *name, const wchar_t *help, 14030594af80Schristos el_func_t func) 14046dc2f1dbScgd { 14052f3389ceSchristos void *p; 140680e781abSchristos size_t nf = el->el_map.nfunc + 1; 1407d30d584aSlukem 14086dc2f1dbScgd if (name == NULL || help == NULL || func == NULL) 1409b71bed95Schristos return -1; 14106dc2f1dbScgd 1411a13cd756Schristos if ((p = el_realloc(el->el_map.func, nf * 1412a13cd756Schristos sizeof(*el->el_map.func))) == NULL) 1413b71bed95Schristos return -1; 1414a13cd756Schristos el->el_map.func = p; 1415a13cd756Schristos if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help))) 14162f3389ceSchristos == NULL) 1417b71bed95Schristos return -1; 1418a13cd756Schristos el->el_map.help = p; 14196dc2f1dbScgd 14203d802cf5Schristos nf = (size_t)el->el_map.nfunc; 14216dc2f1dbScgd el->el_map.func[nf] = func; 14226dc2f1dbScgd 14236dc2f1dbScgd el->el_map.help[nf].name = name; 14243d802cf5Schristos el->el_map.help[nf].func = (int)nf; 14256dc2f1dbScgd el->el_map.help[nf].description = help; 14266dc2f1dbScgd el->el_map.nfunc++; 14276dc2f1dbScgd 1428b71bed95Schristos return 0; 14296dc2f1dbScgd } 1430