1 1.56 rillig /* $NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $ */ 2 1.3 lukem 3 1.1 cgd /*- 4 1.1 cgd * Copyright (c) 1992, 1993 5 1.1 cgd * The Regents of the University of California. All rights reserved. 6 1.1 cgd * 7 1.1 cgd * This code is derived from software contributed to Berkeley by 8 1.1 cgd * Christos Zoulas of Cornell University. 9 1.1 cgd * 10 1.1 cgd * Redistribution and use in source and binary forms, with or without 11 1.1 cgd * modification, are permitted provided that the following conditions 12 1.1 cgd * are met: 13 1.1 cgd * 1. Redistributions of source code must retain the above copyright 14 1.1 cgd * notice, this list of conditions and the following disclaimer. 15 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 cgd * notice, this list of conditions and the following disclaimer in the 17 1.1 cgd * documentation and/or other materials provided with the distribution. 18 1.19 agc * 3. Neither the name of the University nor the names of its contributors 19 1.1 cgd * may be used to endorse or promote products derived from this software 20 1.1 cgd * without specific prior written permission. 21 1.1 cgd * 22 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 1.1 cgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 1.1 cgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 1.1 cgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 1.1 cgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 1.1 cgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 1.1 cgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 1.1 cgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 1.1 cgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 1.1 cgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 1.1 cgd * SUCH DAMAGE. 33 1.1 cgd */ 34 1.1 cgd 35 1.15 christos #include "config.h" 36 1.1 cgd #if !defined(lint) && !defined(SCCSID) 37 1.3 lukem #if 0 38 1.1 cgd static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; 39 1.3 lukem #else 40 1.56 rillig __RCSID("$NetBSD: map.c,v 1.56 2025/01/03 00:40:08 rillig Exp $"); 41 1.3 lukem #endif 42 1.1 cgd #endif /* not lint && not SCCSID */ 43 1.1 cgd 44 1.1 cgd /* 45 1.9 simonb * map.c: Editor function definitions 46 1.1 cgd */ 47 1.42 christos #include <ctype.h> 48 1.1 cgd #include <stdlib.h> 49 1.42 christos #include <string.h> 50 1.41 christos 51 1.1 cgd #include "el.h" 52 1.50 christos #include "common.h" 53 1.50 christos #include "emacs.h" 54 1.50 christos #include "vi.h" 55 1.50 christos #include "fcns.h" 56 1.50 christos #include "func.h" 57 1.41 christos #include "help.h" 58 1.41 christos #include "parse.h" 59 1.1 cgd 60 1.47 christos static void map_print_key(EditLine *, el_action_t *, const wchar_t *); 61 1.47 christos static void map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t); 62 1.47 christos static void map_print_all_keys(EditLine *); 63 1.47 christos static void map_init_nls(EditLine *); 64 1.47 christos static void map_init_meta(EditLine *); 65 1.1 cgd 66 1.1 cgd /* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */ 67 1.1 cgd 68 1.11 lukem 69 1.47 christos static const el_action_t el_map_emacs[] = { 70 1.11 lukem /* 0 */ EM_SET_MARK, /* ^@ */ 71 1.11 lukem /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 72 1.11 lukem /* 2 */ ED_PREV_CHAR, /* ^B */ 73 1.49 christos /* 3 */ ED_IGNORE, /* ^C */ 74 1.11 lukem /* 4 */ EM_DELETE_OR_LIST, /* ^D */ 75 1.11 lukem /* 5 */ ED_MOVE_TO_END, /* ^E */ 76 1.11 lukem /* 6 */ ED_NEXT_CHAR, /* ^F */ 77 1.11 lukem /* 7 */ ED_UNASSIGNED, /* ^G */ 78 1.20 mycroft /* 8 */ EM_DELETE_PREV_CHAR, /* ^H */ 79 1.11 lukem /* 9 */ ED_UNASSIGNED, /* ^I */ 80 1.11 lukem /* 10 */ ED_NEWLINE, /* ^J */ 81 1.11 lukem /* 11 */ ED_KILL_LINE, /* ^K */ 82 1.11 lukem /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 83 1.11 lukem /* 13 */ ED_NEWLINE, /* ^M */ 84 1.11 lukem /* 14 */ ED_NEXT_HISTORY, /* ^N */ 85 1.49 christos /* 15 */ ED_IGNORE, /* ^O */ 86 1.11 lukem /* 16 */ ED_PREV_HISTORY, /* ^P */ 87 1.49 christos /* 17 */ ED_IGNORE, /* ^Q */ 88 1.54 christos /* 18 */ EM_INC_SEARCH_PREV, /* ^R */ 89 1.49 christos /* 19 */ ED_IGNORE, /* ^S */ 90 1.11 lukem /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 91 1.11 lukem /* 21 */ EM_KILL_LINE, /* ^U */ 92 1.11 lukem /* 22 */ ED_QUOTED_INSERT, /* ^V */ 93 1.54 christos /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 94 1.11 lukem /* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */ 95 1.11 lukem /* 25 */ EM_YANK, /* ^Y */ 96 1.49 christos /* 26 */ ED_IGNORE, /* ^Z */ 97 1.11 lukem /* 27 */ EM_META_NEXT, /* ^[ */ 98 1.49 christos /* 28 */ ED_IGNORE, /* ^\ */ 99 1.49 christos /* 29 */ ED_IGNORE, /* ^] */ 100 1.11 lukem /* 30 */ ED_UNASSIGNED, /* ^^ */ 101 1.11 lukem /* 31 */ ED_UNASSIGNED, /* ^_ */ 102 1.11 lukem /* 32 */ ED_INSERT, /* SPACE */ 103 1.11 lukem /* 33 */ ED_INSERT, /* ! */ 104 1.11 lukem /* 34 */ ED_INSERT, /* " */ 105 1.11 lukem /* 35 */ ED_INSERT, /* # */ 106 1.11 lukem /* 36 */ ED_INSERT, /* $ */ 107 1.11 lukem /* 37 */ ED_INSERT, /* % */ 108 1.11 lukem /* 38 */ ED_INSERT, /* & */ 109 1.11 lukem /* 39 */ ED_INSERT, /* ' */ 110 1.11 lukem /* 40 */ ED_INSERT, /* ( */ 111 1.11 lukem /* 41 */ ED_INSERT, /* ) */ 112 1.11 lukem /* 42 */ ED_INSERT, /* * */ 113 1.11 lukem /* 43 */ ED_INSERT, /* + */ 114 1.11 lukem /* 44 */ ED_INSERT, /* , */ 115 1.11 lukem /* 45 */ ED_INSERT, /* - */ 116 1.11 lukem /* 46 */ ED_INSERT, /* . */ 117 1.11 lukem /* 47 */ ED_INSERT, /* / */ 118 1.11 lukem /* 48 */ ED_DIGIT, /* 0 */ 119 1.11 lukem /* 49 */ ED_DIGIT, /* 1 */ 120 1.11 lukem /* 50 */ ED_DIGIT, /* 2 */ 121 1.11 lukem /* 51 */ ED_DIGIT, /* 3 */ 122 1.11 lukem /* 52 */ ED_DIGIT, /* 4 */ 123 1.11 lukem /* 53 */ ED_DIGIT, /* 5 */ 124 1.11 lukem /* 54 */ ED_DIGIT, /* 6 */ 125 1.11 lukem /* 55 */ ED_DIGIT, /* 7 */ 126 1.11 lukem /* 56 */ ED_DIGIT, /* 8 */ 127 1.11 lukem /* 57 */ ED_DIGIT, /* 9 */ 128 1.11 lukem /* 58 */ ED_INSERT, /* : */ 129 1.11 lukem /* 59 */ ED_INSERT, /* ; */ 130 1.11 lukem /* 60 */ ED_INSERT, /* < */ 131 1.11 lukem /* 61 */ ED_INSERT, /* = */ 132 1.11 lukem /* 62 */ ED_INSERT, /* > */ 133 1.11 lukem /* 63 */ ED_INSERT, /* ? */ 134 1.11 lukem /* 64 */ ED_INSERT, /* @ */ 135 1.11 lukem /* 65 */ ED_INSERT, /* A */ 136 1.11 lukem /* 66 */ ED_INSERT, /* B */ 137 1.11 lukem /* 67 */ ED_INSERT, /* C */ 138 1.11 lukem /* 68 */ ED_INSERT, /* D */ 139 1.11 lukem /* 69 */ ED_INSERT, /* E */ 140 1.11 lukem /* 70 */ ED_INSERT, /* F */ 141 1.11 lukem /* 71 */ ED_INSERT, /* G */ 142 1.11 lukem /* 72 */ ED_INSERT, /* H */ 143 1.11 lukem /* 73 */ ED_INSERT, /* I */ 144 1.11 lukem /* 74 */ ED_INSERT, /* J */ 145 1.11 lukem /* 75 */ ED_INSERT, /* K */ 146 1.11 lukem /* 76 */ ED_INSERT, /* L */ 147 1.11 lukem /* 77 */ ED_INSERT, /* M */ 148 1.11 lukem /* 78 */ ED_INSERT, /* N */ 149 1.11 lukem /* 79 */ ED_INSERT, /* O */ 150 1.11 lukem /* 80 */ ED_INSERT, /* P */ 151 1.11 lukem /* 81 */ ED_INSERT, /* Q */ 152 1.11 lukem /* 82 */ ED_INSERT, /* R */ 153 1.11 lukem /* 83 */ ED_INSERT, /* S */ 154 1.11 lukem /* 84 */ ED_INSERT, /* T */ 155 1.11 lukem /* 85 */ ED_INSERT, /* U */ 156 1.11 lukem /* 86 */ ED_INSERT, /* V */ 157 1.11 lukem /* 87 */ ED_INSERT, /* W */ 158 1.11 lukem /* 88 */ ED_INSERT, /* X */ 159 1.11 lukem /* 89 */ ED_INSERT, /* Y */ 160 1.11 lukem /* 90 */ ED_INSERT, /* Z */ 161 1.11 lukem /* 91 */ ED_INSERT, /* [ */ 162 1.11 lukem /* 92 */ ED_INSERT, /* \ */ 163 1.11 lukem /* 93 */ ED_INSERT, /* ] */ 164 1.11 lukem /* 94 */ ED_INSERT, /* ^ */ 165 1.11 lukem /* 95 */ ED_INSERT, /* _ */ 166 1.11 lukem /* 96 */ ED_INSERT, /* ` */ 167 1.11 lukem /* 97 */ ED_INSERT, /* a */ 168 1.11 lukem /* 98 */ ED_INSERT, /* b */ 169 1.11 lukem /* 99 */ ED_INSERT, /* c */ 170 1.11 lukem /* 100 */ ED_INSERT, /* d */ 171 1.11 lukem /* 101 */ ED_INSERT, /* e */ 172 1.11 lukem /* 102 */ ED_INSERT, /* f */ 173 1.11 lukem /* 103 */ ED_INSERT, /* g */ 174 1.11 lukem /* 104 */ ED_INSERT, /* h */ 175 1.11 lukem /* 105 */ ED_INSERT, /* i */ 176 1.11 lukem /* 106 */ ED_INSERT, /* j */ 177 1.11 lukem /* 107 */ ED_INSERT, /* k */ 178 1.11 lukem /* 108 */ ED_INSERT, /* l */ 179 1.11 lukem /* 109 */ ED_INSERT, /* m */ 180 1.11 lukem /* 110 */ ED_INSERT, /* n */ 181 1.11 lukem /* 111 */ ED_INSERT, /* o */ 182 1.11 lukem /* 112 */ ED_INSERT, /* p */ 183 1.11 lukem /* 113 */ ED_INSERT, /* q */ 184 1.11 lukem /* 114 */ ED_INSERT, /* r */ 185 1.11 lukem /* 115 */ ED_INSERT, /* s */ 186 1.11 lukem /* 116 */ ED_INSERT, /* t */ 187 1.11 lukem /* 117 */ ED_INSERT, /* u */ 188 1.11 lukem /* 118 */ ED_INSERT, /* v */ 189 1.11 lukem /* 119 */ ED_INSERT, /* w */ 190 1.11 lukem /* 120 */ ED_INSERT, /* x */ 191 1.11 lukem /* 121 */ ED_INSERT, /* y */ 192 1.11 lukem /* 122 */ ED_INSERT, /* z */ 193 1.11 lukem /* 123 */ ED_INSERT, /* { */ 194 1.11 lukem /* 124 */ ED_INSERT, /* | */ 195 1.11 lukem /* 125 */ ED_INSERT, /* } */ 196 1.11 lukem /* 126 */ ED_INSERT, /* ~ */ 197 1.20 mycroft /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */ 198 1.11 lukem /* 128 */ ED_UNASSIGNED, /* M-^@ */ 199 1.11 lukem /* 129 */ ED_UNASSIGNED, /* M-^A */ 200 1.11 lukem /* 130 */ ED_UNASSIGNED, /* M-^B */ 201 1.11 lukem /* 131 */ ED_UNASSIGNED, /* M-^C */ 202 1.11 lukem /* 132 */ ED_UNASSIGNED, /* M-^D */ 203 1.11 lukem /* 133 */ ED_UNASSIGNED, /* M-^E */ 204 1.11 lukem /* 134 */ ED_UNASSIGNED, /* M-^F */ 205 1.11 lukem /* 135 */ ED_UNASSIGNED, /* M-^G */ 206 1.11 lukem /* 136 */ ED_DELETE_PREV_WORD, /* M-^H */ 207 1.11 lukem /* 137 */ ED_UNASSIGNED, /* M-^I */ 208 1.11 lukem /* 138 */ ED_UNASSIGNED, /* M-^J */ 209 1.11 lukem /* 139 */ ED_UNASSIGNED, /* M-^K */ 210 1.11 lukem /* 140 */ ED_CLEAR_SCREEN, /* M-^L */ 211 1.11 lukem /* 141 */ ED_UNASSIGNED, /* M-^M */ 212 1.11 lukem /* 142 */ ED_UNASSIGNED, /* M-^N */ 213 1.11 lukem /* 143 */ ED_UNASSIGNED, /* M-^O */ 214 1.11 lukem /* 144 */ ED_UNASSIGNED, /* M-^P */ 215 1.11 lukem /* 145 */ ED_UNASSIGNED, /* M-^Q */ 216 1.11 lukem /* 146 */ ED_UNASSIGNED, /* M-^R */ 217 1.11 lukem /* 147 */ ED_UNASSIGNED, /* M-^S */ 218 1.11 lukem /* 148 */ ED_UNASSIGNED, /* M-^T */ 219 1.11 lukem /* 149 */ ED_UNASSIGNED, /* M-^U */ 220 1.11 lukem /* 150 */ ED_UNASSIGNED, /* M-^V */ 221 1.11 lukem /* 151 */ ED_UNASSIGNED, /* M-^W */ 222 1.11 lukem /* 152 */ ED_UNASSIGNED, /* M-^X */ 223 1.11 lukem /* 153 */ ED_UNASSIGNED, /* M-^Y */ 224 1.11 lukem /* 154 */ ED_UNASSIGNED, /* M-^Z */ 225 1.11 lukem /* 155 */ ED_UNASSIGNED, /* M-^[ */ 226 1.11 lukem /* 156 */ ED_UNASSIGNED, /* M-^\ */ 227 1.11 lukem /* 157 */ ED_UNASSIGNED, /* M-^] */ 228 1.11 lukem /* 158 */ ED_UNASSIGNED, /* M-^^ */ 229 1.11 lukem /* 159 */ EM_COPY_PREV_WORD, /* M-^_ */ 230 1.11 lukem /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 231 1.11 lukem /* 161 */ ED_UNASSIGNED, /* M-! */ 232 1.11 lukem /* 162 */ ED_UNASSIGNED, /* M-" */ 233 1.11 lukem /* 163 */ ED_UNASSIGNED, /* M-# */ 234 1.11 lukem /* 164 */ ED_UNASSIGNED, /* M-$ */ 235 1.11 lukem /* 165 */ ED_UNASSIGNED, /* M-% */ 236 1.11 lukem /* 166 */ ED_UNASSIGNED, /* M-& */ 237 1.11 lukem /* 167 */ ED_UNASSIGNED, /* M-' */ 238 1.11 lukem /* 168 */ ED_UNASSIGNED, /* M-( */ 239 1.11 lukem /* 169 */ ED_UNASSIGNED, /* M-) */ 240 1.11 lukem /* 170 */ ED_UNASSIGNED, /* M-* */ 241 1.11 lukem /* 171 */ ED_UNASSIGNED, /* M-+ */ 242 1.11 lukem /* 172 */ ED_UNASSIGNED, /* M-, */ 243 1.11 lukem /* 173 */ ED_UNASSIGNED, /* M-- */ 244 1.11 lukem /* 174 */ ED_UNASSIGNED, /* M-. */ 245 1.11 lukem /* 175 */ ED_UNASSIGNED, /* M-/ */ 246 1.11 lukem /* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */ 247 1.11 lukem /* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */ 248 1.11 lukem /* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */ 249 1.11 lukem /* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */ 250 1.11 lukem /* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */ 251 1.11 lukem /* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */ 252 1.11 lukem /* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */ 253 1.11 lukem /* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */ 254 1.11 lukem /* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */ 255 1.11 lukem /* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */ 256 1.11 lukem /* 186 */ ED_UNASSIGNED, /* M-: */ 257 1.11 lukem /* 187 */ ED_UNASSIGNED, /* M-; */ 258 1.11 lukem /* 188 */ ED_UNASSIGNED, /* M-< */ 259 1.11 lukem /* 189 */ ED_UNASSIGNED, /* M-= */ 260 1.11 lukem /* 190 */ ED_UNASSIGNED, /* M-> */ 261 1.11 lukem /* 191 */ ED_UNASSIGNED, /* M-? */ 262 1.11 lukem /* 192 */ ED_UNASSIGNED, /* M-@ */ 263 1.11 lukem /* 193 */ ED_UNASSIGNED, /* M-A */ 264 1.11 lukem /* 194 */ ED_PREV_WORD, /* M-B */ 265 1.11 lukem /* 195 */ EM_CAPITOL_CASE, /* M-C */ 266 1.11 lukem /* 196 */ EM_DELETE_NEXT_WORD, /* M-D */ 267 1.11 lukem /* 197 */ ED_UNASSIGNED, /* M-E */ 268 1.11 lukem /* 198 */ EM_NEXT_WORD, /* M-F */ 269 1.11 lukem /* 199 */ ED_UNASSIGNED, /* M-G */ 270 1.11 lukem /* 200 */ ED_UNASSIGNED, /* M-H */ 271 1.11 lukem /* 201 */ ED_UNASSIGNED, /* M-I */ 272 1.11 lukem /* 202 */ ED_UNASSIGNED, /* M-J */ 273 1.11 lukem /* 203 */ ED_UNASSIGNED, /* M-K */ 274 1.11 lukem /* 204 */ EM_LOWER_CASE, /* M-L */ 275 1.11 lukem /* 205 */ ED_UNASSIGNED, /* M-M */ 276 1.11 lukem /* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */ 277 1.11 lukem /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 278 1.11 lukem /* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */ 279 1.11 lukem /* 209 */ ED_UNASSIGNED, /* M-Q */ 280 1.11 lukem /* 210 */ ED_UNASSIGNED, /* M-R */ 281 1.11 lukem /* 211 */ ED_UNASSIGNED, /* M-S */ 282 1.11 lukem /* 212 */ ED_UNASSIGNED, /* M-T */ 283 1.11 lukem /* 213 */ EM_UPPER_CASE, /* M-U */ 284 1.11 lukem /* 214 */ ED_UNASSIGNED, /* M-V */ 285 1.11 lukem /* 215 */ EM_COPY_REGION, /* M-W */ 286 1.11 lukem /* 216 */ ED_COMMAND, /* M-X */ 287 1.11 lukem /* 217 */ ED_UNASSIGNED, /* M-Y */ 288 1.11 lukem /* 218 */ ED_UNASSIGNED, /* M-Z */ 289 1.11 lukem /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 290 1.11 lukem /* 220 */ ED_UNASSIGNED, /* M-\ */ 291 1.11 lukem /* 221 */ ED_UNASSIGNED, /* M-] */ 292 1.11 lukem /* 222 */ ED_UNASSIGNED, /* M-^ */ 293 1.11 lukem /* 223 */ ED_UNASSIGNED, /* M-_ */ 294 1.11 lukem /* 223 */ ED_UNASSIGNED, /* M-` */ 295 1.11 lukem /* 224 */ ED_UNASSIGNED, /* M-a */ 296 1.11 lukem /* 225 */ ED_PREV_WORD, /* M-b */ 297 1.11 lukem /* 226 */ EM_CAPITOL_CASE, /* M-c */ 298 1.11 lukem /* 227 */ EM_DELETE_NEXT_WORD, /* M-d */ 299 1.11 lukem /* 228 */ ED_UNASSIGNED, /* M-e */ 300 1.11 lukem /* 229 */ EM_NEXT_WORD, /* M-f */ 301 1.11 lukem /* 230 */ ED_UNASSIGNED, /* M-g */ 302 1.11 lukem /* 231 */ ED_UNASSIGNED, /* M-h */ 303 1.11 lukem /* 232 */ ED_UNASSIGNED, /* M-i */ 304 1.11 lukem /* 233 */ ED_UNASSIGNED, /* M-j */ 305 1.11 lukem /* 234 */ ED_UNASSIGNED, /* M-k */ 306 1.11 lukem /* 235 */ EM_LOWER_CASE, /* M-l */ 307 1.11 lukem /* 236 */ ED_UNASSIGNED, /* M-m */ 308 1.11 lukem /* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */ 309 1.11 lukem /* 238 */ ED_UNASSIGNED, /* M-o */ 310 1.11 lukem /* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */ 311 1.11 lukem /* 240 */ ED_UNASSIGNED, /* M-q */ 312 1.11 lukem /* 241 */ ED_UNASSIGNED, /* M-r */ 313 1.11 lukem /* 242 */ ED_UNASSIGNED, /* M-s */ 314 1.11 lukem /* 243 */ ED_UNASSIGNED, /* M-t */ 315 1.11 lukem /* 244 */ EM_UPPER_CASE, /* M-u */ 316 1.11 lukem /* 245 */ ED_UNASSIGNED, /* M-v */ 317 1.11 lukem /* 246 */ EM_COPY_REGION, /* M-w */ 318 1.11 lukem /* 247 */ ED_COMMAND, /* M-x */ 319 1.11 lukem /* 248 */ ED_UNASSIGNED, /* M-y */ 320 1.11 lukem /* 249 */ ED_UNASSIGNED, /* M-z */ 321 1.11 lukem /* 250 */ ED_UNASSIGNED, /* M-{ */ 322 1.11 lukem /* 251 */ ED_UNASSIGNED, /* M-| */ 323 1.11 lukem /* 252 */ ED_UNASSIGNED, /* M-} */ 324 1.11 lukem /* 253 */ ED_UNASSIGNED, /* M-~ */ 325 1.11 lukem /* 254 */ ED_DELETE_PREV_WORD /* M-^? */ 326 1.11 lukem /* 255 */ 327 1.1 cgd }; 328 1.1 cgd 329 1.11 lukem 330 1.1 cgd /* 331 1.1 cgd * keymap table for vi. Each index into above tbl; should be 332 1.1 cgd * N_KEYS entries long. Vi mode uses a sticky-extend to do command mode: 333 1.1 cgd * insert mode characters are in the normal keymap, and command mode 334 1.1 cgd * in the extended keymap. 335 1.1 cgd */ 336 1.47 christos static const el_action_t el_map_vi_insert[] = { 337 1.1 cgd #ifdef KSHVI 338 1.11 lukem /* 0 */ ED_UNASSIGNED, /* ^@ */ 339 1.11 lukem /* 1 */ ED_INSERT, /* ^A */ 340 1.11 lukem /* 2 */ ED_INSERT, /* ^B */ 341 1.11 lukem /* 3 */ ED_INSERT, /* ^C */ 342 1.11 lukem /* 4 */ VI_LIST_OR_EOF, /* ^D */ 343 1.11 lukem /* 5 */ ED_INSERT, /* ^E */ 344 1.11 lukem /* 6 */ ED_INSERT, /* ^F */ 345 1.11 lukem /* 7 */ ED_INSERT, /* ^G */ 346 1.11 lukem /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 347 1.11 lukem /* 9 */ ED_INSERT, /* ^I */ /* Tab Key */ 348 1.11 lukem /* 10 */ ED_NEWLINE, /* ^J */ 349 1.11 lukem /* 11 */ ED_INSERT, /* ^K */ 350 1.11 lukem /* 12 */ ED_INSERT, /* ^L */ 351 1.11 lukem /* 13 */ ED_NEWLINE, /* ^M */ 352 1.11 lukem /* 14 */ ED_INSERT, /* ^N */ 353 1.11 lukem /* 15 */ ED_INSERT, /* ^O */ 354 1.11 lukem /* 16 */ ED_INSERT, /* ^P */ 355 1.49 christos /* 17 */ ED_IGNORE, /* ^Q */ 356 1.11 lukem /* 18 */ ED_INSERT, /* ^R */ 357 1.49 christos /* 19 */ ED_IGNORE, /* ^S */ 358 1.11 lukem /* 20 */ ED_INSERT, /* ^T */ 359 1.11 lukem /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 360 1.11 lukem /* 22 */ ED_QUOTED_INSERT, /* ^V */ 361 1.11 lukem /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 362 1.11 lukem /* ED_DELETE_PREV_WORD: Only until strt edit pos */ 363 1.11 lukem /* 24 */ ED_INSERT, /* ^X */ 364 1.11 lukem /* 25 */ ED_INSERT, /* ^Y */ 365 1.11 lukem /* 26 */ ED_INSERT, /* ^Z */ 366 1.11 lukem /* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */ 367 1.49 christos /* 28 */ ED_IGNORE, /* ^\ */ 368 1.11 lukem /* 29 */ ED_INSERT, /* ^] */ 369 1.11 lukem /* 30 */ ED_INSERT, /* ^^ */ 370 1.11 lukem /* 31 */ ED_INSERT, /* ^_ */ 371 1.1 cgd #else /* !KSHVI */ 372 1.11 lukem /* 373 1.11 lukem * NOTE: These mappings do NOT Correspond well 374 1.11 lukem * to the KSH VI editing assignments. 375 1.11 lukem * On the other and they are convenient and 376 1.11 lukem * many people have have gotten used to them. 377 1.11 lukem */ 378 1.11 lukem /* 0 */ ED_UNASSIGNED, /* ^@ */ 379 1.11 lukem /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 380 1.11 lukem /* 2 */ ED_PREV_CHAR, /* ^B */ 381 1.49 christos /* 3 */ ED_IGNORE, /* ^C */ 382 1.11 lukem /* 4 */ VI_LIST_OR_EOF, /* ^D */ 383 1.11 lukem /* 5 */ ED_MOVE_TO_END, /* ^E */ 384 1.11 lukem /* 6 */ ED_NEXT_CHAR, /* ^F */ 385 1.11 lukem /* 7 */ ED_UNASSIGNED, /* ^G */ 386 1.16 christos /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 387 1.11 lukem /* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */ 388 1.11 lukem /* 10 */ ED_NEWLINE, /* ^J */ 389 1.11 lukem /* 11 */ ED_KILL_LINE, /* ^K */ 390 1.11 lukem /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 391 1.11 lukem /* 13 */ ED_NEWLINE, /* ^M */ 392 1.11 lukem /* 14 */ ED_NEXT_HISTORY, /* ^N */ 393 1.49 christos /* 15 */ ED_IGNORE, /* ^O */ 394 1.11 lukem /* 16 */ ED_PREV_HISTORY, /* ^P */ 395 1.49 christos /* 17 */ ED_IGNORE, /* ^Q */ 396 1.11 lukem /* 18 */ ED_REDISPLAY, /* ^R */ 397 1.49 christos /* 19 */ ED_IGNORE, /* ^S */ 398 1.11 lukem /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 399 1.11 lukem /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 400 1.11 lukem /* 22 */ ED_QUOTED_INSERT, /* ^V */ 401 1.11 lukem /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 402 1.11 lukem /* 24 */ ED_UNASSIGNED, /* ^X */ 403 1.49 christos /* 25 */ ED_IGNORE, /* ^Y */ 404 1.49 christos /* 26 */ ED_IGNORE, /* ^Z */ 405 1.11 lukem /* 27 */ VI_COMMAND_MODE, /* ^[ */ 406 1.49 christos /* 28 */ ED_IGNORE, /* ^\ */ 407 1.11 lukem /* 29 */ ED_UNASSIGNED, /* ^] */ 408 1.11 lukem /* 30 */ ED_UNASSIGNED, /* ^^ */ 409 1.11 lukem /* 31 */ ED_UNASSIGNED, /* ^_ */ 410 1.1 cgd #endif /* KSHVI */ 411 1.11 lukem /* 32 */ ED_INSERT, /* SPACE */ 412 1.11 lukem /* 33 */ ED_INSERT, /* ! */ 413 1.11 lukem /* 34 */ ED_INSERT, /* " */ 414 1.11 lukem /* 35 */ ED_INSERT, /* # */ 415 1.11 lukem /* 36 */ ED_INSERT, /* $ */ 416 1.11 lukem /* 37 */ ED_INSERT, /* % */ 417 1.11 lukem /* 38 */ ED_INSERT, /* & */ 418 1.11 lukem /* 39 */ ED_INSERT, /* ' */ 419 1.11 lukem /* 40 */ ED_INSERT, /* ( */ 420 1.11 lukem /* 41 */ ED_INSERT, /* ) */ 421 1.11 lukem /* 42 */ ED_INSERT, /* * */ 422 1.11 lukem /* 43 */ ED_INSERT, /* + */ 423 1.11 lukem /* 44 */ ED_INSERT, /* , */ 424 1.11 lukem /* 45 */ ED_INSERT, /* - */ 425 1.11 lukem /* 46 */ ED_INSERT, /* . */ 426 1.11 lukem /* 47 */ ED_INSERT, /* / */ 427 1.11 lukem /* 48 */ ED_INSERT, /* 0 */ 428 1.11 lukem /* 49 */ ED_INSERT, /* 1 */ 429 1.11 lukem /* 50 */ ED_INSERT, /* 2 */ 430 1.11 lukem /* 51 */ ED_INSERT, /* 3 */ 431 1.11 lukem /* 52 */ ED_INSERT, /* 4 */ 432 1.11 lukem /* 53 */ ED_INSERT, /* 5 */ 433 1.11 lukem /* 54 */ ED_INSERT, /* 6 */ 434 1.11 lukem /* 55 */ ED_INSERT, /* 7 */ 435 1.11 lukem /* 56 */ ED_INSERT, /* 8 */ 436 1.11 lukem /* 57 */ ED_INSERT, /* 9 */ 437 1.11 lukem /* 58 */ ED_INSERT, /* : */ 438 1.11 lukem /* 59 */ ED_INSERT, /* ; */ 439 1.11 lukem /* 60 */ ED_INSERT, /* < */ 440 1.11 lukem /* 61 */ ED_INSERT, /* = */ 441 1.11 lukem /* 62 */ ED_INSERT, /* > */ 442 1.11 lukem /* 63 */ ED_INSERT, /* ? */ 443 1.11 lukem /* 64 */ ED_INSERT, /* @ */ 444 1.11 lukem /* 65 */ ED_INSERT, /* A */ 445 1.11 lukem /* 66 */ ED_INSERT, /* B */ 446 1.11 lukem /* 67 */ ED_INSERT, /* C */ 447 1.11 lukem /* 68 */ ED_INSERT, /* D */ 448 1.11 lukem /* 69 */ ED_INSERT, /* E */ 449 1.11 lukem /* 70 */ ED_INSERT, /* F */ 450 1.11 lukem /* 71 */ ED_INSERT, /* G */ 451 1.11 lukem /* 72 */ ED_INSERT, /* H */ 452 1.11 lukem /* 73 */ ED_INSERT, /* I */ 453 1.11 lukem /* 74 */ ED_INSERT, /* J */ 454 1.11 lukem /* 75 */ ED_INSERT, /* K */ 455 1.11 lukem /* 76 */ ED_INSERT, /* L */ 456 1.11 lukem /* 77 */ ED_INSERT, /* M */ 457 1.11 lukem /* 78 */ ED_INSERT, /* N */ 458 1.11 lukem /* 79 */ ED_INSERT, /* O */ 459 1.11 lukem /* 80 */ ED_INSERT, /* P */ 460 1.11 lukem /* 81 */ ED_INSERT, /* Q */ 461 1.11 lukem /* 82 */ ED_INSERT, /* R */ 462 1.11 lukem /* 83 */ ED_INSERT, /* S */ 463 1.11 lukem /* 84 */ ED_INSERT, /* T */ 464 1.11 lukem /* 85 */ ED_INSERT, /* U */ 465 1.11 lukem /* 86 */ ED_INSERT, /* V */ 466 1.11 lukem /* 87 */ ED_INSERT, /* W */ 467 1.11 lukem /* 88 */ ED_INSERT, /* X */ 468 1.11 lukem /* 89 */ ED_INSERT, /* Y */ 469 1.11 lukem /* 90 */ ED_INSERT, /* Z */ 470 1.11 lukem /* 91 */ ED_INSERT, /* [ */ 471 1.11 lukem /* 92 */ ED_INSERT, /* \ */ 472 1.11 lukem /* 93 */ ED_INSERT, /* ] */ 473 1.11 lukem /* 94 */ ED_INSERT, /* ^ */ 474 1.11 lukem /* 95 */ ED_INSERT, /* _ */ 475 1.11 lukem /* 96 */ ED_INSERT, /* ` */ 476 1.11 lukem /* 97 */ ED_INSERT, /* a */ 477 1.11 lukem /* 98 */ ED_INSERT, /* b */ 478 1.11 lukem /* 99 */ ED_INSERT, /* c */ 479 1.11 lukem /* 100 */ ED_INSERT, /* d */ 480 1.11 lukem /* 101 */ ED_INSERT, /* e */ 481 1.11 lukem /* 102 */ ED_INSERT, /* f */ 482 1.11 lukem /* 103 */ ED_INSERT, /* g */ 483 1.11 lukem /* 104 */ ED_INSERT, /* h */ 484 1.11 lukem /* 105 */ ED_INSERT, /* i */ 485 1.11 lukem /* 106 */ ED_INSERT, /* j */ 486 1.11 lukem /* 107 */ ED_INSERT, /* k */ 487 1.11 lukem /* 108 */ ED_INSERT, /* l */ 488 1.11 lukem /* 109 */ ED_INSERT, /* m */ 489 1.11 lukem /* 110 */ ED_INSERT, /* n */ 490 1.11 lukem /* 111 */ ED_INSERT, /* o */ 491 1.11 lukem /* 112 */ ED_INSERT, /* p */ 492 1.11 lukem /* 113 */ ED_INSERT, /* q */ 493 1.11 lukem /* 114 */ ED_INSERT, /* r */ 494 1.11 lukem /* 115 */ ED_INSERT, /* s */ 495 1.11 lukem /* 116 */ ED_INSERT, /* t */ 496 1.11 lukem /* 117 */ ED_INSERT, /* u */ 497 1.11 lukem /* 118 */ ED_INSERT, /* v */ 498 1.11 lukem /* 119 */ ED_INSERT, /* w */ 499 1.11 lukem /* 120 */ ED_INSERT, /* x */ 500 1.11 lukem /* 121 */ ED_INSERT, /* y */ 501 1.11 lukem /* 122 */ ED_INSERT, /* z */ 502 1.11 lukem /* 123 */ ED_INSERT, /* { */ 503 1.11 lukem /* 124 */ ED_INSERT, /* | */ 504 1.11 lukem /* 125 */ ED_INSERT, /* } */ 505 1.11 lukem /* 126 */ ED_INSERT, /* ~ */ 506 1.16 christos /* 127 */ VI_DELETE_PREV_CHAR, /* ^? */ 507 1.18 christos /* 128 */ ED_INSERT, /* M-^@ */ 508 1.18 christos /* 129 */ ED_INSERT, /* M-^A */ 509 1.18 christos /* 130 */ ED_INSERT, /* M-^B */ 510 1.18 christos /* 131 */ ED_INSERT, /* M-^C */ 511 1.18 christos /* 132 */ ED_INSERT, /* M-^D */ 512 1.18 christos /* 133 */ ED_INSERT, /* M-^E */ 513 1.18 christos /* 134 */ ED_INSERT, /* M-^F */ 514 1.18 christos /* 135 */ ED_INSERT, /* M-^G */ 515 1.18 christos /* 136 */ ED_INSERT, /* M-^H */ 516 1.18 christos /* 137 */ ED_INSERT, /* M-^I */ 517 1.18 christos /* 138 */ ED_INSERT, /* M-^J */ 518 1.18 christos /* 139 */ ED_INSERT, /* M-^K */ 519 1.18 christos /* 140 */ ED_INSERT, /* M-^L */ 520 1.18 christos /* 141 */ ED_INSERT, /* M-^M */ 521 1.18 christos /* 142 */ ED_INSERT, /* M-^N */ 522 1.18 christos /* 143 */ ED_INSERT, /* M-^O */ 523 1.18 christos /* 144 */ ED_INSERT, /* M-^P */ 524 1.18 christos /* 145 */ ED_INSERT, /* M-^Q */ 525 1.18 christos /* 146 */ ED_INSERT, /* M-^R */ 526 1.18 christos /* 147 */ ED_INSERT, /* M-^S */ 527 1.18 christos /* 148 */ ED_INSERT, /* M-^T */ 528 1.18 christos /* 149 */ ED_INSERT, /* M-^U */ 529 1.18 christos /* 150 */ ED_INSERT, /* M-^V */ 530 1.18 christos /* 151 */ ED_INSERT, /* M-^W */ 531 1.18 christos /* 152 */ ED_INSERT, /* M-^X */ 532 1.18 christos /* 153 */ ED_INSERT, /* M-^Y */ 533 1.18 christos /* 154 */ ED_INSERT, /* M-^Z */ 534 1.18 christos /* 155 */ ED_INSERT, /* M-^[ */ 535 1.18 christos /* 156 */ ED_INSERT, /* M-^\ */ 536 1.18 christos /* 157 */ ED_INSERT, /* M-^] */ 537 1.18 christos /* 158 */ ED_INSERT, /* M-^^ */ 538 1.18 christos /* 159 */ ED_INSERT, /* M-^_ */ 539 1.18 christos /* 160 */ ED_INSERT, /* M-SPACE */ 540 1.18 christos /* 161 */ ED_INSERT, /* M-! */ 541 1.18 christos /* 162 */ ED_INSERT, /* M-" */ 542 1.18 christos /* 163 */ ED_INSERT, /* M-# */ 543 1.18 christos /* 164 */ ED_INSERT, /* M-$ */ 544 1.18 christos /* 165 */ ED_INSERT, /* M-% */ 545 1.18 christos /* 166 */ ED_INSERT, /* M-& */ 546 1.18 christos /* 167 */ ED_INSERT, /* M-' */ 547 1.18 christos /* 168 */ ED_INSERT, /* M-( */ 548 1.18 christos /* 169 */ ED_INSERT, /* M-) */ 549 1.18 christos /* 170 */ ED_INSERT, /* M-* */ 550 1.18 christos /* 171 */ ED_INSERT, /* M-+ */ 551 1.18 christos /* 172 */ ED_INSERT, /* M-, */ 552 1.18 christos /* 173 */ ED_INSERT, /* M-- */ 553 1.18 christos /* 174 */ ED_INSERT, /* M-. */ 554 1.18 christos /* 175 */ ED_INSERT, /* M-/ */ 555 1.18 christos /* 176 */ ED_INSERT, /* M-0 */ 556 1.18 christos /* 177 */ ED_INSERT, /* M-1 */ 557 1.18 christos /* 178 */ ED_INSERT, /* M-2 */ 558 1.18 christos /* 179 */ ED_INSERT, /* M-3 */ 559 1.18 christos /* 180 */ ED_INSERT, /* M-4 */ 560 1.18 christos /* 181 */ ED_INSERT, /* M-5 */ 561 1.18 christos /* 182 */ ED_INSERT, /* M-6 */ 562 1.18 christos /* 183 */ ED_INSERT, /* M-7 */ 563 1.18 christos /* 184 */ ED_INSERT, /* M-8 */ 564 1.18 christos /* 185 */ ED_INSERT, /* M-9 */ 565 1.18 christos /* 186 */ ED_INSERT, /* M-: */ 566 1.18 christos /* 187 */ ED_INSERT, /* M-; */ 567 1.18 christos /* 188 */ ED_INSERT, /* M-< */ 568 1.18 christos /* 189 */ ED_INSERT, /* M-= */ 569 1.18 christos /* 190 */ ED_INSERT, /* M-> */ 570 1.18 christos /* 191 */ ED_INSERT, /* M-? */ 571 1.18 christos /* 192 */ ED_INSERT, /* M-@ */ 572 1.18 christos /* 193 */ ED_INSERT, /* M-A */ 573 1.18 christos /* 194 */ ED_INSERT, /* M-B */ 574 1.18 christos /* 195 */ ED_INSERT, /* M-C */ 575 1.18 christos /* 196 */ ED_INSERT, /* M-D */ 576 1.18 christos /* 197 */ ED_INSERT, /* M-E */ 577 1.18 christos /* 198 */ ED_INSERT, /* M-F */ 578 1.18 christos /* 199 */ ED_INSERT, /* M-G */ 579 1.18 christos /* 200 */ ED_INSERT, /* M-H */ 580 1.18 christos /* 201 */ ED_INSERT, /* M-I */ 581 1.18 christos /* 202 */ ED_INSERT, /* M-J */ 582 1.18 christos /* 203 */ ED_INSERT, /* M-K */ 583 1.18 christos /* 204 */ ED_INSERT, /* M-L */ 584 1.18 christos /* 205 */ ED_INSERT, /* M-M */ 585 1.18 christos /* 206 */ ED_INSERT, /* M-N */ 586 1.18 christos /* 207 */ ED_INSERT, /* M-O */ 587 1.18 christos /* 208 */ ED_INSERT, /* M-P */ 588 1.18 christos /* 209 */ ED_INSERT, /* M-Q */ 589 1.18 christos /* 210 */ ED_INSERT, /* M-R */ 590 1.18 christos /* 211 */ ED_INSERT, /* M-S */ 591 1.18 christos /* 212 */ ED_INSERT, /* M-T */ 592 1.18 christos /* 213 */ ED_INSERT, /* M-U */ 593 1.18 christos /* 214 */ ED_INSERT, /* M-V */ 594 1.18 christos /* 215 */ ED_INSERT, /* M-W */ 595 1.18 christos /* 216 */ ED_INSERT, /* M-X */ 596 1.18 christos /* 217 */ ED_INSERT, /* M-Y */ 597 1.18 christos /* 218 */ ED_INSERT, /* M-Z */ 598 1.18 christos /* 219 */ ED_INSERT, /* M-[ */ 599 1.18 christos /* 220 */ ED_INSERT, /* M-\ */ 600 1.18 christos /* 221 */ ED_INSERT, /* M-] */ 601 1.18 christos /* 222 */ ED_INSERT, /* M-^ */ 602 1.18 christos /* 223 */ ED_INSERT, /* M-_ */ 603 1.18 christos /* 224 */ ED_INSERT, /* M-` */ 604 1.18 christos /* 225 */ ED_INSERT, /* M-a */ 605 1.18 christos /* 226 */ ED_INSERT, /* M-b */ 606 1.18 christos /* 227 */ ED_INSERT, /* M-c */ 607 1.18 christos /* 228 */ ED_INSERT, /* M-d */ 608 1.18 christos /* 229 */ ED_INSERT, /* M-e */ 609 1.18 christos /* 230 */ ED_INSERT, /* M-f */ 610 1.18 christos /* 231 */ ED_INSERT, /* M-g */ 611 1.18 christos /* 232 */ ED_INSERT, /* M-h */ 612 1.18 christos /* 233 */ ED_INSERT, /* M-i */ 613 1.18 christos /* 234 */ ED_INSERT, /* M-j */ 614 1.18 christos /* 235 */ ED_INSERT, /* M-k */ 615 1.18 christos /* 236 */ ED_INSERT, /* M-l */ 616 1.18 christos /* 237 */ ED_INSERT, /* M-m */ 617 1.18 christos /* 238 */ ED_INSERT, /* M-n */ 618 1.18 christos /* 239 */ ED_INSERT, /* M-o */ 619 1.18 christos /* 240 */ ED_INSERT, /* M-p */ 620 1.18 christos /* 241 */ ED_INSERT, /* M-q */ 621 1.18 christos /* 242 */ ED_INSERT, /* M-r */ 622 1.18 christos /* 243 */ ED_INSERT, /* M-s */ 623 1.18 christos /* 244 */ ED_INSERT, /* M-t */ 624 1.18 christos /* 245 */ ED_INSERT, /* M-u */ 625 1.18 christos /* 246 */ ED_INSERT, /* M-v */ 626 1.18 christos /* 247 */ ED_INSERT, /* M-w */ 627 1.18 christos /* 248 */ ED_INSERT, /* M-x */ 628 1.18 christos /* 249 */ ED_INSERT, /* M-y */ 629 1.18 christos /* 250 */ ED_INSERT, /* M-z */ 630 1.18 christos /* 251 */ ED_INSERT, /* M-{ */ 631 1.18 christos /* 252 */ ED_INSERT, /* M-| */ 632 1.18 christos /* 253 */ ED_INSERT, /* M-} */ 633 1.18 christos /* 254 */ ED_INSERT, /* M-~ */ 634 1.18 christos /* 255 */ ED_INSERT /* M-^? */ 635 1.1 cgd }; 636 1.1 cgd 637 1.47 christos static const el_action_t el_map_vi_command[] = { 638 1.11 lukem /* 0 */ ED_UNASSIGNED, /* ^@ */ 639 1.11 lukem /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 640 1.11 lukem /* 2 */ ED_UNASSIGNED, /* ^B */ 641 1.49 christos /* 3 */ ED_IGNORE, /* ^C */ 642 1.11 lukem /* 4 */ ED_UNASSIGNED, /* ^D */ 643 1.11 lukem /* 5 */ ED_MOVE_TO_END, /* ^E */ 644 1.11 lukem /* 6 */ ED_UNASSIGNED, /* ^F */ 645 1.11 lukem /* 7 */ ED_UNASSIGNED, /* ^G */ 646 1.16 christos /* 8 */ ED_DELETE_PREV_CHAR, /* ^H */ 647 1.11 lukem /* 9 */ ED_UNASSIGNED, /* ^I */ 648 1.11 lukem /* 10 */ ED_NEWLINE, /* ^J */ 649 1.11 lukem /* 11 */ ED_KILL_LINE, /* ^K */ 650 1.11 lukem /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 651 1.11 lukem /* 13 */ ED_NEWLINE, /* ^M */ 652 1.11 lukem /* 14 */ ED_NEXT_HISTORY, /* ^N */ 653 1.49 christos /* 15 */ ED_IGNORE, /* ^O */ 654 1.11 lukem /* 16 */ ED_PREV_HISTORY, /* ^P */ 655 1.49 christos /* 17 */ ED_IGNORE, /* ^Q */ 656 1.11 lukem /* 18 */ ED_REDISPLAY, /* ^R */ 657 1.49 christos /* 19 */ ED_IGNORE, /* ^S */ 658 1.11 lukem /* 20 */ ED_UNASSIGNED, /* ^T */ 659 1.11 lukem /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 660 1.11 lukem /* 22 */ ED_UNASSIGNED, /* ^V */ 661 1.11 lukem /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 662 1.11 lukem /* 24 */ ED_UNASSIGNED, /* ^X */ 663 1.11 lukem /* 25 */ ED_UNASSIGNED, /* ^Y */ 664 1.11 lukem /* 26 */ ED_UNASSIGNED, /* ^Z */ 665 1.11 lukem /* 27 */ EM_META_NEXT, /* ^[ */ 666 1.49 christos /* 28 */ ED_IGNORE, /* ^\ */ 667 1.11 lukem /* 29 */ ED_UNASSIGNED, /* ^] */ 668 1.11 lukem /* 30 */ ED_UNASSIGNED, /* ^^ */ 669 1.11 lukem /* 31 */ ED_UNASSIGNED, /* ^_ */ 670 1.11 lukem /* 32 */ ED_NEXT_CHAR, /* SPACE */ 671 1.11 lukem /* 33 */ ED_UNASSIGNED, /* ! */ 672 1.11 lukem /* 34 */ ED_UNASSIGNED, /* " */ 673 1.18 christos /* 35 */ VI_COMMENT_OUT, /* # */ 674 1.11 lukem /* 36 */ ED_MOVE_TO_END, /* $ */ 675 1.17 christos /* 37 */ VI_MATCH, /* % */ 676 1.11 lukem /* 38 */ ED_UNASSIGNED, /* & */ 677 1.11 lukem /* 39 */ ED_UNASSIGNED, /* ' */ 678 1.11 lukem /* 40 */ ED_UNASSIGNED, /* ( */ 679 1.11 lukem /* 41 */ ED_UNASSIGNED, /* ) */ 680 1.11 lukem /* 42 */ ED_UNASSIGNED, /* * */ 681 1.11 lukem /* 43 */ ED_NEXT_HISTORY, /* + */ 682 1.11 lukem /* 44 */ VI_REPEAT_PREV_CHAR, /* , */ 683 1.11 lukem /* 45 */ ED_PREV_HISTORY, /* - */ 684 1.18 christos /* 46 */ VI_REDO, /* . */ 685 1.11 lukem /* 47 */ VI_SEARCH_PREV, /* / */ 686 1.11 lukem /* 48 */ VI_ZERO, /* 0 */ 687 1.11 lukem /* 49 */ ED_ARGUMENT_DIGIT, /* 1 */ 688 1.11 lukem /* 50 */ ED_ARGUMENT_DIGIT, /* 2 */ 689 1.11 lukem /* 51 */ ED_ARGUMENT_DIGIT, /* 3 */ 690 1.11 lukem /* 52 */ ED_ARGUMENT_DIGIT, /* 4 */ 691 1.11 lukem /* 53 */ ED_ARGUMENT_DIGIT, /* 5 */ 692 1.11 lukem /* 54 */ ED_ARGUMENT_DIGIT, /* 6 */ 693 1.11 lukem /* 55 */ ED_ARGUMENT_DIGIT, /* 7 */ 694 1.11 lukem /* 56 */ ED_ARGUMENT_DIGIT, /* 8 */ 695 1.11 lukem /* 57 */ ED_ARGUMENT_DIGIT, /* 9 */ 696 1.11 lukem /* 58 */ ED_COMMAND, /* : */ 697 1.11 lukem /* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */ 698 1.11 lukem /* 60 */ ED_UNASSIGNED, /* < */ 699 1.11 lukem /* 61 */ ED_UNASSIGNED, /* = */ 700 1.11 lukem /* 62 */ ED_UNASSIGNED, /* > */ 701 1.11 lukem /* 63 */ VI_SEARCH_NEXT, /* ? */ 702 1.18 christos /* 64 */ VI_ALIAS, /* @ */ 703 1.11 lukem /* 65 */ VI_ADD_AT_EOL, /* A */ 704 1.16 christos /* 66 */ VI_PREV_BIG_WORD, /* B */ 705 1.11 lukem /* 67 */ VI_CHANGE_TO_EOL, /* C */ 706 1.11 lukem /* 68 */ ED_KILL_LINE, /* D */ 707 1.16 christos /* 69 */ VI_END_BIG_WORD, /* E */ 708 1.11 lukem /* 70 */ VI_PREV_CHAR, /* F */ 709 1.18 christos /* 71 */ VI_TO_HISTORY_LINE, /* G */ 710 1.11 lukem /* 72 */ ED_UNASSIGNED, /* H */ 711 1.11 lukem /* 73 */ VI_INSERT_AT_BOL, /* I */ 712 1.11 lukem /* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */ 713 1.11 lukem /* 75 */ ED_SEARCH_PREV_HISTORY, /* K */ 714 1.11 lukem /* 76 */ ED_UNASSIGNED, /* L */ 715 1.11 lukem /* 77 */ ED_UNASSIGNED, /* M */ 716 1.11 lukem /* 78 */ VI_REPEAT_SEARCH_PREV, /* N */ 717 1.11 lukem /* 79 */ ED_SEQUENCE_LEAD_IN, /* O */ 718 1.11 lukem /* 80 */ VI_PASTE_PREV, /* P */ 719 1.11 lukem /* 81 */ ED_UNASSIGNED, /* Q */ 720 1.11 lukem /* 82 */ VI_REPLACE_MODE, /* R */ 721 1.11 lukem /* 83 */ VI_SUBSTITUTE_LINE, /* S */ 722 1.11 lukem /* 84 */ VI_TO_PREV_CHAR, /* T */ 723 1.18 christos /* 85 */ VI_UNDO_LINE, /* U */ 724 1.11 lukem /* 86 */ ED_UNASSIGNED, /* V */ 725 1.16 christos /* 87 */ VI_NEXT_BIG_WORD, /* W */ 726 1.11 lukem /* 88 */ ED_DELETE_PREV_CHAR, /* X */ 727 1.18 christos /* 89 */ VI_YANK_END, /* Y */ 728 1.11 lukem /* 90 */ ED_UNASSIGNED, /* Z */ 729 1.11 lukem /* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */ 730 1.11 lukem /* 92 */ ED_UNASSIGNED, /* \ */ 731 1.11 lukem /* 93 */ ED_UNASSIGNED, /* ] */ 732 1.11 lukem /* 94 */ ED_MOVE_TO_BEG, /* ^ */ 733 1.18 christos /* 95 */ VI_HISTORY_WORD, /* _ */ 734 1.11 lukem /* 96 */ ED_UNASSIGNED, /* ` */ 735 1.11 lukem /* 97 */ VI_ADD, /* a */ 736 1.11 lukem /* 98 */ VI_PREV_WORD, /* b */ 737 1.11 lukem /* 99 */ VI_CHANGE_META, /* c */ 738 1.11 lukem /* 100 */ VI_DELETE_META, /* d */ 739 1.11 lukem /* 101 */ VI_END_WORD, /* e */ 740 1.11 lukem /* 102 */ VI_NEXT_CHAR, /* f */ 741 1.11 lukem /* 103 */ ED_UNASSIGNED, /* g */ 742 1.11 lukem /* 104 */ ED_PREV_CHAR, /* h */ 743 1.11 lukem /* 105 */ VI_INSERT, /* i */ 744 1.11 lukem /* 106 */ ED_NEXT_HISTORY, /* j */ 745 1.11 lukem /* 107 */ ED_PREV_HISTORY, /* k */ 746 1.11 lukem /* 108 */ ED_NEXT_CHAR, /* l */ 747 1.11 lukem /* 109 */ ED_UNASSIGNED, /* m */ 748 1.11 lukem /* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */ 749 1.11 lukem /* 111 */ ED_UNASSIGNED, /* o */ 750 1.11 lukem /* 112 */ VI_PASTE_NEXT, /* p */ 751 1.11 lukem /* 113 */ ED_UNASSIGNED, /* q */ 752 1.11 lukem /* 114 */ VI_REPLACE_CHAR, /* r */ 753 1.11 lukem /* 115 */ VI_SUBSTITUTE_CHAR, /* s */ 754 1.11 lukem /* 116 */ VI_TO_NEXT_CHAR, /* t */ 755 1.11 lukem /* 117 */ VI_UNDO, /* u */ 756 1.18 christos /* 118 */ VI_HISTEDIT, /* v */ 757 1.11 lukem /* 119 */ VI_NEXT_WORD, /* w */ 758 1.11 lukem /* 120 */ ED_DELETE_NEXT_CHAR, /* x */ 759 1.18 christos /* 121 */ VI_YANK, /* y */ 760 1.11 lukem /* 122 */ ED_UNASSIGNED, /* z */ 761 1.11 lukem /* 123 */ ED_UNASSIGNED, /* { */ 762 1.18 christos /* 124 */ VI_TO_COLUMN, /* | */ 763 1.11 lukem /* 125 */ ED_UNASSIGNED, /* } */ 764 1.11 lukem /* 126 */ VI_CHANGE_CASE, /* ~ */ 765 1.11 lukem /* 127 */ ED_DELETE_PREV_CHAR, /* ^? */ 766 1.11 lukem /* 128 */ ED_UNASSIGNED, /* M-^@ */ 767 1.11 lukem /* 129 */ ED_UNASSIGNED, /* M-^A */ 768 1.11 lukem /* 130 */ ED_UNASSIGNED, /* M-^B */ 769 1.11 lukem /* 131 */ ED_UNASSIGNED, /* M-^C */ 770 1.11 lukem /* 132 */ ED_UNASSIGNED, /* M-^D */ 771 1.11 lukem /* 133 */ ED_UNASSIGNED, /* M-^E */ 772 1.11 lukem /* 134 */ ED_UNASSIGNED, /* M-^F */ 773 1.11 lukem /* 135 */ ED_UNASSIGNED, /* M-^G */ 774 1.11 lukem /* 136 */ ED_UNASSIGNED, /* M-^H */ 775 1.11 lukem /* 137 */ ED_UNASSIGNED, /* M-^I */ 776 1.11 lukem /* 138 */ ED_UNASSIGNED, /* M-^J */ 777 1.11 lukem /* 139 */ ED_UNASSIGNED, /* M-^K */ 778 1.11 lukem /* 140 */ ED_UNASSIGNED, /* M-^L */ 779 1.11 lukem /* 141 */ ED_UNASSIGNED, /* M-^M */ 780 1.11 lukem /* 142 */ ED_UNASSIGNED, /* M-^N */ 781 1.11 lukem /* 143 */ ED_UNASSIGNED, /* M-^O */ 782 1.11 lukem /* 144 */ ED_UNASSIGNED, /* M-^P */ 783 1.11 lukem /* 145 */ ED_UNASSIGNED, /* M-^Q */ 784 1.11 lukem /* 146 */ ED_UNASSIGNED, /* M-^R */ 785 1.11 lukem /* 147 */ ED_UNASSIGNED, /* M-^S */ 786 1.11 lukem /* 148 */ ED_UNASSIGNED, /* M-^T */ 787 1.11 lukem /* 149 */ ED_UNASSIGNED, /* M-^U */ 788 1.11 lukem /* 150 */ ED_UNASSIGNED, /* M-^V */ 789 1.11 lukem /* 151 */ ED_UNASSIGNED, /* M-^W */ 790 1.11 lukem /* 152 */ ED_UNASSIGNED, /* M-^X */ 791 1.11 lukem /* 153 */ ED_UNASSIGNED, /* M-^Y */ 792 1.11 lukem /* 154 */ ED_UNASSIGNED, /* M-^Z */ 793 1.11 lukem /* 155 */ ED_UNASSIGNED, /* M-^[ */ 794 1.11 lukem /* 156 */ ED_UNASSIGNED, /* M-^\ */ 795 1.11 lukem /* 157 */ ED_UNASSIGNED, /* M-^] */ 796 1.11 lukem /* 158 */ ED_UNASSIGNED, /* M-^^ */ 797 1.11 lukem /* 159 */ ED_UNASSIGNED, /* M-^_ */ 798 1.11 lukem /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 799 1.11 lukem /* 161 */ ED_UNASSIGNED, /* M-! */ 800 1.11 lukem /* 162 */ ED_UNASSIGNED, /* M-" */ 801 1.11 lukem /* 163 */ ED_UNASSIGNED, /* M-# */ 802 1.11 lukem /* 164 */ ED_UNASSIGNED, /* M-$ */ 803 1.11 lukem /* 165 */ ED_UNASSIGNED, /* M-% */ 804 1.11 lukem /* 166 */ ED_UNASSIGNED, /* M-& */ 805 1.11 lukem /* 167 */ ED_UNASSIGNED, /* M-' */ 806 1.11 lukem /* 168 */ ED_UNASSIGNED, /* M-( */ 807 1.11 lukem /* 169 */ ED_UNASSIGNED, /* M-) */ 808 1.11 lukem /* 170 */ ED_UNASSIGNED, /* M-* */ 809 1.11 lukem /* 171 */ ED_UNASSIGNED, /* M-+ */ 810 1.11 lukem /* 172 */ ED_UNASSIGNED, /* M-, */ 811 1.11 lukem /* 173 */ ED_UNASSIGNED, /* M-- */ 812 1.11 lukem /* 174 */ ED_UNASSIGNED, /* M-. */ 813 1.11 lukem /* 175 */ ED_UNASSIGNED, /* M-/ */ 814 1.11 lukem /* 176 */ ED_UNASSIGNED, /* M-0 */ 815 1.11 lukem /* 177 */ ED_UNASSIGNED, /* M-1 */ 816 1.11 lukem /* 178 */ ED_UNASSIGNED, /* M-2 */ 817 1.11 lukem /* 179 */ ED_UNASSIGNED, /* M-3 */ 818 1.11 lukem /* 180 */ ED_UNASSIGNED, /* M-4 */ 819 1.11 lukem /* 181 */ ED_UNASSIGNED, /* M-5 */ 820 1.11 lukem /* 182 */ ED_UNASSIGNED, /* M-6 */ 821 1.11 lukem /* 183 */ ED_UNASSIGNED, /* M-7 */ 822 1.11 lukem /* 184 */ ED_UNASSIGNED, /* M-8 */ 823 1.11 lukem /* 185 */ ED_UNASSIGNED, /* M-9 */ 824 1.11 lukem /* 186 */ ED_UNASSIGNED, /* M-: */ 825 1.11 lukem /* 187 */ ED_UNASSIGNED, /* M-; */ 826 1.11 lukem /* 188 */ ED_UNASSIGNED, /* M-< */ 827 1.11 lukem /* 189 */ ED_UNASSIGNED, /* M-= */ 828 1.11 lukem /* 190 */ ED_UNASSIGNED, /* M-> */ 829 1.11 lukem /* 191 */ ED_UNASSIGNED, /* M-? */ 830 1.11 lukem /* 192 */ ED_UNASSIGNED, /* M-@ */ 831 1.11 lukem /* 193 */ ED_UNASSIGNED, /* M-A */ 832 1.11 lukem /* 194 */ ED_UNASSIGNED, /* M-B */ 833 1.11 lukem /* 195 */ ED_UNASSIGNED, /* M-C */ 834 1.11 lukem /* 196 */ ED_UNASSIGNED, /* M-D */ 835 1.11 lukem /* 197 */ ED_UNASSIGNED, /* M-E */ 836 1.11 lukem /* 198 */ ED_UNASSIGNED, /* M-F */ 837 1.11 lukem /* 199 */ ED_UNASSIGNED, /* M-G */ 838 1.11 lukem /* 200 */ ED_UNASSIGNED, /* M-H */ 839 1.11 lukem /* 201 */ ED_UNASSIGNED, /* M-I */ 840 1.11 lukem /* 202 */ ED_UNASSIGNED, /* M-J */ 841 1.11 lukem /* 203 */ ED_UNASSIGNED, /* M-K */ 842 1.11 lukem /* 204 */ ED_UNASSIGNED, /* M-L */ 843 1.11 lukem /* 205 */ ED_UNASSIGNED, /* M-M */ 844 1.11 lukem /* 206 */ ED_UNASSIGNED, /* M-N */ 845 1.11 lukem /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 846 1.11 lukem /* 208 */ ED_UNASSIGNED, /* M-P */ 847 1.11 lukem /* 209 */ ED_UNASSIGNED, /* M-Q */ 848 1.11 lukem /* 210 */ ED_UNASSIGNED, /* M-R */ 849 1.11 lukem /* 211 */ ED_UNASSIGNED, /* M-S */ 850 1.11 lukem /* 212 */ ED_UNASSIGNED, /* M-T */ 851 1.11 lukem /* 213 */ ED_UNASSIGNED, /* M-U */ 852 1.11 lukem /* 214 */ ED_UNASSIGNED, /* M-V */ 853 1.11 lukem /* 215 */ ED_UNASSIGNED, /* M-W */ 854 1.11 lukem /* 216 */ ED_UNASSIGNED, /* M-X */ 855 1.11 lukem /* 217 */ ED_UNASSIGNED, /* M-Y */ 856 1.11 lukem /* 218 */ ED_UNASSIGNED, /* M-Z */ 857 1.11 lukem /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 858 1.11 lukem /* 220 */ ED_UNASSIGNED, /* M-\ */ 859 1.11 lukem /* 221 */ ED_UNASSIGNED, /* M-] */ 860 1.11 lukem /* 222 */ ED_UNASSIGNED, /* M-^ */ 861 1.11 lukem /* 223 */ ED_UNASSIGNED, /* M-_ */ 862 1.11 lukem /* 224 */ ED_UNASSIGNED, /* M-` */ 863 1.11 lukem /* 225 */ ED_UNASSIGNED, /* M-a */ 864 1.11 lukem /* 226 */ ED_UNASSIGNED, /* M-b */ 865 1.11 lukem /* 227 */ ED_UNASSIGNED, /* M-c */ 866 1.11 lukem /* 228 */ ED_UNASSIGNED, /* M-d */ 867 1.11 lukem /* 229 */ ED_UNASSIGNED, /* M-e */ 868 1.11 lukem /* 230 */ ED_UNASSIGNED, /* M-f */ 869 1.11 lukem /* 231 */ ED_UNASSIGNED, /* M-g */ 870 1.11 lukem /* 232 */ ED_UNASSIGNED, /* M-h */ 871 1.11 lukem /* 233 */ ED_UNASSIGNED, /* M-i */ 872 1.11 lukem /* 234 */ ED_UNASSIGNED, /* M-j */ 873 1.11 lukem /* 235 */ ED_UNASSIGNED, /* M-k */ 874 1.11 lukem /* 236 */ ED_UNASSIGNED, /* M-l */ 875 1.11 lukem /* 237 */ ED_UNASSIGNED, /* M-m */ 876 1.11 lukem /* 238 */ ED_UNASSIGNED, /* M-n */ 877 1.11 lukem /* 239 */ ED_UNASSIGNED, /* M-o */ 878 1.11 lukem /* 240 */ ED_UNASSIGNED, /* M-p */ 879 1.11 lukem /* 241 */ ED_UNASSIGNED, /* M-q */ 880 1.11 lukem /* 242 */ ED_UNASSIGNED, /* M-r */ 881 1.11 lukem /* 243 */ ED_UNASSIGNED, /* M-s */ 882 1.11 lukem /* 244 */ ED_UNASSIGNED, /* M-t */ 883 1.11 lukem /* 245 */ ED_UNASSIGNED, /* M-u */ 884 1.11 lukem /* 246 */ ED_UNASSIGNED, /* M-v */ 885 1.11 lukem /* 247 */ ED_UNASSIGNED, /* M-w */ 886 1.11 lukem /* 248 */ ED_UNASSIGNED, /* M-x */ 887 1.11 lukem /* 249 */ ED_UNASSIGNED, /* M-y */ 888 1.11 lukem /* 250 */ ED_UNASSIGNED, /* M-z */ 889 1.11 lukem /* 251 */ ED_UNASSIGNED, /* M-{ */ 890 1.11 lukem /* 252 */ ED_UNASSIGNED, /* M-| */ 891 1.11 lukem /* 253 */ ED_UNASSIGNED, /* M-} */ 892 1.11 lukem /* 254 */ ED_UNASSIGNED, /* M-~ */ 893 1.11 lukem /* 255 */ ED_UNASSIGNED /* M-^? */ 894 1.1 cgd }; 895 1.1 cgd 896 1.1 cgd 897 1.1 cgd /* map_init(): 898 1.1 cgd * Initialize and allocate the maps 899 1.1 cgd */ 900 1.51 christos libedit_private int 901 1.11 lukem map_init(EditLine *el) 902 1.1 cgd { 903 1.9 simonb 904 1.11 lukem /* 905 1.11 lukem * Make sure those are correct before starting. 906 1.11 lukem */ 907 1.1 cgd #ifdef MAP_DEBUG 908 1.11 lukem if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t)) 909 1.53 ryo EL_ABORT((el->el_errfile, "Emacs map incorrect\n")); 910 1.11 lukem if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t)) 911 1.53 ryo EL_ABORT((el->el_errfile, "Vi command map incorrect\n")); 912 1.11 lukem if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t)) 913 1.53 ryo EL_ABORT((el->el_errfile, "Vi insert map incorrect\n")); 914 1.1 cgd #endif 915 1.1 cgd 916 1.52 christos el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt)); 917 1.13 christos if (el->el_map.alt == NULL) 918 1.29 christos return -1; 919 1.52 christos el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key)); 920 1.13 christos if (el->el_map.key == NULL) 921 1.55 christos goto out; 922 1.11 lukem el->el_map.emacs = el_map_emacs; 923 1.11 lukem el->el_map.vic = el_map_vi_command; 924 1.11 lukem el->el_map.vii = el_map_vi_insert; 925 1.52 christos el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help)); 926 1.13 christos if (el->el_map.help == NULL) 927 1.55 christos goto out; 928 1.50 christos (void) memcpy(el->el_map.help, el_func_help, 929 1.28 christos sizeof(*el->el_map.help) * EL_NUM_FCNS); 930 1.52 christos el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func)); 931 1.13 christos if (el->el_map.func == NULL) 932 1.55 christos goto out; 933 1.50 christos memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func) 934 1.28 christos * EL_NUM_FCNS); 935 1.11 lukem el->el_map.nfunc = EL_NUM_FCNS; 936 1.1 cgd 937 1.1 cgd #ifdef VIDEFAULT 938 1.11 lukem map_init_vi(el); 939 1.1 cgd #else 940 1.11 lukem map_init_emacs(el); 941 1.1 cgd #endif /* VIDEFAULT */ 942 1.29 christos return 0; 943 1.55 christos out: 944 1.55 christos map_end(el); 945 1.55 christos return -1; 946 1.1 cgd } 947 1.1 cgd 948 1.1 cgd 949 1.1 cgd /* map_end(): 950 1.1 cgd * Free the space taken by the editor maps 951 1.1 cgd */ 952 1.51 christos libedit_private void 953 1.11 lukem map_end(EditLine *el) 954 1.1 cgd { 955 1.11 lukem 956 1.28 christos el_free(el->el_map.alt); 957 1.11 lukem el->el_map.alt = NULL; 958 1.28 christos el_free(el->el_map.key); 959 1.11 lukem el->el_map.key = NULL; 960 1.11 lukem el->el_map.emacs = NULL; 961 1.11 lukem el->el_map.vic = NULL; 962 1.11 lukem el->el_map.vii = NULL; 963 1.28 christos el_free(el->el_map.help); 964 1.11 lukem el->el_map.help = NULL; 965 1.28 christos el_free(el->el_map.func); 966 1.11 lukem el->el_map.func = NULL; 967 1.1 cgd } 968 1.1 cgd 969 1.1 cgd 970 1.1 cgd /* map_init_nls(): 971 1.1 cgd * Find all the printable keys and bind them to self insert 972 1.1 cgd */ 973 1.47 christos static void 974 1.11 lukem map_init_nls(EditLine *el) 975 1.1 cgd { 976 1.11 lukem int i; 977 1.1 cgd 978 1.11 lukem el_action_t *map = el->el_map.key; 979 1.11 lukem 980 1.11 lukem for (i = 0200; i <= 0377; i++) 981 1.44 christos if (iswprint(i)) 982 1.11 lukem map[i] = ED_INSERT; 983 1.1 cgd } 984 1.1 cgd 985 1.1 cgd 986 1.1 cgd /* map_init_meta(): 987 1.1 cgd * Bind all the meta keys to the appropriate ESC-<key> sequence 988 1.1 cgd */ 989 1.47 christos static void 990 1.11 lukem map_init_meta(EditLine *el) 991 1.1 cgd { 992 1.46 christos wchar_t buf[3]; 993 1.11 lukem int i; 994 1.11 lukem el_action_t *map = el->el_map.key; 995 1.11 lukem el_action_t *alt = el->el_map.alt; 996 1.11 lukem 997 1.11 lukem for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++) 998 1.11 lukem continue; 999 1.11 lukem 1000 1.1 cgd if (i > 0377) { 1001 1.11 lukem for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++) 1002 1.11 lukem continue; 1003 1.11 lukem if (i > 0377) { 1004 1.11 lukem i = 033; 1005 1.11 lukem if (el->el_map.type == MAP_VI) 1006 1.11 lukem map = alt; 1007 1.11 lukem } else 1008 1.11 lukem map = alt; 1009 1.1 cgd } 1010 1.46 christos buf[0] = (wchar_t)i; 1011 1.11 lukem buf[2] = 0; 1012 1.11 lukem for (i = 0200; i <= 0377; i++) 1013 1.11 lukem switch (map[i]) { 1014 1.11 lukem case ED_INSERT: 1015 1.11 lukem case ED_UNASSIGNED: 1016 1.11 lukem case ED_SEQUENCE_LEAD_IN: 1017 1.11 lukem break; 1018 1.11 lukem default: 1019 1.11 lukem buf[1] = i & 0177; 1020 1.27 christos keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD); 1021 1.11 lukem break; 1022 1.11 lukem } 1023 1.11 lukem map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN; 1024 1.1 cgd } 1025 1.1 cgd 1026 1.1 cgd 1027 1.1 cgd /* map_init_vi(): 1028 1.1 cgd * Initialize the vi bindings 1029 1.1 cgd */ 1030 1.51 christos libedit_private void 1031 1.11 lukem map_init_vi(EditLine *el) 1032 1.1 cgd { 1033 1.11 lukem int i; 1034 1.11 lukem el_action_t *key = el->el_map.key; 1035 1.11 lukem el_action_t *alt = el->el_map.alt; 1036 1.14 jdolecek const el_action_t *vii = el->el_map.vii; 1037 1.14 jdolecek const el_action_t *vic = el->el_map.vic; 1038 1.11 lukem 1039 1.11 lukem el->el_map.type = MAP_VI; 1040 1.11 lukem el->el_map.current = el->el_map.key; 1041 1.11 lukem 1042 1.27 christos keymacro_reset(el); 1043 1.11 lukem 1044 1.11 lukem for (i = 0; i < N_KEYS; i++) { 1045 1.11 lukem key[i] = vii[i]; 1046 1.11 lukem alt[i] = vic[i]; 1047 1.11 lukem } 1048 1.1 cgd 1049 1.11 lukem map_init_meta(el); 1050 1.11 lukem map_init_nls(el); 1051 1.1 cgd 1052 1.11 lukem tty_bind_char(el, 1); 1053 1.26 christos terminal_bind_arrow(el); 1054 1.1 cgd } 1055 1.1 cgd 1056 1.1 cgd 1057 1.1 cgd /* map_init_emacs(): 1058 1.1 cgd * Initialize the emacs bindings 1059 1.1 cgd */ 1060 1.51 christos libedit_private void 1061 1.11 lukem map_init_emacs(EditLine *el) 1062 1.1 cgd { 1063 1.11 lukem int i; 1064 1.46 christos wchar_t buf[3]; 1065 1.11 lukem el_action_t *key = el->el_map.key; 1066 1.11 lukem el_action_t *alt = el->el_map.alt; 1067 1.14 jdolecek const el_action_t *emacs = el->el_map.emacs; 1068 1.11 lukem 1069 1.11 lukem el->el_map.type = MAP_EMACS; 1070 1.11 lukem el->el_map.current = el->el_map.key; 1071 1.27 christos keymacro_reset(el); 1072 1.11 lukem 1073 1.11 lukem for (i = 0; i < N_KEYS; i++) { 1074 1.11 lukem key[i] = emacs[i]; 1075 1.11 lukem alt[i] = ED_UNASSIGNED; 1076 1.11 lukem } 1077 1.9 simonb 1078 1.11 lukem map_init_meta(el); 1079 1.11 lukem map_init_nls(el); 1080 1.11 lukem 1081 1.11 lukem buf[0] = CONTROL('X'); 1082 1.11 lukem buf[1] = CONTROL('X'); 1083 1.11 lukem buf[2] = 0; 1084 1.27 christos keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD); 1085 1.11 lukem 1086 1.11 lukem tty_bind_char(el, 1); 1087 1.26 christos terminal_bind_arrow(el); 1088 1.1 cgd } 1089 1.1 cgd 1090 1.1 cgd 1091 1.1 cgd /* map_set_editor(): 1092 1.9 simonb * Set the editor 1093 1.1 cgd */ 1094 1.51 christos libedit_private int 1095 1.46 christos map_set_editor(EditLine *el, wchar_t *editor) 1096 1.1 cgd { 1097 1.11 lukem 1098 1.45 christos if (wcscmp(editor, L"emacs") == 0) { 1099 1.11 lukem map_init_emacs(el); 1100 1.29 christos return 0; 1101 1.11 lukem } 1102 1.45 christos if (wcscmp(editor, L"vi") == 0) { 1103 1.11 lukem map_init_vi(el); 1104 1.29 christos return 0; 1105 1.11 lukem } 1106 1.29 christos return -1; 1107 1.7 lukem } 1108 1.7 lukem 1109 1.7 lukem 1110 1.7 lukem /* map_get_editor(): 1111 1.9 simonb * Retrieve the editor 1112 1.7 lukem */ 1113 1.51 christos libedit_private int 1114 1.46 christos map_get_editor(EditLine *el, const wchar_t **editor) 1115 1.7 lukem { 1116 1.7 lukem 1117 1.11 lukem if (editor == NULL) 1118 1.29 christos return -1; 1119 1.11 lukem switch (el->el_map.type) { 1120 1.11 lukem case MAP_EMACS: 1121 1.45 christos *editor = L"emacs"; 1122 1.29 christos return 0; 1123 1.11 lukem case MAP_VI: 1124 1.45 christos *editor = L"vi"; 1125 1.29 christos return 0; 1126 1.11 lukem } 1127 1.29 christos return -1; 1128 1.1 cgd } 1129 1.1 cgd 1130 1.1 cgd 1131 1.1 cgd /* map_print_key(): 1132 1.1 cgd * Print the function description for 1 key 1133 1.1 cgd */ 1134 1.47 christos static void 1135 1.46 christos map_print_key(EditLine *el, el_action_t *map, const wchar_t *in) 1136 1.1 cgd { 1137 1.11 lukem char outbuf[EL_BUFSIZ]; 1138 1.21 christos el_bindings_t *bp, *ep; 1139 1.1 cgd 1140 1.11 lukem if (in[0] == '\0' || in[1] == '\0') { 1141 1.27 christos (void) keymacro__decode_str(in, outbuf, sizeof(outbuf), ""); 1142 1.21 christos ep = &el->el_map.help[el->el_map.nfunc]; 1143 1.21 christos for (bp = el->el_map.help; bp < ep; bp++) 1144 1.11 lukem if (bp->func == map[(unsigned char) *in]) { 1145 1.11 lukem (void) fprintf(el->el_outfile, 1146 1.44 christos "%s\t->\t%ls\n", outbuf, bp->name); 1147 1.11 lukem return; 1148 1.11 lukem } 1149 1.11 lukem } else 1150 1.27 christos keymacro_print(el, in); 1151 1.1 cgd } 1152 1.1 cgd 1153 1.1 cgd 1154 1.1 cgd /* map_print_some_keys(): 1155 1.1 cgd * Print keys from first to last 1156 1.1 cgd */ 1157 1.47 christos static void 1158 1.37 christos map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last) 1159 1.1 cgd { 1160 1.22 christos el_bindings_t *bp, *ep; 1161 1.46 christos wchar_t firstbuf[2], lastbuf[2]; 1162 1.11 lukem char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ]; 1163 1.11 lukem 1164 1.46 christos firstbuf[0] = first; 1165 1.11 lukem firstbuf[1] = 0; 1166 1.46 christos lastbuf[0] = last; 1167 1.11 lukem lastbuf[1] = 0; 1168 1.11 lukem if (map[first] == ED_UNASSIGNED) { 1169 1.23 christos if (first == last) { 1170 1.43 christos (void) keymacro__decode_str(firstbuf, unparsbuf, 1171 1.23 christos sizeof(unparsbuf), STRQQ); 1172 1.11 lukem (void) fprintf(el->el_outfile, 1173 1.23 christos "%-15s-> is undefined\n", unparsbuf); 1174 1.23 christos } 1175 1.11 lukem return; 1176 1.11 lukem } 1177 1.22 christos ep = &el->el_map.help[el->el_map.nfunc]; 1178 1.22 christos for (bp = el->el_map.help; bp < ep; bp++) { 1179 1.11 lukem if (bp->func == map[first]) { 1180 1.11 lukem if (first == last) { 1181 1.43 christos (void) keymacro__decode_str(firstbuf, unparsbuf, 1182 1.23 christos sizeof(unparsbuf), STRQQ); 1183 1.44 christos (void) fprintf(el->el_outfile, "%-15s-> %ls\n", 1184 1.23 christos unparsbuf, bp->name); 1185 1.11 lukem } else { 1186 1.43 christos (void) keymacro__decode_str(firstbuf, unparsbuf, 1187 1.23 christos sizeof(unparsbuf), STRQQ); 1188 1.43 christos (void) keymacro__decode_str(lastbuf, extrabuf, 1189 1.23 christos sizeof(extrabuf), STRQQ); 1190 1.11 lukem (void) fprintf(el->el_outfile, 1191 1.44 christos "%-4s to %-7s-> %ls\n", 1192 1.23 christos unparsbuf, extrabuf, bp->name); 1193 1.11 lukem } 1194 1.11 lukem return; 1195 1.11 lukem } 1196 1.11 lukem } 1197 1.11 lukem #ifdef MAP_DEBUG 1198 1.11 lukem if (map == el->el_map.key) { 1199 1.43 christos (void) keymacro__decode_str(firstbuf, unparsbuf, 1200 1.23 christos sizeof(unparsbuf), STRQQ); 1201 1.11 lukem (void) fprintf(el->el_outfile, 1202 1.23 christos "BUG!!! %s isn't bound to anything.\n", unparsbuf); 1203 1.11 lukem (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n", 1204 1.11 lukem first, el->el_map.key[first]); 1205 1.11 lukem } else { 1206 1.43 christos (void) keymacro__decode_str(firstbuf, unparsbuf, 1207 1.23 christos sizeof(unparsbuf), STRQQ); 1208 1.11 lukem (void) fprintf(el->el_outfile, 1209 1.23 christos "BUG!!! %s isn't bound to anything.\n", unparsbuf); 1210 1.11 lukem (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n", 1211 1.11 lukem first, el->el_map.alt[first]); 1212 1.1 cgd } 1213 1.1 cgd #endif 1214 1.12 christos EL_ABORT((el->el_errfile, "Error printing keys\n")); 1215 1.1 cgd } 1216 1.1 cgd 1217 1.1 cgd 1218 1.1 cgd /* map_print_all_keys(): 1219 1.1 cgd * Print the function description for all keys. 1220 1.1 cgd */ 1221 1.47 christos static void 1222 1.11 lukem map_print_all_keys(EditLine *el) 1223 1.1 cgd { 1224 1.11 lukem int prev, i; 1225 1.1 cgd 1226 1.11 lukem (void) fprintf(el->el_outfile, "Standard key bindings\n"); 1227 1.11 lukem prev = 0; 1228 1.11 lukem for (i = 0; i < N_KEYS; i++) { 1229 1.11 lukem if (el->el_map.key[prev] == el->el_map.key[i]) 1230 1.11 lukem continue; 1231 1.11 lukem map_print_some_keys(el, el->el_map.key, prev, i - 1); 1232 1.11 lukem prev = i; 1233 1.11 lukem } 1234 1.1 cgd map_print_some_keys(el, el->el_map.key, prev, i - 1); 1235 1.11 lukem 1236 1.11 lukem (void) fprintf(el->el_outfile, "Alternative key bindings\n"); 1237 1.11 lukem prev = 0; 1238 1.11 lukem for (i = 0; i < N_KEYS; i++) { 1239 1.11 lukem if (el->el_map.alt[prev] == el->el_map.alt[i]) 1240 1.11 lukem continue; 1241 1.11 lukem map_print_some_keys(el, el->el_map.alt, prev, i - 1); 1242 1.11 lukem prev = i; 1243 1.11 lukem } 1244 1.1 cgd map_print_some_keys(el, el->el_map.alt, prev, i - 1); 1245 1.11 lukem 1246 1.11 lukem (void) fprintf(el->el_outfile, "Multi-character bindings\n"); 1247 1.45 christos keymacro_print(el, L""); 1248 1.11 lukem (void) fprintf(el->el_outfile, "Arrow key bindings\n"); 1249 1.45 christos terminal_print_arrow(el, L""); 1250 1.1 cgd } 1251 1.1 cgd 1252 1.1 cgd 1253 1.1 cgd /* map_bind(): 1254 1.1 cgd * Add/remove/change bindings 1255 1.1 cgd */ 1256 1.51 christos libedit_private int 1257 1.46 christos map_bind(EditLine *el, int argc, const wchar_t **argv) 1258 1.1 cgd { 1259 1.11 lukem el_action_t *map; 1260 1.11 lukem int ntype, rem; 1261 1.46 christos const wchar_t *p; 1262 1.46 christos wchar_t inbuf[EL_BUFSIZ]; 1263 1.46 christos wchar_t outbuf[EL_BUFSIZ]; 1264 1.46 christos const wchar_t *in = NULL; 1265 1.46 christos wchar_t *out; 1266 1.22 christos el_bindings_t *bp, *ep; 1267 1.11 lukem int cmd; 1268 1.11 lukem int key; 1269 1.11 lukem 1270 1.11 lukem if (argv == NULL) 1271 1.29 christos return -1; 1272 1.11 lukem 1273 1.11 lukem map = el->el_map.key; 1274 1.11 lukem ntype = XK_CMD; 1275 1.11 lukem key = rem = 0; 1276 1.11 lukem for (argc = 1; (p = argv[argc]) != NULL; argc++) 1277 1.11 lukem if (p[0] == '-') 1278 1.11 lukem switch (p[1]) { 1279 1.11 lukem case 'a': 1280 1.11 lukem map = el->el_map.alt; 1281 1.11 lukem break; 1282 1.11 lukem 1283 1.11 lukem case 's': 1284 1.11 lukem ntype = XK_STR; 1285 1.11 lukem break; 1286 1.11 lukem case 'k': 1287 1.11 lukem key = 1; 1288 1.11 lukem break; 1289 1.11 lukem 1290 1.11 lukem case 'r': 1291 1.11 lukem rem = 1; 1292 1.11 lukem break; 1293 1.11 lukem 1294 1.11 lukem case 'v': 1295 1.11 lukem map_init_vi(el); 1296 1.29 christos return 0; 1297 1.11 lukem 1298 1.11 lukem case 'e': 1299 1.11 lukem map_init_emacs(el); 1300 1.29 christos return 0; 1301 1.11 lukem 1302 1.11 lukem case 'l': 1303 1.22 christos ep = &el->el_map.help[el->el_map.nfunc]; 1304 1.22 christos for (bp = el->el_map.help; bp < ep; bp++) 1305 1.11 lukem (void) fprintf(el->el_outfile, 1306 1.44 christos "%ls\n\t%ls\n", 1307 1.11 lukem bp->name, bp->description); 1308 1.29 christos return 0; 1309 1.11 lukem default: 1310 1.11 lukem (void) fprintf(el->el_errfile, 1311 1.44 christos "%ls: Invalid switch `%lc'.\n", 1312 1.37 christos argv[0], (wint_t)p[1]); 1313 1.11 lukem } 1314 1.11 lukem else 1315 1.11 lukem break; 1316 1.11 lukem 1317 1.11 lukem if (argv[argc] == NULL) { 1318 1.11 lukem map_print_all_keys(el); 1319 1.29 christos return 0; 1320 1.11 lukem } 1321 1.11 lukem if (key) 1322 1.11 lukem in = argv[argc++]; 1323 1.11 lukem else if ((in = parse__string(inbuf, argv[argc++])) == NULL) { 1324 1.11 lukem (void) fprintf(el->el_errfile, 1325 1.44 christos "%ls: Invalid \\ or ^ in instring.\n", 1326 1.11 lukem argv[0]); 1327 1.29 christos return -1; 1328 1.11 lukem } 1329 1.11 lukem if (rem) { 1330 1.11 lukem if (key) { 1331 1.26 christos (void) terminal_clear_arrow(el, in); 1332 1.29 christos return -1; 1333 1.11 lukem } 1334 1.11 lukem if (in[1]) 1335 1.27 christos (void) keymacro_delete(el, in); 1336 1.11 lukem else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) 1337 1.27 christos (void) keymacro_delete(el, in); 1338 1.11 lukem else 1339 1.11 lukem map[(unsigned char) *in] = ED_UNASSIGNED; 1340 1.29 christos return 0; 1341 1.1 cgd } 1342 1.11 lukem if (argv[argc] == NULL) { 1343 1.11 lukem if (key) 1344 1.26 christos terminal_print_arrow(el, in); 1345 1.11 lukem else 1346 1.11 lukem map_print_key(el, map, in); 1347 1.29 christos return 0; 1348 1.1 cgd } 1349 1.1 cgd #ifdef notyet 1350 1.11 lukem if (argv[argc + 1] != NULL) { 1351 1.27 christos bindkeymacro_usage(); 1352 1.29 christos return -1; 1353 1.11 lukem } 1354 1.1 cgd #endif 1355 1.1 cgd 1356 1.11 lukem switch (ntype) { 1357 1.11 lukem case XK_STR: 1358 1.11 lukem if ((out = parse__string(outbuf, argv[argc])) == NULL) { 1359 1.11 lukem (void) fprintf(el->el_errfile, 1360 1.44 christos "%ls: Invalid \\ or ^ in outstring.\n", argv[0]); 1361 1.29 christos return -1; 1362 1.11 lukem } 1363 1.11 lukem if (key) 1364 1.27 christos terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype); 1365 1.11 lukem else 1366 1.27 christos keymacro_add(el, in, keymacro_map_str(el, out), ntype); 1367 1.1 cgd map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 1368 1.11 lukem break; 1369 1.11 lukem 1370 1.11 lukem case XK_CMD: 1371 1.11 lukem if ((cmd = parse_cmd(el, argv[argc])) == -1) { 1372 1.11 lukem (void) fprintf(el->el_errfile, 1373 1.44 christos "%ls: Invalid command `%ls'.\n", 1374 1.25 christos argv[0], argv[argc]); 1375 1.29 christos return -1; 1376 1.11 lukem } 1377 1.11 lukem if (key) 1378 1.32 christos terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype); 1379 1.11 lukem else { 1380 1.11 lukem if (in[1]) { 1381 1.27 christos keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype); 1382 1.11 lukem map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 1383 1.11 lukem } else { 1384 1.27 christos keymacro_clear(el, map, in); 1385 1.30 christos map[(unsigned char) *in] = (el_action_t)cmd; 1386 1.11 lukem } 1387 1.11 lukem } 1388 1.11 lukem break; 1389 1.11 lukem 1390 1.31 christos /* coverity[dead_error_begin] */ 1391 1.11 lukem default: 1392 1.24 christos EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); 1393 1.1 cgd } 1394 1.29 christos return 0; 1395 1.1 cgd } 1396 1.1 cgd 1397 1.1 cgd 1398 1.1 cgd /* map_addfunc(): 1399 1.1 cgd * add a user defined function 1400 1.1 cgd */ 1401 1.51 christos libedit_private int 1402 1.46 christos map_addfunc(EditLine *el, const wchar_t *name, const wchar_t *help, 1403 1.46 christos el_func_t func) 1404 1.1 cgd { 1405 1.13 christos void *p; 1406 1.34 christos size_t nf = el->el_map.nfunc + 1; 1407 1.11 lukem 1408 1.11 lukem if (name == NULL || help == NULL || func == NULL) 1409 1.29 christos return -1; 1410 1.11 lukem 1411 1.28 christos if ((p = el_realloc(el->el_map.func, nf * 1412 1.28 christos sizeof(*el->el_map.func))) == NULL) 1413 1.29 christos return -1; 1414 1.28 christos el->el_map.func = p; 1415 1.28 christos if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help))) 1416 1.13 christos == NULL) 1417 1.29 christos return -1; 1418 1.28 christos el->el_map.help = p; 1419 1.11 lukem 1420 1.30 christos nf = (size_t)el->el_map.nfunc; 1421 1.11 lukem el->el_map.func[nf] = func; 1422 1.11 lukem 1423 1.11 lukem el->el_map.help[nf].name = name; 1424 1.30 christos el->el_map.help[nf].func = (int)nf; 1425 1.11 lukem el->el_map.help[nf].description = help; 1426 1.11 lukem el->el_map.nfunc++; 1427 1.1 cgd 1428 1.29 christos return 0; 1429 1.1 cgd } 1430