diff options
Diffstat (limited to 'lib/libedit')
| -rw-r--r-- | lib/libedit/chared.c | 6 | ||||
| -rw-r--r-- | lib/libedit/el.c | 8 | ||||
| -rw-r--r-- | lib/libedit/el.h | 8 | ||||
| -rw-r--r-- | lib/libedit/key.c | 49 | ||||
| -rw-r--r-- | lib/libedit/map.c | 14 | ||||
| -rw-r--r-- | lib/libedit/read.c | 6 | ||||
| -rw-r--r-- | lib/libedit/term.c | 33 | ||||
| -rw-r--r-- | lib/libedit/term.h | 6 |
8 files changed, 83 insertions, 47 deletions
diff --git a/lib/libedit/chared.c b/lib/libedit/chared.c index 93db66557e6..a4d0768000d 100644 --- a/lib/libedit/chared.c +++ b/lib/libedit/chared.c @@ -1,4 +1,4 @@ -/* $NetBSD: chared.c,v 1.9 2000/09/04 22:06:28 lukem Exp $ */ +/* $NetBSD: chared.c,v 1.10 2000/11/11 22:18:57 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)chared.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: chared.c,v 1.9 2000/09/04 22:06:28 lukem Exp $"); +__RCSID("$NetBSD: chared.c,v 1.10 2000/11/11 22:18:57 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -341,7 +341,7 @@ cv_delfini(EditLine *el) case NOP: case INSERT: default: - abort(); + EL_ABORT((el->el_errfile, "Bad oaction %d\n", oaction)); break; } diff --git a/lib/libedit/el.c b/lib/libedit/el.c index c66894e1b62..a7487fc07dd 100644 --- a/lib/libedit/el.c +++ b/lib/libedit/el.c @@ -1,4 +1,4 @@ -/* $NetBSD: el.c,v 1.19 2000/09/04 22:06:29 lukem Exp $ */ +/* $NetBSD: el.c,v 1.20 2000/11/11 22:18:57 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)el.c 8.2 (Berkeley) 1/3/94"; #else -__RCSID("$NetBSD: el.c,v 1.19 2000/09/04 22:06:29 lukem Exp $"); +__RCSID("$NetBSD: el.c,v 1.20 2000/11/11 22:18:57 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -223,7 +223,7 @@ el_set(EditLine *el, int op, ...) default: rv = -1; - abort(); + EL_ABORT((el->el_errfile, "Bad op %d\n", op)); break; } break; @@ -341,7 +341,7 @@ el_get(EditLine *el, int op, void *ret) default: rv = -1; - abort(); + EL_ABORT((el->errfile, "Bad op %d\n", op)); break; } break; diff --git a/lib/libedit/el.h b/lib/libedit/el.h index 8e586e2dbb0..8c81ee8243b 100644 --- a/lib/libedit/el.h +++ b/lib/libedit/el.h @@ -1,4 +1,4 @@ -/* $NetBSD: el.h,v 1.6 2000/09/04 22:06:29 lukem Exp $ */ +/* $NetBSD: el.h,v 1.7 2000/11/11 22:18:57 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -133,4 +133,10 @@ struct editline { protected int el_editmode(EditLine *, int, char **); +#ifdef DEBUG +#define EL_ABORT(a) (void) (fprintf(el->el_errfile, "%s, %d: ", \ + __FILE__, __LINE__), fprintf a, abort()) +#else +#define EL_ABORT(a) abort() +#endif #endif /* _h_el */ diff --git a/lib/libedit/key.c b/lib/libedit/key.c index d2c487cfaf8..4f5a299639c 100644 --- a/lib/libedit/key.c +++ b/lib/libedit/key.c @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.8 2000/10/04 16:21:39 sommerfeld Exp $ */ +/* $NetBSD: key.c,v 1.9 2000/11/11 22:18:57 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)key.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: key.c,v 1.8 2000/10/04 16:21:39 sommerfeld Exp $"); +__RCSID("$NetBSD: key.c,v 1.9 2000/11/11 22:18:57 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -86,11 +86,12 @@ struct key_node_t { }; private int node_trav(EditLine *, key_node_t *, char *, - key_value_t *); -private int node__try(key_node_t *, char *, key_value_t *, int); + key_value_t *); +private int node__try(EditLine *, key_node_t *, char *, + key_value_t *, int); private key_node_t *node__get(int); -private void node__put(key_node_t *); -private int node__delete(key_node_t **, char *); +private void node__put(EditLine *, key_node_t *); +private int node__delete(EditLine *, key_node_t **, char *); private int node_lookup(EditLine *, char *, key_node_t *, int); private int node_enum(EditLine *, key_node_t *, int); private int key__decode_char(char *, int, int); @@ -159,7 +160,7 @@ protected void key_reset(EditLine *el) { - node__put(el->el_key.map); + node__put(el, el->el_key.map); el->el_key.map = NULL; return; } @@ -207,7 +208,7 @@ key_add(EditLine *el, char *key, key_value_t *val, int ntype) /* it is properly initialized */ /* Now recurse through el->el_key.map */ - (void) node__try(el->el_key.map, key, val, ntype); + (void) node__try(el, el->el_key.map, key, val, ntype); return; } @@ -244,7 +245,7 @@ key_delete(EditLine *el, char *key) if (el->el_key.map == NULL) return (0); - (void) node__delete(&el->el_key.map, key); + (void) node__delete(el, &el->el_key.map, key); return (0); } @@ -312,7 +313,7 @@ node_trav(EditLine *el, key_node_t *ptr, char *ch, key_value_t *val) * Find a node that matches *str or allocate a new one */ private int -node__try(key_node_t *ptr, char *str, key_value_t *val, int ntype) +node__try(EditLine *el, key_node_t *ptr, char *str, key_value_t *val, int ntype) { if (ptr->ch != *str) { @@ -328,7 +329,7 @@ node__try(key_node_t *ptr, char *str, key_value_t *val, int ntype) if (*++str == '\0') { /* we're there */ if (ptr->next != NULL) { - node__put(ptr->next); + node__put(el, ptr->next); /* lose longer keys with this prefix */ ptr->next = NULL; } @@ -342,7 +343,8 @@ node__try(key_node_t *ptr, char *str, key_value_t *val, int ntype) el_free((ptr_t) ptr->val.str); break; default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", + ptr->type)); break; } @@ -355,14 +357,14 @@ node__try(key_node_t *ptr, char *str, key_value_t *val, int ntype) ptr->val.str = strdup(val->str); break; default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); break; } } else { /* still more chars to go */ if (ptr->next == NULL) ptr->next = node__get(*str); /* setup new node */ - (void) node__try(ptr->next, str, val, ntype); + (void) node__try(el, ptr->next, str, val, ntype); } return (0); } @@ -372,7 +374,7 @@ node__try(key_node_t *ptr, char *str, key_value_t *val, int ntype) * Delete node that matches str */ private int -node__delete(key_node_t **inptr, char *str) +node__delete(EditLine *el, key_node_t **inptr, char *str) { key_node_t *ptr; key_node_t *prev_ptr = NULL; @@ -397,9 +399,10 @@ node__delete(key_node_t **inptr, char *str) else prev_ptr->sibling = ptr->sibling; ptr->sibling = NULL; - node__put(ptr); + node__put(el, ptr); return (1); - } else if (ptr->next != NULL && node__delete(&ptr->next, str) == 1) { + } else if (ptr->next != NULL && + node__delete(el, &ptr->next, str) == 1) { if (ptr->next != NULL) return (0); if (prev_ptr == NULL) @@ -407,7 +410,7 @@ node__delete(key_node_t **inptr, char *str) else prev_ptr->sibling = ptr->sibling; ptr->sibling = NULL; - node__put(ptr); + node__put(el, ptr); return (1); } else { return (0); @@ -419,16 +422,16 @@ node__delete(key_node_t **inptr, char *str) * Puts a tree of nodes onto free list using free(3). */ private void -node__put(key_node_t *ptr) +node__put(EditLine *el, key_node_t *ptr) { if (ptr == NULL) return; if (ptr->next != NULL) { - node__put(ptr->next); + node__put(el, ptr->next); ptr->next = NULL; } - node__put(ptr->sibling); + node__put(el, ptr->sibling); switch (ptr->type) { case XK_CMD: @@ -440,7 +443,7 @@ node__put(key_node_t *ptr) el_free((ptr_t) ptr->val.str); break; default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ptr->type)); break; } el_free((ptr_t) ptr); @@ -590,7 +593,7 @@ key_kprint(EditLine *el, char *key, key_value_t *val, int ntype) break; default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); break; } else diff --git a/lib/libedit/map.c b/lib/libedit/map.c index dcb388bad9e..ff0bf1f04cb 100644 --- a/lib/libedit/map.c +++ b/lib/libedit/map.c @@ -1,4 +1,4 @@ -/* $NetBSD: map.c,v 1.11 2000/09/04 22:06:30 lukem Exp $ */ +/* $NetBSD: map.c,v 1.12 2000/11/11 22:18:57 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: map.c,v 1.11 2000/09/04 22:06:30 lukem Exp $"); +__RCSID("$NetBSD: map.c,v 1.12 2000/11/11 22:18:57 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -903,11 +903,11 @@ map_init(EditLine *el) */ #ifdef MAP_DEBUG if (sizeof(el_map_emacs) != N_KEYS * sizeof(el_action_t)) - abort(); + EL_ABORT((el->errfile, "Emacs map incorrect\n")); if (sizeof(el_map_vi_command) != N_KEYS * sizeof(el_action_t)) - abort(); + EL_ABORT((el->errfile, "Vi command map incorrect\n")); if (sizeof(el_map_vi_insert) != N_KEYS * sizeof(el_action_t)) - abort(); + EL_ABORT((el->errfile, "Vi insert map incorrect\n")); #endif el->el_map.alt = (el_action_t *)el_malloc(sizeof(el_action_t) * N_KEYS); @@ -1189,7 +1189,7 @@ map_print_some_keys(EditLine *el, el_action_t *map, int first, int last) first, el->el_map.alt[first]); } #endif - abort(); + EL_ABORT((el->el_errfile, "Error printing keys\n")); } @@ -1371,7 +1371,7 @@ map_bind(EditLine *el, int argc, char **argv) break; default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type\n", ntype)); break; } return (0); diff --git a/lib/libedit/read.c b/lib/libedit/read.c index fde9646c92b..b7a98d7d8d0 100644 --- a/lib/libedit/read.c +++ b/lib/libedit/read.c @@ -1,4 +1,4 @@ -/* $NetBSD: read.c,v 1.17 2000/09/04 22:06:31 lukem Exp $ */ +/* $NetBSD: read.c,v 1.18 2000/11/11 22:18:58 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: read.c,v 1.17 2000/09/04 22:06:31 lukem Exp $"); +__RCSID("$NetBSD: read.c,v 1.18 2000/11/11 22:18:58 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -238,7 +238,7 @@ read_getcmd(EditLine *el, el_action_t *cmdnum, char *ch) break; #endif default: - abort(); + EL_ABORT((el->el_errfile, "Bad XK_ type \n")); break; } } diff --git a/lib/libedit/term.c b/lib/libedit/term.c index 33d81d85877..d69ef3f973d 100644 --- a/lib/libedit/term.c +++ b/lib/libedit/term.c @@ -1,4 +1,4 @@ -/* $NetBSD: term.c,v 1.24 2000/10/04 16:21:39 sommerfeld Exp $ */ +/* $NetBSD: term.c,v 1.25 2000/11/11 22:18:58 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ #if 0 static char sccsid[] = "@(#)term.c 8.2 (Berkeley) 4/30/95"; #else -__RCSID("$NetBSD: term.c,v 1.24 2000/10/04 16:21:39 sommerfeld Exp $"); +__RCSID("$NetBSD: term.c,v 1.25 2000/11/11 22:18:58 christos Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -224,7 +224,11 @@ private struct termcapstr { { "RI", "cursor right multiple" }, #define T_UP 35 { "UP", "cursor up multiple" }, -#define T_str 36 +#define T_kh 36 + { "kh", "send cursor home" }, +#define T_at7 37 + { "@7", "send cursor end" }, +#define T_str 38 { NULL, NULL } }; @@ -1008,6 +1012,15 @@ term_init_arrow(EditLine *el) arrow[A_K_RT].fun.cmd = ED_NEXT_CHAR; arrow[A_K_RT].type = XK_CMD; + arrow[A_K_HO].name = "home"; + arrow[A_K_HO].key = T_kh; + arrow[A_K_HO].fun.cmd = ED_MOVE_TO_BEG; + arrow[A_K_HO].type = XK_CMD; + + arrow[A_K_EN].name = "end"; + arrow[A_K_EN].key = T_at7; + arrow[A_K_EN].fun.cmd = ED_MOVE_TO_END; + arrow[A_K_EN].type = XK_CMD; } @@ -1022,29 +1035,41 @@ term_reset_arrow(EditLine *el) static char strB[] = {033, '[', 'B', '\0'}; static char strC[] = {033, '[', 'C', '\0'}; static char strD[] = {033, '[', 'D', '\0'}; + static char strH[] = {033, '[', 'H', '\0'}; + static char strF[] = {033, '[', 'F', '\0'}; static char stOA[] = {033, 'O', 'A', '\0'}; static char stOB[] = {033, 'O', 'B', '\0'}; static char stOC[] = {033, 'O', 'C', '\0'}; static char stOD[] = {033, 'O', 'D', '\0'}; + static char stOH[] = {033, 'O', 'H', '\0'}; + static char stOF[] = {033, 'O', 'F', '\0'}; key_add(el, strA, &arrow[A_K_UP].fun, arrow[A_K_UP].type); key_add(el, strB, &arrow[A_K_DN].fun, arrow[A_K_DN].type); key_add(el, strC, &arrow[A_K_RT].fun, arrow[A_K_RT].type); key_add(el, strD, &arrow[A_K_LT].fun, arrow[A_K_LT].type); + key_add(el, strH, &arrow[A_K_HO].fun, arrow[A_K_HO].type); + key_add(el, strF, &arrow[A_K_EN].fun, arrow[A_K_EN].type); key_add(el, stOA, &arrow[A_K_UP].fun, arrow[A_K_UP].type); key_add(el, stOB, &arrow[A_K_DN].fun, arrow[A_K_DN].type); key_add(el, stOC, &arrow[A_K_RT].fun, arrow[A_K_RT].type); key_add(el, stOD, &arrow[A_K_LT].fun, arrow[A_K_LT].type); + key_add(el, stOH, &arrow[A_K_HO].fun, arrow[A_K_HO].type); + key_add(el, stOF, &arrow[A_K_EN].fun, arrow[A_K_EN].type); if (el->el_map.type == MAP_VI) { key_add(el, &strA[1], &arrow[A_K_UP].fun, arrow[A_K_UP].type); key_add(el, &strB[1], &arrow[A_K_DN].fun, arrow[A_K_DN].type); key_add(el, &strC[1], &arrow[A_K_RT].fun, arrow[A_K_RT].type); key_add(el, &strD[1], &arrow[A_K_LT].fun, arrow[A_K_LT].type); + key_add(el, &strH[1], &arrow[A_K_HO].fun, arrow[A_K_HO].type); + key_add(el, &strF[1], &arrow[A_K_EN].fun, arrow[A_K_EN].type); key_add(el, &stOA[1], &arrow[A_K_UP].fun, arrow[A_K_UP].type); key_add(el, &stOB[1], &arrow[A_K_DN].fun, arrow[A_K_DN].type); key_add(el, &stOC[1], &arrow[A_K_RT].fun, arrow[A_K_RT].type); key_add(el, &stOD[1], &arrow[A_K_LT].fun, arrow[A_K_LT].type); + key_add(el, &stOH[1], &arrow[A_K_HO].fun, arrow[A_K_HO].type); + key_add(el, &stOF[1], &arrow[A_K_EN].fun, arrow[A_K_EN].type); } } @@ -1123,7 +1148,7 @@ term_bind_arrow(EditLine *el) term_reset_arrow(el); - for (i = 0; i < 4; i++) { + for (i = 0; i < A_K_NKEYS; i++) { p = el->el_term.t_str[arrow[i].key]; if (p && *p) { j = (unsigned char) *p; diff --git a/lib/libedit/term.h b/lib/libedit/term.h index 9a9378eaa66..21296f1d1dd 100644 --- a/lib/libedit/term.h +++ b/lib/libedit/term.h @@ -1,4 +1,4 @@ -/* $NetBSD: term.h,v 1.10 2000/09/04 22:06:33 lukem Exp $ */ +/* $NetBSD: term.h,v 1.11 2000/11/11 22:18:58 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -80,7 +80,9 @@ typedef struct { #define A_K_UP 1 #define A_K_LT 2 #define A_K_RT 3 -#define A_K_NKEYS 4 +#define A_K_HO 4 +#define A_K_EN 5 +#define A_K_NKEYS 6 protected void term_move_to_line(EditLine *, int); protected void term_move_to_char(EditLine *, int); |
