texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

texinfo update (Mon Dec 17 14:23:01 EST 2007)


From: Karl Berry
Subject: texinfo update (Mon Dec 17 14:23:01 EST 2007)
Date: Mon, 17 Dec 2007 14:23:04 -0500

Index: ChangeLog
===================================================================
RCS file: /sources/texinfo/texinfo/ChangeLog,v
retrieving revision 1.788
retrieving revision 1.790
diff -u -r1.788 -r1.790
--- ChangeLog   16 Dec 2007 22:42:18 -0000      1.788
+++ ChangeLog   17 Dec 2007 19:13:42 -0000      1.790
@@ -1,7 +1,24 @@
+2007-12-17  Karl Berry  <address@hidden>
+
+       * doc/info-stnd.texi (Searching Commands): Document the new regex
+       search, a little.
+       (@copying): Update Back-Cover Text.
+       * doc/info.texi (@copying): Update Back-Cover Text.
+
+2007-12-17  Stephane Chazelas  <address@hidden>
+
+       * info/infomap.c (R): new command info_toggle_regexp.
+       * info/session.c (use_regex): new static (true by default).
+       (info_toggle_regexp): new command.
+       * info/session.h (info_toggle_regexp): declare it.
+       * info/search.c (regexp_search): new fn.
+       * info/search.h (regexp_search): declare it.
+       Savannah bug 15572.
+
 2007-12-16  Karl Berry  <address@hidden>
 
        * info/session.c: remove more status messages.
-       Report frmo Benno Schulenberg, 16 Dec 2007 12:24:12.
+       Report from Benno Schulenberg, 16 Dec 2007 12:24:12.
 
 2007-12-15  Karl Berry  <address@hidden>
 
Index: NEWS
===================================================================
RCS file: /sources/texinfo/texinfo/NEWS,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -r1.154 -r1.155
--- NEWS        2 Dec 2007 14:41:05 -0000       1.154
+++ NEWS        17 Dec 2007 19:12:10 -0000      1.155
@@ -1,4 +1,4 @@
-$Id: NEWS,v 1.154 2007/12/02 14:41:05 karl Exp $
+$Id: NEWS,v 1.155 2007/12/17 19:12:10 karl Exp $
 This NEWS file records noteworthy changes, very tersely.
 See the manual for detailed information.
 
@@ -23,6 +23,8 @@
 -------------------------------------------------------------------------------
 
 * Info:
+  . regular expression searches are now the default; the new R command
+    toggles between regexp and literal-string searches.
   . the precise line number specified in index entries is used if available.
 
 * Distribution:
Index: doc/info-stnd.texi
===================================================================
RCS file: /sources/texinfo/texinfo/doc/info-stnd.texi,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- doc/info-stnd.texi  6 Sep 2007 01:02:31 -0000       1.16
+++ doc/info-stnd.texi  17 Dec 2007 19:12:11 -0000      1.17
@@ -1,5 +1,5 @@
-\input texinfo.tex    @c -*-texinfo-*-
address@hidden $Id: info-stnd.texi,v 1.16 2007/09/06 01:02:31 karl Exp $
+vb\input texinfo.tex    @c -*-texinfo-*-
address@hidden $Id: info-stnd.texi,v 1.17 2007/12/17 19:12:11 karl Exp $
 @c We must \input texinfo.tex instead of texinfo, otherwise make
 @c distcheck in the Texinfo distribution fails, because the texinfo Info
 @c file is made first, and texi2dvi must include . first in the path.
@@ -29,8 +29,9 @@
 license is included in the section entitled ``GNU Free Documentation
 License' in the Texinfo manual.
 
-(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
-this GNU Manual, like GNU software.''
+(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
 @end quotation
 
 This document is part of a collection distributed under the GNU Free
@@ -940,11 +941,13 @@
 @kindex s
 @kindex /
 @findex search
-Read a string in the echo area and search for it.  If the string
-includes upper-case characters, the Info file is searched
-case-sensitively; otherwise Info ignores the letter case.  With a
-numeric argument of @var{N}, search for @var{N}th occurrence of the
-string.  Negative arguments search backwards.
address@hidden regular expression search
+Read a string in the echo area and search for it, either as a regular
+expression (by default) or a literal string.  If the string includes
+upper-case characters, the Info file is searched case-sensitively;
+otherwise Info ignores the letter case.  With a numeric argument of
address@hidden, search for @var{N}th occurrence of the string.  Negative
+arguments search backwards.
 
 @item @key{?} (@code{search-backward}, vi-like operation)
 @kindex ?, vi-like operation
@@ -955,6 +958,14 @@
 case.  With a numeric argument of @var{N}, search for @var{N}th
 occurrence of the string.  Negative arguments search forward.
 
address@hidden @key{R} (@code{toggle-regexp})
address@hidden R
address@hidden toggle-regexp
+Toggle between using regular expressions and literal strings for
+searching.  Info uses so-called `extended' regular expression syntax,
+similar to Emacs (@pxref{Regexps, , Using Regular Expressions, emacs,
+The GNU Emacs Manual}).
+
 @item @key{S} (@code{search-case-sensitively}
 @kindex S
 @findex search-case-sensitively
Index: doc/info.texi
===================================================================
RCS file: /sources/texinfo/texinfo/doc/info.texi,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- doc/info.texi       31 Jul 2007 15:14:35 -0000      1.23
+++ doc/info.texi       17 Dec 2007 19:13:42 -0000      1.24
@@ -22,14 +22,13 @@
 under the terms of the GNU Free Documentation License, Version 1.2 or
 any later version published by the Free Software Foundation; with no
 Invariant Sections, with the Front-Cover texts being ``A GNU
-Manual,'' and with the Back-Cover Texts as in (a) below.  A copy of the
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
 license is included in the section entitled ``GNU Free Documentation
 License'' in the Emacs manual.
 
-(a) The FSF's Back-Cover Text is: ``You have freedom to copy and
-modify this GNU Manual, like GNU software.  Buying copies from GNU
-Press supports the FSF in developing GNU and promoting software
-freedom.''
+(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
 
 This document is part of a collection distributed under the GNU Free
 Documentation License.  If you want to distribute this document
Index: info/infomap.c
===================================================================
RCS file: /sources/texinfo/texinfo/info/infomap.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- info/infomap.c      1 Jul 2007 21:20:30 -0000       1.13
+++ info/infomap.c      17 Dec 2007 19:12:11 -0000      1.14
@@ -1,5 +1,5 @@
 /* infomap.c -- keymaps for Info.
-   $Id: infomap.c,v 1.13 2007/07/01 21:20:30 karl Exp $
+   $Id: infomap.c,v 1.14 2007/12/17 19:12:11 karl Exp $
 
    Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2007
    Free Software Foundation, Inc.
@@ -76,13 +76,13 @@
       const unsigned char *p;
       Keymap m = rootmap;
       if (k->map != rootmap)
-       continue;
+        continue;
       for (p = (unsigned char *) k->keyseq; *p && m[*p].type == ISKMAP; p++)
-       m = (Keymap)m[*p].function;
+        m = (Keymap)m[*p].function;
       if (*p != c || p[1])
-       continue;
+        continue;
       if (m[*p].type != ISFUNC)
-       abort ();
+        abort ();
       break;
     }
   return k;
@@ -146,20 +146,20 @@
     {
       keymap[i].type = map[i].type;
       switch (map[i].type)
-       {
-       case ISFUNC:
-         keymap[i].function = map[i].function;
+        {
+        case ISFUNC:
+          keymap[i].function = map[i].function;
 #if defined(INFOKEY)
-         ks = find_function_keyseq (map, i, rootmap);
-         if (ks)
-           add_function_keyseq(map[i].function, ks->keyseq, newroot);
+          ks = find_function_keyseq (map, i, rootmap);
+          if (ks)
+            add_function_keyseq(map[i].function, ks->keyseq, newroot);
 #endif /* INFOKEY */
-         break;
-       case ISKMAP:
-         keymap[i].function = (InfoCommand *)keymap_copy_keymap
+          break;
+        case ISKMAP:
+          keymap[i].function = (InfoCommand *)keymap_copy_keymap
             ((Keymap)map[i].function, rootmap, NULL);
-         break;
-       }
+          break;
+        }
     }
   return (keymap);
 }
@@ -184,9 +184,9 @@
         {
         case ISFUNC:
 #if defined(INFOKEY)
-         ks = find_function_keyseq(map, i, rootmap);
-         if (ks)
-           remove_function_keyseq (map[i].function, ks->keyseq, rootmap);
+          ks = find_function_keyseq(map, i, rootmap);
+          if (ks)
+            remove_function_keyseq (map[i].function, ks->keyseq, rootmap);
 #endif /* INFOKEY */
           break;
 
@@ -219,14 +219,14 @@
         {
         case ISFUNC:
 #if defined(INFOKEY)
-         ks = find_function_keyseq(m, c, map);
-         if (ks)
-           remove_function_keyseq (m[c].function, ks->keyseq, map);
+          ks = find_function_keyseq(m, c, map);
+          if (ks)
+            remove_function_keyseq (m[c].function, ks->keyseq, map);
 #else /* !INFOKEY */
           if (!(m[c].function == NULL || (
                 m != map &&
                 m[c].function == InfoCmd(info_do_lowercase_version))
-             ))
+              ))
             return 0;
 #endif /* !INFOKEY */
 
@@ -245,8 +245,8 @@
 
         case ISKMAP:
 #if defined(INFOKEY)
-         if (*s == '\0')
-           keymap_discard_keymap ((Keymap)m[c].function, map);
+          if (*s == '\0')
+            keymap_discard_keymap ((Keymap)m[c].function, map);
 #else /* !INFOKEY */
           if (*s == '\0')
             return 0;
@@ -260,7 +260,7 @@
       else
         {
 #if defined(INFOKEY)
-         add_function_keyseq (keyentry->function, keyseq, map);
+          add_function_keyseq (keyentry->function, keyseq, map);
 #endif /* INFOKEY */
           m[c] = *keyentry;
         }
@@ -385,7 +385,7 @@
   keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
   keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
   keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
   keymap_bind_keyseq (map, term_kh, &map[Control ('a')]); /* home */
   keymap_bind_keyseq (map, term_ke, &map[Control ('e')]); /* end */
 
@@ -396,10 +396,10 @@
   keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
   keymap_bind_keyseq (map, "\033OB", &map['f']);
   keymap_bind_keyseq (map, "\033[B", &map['f']);
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   map = (Keymap)echo_area_keymap[Control ('x')].function;
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   /* Bind commands for Info window keymaps. */
   map = info_keymap;
@@ -449,6 +449,7 @@
   map['p'].function = info_prev_node;
   map['q'].function = info_quit;
   map['r'].function = info_xref_item;
+  map['R'].function = info_toggle_regexp;
   map['s'].function = info_search;
   map['S'].function = info_search_case_sensitively;
   map['t'].function = info_top_node;
@@ -507,9 +508,9 @@
   keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
   keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
   keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
-  keymap_bind_keyseq (map, term_kh, &map['b']);        /* home */
-  keymap_bind_keyseq (map, term_ke, &map['e']);        /* end */
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kh, &map['b']); /* home */
+  keymap_bind_keyseq (map, term_ke, &map['e']); /* end */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   map = (Keymap)info_keymap[ESC].function;
   keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
@@ -520,7 +521,7 @@
   keymap_bind_keyseq (map, "\033[B", &map['f']);
   keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
   keymap_bind_keyseq (map, term_kP, &map[DEL]); /* pageup */
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   /* The alternative to this definition of a `main map' key in the
      `ESC map' section, is something like:
@@ -561,7 +562,7 @@
     {
       info_keymap[i].function =
         ((Keymap) echo_area_keymap[ESC].function)[i].function =
-       info_add_digit_to_numeric_arg;
+        info_add_digit_to_numeric_arg;
     }
   info_keymap['-'].function =
     ((Keymap) echo_area_keymap[ESC].function)['-'].function =
@@ -642,7 +643,7 @@
   keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
   keymap_bind_keyseq (map, term_kh, &map[Control ('a')]); /* home */
   keymap_bind_keyseq (map, term_ke, &map[Control ('e')]); /* end */
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   map = (Keymap)echo_area_keymap[ESC].function;
   keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
@@ -651,7 +652,7 @@
   keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
   keymap_bind_keyseq (map, "\033OB", &map['f']);
   keymap_bind_keyseq (map, "\033[B", &map['f']);
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   map = (Keymap)echo_area_keymap[Control ('x')].function;
   keymap_bind_keyseq (map, term_kD, &map[DEL]);
@@ -714,7 +715,7 @@
   map['q'].function = info_quit;
   map['Q'].function = info_quit;
   map['r'].function = info_redraw_display;
-  map['R'].function = info_redraw_display;
+  map['R'].function = info_toggle_regexp;
   map['s'].function = info_search;
   map['S'].function = info_search_case_sensitively;
   map['t'].function = info_top_node;
@@ -722,7 +723,7 @@
   map['w'].function = info_scroll_backward_page_only_set_window;
   map['y'].function = info_up_line;
   map['z'].function = info_scroll_forward_page_only_set_window;
-  map['Z'].function = NULL;    /* unbind, so it works to bind "ZZ" below */
+  map['Z'].function = NULL;     /* unbind, so it works to bind "ZZ" below */
   map[DEL].function = info_scroll_backward;
   keymap_bind_keyseq (map, term_kD, &map[DEL]);
   keymap_bind_keyseq (map, ":q", &map['q']);
@@ -803,8 +804,8 @@
   keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
   keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
   keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
-  keymap_bind_keyseq (map, term_kh, &map['b']);        /* home */
-  keymap_bind_keyseq (map, term_ke, &map['e']);        /* end */
+  keymap_bind_keyseq (map, term_kh, &map['b']); /* home */
+  keymap_bind_keyseq (map, term_ke, &map['e']); /* end */
 
   map = (Keymap)info_keymap[ESC].function;
   keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
@@ -815,7 +816,7 @@
   keymap_bind_keyseq (map, "\033[B", &map['f']);
   keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
   keymap_bind_keyseq (map, term_kP, &map[DEL]); /* pageup */
-  keymap_bind_keyseq (map, term_kD, &map[DEL]);        /* delete */
+  keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
 
   /* The alternative to this definition of a `main map' key in the
      `ESC map' section, is something like:
@@ -843,570 +844,571 @@
 
 /* Initialize the keymaps from the .info keymap file. */
 
-#define NUL    '\0'
+#define NUL     '\0'
 
 static unsigned char default_emacs_like_info_keys[] =
 {
-       0,      /* suppress-default-keybindings flag */
-       TAB, NUL,                       A_info_move_to_next_xref,
-       LFD, NUL,                       A_info_select_reference_this_line,
-       RET, NUL,                       A_info_select_reference_this_line,
-       SPC, NUL,                       A_info_scroll_forward,
-       CONTROL('a'), NUL,              A_info_beginning_of_line,
-       CONTROL('b'), NUL,              A_info_backward_char,
-       CONTROL('e'), NUL,              A_info_end_of_line,
-       CONTROL('f'), NUL,              A_info_forward_char,
-       CONTROL('g'), NUL,              A_info_abort_key,
-       CONTROL('h'), NUL,              A_info_get_help_window,
-       CONTROL('l'), NUL,              A_info_redraw_display,
-       CONTROL('n'), NUL,              A_info_next_line,
-       CONTROL('p'), NUL,              A_info_prev_line,
-       CONTROL('r'), NUL,              A_isearch_backward,
-       CONTROL('s'), NUL,              A_isearch_forward,
-       CONTROL('u'), NUL,              A_info_universal_argument,
-       CONTROL('v'), NUL,              A_info_scroll_forward_page_only,
-       ',', NUL,                       A_info_next_index_match,
-       '/', NUL,                       A_info_search,
-       '0', NUL,                       A_info_last_menu_item,
-       '1', NUL,                       A_info_menu_digit,
-       '2', NUL,                       A_info_menu_digit,
-       '3', NUL,                       A_info_menu_digit,
-       '4', NUL,                       A_info_menu_digit,
-       '5', NUL,                       A_info_menu_digit,
-       '6', NUL,                       A_info_menu_digit,
-       '7', NUL,                       A_info_menu_digit,
-       '8', NUL,                       A_info_menu_digit,
-       '9', NUL,                       A_info_menu_digit,
-       '<', NUL,                       A_info_first_node,
-       '>', NUL,                       A_info_last_node,
-       '?', NUL,                       A_info_get_help_window,
-       '[', NUL,                       A_info_global_prev_node,
-       ']', NUL,                       A_info_global_next_node,
-       'b', NUL,                       A_info_beginning_of_node,
-       'd', NUL,                       A_info_dir_node,
-       'e', NUL,                       A_info_end_of_node,
-       'f', NUL,                       A_info_xref_item,
-       'g', NUL,                       A_info_goto_node,
-       'G', NUL,                       A_info_menu_sequence,
-       'h', NUL,                       A_info_get_info_help_node,
-       'i', NUL,                       A_info_index_search,
-       'l', NUL,                       A_info_history_node,
-       'm', NUL,                       A_info_menu_item,
-       'n', NUL,                       A_info_next_node,
-       'O', NUL,                       A_info_goto_invocation_node,
-       'p', NUL,                       A_info_prev_node,
-       'q', NUL,                       A_info_quit,
-       'r', NUL,                       A_info_xref_item,
-       's', NUL,                       A_info_search,
-       'S', NUL,                       A_info_search_case_sensitively,
-       't', NUL,                       A_info_top_node,
-       'u', NUL,                       A_info_up_node,
-       DEL, NUL,                       A_info_scroll_backward,
-       ESC, '0', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, CONTROL('f'), NUL,         A_info_show_footnotes,
-       ESC, CONTROL('g'), NUL,         A_info_abort_key,
-       ESC, TAB, NUL,                  A_info_move_to_prev_xref,
-       ESC, CONTROL('v'), NUL,         A_info_scroll_other_window,
-       ESC, '<', NUL,                  A_info_beginning_of_node,
-       ESC, '>', NUL,                  A_info_end_of_node,
-       ESC, 'b', NUL,                  A_info_backward_word,
-       ESC, 'f', NUL,                  A_info_forward_word,
-       ESC, 'r', NUL,                  A_info_move_to_window_line,
-       ESC, 'v', NUL,                  A_info_scroll_backward_page_only,
-       Meta('0'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta(CONTROL('f')), NUL,        A_info_show_footnotes,
-       Meta(CONTROL('g')), NUL,        A_info_abort_key,
-       Meta(TAB), NUL,                 A_info_move_to_prev_xref,
-       Meta(CONTROL('v')), NUL,        A_info_scroll_other_window,
-       Meta('<'), NUL,                 A_info_beginning_of_node,
-       Meta('>'), NUL,                 A_info_end_of_node,
-       Meta('b'), NUL,                 A_info_backward_word,
-       Meta('f'), NUL,                 A_info_forward_word,
-       Meta('r'), NUL,                 A_info_move_to_window_line,
-       Meta('v'), NUL,                 A_info_scroll_backward_page_only,
+        0,      /* suppress-default-keybindings flag */
+        TAB, NUL,                       A_info_move_to_next_xref,
+        LFD, NUL,                       A_info_select_reference_this_line,
+        RET, NUL,                       A_info_select_reference_this_line,
+        SPC, NUL,                       A_info_scroll_forward,
+        CONTROL('a'), NUL,              A_info_beginning_of_line,
+        CONTROL('b'), NUL,              A_info_backward_char,
+        CONTROL('e'), NUL,              A_info_end_of_line,
+        CONTROL('f'), NUL,              A_info_forward_char,
+        CONTROL('g'), NUL,              A_info_abort_key,
+        CONTROL('h'), NUL,              A_info_get_help_window,
+        CONTROL('l'), NUL,              A_info_redraw_display,
+        CONTROL('n'), NUL,              A_info_next_line,
+        CONTROL('p'), NUL,              A_info_prev_line,
+        CONTROL('r'), NUL,              A_isearch_backward,
+        CONTROL('s'), NUL,              A_isearch_forward,
+        CONTROL('u'), NUL,              A_info_universal_argument,
+        CONTROL('v'), NUL,              A_info_scroll_forward_page_only,
+        ',', NUL,                       A_info_next_index_match,
+        '/', NUL,                       A_info_search,
+        '0', NUL,                       A_info_last_menu_item,
+        '1', NUL,                       A_info_menu_digit,
+        '2', NUL,                       A_info_menu_digit,
+        '3', NUL,                       A_info_menu_digit,
+        '4', NUL,                       A_info_menu_digit,
+        '5', NUL,                       A_info_menu_digit,
+        '6', NUL,                       A_info_menu_digit,
+        '7', NUL,                       A_info_menu_digit,
+        '8', NUL,                       A_info_menu_digit,
+        '9', NUL,                       A_info_menu_digit,
+        '<', NUL,                       A_info_first_node,
+        '>', NUL,                       A_info_last_node,
+        '?', NUL,                       A_info_get_help_window,
+        '[', NUL,                       A_info_global_prev_node,
+        ']', NUL,                       A_info_global_next_node,
+        'b', NUL,                       A_info_beginning_of_node,
+        'd', NUL,                       A_info_dir_node,
+        'e', NUL,                       A_info_end_of_node,
+        'f', NUL,                       A_info_xref_item,
+        'g', NUL,                       A_info_goto_node,
+        'G', NUL,                       A_info_menu_sequence,
+        'h', NUL,                       A_info_get_info_help_node,
+        'i', NUL,                       A_info_index_search,
+        'l', NUL,                       A_info_history_node,
+        'm', NUL,                       A_info_menu_item,
+        'n', NUL,                       A_info_next_node,
+        'O', NUL,                       A_info_goto_invocation_node,
+        'p', NUL,                       A_info_prev_node,
+        'q', NUL,                       A_info_quit,
+        'r', NUL,                       A_info_xref_item,
+        'R', NUL,                       A_info_toggle_regexp,
+        's', NUL,                       A_info_search,
+        'S', NUL,                       A_info_search_case_sensitively,
+        't', NUL,                       A_info_top_node,
+        'u', NUL,                       A_info_up_node,
+        DEL, NUL,                       A_info_scroll_backward,
+        ESC, '0', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, CONTROL('f'), NUL,         A_info_show_footnotes,
+        ESC, CONTROL('g'), NUL,         A_info_abort_key,
+        ESC, TAB, NUL,                  A_info_move_to_prev_xref,
+        ESC, CONTROL('v'), NUL,         A_info_scroll_other_window,
+        ESC, '<', NUL,                  A_info_beginning_of_node,
+        ESC, '>', NUL,                  A_info_end_of_node,
+        ESC, 'b', NUL,                  A_info_backward_word,
+        ESC, 'f', NUL,                  A_info_forward_word,
+        ESC, 'r', NUL,                  A_info_move_to_window_line,
+        ESC, 'v', NUL,                  A_info_scroll_backward_page_only,
+        Meta('0'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta(CONTROL('f')), NUL,        A_info_show_footnotes,
+        Meta(CONTROL('g')), NUL,        A_info_abort_key,
+        Meta(TAB), NUL,                 A_info_move_to_prev_xref,
+        Meta(CONTROL('v')), NUL,        A_info_scroll_other_window,
+        Meta('<'), NUL,                 A_info_beginning_of_node,
+        Meta('>'), NUL,                 A_info_end_of_node,
+        Meta('b'), NUL,                 A_info_backward_word,
+        Meta('f'), NUL,                 A_info_forward_word,
+        Meta('r'), NUL,                 A_info_move_to_window_line,
+        Meta('v'), NUL,                 A_info_scroll_backward_page_only,
 #if defined (NAMED_FUNCTIONS)
-       ESC, 'x', NUL,                  A_info_execute_command,
-       Meta('x'), NUL,                 A_info_execute_command,
+        ESC, 'x', NUL,                  A_info_execute_command,
+        Meta('x'), NUL,                 A_info_execute_command,
 #endif /* NAMED_FUNCTIONS */
 
-       CONTROL('x'), CONTROL('b'), NUL,        A_list_visited_nodes,
-       CONTROL('x'), CONTROL('c'), NUL,        A_info_quit,
-       CONTROL('x'), CONTROL('f'), NUL,        A_info_view_file,
-       CONTROL('x'), CONTROL('g'), NUL,        A_info_abort_key,
-       CONTROL('x'), CONTROL('v'), NUL,        A_info_view_file,
-       CONTROL('x'), '0', NUL,         A_info_delete_window,
-       CONTROL('x'), '1', NUL,         A_info_keep_one_window,
-       CONTROL('x'), '2', NUL,         A_info_split_window,
-       CONTROL('x'), '^', NUL,         A_info_grow_window,
-       CONTROL('x'), 'b', NUL,         A_select_visited_node,
-       CONTROL('x'), 'k', NUL,         A_info_kill_node,
-       CONTROL('x'), 'n', NUL,         A_info_search_next,
-       CONTROL('x'), 'N', NUL,         A_info_search_previous,
-       CONTROL('x'), 'o', NUL,         A_info_next_window,
-       CONTROL('x'), 't', NUL,         A_info_tile_windows,
-       CONTROL('x'), 'w', NUL,         A_info_toggle_wrap,
-
-/*     Arrow key bindings for info keymaps.  It seems that some
-       terminals do not match their termcap entries, so it's best to just
-       define everything with both of the usual prefixes.  */
-
-       SK_ESCAPE, SK_PAGE_UP, NUL,             
A_info_scroll_backward_page_only,
-       SK_ESCAPE, SK_PAGE_DOWN, NUL,           A_info_scroll_forward_page_only,
-       SK_ESCAPE, SK_UP_ARROW, NUL,            A_info_prev_line,
-       '\033', 'O', 'A', NUL,                  A_info_prev_line,
-       '\033', '[', 'A', NUL,                  A_info_prev_line,
-       SK_ESCAPE, SK_DOWN_ARROW, NUL,          A_info_next_line,
-       '\033', 'O', 'B', NUL,                  A_info_next_line,
-       '\033', '[', 'B', NUL,                  A_info_next_line,
-       SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_info_forward_char,
-       '\033', 'O', 'C', NUL,                  A_info_forward_char,
-       '\033', '[', 'C', NUL,                  A_info_forward_char,
-       SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_info_backward_char,
-       '\033', 'O', 'D', NUL,                  A_info_backward_char,
-       '\033', '[', 'D', NUL,                  A_info_backward_char,
-       SK_ESCAPE, SK_HOME, NUL,                A_info_beginning_of_node,
-       SK_ESCAPE, SK_END, NUL,                 A_info_end_of_node,
-       SK_ESCAPE, SK_DELETE, NUL,              A_info_scroll_backward,
-
-       ESC, SK_ESCAPE, SK_PAGE_UP, NUL,        
A_info_scroll_other_window_backward,
-       ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL,      A_info_scroll_other_window,
-       ESC, SK_ESCAPE, SK_UP_ARROW, NUL,       A_info_prev_line,
-       ESC, '\033', 'O', 'A', NUL,             A_info_prev_line,
-       ESC, '\033', '[', 'A', NUL,             A_info_prev_line,
-       ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL,     A_info_next_line,
-       ESC, '\033', 'O', 'B', NUL,             A_info_next_line,
-       ESC, '\033', '[', 'B', NUL,             A_info_next_line,
-       ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_info_forward_word,
-       ESC, '\033', 'O', 'C', NUL,             A_info_forward_word,
-       ESC, '\033', '[', 'C', NUL,             A_info_forward_word,
-       ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_info_backward_word,
-       ESC, '\033', 'O', 'D', NUL,             A_info_backward_word,
-       ESC, '\033', '[', 'D', NUL,             A_info_backward_word,
+        CONTROL('x'), CONTROL('b'), NUL,        A_list_visited_nodes,
+        CONTROL('x'), CONTROL('c'), NUL,        A_info_quit,
+        CONTROL('x'), CONTROL('f'), NUL,        A_info_view_file,
+        CONTROL('x'), CONTROL('g'), NUL,        A_info_abort_key,
+        CONTROL('x'), CONTROL('v'), NUL,        A_info_view_file,
+        CONTROL('x'), '0', NUL,         A_info_delete_window,
+        CONTROL('x'), '1', NUL,         A_info_keep_one_window,
+        CONTROL('x'), '2', NUL,         A_info_split_window,
+        CONTROL('x'), '^', NUL,         A_info_grow_window,
+        CONTROL('x'), 'b', NUL,         A_select_visited_node,
+        CONTROL('x'), 'k', NUL,         A_info_kill_node,
+        CONTROL('x'), 'n', NUL,         A_info_search_next,
+        CONTROL('x'), 'N', NUL,         A_info_search_previous,
+        CONTROL('x'), 'o', NUL,         A_info_next_window,
+        CONTROL('x'), 't', NUL,         A_info_tile_windows,
+        CONTROL('x'), 'w', NUL,         A_info_toggle_wrap,
+
+/*      Arrow key bindings for info keymaps.  It seems that some
+        terminals do not match their termcap entries, so it's best to just
+        define everything with both of the usual prefixes.  */
+
+        SK_ESCAPE, SK_PAGE_UP, NUL,             
A_info_scroll_backward_page_only,
+        SK_ESCAPE, SK_PAGE_DOWN, NUL,           
A_info_scroll_forward_page_only,
+        SK_ESCAPE, SK_UP_ARROW, NUL,            A_info_prev_line,
+        '\033', 'O', 'A', NUL,                  A_info_prev_line,
+        '\033', '[', 'A', NUL,                  A_info_prev_line,
+        SK_ESCAPE, SK_DOWN_ARROW, NUL,          A_info_next_line,
+        '\033', 'O', 'B', NUL,                  A_info_next_line,
+        '\033', '[', 'B', NUL,                  A_info_next_line,
+        SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_info_forward_char,
+        '\033', 'O', 'C', NUL,                  A_info_forward_char,
+        '\033', '[', 'C', NUL,                  A_info_forward_char,
+        SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_info_backward_char,
+        '\033', 'O', 'D', NUL,                  A_info_backward_char,
+        '\033', '[', 'D', NUL,                  A_info_backward_char,
+        SK_ESCAPE, SK_HOME, NUL,                A_info_beginning_of_node,
+        SK_ESCAPE, SK_END, NUL,                 A_info_end_of_node,
+        SK_ESCAPE, SK_DELETE, NUL,              A_info_scroll_backward,
+
+        ESC, SK_ESCAPE, SK_PAGE_UP, NUL,        
A_info_scroll_other_window_backward,
+        ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL,      A_info_scroll_other_window,
+        ESC, SK_ESCAPE, SK_UP_ARROW, NUL,       A_info_prev_line,
+        ESC, '\033', 'O', 'A', NUL,             A_info_prev_line,
+        ESC, '\033', '[', 'A', NUL,             A_info_prev_line,
+        ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL,     A_info_next_line,
+        ESC, '\033', 'O', 'B', NUL,             A_info_next_line,
+        ESC, '\033', '[', 'B', NUL,             A_info_next_line,
+        ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_info_forward_word,
+        ESC, '\033', 'O', 'C', NUL,             A_info_forward_word,
+        ESC, '\033', '[', 'C', NUL,             A_info_forward_word,
+        ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_info_backward_word,
+        ESC, '\033', 'O', 'D', NUL,             A_info_backward_word,
+        ESC, '\033', '[', 'D', NUL,             A_info_backward_word,
 };
 
 static unsigned char default_emacs_like_ea_keys[] =
 {
-       0,      /* suppress-default-keybindings flag */
-       ESC, '0', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
-       Meta('0'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
-       ESC, CONTROL('g'), NUL,         A_ea_abort,
-       ESC, CONTROL('v'), NUL,         A_ea_scroll_completions_window,
-       ESC, 'b', NUL,                  A_ea_backward_word,
-       ESC, 'd', NUL,                  A_ea_kill_word,
-       ESC, 'f', NUL,                  A_ea_forward_word,
-       ESC, 'y', NUL,                  A_ea_yank_pop,
-       ESC, '?', NUL,                  A_ea_possible_completions,
-       ESC, TAB, NUL,                  A_ea_tab_insert,
-       ESC, DEL, NUL,                  A_ea_backward_kill_word,
-       Meta(CONTROL('g')), NUL,        A_ea_abort,
-       Meta(CONTROL('v')), NUL,        A_ea_scroll_completions_window,
-       Meta('b'), NUL,                 A_ea_backward_word,
-       Meta('d'), NUL,                 A_ea_kill_word,
-       Meta('f'), NUL,                 A_ea_forward_word,
-       Meta('y'), NUL,                 A_ea_yank_pop,
-       Meta('?'), NUL,                 A_ea_possible_completions,
-       Meta(TAB), NUL,                 A_ea_tab_insert,
-       Meta(DEL), NUL,                 A_ea_backward_kill_word,
-       CONTROL('a'), NUL,              A_ea_beg_of_line,
-       CONTROL('b'), NUL,              A_ea_backward,
-       CONTROL('d'), NUL,              A_ea_delete,
-       CONTROL('e'), NUL,              A_ea_end_of_line,
-       CONTROL('f'), NUL,              A_ea_forward,
-       CONTROL('g'), NUL,              A_ea_abort,
-       CONTROL('h'), NUL,              A_ea_rubout,
-/*     CONTROL('k') */
-       SK_ESCAPE, SK_LITERAL, NUL,     A_ea_kill_line,
-       CONTROL('l'), NUL,              A_info_redraw_display,
-       CONTROL('q'), NUL,              A_ea_quoted_insert,
-       CONTROL('t'), NUL,              A_ea_transpose_chars,
-       CONTROL('u'), NUL,              A_info_universal_argument,
-       CONTROL('y'), NUL,              A_ea_yank,
-       LFD, NUL,                       A_ea_newline,
-       RET, NUL,                       A_ea_newline,
-       SPC, NUL,                       A_ea_complete,
-       TAB, NUL,                       A_ea_complete,
-       '?', NUL,                       A_ea_possible_completions,
+        0,      /* suppress-default-keybindings flag */
+        ESC, '0', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
+        Meta('0'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
+        ESC, CONTROL('g'), NUL,         A_ea_abort,
+        ESC, CONTROL('v'), NUL,         A_ea_scroll_completions_window,
+        ESC, 'b', NUL,                  A_ea_backward_word,
+        ESC, 'd', NUL,                  A_ea_kill_word,
+        ESC, 'f', NUL,                  A_ea_forward_word,
+        ESC, 'y', NUL,                  A_ea_yank_pop,
+        ESC, '?', NUL,                  A_ea_possible_completions,
+        ESC, TAB, NUL,                  A_ea_tab_insert,
+        ESC, DEL, NUL,                  A_ea_backward_kill_word,
+        Meta(CONTROL('g')), NUL,        A_ea_abort,
+        Meta(CONTROL('v')), NUL,        A_ea_scroll_completions_window,
+        Meta('b'), NUL,                 A_ea_backward_word,
+        Meta('d'), NUL,                 A_ea_kill_word,
+        Meta('f'), NUL,                 A_ea_forward_word,
+        Meta('y'), NUL,                 A_ea_yank_pop,
+        Meta('?'), NUL,                 A_ea_possible_completions,
+        Meta(TAB), NUL,                 A_ea_tab_insert,
+        Meta(DEL), NUL,                 A_ea_backward_kill_word,
+        CONTROL('a'), NUL,              A_ea_beg_of_line,
+        CONTROL('b'), NUL,              A_ea_backward,
+        CONTROL('d'), NUL,              A_ea_delete,
+        CONTROL('e'), NUL,              A_ea_end_of_line,
+        CONTROL('f'), NUL,              A_ea_forward,
+        CONTROL('g'), NUL,              A_ea_abort,
+        CONTROL('h'), NUL,              A_ea_rubout,
+/*      CONTROL('k') */
+        SK_ESCAPE, SK_LITERAL, NUL,     A_ea_kill_line,
+        CONTROL('l'), NUL,              A_info_redraw_display,
+        CONTROL('q'), NUL,              A_ea_quoted_insert,
+        CONTROL('t'), NUL,              A_ea_transpose_chars,
+        CONTROL('u'), NUL,              A_info_universal_argument,
+        CONTROL('y'), NUL,              A_ea_yank,
+        LFD, NUL,                       A_ea_newline,
+        RET, NUL,                       A_ea_newline,
+        SPC, NUL,                       A_ea_complete,
+        TAB, NUL,                       A_ea_complete,
+        '?', NUL,                       A_ea_possible_completions,
 #ifdef __MSDOS__
         /* PC users will lynch me if I don't give them their usual DEL
-          effect...  */
-       DEL, NUL,                       A_ea_delete,
+           effect...  */
+        DEL, NUL,                       A_ea_delete,
 #else
-       DEL, NUL,                       A_ea_rubout,
+        DEL, NUL,                       A_ea_rubout,
 #endif
 #if defined (NAMED_FUNCTIONS)
-  /*   ESC, 'x', NUL,                  A_info_execute_command, */
-  /*   Meta('x'), NUL,                 A_info_execute_command, */
+  /*    ESC, 'x', NUL,                  A_info_execute_command, */
+  /*    Meta('x'), NUL,                 A_info_execute_command, */
 #endif /* NAMED_FUNCTIONS */
-       CONTROL('x'), 'o', NUL,         A_info_next_window,
-       CONTROL('x'), DEL, NUL,         A_ea_backward_kill_line,
+        CONTROL('x'), 'o', NUL,         A_info_next_window,
+        CONTROL('x'), DEL, NUL,         A_ea_backward_kill_line,
 
-/*     Arrow key bindings for echo area keymaps.  It seems that some
-       terminals do not match their termcap entries, so it's best to just
-       define everything with both of the usual prefixes.  */
-
-       SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_ea_forward,
-       '\033', 'O', 'C', NUL,                  A_ea_forward,
-       '\033', '[', 'C', NUL,                  A_ea_forward,
-       SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_ea_backward,
-       '\033', 'O', 'D', NUL,                  A_ea_backward,
-       '\033', '[', 'D', NUL,                  A_ea_backward,
-       ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_ea_forward_word,
-       ESC, '\033', 'O', 'C', NUL,             A_ea_forward_word,
-       ESC, '\033', '[', 'C', NUL,             A_ea_forward_word,
-       ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_ea_backward_word,
-       ESC, '\033', 'O', 'D', NUL,             A_ea_backward_word,
-       ESC, '\033', '[', 'D', NUL,             A_ea_backward_word,
+/*      Arrow key bindings for echo area keymaps.  It seems that some
+        terminals do not match their termcap entries, so it's best to just
+        define everything with both of the usual prefixes.  */
+
+        SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_ea_forward,
+        '\033', 'O', 'C', NUL,                  A_ea_forward,
+        '\033', '[', 'C', NUL,                  A_ea_forward,
+        SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_ea_backward,
+        '\033', 'O', 'D', NUL,                  A_ea_backward,
+        '\033', '[', 'D', NUL,                  A_ea_backward,
+        ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_ea_forward_word,
+        ESC, '\033', 'O', 'C', NUL,             A_ea_forward_word,
+        ESC, '\033', '[', 'C', NUL,             A_ea_forward_word,
+        ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_ea_backward_word,
+        ESC, '\033', 'O', 'D', NUL,             A_ea_backward_word,
+        ESC, '\033', '[', 'D', NUL,             A_ea_backward_word,
 #ifdef __MSDOS__
-       SK_ESCAPE, SK_DELETE, NUL,              A_ea_delete,
+        SK_ESCAPE, SK_DELETE, NUL,              A_ea_delete,
 #else
-       SK_ESCAPE, SK_DELETE, NUL,              A_ea_rubout,
+        SK_ESCAPE, SK_DELETE, NUL,              A_ea_rubout,
 #endif
-       SK_ESCAPE, SK_HOME, NUL,                A_ea_beg_of_line,
-       SK_ESCAPE, SK_END, NUL,                 A_ea_end_of_line,
-       ESC, SK_ESCAPE, SK_DELETE, NUL,         A_ea_backward_kill_word,
-       CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+        SK_ESCAPE, SK_HOME, NUL,                A_ea_beg_of_line,
+        SK_ESCAPE, SK_END, NUL,                 A_ea_end_of_line,
+        ESC, SK_ESCAPE, SK_DELETE, NUL,         A_ea_backward_kill_word,
+        CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
 };
 
 static unsigned char default_vi_like_info_keys[] =
 {
-       0,      /* suppress-default-keybindings flag */
-       '0', NUL,                       A_info_add_digit_to_numeric_arg,
-       '1', NUL,                       A_info_add_digit_to_numeric_arg,
-       '2', NUL,                       A_info_add_digit_to_numeric_arg,
-       '3', NUL,                       A_info_add_digit_to_numeric_arg,
-       '4', NUL,                       A_info_add_digit_to_numeric_arg,
-       '5', NUL,                       A_info_add_digit_to_numeric_arg,
-       '6', NUL,                       A_info_add_digit_to_numeric_arg,
-       '7', NUL,                       A_info_add_digit_to_numeric_arg,
-       '8', NUL,                       A_info_add_digit_to_numeric_arg,
-       '9', NUL,                       A_info_add_digit_to_numeric_arg,
-       '-', NUL,                       A_info_add_digit_to_numeric_arg,
-       TAB, NUL,                       A_info_move_to_next_xref,
-       LFD, NUL,                       A_info_down_line,
-       RET, NUL,                       A_info_down_line,
-       SPC, NUL,                       A_info_scroll_forward,
-       CONTROL('a'), NUL,              A_info_beginning_of_line,
-       CONTROL('b'), NUL,              A_info_scroll_backward_page_only,
-       CONTROL('d'), NUL,              A_info_scroll_half_screen_down,
-       CONTROL('e'), NUL,              A_info_down_line,
-       CONTROL('f'), NUL,              A_info_scroll_forward_page_only,
-       CONTROL('g'), NUL,              A_info_abort_key,
-       CONTROL('k'), NUL,              A_info_up_line,
-       CONTROL('l'), NUL,              A_info_redraw_display,
-       CONTROL('n'), NUL,              A_info_down_line,
-       CONTROL('p'), NUL,              A_info_up_line,
-       CONTROL('r'), NUL,              A_info_redraw_display,
-       CONTROL('s'), NUL,              A_isearch_forward,
-       CONTROL('u'), NUL,              A_info_scroll_half_screen_up,
-       CONTROL('v'), NUL,              A_info_scroll_forward_page_only,
-       CONTROL('y'), NUL,              A_info_up_line,
-       ',', NUL,                       A_info_next_index_match,
-       '/', NUL,                       A_info_search,
-       ESC, '0', NUL,                  A_info_last_menu_item,
-       ESC, '1', NUL,                  A_info_menu_digit,
-       ESC, '2', NUL,                  A_info_menu_digit,
-       ESC, '3', NUL,                  A_info_menu_digit,
-       ESC, '4', NUL,                  A_info_menu_digit,
-       ESC, '5', NUL,                  A_info_menu_digit,
-       ESC, '6', NUL,                  A_info_menu_digit,
-       ESC, '7', NUL,                  A_info_menu_digit,
-       ESC, '8', NUL,                  A_info_menu_digit,
-       ESC, '9', NUL,                  A_info_menu_digit,
-       Meta('0'), NUL,                 A_info_last_menu_item,
-       Meta('1'), NUL,                 A_info_menu_digit,
-       Meta('2'), NUL,                 A_info_menu_digit,
-       Meta('3'), NUL,                 A_info_menu_digit,
-       Meta('4'), NUL,                 A_info_menu_digit,
-       Meta('5'), NUL,                 A_info_menu_digit,
-       Meta('6'), NUL,                 A_info_menu_digit,
-       Meta('7'), NUL,                 A_info_menu_digit,
-       Meta('8'), NUL,                 A_info_menu_digit,
-       Meta('9'), NUL,                 A_info_menu_digit,
-       '<', NUL,                       A_info_first_node,
-       '>', NUL,                       A_info_last_node,
-       '?', NUL,                       A_info_search_backward,
-       '[', NUL,                       A_info_global_prev_node,
-       ']', NUL,                       A_info_global_next_node,
-       '\'', NUL,                      A_info_history_node,
-       'b', NUL,                       A_info_scroll_backward,
-       'd', NUL,                       A_info_scroll_half_screen_down,
-       'e', NUL,                       A_info_down_line,
-       'E', NUL,                       A_info_view_file,
-       ':', 'e', NUL,                  A_info_view_file,
-       'f', NUL,                       A_info_scroll_forward_page_only,
-       'F', NUL,                       A_info_scroll_forward_page_only,
-       'g', NUL,                       A_info_first_node,
-       'G', NUL,                       A_info_last_node,
-       'h', NUL,                       A_info_get_help_window,
-       'H', NUL,                       A_info_get_help_window,
-       'i', NUL,                       A_info_index_search,
-       'I', NUL,                       A_info_goto_invocation_node,
-       'j', NUL,                       A_info_next_line,
-       'k', NUL,                       A_info_prev_line,
-       'l', NUL,                       A_info_history_node,
-       'm', NUL,                       A_info_menu_item,
-       'n', NUL,                       A_info_search_next,
-       'N', NUL,                       A_info_search_previous,
-       'O', NUL,                       A_info_goto_invocation_node,
-       'p', NUL,                       A_info_prev_node,
-       'q', NUL,                       A_info_quit,
-       'Q', NUL,                       A_info_quit,
-       ':', 'q', NUL,                  A_info_quit,
-       ':', 'Q', NUL,                  A_info_quit,
-       'Z', 'Z', NUL,                  A_info_quit,
-       'r', NUL,                       A_info_redraw_display,
-       'R', NUL,                       A_info_redraw_display,
-       's', NUL,                       A_info_search,
-       'S', NUL,                       A_info_search_case_sensitively,
-       't', NUL,                       A_info_top_node,
-       'u', NUL,                       A_info_scroll_half_screen_up,
-       'w', NUL,                       
A_info_scroll_backward_page_only_set_window,
-       'y', NUL,                       A_info_up_line,
-       'z', NUL,                       
A_info_scroll_forward_page_only_set_window,
-       DEL, NUL,                       A_info_scroll_backward,
-       ESC, CONTROL('f'), NUL,         A_info_show_footnotes,
-       ESC, CONTROL('g'), NUL,         A_info_abort_key,
-       ESC, TAB, NUL,                  A_info_move_to_prev_xref,
-       ESC, SPC, NUL,                  A_info_scroll_forward_page_only,
-       ESC, CONTROL('v'), NUL,         A_info_scroll_other_window,
-       ESC, '<', NUL,                  A_info_beginning_of_node,
-       ESC, '>', NUL,                  A_info_end_of_node,
-       ESC, '/', NUL,                  A_info_search,
-       ESC, '?', NUL,                  A_info_search_backward,
-       ESC, 'b', NUL,                  A_info_beginning_of_node,
-       ESC, 'd', NUL,                  A_info_dir_node,
-       ESC, 'e', NUL,                  A_info_end_of_node,
-       ESC, 'f', NUL,                  A_info_xref_item,
-       ESC, 'g', NUL,                  A_info_select_reference_this_line,
-       ESC, 'h', NUL,                  A_info_get_info_help_node,
-       ESC, 'm', NUL,                  A_info_menu_item,
-       ESC, 'n', NUL,                  A_info_search,
-       ESC, 'N', NUL,                  A_info_search_backward,
-       ESC, 'r', NUL,                  A_isearch_backward,
-       ESC, 's', NUL,                  A_isearch_forward,
-       ESC, 't', NUL,                  A_info_top_node,
-       ESC, 'v', NUL,                  A_info_scroll_backward_page_only,
+        0,      /* suppress-default-keybindings flag */
+        '0', NUL,                       A_info_add_digit_to_numeric_arg,
+        '1', NUL,                       A_info_add_digit_to_numeric_arg,
+        '2', NUL,                       A_info_add_digit_to_numeric_arg,
+        '3', NUL,                       A_info_add_digit_to_numeric_arg,
+        '4', NUL,                       A_info_add_digit_to_numeric_arg,
+        '5', NUL,                       A_info_add_digit_to_numeric_arg,
+        '6', NUL,                       A_info_add_digit_to_numeric_arg,
+        '7', NUL,                       A_info_add_digit_to_numeric_arg,
+        '8', NUL,                       A_info_add_digit_to_numeric_arg,
+        '9', NUL,                       A_info_add_digit_to_numeric_arg,
+        '-', NUL,                       A_info_add_digit_to_numeric_arg,
+        TAB, NUL,                       A_info_move_to_next_xref,
+        LFD, NUL,                       A_info_down_line,
+        RET, NUL,                       A_info_down_line,
+        SPC, NUL,                       A_info_scroll_forward,
+        CONTROL('a'), NUL,              A_info_beginning_of_line,
+        CONTROL('b'), NUL,              A_info_scroll_backward_page_only,
+        CONTROL('d'), NUL,              A_info_scroll_half_screen_down,
+        CONTROL('e'), NUL,              A_info_down_line,
+        CONTROL('f'), NUL,              A_info_scroll_forward_page_only,
+        CONTROL('g'), NUL,              A_info_abort_key,
+        CONTROL('k'), NUL,              A_info_up_line,
+        CONTROL('l'), NUL,              A_info_redraw_display,
+        CONTROL('n'), NUL,              A_info_down_line,
+        CONTROL('p'), NUL,              A_info_up_line,
+        CONTROL('r'), NUL,              A_info_redraw_display,
+        CONTROL('s'), NUL,              A_isearch_forward,
+        CONTROL('u'), NUL,              A_info_scroll_half_screen_up,
+        CONTROL('v'), NUL,              A_info_scroll_forward_page_only,
+        CONTROL('y'), NUL,              A_info_up_line,
+        ',', NUL,                       A_info_next_index_match,
+        '/', NUL,                       A_info_search,
+        ESC, '0', NUL,                  A_info_last_menu_item,
+        ESC, '1', NUL,                  A_info_menu_digit,
+        ESC, '2', NUL,                  A_info_menu_digit,
+        ESC, '3', NUL,                  A_info_menu_digit,
+        ESC, '4', NUL,                  A_info_menu_digit,
+        ESC, '5', NUL,                  A_info_menu_digit,
+        ESC, '6', NUL,                  A_info_menu_digit,
+        ESC, '7', NUL,                  A_info_menu_digit,
+        ESC, '8', NUL,                  A_info_menu_digit,
+        ESC, '9', NUL,                  A_info_menu_digit,
+        Meta('0'), NUL,                 A_info_last_menu_item,
+        Meta('1'), NUL,                 A_info_menu_digit,
+        Meta('2'), NUL,                 A_info_menu_digit,
+        Meta('3'), NUL,                 A_info_menu_digit,
+        Meta('4'), NUL,                 A_info_menu_digit,
+        Meta('5'), NUL,                 A_info_menu_digit,
+        Meta('6'), NUL,                 A_info_menu_digit,
+        Meta('7'), NUL,                 A_info_menu_digit,
+        Meta('8'), NUL,                 A_info_menu_digit,
+        Meta('9'), NUL,                 A_info_menu_digit,
+        '<', NUL,                       A_info_first_node,
+        '>', NUL,                       A_info_last_node,
+        '?', NUL,                       A_info_search_backward,
+        '[', NUL,                       A_info_global_prev_node,
+        ']', NUL,                       A_info_global_next_node,
+        '\'', NUL,                      A_info_history_node,
+        'b', NUL,                       A_info_scroll_backward,
+        'd', NUL,                       A_info_scroll_half_screen_down,
+        'e', NUL,                       A_info_down_line,
+        'E', NUL,                       A_info_view_file,
+        ':', 'e', NUL,                  A_info_view_file,
+        'f', NUL,                       A_info_scroll_forward_page_only,
+        'F', NUL,                       A_info_scroll_forward_page_only,
+        'g', NUL,                       A_info_first_node,
+        'G', NUL,                       A_info_last_node,
+        'h', NUL,                       A_info_get_help_window,
+        'H', NUL,                       A_info_get_help_window,
+        'i', NUL,                       A_info_index_search,
+        'I', NUL,                       A_info_goto_invocation_node,
+        'j', NUL,                       A_info_next_line,
+        'k', NUL,                       A_info_prev_line,
+        'l', NUL,                       A_info_history_node,
+        'm', NUL,                       A_info_menu_item,
+        'n', NUL,                       A_info_search_next,
+        'N', NUL,                       A_info_search_previous,
+        'O', NUL,                       A_info_goto_invocation_node,
+        'p', NUL,                       A_info_prev_node,
+        'q', NUL,                       A_info_quit,
+        'Q', NUL,                       A_info_quit,
+        ':', 'q', NUL,                  A_info_quit,
+        ':', 'Q', NUL,                  A_info_quit,
+        'Z', 'Z', NUL,                  A_info_quit,
+        'r', NUL,                       A_info_redraw_display,
+        'R', NUL,                       A_info_toggle_regexp,
+        's', NUL,                       A_info_search,
+        'S', NUL,                       A_info_search_case_sensitively,
+        't', NUL,                       A_info_top_node,
+        'u', NUL,                       A_info_scroll_half_screen_up,
+        'w', NUL,                       
A_info_scroll_backward_page_only_set_window,
+        'y', NUL,                       A_info_up_line,
+        'z', NUL,                       
A_info_scroll_forward_page_only_set_window,
+        DEL, NUL,                       A_info_scroll_backward,
+        ESC, CONTROL('f'), NUL,         A_info_show_footnotes,
+        ESC, CONTROL('g'), NUL,         A_info_abort_key,
+        ESC, TAB, NUL,                  A_info_move_to_prev_xref,
+        ESC, SPC, NUL,                  A_info_scroll_forward_page_only,
+        ESC, CONTROL('v'), NUL,         A_info_scroll_other_window,
+        ESC, '<', NUL,                  A_info_beginning_of_node,
+        ESC, '>', NUL,                  A_info_end_of_node,
+        ESC, '/', NUL,                  A_info_search,
+        ESC, '?', NUL,                  A_info_search_backward,
+        ESC, 'b', NUL,                  A_info_beginning_of_node,
+        ESC, 'd', NUL,                  A_info_dir_node,
+        ESC, 'e', NUL,                  A_info_end_of_node,
+        ESC, 'f', NUL,                  A_info_xref_item,
+        ESC, 'g', NUL,                  A_info_select_reference_this_line,
+        ESC, 'h', NUL,                  A_info_get_info_help_node,
+        ESC, 'm', NUL,                  A_info_menu_item,
+        ESC, 'n', NUL,                  A_info_search,
+        ESC, 'N', NUL,                  A_info_search_backward,
+        ESC, 'r', NUL,                  A_isearch_backward,
+        ESC, 's', NUL,                  A_isearch_forward,
+        ESC, 't', NUL,                  A_info_top_node,
+        ESC, 'v', NUL,                  A_info_scroll_backward_page_only,
 #if defined (NAMED_FUNCTIONS)
-       ESC, 'x', NUL,                  A_info_execute_command,
-       Meta('x'), NUL,                 A_info_execute_command,
+        ESC, 'x', NUL,                  A_info_execute_command,
+        Meta('x'), NUL,                 A_info_execute_command,
 #endif /* NAMED_FUNCTIONS */
-       ESC, DEL, NUL,                  A_info_scroll_other_window_backward,
-       CONTROL('x'), CONTROL('b'), NUL,        A_list_visited_nodes,
-       CONTROL('x'), CONTROL('c'), NUL,        A_info_quit,
-       CONTROL('x'), CONTROL('f'), NUL,        A_info_view_file,
-       CONTROL('x'), CONTROL('g'), NUL,        A_info_abort_key,
-       CONTROL('x'), CONTROL('v'), NUL,        A_info_view_file,
-       CONTROL('x'), LFD, NUL,         A_info_select_reference_this_line,
-       CONTROL('x'), RET, NUL,         A_info_select_reference_this_line,
-       CONTROL('x'), '0', NUL,         A_info_delete_window,
-       CONTROL('x'), '1', NUL,         A_info_keep_one_window,
-       CONTROL('x'), '2', NUL,         A_info_split_window,
-       CONTROL('x'), '^', NUL,         A_info_grow_window,
-       CONTROL('x'), 'b', NUL,         A_select_visited_node,
-       CONTROL('x'), 'g', NUL,         A_info_goto_node,
-       CONTROL('x'), 'i', NUL,         A_info_index_search,
-       CONTROL('x'), 'I', NUL,         A_info_goto_invocation_node,
-       CONTROL('x'), 'k', NUL,         A_info_kill_node,
-       CONTROL('x'), 'n', NUL,         A_info_next_node,
-       CONTROL('x'), 'o', NUL,         A_info_next_window,
-       CONTROL('x'), 'O', NUL,         A_info_goto_invocation_node,
-       CONTROL('x'), 'p', NUL,         A_info_prev_node,
-       CONTROL('x'), 'r', NUL,         A_info_xref_item,
-       CONTROL('x'), 't', NUL,         A_info_tile_windows,
-       CONTROL('x'), 'u', NUL,         A_info_up_node,
-       CONTROL('x'), 'w', NUL,         A_info_toggle_wrap,
-       CONTROL('x'), ',', NUL,         A_info_next_index_match,
-
-/*     Arrow key bindings for info keymaps.  It seems that some
-       terminals do not match their termcap entries, so it's best to just
-       define everything with both of the usual prefixes.  */
-
-       SK_ESCAPE, SK_PAGE_UP, NUL,             
A_info_scroll_backward_page_only,
-       SK_ESCAPE, SK_PAGE_DOWN, NUL,           A_info_scroll_forward_page_only,
-       SK_ESCAPE, SK_UP_ARROW, NUL,            A_info_up_line,
-       '\033', 'O', 'A', NUL,                  A_info_up_line,
-       '\033', '[', 'A', NUL,                  A_info_up_line,
-       SK_ESCAPE, SK_DOWN_ARROW, NUL,          A_info_down_line,
-       '\033', 'O', 'B', NUL,                  A_info_down_line,
-       '\033', '[', 'B', NUL,                  A_info_down_line,
-       SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_info_scroll_forward_page_only,
-       '\033', 'O', 'C', NUL,                  A_info_scroll_forward_page_only,
-       '\033', '[', 'C', NUL,                  A_info_scroll_forward_page_only,
-       SK_ESCAPE, SK_LEFT_ARROW, NUL,          
A_info_scroll_backward_page_only,
-       '\033', 'O', 'D', NUL,                  
A_info_scroll_backward_page_only,
-       '\033', '[', 'D', NUL,                  
A_info_scroll_backward_page_only,
-       SK_ESCAPE, SK_HOME, NUL,                A_info_beginning_of_node,
-       SK_ESCAPE, SK_END, NUL,                 A_info_end_of_node,
-       ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL,      A_info_scroll_other_window,
-       ESC, SK_ESCAPE, SK_PAGE_UP, NUL,        
A_info_scroll_other_window_backward,
-       ESC, SK_ESCAPE, SK_DELETE, NUL,         
A_info_scroll_other_window_backward,
-       ESC, SK_ESCAPE, SK_UP_ARROW, NUL,       A_info_prev_node,
-       ESC, '\033', 'O', 'A', NUL,             A_info_prev_node,
-       ESC, '\033', '[', 'A', NUL,             A_info_prev_node,
-       ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL,     A_info_next_node,
-       ESC, '\033', 'O', 'B', NUL,             A_info_next_node,
-       ESC, '\033', '[', 'B', NUL,             A_info_next_node,
-       ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_info_xref_item,
-       ESC, '\033', 'O', 'C', NUL,             A_info_xref_item,
-       ESC, '\033', '[', 'C', NUL,             A_info_xref_item,
-       ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_info_beginning_of_node,
-       ESC, '\033', 'O', 'D', NUL,             A_info_beginning_of_node,
-       ESC, '\033', '[', 'D', NUL,             A_info_beginning_of_node,
-       CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+        ESC, DEL, NUL,                  A_info_scroll_other_window_backward,
+        CONTROL('x'), CONTROL('b'), NUL,        A_list_visited_nodes,
+        CONTROL('x'), CONTROL('c'), NUL,        A_info_quit,
+        CONTROL('x'), CONTROL('f'), NUL,        A_info_view_file,
+        CONTROL('x'), CONTROL('g'), NUL,        A_info_abort_key,
+        CONTROL('x'), CONTROL('v'), NUL,        A_info_view_file,
+        CONTROL('x'), LFD, NUL,         A_info_select_reference_this_line,
+        CONTROL('x'), RET, NUL,         A_info_select_reference_this_line,
+        CONTROL('x'), '0', NUL,         A_info_delete_window,
+        CONTROL('x'), '1', NUL,         A_info_keep_one_window,
+        CONTROL('x'), '2', NUL,         A_info_split_window,
+        CONTROL('x'), '^', NUL,         A_info_grow_window,
+        CONTROL('x'), 'b', NUL,         A_select_visited_node,
+        CONTROL('x'), 'g', NUL,         A_info_goto_node,
+        CONTROL('x'), 'i', NUL,         A_info_index_search,
+        CONTROL('x'), 'I', NUL,         A_info_goto_invocation_node,
+        CONTROL('x'), 'k', NUL,         A_info_kill_node,
+        CONTROL('x'), 'n', NUL,         A_info_next_node,
+        CONTROL('x'), 'o', NUL,         A_info_next_window,
+        CONTROL('x'), 'O', NUL,         A_info_goto_invocation_node,
+        CONTROL('x'), 'p', NUL,         A_info_prev_node,
+        CONTROL('x'), 'r', NUL,         A_info_xref_item,
+        CONTROL('x'), 't', NUL,         A_info_tile_windows,
+        CONTROL('x'), 'u', NUL,         A_info_up_node,
+        CONTROL('x'), 'w', NUL,         A_info_toggle_wrap,
+        CONTROL('x'), ',', NUL,         A_info_next_index_match,
+
+/*      Arrow key bindings for info keymaps.  It seems that some
+        terminals do not match their termcap entries, so it's best to just
+        define everything with both of the usual prefixes.  */
+
+        SK_ESCAPE, SK_PAGE_UP, NUL,             
A_info_scroll_backward_page_only,
+        SK_ESCAPE, SK_PAGE_DOWN, NUL,           
A_info_scroll_forward_page_only,
+        SK_ESCAPE, SK_UP_ARROW, NUL,            A_info_up_line,
+        '\033', 'O', 'A', NUL,                  A_info_up_line,
+        '\033', '[', 'A', NUL,                  A_info_up_line,
+        SK_ESCAPE, SK_DOWN_ARROW, NUL,          A_info_down_line,
+        '\033', 'O', 'B', NUL,                  A_info_down_line,
+        '\033', '[', 'B', NUL,                  A_info_down_line,
+        SK_ESCAPE, SK_RIGHT_ARROW, NUL,         
A_info_scroll_forward_page_only,
+        '\033', 'O', 'C', NUL,                  
A_info_scroll_forward_page_only,
+        '\033', '[', 'C', NUL,                  
A_info_scroll_forward_page_only,
+        SK_ESCAPE, SK_LEFT_ARROW, NUL,          
A_info_scroll_backward_page_only,
+        '\033', 'O', 'D', NUL,                  
A_info_scroll_backward_page_only,
+        '\033', '[', 'D', NUL,                  
A_info_scroll_backward_page_only,
+        SK_ESCAPE, SK_HOME, NUL,                A_info_beginning_of_node,
+        SK_ESCAPE, SK_END, NUL,                 A_info_end_of_node,
+        ESC, SK_ESCAPE, SK_PAGE_DOWN, NUL,      A_info_scroll_other_window,
+        ESC, SK_ESCAPE, SK_PAGE_UP, NUL,        
A_info_scroll_other_window_backward,
+        ESC, SK_ESCAPE, SK_DELETE, NUL,         
A_info_scroll_other_window_backward,
+        ESC, SK_ESCAPE, SK_UP_ARROW, NUL,       A_info_prev_node,
+        ESC, '\033', 'O', 'A', NUL,             A_info_prev_node,
+        ESC, '\033', '[', 'A', NUL,             A_info_prev_node,
+        ESC, SK_ESCAPE, SK_DOWN_ARROW, NUL,     A_info_next_node,
+        ESC, '\033', 'O', 'B', NUL,             A_info_next_node,
+        ESC, '\033', '[', 'B', NUL,             A_info_next_node,
+        ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_info_xref_item,
+        ESC, '\033', 'O', 'C', NUL,             A_info_xref_item,
+        ESC, '\033', '[', 'C', NUL,             A_info_xref_item,
+        ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_info_beginning_of_node,
+        ESC, '\033', 'O', 'D', NUL,             A_info_beginning_of_node,
+        ESC, '\033', '[', 'D', NUL,             A_info_beginning_of_node,
+        CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
 };
 
 static unsigned char default_vi_like_ea_keys[] =
 {
-       0,      /* suppress-default-keybindings flag */
-       ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
-       ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
-       Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
-       Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
-       ESC, CONTROL('g'), NUL,         A_ea_abort,
-       ESC, CONTROL('h'), NUL,         A_ea_backward_kill_word,
-       ESC, CONTROL('v'), NUL,         A_ea_scroll_completions_window,
-       ESC, '0', NUL,                  A_ea_beg_of_line,
-       ESC, '$', NUL,                  A_ea_end_of_line,
-       ESC, 'b', NUL,                  A_ea_backward_word,
-       ESC, 'd', NUL,                  A_ea_kill_word,
-       ESC, 'f', NUL,                  A_ea_forward_word,
-       ESC, 'h', NUL,                  A_ea_forward,
-       ESC, 'l', NUL,                  A_ea_backward,
-       ESC, 'w', NUL,                  A_ea_forward_word,
-       ESC, 'x', NUL,                  A_ea_delete,
-       ESC, 'X', NUL,                  A_ea_kill_word,
-       ESC, 'y', NUL,                  A_ea_yank_pop,
-       ESC, '?', NUL,                  A_ea_possible_completions,
-       ESC, TAB, NUL,                  A_ea_tab_insert,
-       ESC, DEL, NUL,                  A_ea_kill_word,
-       Meta(CONTROL('g')), NUL,        A_ea_abort,
-       Meta(CONTROL('h')), NUL,        A_ea_backward_kill_word,
-       Meta(CONTROL('v')), NUL,        A_ea_scroll_completions_window,
-       Meta('0'), NUL,                 A_ea_beg_of_line,
-       Meta('$'), NUL,                 A_ea_end_of_line,
-       Meta('b'), NUL,                 A_ea_backward_word,
-       Meta('d'), NUL,                 A_ea_kill_word,
-       Meta('f'), NUL,                 A_ea_forward_word,
-       Meta('h'), NUL,                 A_ea_forward,
-       Meta('l'), NUL,                 A_ea_backward,
-       Meta('w'), NUL,                 A_ea_forward_word,
-       Meta('x'), NUL,                 A_ea_delete,
-       Meta('X'), NUL,                 A_ea_kill_word,
-       Meta('y'), NUL,                 A_ea_yank_pop,
-       Meta('?'), NUL,                 A_ea_possible_completions,
-       Meta(TAB), NUL,                 A_ea_tab_insert,
-       Meta(DEL), NUL,                 A_ea_kill_word,
-       CONTROL('a'), NUL,              A_ea_beg_of_line,
-       CONTROL('b'), NUL,              A_ea_backward,
-       CONTROL('d'), NUL,              A_ea_delete,
-       CONTROL('e'), NUL,              A_ea_end_of_line,
-       CONTROL('f'), NUL,              A_ea_forward,
-       CONTROL('g'), NUL,              A_ea_abort,
-       CONTROL('h'), NUL,              A_ea_rubout,
-/*     CONTROL('k') */
-       SK_ESCAPE, SK_LITERAL, NUL,     A_ea_kill_line,
-       CONTROL('l'), NUL,              A_info_redraw_display,
-       CONTROL('q'), NUL,              A_ea_quoted_insert,
-       CONTROL('t'), NUL,              A_ea_transpose_chars,
-       CONTROL('u'), NUL,              A_ea_abort,
-       CONTROL('v'), NUL,              A_ea_quoted_insert,
-       CONTROL('y'), NUL,              A_ea_yank,
-       LFD, NUL,                       A_ea_newline,
-       RET, NUL,                       A_ea_newline,
-       SPC, NUL,                       A_ea_complete,
-       TAB, NUL,                       A_ea_complete,
-       '?', NUL,                       A_ea_possible_completions,
+        0,      /* suppress-default-keybindings flag */
+        ESC, '1', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '2', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '3', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '4', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '5', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '6', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '7', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '8', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '9', NUL,                  A_info_add_digit_to_numeric_arg,
+        ESC, '-', NUL,                  A_info_add_digit_to_numeric_arg,
+        Meta('1'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('2'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('3'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('4'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('5'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('6'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('7'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('8'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('9'), NUL,                 A_info_add_digit_to_numeric_arg,
+        Meta('-'), NUL,                 A_info_add_digit_to_numeric_arg,
+        ESC, CONTROL('g'), NUL,         A_ea_abort,
+        ESC, CONTROL('h'), NUL,         A_ea_backward_kill_word,
+        ESC, CONTROL('v'), NUL,         A_ea_scroll_completions_window,
+        ESC, '0', NUL,                  A_ea_beg_of_line,
+        ESC, '$', NUL,                  A_ea_end_of_line,
+        ESC, 'b', NUL,                  A_ea_backward_word,
+        ESC, 'd', NUL,                  A_ea_kill_word,
+        ESC, 'f', NUL,                  A_ea_forward_word,
+        ESC, 'h', NUL,                  A_ea_forward,
+        ESC, 'l', NUL,                  A_ea_backward,
+        ESC, 'w', NUL,                  A_ea_forward_word,
+        ESC, 'x', NUL,                  A_ea_delete,
+        ESC, 'X', NUL,                  A_ea_kill_word,
+        ESC, 'y', NUL,                  A_ea_yank_pop,
+        ESC, '?', NUL,                  A_ea_possible_completions,
+        ESC, TAB, NUL,                  A_ea_tab_insert,
+        ESC, DEL, NUL,                  A_ea_kill_word,
+        Meta(CONTROL('g')), NUL,        A_ea_abort,
+        Meta(CONTROL('h')), NUL,        A_ea_backward_kill_word,
+        Meta(CONTROL('v')), NUL,        A_ea_scroll_completions_window,
+        Meta('0'), NUL,                 A_ea_beg_of_line,
+        Meta('$'), NUL,                 A_ea_end_of_line,
+        Meta('b'), NUL,                 A_ea_backward_word,
+        Meta('d'), NUL,                 A_ea_kill_word,
+        Meta('f'), NUL,                 A_ea_forward_word,
+        Meta('h'), NUL,                 A_ea_forward,
+        Meta('l'), NUL,                 A_ea_backward,
+        Meta('w'), NUL,                 A_ea_forward_word,
+        Meta('x'), NUL,                 A_ea_delete,
+        Meta('X'), NUL,                 A_ea_kill_word,
+        Meta('y'), NUL,                 A_ea_yank_pop,
+        Meta('?'), NUL,                 A_ea_possible_completions,
+        Meta(TAB), NUL,                 A_ea_tab_insert,
+        Meta(DEL), NUL,                 A_ea_kill_word,
+        CONTROL('a'), NUL,              A_ea_beg_of_line,
+        CONTROL('b'), NUL,              A_ea_backward,
+        CONTROL('d'), NUL,              A_ea_delete,
+        CONTROL('e'), NUL,              A_ea_end_of_line,
+        CONTROL('f'), NUL,              A_ea_forward,
+        CONTROL('g'), NUL,              A_ea_abort,
+        CONTROL('h'), NUL,              A_ea_rubout,
+/*      CONTROL('k') */
+        SK_ESCAPE, SK_LITERAL, NUL,     A_ea_kill_line,
+        CONTROL('l'), NUL,              A_info_redraw_display,
+        CONTROL('q'), NUL,              A_ea_quoted_insert,
+        CONTROL('t'), NUL,              A_ea_transpose_chars,
+        CONTROL('u'), NUL,              A_ea_abort,
+        CONTROL('v'), NUL,              A_ea_quoted_insert,
+        CONTROL('y'), NUL,              A_ea_yank,
+        LFD, NUL,                       A_ea_newline,
+        RET, NUL,                       A_ea_newline,
+        SPC, NUL,                       A_ea_complete,
+        TAB, NUL,                       A_ea_complete,
+        '?', NUL,                       A_ea_possible_completions,
 #ifdef __MSDOS__
         /* PC users will lynch me if I don't give them their usual DEL
-          effect...  */
-       DEL, NUL,                       A_ea_delete,
+           effect...  */
+        DEL, NUL,                       A_ea_delete,
 #else
-       DEL, NUL,                       A_ea_rubout,
+        DEL, NUL,                       A_ea_rubout,
 #endif
-       CONTROL('x'), 'o', NUL,         A_info_next_window,
-       CONTROL('x'), DEL, NUL,         A_ea_backward_kill_line,
+        CONTROL('x'), 'o', NUL,         A_info_next_window,
+        CONTROL('x'), DEL, NUL,         A_ea_backward_kill_line,
 
   /* Arrow key bindings for echo area keymaps.  It seems that some
      terminals do not match their termcap entries, so it's best to just
      define everything with both of the usual prefixes.  */
 
-       SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_ea_forward,
-       '\033', 'O', 'C', NUL,                  A_ea_forward,
-       '\033', '[', 'C', NUL,                  A_ea_forward,
-       SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_ea_backward,
-       '\033', 'O', 'D', NUL,                  A_ea_backward,
-       '\033', '[', 'D', NUL,                  A_ea_backward,
-       SK_ESCAPE, SK_HOME, NUL,                A_ea_beg_of_line,
-       SK_ESCAPE, SK_END, NUL,                 A_ea_end_of_line,
+        SK_ESCAPE, SK_RIGHT_ARROW, NUL,         A_ea_forward,
+        '\033', 'O', 'C', NUL,                  A_ea_forward,
+        '\033', '[', 'C', NUL,                  A_ea_forward,
+        SK_ESCAPE, SK_LEFT_ARROW, NUL,          A_ea_backward,
+        '\033', 'O', 'D', NUL,                  A_ea_backward,
+        '\033', '[', 'D', NUL,                  A_ea_backward,
+        SK_ESCAPE, SK_HOME, NUL,                A_ea_beg_of_line,
+        SK_ESCAPE, SK_END, NUL,                 A_ea_end_of_line,
 #ifdef __MSDOS__
-       SK_ESCAPE, SK_DELETE, NUL,              A_ea_delete,
+        SK_ESCAPE, SK_DELETE, NUL,              A_ea_delete,
 #else
-       SK_DELETE, SK_DELETE, NUL,              A_ea_rubout,
+        SK_DELETE, SK_DELETE, NUL,              A_ea_rubout,
 #endif
-       ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_ea_forward_word,
-       ESC, '\033', 'O', 'C', NUL,             A_ea_forward_word,
-       ESC, '\033', '[', 'C', NUL,             A_ea_forward_word,
-       ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_ea_backward_word,
-       ESC, '\033', 'O', 'D', NUL,             A_ea_backward_word,
-       ESC, '\033', '[', 'D', NUL,             A_ea_backward_word,
-       ESC, SK_ESCAPE, SK_DELETE, NUL,         A_ea_kill_word,
-       CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
+        ESC, SK_ESCAPE, SK_RIGHT_ARROW, NUL,    A_ea_forward_word,
+        ESC, '\033', 'O', 'C', NUL,             A_ea_forward_word,
+        ESC, '\033', '[', 'C', NUL,             A_ea_forward_word,
+        ESC, SK_ESCAPE, SK_LEFT_ARROW, NUL,     A_ea_backward_word,
+        ESC, '\033', 'O', 'D', NUL,             A_ea_backward_word,
+        ESC, '\033', '[', 'D', NUL,             A_ea_backward_word,
+        ESC, SK_ESCAPE, SK_DELETE, NUL,         A_ea_kill_word,
+        CONTROL('x'), SK_ESCAPE, SK_DELETE, NUL,A_ea_backward_kill_line,
 };
 
 static unsigned char *user_info_keys;
@@ -1422,14 +1424,14 @@
 static unsigned long
 filesize(int f)
 {
-       long pos = lseek(f, 0L, SEEK_CUR);
-       long sz = -1L;
-       if (pos != -1L)
-       {
-               sz = lseek(f, 0L, SEEK_END);
-               lseek(f, pos, SEEK_SET);
-       }
-       return sz == -1L ? 0L : sz;
+        long pos = lseek(f, 0L, SEEK_CUR);
+        long sz = -1L;
+        if (pos != -1L)
+        {
+                sz = lseek(f, 0L, SEEK_END);
+                lseek(f, pos, SEEK_SET);
+        }
+        return sz == -1L ? 0L : sz;
 }
 
 /* Get an integer from a infokey file.
@@ -1438,13 +1440,13 @@
 static int
 getint(unsigned char **sp)
 {
-       int n;
+        int n;
 
-       if ( !((*sp)[0] < INFOKEY_RADIX && (*sp)[1] < INFOKEY_RADIX) )
-               return -1;
-       n = (*sp)[0] + (*sp)[1] * INFOKEY_RADIX;
-       *sp += 2;
-       return n;
+        if ( !((*sp)[0] < INFOKEY_RADIX && (*sp)[1] < INFOKEY_RADIX) )
+                return -1;
+        n = (*sp)[0] + (*sp)[1] * INFOKEY_RADIX;
+        *sp += 2;
+        return n;
 }
 
 
@@ -1453,139 +1455,139 @@
 static int
 fetch_user_maps(void)
 {
-       char *filename = NULL;
-       char *homedir;
-       int f;
-       unsigned char *buf;
-       unsigned long len;
-       long nread;
-       unsigned char *p;
-       int n;
-
-       /* Find and open file. */
-       if ((filename = getenv("INFOKEY")) != NULL)
-               filename = xstrdup(filename);
-       else if ((homedir = getenv("HOME")) != NULL)
-       {
-               filename = xmalloc(strlen(homedir) + 2 + strlen(INFOKEY_FILE));
-               strcpy(filename, homedir);
-               strcat(filename, "/");
-               strcat(filename, INFOKEY_FILE);
-       }
+        char *filename = NULL;
+        char *homedir;
+        int f;
+        unsigned char *buf;
+        unsigned long len;
+        long nread;
+        unsigned char *p;
+        int n;
+
+        /* Find and open file. */
+        if ((filename = getenv("INFOKEY")) != NULL)
+                filename = xstrdup(filename);
+        else if ((homedir = getenv("HOME")) != NULL)
+        {
+                filename = xmalloc(strlen(homedir) + 2 + strlen(INFOKEY_FILE));
+                strcpy(filename, homedir);
+                strcat(filename, "/");
+                strcat(filename, INFOKEY_FILE);
+        }
 #ifdef __MSDOS__
-       /* Poor baby, she doesn't have a HOME...  */
-       else
-               filename = xstrdup(INFOKEY_FILE); /* try current directory */
+        /* Poor baby, she doesn't have a HOME...  */
+        else
+                filename = xstrdup(INFOKEY_FILE); /* try current directory */
 #endif
-       if (filename == NULL || (f = open(filename, O_RDONLY)) == (-1))
-       {
-               if (filename && errno != ENOENT)
-               {
-                       info_error(filesys_error_string(filename, errno),
+        if (filename == NULL || (f = open(filename, O_RDONLY)) == (-1))
+        {
+                if (filename && errno != ENOENT)
+                {
+                        info_error(filesys_error_string(filename, errno),
                             NULL, NULL);
-                       free(filename);
-               }
-               return 0;
-       }
-       SET_BINARY (f);
-
-       /* Ensure that the file is a reasonable size. */
-       len = filesize(f);
-       if (len < INFOKEY_NMAGIC + 2 || len > 100 * 1024)
-       {
-               /* Bad file (a valid file must have at least 9 chars, and
-                  more than 100 KB is a problem). */
-               if (len < INFOKEY_NMAGIC + 2)
-                       info_error((char *) _("Ignoring invalid infokey file 
`%s' - too small"),
-                                  filename, NULL);
-               else
-                       info_error((char *) _("Ignoring invalid infokey file 
`%s' - too big"),
-                                  filename, NULL);
-               close(f);
-               free(filename);
-               return 0;
-       }
-
-       /* Read the file into a buffer. */
-       buf = (unsigned char *)xmalloc((int)len);
-       nread = read(f, buf, (unsigned int) len);
-       close(f);
-       if ((unsigned int) nread != len)
-       {
-               info_error((char *) _("Error reading infokey file `%s' - short 
read"),
+                        free(filename);
+                }
+                return 0;
+        }
+        SET_BINARY (f);
+
+        /* Ensure that the file is a reasonable size. */
+        len = filesize(f);
+        if (len < INFOKEY_NMAGIC + 2 || len > 100 * 1024)
+        {
+                /* Bad file (a valid file must have at least 9 chars, and
+                   more than 100 KB is a problem). */
+                if (len < INFOKEY_NMAGIC + 2)
+                        info_error((char *) _("Ignoring invalid infokey file 
`%s' - too small"),
+                                   filename, NULL);
+                else
+                        info_error((char *) _("Ignoring invalid infokey file 
`%s' - too big"),
+                                   filename, NULL);
+                close(f);
+                free(filename);
+                return 0;
+        }
+
+        /* Read the file into a buffer. */
+        buf = (unsigned char *)xmalloc((int)len);
+        nread = read(f, buf, (unsigned int) len);
+        close(f);
+        if ((unsigned int) nread != len)
+        {
+                info_error((char *) _("Error reading infokey file `%s' - short 
read"),
                     filename, NULL);
-               free(buf);
-               free(filename);
-               return 0;
-       }
-
-       /* Check the header, trailer, and version of the file to increase
-          our confidence that the contents are valid.  */
-       if (    buf[0] != INFOKEY_MAGIC_S0
-               || buf[1] != INFOKEY_MAGIC_S1
-               || buf[2] != INFOKEY_MAGIC_S2
-               || buf[3] != INFOKEY_MAGIC_S3
-               || buf[len - 4] != INFOKEY_MAGIC_E0
-               || buf[len - 3] != INFOKEY_MAGIC_E1
-               || buf[len - 2] != INFOKEY_MAGIC_E2
-               || buf[len - 1] != INFOKEY_MAGIC_E3
-       )
-       {
-               info_error((char *) _("Invalid infokey file `%s' (bad magic 
numbers) -- run infokey to update it"),
+                free(buf);
+                free(filename);
+                return 0;
+        }
+
+        /* Check the header, trailer, and version of the file to increase
+           our confidence that the contents are valid.  */
+        if (    buf[0] != INFOKEY_MAGIC_S0
+                || buf[1] != INFOKEY_MAGIC_S1
+                || buf[2] != INFOKEY_MAGIC_S2
+                || buf[3] != INFOKEY_MAGIC_S3
+                || buf[len - 4] != INFOKEY_MAGIC_E0
+                || buf[len - 3] != INFOKEY_MAGIC_E1
+                || buf[len - 2] != INFOKEY_MAGIC_E2
+                || buf[len - 1] != INFOKEY_MAGIC_E3
+        )
+        {
+                info_error((char *) _("Invalid infokey file `%s' (bad magic 
numbers) -- run infokey to update it"),
                     filename, NULL);
-               free(filename);
-               return 0;
-       }
-       if (len < INFOKEY_NMAGIC + strlen(VERSION) + 1
+                free(filename);
+                return 0;
+        }
+        if (len < INFOKEY_NMAGIC + strlen(VERSION) + 1
             || strcmp(VERSION, (char *) (buf + 4)) != 0)
-       {
-               info_error
+        {
+                info_error
                   ((char *) _("Your infokey file `%s' is out of date -- run 
infokey to update it"),
                     filename, NULL);
-               free(filename);
-               return 0;
-       }
+                free(filename);
+                return 0;
+        }
 
-       /* Extract the pieces.  */
-       for (p = buf + 4 + strlen(VERSION) + 1;
+        /* Extract the pieces.  */
+        for (p = buf + 4 + strlen(VERSION) + 1;
              (unsigned int) (p - buf) < len - 4;
              p += n)
-       {
-               int s = *p++;
+        {
+                int s = *p++;
 
-               n = getint(&p);
-               if (n < 0 || (unsigned int) n > len - 4 - (p - buf))
-               {
-                       info_error((char *) _("Invalid infokey file `%s' (bad 
section length) -- run infokey to update it"),
+                n = getint(&p);
+                if (n < 0 || (unsigned int) n > len - 4 - (p - buf))
+                {
+                        info_error((char *) _("Invalid infokey file `%s' (bad 
section length) -- run infokey to update it"),
                             filename, NULL);
-                       free(filename);
-                       return 0;
-               }
-
-               switch (s)
-               {
-               case INFOKEY_SECTION_INFO:
-                       user_info_keys = p;
-                       user_info_keys_len = n;
-                       break;
-               case INFOKEY_SECTION_EA:
-                       user_ea_keys = p;
-                       user_ea_keys_len = n;
-                       break;
-               case INFOKEY_SECTION_VAR:
-                       user_vars = p;
-                       user_vars_len = n;
-                       break;
-               default:
-                       info_error((char *) _("Invalid infokey file `%s' (bad 
section code) -- run infokey to update it"),
+                        free(filename);
+                        return 0;
+                }
+
+                switch (s)
+                {
+                case INFOKEY_SECTION_INFO:
+                        user_info_keys = p;
+                        user_info_keys_len = n;
+                        break;
+                case INFOKEY_SECTION_EA:
+                        user_ea_keys = p;
+                        user_ea_keys_len = n;
+                        break;
+                case INFOKEY_SECTION_VAR:
+                        user_vars = p;
+                        user_vars_len = n;
+                        break;
+                default:
+                        info_error((char *) _("Invalid infokey file `%s' (bad 
section code) -- run infokey to update it"),
                             filename, NULL);
-                       free(filename);
-                       return 0;
-               }
-       }
+                        free(filename);
+                        return 0;
+                }
+        }
 
-       free(filename);
-       return 1;
+        free(filename);
+        return 1;
 }
 
 /* Decode special key sequences from the infokey file.  Return zero
@@ -1596,55 +1598,55 @@
 decode_keys(unsigned char *src, unsigned int slen,
     unsigned char *dst, unsigned int dlen)
 {
-       unsigned char *s = src;
-       unsigned char *d = dst;
+        unsigned char *s = src;
+        unsigned char *d = dst;
 
 #define To_dst(c) do { \
   if ((unsigned int) (d - dst) < dlen) *d++ = (c); \
 } while (0)
 
-       while ((unsigned int) (s - src) < slen)
-       {
-               unsigned char c = ISMETA(*s) ? UNMETA(*s) : *s;
-
-               if (c == SK_ESCAPE)
-               {
-                       char *t;
-                       static char lit[] = { SK_ESCAPE, NUL };
-
-                       switch ((unsigned int) (s + 1 - src) < slen ? s[1] : 
'\0')
-                       {
-                       case SK_RIGHT_ARROW:    t = term_kr; break;
-                       case SK_LEFT_ARROW:     t = term_kl; break;
-                       case SK_UP_ARROW:       t = term_ku; break;
-                       case SK_DOWN_ARROW:     t = term_kd; break;
-                       case SK_PAGE_UP:        t = term_kP; break;
-                       case SK_PAGE_DOWN:      t = term_kN; break;
-                       case SK_HOME:           t = term_kh; break;
-                       case SK_END:            t = term_ke; break;
-                       case SK_DELETE:         t = term_kx; break;
-                       case SK_INSERT:         t = term_ki; break;
-                       case SK_LITERAL:
-                       default:                t = lit; break;
-                       }
-                       if (t == NULL)
-                               return 0;
-                       while (*t)
-                               To_dst(ISMETA(*s) ? Meta(*t++) : *t++);
-                       s += 2;
-               }
-               else
-               {
-                       if (ISMETA(*s))
-                               To_dst(Meta(*s++));
-                       else
-                               To_dst(*s++);
-               }
-       }
+        while ((unsigned int) (s - src) < slen)
+        {
+                unsigned char c = ISMETA(*s) ? UNMETA(*s) : *s;
+
+                if (c == SK_ESCAPE)
+                {
+                        char *t;
+                        static char lit[] = { SK_ESCAPE, NUL };
+
+                        switch ((unsigned int) (s + 1 - src) < slen ? s[1] : 
'\0')
+                        {
+                        case SK_RIGHT_ARROW:    t = term_kr; break;
+                        case SK_LEFT_ARROW:     t = term_kl; break;
+                        case SK_UP_ARROW:       t = term_ku; break;
+                        case SK_DOWN_ARROW:     t = term_kd; break;
+                        case SK_PAGE_UP:        t = term_kP; break;
+                        case SK_PAGE_DOWN:      t = term_kN; break;
+                        case SK_HOME:           t = term_kh; break;
+                        case SK_END:            t = term_ke; break;
+                        case SK_DELETE:         t = term_kx; break;
+                        case SK_INSERT:         t = term_ki; break;
+                        case SK_LITERAL:
+                        default:                t = lit; break;
+                        }
+                        if (t == NULL)
+                                return 0;
+                        while (*t)
+                                To_dst(ISMETA(*s) ? Meta(*t++) : *t++);
+                        s += 2;
+                }
+                else
+                {
+                        if (ISMETA(*s))
+                                To_dst(Meta(*s++));
+                        else
+                                To_dst(*s++);
+                }
+        }
 
-       To_dst('\0');
+        To_dst('\0');
 
-       return 1;
+        return 1;
 
 #undef To_dst
 
@@ -1655,66 +1657,66 @@
 static int
 section_to_keymaps(Keymap map, unsigned char *table, unsigned int len)
 {
-       int stop;
-       unsigned char *p;
-       unsigned char *seq = NULL;
-       unsigned int seqlen = 0;
-       enum { getseq, gotseq, getaction } state = getseq;
-
-       stop = len > 0 ? table[0] : 0;
-
-       for (p = table + 1; (unsigned int) (p - table) < len; p++)
-       {
-               switch (state)
-               {
-               case getseq:
-                       if (*p)
-                       {
-                               seq = p;
-                               state = gotseq;
-                       }
-                       break;
-
-               case gotseq:
-                       if (!*p)
-                       {
-                               seqlen = p - seq;
-                               state = getaction;
-                       }
-                       break;
-
-               case getaction:
-                       {
-                               unsigned int action = *p;
-                               unsigned char keyseq[256];
-                               KEYMAP_ENTRY ke;
-
-                               state = getseq;
-                               /* If decode_keys returns zero, it
-                                  means that seq includes keys which
-                                  the terminal doesn't support, like
-                                  PageDown.  In that case, don't bind
-                                  the key sequence.  */
-                               if (decode_keys(seq, seqlen, keyseq,
-                                               sizeof keyseq))
-                               {
-                                       keyseq[sizeof keyseq - 1] = '\0';
-                                       ke.type = ISFUNC;
-                                       ke.function =
-                                         action < A_NCOMMANDS
-                                         ? &function_doc_array[action]
-                                         : NULL;
-                                       keymap_bind_keyseq(map,
+        int stop;
+        unsigned char *p;
+        unsigned char *seq = NULL;
+        unsigned int seqlen = 0;
+        enum { getseq, gotseq, getaction } state = getseq;
+
+        stop = len > 0 ? table[0] : 0;
+
+        for (p = table + 1; (unsigned int) (p - table) < len; p++)
+        {
+                switch (state)
+                {
+                case getseq:
+                        if (*p)
+                        {
+                                seq = p;
+                                state = gotseq;
+                        }
+                        break;
+
+                case gotseq:
+                        if (!*p)
+                        {
+                                seqlen = p - seq;
+                                state = getaction;
+                        }
+                        break;
+
+                case getaction:
+                        {
+                                unsigned int action = *p;
+                                unsigned char keyseq[256];
+                                KEYMAP_ENTRY ke;
+
+                                state = getseq;
+                                /* If decode_keys returns zero, it
+                                   means that seq includes keys which
+                                   the terminal doesn't support, like
+                                   PageDown.  In that case, don't bind
+                                   the key sequence.  */
+                                if (decode_keys(seq, seqlen, keyseq,
+                                                sizeof keyseq))
+                                {
+                                        keyseq[sizeof keyseq - 1] = '\0';
+                                        ke.type = ISFUNC;
+                                        ke.function =
+                                          action < A_NCOMMANDS
+                                          ? &function_doc_array[action]
+                                          : NULL;
+                                        keymap_bind_keyseq(map,
                                             (const char *) keyseq, &ke);
-                               }
-                       }
-                       break;
-               }
-       }
-       if (state != getseq)
-               info_error((char *) _("Bad data in infokey file -- some key 
bindings ignored"),
+                                }
+                        }
+                        break;
+                }
+        }
+        if (state != getseq)
+                info_error((char *) _("Bad data in infokey file -- some key 
bindings ignored"),
                     NULL, NULL);
-       return !stop;
+        return !stop;
 }
 
 /* Convert an infokey file section to variable settings.
@@ -1722,47 +1724,47 @@
 static void
 section_to_vars(unsigned char *table, unsigned int len)
 {
-       enum { getvar, gotvar, getval, gotval } state = getvar;
-       unsigned char *var = NULL;
-       unsigned char *val = NULL;
-       unsigned char *p;
-
-       for (p = table; (unsigned int) (p - table) < len; p++)
-         {
-           switch (state)
-             {
-             case getvar:
-               if (*p)
-                 {
-                   var = p;
-                   state = gotvar;
-                 }
-               break;
-
-             case gotvar:
-               if (!*p)
-                 state = getval;
-               break;
-
-             case getval:
-               if (*p)
-                 {
-                   val = p;
-                   state = gotval;
-                 }
-               break;
-
-             case gotval:
-               if (!*p)
-                 {
-                   set_variable_to_value((char *) var, (char *) val);
-                   state = getvar;
-                 }
-               break;
-             }
-         }
+        enum { getvar, gotvar, getval, gotval } state = getvar;
+        unsigned char *var = NULL;
+        unsigned char *val = NULL;
+        unsigned char *p;
+
+        for (p = table; (unsigned int) (p - table) < len; p++)
+          {
+            switch (state)
+              {
+              case getvar:
+                if (*p)
+                  {
+                    var = p;
+                    state = gotvar;
+                  }
+                break;
+
+              case gotvar:
+                if (!*p)
+                  state = getval;
+                break;
+
+              case getval:
+                if (*p)
+                  {
+                    val = p;
+                    state = gotval;
+                  }
+                break;
+
+              case gotval:
+                if (!*p)
+                  {
+                    set_variable_to_value((char *) var, (char *) val);
+                    state = getvar;
+                  }
+                break;
+              }
+          }
       if (state != getvar)
-       info_error((char *) _("Bad data in infokey file -- some var settings 
ignored"),
+        info_error((char *) _("Bad data in infokey file -- some var settings 
ignored"),
             NULL, NULL);
 }
 
@@ -1788,9 +1790,9 @@
   if (fetch_user_maps())
     {
       if (user_info_keys_len && user_info_keys[0])
-       suppress_info_default_bindings = 1;
+        suppress_info_default_bindings = 1;
       if (user_ea_keys_len && user_ea_keys[0])
-       suppress_ea_default_bindings = 1;
+        suppress_ea_default_bindings = 1;
     }
 
   /* Apply the default bindings, unless the user says to suppress
@@ -1798,20 +1800,20 @@
   if (vi_keys_p)
     {
       if (!suppress_info_default_bindings)
-       section_to_keymaps(info_keymap, default_vi_like_info_keys,
-                          sizeof(default_vi_like_info_keys));
+        section_to_keymaps(info_keymap, default_vi_like_info_keys,
+                           sizeof(default_vi_like_info_keys));
       if (!suppress_ea_default_bindings)
-         section_to_keymaps(echo_area_keymap, default_vi_like_ea_keys,
-                            sizeof(default_vi_like_ea_keys));
+          section_to_keymaps(echo_area_keymap, default_vi_like_ea_keys,
+                             sizeof(default_vi_like_ea_keys));
     }
   else
     {
       if (!suppress_info_default_bindings)
-       section_to_keymaps(info_keymap, default_emacs_like_info_keys,
-                          sizeof(default_emacs_like_info_keys));
+        section_to_keymaps(info_keymap, default_emacs_like_info_keys,
+                           sizeof(default_emacs_like_info_keys));
       if (!suppress_ea_default_bindings)
-         section_to_keymaps(echo_area_keymap, default_emacs_like_ea_keys,
-                            sizeof(default_emacs_like_ea_keys));
+          section_to_keymaps(echo_area_keymap, default_emacs_like_ea_keys,
+                             sizeof(default_emacs_like_ea_keys));
     }
 
   /* If the user specified custom bindings, apply them on top of the
Index: info/search.c
===================================================================
RCS file: /sources/texinfo/texinfo/info/search.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- info/search.c       1 Jul 2007 21:20:31 -0000       1.6
+++ info/search.c       17 Dec 2007 19:12:11 -0000      1.7
@@ -1,5 +1,5 @@
 /* search.c -- searching large bodies of text.
-   $Id: search.c,v 1.6 2007/07/01 21:20:31 karl Exp $
+   $Id: search.c,v 1.7 2007/12/17 19:12:11 karl Exp $
 
    Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007
    Free Software Foundation, Inc.
@@ -17,9 +17,10 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-   Written by Brian Fox (address@hidden). */
+   Originally written by Brian Fox (address@hidden). */
 
 #include "info.h"
+#include <regex.h>
 
 #include "search.h"
 #include "nodes.h"
@@ -83,6 +84,164 @@
   return (result);
 }
 
+/* Search forwards or backwards for anything matching the regexp in the text
+   delimited by BINDING. The search is forwards if BINDING->start is greater
+   than BINDING->end. */
+long
+regexp_search (char *regexp, SEARCH_BINDING *binding, long length)
+{
+  static char *previous_regexp = NULL;
+  static char *previous_content = NULL;
+  static int was_insensitive = 0;
+  static regex_t preg;
+  static regmatch_t *matches;
+  static int match_alloc = 0;
+  static int match_count = 0;
+  regoff_t pos;
+  long result;
+
+  if (previous_regexp == NULL
+      || (binding->flags & S_FoldCase != was_insensitive)
+      || (strcmp (previous_regexp, regexp) != 0))
+    {
+      /* need to compile a new regexp */
+      int result;
+      char *unescaped_regexp;
+      char *p, *q;
+
+      previous_content = NULL;
+
+      if (previous_regexp != NULL)
+        {
+          free (previous_regexp);
+          previous_regexp = NULL;
+          regfree (&preg);
+        }
+
+      was_insensitive = binding->flags & S_FoldCase;
+
+      /* expand the \n and \t in regexp */
+      unescaped_regexp = xmalloc (1 + strlen (regexp));
+      for (p = regexp, q = unescaped_regexp; *p != '\0'; p++, q++)
+        {
+          if (*p == '\\')
+            switch(*++p)
+              {
+              case 'n':
+                *q = '\n';
+                break;
+              case 't':
+                *q = '\t';
+                break;
+              case '\0':
+                *q = '\\';
+                p--;
+                break;
+              default:
+                *q++ = '\\';
+                *q = *p;
+                break;
+              }
+          else
+            *q = *p;
+        }
+      *q = '\0';
+
+      result = regcomp (&preg, unescaped_regexp,
+                       REG_EXTENDED|
+                       REG_NEWLINE|
+                       (was_insensitive ? REG_ICASE : 0));
+      free (unescaped_regexp);
+
+      if (result != 0)
+        {
+          int size = regerror (result, &preg, NULL, 0);
+          char *buf = xmalloc (size);
+          regerror (result, &preg, buf, size);
+          info_error (_("regexp error: %s"), buf, NULL);
+          return -1;
+        }
+
+      previous_regexp = xstrdup(regexp);
+    }
+
+  if (previous_content != binding->buffer)
+    {
+      /* new buffer to search in, let's scan it */
+      regoff_t start = 0;
+      char saved_char;
+
+      previous_content = binding->buffer;
+      saved_char = previous_content[length-1];
+      previous_content[length-1] = '\0';
+
+      for (match_count = 0; start < length; )
+        {
+          int result = 0;
+          if (match_count >= match_alloc)
+            {
+              /* match list full. Initially allocate 256 entries, then double
+                 every time we fill it */
+              match_alloc = (match_alloc > 0 ? match_alloc * 2 : 256);
+              matches = (regmatch_t*) xrealloc (matches,
+                                            match_alloc * sizeof(regmatch_t));
+            }
+
+          result = regexec (&preg, &previous_content[start],
+                            1, &matches[match_count], 0);
+          if (result == 0)
+            {
+              if (matches[match_count].rm_eo == 0)
+                {
+                  /* ignore empty matches */
+                  start++;
+                }
+              else
+                {
+                  matches[match_count].rm_so += start;
+                  matches[match_count].rm_eo += start;
+                  start = matches[match_count++].rm_eo;
+                }
+            }
+          else
+            {
+              break;
+            }
+        }
+      previous_content[length-1] = saved_char;
+    }
+
+  pos = binding->start;
+  if (pos > binding->end)
+    {
+      /* searching backward */
+      int i;
+      for (i = match_count - 1; i >= 0; i--)
+        {
+          if (matches[i].rm_so <= pos)
+            return matches[i].rm_so;
+        }
+    }
+  else
+    {
+      /* searching forward */
+      int i;
+      for (i = 0; i < match_count; i++)
+        {
+          if (matches[i].rm_so >= pos)
+            {
+              if (binding->flags & S_SkipDest)
+                return matches[i].rm_eo;
+              else
+                return matches[i].rm_so;
+            }
+        }
+    }
+
+  /* not found */
+  return -1;
+}
+
 /* Search forwards for STRING through the text delimited in BINDING. */
 long
 search_forward (char *string, SEARCH_BINDING *binding)
Index: info/search.h
===================================================================
RCS file: /sources/texinfo/texinfo/info/search.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- info/search.h       1 Jul 2007 21:20:31 -0000       1.6
+++ info/search.h       17 Dec 2007 19:12:11 -0000      1.7
@@ -1,5 +1,5 @@
 /* search.h -- Structure used to search large bodies of text, with bounds.
-   $Id: search.h,v 1.6 2007/07/01 21:20:31 karl Exp $
+   $Id: search.h,v 1.7 2007/12/17 19:12:11 karl Exp $
 
    Copyright (C) 1993, 1997, 1998, 2002, 2004, 2007
    Free Software Foundation, Inc.
@@ -17,7 +17,7 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-   Written by Brian Fox (address@hidden). */
+   Originally written by Brian Fox (address@hidden). */
 
 /* The search functions take two arguments:
 
@@ -47,6 +47,7 @@
 extern long search_forward (char *string, SEARCH_BINDING *binding);
 extern long search_backward (char *input_string, SEARCH_BINDING *binding);
 extern long search (char *string, SEARCH_BINDING *binding);
+extern long regexp_search (char *regexp, SEARCH_BINDING *binding, long length);
 extern int looking_at (char *string, SEARCH_BINDING *binding);
 
 /* Note that STRING_IN_LINE () always returns the offset of the 1st character
Index: info/session.c
===================================================================
RCS file: /sources/texinfo/texinfo/info/session.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- info/session.c      16 Dec 2007 22:42:18 -0000      1.23
+++ info/session.c      17 Dec 2007 19:12:11 -0000      1.24
@@ -1,5 +1,5 @@
 /* session.c -- user windowing interface to Info.
-   $Id: session.c,v 1.23 2007/12/16 22:42:18 karl Exp $
+   $Id: session.c,v 1.24 2007/12/17 19:12:11 karl Exp $
 
    Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
    2004, 2007 Free Software Foundation, Inc.
@@ -63,6 +63,9 @@
 /* Number of slots allocated to `info_windows'. */
 static int info_windows_slots = 0;
 
+/* Whether to use regexps or not for search.  */
+static int use_regex = 1;
+
 void remember_window_and_node (WINDOW *window, NODE *node);
 void forget_window_and_nodes (WINDOW *window);
 void display_startup_message_and_start (void);
@@ -604,7 +607,7 @@
       int goal;
 
       if (new >= window->line_count || new < 0)
-       return;
+        return;
       
       goal = window_get_goal_column (window);
       window->goal_column = goal;
@@ -628,29 +631,29 @@
   else
     while (count)
       {
-       int diff;
+        int diff;
 
-       old_line = window_line_of_point (window);
-       diff = window->line_count - old_line;
-       if (diff > count)
-         diff = count;
-
-       count -= diff;
-       new_line = old_line + diff;
-       if (new_line >= window->line_count)
-         {
-           if (cursor_movement_scrolls_p)
-             {
-               if (forward_move_node_structure (window,
-                                                info_scroll_behaviour))
-                 break;
-               move_to_new_line (0, 0, window);
-             }
-           else
-             break;
-         }
-       else
-         move_to_new_line (old_line, new_line, window);
+        old_line = window_line_of_point (window);
+        diff = window->line_count - old_line;
+        if (diff > count)
+          diff = count;
+
+        count -= diff;
+        new_line = old_line + diff;
+        if (new_line >= window->line_count)
+          {
+            if (cursor_movement_scrolls_p)
+              {
+                if (forward_move_node_structure (window,
+                                                 info_scroll_behaviour))
+                  break;
+                move_to_new_line (0, 0, window);
+              }
+            else
+              break;
+          }
+        else
+          move_to_new_line (old_line, new_line, window);
       }
 }
 
@@ -664,28 +667,28 @@
   else
     while (count)
       {
-       int diff;
-       
-       old_line = window_line_of_point (window);
-       diff = old_line + 1;
-       if (diff > count)
-         diff = count;
-       
-       count -= diff;
-       new_line = old_line - diff;
-       
-       if (new_line < 0
-           && cursor_movement_scrolls_p)
-         {
-           if (backward_move_node_structure (window, info_scroll_behaviour))
-             break;
-           if (window->line_count > window->height)
-             set_window_pagetop (window, window->line_count - window->height);
-           move_to_new_line (window->line_count,
-                             window->line_count - 1, window);
-         }
-       else
-         move_to_new_line (old_line, new_line, window);
+        int diff;
+        
+        old_line = window_line_of_point (window);
+        diff = old_line + 1;
+        if (diff > count)
+          diff = count;
+        
+        count -= diff;
+        new_line = old_line - diff;
+        
+        if (new_line < 0
+            && cursor_movement_scrolls_p)
+          {
+            if (backward_move_node_structure (window, info_scroll_behaviour))
+              break;
+            if (window->line_count > window->height)
+              set_window_pagetop (window, window->line_count - window->height);
+            move_to_new_line (window->line_count,
+                              window->line_count - 1, window);
+          }
+        else
+          move_to_new_line (old_line, new_line, window);
       }
 }
 
@@ -736,26 +739,26 @@
   else
     {
       while (count)
-       {
-         int diff = window->node->nodelen - window->point;
-         
-         if (diff > count)
-           diff = count;
-         window->point += diff;
-         count -= diff;
-         if (window->point >= window->node->nodelen)
-           {
-             if (cursor_movement_scrolls_p
-                 && forward_move_node_structure (window,
-                                                 info_scroll_behaviour) == 0)
-               window->point = 0;
-             else
-               {
-                 window->point = window->node->nodelen - 1;
-                 break;
-               }
-           }
-       }
+        {
+          int diff = window->node->nodelen - window->point;
+          
+          if (diff > count)
+            diff = count;
+          window->point += diff;
+          count -= diff;
+          if (window->point >= window->node->nodelen)
+            {
+              if (cursor_movement_scrolls_p
+                  && forward_move_node_structure (window,
+                                                  info_scroll_behaviour) == 0)
+                window->point = 0;
+              else
+                {
+                  window->point = window->node->nodelen - 1;
+                  break;
+                }
+            }
+        }
       info_show_point (window);
     }
 }
@@ -768,33 +771,33 @@
   else
     {
       while (count)
-       {
-         int diff = count;
+        {
+          int diff = count;
 
-         if (window->point < diff)
-           diff = window->point + 1;
-         
-         window->point -= diff;
-         count -= diff;
-
-         if (window->point < 0)
-           {
-             if (cursor_movement_scrolls_p
-                 && backward_move_node_structure (window,
-                                                  info_scroll_behaviour) == 0)
-               {
-                 window->point = window->node->nodelen - 1;
-                 if (window->line_count > window->height)
-                   set_window_pagetop (window,
-                                       window->line_count - window->height);
-               }
-             else
-               {
-                 window->point = 0;
-                 break;
-               }
-           }
-       }
+          if (window->point < diff)
+            diff = window->point + 1;
+          
+          window->point -= diff;
+          count -= diff;
+
+          if (window->point < 0)
+            {
+              if (cursor_movement_scrolls_p
+                  && backward_move_node_structure (window,
+                                                   info_scroll_behaviour) == 0)
+                {
+                  window->point = window->node->nodelen - 1;
+                  if (window->line_count > window->height)
+                    set_window_pagetop (window,
+                                        window->line_count - window->height);
+                }
+              else
+                {
+                  window->point = 0;
+                  break;
+                }
+            }
+        }
       info_show_point (window);
     }
 }
@@ -821,18 +824,18 @@
   while (count)
     {
       if (point + 1 >= end)
-       {
-         if (cursor_movement_scrolls_p
-             && forward_move_node_structure (window,
-                                             info_scroll_behaviour) == 0)
-           {
-             point = 0;
-             buffer = window->node->contents;
-             end = window->node->nodelen;
-           }
-         else
-           return;
-       }
+        {
+          if (cursor_movement_scrolls_p
+              && forward_move_node_structure (window,
+                                              info_scroll_behaviour) == 0)
+            {
+              point = 0;
+              buffer = window->node->contents;
+              end = window->node->nodelen;
+            }
+          else
+            return;
+        }
       
       /* If we are not in a word, move forward until we are in one.
          Then, move forward until we hit a non-alphabetic character. */
@@ -849,18 +852,18 @@
         }
 
       if (point >= end)
-       {
-         if (cursor_movement_scrolls_p
-             && forward_move_node_structure (window,
-                                             info_scroll_behaviour) == 0)
-           {
-             point = 0;
-             buffer = window->node->contents;
-             end = window->node->nodelen;
-           }
-         else
-           return;
-       }
+        {
+          if (cursor_movement_scrolls_p
+              && forward_move_node_structure (window,
+                                              info_scroll_behaviour) == 0)
+            {
+              point = 0;
+              buffer = window->node->contents;
+              end = window->node->nodelen;
+            }
+          else
+            return;
+        }
 
 
       while (++point < end)
@@ -893,20 +896,20 @@
   while (count)
     {
       if (point == 0)
-       {
-         if (cursor_movement_scrolls_p
-             && backward_move_node_structure (window,
-                                              info_scroll_behaviour) == 0)
-           {
-             if (window->line_count > window->height)
-               set_window_pagetop (window,
-                                   window->line_count - window->height);
-             buffer = window->node->contents;
-             point = window->node->nodelen;
-           }
-         else
-           break;
-       }
+        {
+          if (cursor_movement_scrolls_p
+              && backward_move_node_structure (window,
+                                               info_scroll_behaviour) == 0)
+            {
+              if (window->line_count > window->height)
+                set_window_pagetop (window,
+                                    window->line_count - window->height);
+              buffer = window->node->contents;
+              point = window->node->nodelen;
+            }
+          else
+            break;
+        }
       
       /* Like info_forward_word (), except that we look at the
          characters just before point. */
@@ -959,8 +962,8 @@
 int cursor_movement_scrolls_p = 0;
 
 /* Default window sizes for scrolling commands.  */
-int default_window_size = -1;  /* meaning 1 window-full */
-int default_scroll_size = -1;  /* meaning half screen size */
+int default_window_size = -1;   /* meaning 1 window-full */
+int default_scroll_size = -1;   /* meaning half screen size */
 
 #define INFO_LABEL_FOUND() \
   (info_parsed_nodename || (info_parsed_filename \
@@ -979,10 +982,10 @@
     case IS_NextOnly:
       info_next_label_of_node (window->node);
       if (!info_parsed_nodename && !info_parsed_filename)
-       {
-         info_error ((char *) msg_no_pointer, (char *) _("Next"), NULL);
-         return 1;
-       }
+        {
+          info_error ((char *) msg_no_pointer, (char *) _("Next"), NULL);
+          return 1;
+        }
       else
         {
           info_handle_pointer ("Next", window);
@@ -1102,7 +1105,7 @@
                   window->flags |= W_UpdateWindow;
                   info_error ((char *) _("No more nodes within this 
document."),
                       NULL, NULL);
-                 return 1;
+                  return 1;
                 }
             }
         }
@@ -1125,10 +1128,10 @@
     case IS_NextOnly:
       info_prev_label_of_node (window->node);
       if (!info_parsed_nodename && !info_parsed_filename)
-       {
-         info_error ((char *) _("No `Prev' for this node."), NULL, NULL);
-         return 1;
-       }
+        {
+          info_error ((char *) _("No `Prev' for this node."), NULL, NULL);
+          return 1;
+        }
       else
         {
           info_handle_pointer ("Prev", window);
@@ -1144,12 +1147,12 @@
           info_up_label_of_node (window->node);
           if (!info_parsed_nodename && (!info_parsed_filename
                                         || is_dir_name (info_parsed_filename)))
-           {
-             info_error ((char *)
-                   _("No `Prev' or `Up' for this node within this document."),
-                         NULL, NULL);
-             return 1;
-           }
+            {
+              info_error ((char *)
+                    _("No `Prev' or `Up' for this node within this document."),
+                          NULL, NULL);
+              return 1;
+            }
           else
             {
               info_handle_pointer ("Up", window);
@@ -1255,7 +1258,7 @@
       /* Without an explicit numeric argument, scroll the bottom two
          lines to the top of this window,  Or, if at bottom of window,
          and the chosen behaviour is to scroll through nodes get the
-        "Next" node for this window. */
+         "Next" node for this window. */
       if (default_window_size > 0)
         desired_top = window->pagetop + default_window_size;
       else if (!info_explicit_arg && count == 1)
@@ -1265,10 +1268,10 @@
           /* If there are no more lines to scroll here, error, or get
              another node, depending on BEHAVIOUR. */
           if (desired_top > window->line_count)
-           {
-             forward_move_node_structure (window, behaviour);
-             return;
-           }
+            {
+              forward_move_node_structure (window, behaviour);
+              return;
+            }
         }
       else
         desired_top = window->pagetop + count;
@@ -1294,7 +1297,7 @@
 
       /* Without an explicit numeric argument, scroll the top two lines
          to the bottom of this window, or, depending on the selected
-        behaviour, move to the previous, or Up'th node. */
+         behaviour, move to the previous, or Up'th node. */
       if (default_window_size > 0)
         desired_top = window->pagetop - default_window_size;
       else if (!info_explicit_arg && count == 1)
@@ -1302,10 +1305,10 @@
           desired_top = window->pagetop - (window->height - 2);
 
           if ((desired_top < 0) && (window->pagetop == 0))
-           {
-             backward_move_node_structure (window, behaviour);
-             return;
-           }
+            {
+              backward_move_node_structure (window, behaviour);
+              return;
+            }
         }
       else
         desired_top = window->pagetop - count;
@@ -1326,7 +1329,7 @@
 /* Like info_scroll_forward, but sets default_window_size as a side
    effect.  */
 DECLARE_INFO_COMMAND (info_scroll_forward_set_window,
-                     _("Scroll forward in this window and set default window 
size"))
+                      _("Scroll forward in this window and set default window 
size"))
 {
   if (info_explicit_arg)
     default_window_size = count;
@@ -1342,7 +1345,7 @@
 /* Like info_scroll_forward_page_only, but sets default_window_size as a side
    effect.  */
 DECLARE_INFO_COMMAND (info_scroll_forward_page_only_set_window,
-                     _("Scroll forward in this window staying within node and 
set default window size"))
+                      _("Scroll forward in this window staying within node and 
set default window size"))
 {
   if (info_explicit_arg)
     default_window_size = count;
@@ -1358,7 +1361,7 @@
 /* Like info_scroll_backward, but sets default_window_size as a side
    effect.  */
 DECLARE_INFO_COMMAND (info_scroll_backward_set_window,
-                     _("Scroll backward in this window and set default window 
size"))
+                      _("Scroll backward in this window and set default window 
size"))
 {
   if (info_explicit_arg)
     default_window_size = count;
@@ -1375,7 +1378,7 @@
 /* Like info_scroll_backward_page_only, but sets default_window_size as a side
    effect.  */
 DECLARE_INFO_COMMAND (info_scroll_backward_page_only_set_window,
-                     _("Scroll backward in this window staying within node and 
set default window size"))
+                      _("Scroll backward in this window staying within node 
and set default window size"))
 {
   if (info_explicit_arg)
     default_window_size = count;
@@ -1406,10 +1409,10 @@
       int desired_top = window->pagetop + count;
 
       if (desired_top >= window->line_count)
-       desired_top = window->line_count - 2;
+        desired_top = window->line_count - 2;
 
       if (window->pagetop <= desired_top)
-       set_window_pagetop (window, desired_top);
+        set_window_pagetop (window, desired_top);
     }
 }
 
@@ -1423,7 +1426,7 @@
       int desired_top = window->pagetop - count;
 
       if (desired_top < 0)
-       desired_top = 0;
+        desired_top = 0;
 
       set_window_pagetop (window, desired_top);
     }
@@ -1432,7 +1435,7 @@
 /* Scroll the window forward by N lines and remember N as default for
    subsequent commands.  */
 DECLARE_INFO_COMMAND (info_scroll_half_screen_down,
-                     _("Scroll down by half screen size"))
+                      _("Scroll down by half screen size"))
 {
   if (count < 0)
     info_scroll_half_screen_up (window, -count, key);
@@ -1442,23 +1445,23 @@
       int desired_top;
 
       if (info_explicit_arg)
-       default_scroll_size = count;
+        default_scroll_size = count;
       if (default_scroll_size > 0)
-       scroll_size = default_scroll_size;
+        scroll_size = default_scroll_size;
 
       desired_top = window->pagetop + scroll_size;
       if (desired_top >= window->line_count)
-       desired_top = window->line_count - 2;
+        desired_top = window->line_count - 2;
 
       if (window->pagetop <= desired_top)
-       set_window_pagetop (window, desired_top);
+        set_window_pagetop (window, desired_top);
     }
 }
 
 /* Scroll the window backward by N lines and remember N as default for
    subsequent commands.  */
 DECLARE_INFO_COMMAND (info_scroll_half_screen_up,
-                     _("Scroll up by half screen size"))
+                      _("Scroll up by half screen size"))
 {
   if (count < 0)
     info_scroll_half_screen_down (window, -count, key);
@@ -1468,13 +1471,13 @@
       int desired_top;
 
       if (info_explicit_arg)
-       default_scroll_size = count;
+        default_scroll_size = count;
       if (default_scroll_size > 0)
-       scroll_size = default_scroll_size;
+        scroll_size = default_scroll_size;
 
       desired_top = window->pagetop - scroll_size;
       if (desired_top < 0)
-       desired_top = 0;
+        desired_top = 0;
 
       set_window_pagetop (window, desired_top);
     }
@@ -1793,6 +1796,17 @@
 {
   window_toggle_wrap (window);
 }
+
+/* Toggle the usage of regular expressions in searches. */
+DECLARE_INFO_COMMAND (info_toggle_regexp,
+              _("Toggle the usage of regular expressions in searches"))
+{
+  use_regex = 1 - use_regex;
+  window_message_in_echo_area (use_regex
+                               ? _("Using regular expressions for searches.")
+                               : _("Using literal strings for searches."),
+                               NULL, NULL);
+}
 
 /* **************************************************************** */
 /*                                                                  */
@@ -2248,13 +2262,13 @@
                         else if (window->point < refs[which]->start)
                           break;
                       }
-                   if (which > 0)
-                     {
-                       if (closest == -1)
-                         which--;
-                       else
-                         which = closest;
-                     }
+                    if (which > 0)
+                      {
+                        if (closest == -1)
+                          which--;
+                        else
+                          which = closest;
+                      }
                   }
 
                 defentry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
@@ -2282,24 +2296,24 @@
       if (builder == info_menu_of_node)
         {
           if (defentry)
-           {
-             prompt = xmalloc (strlen (defentry->label)
-                               + strlen (_("Menu item (%s): ")));
-             sprintf (prompt, _("Menu item (%s): "), defentry->label);
-           }
+            {
+              prompt = xmalloc (strlen (defentry->label)
+                                + strlen (_("Menu item (%s): ")));
+              sprintf (prompt, _("Menu item (%s): "), defentry->label);
+            }
           else
-           prompt = xstrdup (_("Menu item: "));
+            prompt = xstrdup (_("Menu item: "));
         }
       else
         {
           if (defentry)
-           {
-             prompt = xmalloc (strlen (defentry->label)
-                               + strlen (_("Follow xref (%s): ")));
-             sprintf (prompt, _("Follow xref (%s): "), defentry->label);
-           }
+            {
+              prompt = xmalloc (strlen (defentry->label)
+                                + strlen (_("Follow xref (%s): ")));
+              sprintf (prompt, _("Follow xref (%s): "), defentry->label);
+            }
           else
-           prompt = xstrdup (_("Follow xref: "));
+            prompt = xstrdup (_("Follow xref: "));
         }
 
       line = info_read_completing_in_echo_area (window, prompt, menu);
@@ -2533,16 +2547,16 @@
               {
                 entry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
                 entry->filename = entry->nodename = (char *)NULL;
-               if (this_is_the_current_fb)
-                 entry->label = xstrdup (fb->tags[i]->nodename);
-               else
-                 {
-                   entry->label = (char *) xmalloc
-                     (4 + strlen (fb->filename) +
-                      strlen (fb->tags[i]->nodename));
-                   sprintf (entry->label, "(%s)%s",
-                            fb->filename, fb->tags[i]->nodename);
-                 }
+                if (this_is_the_current_fb)
+                  entry->label = xstrdup (fb->tags[i]->nodename);
+                else
+                  {
+                    entry->label = (char *) xmalloc
+                      (4 + strlen (fb->filename) +
+                       strlen (fb->tags[i]->nodename));
+                    sprintf (entry->label, "(%s)%s",
+                             fb->filename, fb->tags[i]->nodename);
+                  }
 
                 add_pointer_to_array
                   (entry, items_index, items, items_slots, 100, REFERENCE *);
@@ -2596,11 +2610,11 @@
       char *arg = *menus; /* Remember the name of the menu entry we want. */
 
       /* A leading space is certainly NOT part of a node name.  Most
-        probably, they typed a space after the separating comma.  The
-        strings in menus[] have their whitespace canonicalized, so
-        there's at most one space to ignore.  */
+         probably, they typed a space after the separating comma.  The
+         strings in menus[] have their whitespace canonicalized, so
+         there's at most one space to ignore.  */
       if (*arg == ' ')
-       arg++;
+        arg++;
       if (!first_arg)
         first_arg = arg;
 
@@ -2653,12 +2667,12 @@
         {
           if (arg == first_arg)
             {
-             /* Maybe they typed "info foo" instead of "info -f foo".  */
-             node = info_get_node (first_arg, 0);
-             if (node)
-               add_file_directory_to_path (first_arg);
-             else
-               node = make_manpage_node (first_arg);
+              /* Maybe they typed "info foo" instead of "info -f foo".  */
+              node = info_get_node (first_arg, 0);
+              if (node)
+                add_file_directory_to_path (first_arg);
+              else
+                node = make_manpage_node (first_arg);
               if (node)
                 goto maybe_got_node;
             }
@@ -2679,11 +2693,11 @@
       /* Try to find this node.  */
       node = info_get_node (entry->filename, entry->nodename);
       if (!node && arg == first_arg)
-       {
-         node = make_manpage_node (first_arg);
-         if (node)
-           goto maybe_got_node;
-       }
+        {
+          node = make_manpage_node (first_arg);
+          if (node)
+            goto maybe_got_node;
+        }
 
       /* Since we cannot find it, try using the label of the entry as a
          file, i.e., "(LABEL)Top".  */
@@ -2728,7 +2742,7 @@
     {
       if (*str == ',')
         {
-          *str++ = 0;          /* get past the null byte */
+          *str++ = 0;           /* get past the null byte */
           len++;
           nodes = xrealloc (nodes, len * sizeof (char *));
           nodes[len - 2] = str;
@@ -2766,22 +2780,22 @@
       NODE *node = NULL;
 
       /* If DIR_NODE is NULL, they might be reading a file directly,
-        like in "info -d . -f ./foo".  Try using "Top" instead.  */
+         like in "info -d . -f ./foo".  Try using "Top" instead.  */
       if (!dir_node)
-       {
-         char *file_name = window->node->parent;
+        {
+          char *file_name = window->node->parent;
 
-         if (!file_name)
-           file_name = window->node->filename;
-         dir_node = info_get_node (file_name, NULL);
-       }
+          if (!file_name)
+            file_name = window->node->filename;
+          dir_node = info_get_node (file_name, NULL);
+        }
 
       /* If we still cannot find the starting point, give up.
-        We cannot allow a NULL pointer inside info_follow_menus.  */
+         We cannot allow a NULL pointer inside info_follow_menus.  */
       if (!dir_node)
-       info_error ((char *) msg_cant_find_node, "Top", NULL);
+        info_error ((char *) msg_cant_find_node, "Top", NULL);
       else
-       node = info_follow_menus (dir_node, nodes, &errstr, &errarg1, &errarg2);
+        node = info_follow_menus (dir_node, nodes, &errstr, &errarg1, 
&errarg2);
 
       free (nodes);
       if (!errstr)
@@ -2815,16 +2829,16 @@
       int best_guess = -1;
 
       for (i = 0; (entry = menu[i]); i++)
-       {
-         if (mbscasecmp (entry->label, arg) == 0)
-           break;
-         else
-           if (mbsncasecmp (entry->label, arg, strlen (arg)) == 0)
-             best_guess = i;
-       }
+        {
+          if (mbscasecmp (entry->label, arg) == 0)
+            break;
+          else
+            if (mbsncasecmp (entry->label, arg, strlen (arg)) == 0)
+              best_guess = i;
+        }
 
       if (!entry && best_guess != -1)
-       entry = menu[best_guess];
+        entry = menu[best_guess];
     }
 
   return entry;
@@ -2845,18 +2859,18 @@
   static const char *invocation_nodes[] = {
     "%s invocation",
     "Invoking %s",
-    "Preliminaries",   /* m4 has Invoking under Preliminaries! */
+    "Preliminaries",    /* m4 has Invoking under Preliminaries! */
     "Invocation",
     "Command Arguments",/* Emacs */
     "Invoking `%s'",
     "%s options",
     "Options",
-    "Option ",         /* e.g. "Option Summary" */
+    "Option ",          /* e.g. "Option Summary" */
     "Invoking",
-    "All options",     /* tar, paxutils */
+    "All options",      /* tar, paxutils */
     "Arguments",
-    "%s cmdline",      /* ar */
-    "%s",              /* last resort */
+    "%s cmdline",       /* ar */
+    "%s",               /* last resort */
     (const char *)0
   };
   NODE *node = NULL;
@@ -2875,37 +2889,37 @@
       menu = info_menu_of_node (initial_node);
 
       /* If no menu item in this node, stop here.  Perhaps this node
-        is the one they need.  */
+         is the one they need.  */
       if (!menu)
-       break;
+        break;
 
       /* Look for node names typical for usage nodes in this menu.  */
       for (try_node = invocation_nodes; *try_node; try_node++)
-       {
-         char *nodename;
+        {
+          char *nodename;
 
-         nodename = xmalloc (strlen (program) + strlen (*try_node));
-         sprintf (nodename, *try_node, program);
-         /* The last resort "%s" is dangerous, so we restrict it
+          nodename = xmalloc (strlen (program) + strlen (*try_node));
+          sprintf (nodename, *try_node, program);
+          /* The last resort "%s" is dangerous, so we restrict it
              to exact matches here.  */
-         entry = entry_in_menu (nodename, menu,
-                                strcmp (*try_node, "%s") == 0);
-         free (nodename);
-         if (entry)
-           break;
-       }
+          entry = entry_in_menu (nodename, menu,
+                                 strcmp (*try_node, "%s") == 0);
+          free (nodename);
+          if (entry)
+            break;
+        }
 
       if (!entry)
-       break;
+        break;
 
       if (!entry->filename)
-       entry->filename = xstrdup (initial_node->parent ? initial_node->parent
-                                  : initial_node->filename);
+        entry->filename = xstrdup (initial_node->parent ? initial_node->parent
+                                   : initial_node->filename);
       /* Try to find this node.  */
       node = info_get_node (entry->filename, entry->nodename);
       info_free_references (menu);
       if (!node)
-       break;
+        break;
     }
 
   /* We've got our best shot at the invocation node.  Now select it.  */
@@ -2925,21 +2939,21 @@
 
   for (i = strlen (program_name) - 1; i > 0; i--)
     if (program_name[i] == '.'
-       && (FILENAME_CMPN (program_name + i, ".info", 5) == 0
-           || FILENAME_CMPN (program_name + i, ".inf", 4) == 0
+        && (FILENAME_CMPN (program_name + i, ".info", 5) == 0
+            || FILENAME_CMPN (program_name + i, ".inf", 4) == 0
 #ifdef __MSDOS__
-           || FILENAME_CMPN (program_name + i, ".i", 2) == 0
+            || FILENAME_CMPN (program_name + i, ".i", 2) == 0
 #endif
-           || isdigit (program_name[i + 1]))) /* a man page foo.1 */
+            || isdigit (program_name[i + 1]))) /* a man page foo.1 */
       {
-       program_name[i] = 0;
-       break;
+        program_name[i] = 0;
+        break;
       }
   return program_name;
 }
 
 DECLARE_INFO_COMMAND (info_goto_invocation_node,
-                     _("Find the node describing program invocation"))
+                      _("Find the node describing program invocation"))
 {
   const char *invocation_prompt = _("Find Invocation node of [%s]: ");
   char *program_name, *line;
@@ -2949,11 +2963,11 @@
   /* Intuit the name of the program they are likely to want.
      We use the file name of the current Info file as a hint.  */
   file_name = window->node->parent ? window->node->parent
-                                  : window->node->filename;
+                                   : window->node->filename;
   default_program_name = program_name_from_file_name (file_name);
 
   prompt = (char *)xmalloc (strlen (default_program_name) +
-                           strlen (invocation_prompt));
+                            strlen (invocation_prompt));
   sprintf (prompt, invocation_prompt, default_program_name);
   line = info_read_in_echo_area (window, prompt);
   free (prompt);
@@ -3084,7 +3098,7 @@
   /* If there is a nodename, find it in our window list. */
   for (iw = 0; (info_win = info_windows[iw]); iw++)
     if (strcmp (nodename, info_win->nodes[info_win->current]->nodename) == 0
-       && info_win->window == window)
+        && info_win->window == window)
       break;
 
   if (!info_win)
@@ -3543,7 +3557,9 @@
   if (isearch_is_active)
     binding.flags |= S_SkipDest;
 
-  offset = search (string, &binding);
+  offset = (use_regex ? 
+            regexp_search (string, &binding, node->nodelen):
+            search (string, &binding));
 
   if (offset != -1 && window)
     {
@@ -3747,7 +3763,7 @@
 }
 
 DECLARE_INFO_COMMAND (info_search_backward,
-                     _("Read a string and search backward for it"))
+                      _("Read a string and search backward for it"))
 {
   last_search_direction = count > 0 ? -1 : 1;
   last_search_case_sensitive = 0;
@@ -3771,7 +3787,7 @@
     {
       direction = 1;
       if (count == 0)
-        count = 1;     /* for backward compatibility */
+        count = 1;      /* for backward compatibility */
     }
 
   /* Read a string from the user, defaulting the search to SEARCH_STRING. */
@@ -3783,16 +3799,16 @@
 
   if (ask_for_string)
     {
-      prompt = (char *)xmalloc (strlen (_("%s%sfor string [%s]: "))
-                               + strlen (_("Search backward"))
-                               + strlen (_("Search"))
-                               + strlen (_(" case-sensitively "))
-                               + strlen (_(" "))
-                               + strlen (search_string));
-
-      sprintf (prompt, _("%s%sfor string [%s]: "),
-               direction < 0 ? _("Search backward") : _("Search"),
-               case_sensitive ? _(" case-sensitively ") : _(" "),
+      prompt = (char *)xmalloc (strlen (_("%s%s%s [%s]: "))
+                                + strlen (_("Regexp search"))
+                                + strlen (_(" case-sensitively"))
+                                + strlen (_(" backward"))
+                                + strlen (search_string));
+
+      sprintf (prompt, _("%s%s%s [%s]: "),
+               use_regex ? _("Regexp search") : _("Search"),
+               case_sensitive ? _(" case-sensitively") : "",
+               direction < 0 ? _(" backward") : "",
                search_string);
 
       line = info_read_in_echo_area (window, prompt);
@@ -3849,23 +3865,23 @@
 }
 
 DECLARE_INFO_COMMAND (info_search_next,
-                     _("Repeat last search in the same direction"))
+                      _("Repeat last search in the same direction"))
 {
   if (!last_search_direction)
     info_error ((char *) _("No previous search string"), NULL, NULL);
   else
     info_search_1 (window, last_search_direction * count,
-                  key, last_search_case_sensitive, 0);
+                   key, last_search_case_sensitive, 0);
 }
 
 DECLARE_INFO_COMMAND (info_search_previous,
-                     _("Repeat last search in the reverse direction"))
+                      _("Repeat last search in the reverse direction"))
 {
   if (!last_search_direction)
     info_error ((char *) _("No previous search string"), NULL, NULL);
   else
     info_search_1 (window, -last_search_direction * count,
-                  key, last_search_case_sensitive, 0);
+                   key, last_search_case_sensitive, 0);
 }
 
 /* **************************************************************** */
@@ -4102,11 +4118,11 @@
           else if (func == (VFunction *) isearch_forward
               || func == (VFunction *) isearch_backward)
             {
-             /* If this key invokes an incremental search, then this
-                means that we will either search again in the same
-                direction, search again in the reverse direction, or
-                insert the last search string that was accepted through
-                incremental searching. */
+              /* If this key invokes an incremental search, then this
+                 means that we will either search again in the same
+                 direction, search again in the reverse direction, or
+                 insert the last search string that was accepted through
+                 incremental searching. */
               if ((func == (VFunction *) isearch_forward && dir > 0) ||
                   (func == (VFunction *) isearch_backward && dir < 0))
                 {
@@ -4178,17 +4194,17 @@
               last_isearch_accepted = xstrdup (isearch_string);
             }
 
-         /* If the key is the isearch_terminate_search_key, but some buffered
-            input is pending, it is almost invariably because the ESC key is
-            actually the beginning of an escape sequence, like in case they
-            pressed an arrow key.  So don't gobble the ESC key, push it back
-            into pending input.  */
-         /* FIXME: this seems like a kludge!  We need a more reliable
-            mechanism to know when ESC is a separate key and when it is
-            part of an escape sequence.  */
+          /* If the key is the isearch_terminate_search_key, but some buffered
+             input is pending, it is almost invariably because the ESC key is
+             actually the beginning of an escape sequence, like in case they
+             pressed an arrow key.  So don't gobble the ESC key, push it back
+             into pending input.  */
+          /* FIXME: this seems like a kludge!  We need a more reliable
+             mechanism to know when ESC is a separate key and when it is
+             part of an escape sequence.  */
           if (key != RET  /* Emacs addicts want RET to get lost */
-             && (key != isearch_terminate_search_key
-                 || info_any_buffered_input_p ()))
+              && (key != isearch_terminate_search_key
+                  || info_any_buffered_input_p ()))
             info_set_pending_input (key);
 
           if (func == (VFunction *) info_abort_key)
@@ -4227,12 +4243,12 @@
              we are looking at it, then don't bother calling the search
              function. */
           if (((dir < 0) &&
-              ((case_sensitive ? strncmp : mbsncasecmp)
+               ((case_sensitive ? strncmp : mbsncasecmp)
                             (window->node->contents + window->point,
                              isearch_string, isearch_string_index) == 0)) ||
               ((dir > 0) &&
                ((window->point - isearch_string_index) >= 0) &&
-              ((case_sensitive ? strncmp : mbsncasecmp)
+               ((case_sensitive ? strncmp : mbsncasecmp)
                             (window->node->contents +
                              (window->point - (isearch_string_index - 1)),
                              isearch_string, isearch_string_index) == 0)))
@@ -4242,7 +4258,7 @@
             }
           else
             search_result = info_search_internal (isearch_string,
-                                                 window, dir, case_sensitive);
+                                                  window, dir, case_sensitive);
         }
 
       /* If this search failed, and we didn't already have a failed search,
@@ -4435,22 +4451,22 @@
   if (placement == -1)
     {
       if (cursor_movement_scrolls_p)
-       return 1;
+        return 1;
       else
-       {
-         if (firstmenu != -1 && firstxref != -1)
-           {
-             if (((dir == 1) && (firstmenu < firstxref)) ||
-                 ((dir == -1) && (firstmenu > firstxref)))
-               placement = firstmenu + 1;
-             else
-               placement = firstxref;
-           }
-         else if (firstmenu != -1)
-           placement = firstmenu + 1;
-         else
-           placement = firstxref;
-       }
+        {
+          if (firstmenu != -1 && firstxref != -1)
+            {
+              if (((dir == 1) && (firstmenu < firstxref)) ||
+                  ((dir == -1) && (firstmenu > firstxref)))
+                placement = firstmenu + 1;
+              else
+                placement = firstxref;
+            }
+          else if (firstmenu != -1)
+            placement = firstmenu + 1;
+          else
+            placement = firstxref;
+        }
     }
   window->point = placement;
   window_adjust_pagetop (window);
@@ -4466,13 +4482,13 @@
   else
     {
       while (info_move_to_xref (window, count, key, -1))
-       {
-         info_error_was_printed = 0;
-         if (backward_move_node_structure (window, info_scroll_behaviour))
-           break;
-         move_to_new_line (window->line_count, window->line_count - 1,
-                           window);
-       }
+        {
+          info_error_was_printed = 0;
+          if (backward_move_node_structure (window, info_scroll_behaviour))
+            break;
+          move_to_new_line (window->line_count, window->line_count - 1,
+                            window);
+        }
     }
 }
 
@@ -4484,16 +4500,16 @@
   else
     {
       /* Note: This can cause some blinking when the next cross reference is
-        located several nodes further. This effect can be easily suppressed
-        by setting display_inhibited to 1, however this will also make
-        error messages to be dumped on stderr, instead on the echo area. */ 
+         located several nodes further. This effect can be easily suppressed
+         by setting display_inhibited to 1, however this will also make
+         error messages to be dumped on stderr, instead on the echo area. */ 
       while (info_move_to_xref (window, count, key, 1))
-       {
-         info_error_was_printed = 0;
-         if (forward_move_node_structure (window, info_scroll_behaviour))
-           break;
-         move_to_new_line (0, 0, window);
-       }
+        {
+          info_error_was_printed = 0;
+          if (forward_move_node_structure (window, info_scroll_behaviour))
+            break;
+          move_to_new_line (0, 0, window);
+        }
     }
 }
 
@@ -4620,7 +4636,7 @@
 /* Declaration only.  Special cased in info_dispatch_on_key ().
    Doc string is to avoid ugly results with describe_key etc.  */
 DECLARE_INFO_COMMAND (info_do_lowercase_version,
-                     _("Run command bound to this key's lowercase variant"))
+                      _("Run command bound to this key's lowercase variant"))
 {}
 
 static void
@@ -4761,15 +4777,15 @@
             if (func == (VFunction *) info_do_lowercase_version)
               {
 #if defined(INFOKEY)
-               unsigned char lowerkey;
+                unsigned char lowerkey;
 
-               lowerkey = Meta_p(key) ? Meta (tolower (UnMeta (key))) : 
tolower (key);
-               if (lowerkey == key)
-                 {
-                   add_char_to_keyseq (key);
-                   dispatch_error (info_keyseq);
-                   return;
-                 }
+                lowerkey = Meta_p(key) ? Meta (tolower (UnMeta (key))) : 
tolower (key);
+                if (lowerkey == key)
+                  {
+                    add_char_to_keyseq (key);
+                    dispatch_error (info_keyseq);
+                    return;
+                  }
                 info_dispatch_on_key (lowerkey, map);
 #else /* !INFOKEY */
                 info_dispatch_on_key (tolower (key), map);
@@ -5085,15 +5101,15 @@
       chars_avail = pc_term_chars_avail ();
     else
       {
-       /* We could be more accurate by calling ltell, but we have no idea
-          whether tty is buffered by stdio functions, and if so, how many
-          characters are already waiting in the buffer.  So we punt.  */
-       struct stat st;
-
-       if (fstat (tty, &st) < 0)
-         chars_avail = 1;
-       else
-         chars_avail = st.st_size;
+        /* We could be more accurate by calling ltell, but we have no idea
+           whether tty is buffered by stdio functions, and if so, how many
+           characters are already waiting in the buffer.  So we punt.  */
+        struct stat st;
+
+        if (fstat (tty, &st) < 0)
+          chars_avail = 1;
+        else
+          chars_avail = st.st_size;
       }
     if (chars_avail > space_avail)
       chars_avail = space_avail;
@@ -5142,7 +5158,7 @@
       {
         int n;
         do
-         n = read (tty, &c, 1);
+          n = read (tty, &c, 1);
         while (n == -1 && errno == EINTR);
         rawkey = n == 1 ? c : EOF;
       }
@@ -5158,7 +5174,7 @@
             {
               fclose (info_input_stream);
               info_input_stream = stdin;
-             tty = fileno (info_input_stream);
+              tty = fileno (info_input_stream);
               display_inhibited = 0;
               display_update_display (windows);
               display_cursor_at_point (active_window);
Index: info/session.h
===================================================================
RCS file: /sources/texinfo/texinfo/info/session.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- info/session.h      4 Aug 2007 11:01:02 -0000       1.7
+++ info/session.h      17 Dec 2007 19:12:11 -0000      1.8
@@ -1,5 +1,5 @@
 /* session.h -- Functions found in session.c.
-   $Id: session.h,v 1.7 2007/08/04 11:01:02 gray Exp $
+   $Id: session.h,v 1.8 2007/12/17 19:12:11 karl Exp $
 
    Copyright (C) 1993, 1998, 1999, 2001, 2002, 2004, 2007
    Free Software Foundation, Inc.
@@ -17,7 +17,7 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-   Written by Brian Fox (address@hidden). */
+   Originally written by Brian Fox (address@hidden). */
 
 #ifndef SESSION_H
 #define SESSION_H
@@ -135,6 +135,7 @@
 extern void info_scroll_backward (WINDOW *window, int count, unsigned char 
key);
 extern void info_redraw_display (WINDOW *window, int count, unsigned char key);
 extern void info_toggle_wrap (WINDOW *window, int count, unsigned char key);
+extern void info_toggle_regexp (WINDOW *window, int count, unsigned char key);
 extern void info_move_to_window_line (WINDOW *window, int count,
     unsigned char key);
 extern void info_up_line (WINDOW *window, int count, unsigned char key);
P ChangeLog
P NEWS
P doc/info-stnd.texi
P doc/info.texi
P info/infomap.c
P info/search.c
P info/search.h
P info/session.c
P info/session.h




reply via email to

[Prev in Thread] Current Thread [Next in Thread]