This is info-stnd.info, produced by texi2any version 6.1 from
info-stnd.texi.

This manual is for Stand-alone GNU Info (version 6.1, 6 February 2016),
a program for viewing documents in Info format (usually created from
Texinfo source files).

   Copyright (C) 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
2016 Free Software Foundation, Inc.

     Permission is granted to copy, distribute and/or modify this
     document under the terms of the GNU Free Documentation License,
     Version 1.3 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 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 the freedom to copy and
     modify this GNU manual.  Buying copies from the FSF supports it 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
separately from the collection, you can do so by adding a copy of the
license to the document, as described in section 6 of the license.
INFO-DIR-SECTION Texinfo documentation system
START-INFO-DIR-ENTRY
* info stand-alone: (info-stnd).           Read Info documents without Emacs.
END-INFO-DIR-ENTRY


File: info-stnd.info,  Node: Top,  Next: Stand-alone Info,  Up: (dir)

Stand-alone GNU Info
********************

This documentation describes the stand-alone Info reader which you can
use to read Info documentation.

   If you are new to the Info reader, then you can get started by typing
'H' for a list of basic key bindings.  You can read through the rest of
this manual by typing <SPC> and <DEL> (or <Space> and <Backspace>) to
move forwards and backwards in it.

* Menu:

* Stand-alone Info::            What is Info?
* Invoking Info::               Options you can pass on the command line.
* Cursor Commands::             Commands which move the cursor within a node.
* Scrolling Commands::          Commands for reading the text within a node.
* Node Commands::               Commands for selecting a new node.
* Searching Commands::          Commands for searching an Info file.
* Index Commands::              Commands for looking up in indices.
* Xref Commands::               Commands for selecting cross-references.
* Window Commands::             Commands which manipulate multiple windows.
* Printing Nodes::              How to print out the contents of a node.
* Miscellaneous Commands::      A few commands that defy categorization.
* Variables::                   How to change the default behavior of Info.
* Colors and Styles::           Customize the colors used by Info.
* Custom Key Bindings::         How to define your own key-to-command bindings.
* Index::                       Global index.


File: info-stnd.info,  Node: Stand-alone Info,  Next: Invoking Info,  Prev: Top,  Up: Top

1 Stand-alone Info
******************

The "Info" program described here is a stand-alone program, part of the
Texinfo distribution, which is used to view Info files on a text
terminal.  "Info files" are typically the result of processing Texinfo
files with the program 'makeinfo' (also in the Texinfo distribution).

   Texinfo itself (*note (texinfo)Top::) is a documentation system that
uses a single source file to produce both on-line information and
printed output.  You can typeset and print the files that you read in
Info.

   GNU Emacs also provides an Info reader (just type 'M-x info' in
Emacs).  Emacs Info and stand-alone Info have nearly identical user
interfaces, although customization and other details are different (this
manual explains the stand-alone Info reader).  The Emacs Info reader
supports the X Window System and other such bitmapped interfaces, not
just plain ASCII, so if you want a prettier display for Info files, you
should try it.  You can use Emacs Info without using Emacs for anything
else.  (Type 'C-x C-c' to exit; this also works in the stand-alone Info
reader.)  *Note (info)Top:: for a tutorial and more background
information about the Info system, as well as information about the Info
reader that is part of GNU Emacs,

   Please report bugs in this stand-alone Info program to
<bug-texinfo@gnu.org>.  Bugs in the Emacs Info reader should be sent to
<bug-gnu-emacs@gnu.org>.


File: info-stnd.info,  Node: Invoking Info,  Next: Cursor Commands,  Prev: Stand-alone Info,  Up: Top

2 Invoking Info
***************

GNU Info accepts several options to control the initial node or nodes
being viewed, and to specify which directories to search for Info files.
Here is a template showing an invocation of GNU Info from the shell:

     info [OPTION...] [MANUAL] [MENU-OR-INDEX-ITEM...]

   Info will look for an entry called MANUAL in the directory files,
which are named 'dir', that it finds in its search path.  The search is
case-insensitive and considers substrings.  (If MANUAL is not given, by
default Info displays a composite directory listing, constructed by
combining the 'dir' files.)  A basic example:

     info coreutils

   This looks for an entry labelled 'coreutils', or 'Coreutils', etc.,
and if found, displays the referenced file (e.g., 'coreutils.info') at
the location given.  'info coreu' will find it too, if there is no
better match.

   Another example:

     info ls

   Assuming the normal 'dir' entry for 'ls', this will show the 'ls'
documentation, which happens to be within the 'coreutils' manual rather
than a separate manual.  The 'dir' entries can point to an any node
within a manual, so that users don't have to be concerned with the exact
structure used by different authors.

   If no entry is found in the directories, Info looks for files in its
search path with names based on MANUAL.  If MANUAL is not found, Info
looks for it with a number of known extensions of Info files, namely
'.info', '-info', '/index', and '.inf'.  For every known extension, if a
regular file is not found, Info looks for a compressed file.  Info
supports files compressed with 'gzip', 'xz', 'bzip2', 'lzip', 'lzma',
'compress' and 'yabba' programs, assumed to have extensions '.z', '.gz',
'.xz', '.bz2', '.lz', '.lzma', '.Z', and '.Y' respectively.(1)

   You can specify the name of a node to visit with the '--node' or '-n'
option.  Alternatively, you can specify the file and node together using
the same format that occurs in Info cross-references.  These two
examples both load the 'Files' node within the 'emacs' manual:

     info emacs -n Files
     info '(emacs)Files'

   If you want to load a file without looking in the search path,
specify MANUAL either as an absolute path, or as a path relative to the
current directory which contains at least one slash character.  (You can
also use the '--file' option for similar behavior, described below.)
Examples:

     info /usr/local/share/info/bash.info
     info ./document.info

Info looks for MANUAL only in the explicitly specified directory, and
adds that directory to its search path.

   Info treats any remaining arguments as the names of menu items, or
(see below) index entries.  The first argument is a menu item in the
'Top' node of the file loaded, the second argument is a menu item in the
first argument's node, etc.  You can move to the node of your choice by
specifying the menu names which describe the path to that node.  For
example,

     info emacs buffers
     info texinfo Overview 'Using Texinfo'

The first example selects the menu item 'Buffers' in the node
'(emacs)Top'.  The second example loads the 'texinfo' file and looks in
its top-level menu for a 'Overview' item, looks in the menu of the node
referenced, and finally displays the node referenced by the 'Using
Texinfo' item.

   If there was only one MENU-OR-INDEX-ITEM argument and it wasn't found
as a menu item, Info looks for it as an index entry.  For example:

     info libc printf

This loads the libc Info manual and first looks for 'printf' in the
top-level menu as usual; since it isn't there (at this writing), it then
looks in the indices.  If it's found there (which it is), the relevant
node at the given location is displayed.

   A complete list of options follows.

'--all'
'-a'
     Find all files matching MANUAL.  Three usage patterns are
     supported, as follows.

     First, if '--all' is used together with '--where', 'info' prints
     the names of all matching files found on standard output (including
     '*manpages*' if relevant) and exits.

     Second, if '--all' is used together with '--output', the contents
     of all matched files are dumped to the specified output file.

     Otherwise, an interactive session is initiated.  If more than one
     file matches, a menu node is displayed listing the matches and
     allowing you to select one.  This menu node can be brought back at
     any time by pressing 'C-x f'.  If there is only one match, 'info'
     starts as usual.

     The '--index-search' and '--node' options cannot be used together
     with this option.

'--apropos=STRING'
'-k STRING'
     Specify a string to search in every index of every Info file
     installed on your system.  Info looks up the named STRING in all
     the indices it can find, prints the results to standard output, and
     then exits.  If you are not sure which Info file explains certain
     issues, this option is your friend.  (If your system has a lot of
     Info files installed, searching all of them might take some time!)

     You can invoke the apropos command from inside Info; see *note
     Searching Commands::.

'--debug=NUMBER'
'-x NUMBER'
     Print additional debugging information.  The argument specifies the
     verbosity level, so a higher level includes all the information
     from lower levels.  For all available debugging output, use
     '-x -1'.  Info version 6.1 has these levels:

     '1'
          Print information about file handling, such as looking for
          'dir' files and nodes written with '--output'.

     '2'
          Print operations relating to 'INFOPATH'.

     '3'
          Print information about node searching.

     Before Info's full-screen output is initialized, debugging output
     goes to standard error.  After it is initialized, the debugging
     output is written to the file 'infodebug' in the current working
     directory.

'--directory DIRECTORY-PATH'
'-d DIRECTORY-PATH'
     Add DIRECTORY-PATH to the list of directory paths searched when
     Info needs to find a file.  You may issue '--directory' multiple
     times; once for each directory which contains Info files, or with a
     list of such directories separated by a colon (or semicolon on
     MS-DOS/MS-Windows).

     Directories specified in the environment variable 'INFOPATH' are
     added to the directories specified with '--directory', if any.  The
     value of 'INFOPATH' is a list of directories usually separated by a
     colon; on MS-DOS/MS-Windows systems, the semicolon is used.  If the
     value of 'INFOPATH' ends with a colon (or semicolon on
     MS-DOS/MS-Windows), the initial list of directories is constructed
     by appending the build-time default to the value of 'INFOPATH'.

     If you do not define 'INFOPATH', Info uses a default path defined
     when Info was built as the initial list of directories.

     Regardless of whether 'INFOPATH' is defined, the default
     documentation directory defined when Info was built is added to the
     search path.  If you do not want this directory to be included, set
     the 'infopath-no-defaults' variable to 'On' (*note
     infopath-no-defaults::).

     If the list of directories contains the element 'PATH', that
     element is replaced by a list of directories derived from the value
     of the environment variable 'PATH'.  Each path element of the form
     DIR/BASE is replaced by DIR'/share/info' or DIR'/info', provided
     that directory exists.

'--dribble=FILE'
     Specify a file where all user keystrokes will be recorded.  This
     file can be used later to replay the same sequence of commands, see
     the '--restore' option below.

'--file MANUAL'
'-f MANUAL'
     Specify a particular manual to visit without looking its name up in
     any 'dir' files.

     With this option, it starts by trying to visit '(MANUAL)Top', i.e.,
     the 'Top' node in (typically) 'MANUAL.info'.  As above, it tries
     various file extensions to find the file.  If no such file (or
     node) can be found, Info exits without doing anything.  As with the
     'dir' lookup described above, any extra MENU-ITEM arguments are
     used to locate a node within the loaded file.

     If MANUAL is an absolute file name, or begins with './' or '../',
     or contains an intermediate directory, Info will only look for the
     file in the directory specified, and add this directory to
     'INFOPATH'.  (This is the same as what happens when '--file' is not
     given.)

'--help'
'-h'
     Output a brief description of the available Info command-line
     options.

'--index-search STRING'
     After processing all command-line arguments, go to the index in the
     selected Info file and search for index entries which match STRING.
     If such an entry is found, the Info session begins with displaying
     the node pointed to by the first matching index entry; press ',' to
     step through the rest of the matching entries.  If no such entry
     exists, print 'no entries found' and exit with nonzero status.
     This can be used from another program as a way to provide online
     help, or as a quick way of starting to read an Info file at a
     certain node when you don't know the exact name of that node.

     This command can also be invoked from inside Info; *note Searching
     Commands::.

'--init-file INIT-FILE'
     Read key bindings and variable settings from INIT-FILE instead of
     the '.infokey' file in your home directory.  *Note Custom Key
     Bindings::.

'--node NODENAME'
'-n NODENAME'
     Specify a particular node to visit in the initial file that Info
     loads.  You may specify '--node' multiple times: for an interactive
     Info, each NODENAME is visited in its own window; for a
     non-interactive Info (such as when '--output' is given) each
     NODENAME is processed sequentially.

     You can specify both the file and node to the '--node' option using
     the usual Info syntax, but don't forget to escape the open and
     close parentheses and whitespace from the shell; for example:
     info --node "(emacs)Buffers"

'--output FILE'
'-o FILE'
     Direct output to FILE.  Each node that Info visits will be output
     to FILE instead of interactively viewed.  A value of '-' for FILE
     means standard output.

'--no-raw-escapes'
'--raw-escapes, -R'
     By default, Info passes SGR terminal control sequences (also known
     as ANSI escape sequences) found in documents directly through to
     the terminal.  If you use the '--no-raw-escapes' options, these
     sequences are displayed as other control characters are; for
     example, an 'ESC' byte is displayed as '^['.  The '--raw-escapes'
     and '-R' options do not do anything, but are included for
     completeness.

     Some versions of Groff (*note (groff)Top::) produce man pages with
     ANSI escape sequences for bold, italics, and underlined characters,
     and for colorized text.  If your 'man' command uses a version of
     Groff that does this (original GNU Groff does), and your terminal
     supports these sequences, Info will display any bold or underlined
     text in man pages.  Some distributions have modified Groff to
     require setting the 'GROFF_SGR' environment variable to get these
     sequences.  *Note (groff)Invoking grotty::.

'--restore=DRIBBLE-FILE'
     Read keystrokes from DRIBBLE-FILE, presumably recorded during
     previous Info session (see the description of the '--dribble'
     option above).  When the keystrokes in the files are all read, Info
     reverts its input to the usual interactive operation.

'--show-malformed-multibytes'
'--no-show-malformed-multibytes'
     Show malformed multibyte sequences in the output.  By default, such
     sequences are dropped.

'--show-options'
'--usage'
'-O'
     Tell Info to look for the node that describes how to invoke the
     program and its command-line options, and begin the session by
     displaying that node.  It is provided to make it easier to find the
     most important usage information in a manual without navigating
     through menu hierarchies.  The effect is similar to the 'M-x
     goto-invocation' command (*note goto-invocation::) from inside
     Info.

'--speech-friendly'
'-b'
     On MS-DOS/MS-Windows only, this option causes Info to use standard
     file I/O functions for screen writes.  (By default, Info uses
     direct writes to the video memory on these systems, for faster
     operation and colored display support.)  This allows the speech
     synthesizers used by blind persons to catch the output and convert
     it to audible speech.

'--strict-node-location'
     This option causes Info not to search "nearby" to locate nodes, and
     instead strictly use the information provided in the Info file.
     The practical use for this option is for debugging programs that
     write Info files, to check that they are outputting the correct
     locations.  Due to bugs and malfeasances in the various Info
     writing programs over the years and versions, it is not advisable
     to ever use this option when just trying to read documentation.

'--subnodes'
     This option only has meaning when given in conjunction with
     '--output'.  It means to recursively output the nodes appearing in
     the menus of each node being output.  Menu items which resolve to
     external Info files are not output, and neither are menu items
     which are members of an index.  Each node is only output once.

'-v NAME=VALUE'
'--variable=NAME=VALUE'
     Set the 'info' variable NAME to VALUE.  *Note Variables::.

'--version'
     Prints the version information of Info and exits.

'--vi-keys'
     This option binds functions to keys differently, to emulate the key
     bindings of 'vi' and Less.  The default key bindings are generally
     modeled after Emacs.  (*Note Custom Key Bindings:: for a more
     general way of altering GNU Info's key bindings.)

'--where'
'--location'
'-w'
     Show the filename that would be read and exit, instead of actually
     reading it and starting Info.

   Finally, Info defines many default key bindings and variables.  *Note
Custom Key Bindings:: for information on how to customize these
settings.

   ---------- Footnotes ----------

   (1) On MS-DOS, Info allows for the Info extension, such as '.inf',
and the short compressed file extensions, such as '.z' and '.gz', to be
merged into a single extension, since DOS doesn't allow more than a
single dot in the basename of a file.  Thus, on MS-DOS, if Info looks
for 'bison', file names like 'bison.igz' and 'bison.inz' will be found
and decompressed by 'gunzip'.


File: info-stnd.info,  Node: Cursor Commands,  Next: Scrolling Commands,  Prev: Invoking Info,  Up: Top

3 Moving the Cursor
*******************

GNU Info has several commands which allow you to move the cursor about
the screen.  The notation used in this manual to describe keystrokes is
the same as the notation used within the Emacs manual, and the GNU
Readline manual.  *Note (emacs)User Input:: if you are unfamiliar with
the notation.  (1)

   The following table lists the basic cursor movement commands in Info.
Each entry consists of the key sequence you should type to execute the
cursor movement, the 'M-x'(2) command name (displayed in parentheses),
and a short description of what the command does.  All of the cursor
motion commands can take a "numeric" argument (see *note
'universal-argument': Miscellaneous Commands. to find out how to supply
them).  With a numeric argument, the motion commands are simply executed
that many times; for example, a numeric argument of 4 given to
'next-line' causes the cursor to move down 4 lines.  With a negative
numeric argument, the motion is reversed; an argument of -4 given to the
'next-line' command would cause the cursor to move _up_ 4 lines.

'C-n' ('next-line')
<DOWN> (an arrow key)
     Move the cursor down to the next line.

'C-p' ('prev-line')
<UP> (an arrow key)
     Move the cursor up to the previous line.

'C-a' ('beginning-of-line')
<Home> (on DOS/Windows only)
     Move the cursor to the start of the current line.

'C-e' ('end-of-line')
<End> (on DOS/Windows only)
     Move the cursor to the end of the current line.

'C-f' ('forward-char')
<RIGHT> (an arrow key)
     Move the cursor forward a character.

'C-b' ('backward-char')
<LEFT> (an arrow key)
     Move the cursor backward a character.

'M-f' ('forward-word')
'C-<RIGHT>' (on DOS/Windows only)
     Move the cursor forward a word.

'M-b' ('backward-word')
'C-<LEFT>' (on DOS/Windows only)
     Move the cursor backward a word.

'M-<' ('beginning-of-node')
'C-<Home>' (on DOS/Windows only)
'b'
'M-b', vi-like operation
     Move the cursor to the start of the current node.

'M->' ('end-of-node')
'C-<End>' (on DOS/Windows only)
'e'
     Move the cursor to the end of the current node.

'M-r' ('move-to-window-line')
     Move the cursor to a specific line of the window.  Without a
     numeric argument, 'M-r' moves the cursor to the start of the line
     in the center of the window.  With a numeric argument of N, 'M-r'
     moves the cursor to the start of the Nth line in the window.

   ---------- Footnotes ----------

   (1) Here's a short summary.  'C-X' means press the 'CTRL' key and the
key X.  'M-X' means press the 'META' key and the key X.  On many
terminals the 'META' key is known as the 'ALT' key.  'SPC' is the space
bar.  The other keys are usually called by the names imprinted on them.

   (2) 'M-x' is also a command; it invokes 'execute-extended-command',
letting you run a command by name.  *Note Executing an extended command:
(emacs)M-x, for more detailed information.


File: info-stnd.info,  Node: Scrolling Commands,  Next: Node Commands,  Prev: Cursor Commands,  Up: Top

4 Moving Text Within a Window
*****************************

Sometimes you are looking at a screenful of text, and only part of the
current paragraph you are reading is visible on the screen.  The
commands detailed in this section are used to shift which part of the
current node is visible on the screen.

   Scrolling commands are bound differently when '--vi-keys' operation
is in effect (*note --vi-keys::).  These key bindings are designated
with "vi-like operation".  *Note Custom Key Bindings:: for information
on arbitrarily customizing key bindings and variable settings.

<SPC> ('scroll-forward')
<NEXT>
     Shift the text in this window up.  That is, show more of the node
     which is currently below the bottom of the window.  With a numeric
     argument, show that many more lines at the bottom of the window; a
     numeric argument of 4 would shift all of the text in the window up
     4 lines (discarding the top 4 lines), and show you four new lines
     at the bottom of the window.  Without a numeric argument, <SPC>
     takes the bottom two lines of the window and places them at the top
     of the window, redisplaying almost a completely new screenful of
     lines.  If you are at the end of a node, <SPC> takes you to the
     "next" node, so that you can read an entire manual from start to
     finish by repeating <SPC>.

     The default scroll size is one screenful, but it can be changed by
     invoking the ('scroll-forward-page-only-set-window') command, 'z'
     under '--vi-keys', with a numeric argument.

     The <NEXT> key is known as the <PageDown> key on some keyboards.

'C-v' ('scroll-forward-page-only')
'C-f', vi-like operation
'f', vi-like operation
'M-SPC', vi-like operation
     Shift the text in this window up.  This is identical to the <SPC>
     operation above, except that it never scrolls beyond the end of the
     current node.

'z' ('scroll-forward-page-only-set-window', vi-like operation)
     Scroll forward, like with 'C-v', but if a numeric argument is
     specified, it becomes the default scroll size for subsequent
     'scroll-forward' and 'scroll-backward' commands and their ilk.

<DEL> ('scroll-backward')
<PREVIOUS>
     Shift the text in this window down.  The inverse of
     'scroll-forward'.  If you are at the start of a node, <DEL> takes
     you to the "previous" node, so that you can read an entire manual
     from finish to start by repeating <DEL>.  The default scroll size
     can be changed by invoking the
     ('scroll-backward-page-only-set-window') command, 'w' under
     '--vi-keys', with a numeric argument.

     If your keyboard lacks the <DEL> key, look for a key called <BS>,
     or 'Backspace', sometimes designated with an arrow which points to
     the left, which should perform the same function.

     The <PREVIOUS> key is the <PageUp> key on many keyboards.  Emacs
     refers to it by the name <PRIOR>.

'M-v' ('scroll-backward-page-only')
'b', vi-like operation
'C-b', vi-like operation
     Shift the text in this window down.  The inverse of
     'scroll-forward-page-only'.  Does not scroll beyond the start of
     the current node.  The default scroll size can be changed by
     invoking the 'scroll-backward-page-only-set-window' command, 'w'
     under '--vi-keys', with a numeric argument.

'w' ('scroll-backward-page-only-set-window', vi-like operation)
     Scroll backward, like with 'M-v', but if a numeric argument is
     specified, it becomes the default scroll size for subsequent
     'scroll-forward' and 'scroll-backward' commands.

'C-n' ('down-line', vi-like operation)
'C-e', vi-like operation
<RET>, vi-like operation
<LFD>, vi-like operation
<DOWN>, vi-like operation
     Scroll forward by one line.  With a numeric argument, scroll
     forward that many lines.

'C-p' ('up-line', vi-like operation)
<UP>, vi-like operation
'y', vi-like operation
'k', vi-like operation
'C-k', vi-like operation
'C-y', vi-like operation
     Scroll backward one line.  With a numeric argument, scroll backward
     that many lines.

'd' ('scroll-half-screen-down', vi-like operation)
'C-d', vi-like operation
     Scroll forward by half of the screen size.  With a numeric
     argument, scroll that many lines.  If an argument is specified, it
     becomes the new default number of lines to scroll for subsequent
     'd' and 'u' commands.

'u' ('scroll-half-screen-up', vi-like operation)
'C-u', vi-like operation
     Scroll back by half of the screen size.  With a numeric argument,
     scroll that many lines.  If an argument is specified, it becomes
     the new default number of lines to scroll for subsequent 'u' and
     'd' commands.

   The 'scroll-forward' and 'scroll-backward' commands can also move
forward and backward through the node structure of the file.  If you
press <SPC> while viewing the end of a node, or <DEL> while viewing the
beginning of a node, what happens is controlled by the variable
'scroll-behavior' (*note scroll-behavior::).

   The 'scroll-forward-page-only' and 'scroll-backward-page-only'
commands never scroll beyond the current node.

'C-l' ('redraw-display')
     Redraw the display from scratch, or shift the line containing the
     cursor to a specified location.  With no numeric argument, 'C-l'
     clears the screen, and then redraws its entire contents.  Given a
     numeric argument of N, the line containing the cursor is shifted so
     that it is on the Nth line of the window.

'C-x w' ('toggle-wrap')
     Toggles the state of line wrapping in the current window.
     Normally, lines which are longer than the screen width "wrap",
     i.e., they are continued on the next line.  Lines which wrap have a
     '\' appearing in the rightmost column of the screen.  You can cause
     such lines to be terminated at the rightmost column by changing the
     state of line wrapping in the window with 'C-x w'.  When a line
     which needs more space than one screen width to display is
     displayed, a '$' appears in the rightmost column of the screen, and
     the remainder of the line is invisible.  When long lines are
     truncated, the mode line displays the '$' character near its left
     edge.


File: info-stnd.info,  Node: Node Commands,  Next: Searching Commands,  Prev: Scrolling Commands,  Up: Top

5 Selecting a Node
******************

This section details the numerous Info commands which select a new node
to view in the current window.

   The most basic node commands are 'n', 'p', 'u', and 'l'.  Note that
the commands to select nodes are mapped differently when '--vi-keys' is
in effect; these keybindings are designated below as "vi-like
operation".

   When you are viewing a node, the top line of the node contains some
Info "pointers" which describe where the next, previous, and up nodes
are.  Info uses this line to move about the node structure of the file
when you use the following commands:

'n' ('next-node')
'C-<NEXT>' (on DOS/Windows only)
'C-x n', vi-like operation
     Select the 'Next' node.

     The <NEXT> key is known as the <PgDn> key on some keyboards.

'p' ('prev-node')
'C-<PREVIOUS>' (on DOS/Windows only)
     Select the 'Prev' node.

     The <PREVIOUS> key is known as the <PgUp> key on some keyboards.

'u' ('up-node')
'C-<UP>' (an arrow key on DOS/Windows only)
'C-x u', vi-like operation
     Select the 'Up' node.

   You can easily select a node that you have already viewed in this
window by using the 'l' command--this name stands for "last", and
actually moves backwards through the history of visited nodes for this
window.  This is handy when you followed a reference to another node,
possibly to read about a related issue, and would like then to resume
reading at the same place where you started the excursion.

   Each node where you press 'l' is discarded from the history.  Thus,
by the time you get to the first node you visited in a window, the
entire history of that window is discarded.

'l' ('history-node')
'C-<CENTER>' (on DOS/Windows only)
''', vi-like operation
     Pop the most recently selected node in this window from the node
     history.

   Two additional commands make it easy to select the most commonly
selected nodes; they are 't' and 'd'.

't' ('top-node')
'M-t', vi-like operation
     Select the node 'Top' in the current Info file.

'd' ('dir-node')
'M-d', vi-like operation
     Select the directory node (i.e., the node '(dir)').

   Here are some other commands which immediately result in the
selection of a different node in the current window:

'<' ('first-node')
'g', vi-like operation
     Selects the first node which appears in this file.  This node is
     most often 'Top', but it does not have to be.  With a numeric
     argument N, select the Nth node (the first node is node 1).  An
     argument of zero is the same as the argument of 1.

'>' ('last-node')
'G', vi-like operation
     Select the last node which appears in this file.  With a numeric
     argument N, select the Nth node (the first node is node 1).  An
     argument of zero is the same as no argument, i.e., it selects the
     last node.

']' ('global-next-node')
     Move forward or down through node structure.  If the node that you
     are currently viewing has a 'Next' pointer, that node is selected.
     Otherwise, if this node has a menu, the first menu item is
     selected.  If there is no 'Next' and no menu, the same process is
     tried with the 'Up' node of this node.

'[' ('global-prev-node')
     Move backward or up through node structure.  If the node that you
     are currently viewing has a 'Prev' pointer, that node is selected.
     Otherwise, if the node has an 'Up' pointer, that node is selected,
     and if it has a menu, the last item in the menu is selected.

   You can get the same behavior as 'global-next-node' and
'global-prev-node' while simply scrolling through the file with <SPC>
and <DEL> (*note scroll-behavior::).

'g' ('goto-node')
'C-x g', vi-like operation
     Read the name of a node and select it.  While reading the node
     name, completion (*note completion: The Echo Area.) is only done
     for the nodes which reside in one of the Info files that were
     loaded in the current Info session; if the desired node resides in
     some other file, you must type the node exactly as it appears in
     that Info file, and you must include the Info file of the other
     file.  For example,

          g(emacs)Buffers

     finds the node 'Buffers' in the Info file 'emacs'.

'O' ('goto-invocation')
'I', vi-like operation
     Read the name of a program and look for a node in the current Info
     file which describes the invocation and the command-line options
     for that program.  The default program name is derived from the
     name of the current Info file.  This command does the same as the
     '--show-options' command-line option (*note --show-options::), but
     it also allows to specify the program name; this is important for
     those manuals which describe several programs.

     If you need to find the Invocation node of a program that is
     documented in another Info file, you need to visit that file before
     invoking 'I'.  For example, if you are reading the Emacs manual and
     want to see the command-line options of the 'makeinfo' program,
     type 'g (texinfo) <RET>' and then 'I makeinfo <RET>'.  If you don't
     know what Info file documents the command, or if invoking 'I'
     doesn't display the right node, go to the '(dir)' node (using the
     'd' command) and invoke 'I' from there.

'G' ('menu-sequence')
     Read a sequence of menu entries and follow it.  Info prompts for a
     sequence of menu items separated by commas.  (Since commas are not
     allowed in a node name, they are a natural choice for a delimiter
     in a list of menu items.)  Info then looks up the first item in the
     menu of the node '(dir)' (if the '(dir)' node cannot be found, Info
     uses 'Top').  If such an entry is found, Info goes to the node it
     points to and looks up the second item in the menu of that node,
     etc.  In other words, you can specify a complete path which
     descends through the menu hierarchy of a particular Info file
     starting at the '(dir)' node.  This has the same effect as if you
     typed the menu item sequence on Info's command line, see *note Info
     command-line arguments processing: command-line menu items.  For
     example,

           G Texinfo,Overview,Reporting Bugs <RET>

     displays the node 'Reporting Bugs' in the Texinfo manual.  (You
     don't actually need to type the menu items in their full length, or
     in their exact letter-case.  However, if you do type the menu items
     exactly, Info will find it faster.)

     If any of the menu items you type are not found, Info stops at the
     last entry it did find and reports an error.

'C-x C-f' ('view-file')
     Read the name of a file and selects the entire file.  The command
          C-x C-f FILENAME
     is equivalent to typing
          g(FILENAME)*

'C-x C-b' ('list-visited-nodes')
     Make a window containing a menu of all of the currently visited
     nodes.  This window becomes the selected window, and you may use
     the standard Info commands within it.

'C-x b' ('select-visited-node')
     Select a node which has been previously visited in a visible
     window.  This is similar to 'C-x C-b' followed by 'm', but no
     window is created.

'M-x man'
     Read the name of a man page to load and display.  This uses the
     'man' command on your system to retrieve the contents of the
     requested man page.  See also *note --raw-escapes::.


File: info-stnd.info,  Node: Searching Commands,  Next: Index Commands,  Prev: Node Commands,  Up: Top

6 Searching an Info File
************************

GNU Info allows you to search for a sequence of characters throughout an
entire Info file.  Here are the commands to do this:

's' ('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 N, search for Nth occurrence of the string.
     Negative arguments search backwards.

'?' ('search-backward')
     Read a string in the echo area and search backward through the Info
     file for that 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 N, search
     for Nth occurrence of the string.  Negative arguments search
     forward.

'C-x n' ('search-next')
'}'
'n', vi-like operation
     Search forwards for the string used for the last search command.
     Case sensitivity and use of regular expressions are kept the same.
     With a numeric argument of N, search for Nth next occurrence.

     By default, the search starts at the position immediately following
     the cursor.  However, if the variable 'search-skip-screen' (*note
     'search-skip-screen': Variables.) is set, it starts at the
     beginning of the next page, thereby skipping all visibly displayed
     lines.

'C-x N' ('search-previous')
'{'
'N', vi-like operation
     Just like 'search-next', but in reverse.  You can use 'search-next'
     and 'search-previous' together to move forward and backward through
     matches.  'search-previous' usually goes to the place in the file
     that was displayed before an immediately preceding 'search-next',
     and vice versa.(1)

'R' ('toggle-regexp')
     Toggle between using regular expressions and literal strings for
     searching.  Info uses so-called 'extended' regular expression
     syntax (*note (grep)Regular Expressions::).

'S' ('search-case-sensitively'
     Read a string in the echo area and search for it case-sensitively,
     even if the string includes only lower-case letters.  With a
     numeric argument of N, search for Nth occurrence of the string.
     Negative arguments search backwards.

'C-s' ('isearch-forward')
     Interactively search forward through the Info file for a string as
     you type it.  If the string includes upper-case characters, the
     search is case-sensitive; otherwise Info ignores the letter case.

'C-r' ('isearch-backward')
     Interactively search backward through the Info file for a string as
     you type it.  If the string includes upper-case characters, the
     search is case-sensitive; otherwise Info ignores the letter case.

'M-/' ('tree-search')
     Recursively search this node and any subnodes listed in menus for a
     string.

'M-}' ('tree-search-next')
'M-{' ('tree-search-previous')
     Go forwards and backwards through the matches for an active tree
     search.

   The most basic searching command is 's' or '/' ('search').  The 's'
command prompts you for a string in the echo area, and then searches the
remainder of the Info file for an occurrence of that string.  If the
string is found, the node containing it is selected, and the cursor is
left positioned at the start of the found string.  Subsequent 's'
commands show you the default search string; pressing <RET> instead of
typing a new string will use the default search string.

   "Incremental searching" is similar to basic searching, but the string
is looked up while you are typing it, instead of waiting until the
entire search string has been specified.

   The tree search can be used from the 'dir' node to search through all
Info files installed on the system.  It can also be used to search
through a particular chapter of a manual when you are not interested in
matches in other chapters.

   If the 'highlight-searches' variable is set, matches from search
commands will be highlighted.  *Note 'highlight-searches': Variables.
Use the 'M-x clear-search' command to clear any search highlights.

   Both incremental and non-incremental search by default ignore the
case of letters when comparing the Info file text with the search
string.  However, an uppercase letter in the search string makes the
search case-sensitive.  You can force a case-sensitive non-incremental
search, even for a string that includes only lower-case letters, by
using the 'S' command ('search-case-sensitively').  The 'n' and 'N'
commands operate case-sensitively if the last search command was 'S'.

   Normally, the search pattern should not be shorter than some
predefined limit.  By default, this limit is set to 1 character.  *Note
min-search-length:: for more information on this.

   ---------- Footnotes ----------

   (1) This sometimes doesn't happen when 'search-skip-screen' is 'On',
and the search goes across nodes.


File: info-stnd.info,  Node: Index Commands,  Next: Xref Commands,  Prev: Searching Commands,  Up: Top

7 Index Commands
****************

GNU Info has commands to search through the indices of an Info file,
which helps you find areas within an Info file which discuss a
particular topic.

'i' ('index-search')
     Look up a string in the indices for this Info file, and select a
     node to which the found index entry points.

'I' ('virtual-index')
     Look up a string in the indices for this Info file, and show all
     the matches in a new virtual node, synthesized on the fly.

',' ('next-index-match')
     Move to the node containing the next matching index item from the
     last 'i' command.

'M-x index-apropos'
     Grovel the indices of all the known Info files on your system for a
     string, and build a menu of the possible matches.

   The most efficient means of finding something quickly in a manual is
the 'i' command ('index-search').  This command prompts for a string,
and then looks for that string in all the indices of the current Info
manual.  If it finds a matching index entry, it displays the node to
which that entry refers and prints the full text of the entry in the
echo area.  You can press ',' ('next-index-match') to find more matches.
A good Info manual has all of its important concepts indexed, so the 'i'
command lets you use a manual as a reference.

   If you don't know what manual documents something, try the 'M-x
index-apropos' command.  It prompts for a string and then looks up that
string in all the indices of all the Info documents installed on your
system.  It can also be invoked from the command line; see *note
--apropos::.


File: info-stnd.info,  Node: Xref Commands,  Next: Window Commands,  Prev: Index Commands,  Up: Top

8 Selecting Cross References
****************************

We have already discussed the 'Next', 'Prev', and 'Up' pointers which
appear at the top of a node.  In addition to these pointers, a node may
contain other pointers which refer you to a different node, perhaps in
another Info file.  Such pointers are called "cross references", or
"xrefs" for short.

* Menu:

* Parts of an Xref::            What a cross reference is made of.
* Selecting Xrefs::             Commands for selecting menu or note items.


File: info-stnd.info,  Node: Parts of an Xref,  Next: Selecting Xrefs,  Up: Xref Commands

8.1 Parts of an Xref
====================

Cross references have two major parts: the first part is called the
"label"; it is the name that you can use to refer to the cross
reference, and the second is the "target"; it is the full name of the
node that the cross reference points to.

   The target is separated from the label by a colon ':'; first the
label appears, and then the target.  For example, in the sample menu
cross reference below, the single colon separates the label from the
target.

     * Foo Label: Foo Target.        More information about Foo.

   Note the '.' which ends the name of the target.  The '.' is not part
of the target; it serves only to let Info know where the target name
ends.

   A shorthand way of specifying references allows two adjacent colons
to stand for a target name which is the same as the label name:

     * Foo Commands::                Commands pertaining to Foo.

   In the above example, the name of the target is the same as the name
of the label, in this case 'Foo Commands'.

   You will normally see two types of cross reference while viewing
nodes: "menu" references, and "note" references.  Menu references appear
within a node's menu; they begin with a '*' at the beginning of a line,
and continue with a label, a target, and a comment which describes what
the contents of the node pointed to contains.

   Note references appear within the body of the node text; they begin
with '*Note', and continue with a label and a target.

   Like 'Next', 'Prev', and 'Up' pointers, cross references can point to
any valid node.  They are used to refer you to a place where more
detailed information can be found on a particular subject.  Here is a
cross reference which points to a node within the Texinfo documentation:
*Note Writing an Xref: (texinfo)xref, for more information on creating
your own texinfo cross references.


File: info-stnd.info,  Node: Selecting Xrefs,  Prev: Parts of an Xref,  Up: Xref Commands

8.2 Selecting Xrefs
===================

The following table lists the Info commands which operate on menu items.

'1' ('menu-digit')
'2' ... '9'
'M-1', vi-like operation
'M-2' ... 'M-9', vi-like operation
     Within an Info window, pressing a single digit, (such as '1'),
     selects that menu item, and places its node in the current window.
     For convenience, there is one exception; pressing '0' selects the
     _last_ item in the node's menu.  When '--vi-keys' is in effect,
     digits set the numeric argument, so these commands are remapped to
     their 'M-' varieties.  For example, to select the last menu item,
     press 'M-0'.

'0' ('last-menu-item')
'M-0', vi-like operation
     Select the last item in the current node's menu.

'm' ('menu-item')
     Reads the name of a menu item in the echo area and selects its
     node.  Completion is available while reading the menu label.  *Note
     completion: The Echo Area.

'M-x find-menu'
     Move the cursor to the start of this node's menu.

   This table lists the Info commands which operate on cross references.

'f' ('xref-item')
'r'
'M-f', vi-like operation
'C-x r', vi-like operation
     Reads the name of a note cross reference in the echo area and
     selects its node.  Completion is available while reading the cross
     reference label.  *Note completion: The Echo Area.

   Finally, the next few commands operate on menu or note references
alike:

<TAB> ('move-to-next-xref')
     Move the cursor to the start of the next nearest menu item or note
     reference in this node.  You can then use <RET>
     ('select-reference-this-line') to select the menu or note
     reference.

'M-TAB' ('move-to-prev-xref')
'BackTab'
'Shift-<TAB>' (on DOS/Windows only)
     Move the cursor the start of the nearest previous menu item or note
     reference in this node.

     The 'BackTab' key can be produced on some terminals with
     'Shift-<TAB>'.

<RET> ('select-reference-this-line')
'M-g', vi-like operation
     Select the menu item or note reference appearing on this line.


File: info-stnd.info,  Node: Window Commands,  Next: Printing Nodes,  Prev: Xref Commands,  Up: Top

9 Manipulating Multiple Windows
*******************************

A "window" is a place to show the text of a node.  Windows have a view
area where the text of the node is displayed, and an associated "mode
line", which briefly describes the node being viewed.

   GNU Info supports multiple windows appearing in a single screen; each
window is separated from the next by its mode line.  At any time, there
is only one "active" window, that is, the window in which the cursor
appears.  There are commands available for creating windows, changing
the size of windows, selecting which window is active, and for deleting
windows.

* Menu:

* The Mode Line::               What appears in the mode line?
* Basic Windows::               Manipulating windows in Info.
* The Echo Area::               Used for displaying errors and reading input.


File: info-stnd.info,  Node: The Mode Line,  Next: Basic Windows,  Up: Window Commands

9.1 The Mode Line
=================

A "mode line" is a line of inverse video which appears at the bottom of
an Info window.  It describes the contents of the window just above it;
this information includes the name of the file and node appearing in
that window, the number of screen lines it takes to display the node,
and the percentage of text that is above the top of the window.

   Here is a sample mode line for a window containing a file named
'dir', showing the node 'Top'.

     -----Info: (dir)Top, 40 lines --Top-------------------------------------
                 ^^   ^   ^^^        ^^
               (file)Node #lines    where

   Truncation of long lines (as opposed to wrapping them to the next
display line, *note toggle-wrap: Scrolling Commands.) is indicated by a
'$' at the left edge of the mode line:

     --$--Info: (texinfo)Top, 480 lines --Top--------------------------------

   When Info makes a node internally, such that there is no
corresponding info file on disk, the name of the node is surrounded by
asterisks ('*').  The name itself tells you what the contents of the
window are; the sample mode line below shows an internally constructed
node showing possible completions:

     -----Info: *Completions*, 7 lines --All---------------------------------


File: info-stnd.info,  Node: Basic Windows,  Next: The Echo Area,  Prev: The Mode Line,  Up: Window Commands

9.2 Window Commands
===================

It can be convenient to view more than one node at a time.  To allow
this, Info can display more than one "window".  Each window has its own
mode line (*note The Mode Line::) and history of nodes viewed in that
window (*note 'history-node': Node Commands.).

'C-x o' ('next-window')
     Select the next window on the screen.  Note that the echo area can
     only be selected if it is already in use, and you have left it
     temporarily.  Normally, 'C-x o' simply moves the cursor into the
     next window on the screen, or if you are already within the last
     window, into the first window on the screen.  Given a numeric
     argument, 'C-x o' moves over that many windows.  A negative
     argument causes 'C-x o' to select the previous window on the
     screen.

'M-x prev-window'
     Select the previous window on the screen.  This is identical to
     'C-x o' with a negative argument.

'C-x 2' ('split-window')
     Split the current window into two windows, both showing the same
     node.  Each window is one half the size of the original window, and
     the cursor remains in the original window.  The variable
     'automatic-tiling' can cause all of the windows on the screen to be
     resized for you automatically (*note 'automatic-tiling':
     Variables.).

'C-x 0' ('delete-window')
     Delete the current window from the screen.  If you have made too
     many windows and your screen appears cluttered, this is the way to
     get rid of some of them.

'C-x 1' ('keep-one-window')
     Delete all of the windows excepting the current one.

'ESC C-v' ('scroll-other-window')
     Scroll the other window, in the same fashion that 'C-v' might
     scroll the current window.  Given a negative argument, scroll the
     "other" window backward.

'C-x ^' ('grow-window')
     Grow (or shrink) the current window.  Given a numeric argument,
     grow the current window that many lines; with a negative numeric
     argument, shrink the window instead.

'C-x t' ('tile-windows')
     Divide the available screen space among all of the visible windows.
     Each window is given an equal portion of the screen in which to
     display its contents.  The variable 'automatic-tiling' can cause
     'tile-windows' to be called when a window is created or deleted.
     *Note 'automatic-tiling': Variables.


File: info-stnd.info,  Node: The Echo Area,  Prev: Basic Windows,  Up: Window Commands

9.3 The Echo Area
=================

The "echo area" is a one line window which appears at the bottom of the
screen.  It is used to display informative or error messages, and to
read lines of input from you when that is necessary.  Almost all of the
commands available in the echo area are identical to their Emacs
counterparts, so please refer to that documentation for greater depth of
discussion on the concepts of editing a line of text.  The following
table briefly lists the commands that are available while input is being
read in the echo area:

'C-f' ('echo-area-forward')
<RIGHT> (an arrow key)
'M-h', vi-like operation
     Move forward a character.

'C-b' ('echo-area-backward')
<LEFT> (an arrow key)
'M-l', vi-like operation
     Move backward a character.

'C-a' ('echo-area-beg-of-line')
'M-0', vi-like operation
     Move to the start of the input line.

'C-e' ('echo-area-end-of-line')
'M-$', vi-like operation
     Move to the end of the input line.

'M-f' ('echo-area-forward-word')
'C-<RIGHT>' (DOS/Windows only)
'M-w', vi-like operation
     Move forward a word.

     On DOS/Windows, 'C-<RIGHT>' moves forward by words.

'M-b' ('echo-area-backward-word')
'C-<LEFT>' (DOS/Windows only)
     Move backward a word.

     On DOS/Windows, 'C-<LEFT>' moves backward by words.

'C-d' ('echo-area-delete')
'M-x', vi-like operation
     Delete the character under the cursor.

<DEL> ('echo-area-rubout')
     Delete the character behind the cursor.

     On some keyboards, this key is designated <BS>, for 'Backspace'.
     Those keyboards will usually bind <DEL> in the echo area to
     'echo-area-delete'.

'C-g' ('echo-area-abort')
'C-u', vi-like operation
     Cancel or quit the current operation.  If completion is being read,
     this command discards the text of the input line which does not
     match any completion.  If the input line is empty, it aborts the
     calling function.

<RET> ('echo-area-newline')
     Accept (or forces completion of) the current input line.

'C-q' ('echo-area-quoted-insert')
'C-v', vi-like operation
     Insert the next character verbatim.  This is how you can insert
     control characters into a search string, for example, or the '?'
     character when Info prompts with completion.

PRINTING CHARACTER ('echo-area-insert')
     Insert the character.  Characters that have their 8th bit set, and
     not bound to 'M-' commands, are also inserted verbatim; this is
     useful for terminals which support Latin scripts.

'M-TAB' ('echo-area-tab-insert')
'Shift-<TAB>' (on DOS/Windows only)
     Insert a TAB character.

     On DOS/Windows only, the 'Shift-<TAB>' key is an alias for
     'M-<TAB>'.  This key is sometimes called 'BackTab'.

'C-t' ('echo-area-transpose-chars')
     Transpose the characters at the cursor.

   The next group of commands deal with "killing", and "yanking" text.
(Sometimes these operations are called "cut" and "paste", respectively.)
For an in-depth discussion, see *note Killing and Deleting:
(emacs)Killing.

'M-d' ('echo-area-kill-word')
'M-X', vi-like operation
     Kill the word following the cursor.

'M-<DEL>' ('echo-area-backward-kill-word')
'M-<BS>'
     Kill the word preceding the cursor.

     On some keyboards, the 'Backspace' key is used instead of 'DEL', so
     'M-<Backspace>' has the same effect as 'M-<DEL>'.

'C-k' ('echo-area-kill-line')
     Kill the text from the cursor to the end of the line.

'C-x <DEL>' ('echo-area-backward-kill-line')
     Kill the text from the cursor to the beginning of the line.

'C-y' ('echo-area-yank')
     Yank back the contents of the last kill.

'M-y' ('echo-area-yank-pop')
     Yank back a previous kill, removing the last yanked text first.

   Sometimes when reading input in the echo area, the command that
needed input will only accept one of a list of several choices.  The
choices represent the "possible completions", and you must respond with
one of them.  Since there are a limited number of responses you can
make, Info allows you to abbreviate what you type, only typing as much
of the response as is necessary to uniquely identify it.  In addition,
you can request Info to fill in as much of the response as is possible;
this is called "completion".

   The following commands are available when completing in the echo
area:

<TAB> ('echo-area-complete')
<SPC>
     Insert as much of a completion as is possible.

'?' ('echo-area-possible-completions')
     Display a window containing a list of the possible completions of
     what you have typed so far.  For example, if the available choices
     are:

          bar
          foliate
          food
          forget

     and you have typed an 'f', followed by '?', Info will pop up a
     window showing a node called '*Completions*' which lists the
     possible completions like this:

          3 completions:
          foliate         food
          forget

     i.e., all of the choices which begin with 'f'.  Pressing <SPC> or
     <TAB> would result in 'fo' appearing in the echo area, since all of
     the choices which begin with 'f' continue with 'o'.  Now, typing
     'l' followed by 'TAB' results in 'foliate' appearing in the echo
     area, since that is the only choice which begins with 'fol'.

<ESC C-v> ('echo-area-scroll-completions-window')
     Scroll the completions window, if that is visible, or the "other"
     window if not.


File: info-stnd.info,  Node: Printing Nodes,  Next: Miscellaneous Commands,  Prev: Window Commands,  Up: Top

10 Printing Nodes
*****************

In general, we recommend that you use TeX to format the document and
print sections of it, by running 'tex' on the Texinfo source file.
However, you may wish to print out the contents of a node as a quick
reference document for later use, or if you don't have TeX installed.
Info provides you with a command for doing this.

'M-x print-node'
     Pipe the contents of the current node through the command in the
     environment variable 'INFO_PRINT_COMMAND'.  If the variable does
     not exist, the node is simply piped to 'lpr' (on DOS/Windows, the
     default is to print the node to the local printer device, 'PRN').

     The value of 'INFO_PRINT_COMMAND' may begin with the '>' character,
     as in '>/dev/printer', in which case Info treats the rest as the
     name of a file or a device.  Instead of piping to a command, Info
     opens the file, writes the node contents, and closes the file,
     under the assumption that text written to that file will be printed
     by the underlying OS.


File: info-stnd.info,  Node: Miscellaneous Commands,  Next: Variables,  Prev: Printing Nodes,  Up: Top

11 Miscellaneous Commands
*************************

GNU Info contains several commands which self-document GNU Info:

'M-x describe-command'
     Read the name of an Info command in the echo area and then display
     a brief description of what that command does.

'M-x describe-key'
     Read a key sequence in the echo area, and then display the name and
     documentation of the Info command that the key sequence invokes.

'M-x describe-variable'
     Read the name of a variable in the echo area and then display a
     brief description of what the variable affects.

'M-x where-is'
     Read the name of an Info command in the echo area, and then display
     a key sequence which can be typed in order to invoke that command.

'H' ('get-help-window')
<F1> (on DOS/Windows only)
'h' and 'H', vi-like operation
     Create (or Move into) the window displaying '*Help*', and place a
     node containing a quick reference card into it.  This window
     displays the most concise information about GNU Info available.

'h' ('get-info-help-node')
'M-h', vi-like operation
     Try hard to visit the node '(info)Help'.  The Info file 'info.texi'
     distributed with GNU Info (and GNU Emacs) contains this node.  Of
     course, the file must first be processed with 'makeinfo', and then
     placed into the location of your Info directory.

'=' ('display-file-info')
     Show information about what's currently being viewed in the echo
     area: the Info file name, and current line number and percentage
     within the current node.

'M-x info-version'
     Display the name and version of the currently running Info program.

   Here are the commands for creating a numeric argument:

'C-u' ('universal-argument')
     Start (or multiply by 4) the current numeric argument.  'C-u' is a
     good way to give a small numeric argument to cursor movement or
     scrolling commands; 'C-u C-v' scrolls the screen 4 lines, while
     'C-u C-u C-n' moves the cursor down 16 lines.  'C-u' followed by
     digit keys sets the numeric argument to the number thus typed: 'C-u
     1 2 0' sets the argument to 120.

'M-1' ('add-digit-to-numeric-arg')
'1', vi-like operation
'M-2' ... 'M-9'
'2' ... '9', vi-like operation
'M-0'
'0', vi-like operation
     Add the digit value of the invoking key to the current numeric
     argument.  Once Info is reading a numeric argument, you may just
     type the digits of the argument, without the Meta prefix.  For
     example, you might give 'C-l' a numeric argument of 32 by typing:

          C-u 3 2 C-l

     or

          M-3 2 C-l

'M--' ('add-digit-to-numeric-arg')
'-'
     To make a negative argument, type '-'.  Typing '-' alone makes a
     negative argument with a value of -1.  If you continue to type
     digit or Meta-digit keys after '-', the result is a negative number
     produced by those digits.

     '-' doesn't work when you type in the echo area, because you need
     to be able to insert the '-' character itself; use 'M--' instead,
     if you need to specify negative arguments in the echo area.

   <C-g> ('C-c' in vi-like mode) is used to abort the reading of a
multi-character key sequence, to cancel lengthy operations (such as
multi-file searches) and to cancel reading input in the echo area.

'C-g' ('abort-key')
'C-c', vi-like operation
     Cancel current operation.

   The 'q' command of Info simply quits running Info.  Under '--vi-keys'
(*note --vi-keys::), you can also exit with ':q' or 'ZZ'.

'q' ('quit')
'C-x C-c'
':q', vi-like operation
'ZZ', vi-like operation
     Exit GNU Info.

   If the operating system tells GNU Info that the screen is 60 lines
tall, and it is actually only 40 lines tall, here is a way to tell Info
that the operating system is correct.

'M-x set-screen-height'
     Read a height value in the echo area and set the height of the
     displayed screen to that value.

   On MS-DOS/MS-Windows, this command actually tries to change the
dimensions of the visible screen to the value you type in the echo area.

   Finally, Info provides a convenient way to display footnotes which
might be associated with the current node that you are viewing:

'ESC C-f' ('show-footnotes')
     Show the footnotes (if any) associated with the current node in
     another window.  You can have Info automatically display the
     footnotes associated with a node when the node is selected by
     setting the variable 'automatic-footnotes'.  *Note
     'automatic-footnotes': Variables.


File: info-stnd.info,  Node: Variables,  Next: Colors and Styles,  Prev: Miscellaneous Commands,  Up: Top

12 Manipulating Variables
*************************

GNU Info uses several internal "variables" whose values are looked at by
various Info commands.  You can change the values of these variables,
and thus change the behavior of Info, if desired.

   There are three ways to set the value of a variable, listed here in
order of precedence:

  1. interactively, using the 'set-variable' command described below;
  2. on the command line, using the '-v' ('--variable') command line
     option (*note variable-assignment::);
  3. in the '#var' section of the '.infokey' file (*note Custom Key
     Bindings::).

'M-x set-variable'
     Read the name of a variable, and the value for it, in the echo area
     and then set the variable to that value.  Completion is available
     when reading the variable name (*note The Echo Area::); completion
     is also available when reading the value when that makes sense.

'M-x describe-variable'
     Read the name of a variable in the echo area and display its value
     and a brief description.

   Here is a list of the variables that you can set in Info.

'automatic-footnotes'
     When set to 'On', footnotes appear and disappear automatically;
     else, they appear at the bottom of the node text.  This variable is
     'Off' by default.  When a node is selected, a window containing the
     footnotes which appear in that node is created, and the footnotes
     are displayed within the new window.  The window that Info creates
     to contain the footnotes is called '*Footnotes*'.  If a node is
     selected which contains no footnotes, and a '*Footnotes*' window is
     on the screen, the '*Footnotes*' window is deleted.  Footnote
     windows created in this fashion are not automatically tiled so that
     they can use as little of the display as is possible.

'automatic-tiling'
     When set to 'On', creating or deleting a window resizes other
     windows.  This variable is 'Off' by default.  Normally, typing 'C-x
     2' divides the current window into two equal parts.  When
     'automatic-tiling' is set to 'On', all of the windows are resized
     automatically, keeping an equal number of lines visible in each
     window.  Any '*Completions*' and '*Footnotes*' windows are
     exceptions to the automatic tiling; they retain their original
     size.

'cursor-movement-scrolls'
     When set to 'On', when cursor movement commands reach the top or
     bottom of a node, another node is loaded depending on the value of
     'scroll-behaviour' (see below).  This is the default.  When this
     variable is set to 'Off', cursor movements stop at the top or
     bottom of a node.

'errors-ring-bell'
     When set to 'On' (the default), errors cause the bell to ring.

'follow-strategy'
     When set to 'remain' (the default), Info tries to remain within the
     directory containing the currently displayed Info file when
     following a cross-reference to an external manual, before looking
     for the referenced manual in the search path.  The alternative
     value is 'path', which means to look through the search path right
     away.

     'remain' is intended to be useful for several Texinfo manuals that
     all reference each other and whose versions should match each
     other.  (For example, various manuals relating to a particular
     version of Emacs.)

     The alternative behaviour, with 'path', may be useful when your
     Info file search path parallels your command shell's search path,
     and you always want to find documentation of the version of the
     program that the shell would execute.

'gc-compressed-files'
     When set to 'On', Info garbage collects files which had to be
     uncompressed.  The default value of this variable is 'Off'.
     Whenever a node is visited in Info, the Info file containing that
     node is read into memory, and Info reads information about the tags
     and nodes contained in that file.  Once the tags information is
     read by Info, it is never forgotten.  However, the actual text of
     the nodes does not need to be retained unless a particular Info
     window needs it.  For non-compressed files, node text is not
     remembered when it is no longer in use.  But de-compressing a file
     can be a time-consuming operation, and so Info tries hard not to do
     it twice.  This variable tells Info it is okay to garbage collect
     the text of the nodes of a file which was compressed on disk.

'hide-note-references'
     By default, Info displays the contents of Info files mostly
     verbatim, including text that is used by Info readers for
     navigation (for example, marking the location of menus or
     cross-references).  If you set this variable to 'On', some of this
     text is hidden, in a similar way to the 'Info-hide-note-references'
     variable in Emacs (*note (info)Emacs Info Variables::).

'highlight-searches'
     When set to 'On', highlight matches from searching commands (*note
     Searching Commands::).

'infopath-no-defaults'
     Used in conjunction with the 'INFOPATH' environment variable (*note
     INFOPATH::).  When set to 'On', the default documentation directory
     defined when Info was built (e.g., '/usr/share/info') is not added
     to the search path for Info files.

'ISO-Latin'
     The default is 'On', which means that Info accepts and displays
     characters represented by bytes with values 128 and above, such as
     characters in the UTF-8 encoding or in various 8-bit ISO Latin
     characters, as well as allowing you to input such characters.

     The only reason to set this variable to 'Off' would be if your
     terminal set the eighth bit of a byte to represent the Meta key
     being pressed.

'key-time'
     Length of time in milliseconds to wait for the next byte of a byte
     sequence generated by a key (or key chord) on the keyboard.  For
     example, if the 'down' key generates the byte sequence '<ESC> O B',
     and the two bytes '<ESC> O' have been received, then a 'B' byte
     would have to be received within this length of time for a key
     press of 'down' to be registered.  You may wish to set this
     variable to a larger value for slow terminals or network
     connections.

     If you set this variable to 0, it's unspecified whether a
     recognized byte sequence representing a key takes precedence over
     another recognized sequence representing a key that is an initial
     subsequence of the first sequence.  In some cases, you may be able
     to make pressing a special key on the keyboard that Info doesn't
     know about (for example, a function key) cause a command to be
     executed by setting this variable to 0, and giving the byte
     sequence the key sends in '.infokey'.  (*Note Custom Key
     Bindings::.)

'min-search-length'
     Minimum length of a search string (default 1).  Attempts to
     initiate a search for a string (or regular expression) shorter than
     this value, result in an error.

'mouse'
     What method to use to get input from a mouse device.  The default
     value is 'Off'.  Set this variable to 'normal-tracking' to make
     Info use "normal tracking mode" if it detects that the terminal
     supports it.  This enables you to scroll the contents of the active
     window with a mouse scrollwheel.

     On terminal emulators running under the X Window System, such as
     'xterm', you can usually select text with the mouse.  However,
     mouse tracking mode may interfere with this.  When this happens,
     you may be able to select text by holding down the 'Shift' key
     while clicking and dragging.

'nodeline'
     How to print the node header line that appears at the top of each
     node.  By default only the pointers to neighbouring nodes are
     displayed (the "Next", "Prev", and "Up" pointers): this corresponds
     to the 'pointers' value for this variable.  To print the entire
     line, set 'nodeline' to the value 'print', which will include the
     filename and name of the node.  To not display the header line at
     all, use the value 'no'.

'scroll-behavior'
'scroll-behaviour'
     The two variable names are synonymous.  Control what happens when
     scrolling commands are used at the end or beginning of a node
     (*note Scrolling Commands::).  The default value for this variable
     is 'Continuous'.  Possible values:

     'Continuous'
          Try to get the first item in this node's menu, or failing
          that, the 'Next' node, or failing that, the 'Next' of the 'Up'
          node.  This behavior is identical to using the ']'
          ('global-next-node') and '[' ('global-prev-node') commands.

     'Next Only'
          Only try to get the 'Next' node.

     'Page Only'
          Just stop, changing nothing.  With this value, no scrolling
          command can change the node that is being viewed.

     This variable also affects cursor movement commands (*note Cursor
     Commands::) unless the 'cursor-movement-scrolls' variable is set to
     'Off'.  *Note cursor-movement-scrolls::.

'scroll-last-node'
     Control what happens when a scrolling command is issued at the end
     of the last node.  Possible values are:

     'Stop'
          Do not scroll.  Display the 'No more nodes within this
          document.' message.  This is the default.

     'Top'
          Go to the top node of the document.

     This variable is in effect only if 'scroll-behaviour' is set to
     'Continuous'.

'scroll-step'
     The number of lines to scroll to bring the cursor back into the
     window.  The default value of this variable is 1, which causes a
     kind of "smooth scrolling" which some people prefer.  Scrolling
     happens automatically if the cursor has moved out of the visible
     portion of the node text.

     If the variable 'scroll-step' is 0, the cursor (and the text it is
     attached to) is placed in the centre of the window.

'search-skip-screen'
     Set the starting point of repeated searches (*note
     repeated-search::).  When set to 'Off' (the default), repeated
     searches start at the position immediately following (when
     searching in forward direction), or immediately preceding (when
     searching backwards) the cursor.  When set to 'On', repeated
     searches omit lines visibly displayed on the screen.  In other
     words, forward searches ('}') start at the beginning of the next
     page, and backward searches ('{') start at the end of the previous
     page.

'show-index-match'
     When set to 'On' (the default), the portion of the matched search
     string that you typed is indicated (by displaying it in the
     "opposite" case) in the result message (*note 'next-index-match':
     Searching Commands.).

'visible-bell'
     When set to 'On', Info attempts to flash the screen instead of
     ringing the bell.  This variable is 'Off' by default.  If the
     terminal does not allow flashing, this variable has no effect.
     (But you can still make Info perform quietly by setting the
     'errors-ring-bell' variable to 'Off'; or using an external command
     to mute the bell, e.g., 'xset b 0 0 0'.)


File: info-stnd.info,  Node: Colors and Styles,  Next: Custom Key Bindings,  Prev: Variables,  Up: Top

13 Colors and Styles
********************

You can choose to highlight parts of Info's display, such as
cross-references and search matches, using a variety of styles,
including colors, boldface and underline.  Here are the variables that
are available to do this:

'link-style'
     Used for cross-references and menu entries.

'active-link-style'
     Used for a cross-references or menu entry when typing <RET> would
     have the effect of following said cross-reference or menu entry.

'match-style'
     Used for matches from a search command.  (*Note Searching
     Commands::.)

   Each of these is given in the '.infokey' file just as the variables
in the previous chapter.  Their values are a comma-separated list of
values in the following table:

'black'
'red'
'green'
'yellow'
'blue'
'magenta'
'cyan'
'white'
     Use the color specified for text.

'nocolour'
'nocolor'
     Turn off any color that was in effect, using the terminal's default
     color.

'bgblack'
'bgred'
'bggreen'
'bgyellow'
'bgblue'
'bgmagenta'
'bgcyan'
'bgwhite'
     Use the color specified for the background.

'nocolour'
'nocolor'
     Use the terminal's default background color.

'underline'
'nounderline'
     Turn text underline on or off.

'standout'
'nostandout'
     Turn 'standout mode' on or off.  Standout mode entails the use of
     appearance modes that make text stand out, and varies between
     terminals.

'bold'
'regular'
'nobold'
     Turn boldface on or off.

'blink'
'noblink'
     Make the text blink, or not.

   Here is an sample excerpt from an '.infokey' file:

     #var
     link-style=yellow
     active-link-style=yellow,bold
     match-style=underline,bold,nocolour

With this, cross-references are all yellow, and active cross-references
are additionally displayed in bold.  Any search matches will be shown in
bold, and underlined.  Moreover, if there is a search match inside a
cross-reference, the 'nocolour' rendition style will cancel the yellow
colour, leaving the text in the match the terminal's default colour.
(Note, however, that the rendition styles for active cross-references
take priority over those for search matches, so search matches there
will still be displayed in yellow.)


File: info-stnd.info,  Node: Custom Key Bindings,  Next: Index,  Prev: Colors and Styles,  Up: Top

14 Customizing Key Bindings and Variables
*****************************************

Info allows you to override the default key-to-command bindings and
variable settings described in this document.  (The '--vi-keys' option
rebinds many keys at once; *note --vi-keys::.)

   On startup, GNU Info looks for a configuration file in the invoker's
'HOME' directory called '.infokey', i.e., '~/.infokey'.(1)  If it is
present, then Info adopts the key bindings and variable settings
contained therein.  To use an alternative configuration file, use the
'--init-file' option (*note --init-file::).

   Variables may also be set on the command line with the '--variable'
option (*note variable-assignment::).  Variable settings on the command
line override settings from the '.infokey' file.

* Menu:

* infokey format::

   ---------- Footnotes ----------

   (1) Due to the limitations of DOS filesystems, the MS-DOS version of
Info looks for a file '_infokey' instead.  If the 'HOME' variable is not
defined, Info additionally looks in the current directory.


File: info-stnd.info,  Node: infokey format,  Up: Custom Key Bindings

14.1 'infokey' format
=====================

The format of the '.infokey' file is most easily illustrated by example.
For instance, here is a sample init file suitable for aficionados of
'vi' or 'less':

     #info
     j       next-line
     k       prev-line
     l       forward-char
     h       backward-char
     \kd     down-line
     \ku     up-line
     \       scroll-forward
     \kD     scroll-forward-page-only
     b       scroll-backward
     \kU     scroll-backward-page-only
     g       beginning-of-node
     \kh     beginning-of-node
     G       end-of-node
     \ke     end-of-node
     \t      select-reference-this-line
     -       history-node
     n       next-node
     p       prev-node
     u       up-node
     t       top-node
     d       dir-node
     \mu     clear-search
     #var
     highlight-searches=On

   The file consists of one or more "sections".  Each section starts
with a line that identifies the type of section.  The possible sections
are:

'#info'
     Key bindings for Info windows.  The start of this section is
     indicated by a line containing just '#info' by itself.  If this is
     the first section in the source file, the '#info' line can be
     omitted.  The rest of this section consists of lines of the form:

          STRING whitespace ACTION [ whitespace [ # comment ] ] newline

     Whitespace is any sequence of one or more spaces and/or tabs.
     Comment is any sequence of any characters, excluding newline.
     STRING is the key sequence which invokes the action.  ACTION is the
     name of an Info command.  The characters in STRING are interpreted
     literally or prefixed by a caret ('^') to indicate a control
     character.  A backslash followed by certain characters specifies
     input keystrokes as follows:

     '\b'
          Backspace
     '\e'
          Escape (ESC)
     '\n'
          Newline
     '\r'
          Return
     '\t'
          Tab
     '\ku'
          Up arrow
     '\kd'
          Down arrow
     '\kl'
          Left arrow
     '\kr'
          Right arrow
     '\kU'
          Page Up
     '\kD'
          Page Down
     '\kh'
          HOME
     '\ke'
          END
     '\kx'
          Delete (DEL)
     '\mX'
          Meta-X where X is any character as described above.

     Backslash followed by any other character indicates that character
     is to be taken literally.  Characters which must be preceded by a
     backslash include caret, space, tab, and backslash itself.

'#echo-area'
     Key bindings for the echo area.  The start of this section is
     indicated by a line containing just '#echo-area' by itself.  The
     rest of this section has a syntax identical to that for the key
     definitions for the Info area, described above.

'#var'
     Variable initializations.  The start of this section is indicated
     by a line containing just '#var' by itself.  Following this line is
     a list of variable assignments, one per line.  Each line consists
     of a variable name (*note Variables::) followed by '=' followed by
     a value.  There may be no white space between the variable name and
     the '=', and all characters following the '=', including white
     space, are included in the value.

   Blank lines and lines starting with '#' are ignored, except for the
special section header lines.

   Key bindings defined in the '.infokey' file take precedence over GNU
Info's default key bindings, whether or not '--vi-keys' is used.  A
default key binding may be disabled by overriding it in the '.infokey'
file with the action 'invalid'.  In addition, _all_ default key bindings
can be disabled by adding this line _anywhere_ in the relevant section:

     #stop

   This will cause GNU Info to ignore all the default key commands for
that section.

   Beware: '#stop' can be dangerous.  Since it disables all default key
bindings, you must supply enough new key bindings to enable all
necessary actions.  Failure to bind any key to the 'quit' command, for
example, can lead to frustration.

   The order in which key bindings are defined in the '.infokey' file is
not important, except that the command summary produced by the
'get-help-window' command only displays the _first_ key that is bound to
each command.


File: info-stnd.info,  Node: Index,  Prev: Custom Key Bindings,  Up: Top

Appendix A Index
****************

 [index ]
* Menu:

* ', vi-like operation:                  Node Commands.       (line  51)
* *Footnotes* window:                    Variables.           (line  32)
* ,:                                     Index Commands.      (line  19)
* -:                                     Miscellaneous Commands.
                                                              (line  75)
* --all (-a) command line option:        Invoking Info.       (line  94)
* --apropos (-k) command line option:    Invoking Info.       (line 115)
* --debug (-x) command line option:      Invoking Info.       (line 127)
* --directory (-d) command line option:  Invoking Info.       (line 149)
* --dribble command line option:         Invoking Info.       (line 179)
* --file (-f) command line option:       Invoking Info.       (line 185)
* --help (-h) command line option:       Invoking Info.       (line 203)
* --index-search command line option:    Invoking Info.       (line 207)
* --init-file command line option:       Invoking Info.       (line 221)
* --node (-n) command line option:       Invoking Info.       (line 227)
* --output (-o) command line option:     Invoking Info.       (line 240)
* --raw-escapes (-R) command line option: Invoking Info.      (line 246)
* --restore command line option:         Invoking Info.       (line 264)
* --show-malformed-multibytes command line option: Invoking Info.
                                                              (line 271)
* --show-options (--usage, -O) command line option: Invoking Info.
                                                              (line 277)
* --speech-friendly (-b) command line option: Invoking Info.  (line 287)
* --strict-node-location command line option: Invoking Info.  (line 295)
* --subnodes, command line option:       Invoking Info.       (line 304)
* --variable (-v) command line option:   Invoking Info.       (line 312)
* --version command line option:         Invoking Info.       (line 315)
* --vi-keys command line option:         Invoking Info.       (line 318)
* --where (--location, -w) command line option: Invoking Info.
                                                              (line 326)
* .infokey format:                       infokey format.      (line   6)
* /:                                     Searching Commands.  (line  11)
* 0 ... 9, vi-like operation:            Miscellaneous Commands.
                                                              (line  62)
* 0, in Info windows:                    Selecting Xrefs.     (line  22)
* 1 ... 9, in Info windows:              Selecting Xrefs.     (line  12)
* 1 ... 9, in Info windows <1>:          Selecting Xrefs.     (line  12)
* <:                                     Node Commands.       (line  70)
* =, in Info windows:                    Miscellaneous Commands.
                                                              (line  39)
* >:                                     Node Commands.       (line  77)
* ?:                                     Searching Commands.  (line  19)
* ?, in Info windows:                    Miscellaneous Commands.
                                                              (line  27)
* ?, in the echo area:                   The Echo Area.       (line 133)
* [:                                     Node Commands.       (line  90)
* ]:                                     Node Commands.       (line  83)
* _info file (MS-DOS):                   Custom Key Bindings. (line   6)
* {:                                     Searching Commands.  (line  42)
* }:                                     Searching Commands.  (line  29)
* abort-key:                             Miscellaneous Commands.
                                                              (line  90)
* absolute Info file names:              Invoking Info.       (line  52)
* active-link-style:                     Colors and Styles.   (line  14)
* add-digit-to-numeric-arg:              Miscellaneous Commands.
                                                              (line  62)
* ANSI escape sequences in documents:    Invoking Info.       (line 246)
* Apropos, in Info files:                Invoking Info.       (line 115)
* arguments, command line:               Invoking Info.       (line   6)
* arguments, negative:                   Miscellaneous Commands.
                                                              (line  75)
* automatic-footnotes:                   Variables.           (line  31)
* automatic-tiling:                      Variables.           (line  43)
* b, in Info windows:                    Cursor Commands.     (line  60)
* b, vi-like operation:                  Scrolling Commands.  (line  69)
* BackTab, in Info windows:              Selecting Xrefs.     (line  57)
* BackTab, in the echo area:             The Echo Area.       (line  82)
* backward-char:                         Cursor Commands.     (line  46)
* backward-word:                         Cursor Commands.     (line  54)
* beginning-of-line:                     Cursor Commands.     (line  34)
* beginning-of-node:                     Cursor Commands.     (line  60)
* Blinking text:                         Colors and Styles.   (line  72)
* Bold text:                             Colors and Styles.   (line  68)
* BS (backspace):                        Scrolling Commands.  (line  59)
* bugs, reporting:                       Stand-alone Info.    (line  28)
* C-a, in Info windows:                  Cursor Commands.     (line  34)
* C-a, in the echo area:                 The Echo Area.       (line  27)
* C-b, in Info windows:                  Cursor Commands.     (line  46)
* C-b, in the echo area:                 The Echo Area.       (line  23)
* C-b, vi-like operation:                Scrolling Commands.  (line  69)
* C-c, vi-like operation:                Miscellaneous Commands.
                                                              (line  90)
* C-CENTER:                              Node Commands.       (line  51)
* C-d, in the echo area:                 The Echo Area.       (line  48)
* C-d, vi-like operation:                Scrolling Commands.  (line  99)
* C-e, in Info windows:                  Cursor Commands.     (line  38)
* C-e, in the echo area:                 The Echo Area.       (line  31)
* C-e, vi-like operation:                Scrolling Commands.  (line  85)
* C-End:                                 Cursor Commands.     (line  65)
* C-f, in Info windows:                  Cursor Commands.     (line  42)
* C-f, in the echo area:                 The Echo Area.       (line  18)
* C-f, vi-like operation:                Scrolling Commands.  (line  40)
* C-g, in Info windows:                  Miscellaneous Commands.
                                                              (line  90)
* C-g, in the echo area:                 The Echo Area.       (line  59)
* C-g, vi-like operation:                Miscellaneous Commands.
                                                              (line  39)
* C-h:                                   Miscellaneous Commands.
                                                              (line  27)
* C-Home:                                Cursor Commands.     (line  60)
* C-k, in the echo area:                 The Echo Area.       (line 105)
* C-k, vi-like operation:                Scrolling Commands.  (line  94)
* C-l:                                   Scrolling Commands.  (line 121)
* C-LEFT:                                Cursor Commands.     (line  54)
* C-LEFT, in the echo area:              The Echo Area.       (line  44)
* C-n:                                   Cursor Commands.     (line  26)
* C-n, vi-like operation:                Scrolling Commands.  (line  85)
* C-NEXT:                                Node Commands.       (line  22)
* C-p:                                   Cursor Commands.     (line  30)
* C-p, vi-like operation:                Scrolling Commands.  (line  94)
* C-PgDn:                                Node Commands.       (line  24)
* C-PgUp:                                Node Commands.       (line  30)
* C-PREVIOUS:                            Node Commands.       (line  28)
* C-q, in the echo area:                 The Echo Area.       (line  69)
* C-r:                                   Searching Commands.  (line  65)
* C-RIGHT:                               Cursor Commands.     (line  50)
* C-RIGHT, in the echo area:             The Echo Area.       (line  38)
* C-s:                                   Searching Commands.  (line  60)
* C-t, in the echo area:                 The Echo Area.       (line  86)
* C-u:                                   Miscellaneous Commands.
                                                              (line  49)
* C-u, in the echo area, vi-like operation: The Echo Area.    (line  59)
* C-u, vi-like operation:                Scrolling Commands.  (line 106)
* C-UP:                                  Node Commands.       (line  35)
* C-v:                                   Scrolling Commands.  (line  40)
* C-v, in the echo area, vi-like operation: The Echo Area.    (line  69)
* C-w:                                   Scrolling Commands.  (line 128)
* C-x 0:                                 Basic Windows.       (line  34)
* C-x 1:                                 Basic Windows.       (line  39)
* C-x 2:                                 Basic Windows.       (line  26)
* C-x b:                                 Node Commands.       (line 169)
* C-x C-b:                               Node Commands.       (line 164)
* C-x C-c:                               Miscellaneous Commands.
                                                              (line  99)
* C-x C-f:                               Node Commands.       (line 158)
* C-x DEL, in the echo area:             The Echo Area.       (line 108)
* C-x g, vi-like operation:              Node Commands.       (line 101)
* C-x n:                                 Searching Commands.  (line  29)
* C-x N:                                 Searching Commands.  (line  42)
* C-x n, vi-like operation:              Node Commands.       (line  22)
* C-x o:                                 Basic Windows.       (line  12)
* C-x r, vi-like operation:              Selecting Xrefs.     (line  38)
* C-x t:                                 Basic Windows.       (line  52)
* C-x u, vi-like operation:              Node Commands.       (line  35)
* C-x ^:                                 Basic Windows.       (line  47)
* C-y, in the echo area:                 The Echo Area.       (line 111)
* C-y, vi-like operation:                Scrolling Commands.  (line  94)
* cancelling the current operation:      Miscellaneous Commands.
                                                              (line  90)
* cancelling typeahead:                  Miscellaneous Commands.
                                                              (line  90)
* case-sensitive search:                 Searching Commands.  (line  54)
* case-sensitivity, and search:          Searching Commands.  (line  99)
* clear-search:                          Searching Commands.  (line  95)
* colors in documents:                   Invoking Info.       (line 246)
* Coloured background:                   Colors and Styles.   (line  49)
* Coloured foreground:                   Colors and Styles.   (line  34)
* command line options:                  Invoking Info.       (line   6)
* command-line options, how to find:     Invoking Info.       (line 277)
* commands, describing:                  Miscellaneous Commands.
                                                              (line   9)
* completion:                            The Echo Area.       (line 116)
* compressed Info files:                 Invoking Info.       (line  35)
* current file, information about:       Miscellaneous Commands.
                                                              (line  39)
* cursor, moving:                        Cursor Commands.     (line   6)
* cursor-movement-scrolls:               Variables.           (line  53)
* customizing key bindings:              Custom Key Bindings. (line   6)
* d:                                     Node Commands.       (line  63)
* d, vi-like operation:                  Scrolling Commands.  (line  99)
* debugging:                             Invoking Info.       (line 127)
* default key bindings, overriding:      Custom Key Bindings. (line   6)
* DEL, in Info windows:                  Scrolling Commands.  (line  50)
* DEL, in the echo area:                 The Echo Area.       (line  51)
* delete-window:                         Basic Windows.       (line  34)
* describe-command:                      Miscellaneous Commands.
                                                              (line   9)
* describe-key:                          Miscellaneous Commands.
                                                              (line  13)
* describe-variable:                     Variables.           (line  26)
* dir-node:                              Node Commands.       (line  63)
* directory path:                        Invoking Info.       (line 149)
* display-file-info:                     Miscellaneous Commands.
                                                              (line  39)
* DOWN (an arrow key):                   Cursor Commands.     (line  26)
* DOWN, vi-like operation:               Scrolling Commands.  (line  85)
* down-line:                             Scrolling Commands.  (line  85)
* e, in Info windows:                    Cursor Commands.     (line  65)
* echo area:                             The Echo Area.       (line   6)
* echo-area-abort:                       The Echo Area.       (line  59)
* echo-area-backward:                    The Echo Area.       (line  23)
* echo-area-backward-kill-line:          The Echo Area.       (line 108)
* echo-area-backward-kill-word:          The Echo Area.       (line  99)
* echo-area-backward-word:               The Echo Area.       (line  42)
* echo-area-beg-of-line:                 The Echo Area.       (line  27)
* echo-area-complete:                    The Echo Area.       (line 130)
* echo-area-delete:                      The Echo Area.       (line  48)
* echo-area-end-of-line:                 The Echo Area.       (line  31)
* echo-area-forward:                     The Echo Area.       (line  18)
* echo-area-forward-word:                The Echo Area.       (line  36)
* echo-area-insert:                      The Echo Area.       (line  74)
* echo-area-kill-line:                   The Echo Area.       (line 105)
* echo-area-kill-word:                   The Echo Area.       (line  95)
* echo-area-newline:                     The Echo Area.       (line  65)
* echo-area-possible-completions:        The Echo Area.       (line 133)
* echo-area-quoted-insert:               The Echo Area.       (line  69)
* echo-area-rubout:                      The Echo Area.       (line  51)
* echo-area-scroll-completions-window:   The Echo Area.       (line 157)
* echo-area-tab-insert:                  The Echo Area.       (line  80)
* echo-area-transpose-chars:             The Echo Area.       (line  86)
* echo-area-yank:                        The Echo Area.       (line 111)
* echo-area-yank-pop:                    The Echo Area.       (line 114)
* Emacs Info reader:                     Stand-alone Info.    (line  16)
* End:                                   Cursor Commands.     (line  38)
* end-of-line:                           Cursor Commands.     (line  38)
* end-of-node:                           Cursor Commands.     (line  65)
* errors-ring-bell:                      Variables.           (line  60)
* ESC C-f:                               Miscellaneous Commands.
                                                              (line 116)
* ESC C-v, in Info windows:              Basic Windows.       (line  42)
* ESC C-v, in the echo area:             The Echo Area.       (line 157)
* f:                                     Selecting Xrefs.     (line  38)
* f, vi-like operation:                  Scrolling Commands.  (line  40)
* F1:                                    Miscellaneous Commands.
                                                              (line  27)
* file names, relative:                  Invoking Info.       (line  52)
* file, outputting to:                   Invoking Info.       (line 240)
* files, compressed:                     Invoking Info.       (line  35)
* find-menu:                             Selecting Xrefs.     (line  30)
* finding the Invocation node:           Node Commands.       (line 115)
* first-node:                            Node Commands.       (line  70)
* follow-strategy:                       Variables.           (line  63)
* footnotes window:                      Variables.           (line  32)
* footnotes, displaying:                 Miscellaneous Commands.
                                                              (line 116)
* format of .infokey:                    infokey format.      (line   6)
* forward-char:                          Cursor Commands.     (line  42)
* forward-word:                          Cursor Commands.     (line  50)
* functions, describing:                 Miscellaneous Commands.
                                                              (line   9)
* g:                                     Node Commands.       (line 101)
* G:                                     Node Commands.       (line 133)
* g, vi-like operation:                  Node Commands.       (line  70)
* G, vi-like operation:                  Node Commands.       (line  77)
* gc-compressed-files:                   Variables.           (line  81)
* get-help-window:                       Miscellaneous Commands.
                                                              (line  27)
* get-info-help-node:                    Miscellaneous Commands.
                                                              (line  33)
* global-next-node:                      Node Commands.       (line  83)
* global-prev-node:                      Node Commands.       (line  90)
* goto-invocation:                       Node Commands.       (line 115)
* goto-node:                             Node Commands.       (line 101)
* GROFF_SGR:                             Invoking Info.       (line 254)
* grow-window:                           Basic Windows.       (line  47)
* h:                                     Miscellaneous Commands.
                                                              (line  33)
* h, vi-like operation:                  Miscellaneous Commands.
                                                              (line  27)
* hide-note-references:                  Variables.           (line  95)
* highlight-searches:                    Searching Commands.  (line  95)
* highlight-searches <1>:                Variables.           (line 103)
* history-node:                          Node Commands.       (line  51)
* Home:                                  Cursor Commands.     (line  34)
* i:                                     Index Commands.      (line  11)
* I:                                     Index Commands.      (line  15)
* I, vi-like operation:                  Node Commands.       (line 115)
* incremental search:                    Searching Commands.  (line  60)
* index:                                 Index Commands.      (line   6)
* index search, selecting from the command line: Invoking Info.
                                                              (line 207)
* index, searching:                      Index Commands.      (line  11)
* index, virtual:                        Index Commands.      (line  15)
* index-apropos:                         Index Commands.      (line  23)
* index-search:                          Index Commands.      (line  11)
* indexes:                               Index Commands.      (line   6)
* indices:                               Index Commands.      (line   6)
* Info files, compressed:                Invoking Info.       (line  35)
* Info files, reading in Emacs:          Stand-alone Info.    (line  16)
* Info files, relative:                  Invoking Info.       (line  52)
* Info files, searching all indices:     Invoking Info.       (line 115)
* Info manual location:                  Invoking Info.       (line 326)
* Info manual, specifying initial:       Invoking Info.       (line 185)
* Info, invoking:                        Invoking Info.       (line   6)
* info-version:                          Miscellaneous Commands.
                                                              (line  44)
* infodebug output file:                 Invoking Info.       (line 142)
* infokey format:                        infokey format.      (line   6)
* infokey, program for customizing key bindings: Custom Key Bindings.
                                                              (line   6)
* INFOPATH:                              Invoking Info.       (line 149)
* infopath-no-defaults:                  Variables.           (line 107)
* INFO_PRINT_COMMAND, environment variable: Printing Nodes.   (line  13)
* initial node, specifying:              Invoking Info.       (line 185)
* invocation description, how to find:   Invoking Info.       (line 277)
* invoking Info:                         Invoking Info.       (line   6)
* isearch-backward:                      Searching Commands.  (line  65)
* isearch-forward:                       Searching Commands.  (line  60)
* ISO Latin characters:                  Variables.           (line 114)
* ISO-Latin:                             Variables.           (line 113)
* k, vi-like operation:                  Scrolling Commands.  (line  94)
* keep-one-window:                       Basic Windows.       (line  39)
* key bindings, customizing:             Custom Key Bindings. (line   6)
* key-time:                              Variables.           (line 123)
* keys, describing:                      Miscellaneous Commands.
                                                              (line  13)
* keystrokes, recording:                 Invoking Info.       (line 179)
* l:                                     Node Commands.       (line  51)
* last-menu-item:                        Selecting Xrefs.     (line  22)
* last-node:                             Node Commands.       (line  77)
* LEFT (an arrow key):                   Cursor Commands.     (line  46)
* LEFT, in the echo area:                The Echo Area.       (line  23)
* Less-like key bindings:                Invoking Info.       (line 318)
* LFD, vi-like operation:                Scrolling Commands.  (line  85)
* link-style:                            Colors and Styles.   (line  11)
* list-visited-nodes:                    Node Commands.       (line 164)
* local printer device:                  Printing Nodes.      (line  18)
* m:                                     Selecting Xrefs.     (line  25)
* M-$, vi-like operation:                The Echo Area.       (line  31)
* M--:                                   Miscellaneous Commands.
                                                              (line  75)
* M-0 ... M-9:                           Miscellaneous Commands.
                                                              (line  62)
* M-0, in the echo area, vi-like operation: The Echo Area.    (line  27)
* M-0, vi-like operation:                Selecting Xrefs.     (line  22)
* M-1 ... M-9, vi-like operation:        Selecting Xrefs.     (line  12)
* M-1 ... M-9, vi-like operation <1>:    Selecting Xrefs.     (line  12)
* M-<:                                   Cursor Commands.     (line  60)
* M->:                                   Cursor Commands.     (line  65)
* M-b, in Info windows:                  Cursor Commands.     (line  54)
* M-b, in the echo area:                 The Echo Area.       (line  42)
* M-b, vi-like operation:                Cursor Commands.     (line  60)
* M-BS, in the echo area:                The Echo Area.       (line 101)
* M-d, in the echo area:                 The Echo Area.       (line  95)
* M-d, vi-like operation:                Node Commands.       (line  63)
* M-DEL, in the echo area:               The Echo Area.       (line  99)
* M-f, in Info windows:                  Cursor Commands.     (line  50)
* M-f, in the echo area:                 The Echo Area.       (line  36)
* M-f, vi-like operation:                Selecting Xrefs.     (line  38)
* M-g, vi-like operation:                Selecting Xrefs.     (line  62)
* M-h, in the echo area, vi-like operation: The Echo Area.    (line  18)
* M-h, vi-like operation:                Miscellaneous Commands.
                                                              (line  33)
* M-l, in the echo area, vi-like operation: The Echo Area.    (line  23)
* M-r:                                   Cursor Commands.     (line  68)
* M-SPC, vi-like operation:              Scrolling Commands.  (line  40)
* M-t, vi-like operation:                Node Commands.       (line  59)
* M-TAB, in Info windows:                Selecting Xrefs.     (line  54)
* M-TAB, in the echo area:               The Echo Area.       (line  80)
* M-v:                                   Scrolling Commands.  (line  69)
* M-w, in the echo area, vi-like operation: The Echo Area.    (line  36)
* M-x, in the echo area, vi-like operation: The Echo Area.    (line  48)
* M-X, in the echo area, vi-like operation: The Echo Area.    (line  95)
* M-y, in the echo area:                 The Echo Area.       (line 114)
* malformed multibyte sequences, showing: Invoking Info.      (line 271)
* man:                                   Node Commands.       (line 174)
* man pages, bold and underline:         Invoking Info.       (line 254)
* man pages, displaying:                 Node Commands.       (line 174)
* match-style:                           Colors and Styles.   (line  18)
* menu, following:                       Invoking Info.       (line  64)
* menu, following, from inside Info:     Node Commands.       (line 133)
* menu-digit:                            Selecting Xrefs.     (line  12)
* menu-item:                             Selecting Xrefs.     (line  25)
* menu-sequence:                         Node Commands.       (line 133)
* Meta key sets eighth bit:              Variables.           (line 114)
* min-search-length:                     Variables.           (line 143)
* mouse:                                 Variables.           (line 148)
* move-to-next-xref:                     Selecting Xrefs.     (line  46)
* move-to-prev-xref:                     Selecting Xrefs.     (line  54)
* move-to-window-line:                   Cursor Commands.     (line  68)
* moving the cursor:                     Cursor Commands.     (line   6)
* n:                                     Node Commands.       (line  22)
* n, vi-like operation:                  Searching Commands.  (line  29)
* n, vi-like operation <1>:              Searching Commands.  (line  42)
* negative arguments:                    Miscellaneous Commands.
                                                              (line  75)
* NEXT:                                  Scrolling Commands.  (line  18)
* next-index-match:                      Index Commands.      (line  19)
* next-line:                             Cursor Commands.     (line  26)
* next-node:                             Node Commands.       (line  22)
* next-window:                           Basic Windows.       (line  12)
* node header line:                      Variables.           (line 162)
* node, selecting from the command line: Invoking Info.       (line 227)
* nodeline:                              Variables.           (line 161)
* nodes, selection of:                   Node Commands.       (line   6)
* numeric arguments:                     Miscellaneous Commands.
                                                              (line  49)
* numeric arguments, negative:           Miscellaneous Commands.
                                                              (line  75)
* O:                                     Node Commands.       (line 115)
* online help, using Info as:            Invoking Info.       (line 207)
* options, command line:                 Invoking Info.       (line   6)
* outputting to a file:                  Invoking Info.       (line 240)
* overriding default key bindings:       Custom Key Bindings. (line   6)
* p:                                     Node Commands.       (line  28)
* PageDown:                              Scrolling Commands.  (line  34)
* PageUp:                                Scrolling Commands.  (line  63)
* prev-line:                             Cursor Commands.     (line  30)
* prev-node:                             Node Commands.       (line  28)
* prev-window:                           Basic Windows.       (line  22)
* PREVIOUS:                              Scrolling Commands.  (line  51)
* print-node:                            Printing Nodes.      (line  13)
* printing:                              Printing Nodes.      (line   6)
* printing characters, in the echo area: The Echo Area.       (line  74)
* printing nodes to the local printer:   Printing Nodes.      (line  18)
* q:                                     Miscellaneous Commands.
                                                              (line  99)
* quit:                                  Miscellaneous Commands.
                                                              (line  99)
* quitting:                              Miscellaneous Commands.
                                                              (line  99)
* R:                                     Searching Commands.  (line  49)
* r:                                     Selecting Xrefs.     (line  38)
* redraw-display:                        Scrolling Commands.  (line 121)
* regular expression search:             Searching Commands.  (line  11)
* relative Info file names:              Invoking Info.       (line  52)
* remembering user keystrokes:           Invoking Info.       (line 179)
* repeated search:                       Searching Commands.  (line  29)
* replaying recorded keystrokes:         Invoking Info.       (line 264)
* RET, in Info windows:                  Selecting Xrefs.     (line  62)
* RET, in the echo area:                 The Echo Area.       (line  65)
* RET, vi-like operation:                Scrolling Commands.  (line  85)
* RIGHT (an arrow key):                  Cursor Commands.     (line  42)
* RIGHT, in the echo area:               The Echo Area.       (line  18)
* s:                                     Searching Commands.  (line  11)
* S:                                     Searching Commands.  (line  54)
* screen, changing the height of:        Miscellaneous Commands.
                                                              (line 106)
* scroll-backward:                       Scrolling Commands.  (line  51)
* scroll-backward-page-only:             Scrolling Commands.  (line  69)
* scroll-backward-page-only-set-window:  Scrolling Commands.  (line  76)
* scroll-behavior:                       Variables.           (line 170)
* scroll-behaviour:                      Variables.           (line 171)
* scroll-forward:                        Scrolling Commands.  (line  18)
* scroll-forward-page-only:              Scrolling Commands.  (line  40)
* scroll-forward-page-only-set-window:   Scrolling Commands.  (line  45)
* scroll-half-screen-down:               Scrolling Commands.  (line  99)
* scroll-half-screen-up:                 Scrolling Commands.  (line 106)
* scroll-last-node:                      Variables.           (line 194)
* scroll-other-window:                   Basic Windows.       (line  42)
* scroll-step:                           Variables.           (line 208)
* scrolling:                             Scrolling Commands.  (line   6)
* scrolling through node structure:      Scrolling Commands.  (line 111)
* search:                                Searching Commands.  (line  11)
* search, and case-sensitivity:          Searching Commands.  (line  99)
* search, case-sensitive:                Searching Commands.  (line  54)
* search-backward:                       Searching Commands.  (line  19)
* search-case-sensitively:               Searching Commands.  (line  54)
* search-next:                           Searching Commands.  (line  29)
* search-previous:                       Searching Commands.  (line  42)
* search-skip-screen:                    Variables.           (line 218)
* searching:                             Searching Commands.  (line   6)
* Searching all indices:                 Invoking Info.       (line 115)
* searching, in the indices:             Index Commands.      (line  11)
* select-reference-this-line:            Selecting Xrefs.     (line  62)
* select-visited-node:                   Node Commands.       (line 169)
* Selecting text with the mouse:         Variables.           (line 155)
* set-screen-height:                     Miscellaneous Commands.
                                                              (line 106)
* set-variable:                          Variables.           (line  20)
* Shift-TAB, in Info windows:            Selecting Xrefs.     (line  57)
* Shift-TAB, in the echo area:           The Echo Area.       (line  80)
* Shift-TAB, in the echo area <1>:       The Echo Area.       (line  82)
* show-footnotes:                        Miscellaneous Commands.
                                                              (line 116)
* show-index-match:                      Variables.           (line 229)
* slow network connections:              Variables.           (line 124)
* SPC, in Info windows:                  Scrolling Commands.  (line  17)
* SPC, in the echo area:                 The Echo Area.       (line 130)
* speech synthesizers:                   Invoking Info.       (line 287)
* split-window:                          Basic Windows.       (line  26)
* startup node, specifying:              Invoking Info.       (line 185)
* t:                                     Node Commands.       (line  59)
* TAB, in Info windows:                  Selecting Xrefs.     (line  46)
* TAB, in the echo area:                 The Echo Area.       (line 130)
* tile-windows:                          Basic Windows.       (line  52)
* tiling:                                Basic Windows.       (line  52)
* toggle-regexp:                         Searching Commands.  (line  49)
* toggle-wrap:                           Scrolling Commands.  (line 128)
* top-node:                              Node Commands.       (line  59)
* tree-search:                           Searching Commands.  (line  70)
* tree-search-next:                      Searching Commands.  (line  75)
* tree-search-previous:                  Searching Commands.  (line  75)
* u:                                     Node Commands.       (line  35)
* u, vi-like operation:                  Scrolling Commands.  (line 106)
* Underlined text:                       Colors and Styles.   (line  57)
* universal-argument:                    Miscellaneous Commands.
                                                              (line  49)
* UP (an arrow key):                     Cursor Commands.     (line  30)
* UP, vi-like operation:                 Scrolling Commands.  (line  94)
* up-line:                               Scrolling Commands.  (line  94)
* up-node:                               Node Commands.       (line  35)
* variable assignment:                   Invoking Info.       (line 312)
* variables, describing:                 Variables.           (line  26)
* variables, setting:                    Variables.           (line  20)
* version information:                   Invoking Info.       (line 315)
* vi-like key bindings:                  Invoking Info.       (line 318)
* view-file:                             Node Commands.       (line 158)
* virtual-index:                         Index Commands.      (line  15)
* visible-bell:                          Variables.           (line 235)
* w, vi-like operation:                  Scrolling Commands.  (line  76)
* Where is an Info manual?:              Invoking Info.       (line 326)
* where-is:                              Miscellaneous Commands.
                                                              (line  21)
* windows, creating:                     Basic Windows.       (line  26)
* windows, deleting:                     Basic Windows.       (line  34)
* windows, manipulating:                 Window Commands.     (line   6)
* windows, selecting:                    Basic Windows.       (line  12)
* xref-item:                             Selecting Xrefs.     (line  38)
* xterm mouse selections:                Variables.           (line 155)
* y, vi-like operation:                  Scrolling Commands.  (line  94)
* z, vi-like operation:                  Scrolling Commands.  (line  45)
* ZZ, vi-like operation:                 Miscellaneous Commands.
                                                              (line  99)



Tag Table:
Node: Top1537
Node: Stand-alone Info3061
Node: Invoking Info4577
Ref: command-line menu items7267
Ref: --all8445
Ref: --apropos9275
Ref: INFOPATH10646
Ref: --init-file14068
Ref: --raw-escapes15047
Ref: --show-options16481
Ref: variable-assignment18210
Ref: --vi-keys18383
Ref: Invoking Info-Footnote-118983
Node: Cursor Commands19365
Ref: Cursor Commands-Footnote-121931
Ref: Cursor Commands-Footnote-222214
Node: Scrolling Commands22402
Node: Node Commands28705
Ref: goto-node32442
Ref: goto-invocation33013
Node: Searching Commands36178
Ref: repeated-search37251
Ref: Searching Commands-Footnote-141205
Node: Index Commands41312
Node: Xref Commands43002
Node: Parts of an Xref43617
Node: Selecting Xrefs45590
Node: Window Commands47745
Node: The Mode Line48688
Node: Basic Windows50069
Node: The Echo Area52553
Node: Printing Nodes58027
Node: Miscellaneous Commands59184
Node: Variables63783
Ref: cursor-movement-scrolls66223
Ref: infopath-no-defaults68927
Ref: min-search-length70703
Ref: scroll-behavior72003
Node: Colors and Styles75072
Node: Custom Key Bindings77395
Ref: Custom Key Bindings-Footnote-178348
Node: infokey format78553
Node: Index82893

End Tag Table
