diff options
Diffstat (limited to 'contrib/texinfo/info/session.c')
-rw-r--r-- | contrib/texinfo/info/session.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/contrib/texinfo/info/session.c b/contrib/texinfo/info/session.c index 229dd4e08bdd..7cf95fac631a 100644 --- a/contrib/texinfo/info/session.c +++ b/contrib/texinfo/info/session.c @@ -1,8 +1,8 @@ /* session.c -- user windowing interface to Info. - $Id: session.c,v 1.45 2002/03/02 15:05:04 karl Exp $ + $Id: session.c,v 1.3 2003/01/24 19:05:53 karl Exp $ - Copyright (C) 1993, 96, 97, 98, 99, 2000, 01, 02 - Free Software Foundation, Inc. + Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free + Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -3936,7 +3936,7 @@ incremental_search (window, count, ignore) key = info_get_input_char (); window_get_state (window, &mystate); - if (key == DEL) + if (key == DEL || key == Control ('h')) { /* User wants to delete one level of search? */ if (!isearch_states_index) @@ -3967,9 +3967,15 @@ incremental_search (window, count, ignore) if (!Meta_p (key) || key > 32) { - func = InfoFunction(window->keymap[key].function); - - if (isprint (key) || func == (VFunction *)NULL) + /* If this key is not a keymap, get its associated function, + if any. If it is a keymap, then it's probably ESC from an + arrow key, and we handle that case below. */ + char type = window->keymap[key].type; + func = type == ISFUNC + ? InfoFunction(window->keymap[key].function) + : NULL; /* function member is a Keymap if ISKMAP */ + + if (isprint (key) || (type == ISFUNC && func == NULL)) { insert_and_search: |