11573Srgrimes/*- 21573Srgrimes * Copyright (c) 1992, 1993 31573Srgrimes * The Regents of the University of California. All rights reserved. 41573Srgrimes * 51573Srgrimes * This code is derived from software contributed to Berkeley by 61573Srgrimes * Christos Zoulas of Cornell University. 71573Srgrimes * 81573Srgrimes * Redistribution and use in source and binary forms, with or without 91573Srgrimes * modification, are permitted provided that the following conditions 101573Srgrimes * are met: 111573Srgrimes * 1. Redistributions of source code must retain the above copyright 121573Srgrimes * notice, this list of conditions and the following disclaimer. 131573Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 141573Srgrimes * notice, this list of conditions and the following disclaimer in the 151573Srgrimes * documentation and/or other materials provided with the distribution. 16148834Sstefanf * 3. Neither the name of the University nor the names of its contributors 171573Srgrimes * may be used to endorse or promote products derived from this software 181573Srgrimes * without specific prior written permission. 191573Srgrimes * 201573Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 211573Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 221573Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 231573Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 241573Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 251573Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 261573Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 271573Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 281573Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 291573Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 301573Srgrimes * SUCH DAMAGE. 3184260Sobrien * 32167464Sstefanf * $NetBSD: map.c,v 1.24 2006/04/09 01:36:51 christos Exp $ 331573Srgrimes */ 341573Srgrimes 351573Srgrimes#if !defined(lint) && !defined(SCCSID) 361573Srgrimesstatic char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; 371573Srgrimes#endif /* not lint && not SCCSID */ 3884260Sobrien#include <sys/cdefs.h> 3984260Sobrien__FBSDID("$FreeBSD$"); 401573Srgrimes 411573Srgrimes/* 428870Srgrimes * map.c: Editor function definitions 431573Srgrimes */ 441573Srgrimes#include "sys.h" 451573Srgrimes#include <stdlib.h> 461573Srgrimes#include "el.h" 471573Srgrimes 4884260Sobrien#define N_KEYS 256 491573Srgrimes 50148834Sstefanfprivate void map_print_key(EditLine *, el_action_t *, const char *); 5184260Sobrienprivate void map_print_some_keys(EditLine *, el_action_t *, int, int); 5284260Sobrienprivate void map_print_all_keys(EditLine *); 5384260Sobrienprivate void map_init_nls(EditLine *); 5484260Sobrienprivate void map_init_meta(EditLine *); 551573Srgrimes 561573Srgrimes/* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */ 571573Srgrimes 5884260Sobrien 5984260Sobrienprivate const el_action_t el_map_emacs[] = { 6084260Sobrien /* 0 */ EM_SET_MARK, /* ^@ */ 6184260Sobrien /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 6284260Sobrien /* 2 */ ED_PREV_CHAR, /* ^B */ 6384260Sobrien /* 3 */ ED_TTY_SIGINT, /* ^C */ 6484260Sobrien /* 4 */ EM_DELETE_OR_LIST, /* ^D */ 6584260Sobrien /* 5 */ ED_MOVE_TO_END, /* ^E */ 6684260Sobrien /* 6 */ ED_NEXT_CHAR, /* ^F */ 6784260Sobrien /* 7 */ ED_UNASSIGNED, /* ^G */ 68148834Sstefanf /* 8 */ EM_DELETE_PREV_CHAR, /* ^H */ 6984260Sobrien /* 9 */ ED_UNASSIGNED, /* ^I */ 7084260Sobrien /* 10 */ ED_NEWLINE, /* ^J */ 7184260Sobrien /* 11 */ ED_KILL_LINE, /* ^K */ 7284260Sobrien /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 7384260Sobrien /* 13 */ ED_NEWLINE, /* ^M */ 7484260Sobrien /* 14 */ ED_NEXT_HISTORY, /* ^N */ 7584260Sobrien /* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */ 7684260Sobrien /* 16 */ ED_PREV_HISTORY, /* ^P */ 7784260Sobrien /* 17 */ ED_TTY_START_OUTPUT, /* ^Q */ 7884260Sobrien /* 18 */ ED_REDISPLAY, /* ^R */ 7984260Sobrien /* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */ 8084260Sobrien /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 8184260Sobrien /* 21 */ EM_KILL_LINE, /* ^U */ 8284260Sobrien /* 22 */ ED_QUOTED_INSERT, /* ^V */ 8384260Sobrien /* 23 */ EM_KILL_REGION, /* ^W */ 8484260Sobrien /* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */ 8584260Sobrien /* 25 */ EM_YANK, /* ^Y */ 8684260Sobrien /* 26 */ ED_TTY_SIGTSTP, /* ^Z */ 8784260Sobrien /* 27 */ EM_META_NEXT, /* ^[ */ 8884260Sobrien /* 28 */ ED_TTY_SIGQUIT, /* ^\ */ 8984260Sobrien /* 29 */ ED_TTY_DSUSP, /* ^] */ 9084260Sobrien /* 30 */ ED_UNASSIGNED, /* ^^ */ 9184260Sobrien /* 31 */ ED_UNASSIGNED, /* ^_ */ 9284260Sobrien /* 32 */ ED_INSERT, /* SPACE */ 9384260Sobrien /* 33 */ ED_INSERT, /* ! */ 9484260Sobrien /* 34 */ ED_INSERT, /* " */ 9584260Sobrien /* 35 */ ED_INSERT, /* # */ 9684260Sobrien /* 36 */ ED_INSERT, /* $ */ 9784260Sobrien /* 37 */ ED_INSERT, /* % */ 9884260Sobrien /* 38 */ ED_INSERT, /* & */ 9984260Sobrien /* 39 */ ED_INSERT, /* ' */ 10084260Sobrien /* 40 */ ED_INSERT, /* ( */ 10184260Sobrien /* 41 */ ED_INSERT, /* ) */ 10284260Sobrien /* 42 */ ED_INSERT, /* * */ 10384260Sobrien /* 43 */ ED_INSERT, /* + */ 10484260Sobrien /* 44 */ ED_INSERT, /* , */ 10584260Sobrien /* 45 */ ED_INSERT, /* - */ 10684260Sobrien /* 46 */ ED_INSERT, /* . */ 10784260Sobrien /* 47 */ ED_INSERT, /* / */ 10884260Sobrien /* 48 */ ED_DIGIT, /* 0 */ 10984260Sobrien /* 49 */ ED_DIGIT, /* 1 */ 11084260Sobrien /* 50 */ ED_DIGIT, /* 2 */ 11184260Sobrien /* 51 */ ED_DIGIT, /* 3 */ 11284260Sobrien /* 52 */ ED_DIGIT, /* 4 */ 11384260Sobrien /* 53 */ ED_DIGIT, /* 5 */ 11484260Sobrien /* 54 */ ED_DIGIT, /* 6 */ 11584260Sobrien /* 55 */ ED_DIGIT, /* 7 */ 11684260Sobrien /* 56 */ ED_DIGIT, /* 8 */ 11784260Sobrien /* 57 */ ED_DIGIT, /* 9 */ 11884260Sobrien /* 58 */ ED_INSERT, /* : */ 11984260Sobrien /* 59 */ ED_INSERT, /* ; */ 12084260Sobrien /* 60 */ ED_INSERT, /* < */ 12184260Sobrien /* 61 */ ED_INSERT, /* = */ 12284260Sobrien /* 62 */ ED_INSERT, /* > */ 12384260Sobrien /* 63 */ ED_INSERT, /* ? */ 12484260Sobrien /* 64 */ ED_INSERT, /* @ */ 12584260Sobrien /* 65 */ ED_INSERT, /* A */ 12684260Sobrien /* 66 */ ED_INSERT, /* B */ 12784260Sobrien /* 67 */ ED_INSERT, /* C */ 12884260Sobrien /* 68 */ ED_INSERT, /* D */ 12984260Sobrien /* 69 */ ED_INSERT, /* E */ 13084260Sobrien /* 70 */ ED_INSERT, /* F */ 13184260Sobrien /* 71 */ ED_INSERT, /* G */ 13284260Sobrien /* 72 */ ED_INSERT, /* H */ 13384260Sobrien /* 73 */ ED_INSERT, /* I */ 13484260Sobrien /* 74 */ ED_INSERT, /* J */ 13584260Sobrien /* 75 */ ED_INSERT, /* K */ 13684260Sobrien /* 76 */ ED_INSERT, /* L */ 13784260Sobrien /* 77 */ ED_INSERT, /* M */ 13884260Sobrien /* 78 */ ED_INSERT, /* N */ 13984260Sobrien /* 79 */ ED_INSERT, /* O */ 14084260Sobrien /* 80 */ ED_INSERT, /* P */ 14184260Sobrien /* 81 */ ED_INSERT, /* Q */ 14284260Sobrien /* 82 */ ED_INSERT, /* R */ 14384260Sobrien /* 83 */ ED_INSERT, /* S */ 14484260Sobrien /* 84 */ ED_INSERT, /* T */ 14584260Sobrien /* 85 */ ED_INSERT, /* U */ 14684260Sobrien /* 86 */ ED_INSERT, /* V */ 14784260Sobrien /* 87 */ ED_INSERT, /* W */ 14884260Sobrien /* 88 */ ED_INSERT, /* X */ 14984260Sobrien /* 89 */ ED_INSERT, /* Y */ 15084260Sobrien /* 90 */ ED_INSERT, /* Z */ 15184260Sobrien /* 91 */ ED_INSERT, /* [ */ 15284260Sobrien /* 92 */ ED_INSERT, /* \ */ 15384260Sobrien /* 93 */ ED_INSERT, /* ] */ 15484260Sobrien /* 94 */ ED_INSERT, /* ^ */ 15584260Sobrien /* 95 */ ED_INSERT, /* _ */ 15684260Sobrien /* 96 */ ED_INSERT, /* ` */ 15784260Sobrien /* 97 */ ED_INSERT, /* a */ 15884260Sobrien /* 98 */ ED_INSERT, /* b */ 15984260Sobrien /* 99 */ ED_INSERT, /* c */ 16084260Sobrien /* 100 */ ED_INSERT, /* d */ 16184260Sobrien /* 101 */ ED_INSERT, /* e */ 16284260Sobrien /* 102 */ ED_INSERT, /* f */ 16384260Sobrien /* 103 */ ED_INSERT, /* g */ 16484260Sobrien /* 104 */ ED_INSERT, /* h */ 16584260Sobrien /* 105 */ ED_INSERT, /* i */ 16684260Sobrien /* 106 */ ED_INSERT, /* j */ 16784260Sobrien /* 107 */ ED_INSERT, /* k */ 16884260Sobrien /* 108 */ ED_INSERT, /* l */ 16984260Sobrien /* 109 */ ED_INSERT, /* m */ 17084260Sobrien /* 110 */ ED_INSERT, /* n */ 17184260Sobrien /* 111 */ ED_INSERT, /* o */ 17284260Sobrien /* 112 */ ED_INSERT, /* p */ 17384260Sobrien /* 113 */ ED_INSERT, /* q */ 17484260Sobrien /* 114 */ ED_INSERT, /* r */ 17584260Sobrien /* 115 */ ED_INSERT, /* s */ 17684260Sobrien /* 116 */ ED_INSERT, /* t */ 17784260Sobrien /* 117 */ ED_INSERT, /* u */ 17884260Sobrien /* 118 */ ED_INSERT, /* v */ 17984260Sobrien /* 119 */ ED_INSERT, /* w */ 18084260Sobrien /* 120 */ ED_INSERT, /* x */ 18184260Sobrien /* 121 */ ED_INSERT, /* y */ 18284260Sobrien /* 122 */ ED_INSERT, /* z */ 18384260Sobrien /* 123 */ ED_INSERT, /* { */ 18484260Sobrien /* 124 */ ED_INSERT, /* | */ 18584260Sobrien /* 125 */ ED_INSERT, /* } */ 18684260Sobrien /* 126 */ ED_INSERT, /* ~ */ 187148834Sstefanf /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */ 18884260Sobrien /* 128 */ ED_UNASSIGNED, /* M-^@ */ 18984260Sobrien /* 129 */ ED_UNASSIGNED, /* M-^A */ 19084260Sobrien /* 130 */ ED_UNASSIGNED, /* M-^B */ 19184260Sobrien /* 131 */ ED_UNASSIGNED, /* M-^C */ 19284260Sobrien /* 132 */ ED_UNASSIGNED, /* M-^D */ 19384260Sobrien /* 133 */ ED_UNASSIGNED, /* M-^E */ 19484260Sobrien /* 134 */ ED_UNASSIGNED, /* M-^F */ 19584260Sobrien /* 135 */ ED_UNASSIGNED, /* M-^G */ 19684260Sobrien /* 136 */ ED_DELETE_PREV_WORD, /* M-^H */ 19784260Sobrien /* 137 */ ED_UNASSIGNED, /* M-^I */ 19884260Sobrien /* 138 */ ED_UNASSIGNED, /* M-^J */ 19984260Sobrien /* 139 */ ED_UNASSIGNED, /* M-^K */ 20084260Sobrien /* 140 */ ED_CLEAR_SCREEN, /* M-^L */ 20184260Sobrien /* 141 */ ED_UNASSIGNED, /* M-^M */ 20284260Sobrien /* 142 */ ED_UNASSIGNED, /* M-^N */ 20384260Sobrien /* 143 */ ED_UNASSIGNED, /* M-^O */ 20484260Sobrien /* 144 */ ED_UNASSIGNED, /* M-^P */ 20584260Sobrien /* 145 */ ED_UNASSIGNED, /* M-^Q */ 20684260Sobrien /* 146 */ ED_UNASSIGNED, /* M-^R */ 20784260Sobrien /* 147 */ ED_UNASSIGNED, /* M-^S */ 20884260Sobrien /* 148 */ ED_UNASSIGNED, /* M-^T */ 20984260Sobrien /* 149 */ ED_UNASSIGNED, /* M-^U */ 21084260Sobrien /* 150 */ ED_UNASSIGNED, /* M-^V */ 21184260Sobrien /* 151 */ ED_UNASSIGNED, /* M-^W */ 21284260Sobrien /* 152 */ ED_UNASSIGNED, /* M-^X */ 21384260Sobrien /* 153 */ ED_UNASSIGNED, /* M-^Y */ 21484260Sobrien /* 154 */ ED_UNASSIGNED, /* M-^Z */ 21584260Sobrien /* 155 */ ED_UNASSIGNED, /* M-^[ */ 21684260Sobrien /* 156 */ ED_UNASSIGNED, /* M-^\ */ 21784260Sobrien /* 157 */ ED_UNASSIGNED, /* M-^] */ 21884260Sobrien /* 158 */ ED_UNASSIGNED, /* M-^^ */ 21984260Sobrien /* 159 */ EM_COPY_PREV_WORD, /* M-^_ */ 22084260Sobrien /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 22184260Sobrien /* 161 */ ED_UNASSIGNED, /* M-! */ 22284260Sobrien /* 162 */ ED_UNASSIGNED, /* M-" */ 22384260Sobrien /* 163 */ ED_UNASSIGNED, /* M-# */ 22484260Sobrien /* 164 */ ED_UNASSIGNED, /* M-$ */ 22584260Sobrien /* 165 */ ED_UNASSIGNED, /* M-% */ 22684260Sobrien /* 166 */ ED_UNASSIGNED, /* M-& */ 22784260Sobrien /* 167 */ ED_UNASSIGNED, /* M-' */ 22884260Sobrien /* 168 */ ED_UNASSIGNED, /* M-( */ 22984260Sobrien /* 169 */ ED_UNASSIGNED, /* M-) */ 23084260Sobrien /* 170 */ ED_UNASSIGNED, /* M-* */ 23184260Sobrien /* 171 */ ED_UNASSIGNED, /* M-+ */ 23284260Sobrien /* 172 */ ED_UNASSIGNED, /* M-, */ 23384260Sobrien /* 173 */ ED_UNASSIGNED, /* M-- */ 23484260Sobrien /* 174 */ ED_UNASSIGNED, /* M-. */ 23584260Sobrien /* 175 */ ED_UNASSIGNED, /* M-/ */ 23684260Sobrien /* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */ 23784260Sobrien /* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */ 23884260Sobrien /* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */ 23984260Sobrien /* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */ 24084260Sobrien /* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */ 24184260Sobrien /* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */ 24284260Sobrien /* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */ 24384260Sobrien /* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */ 24484260Sobrien /* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */ 24584260Sobrien /* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */ 24684260Sobrien /* 186 */ ED_UNASSIGNED, /* M-: */ 24784260Sobrien /* 187 */ ED_UNASSIGNED, /* M-; */ 24884260Sobrien /* 188 */ ED_UNASSIGNED, /* M-< */ 24984260Sobrien /* 189 */ ED_UNASSIGNED, /* M-= */ 25084260Sobrien /* 190 */ ED_UNASSIGNED, /* M-> */ 25184260Sobrien /* 191 */ ED_UNASSIGNED, /* M-? */ 25284260Sobrien /* 192 */ ED_UNASSIGNED, /* M-@ */ 25384260Sobrien /* 193 */ ED_UNASSIGNED, /* M-A */ 25484260Sobrien /* 194 */ ED_PREV_WORD, /* M-B */ 25584260Sobrien /* 195 */ EM_CAPITOL_CASE, /* M-C */ 25684260Sobrien /* 196 */ EM_DELETE_NEXT_WORD, /* M-D */ 25784260Sobrien /* 197 */ ED_UNASSIGNED, /* M-E */ 25884260Sobrien /* 198 */ EM_NEXT_WORD, /* M-F */ 25984260Sobrien /* 199 */ ED_UNASSIGNED, /* M-G */ 26084260Sobrien /* 200 */ ED_UNASSIGNED, /* M-H */ 26184260Sobrien /* 201 */ ED_UNASSIGNED, /* M-I */ 26284260Sobrien /* 202 */ ED_UNASSIGNED, /* M-J */ 26384260Sobrien /* 203 */ ED_UNASSIGNED, /* M-K */ 26484260Sobrien /* 204 */ EM_LOWER_CASE, /* M-L */ 26584260Sobrien /* 205 */ ED_UNASSIGNED, /* M-M */ 26684260Sobrien /* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */ 26784260Sobrien /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 26884260Sobrien /* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */ 26984260Sobrien /* 209 */ ED_UNASSIGNED, /* M-Q */ 27084260Sobrien /* 210 */ ED_UNASSIGNED, /* M-R */ 27184260Sobrien /* 211 */ ED_UNASSIGNED, /* M-S */ 27284260Sobrien /* 212 */ ED_UNASSIGNED, /* M-T */ 27384260Sobrien /* 213 */ EM_UPPER_CASE, /* M-U */ 27484260Sobrien /* 214 */ ED_UNASSIGNED, /* M-V */ 27584260Sobrien /* 215 */ EM_COPY_REGION, /* M-W */ 27684260Sobrien /* 216 */ ED_COMMAND, /* M-X */ 27784260Sobrien /* 217 */ ED_UNASSIGNED, /* M-Y */ 27884260Sobrien /* 218 */ ED_UNASSIGNED, /* M-Z */ 27984260Sobrien /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 28084260Sobrien /* 220 */ ED_UNASSIGNED, /* M-\ */ 28184260Sobrien /* 221 */ ED_UNASSIGNED, /* M-] */ 28284260Sobrien /* 222 */ ED_UNASSIGNED, /* M-^ */ 28384260Sobrien /* 223 */ ED_UNASSIGNED, /* M-_ */ 28484260Sobrien /* 223 */ ED_UNASSIGNED, /* M-` */ 28584260Sobrien /* 224 */ ED_UNASSIGNED, /* M-a */ 28684260Sobrien /* 225 */ ED_PREV_WORD, /* M-b */ 28784260Sobrien /* 226 */ EM_CAPITOL_CASE, /* M-c */ 28884260Sobrien /* 227 */ EM_DELETE_NEXT_WORD, /* M-d */ 28984260Sobrien /* 228 */ ED_UNASSIGNED, /* M-e */ 29084260Sobrien /* 229 */ EM_NEXT_WORD, /* M-f */ 29184260Sobrien /* 230 */ ED_UNASSIGNED, /* M-g */ 29284260Sobrien /* 231 */ ED_UNASSIGNED, /* M-h */ 29384260Sobrien /* 232 */ ED_UNASSIGNED, /* M-i */ 29484260Sobrien /* 233 */ ED_UNASSIGNED, /* M-j */ 29584260Sobrien /* 234 */ ED_UNASSIGNED, /* M-k */ 29684260Sobrien /* 235 */ EM_LOWER_CASE, /* M-l */ 29784260Sobrien /* 236 */ ED_UNASSIGNED, /* M-m */ 29884260Sobrien /* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */ 29984260Sobrien /* 238 */ ED_UNASSIGNED, /* M-o */ 30084260Sobrien /* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */ 30184260Sobrien /* 240 */ ED_UNASSIGNED, /* M-q */ 30284260Sobrien /* 241 */ ED_UNASSIGNED, /* M-r */ 30384260Sobrien /* 242 */ ED_UNASSIGNED, /* M-s */ 30484260Sobrien /* 243 */ ED_UNASSIGNED, /* M-t */ 30584260Sobrien /* 244 */ EM_UPPER_CASE, /* M-u */ 30684260Sobrien /* 245 */ ED_UNASSIGNED, /* M-v */ 30784260Sobrien /* 246 */ EM_COPY_REGION, /* M-w */ 30884260Sobrien /* 247 */ ED_COMMAND, /* M-x */ 30984260Sobrien /* 248 */ ED_UNASSIGNED, /* M-y */ 31084260Sobrien /* 249 */ ED_UNASSIGNED, /* M-z */ 31184260Sobrien /* 250 */ ED_UNASSIGNED, /* M-{ */ 31284260Sobrien /* 251 */ ED_UNASSIGNED, /* M-| */ 31384260Sobrien /* 252 */ ED_UNASSIGNED, /* M-} */ 31484260Sobrien /* 253 */ ED_UNASSIGNED, /* M-~ */ 31584260Sobrien /* 254 */ ED_DELETE_PREV_WORD /* M-^? */ 31684260Sobrien /* 255 */ 3171573Srgrimes}; 3181573Srgrimes 31984260Sobrien 3201573Srgrimes/* 3211573Srgrimes * keymap table for vi. Each index into above tbl; should be 3221573Srgrimes * N_KEYS entries long. Vi mode uses a sticky-extend to do command mode: 3231573Srgrimes * insert mode characters are in the normal keymap, and command mode 3241573Srgrimes * in the extended keymap. 3251573Srgrimes */ 32684260Sobrienprivate const el_action_t el_map_vi_insert[] = { 3271573Srgrimes#ifdef KSHVI 32884260Sobrien /* 0 */ ED_UNASSIGNED, /* ^@ */ 32984260Sobrien /* 1 */ ED_INSERT, /* ^A */ 33084260Sobrien /* 2 */ ED_INSERT, /* ^B */ 33184260Sobrien /* 3 */ ED_INSERT, /* ^C */ 33284260Sobrien /* 4 */ VI_LIST_OR_EOF, /* ^D */ 33384260Sobrien /* 5 */ ED_INSERT, /* ^E */ 33484260Sobrien /* 6 */ ED_INSERT, /* ^F */ 33584260Sobrien /* 7 */ ED_INSERT, /* ^G */ 33684260Sobrien /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 33784260Sobrien /* 9 */ ED_INSERT, /* ^I */ /* Tab Key */ 33884260Sobrien /* 10 */ ED_NEWLINE, /* ^J */ 33984260Sobrien /* 11 */ ED_INSERT, /* ^K */ 34084260Sobrien /* 12 */ ED_INSERT, /* ^L */ 34184260Sobrien /* 13 */ ED_NEWLINE, /* ^M */ 34284260Sobrien /* 14 */ ED_INSERT, /* ^N */ 34384260Sobrien /* 15 */ ED_INSERT, /* ^O */ 34484260Sobrien /* 16 */ ED_INSERT, /* ^P */ 34584260Sobrien /* 17 */ ED_TTY_START_OUTPUT, /* ^Q */ 34684260Sobrien /* 18 */ ED_INSERT, /* ^R */ 34784260Sobrien /* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */ 34884260Sobrien /* 20 */ ED_INSERT, /* ^T */ 34984260Sobrien /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 35084260Sobrien /* 22 */ ED_QUOTED_INSERT, /* ^V */ 35184260Sobrien /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 35284260Sobrien /* ED_DELETE_PREV_WORD: Only until strt edit pos */ 35384260Sobrien /* 24 */ ED_INSERT, /* ^X */ 35484260Sobrien /* 25 */ ED_INSERT, /* ^Y */ 35584260Sobrien /* 26 */ ED_INSERT, /* ^Z */ 35684260Sobrien /* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */ 35784260Sobrien /* 28 */ ED_TTY_SIGQUIT, /* ^\ */ 35884260Sobrien /* 29 */ ED_INSERT, /* ^] */ 35984260Sobrien /* 30 */ ED_INSERT, /* ^^ */ 36084260Sobrien /* 31 */ ED_INSERT, /* ^_ */ 3611573Srgrimes#else /* !KSHVI */ 36284260Sobrien /* 36384260Sobrien * NOTE: These mappings do NOT Correspond well 36484260Sobrien * to the KSH VI editing assignments. 36584260Sobrien * On the other and they are convenient and 36684260Sobrien * many people have have gotten used to them. 36784260Sobrien */ 36884260Sobrien /* 0 */ ED_UNASSIGNED, /* ^@ */ 36984260Sobrien /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 37084260Sobrien /* 2 */ ED_PREV_CHAR, /* ^B */ 37184260Sobrien /* 3 */ ED_TTY_SIGINT, /* ^C */ 37284260Sobrien /* 4 */ VI_LIST_OR_EOF, /* ^D */ 37384260Sobrien /* 5 */ ED_MOVE_TO_END, /* ^E */ 37484260Sobrien /* 6 */ ED_NEXT_CHAR, /* ^F */ 37584260Sobrien /* 7 */ ED_UNASSIGNED, /* ^G */ 376148834Sstefanf /* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */ 37784260Sobrien /* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */ 37884260Sobrien /* 10 */ ED_NEWLINE, /* ^J */ 37984260Sobrien /* 11 */ ED_KILL_LINE, /* ^K */ 38084260Sobrien /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 38184260Sobrien /* 13 */ ED_NEWLINE, /* ^M */ 38284260Sobrien /* 14 */ ED_NEXT_HISTORY, /* ^N */ 38384260Sobrien /* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */ 38484260Sobrien /* 16 */ ED_PREV_HISTORY, /* ^P */ 38584260Sobrien /* 17 */ ED_TTY_START_OUTPUT, /* ^Q */ 38684260Sobrien /* 18 */ ED_REDISPLAY, /* ^R */ 38784260Sobrien /* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */ 38884260Sobrien /* 20 */ ED_TRANSPOSE_CHARS, /* ^T */ 38984260Sobrien /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 39084260Sobrien /* 22 */ ED_QUOTED_INSERT, /* ^V */ 39184260Sobrien /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 39284260Sobrien /* 24 */ ED_UNASSIGNED, /* ^X */ 39384260Sobrien /* 25 */ ED_TTY_DSUSP, /* ^Y */ 39484260Sobrien /* 26 */ ED_TTY_SIGTSTP, /* ^Z */ 39584260Sobrien /* 27 */ VI_COMMAND_MODE, /* ^[ */ 39684260Sobrien /* 28 */ ED_TTY_SIGQUIT, /* ^\ */ 39784260Sobrien /* 29 */ ED_UNASSIGNED, /* ^] */ 39884260Sobrien /* 30 */ ED_UNASSIGNED, /* ^^ */ 39984260Sobrien /* 31 */ ED_UNASSIGNED, /* ^_ */ 4001573Srgrimes#endif /* KSHVI */ 40184260Sobrien /* 32 */ ED_INSERT, /* SPACE */ 40284260Sobrien /* 33 */ ED_INSERT, /* ! */ 40384260Sobrien /* 34 */ ED_INSERT, /* " */ 40484260Sobrien /* 35 */ ED_INSERT, /* # */ 40584260Sobrien /* 36 */ ED_INSERT, /* $ */ 40684260Sobrien /* 37 */ ED_INSERT, /* % */ 40784260Sobrien /* 38 */ ED_INSERT, /* & */ 40884260Sobrien /* 39 */ ED_INSERT, /* ' */ 40984260Sobrien /* 40 */ ED_INSERT, /* ( */ 41084260Sobrien /* 41 */ ED_INSERT, /* ) */ 41184260Sobrien /* 42 */ ED_INSERT, /* * */ 41284260Sobrien /* 43 */ ED_INSERT, /* + */ 41384260Sobrien /* 44 */ ED_INSERT, /* , */ 41484260Sobrien /* 45 */ ED_INSERT, /* - */ 41584260Sobrien /* 46 */ ED_INSERT, /* . */ 41684260Sobrien /* 47 */ ED_INSERT, /* / */ 41784260Sobrien /* 48 */ ED_INSERT, /* 0 */ 41884260Sobrien /* 49 */ ED_INSERT, /* 1 */ 41984260Sobrien /* 50 */ ED_INSERT, /* 2 */ 42084260Sobrien /* 51 */ ED_INSERT, /* 3 */ 42184260Sobrien /* 52 */ ED_INSERT, /* 4 */ 42284260Sobrien /* 53 */ ED_INSERT, /* 5 */ 42384260Sobrien /* 54 */ ED_INSERT, /* 6 */ 42484260Sobrien /* 55 */ ED_INSERT, /* 7 */ 42584260Sobrien /* 56 */ ED_INSERT, /* 8 */ 42684260Sobrien /* 57 */ ED_INSERT, /* 9 */ 42784260Sobrien /* 58 */ ED_INSERT, /* : */ 42884260Sobrien /* 59 */ ED_INSERT, /* ; */ 42984260Sobrien /* 60 */ ED_INSERT, /* < */ 43084260Sobrien /* 61 */ ED_INSERT, /* = */ 43184260Sobrien /* 62 */ ED_INSERT, /* > */ 43284260Sobrien /* 63 */ ED_INSERT, /* ? */ 43384260Sobrien /* 64 */ ED_INSERT, /* @ */ 43484260Sobrien /* 65 */ ED_INSERT, /* A */ 43584260Sobrien /* 66 */ ED_INSERT, /* B */ 43684260Sobrien /* 67 */ ED_INSERT, /* C */ 43784260Sobrien /* 68 */ ED_INSERT, /* D */ 43884260Sobrien /* 69 */ ED_INSERT, /* E */ 43984260Sobrien /* 70 */ ED_INSERT, /* F */ 44084260Sobrien /* 71 */ ED_INSERT, /* G */ 44184260Sobrien /* 72 */ ED_INSERT, /* H */ 44284260Sobrien /* 73 */ ED_INSERT, /* I */ 44384260Sobrien /* 74 */ ED_INSERT, /* J */ 44484260Sobrien /* 75 */ ED_INSERT, /* K */ 44584260Sobrien /* 76 */ ED_INSERT, /* L */ 44684260Sobrien /* 77 */ ED_INSERT, /* M */ 44784260Sobrien /* 78 */ ED_INSERT, /* N */ 44884260Sobrien /* 79 */ ED_INSERT, /* O */ 44984260Sobrien /* 80 */ ED_INSERT, /* P */ 45084260Sobrien /* 81 */ ED_INSERT, /* Q */ 45184260Sobrien /* 82 */ ED_INSERT, /* R */ 45284260Sobrien /* 83 */ ED_INSERT, /* S */ 45384260Sobrien /* 84 */ ED_INSERT, /* T */ 45484260Sobrien /* 85 */ ED_INSERT, /* U */ 45584260Sobrien /* 86 */ ED_INSERT, /* V */ 45684260Sobrien /* 87 */ ED_INSERT, /* W */ 45784260Sobrien /* 88 */ ED_INSERT, /* X */ 45884260Sobrien /* 89 */ ED_INSERT, /* Y */ 45984260Sobrien /* 90 */ ED_INSERT, /* Z */ 46084260Sobrien /* 91 */ ED_INSERT, /* [ */ 46184260Sobrien /* 92 */ ED_INSERT, /* \ */ 46284260Sobrien /* 93 */ ED_INSERT, /* ] */ 46384260Sobrien /* 94 */ ED_INSERT, /* ^ */ 46484260Sobrien /* 95 */ ED_INSERT, /* _ */ 46584260Sobrien /* 96 */ ED_INSERT, /* ` */ 46684260Sobrien /* 97 */ ED_INSERT, /* a */ 46784260Sobrien /* 98 */ ED_INSERT, /* b */ 46884260Sobrien /* 99 */ ED_INSERT, /* c */ 46984260Sobrien /* 100 */ ED_INSERT, /* d */ 47084260Sobrien /* 101 */ ED_INSERT, /* e */ 47184260Sobrien /* 102 */ ED_INSERT, /* f */ 47284260Sobrien /* 103 */ ED_INSERT, /* g */ 47384260Sobrien /* 104 */ ED_INSERT, /* h */ 47484260Sobrien /* 105 */ ED_INSERT, /* i */ 47584260Sobrien /* 106 */ ED_INSERT, /* j */ 47684260Sobrien /* 107 */ ED_INSERT, /* k */ 47784260Sobrien /* 108 */ ED_INSERT, /* l */ 47884260Sobrien /* 109 */ ED_INSERT, /* m */ 47984260Sobrien /* 110 */ ED_INSERT, /* n */ 48084260Sobrien /* 111 */ ED_INSERT, /* o */ 48184260Sobrien /* 112 */ ED_INSERT, /* p */ 48284260Sobrien /* 113 */ ED_INSERT, /* q */ 48384260Sobrien /* 114 */ ED_INSERT, /* r */ 48484260Sobrien /* 115 */ ED_INSERT, /* s */ 48584260Sobrien /* 116 */ ED_INSERT, /* t */ 48684260Sobrien /* 117 */ ED_INSERT, /* u */ 48784260Sobrien /* 118 */ ED_INSERT, /* v */ 48884260Sobrien /* 119 */ ED_INSERT, /* w */ 48984260Sobrien /* 120 */ ED_INSERT, /* x */ 49084260Sobrien /* 121 */ ED_INSERT, /* y */ 49184260Sobrien /* 122 */ ED_INSERT, /* z */ 49284260Sobrien /* 123 */ ED_INSERT, /* { */ 49384260Sobrien /* 124 */ ED_INSERT, /* | */ 49484260Sobrien /* 125 */ ED_INSERT, /* } */ 49584260Sobrien /* 126 */ ED_INSERT, /* ~ */ 496148834Sstefanf /* 127 */ VI_DELETE_PREV_CHAR, /* ^? */ 497148834Sstefanf /* 128 */ ED_INSERT, /* M-^@ */ 498148834Sstefanf /* 129 */ ED_INSERT, /* M-^A */ 499148834Sstefanf /* 130 */ ED_INSERT, /* M-^B */ 500148834Sstefanf /* 131 */ ED_INSERT, /* M-^C */ 501148834Sstefanf /* 132 */ ED_INSERT, /* M-^D */ 502148834Sstefanf /* 133 */ ED_INSERT, /* M-^E */ 503148834Sstefanf /* 134 */ ED_INSERT, /* M-^F */ 504148834Sstefanf /* 135 */ ED_INSERT, /* M-^G */ 505148834Sstefanf /* 136 */ ED_INSERT, /* M-^H */ 506148834Sstefanf /* 137 */ ED_INSERT, /* M-^I */ 507148834Sstefanf /* 138 */ ED_INSERT, /* M-^J */ 508148834Sstefanf /* 139 */ ED_INSERT, /* M-^K */ 509148834Sstefanf /* 140 */ ED_INSERT, /* M-^L */ 510148834Sstefanf /* 141 */ ED_INSERT, /* M-^M */ 511148834Sstefanf /* 142 */ ED_INSERT, /* M-^N */ 512148834Sstefanf /* 143 */ ED_INSERT, /* M-^O */ 513148834Sstefanf /* 144 */ ED_INSERT, /* M-^P */ 514148834Sstefanf /* 145 */ ED_INSERT, /* M-^Q */ 515148834Sstefanf /* 146 */ ED_INSERT, /* M-^R */ 516148834Sstefanf /* 147 */ ED_INSERT, /* M-^S */ 517148834Sstefanf /* 148 */ ED_INSERT, /* M-^T */ 518148834Sstefanf /* 149 */ ED_INSERT, /* M-^U */ 519148834Sstefanf /* 150 */ ED_INSERT, /* M-^V */ 520148834Sstefanf /* 151 */ ED_INSERT, /* M-^W */ 521148834Sstefanf /* 152 */ ED_INSERT, /* M-^X */ 522148834Sstefanf /* 153 */ ED_INSERT, /* M-^Y */ 523148834Sstefanf /* 154 */ ED_INSERT, /* M-^Z */ 524148834Sstefanf /* 155 */ ED_INSERT, /* M-^[ */ 525148834Sstefanf /* 156 */ ED_INSERT, /* M-^\ */ 526148834Sstefanf /* 157 */ ED_INSERT, /* M-^] */ 527148834Sstefanf /* 158 */ ED_INSERT, /* M-^^ */ 528148834Sstefanf /* 159 */ ED_INSERT, /* M-^_ */ 529148834Sstefanf /* 160 */ ED_INSERT, /* M-SPACE */ 530148834Sstefanf /* 161 */ ED_INSERT, /* M-! */ 531148834Sstefanf /* 162 */ ED_INSERT, /* M-" */ 532148834Sstefanf /* 163 */ ED_INSERT, /* M-# */ 533148834Sstefanf /* 164 */ ED_INSERT, /* M-$ */ 534148834Sstefanf /* 165 */ ED_INSERT, /* M-% */ 535148834Sstefanf /* 166 */ ED_INSERT, /* M-& */ 536148834Sstefanf /* 167 */ ED_INSERT, /* M-' */ 537148834Sstefanf /* 168 */ ED_INSERT, /* M-( */ 538148834Sstefanf /* 169 */ ED_INSERT, /* M-) */ 539148834Sstefanf /* 170 */ ED_INSERT, /* M-* */ 540148834Sstefanf /* 171 */ ED_INSERT, /* M-+ */ 541148834Sstefanf /* 172 */ ED_INSERT, /* M-, */ 542148834Sstefanf /* 173 */ ED_INSERT, /* M-- */ 543148834Sstefanf /* 174 */ ED_INSERT, /* M-. */ 544148834Sstefanf /* 175 */ ED_INSERT, /* M-/ */ 545148834Sstefanf /* 176 */ ED_INSERT, /* M-0 */ 546148834Sstefanf /* 177 */ ED_INSERT, /* M-1 */ 547148834Sstefanf /* 178 */ ED_INSERT, /* M-2 */ 548148834Sstefanf /* 179 */ ED_INSERT, /* M-3 */ 549148834Sstefanf /* 180 */ ED_INSERT, /* M-4 */ 550148834Sstefanf /* 181 */ ED_INSERT, /* M-5 */ 551148834Sstefanf /* 182 */ ED_INSERT, /* M-6 */ 552148834Sstefanf /* 183 */ ED_INSERT, /* M-7 */ 553148834Sstefanf /* 184 */ ED_INSERT, /* M-8 */ 554148834Sstefanf /* 185 */ ED_INSERT, /* M-9 */ 555148834Sstefanf /* 186 */ ED_INSERT, /* M-: */ 556148834Sstefanf /* 187 */ ED_INSERT, /* M-; */ 557148834Sstefanf /* 188 */ ED_INSERT, /* M-< */ 558148834Sstefanf /* 189 */ ED_INSERT, /* M-= */ 559148834Sstefanf /* 190 */ ED_INSERT, /* M-> */ 560148834Sstefanf /* 191 */ ED_INSERT, /* M-? */ 561148834Sstefanf /* 192 */ ED_INSERT, /* M-@ */ 562148834Sstefanf /* 193 */ ED_INSERT, /* M-A */ 563148834Sstefanf /* 194 */ ED_INSERT, /* M-B */ 564148834Sstefanf /* 195 */ ED_INSERT, /* M-C */ 565148834Sstefanf /* 196 */ ED_INSERT, /* M-D */ 566148834Sstefanf /* 197 */ ED_INSERT, /* M-E */ 567148834Sstefanf /* 198 */ ED_INSERT, /* M-F */ 568148834Sstefanf /* 199 */ ED_INSERT, /* M-G */ 569148834Sstefanf /* 200 */ ED_INSERT, /* M-H */ 570148834Sstefanf /* 201 */ ED_INSERT, /* M-I */ 571148834Sstefanf /* 202 */ ED_INSERT, /* M-J */ 572148834Sstefanf /* 203 */ ED_INSERT, /* M-K */ 573148834Sstefanf /* 204 */ ED_INSERT, /* M-L */ 574148834Sstefanf /* 205 */ ED_INSERT, /* M-M */ 575148834Sstefanf /* 206 */ ED_INSERT, /* M-N */ 576148834Sstefanf /* 207 */ ED_INSERT, /* M-O */ 577148834Sstefanf /* 208 */ ED_INSERT, /* M-P */ 578148834Sstefanf /* 209 */ ED_INSERT, /* M-Q */ 579148834Sstefanf /* 210 */ ED_INSERT, /* M-R */ 580148834Sstefanf /* 211 */ ED_INSERT, /* M-S */ 581148834Sstefanf /* 212 */ ED_INSERT, /* M-T */ 582148834Sstefanf /* 213 */ ED_INSERT, /* M-U */ 583148834Sstefanf /* 214 */ ED_INSERT, /* M-V */ 584148834Sstefanf /* 215 */ ED_INSERT, /* M-W */ 585148834Sstefanf /* 216 */ ED_INSERT, /* M-X */ 586148834Sstefanf /* 217 */ ED_INSERT, /* M-Y */ 587148834Sstefanf /* 218 */ ED_INSERT, /* M-Z */ 588148834Sstefanf /* 219 */ ED_INSERT, /* M-[ */ 589148834Sstefanf /* 220 */ ED_INSERT, /* M-\ */ 590148834Sstefanf /* 221 */ ED_INSERT, /* M-] */ 591148834Sstefanf /* 222 */ ED_INSERT, /* M-^ */ 592148834Sstefanf /* 223 */ ED_INSERT, /* M-_ */ 593148834Sstefanf /* 224 */ ED_INSERT, /* M-` */ 594148834Sstefanf /* 225 */ ED_INSERT, /* M-a */ 595148834Sstefanf /* 226 */ ED_INSERT, /* M-b */ 596148834Sstefanf /* 227 */ ED_INSERT, /* M-c */ 597148834Sstefanf /* 228 */ ED_INSERT, /* M-d */ 598148834Sstefanf /* 229 */ ED_INSERT, /* M-e */ 599148834Sstefanf /* 230 */ ED_INSERT, /* M-f */ 600148834Sstefanf /* 231 */ ED_INSERT, /* M-g */ 601148834Sstefanf /* 232 */ ED_INSERT, /* M-h */ 602148834Sstefanf /* 233 */ ED_INSERT, /* M-i */ 603148834Sstefanf /* 234 */ ED_INSERT, /* M-j */ 604148834Sstefanf /* 235 */ ED_INSERT, /* M-k */ 605148834Sstefanf /* 236 */ ED_INSERT, /* M-l */ 606148834Sstefanf /* 237 */ ED_INSERT, /* M-m */ 607148834Sstefanf /* 238 */ ED_INSERT, /* M-n */ 608148834Sstefanf /* 239 */ ED_INSERT, /* M-o */ 609148834Sstefanf /* 240 */ ED_INSERT, /* M-p */ 610148834Sstefanf /* 241 */ ED_INSERT, /* M-q */ 611148834Sstefanf /* 242 */ ED_INSERT, /* M-r */ 612148834Sstefanf /* 243 */ ED_INSERT, /* M-s */ 613148834Sstefanf /* 244 */ ED_INSERT, /* M-t */ 614148834Sstefanf /* 245 */ ED_INSERT, /* M-u */ 615148834Sstefanf /* 246 */ ED_INSERT, /* M-v */ 616148834Sstefanf /* 247 */ ED_INSERT, /* M-w */ 617148834Sstefanf /* 248 */ ED_INSERT, /* M-x */ 618148834Sstefanf /* 249 */ ED_INSERT, /* M-y */ 619148834Sstefanf /* 250 */ ED_INSERT, /* M-z */ 620148834Sstefanf /* 251 */ ED_INSERT, /* M-{ */ 621148834Sstefanf /* 252 */ ED_INSERT, /* M-| */ 622148834Sstefanf /* 253 */ ED_INSERT, /* M-} */ 623148834Sstefanf /* 254 */ ED_INSERT, /* M-~ */ 624148834Sstefanf /* 255 */ ED_INSERT /* M-^? */ 6251573Srgrimes}; 6261573Srgrimes 62784260Sobrienprivate const el_action_t el_map_vi_command[] = { 62884260Sobrien /* 0 */ ED_UNASSIGNED, /* ^@ */ 62984260Sobrien /* 1 */ ED_MOVE_TO_BEG, /* ^A */ 63084260Sobrien /* 2 */ ED_UNASSIGNED, /* ^B */ 63184260Sobrien /* 3 */ ED_TTY_SIGINT, /* ^C */ 63284260Sobrien /* 4 */ ED_UNASSIGNED, /* ^D */ 63384260Sobrien /* 5 */ ED_MOVE_TO_END, /* ^E */ 63484260Sobrien /* 6 */ ED_UNASSIGNED, /* ^F */ 63584260Sobrien /* 7 */ ED_UNASSIGNED, /* ^G */ 636148834Sstefanf /* 8 */ ED_DELETE_PREV_CHAR, /* ^H */ 63784260Sobrien /* 9 */ ED_UNASSIGNED, /* ^I */ 63884260Sobrien /* 10 */ ED_NEWLINE, /* ^J */ 63984260Sobrien /* 11 */ ED_KILL_LINE, /* ^K */ 64084260Sobrien /* 12 */ ED_CLEAR_SCREEN, /* ^L */ 64184260Sobrien /* 13 */ ED_NEWLINE, /* ^M */ 64284260Sobrien /* 14 */ ED_NEXT_HISTORY, /* ^N */ 64384260Sobrien /* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */ 64484260Sobrien /* 16 */ ED_PREV_HISTORY, /* ^P */ 64584260Sobrien /* 17 */ ED_TTY_START_OUTPUT, /* ^Q */ 64684260Sobrien /* 18 */ ED_REDISPLAY, /* ^R */ 64784260Sobrien /* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */ 64884260Sobrien /* 20 */ ED_UNASSIGNED, /* ^T */ 64984260Sobrien /* 21 */ VI_KILL_LINE_PREV, /* ^U */ 65084260Sobrien /* 22 */ ED_UNASSIGNED, /* ^V */ 65184260Sobrien /* 23 */ ED_DELETE_PREV_WORD, /* ^W */ 65284260Sobrien /* 24 */ ED_UNASSIGNED, /* ^X */ 65384260Sobrien /* 25 */ ED_UNASSIGNED, /* ^Y */ 65484260Sobrien /* 26 */ ED_UNASSIGNED, /* ^Z */ 65584260Sobrien /* 27 */ EM_META_NEXT, /* ^[ */ 65684260Sobrien /* 28 */ ED_TTY_SIGQUIT, /* ^\ */ 65784260Sobrien /* 29 */ ED_UNASSIGNED, /* ^] */ 65884260Sobrien /* 30 */ ED_UNASSIGNED, /* ^^ */ 65984260Sobrien /* 31 */ ED_UNASSIGNED, /* ^_ */ 66084260Sobrien /* 32 */ ED_NEXT_CHAR, /* SPACE */ 66184260Sobrien /* 33 */ ED_UNASSIGNED, /* ! */ 66284260Sobrien /* 34 */ ED_UNASSIGNED, /* " */ 663148834Sstefanf /* 35 */ VI_COMMENT_OUT, /* # */ 66484260Sobrien /* 36 */ ED_MOVE_TO_END, /* $ */ 665148834Sstefanf /* 37 */ VI_MATCH, /* % */ 66684260Sobrien /* 38 */ ED_UNASSIGNED, /* & */ 66784260Sobrien /* 39 */ ED_UNASSIGNED, /* ' */ 66884260Sobrien /* 40 */ ED_UNASSIGNED, /* ( */ 66984260Sobrien /* 41 */ ED_UNASSIGNED, /* ) */ 67084260Sobrien /* 42 */ ED_UNASSIGNED, /* * */ 67184260Sobrien /* 43 */ ED_NEXT_HISTORY, /* + */ 67284260Sobrien /* 44 */ VI_REPEAT_PREV_CHAR, /* , */ 67384260Sobrien /* 45 */ ED_PREV_HISTORY, /* - */ 674148834Sstefanf /* 46 */ VI_REDO, /* . */ 67584260Sobrien /* 47 */ VI_SEARCH_PREV, /* / */ 67684260Sobrien /* 48 */ VI_ZERO, /* 0 */ 67784260Sobrien /* 49 */ ED_ARGUMENT_DIGIT, /* 1 */ 67884260Sobrien /* 50 */ ED_ARGUMENT_DIGIT, /* 2 */ 67984260Sobrien /* 51 */ ED_ARGUMENT_DIGIT, /* 3 */ 68084260Sobrien /* 52 */ ED_ARGUMENT_DIGIT, /* 4 */ 68184260Sobrien /* 53 */ ED_ARGUMENT_DIGIT, /* 5 */ 68284260Sobrien /* 54 */ ED_ARGUMENT_DIGIT, /* 6 */ 68384260Sobrien /* 55 */ ED_ARGUMENT_DIGIT, /* 7 */ 68484260Sobrien /* 56 */ ED_ARGUMENT_DIGIT, /* 8 */ 68584260Sobrien /* 57 */ ED_ARGUMENT_DIGIT, /* 9 */ 68684260Sobrien /* 58 */ ED_COMMAND, /* : */ 68784260Sobrien /* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */ 68884260Sobrien /* 60 */ ED_UNASSIGNED, /* < */ 68984260Sobrien /* 61 */ ED_UNASSIGNED, /* = */ 69084260Sobrien /* 62 */ ED_UNASSIGNED, /* > */ 69184260Sobrien /* 63 */ VI_SEARCH_NEXT, /* ? */ 692148834Sstefanf /* 64 */ VI_ALIAS, /* @ */ 69384260Sobrien /* 65 */ VI_ADD_AT_EOL, /* A */ 694148834Sstefanf /* 66 */ VI_PREV_BIG_WORD, /* B */ 69584260Sobrien /* 67 */ VI_CHANGE_TO_EOL, /* C */ 69684260Sobrien /* 68 */ ED_KILL_LINE, /* D */ 697148834Sstefanf /* 69 */ VI_END_BIG_WORD, /* E */ 69884260Sobrien /* 70 */ VI_PREV_CHAR, /* F */ 699148834Sstefanf /* 71 */ VI_TO_HISTORY_LINE, /* G */ 70084260Sobrien /* 72 */ ED_UNASSIGNED, /* H */ 70184260Sobrien /* 73 */ VI_INSERT_AT_BOL, /* I */ 70284260Sobrien /* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */ 70384260Sobrien /* 75 */ ED_SEARCH_PREV_HISTORY, /* K */ 70484260Sobrien /* 76 */ ED_UNASSIGNED, /* L */ 70584260Sobrien /* 77 */ ED_UNASSIGNED, /* M */ 70684260Sobrien /* 78 */ VI_REPEAT_SEARCH_PREV, /* N */ 70784260Sobrien /* 79 */ ED_SEQUENCE_LEAD_IN, /* O */ 70884260Sobrien /* 80 */ VI_PASTE_PREV, /* P */ 70984260Sobrien /* 81 */ ED_UNASSIGNED, /* Q */ 71084260Sobrien /* 82 */ VI_REPLACE_MODE, /* R */ 71184260Sobrien /* 83 */ VI_SUBSTITUTE_LINE, /* S */ 71284260Sobrien /* 84 */ VI_TO_PREV_CHAR, /* T */ 71384260Sobrien /* 85 */ VI_UNDO_LINE, /* U */ 71484260Sobrien /* 86 */ ED_UNASSIGNED, /* V */ 715148834Sstefanf /* 87 */ VI_NEXT_BIG_WORD, /* W */ 71684260Sobrien /* 88 */ ED_DELETE_PREV_CHAR, /* X */ 717148834Sstefanf /* 89 */ VI_YANK_END, /* Y */ 71884260Sobrien /* 90 */ ED_UNASSIGNED, /* Z */ 71984260Sobrien /* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */ 72084260Sobrien /* 92 */ ED_UNASSIGNED, /* \ */ 72184260Sobrien /* 93 */ ED_UNASSIGNED, /* ] */ 72284260Sobrien /* 94 */ ED_MOVE_TO_BEG, /* ^ */ 723148834Sstefanf /* 95 */ VI_HISTORY_WORD, /* _ */ 72484260Sobrien /* 96 */ ED_UNASSIGNED, /* ` */ 72584260Sobrien /* 97 */ VI_ADD, /* a */ 72684260Sobrien /* 98 */ VI_PREV_WORD, /* b */ 72784260Sobrien /* 99 */ VI_CHANGE_META, /* c */ 72884260Sobrien /* 100 */ VI_DELETE_META, /* d */ 72984260Sobrien /* 101 */ VI_END_WORD, /* e */ 73084260Sobrien /* 102 */ VI_NEXT_CHAR, /* f */ 73184260Sobrien /* 103 */ ED_UNASSIGNED, /* g */ 73284260Sobrien /* 104 */ ED_PREV_CHAR, /* h */ 73384260Sobrien /* 105 */ VI_INSERT, /* i */ 73484260Sobrien /* 106 */ ED_NEXT_HISTORY, /* j */ 73584260Sobrien /* 107 */ ED_PREV_HISTORY, /* k */ 73684260Sobrien /* 108 */ ED_NEXT_CHAR, /* l */ 73784260Sobrien /* 109 */ ED_UNASSIGNED, /* m */ 73884260Sobrien /* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */ 73984260Sobrien /* 111 */ ED_UNASSIGNED, /* o */ 74084260Sobrien /* 112 */ VI_PASTE_NEXT, /* p */ 74184260Sobrien /* 113 */ ED_UNASSIGNED, /* q */ 74284260Sobrien /* 114 */ VI_REPLACE_CHAR, /* r */ 74384260Sobrien /* 115 */ VI_SUBSTITUTE_CHAR, /* s */ 74484260Sobrien /* 116 */ VI_TO_NEXT_CHAR, /* t */ 74584260Sobrien /* 117 */ VI_UNDO, /* u */ 746148834Sstefanf /* 118 */ VI_HISTEDIT, /* v */ 74784260Sobrien /* 119 */ VI_NEXT_WORD, /* w */ 74884260Sobrien /* 120 */ ED_DELETE_NEXT_CHAR, /* x */ 749148834Sstefanf /* 121 */ VI_YANK, /* y */ 75084260Sobrien /* 122 */ ED_UNASSIGNED, /* z */ 75184260Sobrien /* 123 */ ED_UNASSIGNED, /* { */ 752148834Sstefanf /* 124 */ VI_TO_COLUMN, /* | */ 75384260Sobrien /* 125 */ ED_UNASSIGNED, /* } */ 75484260Sobrien /* 126 */ VI_CHANGE_CASE, /* ~ */ 75584260Sobrien /* 127 */ ED_DELETE_PREV_CHAR, /* ^? */ 75684260Sobrien /* 128 */ ED_UNASSIGNED, /* M-^@ */ 75784260Sobrien /* 129 */ ED_UNASSIGNED, /* M-^A */ 75884260Sobrien /* 130 */ ED_UNASSIGNED, /* M-^B */ 75984260Sobrien /* 131 */ ED_UNASSIGNED, /* M-^C */ 76084260Sobrien /* 132 */ ED_UNASSIGNED, /* M-^D */ 76184260Sobrien /* 133 */ ED_UNASSIGNED, /* M-^E */ 76284260Sobrien /* 134 */ ED_UNASSIGNED, /* M-^F */ 76384260Sobrien /* 135 */ ED_UNASSIGNED, /* M-^G */ 76484260Sobrien /* 136 */ ED_UNASSIGNED, /* M-^H */ 76584260Sobrien /* 137 */ ED_UNASSIGNED, /* M-^I */ 76684260Sobrien /* 138 */ ED_UNASSIGNED, /* M-^J */ 76784260Sobrien /* 139 */ ED_UNASSIGNED, /* M-^K */ 76884260Sobrien /* 140 */ ED_UNASSIGNED, /* M-^L */ 76984260Sobrien /* 141 */ ED_UNASSIGNED, /* M-^M */ 77084260Sobrien /* 142 */ ED_UNASSIGNED, /* M-^N */ 77184260Sobrien /* 143 */ ED_UNASSIGNED, /* M-^O */ 77284260Sobrien /* 144 */ ED_UNASSIGNED, /* M-^P */ 77384260Sobrien /* 145 */ ED_UNASSIGNED, /* M-^Q */ 77484260Sobrien /* 146 */ ED_UNASSIGNED, /* M-^R */ 77584260Sobrien /* 147 */ ED_UNASSIGNED, /* M-^S */ 77684260Sobrien /* 148 */ ED_UNASSIGNED, /* M-^T */ 77784260Sobrien /* 149 */ ED_UNASSIGNED, /* M-^U */ 77884260Sobrien /* 150 */ ED_UNASSIGNED, /* M-^V */ 77984260Sobrien /* 151 */ ED_UNASSIGNED, /* M-^W */ 78084260Sobrien /* 152 */ ED_UNASSIGNED, /* M-^X */ 78184260Sobrien /* 153 */ ED_UNASSIGNED, /* M-^Y */ 78284260Sobrien /* 154 */ ED_UNASSIGNED, /* M-^Z */ 78384260Sobrien /* 155 */ ED_UNASSIGNED, /* M-^[ */ 78484260Sobrien /* 156 */ ED_UNASSIGNED, /* M-^\ */ 78584260Sobrien /* 157 */ ED_UNASSIGNED, /* M-^] */ 78684260Sobrien /* 158 */ ED_UNASSIGNED, /* M-^^ */ 78784260Sobrien /* 159 */ ED_UNASSIGNED, /* M-^_ */ 78884260Sobrien /* 160 */ ED_UNASSIGNED, /* M-SPACE */ 78984260Sobrien /* 161 */ ED_UNASSIGNED, /* M-! */ 79084260Sobrien /* 162 */ ED_UNASSIGNED, /* M-" */ 79184260Sobrien /* 163 */ ED_UNASSIGNED, /* M-# */ 79284260Sobrien /* 164 */ ED_UNASSIGNED, /* M-$ */ 79384260Sobrien /* 165 */ ED_UNASSIGNED, /* M-% */ 79484260Sobrien /* 166 */ ED_UNASSIGNED, /* M-& */ 79584260Sobrien /* 167 */ ED_UNASSIGNED, /* M-' */ 79684260Sobrien /* 168 */ ED_UNASSIGNED, /* M-( */ 79784260Sobrien /* 169 */ ED_UNASSIGNED, /* M-) */ 79884260Sobrien /* 170 */ ED_UNASSIGNED, /* M-* */ 79984260Sobrien /* 171 */ ED_UNASSIGNED, /* M-+ */ 80084260Sobrien /* 172 */ ED_UNASSIGNED, /* M-, */ 80184260Sobrien /* 173 */ ED_UNASSIGNED, /* M-- */ 80284260Sobrien /* 174 */ ED_UNASSIGNED, /* M-. */ 80384260Sobrien /* 175 */ ED_UNASSIGNED, /* M-/ */ 80484260Sobrien /* 176 */ ED_UNASSIGNED, /* M-0 */ 80584260Sobrien /* 177 */ ED_UNASSIGNED, /* M-1 */ 80684260Sobrien /* 178 */ ED_UNASSIGNED, /* M-2 */ 80784260Sobrien /* 179 */ ED_UNASSIGNED, /* M-3 */ 80884260Sobrien /* 180 */ ED_UNASSIGNED, /* M-4 */ 80984260Sobrien /* 181 */ ED_UNASSIGNED, /* M-5 */ 81084260Sobrien /* 182 */ ED_UNASSIGNED, /* M-6 */ 81184260Sobrien /* 183 */ ED_UNASSIGNED, /* M-7 */ 81284260Sobrien /* 184 */ ED_UNASSIGNED, /* M-8 */ 81384260Sobrien /* 185 */ ED_UNASSIGNED, /* M-9 */ 81484260Sobrien /* 186 */ ED_UNASSIGNED, /* M-: */ 81584260Sobrien /* 187 */ ED_UNASSIGNED, /* M-; */ 81684260Sobrien /* 188 */ ED_UNASSIGNED, /* M-< */ 81784260Sobrien /* 189 */ ED_UNASSIGNED, /* M-= */ 81884260Sobrien /* 190 */ ED_UNASSIGNED, /* M-> */ 81984260Sobrien /* 191 */ ED_UNASSIGNED, /* M-? */ 82084260Sobrien /* 192 */ ED_UNASSIGNED, /* M-@ */ 82184260Sobrien /* 193 */ ED_UNASSIGNED, /* M-A */ 82284260Sobrien /* 194 */ ED_UNASSIGNED, /* M-B */ 82384260Sobrien /* 195 */ ED_UNASSIGNED, /* M-C */ 82484260Sobrien /* 196 */ ED_UNASSIGNED, /* M-D */ 82584260Sobrien /* 197 */ ED_UNASSIGNED, /* M-E */ 82684260Sobrien /* 198 */ ED_UNASSIGNED, /* M-F */ 82784260Sobrien /* 199 */ ED_UNASSIGNED, /* M-G */ 82884260Sobrien /* 200 */ ED_UNASSIGNED, /* M-H */ 82984260Sobrien /* 201 */ ED_UNASSIGNED, /* M-I */ 83084260Sobrien /* 202 */ ED_UNASSIGNED, /* M-J */ 83184260Sobrien /* 203 */ ED_UNASSIGNED, /* M-K */ 83284260Sobrien /* 204 */ ED_UNASSIGNED, /* M-L */ 83384260Sobrien /* 205 */ ED_UNASSIGNED, /* M-M */ 83484260Sobrien /* 206 */ ED_UNASSIGNED, /* M-N */ 83584260Sobrien /* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */ 83684260Sobrien /* 208 */ ED_UNASSIGNED, /* M-P */ 83784260Sobrien /* 209 */ ED_UNASSIGNED, /* M-Q */ 83884260Sobrien /* 210 */ ED_UNASSIGNED, /* M-R */ 83984260Sobrien /* 211 */ ED_UNASSIGNED, /* M-S */ 84084260Sobrien /* 212 */ ED_UNASSIGNED, /* M-T */ 84184260Sobrien /* 213 */ ED_UNASSIGNED, /* M-U */ 84284260Sobrien /* 214 */ ED_UNASSIGNED, /* M-V */ 84384260Sobrien /* 215 */ ED_UNASSIGNED, /* M-W */ 84484260Sobrien /* 216 */ ED_UNASSIGNED, /* M-X */ 84584260Sobrien /* 217 */ ED_UNASSIGNED, /* M-Y */ 84684260Sobrien /* 218 */ ED_UNASSIGNED, /* M-Z */ 84784260Sobrien /* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */ 84884260Sobrien /* 220 */ ED_UNASSIGNED, /* M-\ */ 84984260Sobrien /* 221 */ ED_UNASSIGNED, /* M-] */ 85084260Sobrien /* 222 */ ED_UNASSIGNED, /* M-^ */ 85184260Sobrien /* 223 */ ED_UNASSIGNED, /* M-_ */ 85284260Sobrien /* 224 */ ED_UNASSIGNED, /* M-` */ 85384260Sobrien /* 225 */ ED_UNASSIGNED, /* M-a */ 85484260Sobrien /* 226 */ ED_UNASSIGNED, /* M-b */ 85584260Sobrien /* 227 */ ED_UNASSIGNED, /* M-c */ 85684260Sobrien /* 228 */ ED_UNASSIGNED, /* M-d */ 85784260Sobrien /* 229 */ ED_UNASSIGNED, /* M-e */ 85884260Sobrien /* 230 */ ED_UNASSIGNED, /* M-f */ 85984260Sobrien /* 231 */ ED_UNASSIGNED, /* M-g */ 86084260Sobrien /* 232 */ ED_UNASSIGNED, /* M-h */ 86184260Sobrien /* 233 */ ED_UNASSIGNED, /* M-i */ 86284260Sobrien /* 234 */ ED_UNASSIGNED, /* M-j */ 86384260Sobrien /* 235 */ ED_UNASSIGNED, /* M-k */ 86484260Sobrien /* 236 */ ED_UNASSIGNED, /* M-l */ 86584260Sobrien /* 237 */ ED_UNASSIGNED, /* M-m */ 86684260Sobrien /* 238 */ ED_UNASSIGNED, /* M-n */ 86784260Sobrien /* 239 */ ED_UNASSIGNED, /* M-o */ 86884260Sobrien /* 240 */ ED_UNASSIGNED, /* M-p */ 86984260Sobrien /* 241 */ ED_UNASSIGNED, /* M-q */ 87084260Sobrien /* 242 */ ED_UNASSIGNED, /* M-r */ 87184260Sobrien /* 243 */ ED_UNASSIGNED, /* M-s */ 87284260Sobrien /* 244 */ ED_UNASSIGNED, /* M-t */ 87384260Sobrien /* 245 */ ED_UNASSIGNED, /* M-u */ 87484260Sobrien /* 246 */ ED_UNASSIGNED, /* M-v */ 87584260Sobrien /* 247 */ ED_UNASSIGNED, /* M-w */ 87684260Sobrien /* 248 */ ED_UNASSIGNED, /* M-x */ 87784260Sobrien /* 249 */ ED_UNASSIGNED, /* M-y */ 87884260Sobrien /* 250 */ ED_UNASSIGNED, /* M-z */ 87984260Sobrien /* 251 */ ED_UNASSIGNED, /* M-{ */ 88084260Sobrien /* 252 */ ED_UNASSIGNED, /* M-| */ 88184260Sobrien /* 253 */ ED_UNASSIGNED, /* M-} */ 88284260Sobrien /* 254 */ ED_UNASSIGNED, /* M-~ */ 88384260Sobrien /* 255 */ ED_UNASSIGNED /* M-^? */ 8841573Srgrimes}; 8851573Srgrimes 8861573Srgrimes 8871573Srgrimes/* map_init(): 8881573Srgrimes * Initialize and allocate the maps 8891573Srgrimes */ 8901573Srgrimesprotected int 89184260Sobrienmap_init(EditLine *el) 8921573Srgrimes{ 8938870Srgrimes 89484260Sobrien /* 89584260Sobrien * Make sure those are correct before starting. 89684260Sobrien */ 8971573Srgrimes#ifdef MAP_DEBUG 89884260Sobrien if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t)) 89984260Sobrien EL_ABORT((el->errfile, "Emacs map incorrect\n")); 90084260Sobrien if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t)) 90184260Sobrien EL_ABORT((el->errfile, "Vi command map incorrect\n")); 90284260Sobrien if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t)) 90384260Sobrien EL_ABORT((el->errfile, "Vi insert map incorrect\n")); 9041573Srgrimes#endif 9051573Srgrimes 90684260Sobrien el->el_map.alt = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS); 90784260Sobrien if (el->el_map.alt == NULL) 90884260Sobrien return (-1); 90984260Sobrien el->el_map.key = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS); 91084260Sobrien if (el->el_map.key == NULL) 91184260Sobrien return (-1); 91284260Sobrien el->el_map.emacs = el_map_emacs; 91384260Sobrien el->el_map.vic = el_map_vi_command; 91484260Sobrien el->el_map.vii = el_map_vi_insert; 91584260Sobrien el->el_map.help = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) * 916150947Sstefanf EL_NUM_FCNS); 91784260Sobrien if (el->el_map.help == NULL) 91884260Sobrien return (-1); 91984260Sobrien (void) memcpy(el->el_map.help, help__get(), 920150947Sstefanf sizeof(el_bindings_t) * EL_NUM_FCNS); 92184260Sobrien el->el_map.func = (el_func_t *)el_malloc(sizeof(el_func_t) * 92284260Sobrien EL_NUM_FCNS); 92384260Sobrien if (el->el_map.func == NULL) 92484260Sobrien return (-1); 92584260Sobrien memcpy(el->el_map.func, func__get(), sizeof(el_func_t) * EL_NUM_FCNS); 92684260Sobrien el->el_map.nfunc = EL_NUM_FCNS; 9271573Srgrimes 9281573Srgrimes#ifdef VIDEFAULT 92984260Sobrien map_init_vi(el); 9301573Srgrimes#else 93184260Sobrien map_init_emacs(el); 9321573Srgrimes#endif /* VIDEFAULT */ 93384260Sobrien return (0); 9341573Srgrimes} 9351573Srgrimes 9361573Srgrimes 9371573Srgrimes/* map_end(): 9381573Srgrimes * Free the space taken by the editor maps 9391573Srgrimes */ 9401573Srgrimesprotected void 94184260Sobrienmap_end(EditLine *el) 9421573Srgrimes{ 94384260Sobrien 94484260Sobrien el_free((ptr_t) el->el_map.alt); 94584260Sobrien el->el_map.alt = NULL; 94684260Sobrien el_free((ptr_t) el->el_map.key); 94784260Sobrien el->el_map.key = NULL; 94884260Sobrien el->el_map.emacs = NULL; 94984260Sobrien el->el_map.vic = NULL; 95084260Sobrien el->el_map.vii = NULL; 95184260Sobrien el_free((ptr_t) el->el_map.help); 95284260Sobrien el->el_map.help = NULL; 95384260Sobrien el_free((ptr_t) el->el_map.func); 95484260Sobrien el->el_map.func = NULL; 9551573Srgrimes} 9561573Srgrimes 9571573Srgrimes 9581573Srgrimes/* map_init_nls(): 9591573Srgrimes * Find all the printable keys and bind them to self insert 9601573Srgrimes */ 9611573Srgrimesprivate void 96284260Sobrienmap_init_nls(EditLine *el) 9631573Srgrimes{ 96484260Sobrien int i; 9651573Srgrimes 96684260Sobrien el_action_t *map = el->el_map.key; 96784260Sobrien 96884260Sobrien for (i = 0200; i <= 0377; i++) 96984260Sobrien if (isprint(i)) 97084260Sobrien map[i] = ED_INSERT; 9711573Srgrimes} 9721573Srgrimes 9731573Srgrimes 9741573Srgrimes/* map_init_meta(): 9751573Srgrimes * Bind all the meta keys to the appropriate ESC-<key> sequence 9761573Srgrimes */ 9771573Srgrimesprivate void 97884260Sobrienmap_init_meta(EditLine *el) 9791573Srgrimes{ 98084260Sobrien char buf[3]; 98184260Sobrien int i; 98284260Sobrien el_action_t *map = el->el_map.key; 98384260Sobrien el_action_t *alt = el->el_map.alt; 9841573Srgrimes 98584260Sobrien for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++) 98684260Sobrien continue; 9871573Srgrimes 9881573Srgrimes if (i > 0377) { 98984260Sobrien for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++) 99084260Sobrien continue; 99184260Sobrien if (i > 0377) { 99284260Sobrien i = 033; 99384260Sobrien if (el->el_map.type == MAP_VI) 99484260Sobrien map = alt; 99584260Sobrien } else 99684260Sobrien map = alt; 9971573Srgrimes } 99884260Sobrien buf[0] = (char) i; 99984260Sobrien buf[2] = 0; 100084260Sobrien for (i = 0200; i <= 0377; i++) 100184260Sobrien switch (map[i]) { 100284260Sobrien case ED_INSERT: 100384260Sobrien case ED_UNASSIGNED: 100484260Sobrien case ED_SEQUENCE_LEAD_IN: 100584260Sobrien break; 100684260Sobrien default: 100784260Sobrien buf[1] = i & 0177; 100884260Sobrien key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD); 100984260Sobrien break; 101084260Sobrien } 101184260Sobrien map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN; 10121573Srgrimes} 10131573Srgrimes 10141573Srgrimes 10151573Srgrimes/* map_init_vi(): 10161573Srgrimes * Initialize the vi bindings 10171573Srgrimes */ 10181573Srgrimesprotected void 101984260Sobrienmap_init_vi(EditLine *el) 10201573Srgrimes{ 102184260Sobrien int i; 102284260Sobrien el_action_t *key = el->el_map.key; 102384260Sobrien el_action_t *alt = el->el_map.alt; 102484260Sobrien const el_action_t *vii = el->el_map.vii; 102584260Sobrien const el_action_t *vic = el->el_map.vic; 10261573Srgrimes 102784260Sobrien el->el_map.type = MAP_VI; 102884260Sobrien el->el_map.current = el->el_map.key; 10291573Srgrimes 103084260Sobrien key_reset(el); 10311573Srgrimes 103284260Sobrien for (i = 0; i < N_KEYS; i++) { 103384260Sobrien key[i] = vii[i]; 103484260Sobrien alt[i] = vic[i]; 103584260Sobrien } 10361573Srgrimes 103784260Sobrien map_init_meta(el); 10381573Srgrimes map_init_nls(el); 10391573Srgrimes 104084260Sobrien tty_bind_char(el, 1); 104184260Sobrien term_bind_arrow(el); 10421573Srgrimes} 10431573Srgrimes 10441573Srgrimes 10451573Srgrimes/* map_init_emacs(): 10461573Srgrimes * Initialize the emacs bindings 10471573Srgrimes */ 10481573Srgrimesprotected void 104984260Sobrienmap_init_emacs(EditLine *el) 10501573Srgrimes{ 105184260Sobrien int i; 105284260Sobrien char buf[3]; 105384260Sobrien el_action_t *key = el->el_map.key; 105484260Sobrien el_action_t *alt = el->el_map.alt; 105584260Sobrien const el_action_t *emacs = el->el_map.emacs; 10561573Srgrimes 105784260Sobrien el->el_map.type = MAP_EMACS; 105884260Sobrien el->el_map.current = el->el_map.key; 105984260Sobrien key_reset(el); 10601573Srgrimes 106184260Sobrien for (i = 0; i < N_KEYS; i++) { 106284260Sobrien key[i] = emacs[i]; 106384260Sobrien alt[i] = ED_UNASSIGNED; 106484260Sobrien } 10651573Srgrimes 106684260Sobrien map_init_meta(el); 10671573Srgrimes map_init_nls(el); 10681573Srgrimes 106984260Sobrien buf[0] = CONTROL('X'); 107084260Sobrien buf[1] = CONTROL('X'); 107184260Sobrien buf[2] = 0; 107284260Sobrien key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD); 10738870Srgrimes 107484260Sobrien tty_bind_char(el, 1); 107584260Sobrien term_bind_arrow(el); 10761573Srgrimes} 10771573Srgrimes 10781573Srgrimes 10791573Srgrimes/* map_set_editor(): 10808870Srgrimes * Set the editor 10811573Srgrimes */ 10821573Srgrimesprotected int 108384260Sobrienmap_set_editor(EditLine *el, char *editor) 10841573Srgrimes{ 108584260Sobrien 108684260Sobrien if (strcmp(editor, "emacs") == 0) { 108784260Sobrien map_init_emacs(el); 108884260Sobrien return (0); 108984260Sobrien } 109084260Sobrien if (strcmp(editor, "vi") == 0) { 109184260Sobrien map_init_vi(el); 109284260Sobrien return (0); 109384260Sobrien } 109484260Sobrien return (-1); 10951573Srgrimes} 10961573Srgrimes 10971573Srgrimes 109884260Sobrien/* map_get_editor(): 109984260Sobrien * Retrieve the editor 110084260Sobrien */ 110184260Sobrienprotected int 110284260Sobrienmap_get_editor(EditLine *el, const char **editor) 110384260Sobrien{ 110484260Sobrien 110584260Sobrien if (editor == NULL) 110684260Sobrien return (-1); 110784260Sobrien switch (el->el_map.type) { 110884260Sobrien case MAP_EMACS: 110984260Sobrien *editor = "emacs"; 111084260Sobrien return (0); 111184260Sobrien case MAP_VI: 111284260Sobrien *editor = "vi"; 111384260Sobrien return (0); 111484260Sobrien } 111584260Sobrien return (-1); 111684260Sobrien} 111784260Sobrien 111884260Sobrien 11191573Srgrimes/* map_print_key(): 11201573Srgrimes * Print the function description for 1 key 11211573Srgrimes */ 11221573Srgrimesprivate void 1123148834Sstefanfmap_print_key(EditLine *el, el_action_t *map, const char *in) 11241573Srgrimes{ 112584260Sobrien char outbuf[EL_BUFSIZ]; 1126150947Sstefanf el_bindings_t *bp, *ep; 11271573Srgrimes 112884260Sobrien if (in[0] == '\0' || in[1] == '\0') { 1129167457Sstefanf (void) key__decode_str(in, outbuf, sizeof(outbuf), ""); 1130150947Sstefanf ep = &el->el_map.help[el->el_map.nfunc]; 1131150947Sstefanf for (bp = el->el_map.help; bp < ep; bp++) 113284260Sobrien if (bp->func == map[(unsigned char) *in]) { 113384260Sobrien (void) fprintf(el->el_outfile, 113484260Sobrien "%s\t->\t%s\n", outbuf, bp->name); 113584260Sobrien return; 113684260Sobrien } 113784260Sobrien } else 113884260Sobrien key_print(el, in); 11391573Srgrimes} 11401573Srgrimes 11411573Srgrimes 11421573Srgrimes/* map_print_some_keys(): 11431573Srgrimes * Print keys from first to last 11441573Srgrimes */ 11451573Srgrimesprivate void 114684260Sobrienmap_print_some_keys(EditLine *el, el_action_t *map, int first, int last) 11471573Srgrimes{ 1148150947Sstefanf el_bindings_t *bp, *ep; 114984260Sobrien char firstbuf[2], lastbuf[2]; 115084260Sobrien char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ]; 11511573Srgrimes 115284260Sobrien firstbuf[0] = first; 115384260Sobrien firstbuf[1] = 0; 115484260Sobrien lastbuf[0] = last; 115584260Sobrien lastbuf[1] = 0; 115684260Sobrien if (map[first] == ED_UNASSIGNED) { 1157167457Sstefanf if (first == last) { 1158167457Sstefanf (void) key__decode_str(firstbuf, unparsbuf, 1159167457Sstefanf sizeof(unparsbuf), STRQQ); 116084260Sobrien (void) fprintf(el->el_outfile, 1161167457Sstefanf "%-15s-> is undefined\n", unparsbuf); 1162167457Sstefanf } 116384260Sobrien return; 116484260Sobrien } 1165150947Sstefanf ep = &el->el_map.help[el->el_map.nfunc]; 1166150947Sstefanf for (bp = el->el_map.help; bp < ep; bp++) { 116784260Sobrien if (bp->func == map[first]) { 116884260Sobrien if (first == last) { 1169167457Sstefanf (void) key__decode_str(firstbuf, unparsbuf, 1170167457Sstefanf sizeof(unparsbuf), STRQQ); 117184260Sobrien (void) fprintf(el->el_outfile, "%-15s-> %s\n", 1172167457Sstefanf unparsbuf, bp->name); 117384260Sobrien } else { 1174167457Sstefanf (void) key__decode_str(firstbuf, unparsbuf, 1175167457Sstefanf sizeof(unparsbuf), STRQQ); 1176167457Sstefanf (void) key__decode_str(lastbuf, extrabuf, 1177167457Sstefanf sizeof(extrabuf), STRQQ); 117884260Sobrien (void) fprintf(el->el_outfile, 117984260Sobrien "%-4s to %-7s-> %s\n", 1180167457Sstefanf unparsbuf, extrabuf, bp->name); 118184260Sobrien } 118284260Sobrien return; 118384260Sobrien } 118484260Sobrien } 118584260Sobrien#ifdef MAP_DEBUG 118684260Sobrien if (map == el->el_map.key) { 1187167457Sstefanf (void) key__decode_str(firstbuf, unparsbuf, 1188167457Sstefanf sizeof(unparsbuf), STRQQ); 118984260Sobrien (void) fprintf(el->el_outfile, 1190167457Sstefanf "BUG!!! %s isn't bound to anything.\n", unparsbuf); 119184260Sobrien (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n", 119284260Sobrien first, el->el_map.key[first]); 119384260Sobrien } else { 1194167457Sstefanf (void) key__decode_str(firstbuf, unparsbuf, 1195167457Sstefanf sizeof(unparsbuf), STRQQ); 119684260Sobrien (void) fprintf(el->el_outfile, 1197167457Sstefanf "BUG!!! %s isn't bound to anything.\n", unparsbuf); 119884260Sobrien (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n", 119984260Sobrien first, el->el_map.alt[first]); 12001573Srgrimes } 12011573Srgrimes#endif 120284260Sobrien EL_ABORT((el->el_errfile, "Error printing keys\n")); 12031573Srgrimes} 12041573Srgrimes 12051573Srgrimes 12061573Srgrimes/* map_print_all_keys(): 12071573Srgrimes * Print the function description for all keys. 12081573Srgrimes */ 12091573Srgrimesprivate void 121084260Sobrienmap_print_all_keys(EditLine *el) 12111573Srgrimes{ 121284260Sobrien int prev, i; 12131573Srgrimes 121484260Sobrien (void) fprintf(el->el_outfile, "Standard key bindings\n"); 121584260Sobrien prev = 0; 121684260Sobrien for (i = 0; i < N_KEYS; i++) { 121784260Sobrien if (el->el_map.key[prev] == el->el_map.key[i]) 121884260Sobrien continue; 121984260Sobrien map_print_some_keys(el, el->el_map.key, prev, i - 1); 122084260Sobrien prev = i; 122184260Sobrien } 12221573Srgrimes map_print_some_keys(el, el->el_map.key, prev, i - 1); 12231573Srgrimes 122484260Sobrien (void) fprintf(el->el_outfile, "Alternative key bindings\n"); 122584260Sobrien prev = 0; 122684260Sobrien for (i = 0; i < N_KEYS; i++) { 122784260Sobrien if (el->el_map.alt[prev] == el->el_map.alt[i]) 122884260Sobrien continue; 122984260Sobrien map_print_some_keys(el, el->el_map.alt, prev, i - 1); 123084260Sobrien prev = i; 123184260Sobrien } 12321573Srgrimes map_print_some_keys(el, el->el_map.alt, prev, i - 1); 12331573Srgrimes 123484260Sobrien (void) fprintf(el->el_outfile, "Multi-character bindings\n"); 123584260Sobrien key_print(el, ""); 123684260Sobrien (void) fprintf(el->el_outfile, "Arrow key bindings\n"); 123784260Sobrien term_print_arrow(el, ""); 12381573Srgrimes} 12391573Srgrimes 12401573Srgrimes 12411573Srgrimes/* map_bind(): 12421573Srgrimes * Add/remove/change bindings 12431573Srgrimes */ 12441573Srgrimesprotected int 1245148834Sstefanfmap_bind(EditLine *el, int argc, const char **argv) 12461573Srgrimes{ 124784260Sobrien el_action_t *map; 124884260Sobrien int ntype, rem; 1249148834Sstefanf const char *p; 125084260Sobrien char inbuf[EL_BUFSIZ]; 125184260Sobrien char outbuf[EL_BUFSIZ]; 1252148834Sstefanf const char *in = NULL; 1253244941Spfg char *out; 1254150947Sstefanf el_bindings_t *bp, *ep; 125584260Sobrien int cmd; 125684260Sobrien int key; 12571573Srgrimes 125884260Sobrien if (argv == NULL) 125984260Sobrien return (-1); 12601573Srgrimes 126184260Sobrien map = el->el_map.key; 126284260Sobrien ntype = XK_CMD; 126384260Sobrien key = rem = 0; 126484260Sobrien for (argc = 1; (p = argv[argc]) != NULL; argc++) 126584260Sobrien if (p[0] == '-') 126684260Sobrien switch (p[1]) { 126784260Sobrien case 'a': 126884260Sobrien map = el->el_map.alt; 126984260Sobrien break; 12701573Srgrimes 127184260Sobrien case 's': 127284260Sobrien ntype = XK_STR; 127384260Sobrien break; 12741573Srgrimes#ifdef notyet 127584260Sobrien case 'c': 127684260Sobrien ntype = XK_EXE; 127784260Sobrien break; 12781573Srgrimes#endif 127984260Sobrien case 'k': 128084260Sobrien key = 1; 128184260Sobrien break; 12821573Srgrimes 128384260Sobrien case 'r': 128484260Sobrien rem = 1; 128584260Sobrien break; 12861573Srgrimes 128784260Sobrien case 'v': 128884260Sobrien map_init_vi(el); 128984260Sobrien return (0); 12901573Srgrimes 129184260Sobrien case 'e': 129284260Sobrien map_init_emacs(el); 129384260Sobrien return (0); 12941573Srgrimes 129584260Sobrien case 'l': 1296150947Sstefanf ep = &el->el_map.help[el->el_map.nfunc]; 1297150947Sstefanf for (bp = el->el_map.help; bp < ep; bp++) 129884260Sobrien (void) fprintf(el->el_outfile, 129984260Sobrien "%s\n\t%s\n", 130084260Sobrien bp->name, bp->description); 130184260Sobrien return (0); 130284260Sobrien default: 130384260Sobrien (void) fprintf(el->el_errfile, 130484260Sobrien "%s: Invalid switch `%c'.\n", 130584260Sobrien argv[0], p[1]); 130684260Sobrien } 130784260Sobrien else 130884260Sobrien break; 13091573Srgrimes 131084260Sobrien if (argv[argc] == NULL) { 131184260Sobrien map_print_all_keys(el); 131284260Sobrien return (0); 13131573Srgrimes } 131484260Sobrien if (key) 131584260Sobrien in = argv[argc++]; 131684260Sobrien else if ((in = parse__string(inbuf, argv[argc++])) == NULL) { 131784260Sobrien (void) fprintf(el->el_errfile, 131884260Sobrien "%s: Invalid \\ or ^ in instring.\n", 131984260Sobrien argv[0]); 132084260Sobrien return (-1); 13211573Srgrimes } 132284260Sobrien if (rem) { 132384260Sobrien if (key) { 132484260Sobrien (void) term_clear_arrow(el, in); 132584260Sobrien return (-1); 132684260Sobrien } 132784260Sobrien if (in[1]) 132884260Sobrien (void) key_delete(el, in); 132984260Sobrien else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) 133084260Sobrien (void) key_delete(el, in); 133184260Sobrien else 133284260Sobrien map[(unsigned char) *in] = ED_UNASSIGNED; 133384260Sobrien return (0); 133484260Sobrien } 133584260Sobrien if (argv[argc] == NULL) { 133684260Sobrien if (key) 133784260Sobrien term_print_arrow(el, in); 133884260Sobrien else 133984260Sobrien map_print_key(el, map, in); 134084260Sobrien return (0); 134184260Sobrien } 13421573Srgrimes#ifdef notyet 134384260Sobrien if (argv[argc + 1] != NULL) { 134484260Sobrien bindkey_usage(); 134584260Sobrien return (-1); 134684260Sobrien } 13471573Srgrimes#endif 13481573Srgrimes 134984260Sobrien switch (ntype) { 135084260Sobrien case XK_STR: 135184260Sobrien case XK_EXE: 135284260Sobrien if ((out = parse__string(outbuf, argv[argc])) == NULL) { 135384260Sobrien (void) fprintf(el->el_errfile, 135484260Sobrien "%s: Invalid \\ or ^ in outstring.\n", argv[0]); 135584260Sobrien return (-1); 135684260Sobrien } 135784260Sobrien if (key) 135884260Sobrien term_set_arrow(el, in, key_map_str(el, out), ntype); 135984260Sobrien else 136084260Sobrien key_add(el, in, key_map_str(el, out), ntype); 136184260Sobrien map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 136284260Sobrien break; 13631573Srgrimes 136484260Sobrien case XK_CMD: 136584260Sobrien if ((cmd = parse_cmd(el, argv[argc])) == -1) { 136684260Sobrien (void) fprintf(el->el_errfile, 136784260Sobrien "%s: Invalid command `%s'.\n", argv[0], argv[argc]); 136884260Sobrien return (-1); 136984260Sobrien } 137084260Sobrien if (key) 1371244941Spfg term_set_arrow(el, in, key_map_cmd(el, cmd), ntype); 137284260Sobrien else { 137384260Sobrien if (in[1]) { 137484260Sobrien key_add(el, in, key_map_cmd(el, cmd), ntype); 137584260Sobrien map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; 137684260Sobrien } else { 137784260Sobrien key_clear(el, map, in); 137884260Sobrien map[(unsigned char) *in] = cmd; 137984260Sobrien } 138084260Sobrien } 138184260Sobrien break; 138284260Sobrien 138384260Sobrien default: 1384167464Sstefanf EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); 138584260Sobrien break; 13861573Srgrimes } 138784260Sobrien return (0); 13881573Srgrimes} 13891573Srgrimes 13901573Srgrimes 13911573Srgrimes/* map_addfunc(): 13921573Srgrimes * add a user defined function 13931573Srgrimes */ 13941573Srgrimesprotected int 139584260Sobrienmap_addfunc(EditLine *el, const char *name, const char *help, el_func_t func) 13961573Srgrimes{ 139784260Sobrien void *p; 1398150947Sstefanf int nf = el->el_map.nfunc + 1; 13991573Srgrimes 140084260Sobrien if (name == NULL || help == NULL || func == NULL) 140184260Sobrien return (-1); 14021573Srgrimes 1403148814Sstefanf if ((p = el_realloc(el->el_map.func, nf * sizeof(el_func_t))) == NULL) 140484260Sobrien return (-1); 140584260Sobrien el->el_map.func = (el_func_t *) p; 1406148814Sstefanf if ((p = el_realloc(el->el_map.help, nf * sizeof(el_bindings_t))) 140784260Sobrien == NULL) 140884260Sobrien return (-1); 140984260Sobrien el->el_map.help = (el_bindings_t *) p; 14101573Srgrimes 141184260Sobrien nf = el->el_map.nfunc; 141284260Sobrien el->el_map.func[nf] = func; 14131573Srgrimes 141484260Sobrien el->el_map.help[nf].name = name; 141584260Sobrien el->el_map.help[nf].func = nf; 141684260Sobrien el->el_map.help[nf].description = help; 141784260Sobrien el->el_map.nfunc++; 141884260Sobrien 141984260Sobrien return (0); 14201573Srgrimes} 1421