f54e4f97f9
As we have seen before, "histedit.h" can never get rid of including the <wchar.h> header because using the data types defined there is deeply ingrained in the public interfaces of libedit. Now POSIX unconditionally requires that <wchar.h> defines the type wint_t. Consequently, it can be used unconditionally, no matter whether WIDECHAR is active or not. Consequently, the #define Int is pointless. Note that removing it is not gratuitious churn. Auditing for integer signedness problems is already hard when only fundamental types like "int" and "unsigned" are involved. It gets very hard when types come into the picture that have platform-dependent signedness, like "char" and "wint_t". Adding yet another layer on top, changing both the signedness and the width in a platform- dependent way, makes auditing yet harder, which IMHO is really dangerous. Note that while removing the #define, i already found one bug caused by this excessive complication - in the function re_putc() in refresh.c. If WIDECHAR was defined, it printed an Int = wint_t value with %c. Fortunately, that bug only affects debugging, not production. The fix is contained in the patch. With WIDECHAR, this doesn't change anything. For the case without WIDECHAR, i checked that none of the places wants to store values that might not fit in wint_t. This only changes internal interfaces; public ones remain unchanged.
1423 lines
42 KiB
C
1423 lines
42 KiB
C
/* $NetBSD: map.c,v 1.37 2016/02/14 14:49:34 christos Exp $ */
|
|
|
|
/*-
|
|
* Copyright (c) 1992, 1993
|
|
* The Regents of the University of California. All rights reserved.
|
|
*
|
|
* This code is derived from software contributed to Berkeley by
|
|
* Christos Zoulas of Cornell University.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "config.h"
|
|
#if !defined(lint) && !defined(SCCSID)
|
|
#if 0
|
|
static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93";
|
|
#else
|
|
__RCSID("$NetBSD: map.c,v 1.37 2016/02/14 14:49:34 christos Exp $");
|
|
#endif
|
|
#endif /* not lint && not SCCSID */
|
|
|
|
/*
|
|
* map.c: Editor function definitions
|
|
*/
|
|
#include <stdlib.h>
|
|
#include "el.h"
|
|
|
|
private void map_print_key(EditLine *, el_action_t *, const Char *);
|
|
private void map_print_some_keys(EditLine *, el_action_t *, wint_t, wint_t);
|
|
private void map_print_all_keys(EditLine *);
|
|
private void map_init_nls(EditLine *);
|
|
private void map_init_meta(EditLine *);
|
|
|
|
/* keymap tables ; should be N_KEYS*sizeof(KEYCMD) bytes long */
|
|
|
|
|
|
private const el_action_t el_map_emacs[] = {
|
|
/* 0 */ EM_SET_MARK, /* ^@ */
|
|
/* 1 */ ED_MOVE_TO_BEG, /* ^A */
|
|
/* 2 */ ED_PREV_CHAR, /* ^B */
|
|
/* 3 */ ED_TTY_SIGINT, /* ^C */
|
|
/* 4 */ EM_DELETE_OR_LIST, /* ^D */
|
|
/* 5 */ ED_MOVE_TO_END, /* ^E */
|
|
/* 6 */ ED_NEXT_CHAR, /* ^F */
|
|
/* 7 */ ED_UNASSIGNED, /* ^G */
|
|
/* 8 */ EM_DELETE_PREV_CHAR, /* ^H */
|
|
/* 9 */ ED_UNASSIGNED, /* ^I */
|
|
/* 10 */ ED_NEWLINE, /* ^J */
|
|
/* 11 */ ED_KILL_LINE, /* ^K */
|
|
/* 12 */ ED_CLEAR_SCREEN, /* ^L */
|
|
/* 13 */ ED_NEWLINE, /* ^M */
|
|
/* 14 */ ED_NEXT_HISTORY, /* ^N */
|
|
/* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */
|
|
/* 16 */ ED_PREV_HISTORY, /* ^P */
|
|
/* 17 */ ED_TTY_START_OUTPUT, /* ^Q */
|
|
/* 18 */ ED_REDISPLAY, /* ^R */
|
|
/* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */
|
|
/* 20 */ ED_TRANSPOSE_CHARS, /* ^T */
|
|
/* 21 */ EM_KILL_LINE, /* ^U */
|
|
/* 22 */ ED_QUOTED_INSERT, /* ^V */
|
|
/* 23 */ EM_KILL_REGION, /* ^W */
|
|
/* 24 */ ED_SEQUENCE_LEAD_IN, /* ^X */
|
|
/* 25 */ EM_YANK, /* ^Y */
|
|
/* 26 */ ED_TTY_SIGTSTP, /* ^Z */
|
|
/* 27 */ EM_META_NEXT, /* ^[ */
|
|
/* 28 */ ED_TTY_SIGQUIT, /* ^\ */
|
|
/* 29 */ ED_TTY_DSUSP, /* ^] */
|
|
/* 30 */ ED_UNASSIGNED, /* ^^ */
|
|
/* 31 */ ED_UNASSIGNED, /* ^_ */
|
|
/* 32 */ ED_INSERT, /* SPACE */
|
|
/* 33 */ ED_INSERT, /* ! */
|
|
/* 34 */ ED_INSERT, /* " */
|
|
/* 35 */ ED_INSERT, /* # */
|
|
/* 36 */ ED_INSERT, /* $ */
|
|
/* 37 */ ED_INSERT, /* % */
|
|
/* 38 */ ED_INSERT, /* & */
|
|
/* 39 */ ED_INSERT, /* ' */
|
|
/* 40 */ ED_INSERT, /* ( */
|
|
/* 41 */ ED_INSERT, /* ) */
|
|
/* 42 */ ED_INSERT, /* * */
|
|
/* 43 */ ED_INSERT, /* + */
|
|
/* 44 */ ED_INSERT, /* , */
|
|
/* 45 */ ED_INSERT, /* - */
|
|
/* 46 */ ED_INSERT, /* . */
|
|
/* 47 */ ED_INSERT, /* / */
|
|
/* 48 */ ED_DIGIT, /* 0 */
|
|
/* 49 */ ED_DIGIT, /* 1 */
|
|
/* 50 */ ED_DIGIT, /* 2 */
|
|
/* 51 */ ED_DIGIT, /* 3 */
|
|
/* 52 */ ED_DIGIT, /* 4 */
|
|
/* 53 */ ED_DIGIT, /* 5 */
|
|
/* 54 */ ED_DIGIT, /* 6 */
|
|
/* 55 */ ED_DIGIT, /* 7 */
|
|
/* 56 */ ED_DIGIT, /* 8 */
|
|
/* 57 */ ED_DIGIT, /* 9 */
|
|
/* 58 */ ED_INSERT, /* : */
|
|
/* 59 */ ED_INSERT, /* ; */
|
|
/* 60 */ ED_INSERT, /* < */
|
|
/* 61 */ ED_INSERT, /* = */
|
|
/* 62 */ ED_INSERT, /* > */
|
|
/* 63 */ ED_INSERT, /* ? */
|
|
/* 64 */ ED_INSERT, /* @ */
|
|
/* 65 */ ED_INSERT, /* A */
|
|
/* 66 */ ED_INSERT, /* B */
|
|
/* 67 */ ED_INSERT, /* C */
|
|
/* 68 */ ED_INSERT, /* D */
|
|
/* 69 */ ED_INSERT, /* E */
|
|
/* 70 */ ED_INSERT, /* F */
|
|
/* 71 */ ED_INSERT, /* G */
|
|
/* 72 */ ED_INSERT, /* H */
|
|
/* 73 */ ED_INSERT, /* I */
|
|
/* 74 */ ED_INSERT, /* J */
|
|
/* 75 */ ED_INSERT, /* K */
|
|
/* 76 */ ED_INSERT, /* L */
|
|
/* 77 */ ED_INSERT, /* M */
|
|
/* 78 */ ED_INSERT, /* N */
|
|
/* 79 */ ED_INSERT, /* O */
|
|
/* 80 */ ED_INSERT, /* P */
|
|
/* 81 */ ED_INSERT, /* Q */
|
|
/* 82 */ ED_INSERT, /* R */
|
|
/* 83 */ ED_INSERT, /* S */
|
|
/* 84 */ ED_INSERT, /* T */
|
|
/* 85 */ ED_INSERT, /* U */
|
|
/* 86 */ ED_INSERT, /* V */
|
|
/* 87 */ ED_INSERT, /* W */
|
|
/* 88 */ ED_INSERT, /* X */
|
|
/* 89 */ ED_INSERT, /* Y */
|
|
/* 90 */ ED_INSERT, /* Z */
|
|
/* 91 */ ED_INSERT, /* [ */
|
|
/* 92 */ ED_INSERT, /* \ */
|
|
/* 93 */ ED_INSERT, /* ] */
|
|
/* 94 */ ED_INSERT, /* ^ */
|
|
/* 95 */ ED_INSERT, /* _ */
|
|
/* 96 */ ED_INSERT, /* ` */
|
|
/* 97 */ ED_INSERT, /* a */
|
|
/* 98 */ ED_INSERT, /* b */
|
|
/* 99 */ ED_INSERT, /* c */
|
|
/* 100 */ ED_INSERT, /* d */
|
|
/* 101 */ ED_INSERT, /* e */
|
|
/* 102 */ ED_INSERT, /* f */
|
|
/* 103 */ ED_INSERT, /* g */
|
|
/* 104 */ ED_INSERT, /* h */
|
|
/* 105 */ ED_INSERT, /* i */
|
|
/* 106 */ ED_INSERT, /* j */
|
|
/* 107 */ ED_INSERT, /* k */
|
|
/* 108 */ ED_INSERT, /* l */
|
|
/* 109 */ ED_INSERT, /* m */
|
|
/* 110 */ ED_INSERT, /* n */
|
|
/* 111 */ ED_INSERT, /* o */
|
|
/* 112 */ ED_INSERT, /* p */
|
|
/* 113 */ ED_INSERT, /* q */
|
|
/* 114 */ ED_INSERT, /* r */
|
|
/* 115 */ ED_INSERT, /* s */
|
|
/* 116 */ ED_INSERT, /* t */
|
|
/* 117 */ ED_INSERT, /* u */
|
|
/* 118 */ ED_INSERT, /* v */
|
|
/* 119 */ ED_INSERT, /* w */
|
|
/* 120 */ ED_INSERT, /* x */
|
|
/* 121 */ ED_INSERT, /* y */
|
|
/* 122 */ ED_INSERT, /* z */
|
|
/* 123 */ ED_INSERT, /* { */
|
|
/* 124 */ ED_INSERT, /* | */
|
|
/* 125 */ ED_INSERT, /* } */
|
|
/* 126 */ ED_INSERT, /* ~ */
|
|
/* 127 */ EM_DELETE_PREV_CHAR, /* ^? */
|
|
/* 128 */ ED_UNASSIGNED, /* M-^@ */
|
|
/* 129 */ ED_UNASSIGNED, /* M-^A */
|
|
/* 130 */ ED_UNASSIGNED, /* M-^B */
|
|
/* 131 */ ED_UNASSIGNED, /* M-^C */
|
|
/* 132 */ ED_UNASSIGNED, /* M-^D */
|
|
/* 133 */ ED_UNASSIGNED, /* M-^E */
|
|
/* 134 */ ED_UNASSIGNED, /* M-^F */
|
|
/* 135 */ ED_UNASSIGNED, /* M-^G */
|
|
/* 136 */ ED_DELETE_PREV_WORD, /* M-^H */
|
|
/* 137 */ ED_UNASSIGNED, /* M-^I */
|
|
/* 138 */ ED_UNASSIGNED, /* M-^J */
|
|
/* 139 */ ED_UNASSIGNED, /* M-^K */
|
|
/* 140 */ ED_CLEAR_SCREEN, /* M-^L */
|
|
/* 141 */ ED_UNASSIGNED, /* M-^M */
|
|
/* 142 */ ED_UNASSIGNED, /* M-^N */
|
|
/* 143 */ ED_UNASSIGNED, /* M-^O */
|
|
/* 144 */ ED_UNASSIGNED, /* M-^P */
|
|
/* 145 */ ED_UNASSIGNED, /* M-^Q */
|
|
/* 146 */ ED_UNASSIGNED, /* M-^R */
|
|
/* 147 */ ED_UNASSIGNED, /* M-^S */
|
|
/* 148 */ ED_UNASSIGNED, /* M-^T */
|
|
/* 149 */ ED_UNASSIGNED, /* M-^U */
|
|
/* 150 */ ED_UNASSIGNED, /* M-^V */
|
|
/* 151 */ ED_UNASSIGNED, /* M-^W */
|
|
/* 152 */ ED_UNASSIGNED, /* M-^X */
|
|
/* 153 */ ED_UNASSIGNED, /* M-^Y */
|
|
/* 154 */ ED_UNASSIGNED, /* M-^Z */
|
|
/* 155 */ ED_UNASSIGNED, /* M-^[ */
|
|
/* 156 */ ED_UNASSIGNED, /* M-^\ */
|
|
/* 157 */ ED_UNASSIGNED, /* M-^] */
|
|
/* 158 */ ED_UNASSIGNED, /* M-^^ */
|
|
/* 159 */ EM_COPY_PREV_WORD, /* M-^_ */
|
|
/* 160 */ ED_UNASSIGNED, /* M-SPACE */
|
|
/* 161 */ ED_UNASSIGNED, /* M-! */
|
|
/* 162 */ ED_UNASSIGNED, /* M-" */
|
|
/* 163 */ ED_UNASSIGNED, /* M-# */
|
|
/* 164 */ ED_UNASSIGNED, /* M-$ */
|
|
/* 165 */ ED_UNASSIGNED, /* M-% */
|
|
/* 166 */ ED_UNASSIGNED, /* M-& */
|
|
/* 167 */ ED_UNASSIGNED, /* M-' */
|
|
/* 168 */ ED_UNASSIGNED, /* M-( */
|
|
/* 169 */ ED_UNASSIGNED, /* M-) */
|
|
/* 170 */ ED_UNASSIGNED, /* M-* */
|
|
/* 171 */ ED_UNASSIGNED, /* M-+ */
|
|
/* 172 */ ED_UNASSIGNED, /* M-, */
|
|
/* 173 */ ED_UNASSIGNED, /* M-- */
|
|
/* 174 */ ED_UNASSIGNED, /* M-. */
|
|
/* 175 */ ED_UNASSIGNED, /* M-/ */
|
|
/* 176 */ ED_ARGUMENT_DIGIT, /* M-0 */
|
|
/* 177 */ ED_ARGUMENT_DIGIT, /* M-1 */
|
|
/* 178 */ ED_ARGUMENT_DIGIT, /* M-2 */
|
|
/* 179 */ ED_ARGUMENT_DIGIT, /* M-3 */
|
|
/* 180 */ ED_ARGUMENT_DIGIT, /* M-4 */
|
|
/* 181 */ ED_ARGUMENT_DIGIT, /* M-5 */
|
|
/* 182 */ ED_ARGUMENT_DIGIT, /* M-6 */
|
|
/* 183 */ ED_ARGUMENT_DIGIT, /* M-7 */
|
|
/* 184 */ ED_ARGUMENT_DIGIT, /* M-8 */
|
|
/* 185 */ ED_ARGUMENT_DIGIT, /* M-9 */
|
|
/* 186 */ ED_UNASSIGNED, /* M-: */
|
|
/* 187 */ ED_UNASSIGNED, /* M-; */
|
|
/* 188 */ ED_UNASSIGNED, /* M-< */
|
|
/* 189 */ ED_UNASSIGNED, /* M-= */
|
|
/* 190 */ ED_UNASSIGNED, /* M-> */
|
|
/* 191 */ ED_UNASSIGNED, /* M-? */
|
|
/* 192 */ ED_UNASSIGNED, /* M-@ */
|
|
/* 193 */ ED_UNASSIGNED, /* M-A */
|
|
/* 194 */ ED_PREV_WORD, /* M-B */
|
|
/* 195 */ EM_CAPITOL_CASE, /* M-C */
|
|
/* 196 */ EM_DELETE_NEXT_WORD, /* M-D */
|
|
/* 197 */ ED_UNASSIGNED, /* M-E */
|
|
/* 198 */ EM_NEXT_WORD, /* M-F */
|
|
/* 199 */ ED_UNASSIGNED, /* M-G */
|
|
/* 200 */ ED_UNASSIGNED, /* M-H */
|
|
/* 201 */ ED_UNASSIGNED, /* M-I */
|
|
/* 202 */ ED_UNASSIGNED, /* M-J */
|
|
/* 203 */ ED_UNASSIGNED, /* M-K */
|
|
/* 204 */ EM_LOWER_CASE, /* M-L */
|
|
/* 205 */ ED_UNASSIGNED, /* M-M */
|
|
/* 206 */ ED_SEARCH_NEXT_HISTORY, /* M-N */
|
|
/* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */
|
|
/* 208 */ ED_SEARCH_PREV_HISTORY, /* M-P */
|
|
/* 209 */ ED_UNASSIGNED, /* M-Q */
|
|
/* 210 */ ED_UNASSIGNED, /* M-R */
|
|
/* 211 */ ED_UNASSIGNED, /* M-S */
|
|
/* 212 */ ED_UNASSIGNED, /* M-T */
|
|
/* 213 */ EM_UPPER_CASE, /* M-U */
|
|
/* 214 */ ED_UNASSIGNED, /* M-V */
|
|
/* 215 */ EM_COPY_REGION, /* M-W */
|
|
/* 216 */ ED_COMMAND, /* M-X */
|
|
/* 217 */ ED_UNASSIGNED, /* M-Y */
|
|
/* 218 */ ED_UNASSIGNED, /* M-Z */
|
|
/* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */
|
|
/* 220 */ ED_UNASSIGNED, /* M-\ */
|
|
/* 221 */ ED_UNASSIGNED, /* M-] */
|
|
/* 222 */ ED_UNASSIGNED, /* M-^ */
|
|
/* 223 */ ED_UNASSIGNED, /* M-_ */
|
|
/* 223 */ ED_UNASSIGNED, /* M-` */
|
|
/* 224 */ ED_UNASSIGNED, /* M-a */
|
|
/* 225 */ ED_PREV_WORD, /* M-b */
|
|
/* 226 */ EM_CAPITOL_CASE, /* M-c */
|
|
/* 227 */ EM_DELETE_NEXT_WORD, /* M-d */
|
|
/* 228 */ ED_UNASSIGNED, /* M-e */
|
|
/* 229 */ EM_NEXT_WORD, /* M-f */
|
|
/* 230 */ ED_UNASSIGNED, /* M-g */
|
|
/* 231 */ ED_UNASSIGNED, /* M-h */
|
|
/* 232 */ ED_UNASSIGNED, /* M-i */
|
|
/* 233 */ ED_UNASSIGNED, /* M-j */
|
|
/* 234 */ ED_UNASSIGNED, /* M-k */
|
|
/* 235 */ EM_LOWER_CASE, /* M-l */
|
|
/* 236 */ ED_UNASSIGNED, /* M-m */
|
|
/* 237 */ ED_SEARCH_NEXT_HISTORY, /* M-n */
|
|
/* 238 */ ED_UNASSIGNED, /* M-o */
|
|
/* 239 */ ED_SEARCH_PREV_HISTORY, /* M-p */
|
|
/* 240 */ ED_UNASSIGNED, /* M-q */
|
|
/* 241 */ ED_UNASSIGNED, /* M-r */
|
|
/* 242 */ ED_UNASSIGNED, /* M-s */
|
|
/* 243 */ ED_UNASSIGNED, /* M-t */
|
|
/* 244 */ EM_UPPER_CASE, /* M-u */
|
|
/* 245 */ ED_UNASSIGNED, /* M-v */
|
|
/* 246 */ EM_COPY_REGION, /* M-w */
|
|
/* 247 */ ED_COMMAND, /* M-x */
|
|
/* 248 */ ED_UNASSIGNED, /* M-y */
|
|
/* 249 */ ED_UNASSIGNED, /* M-z */
|
|
/* 250 */ ED_UNASSIGNED, /* M-{ */
|
|
/* 251 */ ED_UNASSIGNED, /* M-| */
|
|
/* 252 */ ED_UNASSIGNED, /* M-} */
|
|
/* 253 */ ED_UNASSIGNED, /* M-~ */
|
|
/* 254 */ ED_DELETE_PREV_WORD /* M-^? */
|
|
/* 255 */
|
|
};
|
|
|
|
|
|
/*
|
|
* keymap table for vi. Each index into above tbl; should be
|
|
* N_KEYS entries long. Vi mode uses a sticky-extend to do command mode:
|
|
* insert mode characters are in the normal keymap, and command mode
|
|
* in the extended keymap.
|
|
*/
|
|
private const el_action_t el_map_vi_insert[] = {
|
|
#ifdef KSHVI
|
|
/* 0 */ ED_UNASSIGNED, /* ^@ */
|
|
/* 1 */ ED_INSERT, /* ^A */
|
|
/* 2 */ ED_INSERT, /* ^B */
|
|
/* 3 */ ED_INSERT, /* ^C */
|
|
/* 4 */ VI_LIST_OR_EOF, /* ^D */
|
|
/* 5 */ ED_INSERT, /* ^E */
|
|
/* 6 */ ED_INSERT, /* ^F */
|
|
/* 7 */ ED_INSERT, /* ^G */
|
|
/* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */
|
|
/* 9 */ ED_INSERT, /* ^I */ /* Tab Key */
|
|
/* 10 */ ED_NEWLINE, /* ^J */
|
|
/* 11 */ ED_INSERT, /* ^K */
|
|
/* 12 */ ED_INSERT, /* ^L */
|
|
/* 13 */ ED_NEWLINE, /* ^M */
|
|
/* 14 */ ED_INSERT, /* ^N */
|
|
/* 15 */ ED_INSERT, /* ^O */
|
|
/* 16 */ ED_INSERT, /* ^P */
|
|
/* 17 */ ED_TTY_START_OUTPUT, /* ^Q */
|
|
/* 18 */ ED_INSERT, /* ^R */
|
|
/* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */
|
|
/* 20 */ ED_INSERT, /* ^T */
|
|
/* 21 */ VI_KILL_LINE_PREV, /* ^U */
|
|
/* 22 */ ED_QUOTED_INSERT, /* ^V */
|
|
/* 23 */ ED_DELETE_PREV_WORD, /* ^W */
|
|
/* ED_DELETE_PREV_WORD: Only until strt edit pos */
|
|
/* 24 */ ED_INSERT, /* ^X */
|
|
/* 25 */ ED_INSERT, /* ^Y */
|
|
/* 26 */ ED_INSERT, /* ^Z */
|
|
/* 27 */ VI_COMMAND_MODE, /* ^[ */ /* [ Esc ] key */
|
|
/* 28 */ ED_TTY_SIGQUIT, /* ^\ */
|
|
/* 29 */ ED_INSERT, /* ^] */
|
|
/* 30 */ ED_INSERT, /* ^^ */
|
|
/* 31 */ ED_INSERT, /* ^_ */
|
|
#else /* !KSHVI */
|
|
/*
|
|
* NOTE: These mappings do NOT Correspond well
|
|
* to the KSH VI editing assignments.
|
|
* On the other and they are convenient and
|
|
* many people have have gotten used to them.
|
|
*/
|
|
/* 0 */ ED_UNASSIGNED, /* ^@ */
|
|
/* 1 */ ED_MOVE_TO_BEG, /* ^A */
|
|
/* 2 */ ED_PREV_CHAR, /* ^B */
|
|
/* 3 */ ED_TTY_SIGINT, /* ^C */
|
|
/* 4 */ VI_LIST_OR_EOF, /* ^D */
|
|
/* 5 */ ED_MOVE_TO_END, /* ^E */
|
|
/* 6 */ ED_NEXT_CHAR, /* ^F */
|
|
/* 7 */ ED_UNASSIGNED, /* ^G */
|
|
/* 8 */ VI_DELETE_PREV_CHAR, /* ^H */ /* BackSpace key */
|
|
/* 9 */ ED_UNASSIGNED, /* ^I */ /* Tab Key */
|
|
/* 10 */ ED_NEWLINE, /* ^J */
|
|
/* 11 */ ED_KILL_LINE, /* ^K */
|
|
/* 12 */ ED_CLEAR_SCREEN, /* ^L */
|
|
/* 13 */ ED_NEWLINE, /* ^M */
|
|
/* 14 */ ED_NEXT_HISTORY, /* ^N */
|
|
/* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */
|
|
/* 16 */ ED_PREV_HISTORY, /* ^P */
|
|
/* 17 */ ED_TTY_START_OUTPUT, /* ^Q */
|
|
/* 18 */ ED_REDISPLAY, /* ^R */
|
|
/* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */
|
|
/* 20 */ ED_TRANSPOSE_CHARS, /* ^T */
|
|
/* 21 */ VI_KILL_LINE_PREV, /* ^U */
|
|
/* 22 */ ED_QUOTED_INSERT, /* ^V */
|
|
/* 23 */ ED_DELETE_PREV_WORD, /* ^W */
|
|
/* 24 */ ED_UNASSIGNED, /* ^X */
|
|
/* 25 */ ED_TTY_DSUSP, /* ^Y */
|
|
/* 26 */ ED_TTY_SIGTSTP, /* ^Z */
|
|
/* 27 */ VI_COMMAND_MODE, /* ^[ */
|
|
/* 28 */ ED_TTY_SIGQUIT, /* ^\ */
|
|
/* 29 */ ED_UNASSIGNED, /* ^] */
|
|
/* 30 */ ED_UNASSIGNED, /* ^^ */
|
|
/* 31 */ ED_UNASSIGNED, /* ^_ */
|
|
#endif /* KSHVI */
|
|
/* 32 */ ED_INSERT, /* SPACE */
|
|
/* 33 */ ED_INSERT, /* ! */
|
|
/* 34 */ ED_INSERT, /* " */
|
|
/* 35 */ ED_INSERT, /* # */
|
|
/* 36 */ ED_INSERT, /* $ */
|
|
/* 37 */ ED_INSERT, /* % */
|
|
/* 38 */ ED_INSERT, /* & */
|
|
/* 39 */ ED_INSERT, /* ' */
|
|
/* 40 */ ED_INSERT, /* ( */
|
|
/* 41 */ ED_INSERT, /* ) */
|
|
/* 42 */ ED_INSERT, /* * */
|
|
/* 43 */ ED_INSERT, /* + */
|
|
/* 44 */ ED_INSERT, /* , */
|
|
/* 45 */ ED_INSERT, /* - */
|
|
/* 46 */ ED_INSERT, /* . */
|
|
/* 47 */ ED_INSERT, /* / */
|
|
/* 48 */ ED_INSERT, /* 0 */
|
|
/* 49 */ ED_INSERT, /* 1 */
|
|
/* 50 */ ED_INSERT, /* 2 */
|
|
/* 51 */ ED_INSERT, /* 3 */
|
|
/* 52 */ ED_INSERT, /* 4 */
|
|
/* 53 */ ED_INSERT, /* 5 */
|
|
/* 54 */ ED_INSERT, /* 6 */
|
|
/* 55 */ ED_INSERT, /* 7 */
|
|
/* 56 */ ED_INSERT, /* 8 */
|
|
/* 57 */ ED_INSERT, /* 9 */
|
|
/* 58 */ ED_INSERT, /* : */
|
|
/* 59 */ ED_INSERT, /* ; */
|
|
/* 60 */ ED_INSERT, /* < */
|
|
/* 61 */ ED_INSERT, /* = */
|
|
/* 62 */ ED_INSERT, /* > */
|
|
/* 63 */ ED_INSERT, /* ? */
|
|
/* 64 */ ED_INSERT, /* @ */
|
|
/* 65 */ ED_INSERT, /* A */
|
|
/* 66 */ ED_INSERT, /* B */
|
|
/* 67 */ ED_INSERT, /* C */
|
|
/* 68 */ ED_INSERT, /* D */
|
|
/* 69 */ ED_INSERT, /* E */
|
|
/* 70 */ ED_INSERT, /* F */
|
|
/* 71 */ ED_INSERT, /* G */
|
|
/* 72 */ ED_INSERT, /* H */
|
|
/* 73 */ ED_INSERT, /* I */
|
|
/* 74 */ ED_INSERT, /* J */
|
|
/* 75 */ ED_INSERT, /* K */
|
|
/* 76 */ ED_INSERT, /* L */
|
|
/* 77 */ ED_INSERT, /* M */
|
|
/* 78 */ ED_INSERT, /* N */
|
|
/* 79 */ ED_INSERT, /* O */
|
|
/* 80 */ ED_INSERT, /* P */
|
|
/* 81 */ ED_INSERT, /* Q */
|
|
/* 82 */ ED_INSERT, /* R */
|
|
/* 83 */ ED_INSERT, /* S */
|
|
/* 84 */ ED_INSERT, /* T */
|
|
/* 85 */ ED_INSERT, /* U */
|
|
/* 86 */ ED_INSERT, /* V */
|
|
/* 87 */ ED_INSERT, /* W */
|
|
/* 88 */ ED_INSERT, /* X */
|
|
/* 89 */ ED_INSERT, /* Y */
|
|
/* 90 */ ED_INSERT, /* Z */
|
|
/* 91 */ ED_INSERT, /* [ */
|
|
/* 92 */ ED_INSERT, /* \ */
|
|
/* 93 */ ED_INSERT, /* ] */
|
|
/* 94 */ ED_INSERT, /* ^ */
|
|
/* 95 */ ED_INSERT, /* _ */
|
|
/* 96 */ ED_INSERT, /* ` */
|
|
/* 97 */ ED_INSERT, /* a */
|
|
/* 98 */ ED_INSERT, /* b */
|
|
/* 99 */ ED_INSERT, /* c */
|
|
/* 100 */ ED_INSERT, /* d */
|
|
/* 101 */ ED_INSERT, /* e */
|
|
/* 102 */ ED_INSERT, /* f */
|
|
/* 103 */ ED_INSERT, /* g */
|
|
/* 104 */ ED_INSERT, /* h */
|
|
/* 105 */ ED_INSERT, /* i */
|
|
/* 106 */ ED_INSERT, /* j */
|
|
/* 107 */ ED_INSERT, /* k */
|
|
/* 108 */ ED_INSERT, /* l */
|
|
/* 109 */ ED_INSERT, /* m */
|
|
/* 110 */ ED_INSERT, /* n */
|
|
/* 111 */ ED_INSERT, /* o */
|
|
/* 112 */ ED_INSERT, /* p */
|
|
/* 113 */ ED_INSERT, /* q */
|
|
/* 114 */ ED_INSERT, /* r */
|
|
/* 115 */ ED_INSERT, /* s */
|
|
/* 116 */ ED_INSERT, /* t */
|
|
/* 117 */ ED_INSERT, /* u */
|
|
/* 118 */ ED_INSERT, /* v */
|
|
/* 119 */ ED_INSERT, /* w */
|
|
/* 120 */ ED_INSERT, /* x */
|
|
/* 121 */ ED_INSERT, /* y */
|
|
/* 122 */ ED_INSERT, /* z */
|
|
/* 123 */ ED_INSERT, /* { */
|
|
/* 124 */ ED_INSERT, /* | */
|
|
/* 125 */ ED_INSERT, /* } */
|
|
/* 126 */ ED_INSERT, /* ~ */
|
|
/* 127 */ VI_DELETE_PREV_CHAR, /* ^? */
|
|
/* 128 */ ED_INSERT, /* M-^@ */
|
|
/* 129 */ ED_INSERT, /* M-^A */
|
|
/* 130 */ ED_INSERT, /* M-^B */
|
|
/* 131 */ ED_INSERT, /* M-^C */
|
|
/* 132 */ ED_INSERT, /* M-^D */
|
|
/* 133 */ ED_INSERT, /* M-^E */
|
|
/* 134 */ ED_INSERT, /* M-^F */
|
|
/* 135 */ ED_INSERT, /* M-^G */
|
|
/* 136 */ ED_INSERT, /* M-^H */
|
|
/* 137 */ ED_INSERT, /* M-^I */
|
|
/* 138 */ ED_INSERT, /* M-^J */
|
|
/* 139 */ ED_INSERT, /* M-^K */
|
|
/* 140 */ ED_INSERT, /* M-^L */
|
|
/* 141 */ ED_INSERT, /* M-^M */
|
|
/* 142 */ ED_INSERT, /* M-^N */
|
|
/* 143 */ ED_INSERT, /* M-^O */
|
|
/* 144 */ ED_INSERT, /* M-^P */
|
|
/* 145 */ ED_INSERT, /* M-^Q */
|
|
/* 146 */ ED_INSERT, /* M-^R */
|
|
/* 147 */ ED_INSERT, /* M-^S */
|
|
/* 148 */ ED_INSERT, /* M-^T */
|
|
/* 149 */ ED_INSERT, /* M-^U */
|
|
/* 150 */ ED_INSERT, /* M-^V */
|
|
/* 151 */ ED_INSERT, /* M-^W */
|
|
/* 152 */ ED_INSERT, /* M-^X */
|
|
/* 153 */ ED_INSERT, /* M-^Y */
|
|
/* 154 */ ED_INSERT, /* M-^Z */
|
|
/* 155 */ ED_INSERT, /* M-^[ */
|
|
/* 156 */ ED_INSERT, /* M-^\ */
|
|
/* 157 */ ED_INSERT, /* M-^] */
|
|
/* 158 */ ED_INSERT, /* M-^^ */
|
|
/* 159 */ ED_INSERT, /* M-^_ */
|
|
/* 160 */ ED_INSERT, /* M-SPACE */
|
|
/* 161 */ ED_INSERT, /* M-! */
|
|
/* 162 */ ED_INSERT, /* M-" */
|
|
/* 163 */ ED_INSERT, /* M-# */
|
|
/* 164 */ ED_INSERT, /* M-$ */
|
|
/* 165 */ ED_INSERT, /* M-% */
|
|
/* 166 */ ED_INSERT, /* M-& */
|
|
/* 167 */ ED_INSERT, /* M-' */
|
|
/* 168 */ ED_INSERT, /* M-( */
|
|
/* 169 */ ED_INSERT, /* M-) */
|
|
/* 170 */ ED_INSERT, /* M-* */
|
|
/* 171 */ ED_INSERT, /* M-+ */
|
|
/* 172 */ ED_INSERT, /* M-, */
|
|
/* 173 */ ED_INSERT, /* M-- */
|
|
/* 174 */ ED_INSERT, /* M-. */
|
|
/* 175 */ ED_INSERT, /* M-/ */
|
|
/* 176 */ ED_INSERT, /* M-0 */
|
|
/* 177 */ ED_INSERT, /* M-1 */
|
|
/* 178 */ ED_INSERT, /* M-2 */
|
|
/* 179 */ ED_INSERT, /* M-3 */
|
|
/* 180 */ ED_INSERT, /* M-4 */
|
|
/* 181 */ ED_INSERT, /* M-5 */
|
|
/* 182 */ ED_INSERT, /* M-6 */
|
|
/* 183 */ ED_INSERT, /* M-7 */
|
|
/* 184 */ ED_INSERT, /* M-8 */
|
|
/* 185 */ ED_INSERT, /* M-9 */
|
|
/* 186 */ ED_INSERT, /* M-: */
|
|
/* 187 */ ED_INSERT, /* M-; */
|
|
/* 188 */ ED_INSERT, /* M-< */
|
|
/* 189 */ ED_INSERT, /* M-= */
|
|
/* 190 */ ED_INSERT, /* M-> */
|
|
/* 191 */ ED_INSERT, /* M-? */
|
|
/* 192 */ ED_INSERT, /* M-@ */
|
|
/* 193 */ ED_INSERT, /* M-A */
|
|
/* 194 */ ED_INSERT, /* M-B */
|
|
/* 195 */ ED_INSERT, /* M-C */
|
|
/* 196 */ ED_INSERT, /* M-D */
|
|
/* 197 */ ED_INSERT, /* M-E */
|
|
/* 198 */ ED_INSERT, /* M-F */
|
|
/* 199 */ ED_INSERT, /* M-G */
|
|
/* 200 */ ED_INSERT, /* M-H */
|
|
/* 201 */ ED_INSERT, /* M-I */
|
|
/* 202 */ ED_INSERT, /* M-J */
|
|
/* 203 */ ED_INSERT, /* M-K */
|
|
/* 204 */ ED_INSERT, /* M-L */
|
|
/* 205 */ ED_INSERT, /* M-M */
|
|
/* 206 */ ED_INSERT, /* M-N */
|
|
/* 207 */ ED_INSERT, /* M-O */
|
|
/* 208 */ ED_INSERT, /* M-P */
|
|
/* 209 */ ED_INSERT, /* M-Q */
|
|
/* 210 */ ED_INSERT, /* M-R */
|
|
/* 211 */ ED_INSERT, /* M-S */
|
|
/* 212 */ ED_INSERT, /* M-T */
|
|
/* 213 */ ED_INSERT, /* M-U */
|
|
/* 214 */ ED_INSERT, /* M-V */
|
|
/* 215 */ ED_INSERT, /* M-W */
|
|
/* 216 */ ED_INSERT, /* M-X */
|
|
/* 217 */ ED_INSERT, /* M-Y */
|
|
/* 218 */ ED_INSERT, /* M-Z */
|
|
/* 219 */ ED_INSERT, /* M-[ */
|
|
/* 220 */ ED_INSERT, /* M-\ */
|
|
/* 221 */ ED_INSERT, /* M-] */
|
|
/* 222 */ ED_INSERT, /* M-^ */
|
|
/* 223 */ ED_INSERT, /* M-_ */
|
|
/* 224 */ ED_INSERT, /* M-` */
|
|
/* 225 */ ED_INSERT, /* M-a */
|
|
/* 226 */ ED_INSERT, /* M-b */
|
|
/* 227 */ ED_INSERT, /* M-c */
|
|
/* 228 */ ED_INSERT, /* M-d */
|
|
/* 229 */ ED_INSERT, /* M-e */
|
|
/* 230 */ ED_INSERT, /* M-f */
|
|
/* 231 */ ED_INSERT, /* M-g */
|
|
/* 232 */ ED_INSERT, /* M-h */
|
|
/* 233 */ ED_INSERT, /* M-i */
|
|
/* 234 */ ED_INSERT, /* M-j */
|
|
/* 235 */ ED_INSERT, /* M-k */
|
|
/* 236 */ ED_INSERT, /* M-l */
|
|
/* 237 */ ED_INSERT, /* M-m */
|
|
/* 238 */ ED_INSERT, /* M-n */
|
|
/* 239 */ ED_INSERT, /* M-o */
|
|
/* 240 */ ED_INSERT, /* M-p */
|
|
/* 241 */ ED_INSERT, /* M-q */
|
|
/* 242 */ ED_INSERT, /* M-r */
|
|
/* 243 */ ED_INSERT, /* M-s */
|
|
/* 244 */ ED_INSERT, /* M-t */
|
|
/* 245 */ ED_INSERT, /* M-u */
|
|
/* 246 */ ED_INSERT, /* M-v */
|
|
/* 247 */ ED_INSERT, /* M-w */
|
|
/* 248 */ ED_INSERT, /* M-x */
|
|
/* 249 */ ED_INSERT, /* M-y */
|
|
/* 250 */ ED_INSERT, /* M-z */
|
|
/* 251 */ ED_INSERT, /* M-{ */
|
|
/* 252 */ ED_INSERT, /* M-| */
|
|
/* 253 */ ED_INSERT, /* M-} */
|
|
/* 254 */ ED_INSERT, /* M-~ */
|
|
/* 255 */ ED_INSERT /* M-^? */
|
|
};
|
|
|
|
private const el_action_t el_map_vi_command[] = {
|
|
/* 0 */ ED_UNASSIGNED, /* ^@ */
|
|
/* 1 */ ED_MOVE_TO_BEG, /* ^A */
|
|
/* 2 */ ED_UNASSIGNED, /* ^B */
|
|
/* 3 */ ED_TTY_SIGINT, /* ^C */
|
|
/* 4 */ ED_UNASSIGNED, /* ^D */
|
|
/* 5 */ ED_MOVE_TO_END, /* ^E */
|
|
/* 6 */ ED_UNASSIGNED, /* ^F */
|
|
/* 7 */ ED_UNASSIGNED, /* ^G */
|
|
/* 8 */ ED_DELETE_PREV_CHAR, /* ^H */
|
|
/* 9 */ ED_UNASSIGNED, /* ^I */
|
|
/* 10 */ ED_NEWLINE, /* ^J */
|
|
/* 11 */ ED_KILL_LINE, /* ^K */
|
|
/* 12 */ ED_CLEAR_SCREEN, /* ^L */
|
|
/* 13 */ ED_NEWLINE, /* ^M */
|
|
/* 14 */ ED_NEXT_HISTORY, /* ^N */
|
|
/* 15 */ ED_TTY_FLUSH_OUTPUT, /* ^O */
|
|
/* 16 */ ED_PREV_HISTORY, /* ^P */
|
|
/* 17 */ ED_TTY_START_OUTPUT, /* ^Q */
|
|
/* 18 */ ED_REDISPLAY, /* ^R */
|
|
/* 19 */ ED_TTY_STOP_OUTPUT, /* ^S */
|
|
/* 20 */ ED_UNASSIGNED, /* ^T */
|
|
/* 21 */ VI_KILL_LINE_PREV, /* ^U */
|
|
/* 22 */ ED_UNASSIGNED, /* ^V */
|
|
/* 23 */ ED_DELETE_PREV_WORD, /* ^W */
|
|
/* 24 */ ED_UNASSIGNED, /* ^X */
|
|
/* 25 */ ED_UNASSIGNED, /* ^Y */
|
|
/* 26 */ ED_UNASSIGNED, /* ^Z */
|
|
/* 27 */ EM_META_NEXT, /* ^[ */
|
|
/* 28 */ ED_TTY_SIGQUIT, /* ^\ */
|
|
/* 29 */ ED_UNASSIGNED, /* ^] */
|
|
/* 30 */ ED_UNASSIGNED, /* ^^ */
|
|
/* 31 */ ED_UNASSIGNED, /* ^_ */
|
|
/* 32 */ ED_NEXT_CHAR, /* SPACE */
|
|
/* 33 */ ED_UNASSIGNED, /* ! */
|
|
/* 34 */ ED_UNASSIGNED, /* " */
|
|
/* 35 */ VI_COMMENT_OUT, /* # */
|
|
/* 36 */ ED_MOVE_TO_END, /* $ */
|
|
/* 37 */ VI_MATCH, /* % */
|
|
/* 38 */ ED_UNASSIGNED, /* & */
|
|
/* 39 */ ED_UNASSIGNED, /* ' */
|
|
/* 40 */ ED_UNASSIGNED, /* ( */
|
|
/* 41 */ ED_UNASSIGNED, /* ) */
|
|
/* 42 */ ED_UNASSIGNED, /* * */
|
|
/* 43 */ ED_NEXT_HISTORY, /* + */
|
|
/* 44 */ VI_REPEAT_PREV_CHAR, /* , */
|
|
/* 45 */ ED_PREV_HISTORY, /* - */
|
|
/* 46 */ VI_REDO, /* . */
|
|
/* 47 */ VI_SEARCH_PREV, /* / */
|
|
/* 48 */ VI_ZERO, /* 0 */
|
|
/* 49 */ ED_ARGUMENT_DIGIT, /* 1 */
|
|
/* 50 */ ED_ARGUMENT_DIGIT, /* 2 */
|
|
/* 51 */ ED_ARGUMENT_DIGIT, /* 3 */
|
|
/* 52 */ ED_ARGUMENT_DIGIT, /* 4 */
|
|
/* 53 */ ED_ARGUMENT_DIGIT, /* 5 */
|
|
/* 54 */ ED_ARGUMENT_DIGIT, /* 6 */
|
|
/* 55 */ ED_ARGUMENT_DIGIT, /* 7 */
|
|
/* 56 */ ED_ARGUMENT_DIGIT, /* 8 */
|
|
/* 57 */ ED_ARGUMENT_DIGIT, /* 9 */
|
|
/* 58 */ ED_COMMAND, /* : */
|
|
/* 59 */ VI_REPEAT_NEXT_CHAR, /* ; */
|
|
/* 60 */ ED_UNASSIGNED, /* < */
|
|
/* 61 */ ED_UNASSIGNED, /* = */
|
|
/* 62 */ ED_UNASSIGNED, /* > */
|
|
/* 63 */ VI_SEARCH_NEXT, /* ? */
|
|
/* 64 */ VI_ALIAS, /* @ */
|
|
/* 65 */ VI_ADD_AT_EOL, /* A */
|
|
/* 66 */ VI_PREV_BIG_WORD, /* B */
|
|
/* 67 */ VI_CHANGE_TO_EOL, /* C */
|
|
/* 68 */ ED_KILL_LINE, /* D */
|
|
/* 69 */ VI_END_BIG_WORD, /* E */
|
|
/* 70 */ VI_PREV_CHAR, /* F */
|
|
/* 71 */ VI_TO_HISTORY_LINE, /* G */
|
|
/* 72 */ ED_UNASSIGNED, /* H */
|
|
/* 73 */ VI_INSERT_AT_BOL, /* I */
|
|
/* 74 */ ED_SEARCH_NEXT_HISTORY, /* J */
|
|
/* 75 */ ED_SEARCH_PREV_HISTORY, /* K */
|
|
/* 76 */ ED_UNASSIGNED, /* L */
|
|
/* 77 */ ED_UNASSIGNED, /* M */
|
|
/* 78 */ VI_REPEAT_SEARCH_PREV, /* N */
|
|
/* 79 */ ED_SEQUENCE_LEAD_IN, /* O */
|
|
/* 80 */ VI_PASTE_PREV, /* P */
|
|
/* 81 */ ED_UNASSIGNED, /* Q */
|
|
/* 82 */ VI_REPLACE_MODE, /* R */
|
|
/* 83 */ VI_SUBSTITUTE_LINE, /* S */
|
|
/* 84 */ VI_TO_PREV_CHAR, /* T */
|
|
/* 85 */ VI_UNDO_LINE, /* U */
|
|
/* 86 */ ED_UNASSIGNED, /* V */
|
|
/* 87 */ VI_NEXT_BIG_WORD, /* W */
|
|
/* 88 */ ED_DELETE_PREV_CHAR, /* X */
|
|
/* 89 */ VI_YANK_END, /* Y */
|
|
/* 90 */ ED_UNASSIGNED, /* Z */
|
|
/* 91 */ ED_SEQUENCE_LEAD_IN, /* [ */
|
|
/* 92 */ ED_UNASSIGNED, /* \ */
|
|
/* 93 */ ED_UNASSIGNED, /* ] */
|
|
/* 94 */ ED_MOVE_TO_BEG, /* ^ */
|
|
/* 95 */ VI_HISTORY_WORD, /* _ */
|
|
/* 96 */ ED_UNASSIGNED, /* ` */
|
|
/* 97 */ VI_ADD, /* a */
|
|
/* 98 */ VI_PREV_WORD, /* b */
|
|
/* 99 */ VI_CHANGE_META, /* c */
|
|
/* 100 */ VI_DELETE_META, /* d */
|
|
/* 101 */ VI_END_WORD, /* e */
|
|
/* 102 */ VI_NEXT_CHAR, /* f */
|
|
/* 103 */ ED_UNASSIGNED, /* g */
|
|
/* 104 */ ED_PREV_CHAR, /* h */
|
|
/* 105 */ VI_INSERT, /* i */
|
|
/* 106 */ ED_NEXT_HISTORY, /* j */
|
|
/* 107 */ ED_PREV_HISTORY, /* k */
|
|
/* 108 */ ED_NEXT_CHAR, /* l */
|
|
/* 109 */ ED_UNASSIGNED, /* m */
|
|
/* 110 */ VI_REPEAT_SEARCH_NEXT, /* n */
|
|
/* 111 */ ED_UNASSIGNED, /* o */
|
|
/* 112 */ VI_PASTE_NEXT, /* p */
|
|
/* 113 */ ED_UNASSIGNED, /* q */
|
|
/* 114 */ VI_REPLACE_CHAR, /* r */
|
|
/* 115 */ VI_SUBSTITUTE_CHAR, /* s */
|
|
/* 116 */ VI_TO_NEXT_CHAR, /* t */
|
|
/* 117 */ VI_UNDO, /* u */
|
|
/* 118 */ VI_HISTEDIT, /* v */
|
|
/* 119 */ VI_NEXT_WORD, /* w */
|
|
/* 120 */ ED_DELETE_NEXT_CHAR, /* x */
|
|
/* 121 */ VI_YANK, /* y */
|
|
/* 122 */ ED_UNASSIGNED, /* z */
|
|
/* 123 */ ED_UNASSIGNED, /* { */
|
|
/* 124 */ VI_TO_COLUMN, /* | */
|
|
/* 125 */ ED_UNASSIGNED, /* } */
|
|
/* 126 */ VI_CHANGE_CASE, /* ~ */
|
|
/* 127 */ ED_DELETE_PREV_CHAR, /* ^? */
|
|
/* 128 */ ED_UNASSIGNED, /* M-^@ */
|
|
/* 129 */ ED_UNASSIGNED, /* M-^A */
|
|
/* 130 */ ED_UNASSIGNED, /* M-^B */
|
|
/* 131 */ ED_UNASSIGNED, /* M-^C */
|
|
/* 132 */ ED_UNASSIGNED, /* M-^D */
|
|
/* 133 */ ED_UNASSIGNED, /* M-^E */
|
|
/* 134 */ ED_UNASSIGNED, /* M-^F */
|
|
/* 135 */ ED_UNASSIGNED, /* M-^G */
|
|
/* 136 */ ED_UNASSIGNED, /* M-^H */
|
|
/* 137 */ ED_UNASSIGNED, /* M-^I */
|
|
/* 138 */ ED_UNASSIGNED, /* M-^J */
|
|
/* 139 */ ED_UNASSIGNED, /* M-^K */
|
|
/* 140 */ ED_UNASSIGNED, /* M-^L */
|
|
/* 141 */ ED_UNASSIGNED, /* M-^M */
|
|
/* 142 */ ED_UNASSIGNED, /* M-^N */
|
|
/* 143 */ ED_UNASSIGNED, /* M-^O */
|
|
/* 144 */ ED_UNASSIGNED, /* M-^P */
|
|
/* 145 */ ED_UNASSIGNED, /* M-^Q */
|
|
/* 146 */ ED_UNASSIGNED, /* M-^R */
|
|
/* 147 */ ED_UNASSIGNED, /* M-^S */
|
|
/* 148 */ ED_UNASSIGNED, /* M-^T */
|
|
/* 149 */ ED_UNASSIGNED, /* M-^U */
|
|
/* 150 */ ED_UNASSIGNED, /* M-^V */
|
|
/* 151 */ ED_UNASSIGNED, /* M-^W */
|
|
/* 152 */ ED_UNASSIGNED, /* M-^X */
|
|
/* 153 */ ED_UNASSIGNED, /* M-^Y */
|
|
/* 154 */ ED_UNASSIGNED, /* M-^Z */
|
|
/* 155 */ ED_UNASSIGNED, /* M-^[ */
|
|
/* 156 */ ED_UNASSIGNED, /* M-^\ */
|
|
/* 157 */ ED_UNASSIGNED, /* M-^] */
|
|
/* 158 */ ED_UNASSIGNED, /* M-^^ */
|
|
/* 159 */ ED_UNASSIGNED, /* M-^_ */
|
|
/* 160 */ ED_UNASSIGNED, /* M-SPACE */
|
|
/* 161 */ ED_UNASSIGNED, /* M-! */
|
|
/* 162 */ ED_UNASSIGNED, /* M-" */
|
|
/* 163 */ ED_UNASSIGNED, /* M-# */
|
|
/* 164 */ ED_UNASSIGNED, /* M-$ */
|
|
/* 165 */ ED_UNASSIGNED, /* M-% */
|
|
/* 166 */ ED_UNASSIGNED, /* M-& */
|
|
/* 167 */ ED_UNASSIGNED, /* M-' */
|
|
/* 168 */ ED_UNASSIGNED, /* M-( */
|
|
/* 169 */ ED_UNASSIGNED, /* M-) */
|
|
/* 170 */ ED_UNASSIGNED, /* M-* */
|
|
/* 171 */ ED_UNASSIGNED, /* M-+ */
|
|
/* 172 */ ED_UNASSIGNED, /* M-, */
|
|
/* 173 */ ED_UNASSIGNED, /* M-- */
|
|
/* 174 */ ED_UNASSIGNED, /* M-. */
|
|
/* 175 */ ED_UNASSIGNED, /* M-/ */
|
|
/* 176 */ ED_UNASSIGNED, /* M-0 */
|
|
/* 177 */ ED_UNASSIGNED, /* M-1 */
|
|
/* 178 */ ED_UNASSIGNED, /* M-2 */
|
|
/* 179 */ ED_UNASSIGNED, /* M-3 */
|
|
/* 180 */ ED_UNASSIGNED, /* M-4 */
|
|
/* 181 */ ED_UNASSIGNED, /* M-5 */
|
|
/* 182 */ ED_UNASSIGNED, /* M-6 */
|
|
/* 183 */ ED_UNASSIGNED, /* M-7 */
|
|
/* 184 */ ED_UNASSIGNED, /* M-8 */
|
|
/* 185 */ ED_UNASSIGNED, /* M-9 */
|
|
/* 186 */ ED_UNASSIGNED, /* M-: */
|
|
/* 187 */ ED_UNASSIGNED, /* M-; */
|
|
/* 188 */ ED_UNASSIGNED, /* M-< */
|
|
/* 189 */ ED_UNASSIGNED, /* M-= */
|
|
/* 190 */ ED_UNASSIGNED, /* M-> */
|
|
/* 191 */ ED_UNASSIGNED, /* M-? */
|
|
/* 192 */ ED_UNASSIGNED, /* M-@ */
|
|
/* 193 */ ED_UNASSIGNED, /* M-A */
|
|
/* 194 */ ED_UNASSIGNED, /* M-B */
|
|
/* 195 */ ED_UNASSIGNED, /* M-C */
|
|
/* 196 */ ED_UNASSIGNED, /* M-D */
|
|
/* 197 */ ED_UNASSIGNED, /* M-E */
|
|
/* 198 */ ED_UNASSIGNED, /* M-F */
|
|
/* 199 */ ED_UNASSIGNED, /* M-G */
|
|
/* 200 */ ED_UNASSIGNED, /* M-H */
|
|
/* 201 */ ED_UNASSIGNED, /* M-I */
|
|
/* 202 */ ED_UNASSIGNED, /* M-J */
|
|
/* 203 */ ED_UNASSIGNED, /* M-K */
|
|
/* 204 */ ED_UNASSIGNED, /* M-L */
|
|
/* 205 */ ED_UNASSIGNED, /* M-M */
|
|
/* 206 */ ED_UNASSIGNED, /* M-N */
|
|
/* 207 */ ED_SEQUENCE_LEAD_IN, /* M-O */
|
|
/* 208 */ ED_UNASSIGNED, /* M-P */
|
|
/* 209 */ ED_UNASSIGNED, /* M-Q */
|
|
/* 210 */ ED_UNASSIGNED, /* M-R */
|
|
/* 211 */ ED_UNASSIGNED, /* M-S */
|
|
/* 212 */ ED_UNASSIGNED, /* M-T */
|
|
/* 213 */ ED_UNASSIGNED, /* M-U */
|
|
/* 214 */ ED_UNASSIGNED, /* M-V */
|
|
/* 215 */ ED_UNASSIGNED, /* M-W */
|
|
/* 216 */ ED_UNASSIGNED, /* M-X */
|
|
/* 217 */ ED_UNASSIGNED, /* M-Y */
|
|
/* 218 */ ED_UNASSIGNED, /* M-Z */
|
|
/* 219 */ ED_SEQUENCE_LEAD_IN, /* M-[ */
|
|
/* 220 */ ED_UNASSIGNED, /* M-\ */
|
|
/* 221 */ ED_UNASSIGNED, /* M-] */
|
|
/* 222 */ ED_UNASSIGNED, /* M-^ */
|
|
/* 223 */ ED_UNASSIGNED, /* M-_ */
|
|
/* 224 */ ED_UNASSIGNED, /* M-` */
|
|
/* 225 */ ED_UNASSIGNED, /* M-a */
|
|
/* 226 */ ED_UNASSIGNED, /* M-b */
|
|
/* 227 */ ED_UNASSIGNED, /* M-c */
|
|
/* 228 */ ED_UNASSIGNED, /* M-d */
|
|
/* 229 */ ED_UNASSIGNED, /* M-e */
|
|
/* 230 */ ED_UNASSIGNED, /* M-f */
|
|
/* 231 */ ED_UNASSIGNED, /* M-g */
|
|
/* 232 */ ED_UNASSIGNED, /* M-h */
|
|
/* 233 */ ED_UNASSIGNED, /* M-i */
|
|
/* 234 */ ED_UNASSIGNED, /* M-j */
|
|
/* 235 */ ED_UNASSIGNED, /* M-k */
|
|
/* 236 */ ED_UNASSIGNED, /* M-l */
|
|
/* 237 */ ED_UNASSIGNED, /* M-m */
|
|
/* 238 */ ED_UNASSIGNED, /* M-n */
|
|
/* 239 */ ED_UNASSIGNED, /* M-o */
|
|
/* 240 */ ED_UNASSIGNED, /* M-p */
|
|
/* 241 */ ED_UNASSIGNED, /* M-q */
|
|
/* 242 */ ED_UNASSIGNED, /* M-r */
|
|
/* 243 */ ED_UNASSIGNED, /* M-s */
|
|
/* 244 */ ED_UNASSIGNED, /* M-t */
|
|
/* 245 */ ED_UNASSIGNED, /* M-u */
|
|
/* 246 */ ED_UNASSIGNED, /* M-v */
|
|
/* 247 */ ED_UNASSIGNED, /* M-w */
|
|
/* 248 */ ED_UNASSIGNED, /* M-x */
|
|
/* 249 */ ED_UNASSIGNED, /* M-y */
|
|
/* 250 */ ED_UNASSIGNED, /* M-z */
|
|
/* 251 */ ED_UNASSIGNED, /* M-{ */
|
|
/* 252 */ ED_UNASSIGNED, /* M-| */
|
|
/* 253 */ ED_UNASSIGNED, /* M-} */
|
|
/* 254 */ ED_UNASSIGNED, /* M-~ */
|
|
/* 255 */ ED_UNASSIGNED /* M-^? */
|
|
};
|
|
|
|
|
|
/* map_init():
|
|
* Initialize and allocate the maps
|
|
*/
|
|
protected int
|
|
map_init(EditLine *el)
|
|
{
|
|
|
|
/*
|
|
* Make sure those are correct before starting.
|
|
*/
|
|
#ifdef MAP_DEBUG
|
|
if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t))
|
|
EL_ABORT((el->errfile, "Emacs map incorrect\n"));
|
|
if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t))
|
|
EL_ABORT((el->errfile, "Vi command map incorrect\n"));
|
|
if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t))
|
|
EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
|
|
#endif
|
|
|
|
el->el_map.alt = el_malloc(sizeof(*el->el_map.alt) * N_KEYS);
|
|
if (el->el_map.alt == NULL)
|
|
return -1;
|
|
el->el_map.key = el_malloc(sizeof(*el->el_map.key) * N_KEYS);
|
|
if (el->el_map.key == NULL)
|
|
return -1;
|
|
el->el_map.emacs = el_map_emacs;
|
|
el->el_map.vic = el_map_vi_command;
|
|
el->el_map.vii = el_map_vi_insert;
|
|
el->el_map.help = el_malloc(sizeof(*el->el_map.help) * EL_NUM_FCNS);
|
|
if (el->el_map.help == NULL)
|
|
return -1;
|
|
(void) memcpy(el->el_map.help, help__get(),
|
|
sizeof(*el->el_map.help) * EL_NUM_FCNS);
|
|
el->el_map.func = el_malloc(sizeof(*el->el_map.func) * EL_NUM_FCNS);
|
|
if (el->el_map.func == NULL)
|
|
return -1;
|
|
memcpy(el->el_map.func, func__get(), sizeof(*el->el_map.func)
|
|
* EL_NUM_FCNS);
|
|
el->el_map.nfunc = EL_NUM_FCNS;
|
|
|
|
#ifdef VIDEFAULT
|
|
map_init_vi(el);
|
|
#else
|
|
map_init_emacs(el);
|
|
#endif /* VIDEFAULT */
|
|
return 0;
|
|
}
|
|
|
|
|
|
/* map_end():
|
|
* Free the space taken by the editor maps
|
|
*/
|
|
protected void
|
|
map_end(EditLine *el)
|
|
{
|
|
|
|
el_free(el->el_map.alt);
|
|
el->el_map.alt = NULL;
|
|
el_free(el->el_map.key);
|
|
el->el_map.key = NULL;
|
|
el->el_map.emacs = NULL;
|
|
el->el_map.vic = NULL;
|
|
el->el_map.vii = NULL;
|
|
el_free(el->el_map.help);
|
|
el->el_map.help = NULL;
|
|
el_free(el->el_map.func);
|
|
el->el_map.func = NULL;
|
|
}
|
|
|
|
|
|
/* map_init_nls():
|
|
* Find all the printable keys and bind them to self insert
|
|
*/
|
|
private void
|
|
map_init_nls(EditLine *el)
|
|
{
|
|
int i;
|
|
|
|
el_action_t *map = el->el_map.key;
|
|
|
|
for (i = 0200; i <= 0377; i++)
|
|
if (Isprint(i))
|
|
map[i] = ED_INSERT;
|
|
}
|
|
|
|
|
|
/* map_init_meta():
|
|
* Bind all the meta keys to the appropriate ESC-<key> sequence
|
|
*/
|
|
private void
|
|
map_init_meta(EditLine *el)
|
|
{
|
|
Char buf[3];
|
|
int i;
|
|
el_action_t *map = el->el_map.key;
|
|
el_action_t *alt = el->el_map.alt;
|
|
|
|
for (i = 0; i <= 0377 && map[i] != EM_META_NEXT; i++)
|
|
continue;
|
|
|
|
if (i > 0377) {
|
|
for (i = 0; i <= 0377 && alt[i] != EM_META_NEXT; i++)
|
|
continue;
|
|
if (i > 0377) {
|
|
i = 033;
|
|
if (el->el_map.type == MAP_VI)
|
|
map = alt;
|
|
} else
|
|
map = alt;
|
|
}
|
|
buf[0] = (Char) i;
|
|
buf[2] = 0;
|
|
for (i = 0200; i <= 0377; i++)
|
|
switch (map[i]) {
|
|
case ED_INSERT:
|
|
case ED_UNASSIGNED:
|
|
case ED_SEQUENCE_LEAD_IN:
|
|
break;
|
|
default:
|
|
buf[1] = i & 0177;
|
|
keymacro_add(el, buf, keymacro_map_cmd(el, (int) map[i]), XK_CMD);
|
|
break;
|
|
}
|
|
map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
|
|
}
|
|
|
|
|
|
/* map_init_vi():
|
|
* Initialize the vi bindings
|
|
*/
|
|
protected void
|
|
map_init_vi(EditLine *el)
|
|
{
|
|
int i;
|
|
el_action_t *key = el->el_map.key;
|
|
el_action_t *alt = el->el_map.alt;
|
|
const el_action_t *vii = el->el_map.vii;
|
|
const el_action_t *vic = el->el_map.vic;
|
|
|
|
el->el_map.type = MAP_VI;
|
|
el->el_map.current = el->el_map.key;
|
|
|
|
keymacro_reset(el);
|
|
|
|
for (i = 0; i < N_KEYS; i++) {
|
|
key[i] = vii[i];
|
|
alt[i] = vic[i];
|
|
}
|
|
|
|
map_init_meta(el);
|
|
map_init_nls(el);
|
|
|
|
tty_bind_char(el, 1);
|
|
terminal_bind_arrow(el);
|
|
}
|
|
|
|
|
|
/* map_init_emacs():
|
|
* Initialize the emacs bindings
|
|
*/
|
|
protected void
|
|
map_init_emacs(EditLine *el)
|
|
{
|
|
int i;
|
|
Char buf[3];
|
|
el_action_t *key = el->el_map.key;
|
|
el_action_t *alt = el->el_map.alt;
|
|
const el_action_t *emacs = el->el_map.emacs;
|
|
|
|
el->el_map.type = MAP_EMACS;
|
|
el->el_map.current = el->el_map.key;
|
|
keymacro_reset(el);
|
|
|
|
for (i = 0; i < N_KEYS; i++) {
|
|
key[i] = emacs[i];
|
|
alt[i] = ED_UNASSIGNED;
|
|
}
|
|
|
|
map_init_meta(el);
|
|
map_init_nls(el);
|
|
|
|
buf[0] = CONTROL('X');
|
|
buf[1] = CONTROL('X');
|
|
buf[2] = 0;
|
|
keymacro_add(el, buf, keymacro_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
|
|
|
|
tty_bind_char(el, 1);
|
|
terminal_bind_arrow(el);
|
|
}
|
|
|
|
|
|
/* map_set_editor():
|
|
* Set the editor
|
|
*/
|
|
protected int
|
|
map_set_editor(EditLine *el, Char *editor)
|
|
{
|
|
|
|
if (Strcmp(editor, STR("emacs")) == 0) {
|
|
map_init_emacs(el);
|
|
return 0;
|
|
}
|
|
if (Strcmp(editor, STR("vi")) == 0) {
|
|
map_init_vi(el);
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* map_get_editor():
|
|
* Retrieve the editor
|
|
*/
|
|
protected int
|
|
map_get_editor(EditLine *el, const Char **editor)
|
|
{
|
|
|
|
if (editor == NULL)
|
|
return -1;
|
|
switch (el->el_map.type) {
|
|
case MAP_EMACS:
|
|
*editor = STR("emacs");
|
|
return 0;
|
|
case MAP_VI:
|
|
*editor = STR("vi");
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* map_print_key():
|
|
* Print the function description for 1 key
|
|
*/
|
|
private void
|
|
map_print_key(EditLine *el, el_action_t *map, const Char *in)
|
|
{
|
|
char outbuf[EL_BUFSIZ];
|
|
el_bindings_t *bp, *ep;
|
|
|
|
if (in[0] == '\0' || in[1] == '\0') {
|
|
(void) keymacro__decode_str(in, outbuf, sizeof(outbuf), "");
|
|
ep = &el->el_map.help[el->el_map.nfunc];
|
|
for (bp = el->el_map.help; bp < ep; bp++)
|
|
if (bp->func == map[(unsigned char) *in]) {
|
|
(void) fprintf(el->el_outfile,
|
|
"%s\t->\t" FSTR "\n", outbuf, bp->name);
|
|
return;
|
|
}
|
|
} else
|
|
keymacro_print(el, in);
|
|
}
|
|
|
|
|
|
/* map_print_some_keys():
|
|
* Print keys from first to last
|
|
*/
|
|
private void
|
|
map_print_some_keys(EditLine *el, el_action_t *map, wint_t first, wint_t last)
|
|
{
|
|
el_bindings_t *bp, *ep;
|
|
Char firstbuf[2], lastbuf[2];
|
|
char unparsbuf[EL_BUFSIZ], extrabuf[EL_BUFSIZ];
|
|
|
|
firstbuf[0] = (Char)first;
|
|
firstbuf[1] = 0;
|
|
lastbuf[0] = (Char)last;
|
|
lastbuf[1] = 0;
|
|
if (map[first] == ED_UNASSIGNED) {
|
|
if (first == last) {
|
|
(void) keymacro__decode_str(firstbuf, unparsbuf,
|
|
sizeof(unparsbuf), STRQQ);
|
|
(void) fprintf(el->el_outfile,
|
|
"%-15s-> is undefined\n", unparsbuf);
|
|
}
|
|
return;
|
|
}
|
|
ep = &el->el_map.help[el->el_map.nfunc];
|
|
for (bp = el->el_map.help; bp < ep; bp++) {
|
|
if (bp->func == map[first]) {
|
|
if (first == last) {
|
|
(void) keymacro__decode_str(firstbuf, unparsbuf,
|
|
sizeof(unparsbuf), STRQQ);
|
|
(void) fprintf(el->el_outfile, "%-15s-> " FSTR "\n",
|
|
unparsbuf, bp->name);
|
|
} else {
|
|
(void) keymacro__decode_str(firstbuf, unparsbuf,
|
|
sizeof(unparsbuf), STRQQ);
|
|
(void) keymacro__decode_str(lastbuf, extrabuf,
|
|
sizeof(extrabuf), STRQQ);
|
|
(void) fprintf(el->el_outfile,
|
|
"%-4s to %-7s-> " FSTR "\n",
|
|
unparsbuf, extrabuf, bp->name);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
#ifdef MAP_DEBUG
|
|
if (map == el->el_map.key) {
|
|
(void) keymacro__decode_str(firstbuf, unparsbuf,
|
|
sizeof(unparsbuf), STRQQ);
|
|
(void) fprintf(el->el_outfile,
|
|
"BUG!!! %s isn't bound to anything.\n", unparsbuf);
|
|
(void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n",
|
|
first, el->el_map.key[first]);
|
|
} else {
|
|
(void) keymacro__decode_str(firstbuf, unparsbuf,
|
|
sizeof(unparsbuf), STRQQ);
|
|
(void) fprintf(el->el_outfile,
|
|
"BUG!!! %s isn't bound to anything.\n", unparsbuf);
|
|
(void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n",
|
|
first, el->el_map.alt[first]);
|
|
}
|
|
#endif
|
|
EL_ABORT((el->el_errfile, "Error printing keys\n"));
|
|
}
|
|
|
|
|
|
/* map_print_all_keys():
|
|
* Print the function description for all keys.
|
|
*/
|
|
private void
|
|
map_print_all_keys(EditLine *el)
|
|
{
|
|
int prev, i;
|
|
|
|
(void) fprintf(el->el_outfile, "Standard key bindings\n");
|
|
prev = 0;
|
|
for (i = 0; i < N_KEYS; i++) {
|
|
if (el->el_map.key[prev] == el->el_map.key[i])
|
|
continue;
|
|
map_print_some_keys(el, el->el_map.key, prev, i - 1);
|
|
prev = i;
|
|
}
|
|
map_print_some_keys(el, el->el_map.key, prev, i - 1);
|
|
|
|
(void) fprintf(el->el_outfile, "Alternative key bindings\n");
|
|
prev = 0;
|
|
for (i = 0; i < N_KEYS; i++) {
|
|
if (el->el_map.alt[prev] == el->el_map.alt[i])
|
|
continue;
|
|
map_print_some_keys(el, el->el_map.alt, prev, i - 1);
|
|
prev = i;
|
|
}
|
|
map_print_some_keys(el, el->el_map.alt, prev, i - 1);
|
|
|
|
(void) fprintf(el->el_outfile, "Multi-character bindings\n");
|
|
keymacro_print(el, STR(""));
|
|
(void) fprintf(el->el_outfile, "Arrow key bindings\n");
|
|
terminal_print_arrow(el, STR(""));
|
|
}
|
|
|
|
|
|
/* map_bind():
|
|
* Add/remove/change bindings
|
|
*/
|
|
protected int
|
|
map_bind(EditLine *el, int argc, const Char **argv)
|
|
{
|
|
el_action_t *map;
|
|
int ntype, rem;
|
|
const Char *p;
|
|
Char inbuf[EL_BUFSIZ];
|
|
Char outbuf[EL_BUFSIZ];
|
|
const Char *in = NULL;
|
|
Char *out;
|
|
el_bindings_t *bp, *ep;
|
|
int cmd;
|
|
int key;
|
|
|
|
if (argv == NULL)
|
|
return -1;
|
|
|
|
map = el->el_map.key;
|
|
ntype = XK_CMD;
|
|
key = rem = 0;
|
|
for (argc = 1; (p = argv[argc]) != NULL; argc++)
|
|
if (p[0] == '-')
|
|
switch (p[1]) {
|
|
case 'a':
|
|
map = el->el_map.alt;
|
|
break;
|
|
|
|
case 's':
|
|
ntype = XK_STR;
|
|
break;
|
|
#ifdef notyet
|
|
case 'c':
|
|
ntype = XK_EXE;
|
|
break;
|
|
#endif
|
|
case 'k':
|
|
key = 1;
|
|
break;
|
|
|
|
case 'r':
|
|
rem = 1;
|
|
break;
|
|
|
|
case 'v':
|
|
map_init_vi(el);
|
|
return 0;
|
|
|
|
case 'e':
|
|
map_init_emacs(el);
|
|
return 0;
|
|
|
|
case 'l':
|
|
ep = &el->el_map.help[el->el_map.nfunc];
|
|
for (bp = el->el_map.help; bp < ep; bp++)
|
|
(void) fprintf(el->el_outfile,
|
|
"" FSTR "\n\t" FSTR "\n",
|
|
bp->name, bp->description);
|
|
return 0;
|
|
default:
|
|
(void) fprintf(el->el_errfile,
|
|
"" FSTR ": Invalid switch `%lc'.\n",
|
|
argv[0], (wint_t)p[1]);
|
|
}
|
|
else
|
|
break;
|
|
|
|
if (argv[argc] == NULL) {
|
|
map_print_all_keys(el);
|
|
return 0;
|
|
}
|
|
if (key)
|
|
in = argv[argc++];
|
|
else if ((in = parse__string(inbuf, argv[argc++])) == NULL) {
|
|
(void) fprintf(el->el_errfile,
|
|
"" FSTR ": Invalid \\ or ^ in instring.\n",
|
|
argv[0]);
|
|
return -1;
|
|
}
|
|
if (rem) {
|
|
if (key) {
|
|
(void) terminal_clear_arrow(el, in);
|
|
return -1;
|
|
}
|
|
if (in[1])
|
|
(void) keymacro_delete(el, in);
|
|
else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
|
|
(void) keymacro_delete(el, in);
|
|
else
|
|
map[(unsigned char) *in] = ED_UNASSIGNED;
|
|
return 0;
|
|
}
|
|
if (argv[argc] == NULL) {
|
|
if (key)
|
|
terminal_print_arrow(el, in);
|
|
else
|
|
map_print_key(el, map, in);
|
|
return 0;
|
|
}
|
|
#ifdef notyet
|
|
if (argv[argc + 1] != NULL) {
|
|
bindkeymacro_usage();
|
|
return -1;
|
|
}
|
|
#endif
|
|
|
|
switch (ntype) {
|
|
case XK_STR:
|
|
case XK_EXE:
|
|
if ((out = parse__string(outbuf, argv[argc])) == NULL) {
|
|
(void) fprintf(el->el_errfile,
|
|
"" FSTR ": Invalid \\ or ^ in outstring.\n", argv[0]);
|
|
return -1;
|
|
}
|
|
if (key)
|
|
terminal_set_arrow(el, in, keymacro_map_str(el, out), ntype);
|
|
else
|
|
keymacro_add(el, in, keymacro_map_str(el, out), ntype);
|
|
map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
|
|
break;
|
|
|
|
case XK_CMD:
|
|
if ((cmd = parse_cmd(el, argv[argc])) == -1) {
|
|
(void) fprintf(el->el_errfile,
|
|
"" FSTR ": Invalid command `" FSTR "'.\n",
|
|
argv[0], argv[argc]);
|
|
return -1;
|
|
}
|
|
if (key)
|
|
terminal_set_arrow(el, in, keymacro_map_cmd(el, cmd), ntype);
|
|
else {
|
|
if (in[1]) {
|
|
keymacro_add(el, in, keymacro_map_cmd(el, cmd), ntype);
|
|
map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
|
|
} else {
|
|
keymacro_clear(el, map, in);
|
|
map[(unsigned char) *in] = (el_action_t)cmd;
|
|
}
|
|
}
|
|
break;
|
|
|
|
/* coverity[dead_error_begin] */
|
|
default:
|
|
EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype));
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/* map_addfunc():
|
|
* add a user defined function
|
|
*/
|
|
protected int
|
|
map_addfunc(EditLine *el, const Char *name, const Char *help, el_func_t func)
|
|
{
|
|
void *p;
|
|
size_t nf = el->el_map.nfunc + 1;
|
|
|
|
if (name == NULL || help == NULL || func == NULL)
|
|
return -1;
|
|
|
|
if ((p = el_realloc(el->el_map.func, nf *
|
|
sizeof(*el->el_map.func))) == NULL)
|
|
return -1;
|
|
el->el_map.func = p;
|
|
if ((p = el_realloc(el->el_map.help, nf * sizeof(*el->el_map.help)))
|
|
== NULL)
|
|
return -1;
|
|
el->el_map.help = p;
|
|
|
|
nf = (size_t)el->el_map.nfunc;
|
|
el->el_map.func[nf] = func;
|
|
|
|
el->el_map.help[nf].name = name;
|
|
el->el_map.help[nf].func = (int)nf;
|
|
el->el_map.help[nf].description = help;
|
|
el->el_map.nfunc++;
|
|
|
|
return 0;
|
|
}
|