This release of Info is version 2.11.  Please read the file README.

Version 2.11,     Sat Apr  1 09:15:21 1995

Changes since 2.7 beta:

Although the basic code remains the same, there are numerous nits
fixed, including some display bugs, and a memory leak.  Some changes
that have taken place with larger impact include the way in which the
(dir) node is built; I have added in support for "localdir"
directories among other things.  Info files may be stored in
compressed formats, and in their own subdirectories; menu items which
do not explicitly name the node to which they are attached have the
menu item name looked up as an Info file if it is not found within the
current document.  This means that the menu item:

* Info::		The Info documentation reader.

in (dir) refers to the info node "(info)Top".

Please see the ChangeLog and documentation for details on other
changes.

Version 2.7 beta, Wed Dec 30 02:02:38 1992
Version 2.6 beta, Tue Dec 22 03:58:07 1992
Version 2.5 beta, Tue Dec  8 14:50:35 1992
Version 2.4 beta, Sat Nov 28 14:34:02 1992
Version 2.3 beta, Fri Nov 27 01:04:13 1992
Version 2.2 beta, Tue Nov 24 09:36:08 1992
Version 2.1 beta, Tue Nov 17 23:29:36 1992

Changes since 2.5 beta:

Note that versions 2.6 and 2.7 Beta were only released to a select group.

* "info-" removed from the front of M-x commands.

* Automatic footnote display.  When you enter a node which contains
  footnotes, and the variable "automatic-footnotes" is "On", Info pops
  up a window containing the footnotes.  Likewise, when you leave that
  node, the window containing the footnotes goes away.

* Cleaner built in documentation, and documentation functions.

  Use:
    o `M-x describe-variable' to read a variable's documenation
    o `M-x describe-key' to find out what a particular keystroke does.
    o `M-x describe-function' to read a function's documentation.
    o `M-x where-is' to find out what keys invoke a particular function.

* Info can "tile" the displayed windows (via "M-x tile-windows").  If
  the variable "automatic-tiling" is "On", then splitting a window or
  deleting a window causes the remaining windows to be retiled.

* You can save every keystroke you type in a "dribble file" by using the
  `--dribble FILENAME' option.  You can initially read keystrokes from an
  alternate input stream with `--restore FILENAME', or by redirecting
  input on the command line `info < old-dribble'.

* New behaviour of menu items.  If the label is the same as the
  target node name, and the node couldn't be found in the current file,
  treat the label as a file name.  For example, a menu entry in "DIR"
  might contain:

    * Emacs::		Cool text-editor.

  Info would not find the node "(dir)Emacs", so just plain "(emacs)"
  would be tried.

* New variable "ISO-Latin" allows you to use European machines with
  8-bit character sets.

* Cleanups in echo area reading, and redisplay.  Cleanups in handling the
  window which shows possible completions.

* Info can now read files that have been compressed.  An array in filesys.c
  maps extensions to programs that can decompress stdin, and write the results
  to stdout.  Currently, ".Z"/uncompress, ".z"/gunzip, and ".Y"/unyabba are
  supported.  The modeline for a compressed file shows "zz" in it.

* There is a new variable "gc-compressed-files" which, if non-zero, says
  it is okay to reclaim the file buffer space allocated to a file which
  was compressed, if, and only if, that file's contents do not appear in
  any history node.

* New file `nodemenu.c' implements a few functions for manipulating
  previously visited nodes.  `C-x C-b' (list-visited-nodes) produces a
  menu of the nodes that could be reached by info-history-node in some
  window.  `C-x b' (select-visited-node) is similar, but reads one of
  the node names with completion.

* Keystroke `M-r' (move_to_screen_line) allows the user to place the cursor at
  the start of a specific screen line.  Without a numeric argument, place the
  cursor on the center line; with an arg, place the cursor on that line.

* Interruptible display implemented.  Basic display speedups and hacks.
* The message "*** Tags Out of Date ***" now means what it says.
* Index searching with `,' (info-index-next) has been improved.
* When scrolling with C-v, C-M-v, or M-v, only "Page Only" scrolling
  will happen.

* Continous scrolling (along with `]' (info-global-next) and `['
  (info-global-prev) works better.  `]' and `[' accept numeric
  arguments, moving that many nodes in that case.

* `C-x w' (info-toggle-wrap) controls how lines wider than the width
  of the screen are displayed.  If a line is too long, a `$' is
  displayed in the rightmost column of the window.

* There are some new variables for controlling the behaviour of Info
  interactively.  The current list of variables is as follows:

  Variable Name      Default Value  Description
  -------------      -------------  -----------
  `automatic-footnotes' On	    When "On", footnotes appear and
				    disappear automatically.

  `automatic-tiling'    Off	    When "On", creating of deleting a
				    window resizes other windows.

  `visible-bell'        Off	    If non-zero, try to use a visible bell.

  `errors-ring-bell'    On	    If non-zero, errors cause a ring.

  `show-index-match'    On	    If non-zero, the portion of the string
				    matched is highlighted by changing its
				    case.

  `scroll-behaviour'    Continuous  One of "Continuous", "Next Only", or
				    "Page Only".  "Page Only" prevents you from
				    scrolling past the bottom or top of a node.
				    "Next Only" causes the Next or Prev node to
				    be selected when you scroll past the bottom
				    or top of a node.  "Continous" moves
				    linearly through the files hierchichal
				    structure.

  `scroll-step'	        0	    Controls how scrolling is done for you when
				    the cursor moves out of the current window.
				    Non-zero means it is the number of lines
				    you would like the screen to shift.  A
				    value of 0 means to center the line
				    containing the cursor in the window.

  `gc-compressed-files' Off	    If non-zero means it is okay to reclaim the
				    file buffer space allocated to a file which
				    was compressed, if, and only if, that
				    file's contents do not appear in the node
				    list of any window.

  `ISO-Latin'	        Off	    Non-zero means that you are using an ISO
				    Latin character set.  By default, standard
				    ASCII characters are assumed.
________________________________________
This release of Info is version 2.5 beta.

Changes since 2.4 beta:

* Index (i) and (,) commands fully implemented.
* "configure" script now shipped with Info.
* New function "set-variable" allows users to set various variables.
* User-settable behaviour on end or beginning of node scrolling.  This
  supercedes the SPC and DEL changes in 2.3 beta.

________________________________________
This release of Info is version 2.4 beta.

Changes since 2.3 beta:

* info-last-node now means move to the last node of this info file.
* info-history-node means move backwards through this window's node history.
* info-first-node moves to the first node in the Info file.  This node is
  not necessarily "Top"!
* SPC and DEL can select the Next or Prev node after printing an informative
  message when pressed at the end/beg of a node.

----------------------------------------
This release of Info is version 2.3 beta.

Changes since 2.2 beta:

* M-x command lines if NAMED_COMMANDS is #defined.  Variable in Makefile.
* Screen height changes made quite robust.
* Interactive function "set-screen-height" implements user height changes.
* Scrolling on some terminals is faster now.
* C-l with numeric arguement is fixed.

----------------------------------------
This release of Info is version 2.2 beta.

Changes since 2.0:

* C-g can now interrupt multi-file searches.
* Incremental search is fully implemented.
* Loading large tag tables is much faster now.
* makedoc.c replaces shell script, speeding incremental builds.
* Scrolling in redisplay is implemented.
* Recursive uses of the echo area made more robust.
* Garbage collection of unreferenced nodes.

