diff etc/LNEWS @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/LNEWS	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,3171 @@
+This is Info file LNEWS, produced by Makeinfo-1.55 from the input file
+news.texi.
+
+   This file describes the new Lisp features of Emacs version 19 as
+first released to the public.  For Lisp changes in subsequent Emacs 19
+releases, see the file NEWS.
+
+New Features in the Lisp Language
+=================================
+
+   * The new function `delete' is a traditional Lisp function.  It takes
+     two arguments, ELT and LIST, and deletes from LIST any elements
+     that are equal to ELT.  It uses the function `equal' to compare
+     elements with ELT.
+
+   * The new function `member' is a traditional Lisp function.  It takes
+     two arguments, ELT and LIST, and finds the first element of LIST
+     that is equal to ELT.  It uses the function `equal' to compare
+     each list element with ELT.
+
+     The value is a sublist of LIST, whose first element is the one
+     that was found.  If no matching element is found, the value is
+     `nil'.
+
+   * The new function `indirect-function' finds the effective function
+     definition of an object called as a function.  If the object is a
+     symbol, `indirect-function' looks in the function definition of the
+     symbol.  It keeps doing this until it finds something that is not a
+     symbol.
+
+   * There are new escape sequences for use in character and string
+     constants.  The escape sequence `\a' is equivalent to `\C-g', the
+     ASCII BEL character (code 7).  The escape sequence `\x' followed
+     by a hexidecimal number represents the character whose ASCII code
+     is that number.  There is no limit on the number of digits in the
+     hexidecimal value.
+
+   * The function `read' when reading from a buffer now does not skip a
+     terminator character that terminates a symbol.  It leaves that
+     character to be read (or just skipped, if it is whitespace) next
+     time.
+
+   * When you use a function FUNCTION as the input stream for `read',
+     it is usually called with no arguments, and should return the next
+     character.  In Emacs 19, sometimes FUNCTION is called with one
+     argument (always a character).  When that happens, FUNCTION should
+     save the argument and arrange to return it when called next time.
+
+   * `random' with integer argument N returns a random number between 0
+     and N-1.
+
+   * The functions `documentation' and `documentation-property' now
+     take an additional optional argument which, if non-`nil', says to
+     refrain from calling `substitute-command-keys'.  This way, you get
+     the exact text of the documentation string as written, without the
+     usual substitutions.  Make sure to call `substitute-command-keys'
+     yourself if you decide to display the string.
+
+   * The new function `invocation-name' returns as a string the program
+     name that was used to run Emacs, with any directory names
+     discarded.
+
+   * The new function `map-y-or-n-p' makes it convenient to ask a series
+     of similar questions.  The arguments are PROMPTER, ACTOR, LIST,
+     and optional HELP.
+
+     The value of LIST is a list of objects, or a function of no
+     arguments to return either the next object or `nil' meaning there
+     are no more.
+
+     The argument PROMPTER specifies how to ask each question.  If
+     PROMPTER is a string, the question text is computed like this:
+
+          (format PROMPTER OBJECT)
+
+     where OBJECT is the next object to ask about.
+
+     If not a string, PROMPTER should be a function of one argument
+     (the next object to ask about) and should return the question text.
+
+     The argument ACTOR should be a function of one argument, which is
+     called with each object that the user says yes for.  Its argument
+     is always one object from LIST.
+
+     If HELP is given, it is a list `(OBJECT OBJECTS ACTION)', where
+     OBJECT is a string containing a singular noun that describes the
+     objects conceptually being acted on; OBJECTS is the corresponding
+     plural noun and ACTION is a transitive verb describing ACTOR.  The
+     default is `("object" "objects" "act on")'.
+
+     Each time a question is asked, the user may enter `y', `Y', or SPC
+     to act on that object; `n', `N', or DEL to skip that object; `!'
+     to act on all following objects; ESC or `q' to exit (skip all
+     following objects); `.' (period) to act on the current object and
+     then exit; or `C-h' to get help.
+
+     `map-y-or-n-p' returns the number of objects acted on.
+
+   * You can now "set" environment variables with the `setenv' command.
+     This works by setting the variable `process-environment', which
+     `getenv' now examines in preference to the environment Emacs
+     received from its parent.
+
+New Features for Loading Libraries
+==================================
+
+   You can now arrange to run a hook if a particular Lisp library is
+loaded.
+
+   The variable `after-load-alist' is an alist of expressions to be
+evalled when particular files are loaded.  Each element looks like
+`(FILENAME FORMS...)'.
+
+   When `load' is run and the file name argument equals FILENAME, the
+FORMS in the corresponding element are executed at the end of loading.
+fILENAME must match exactly!  Normally FILENAME is the name of a
+library, with no directory specified, since that is how `load' is
+normally called.
+
+   An error in FORMS does not undo the load, but does prevent execution
+of the rest of the FORMS.
+
+   The function `eval-after-load' provides a convenient way to add
+entries to the alist.  Call it with two arguments, FILE and a form to
+execute.
+
+   The function `autoload' now supports autoloading a keymap.  Use
+`keymap' as the fourth argument if the autoloaded function will become
+a keymap when loaded.
+
+   There is a new feature for specifying which functions in a library
+should be autoloaded by writing special "magic" comments in that
+library itself.
+
+   Write `;;;###autoload' on a line by itself before the real
+definition of the function, in its autoloadable source file; then the
+command `M-x update-file-autoloads' automatically puts the `autoload'
+call into `loaddefs.el'.
+
+   You can also put other kinds of forms into `loaddefs.el', by writing
+`;;;###autoload' followed on the same line by the form.  `M-x
+update-file-autoloads' copies the form from that line.
+
+Compilation Features
+====================
+
+   * Inline functions.
+
+     You can define an "inline function" with `defsubst'.  Use
+     `defsubst' just like `defun', and it defines a function which you
+     can call in all the usual ways.  Whenever the function thus defined
+     is used in compiled code, the compiler will open code it.
+
+     You can get somewhat the same effects with a macro, but a macro
+     has the limitation that you can use it only explicitly; a macro
+     cannot be called with `apply', `mapcar' and so on.  Also, it takes
+     some work to convert an ordinary function into a macro.  To
+     convert it into an inline function, simply replace `defun' with
+     `defsubst'.
+
+     Making a function inline makes explicit calls run faster.  But it
+     also has disadvantages.  For one thing, it reduces flexibility; if
+     you change the definition of the function, calls already inlined
+     still use the old definition until you recompile them.
+
+     Another disadvantage is that making a large function inline can
+     increase the size of compiled code both in files and in memory.
+     Since the advantages of inline functions are greatest for small
+     functions, you generally should not make large functions inline.
+
+     Inline functions can be used and open coded later on in the same
+     file, following the definition, just like macros.
+
+   * The command `byte-compile-file' now offers to save any buffer
+     visiting the file you are compiling.
+
+   * The new command `compile-defun' reads, compiles and executes the
+     defun containing point.  If you use this on a defun that is
+     actually a function definition, the effect is to install a
+     compiled version of that function.
+
+   * Whenever you load a Lisp file or library, you now receive a
+     warning if the directory contains both a `.el' file and a `.elc'
+     file, and the `.el' file is newer.  This typically indicates that
+     someone has updated the Lisp code but forgotten to recompile it,
+     so the changes do not take effect.  The warning is a reminder to
+     recompile.
+
+   * The special form `eval-when-compile' marks the forms it contains to
+     be evaluated at compile time *only*.  At top-level, this is
+     analogous to the Common Lisp idiom `(eval-when (compile) ...)'.
+     Elsewhere, it is similar to the Common Lisp `#.' reader macro (but
+     not when interpreting).
+
+     If you're thinking of using this feature, we recommend you
+     consider whether `provide' and `require' might do the job as well.
+
+   * The special form `eval-and-compile' is similar to
+     `eval-when-compile', but the whole form is evaluated both at
+     compile time and at run time.
+
+     If you're thinking of using this feature, we recommend you consider
+     whether `provide' and `require' might do the job as well.
+
+   * Emacs Lisp has a new data type for byte-code functions.  This makes
+     them faster to call, and also saves space.  Internally, a byte-code
+     function object is much like a vector; however, the evaluator
+     handles this data type specially when it appears as a function to
+     be called.
+
+     The printed representation for a byte-code function object is like
+     that for a vector, except that it starts with `#' before the
+     opening `['.  A byte-code function object must have at least four
+     elements; there is no maximum number, but only the first six
+     elements are actually used.  They are:
+
+    ARGLIST
+          The list of argument symbols.
+
+    BYTE-CODE
+          The string containing the byte-code instructions.
+
+    CONSTANTS
+          The vector of constants referenced by the byte code.
+
+    STACKSIZE
+          The maximum stack size this function needs.
+
+    DOCSTRING
+          The documentation string (if any); otherwise, `nil'.
+
+    INTERACTIVE
+          The interactive spec (if any).  This can be a string or a Lisp
+          expression.  It is `nil' for a function that isn't
+          interactive.
+
+     The predicate `byte-code-function-p' tests whether a given object
+     is a byte-code function.
+
+     You can create a byte-code function object in a Lisp program with
+     the function `make-byte-code'.  Its arguments are the elements to
+     put in the byte-code function object.
+
+     You should not try to come up with the elements for a byte-code
+     function yourself, because if they are inconsistent, Emacs may
+     crash when you call the function.  Always leave it to the byte
+     compiler to create these objects; it, we hope, always makes the
+     elements consistent.
+
+Floating Point Numbers
+======================
+
+   You can now use floating point numbers in Emacs, if you define the
+macro `LISP_FLOAT_TYPE' when you compile Emacs.
+
+   The printed representation for floating point numbers requires
+either a decimal point surrounded by digits, or an exponent, or both.
+For example, `1500.0', `15e2', `15.0e2' and `1.5e3' are four ways of
+writing a floating point number whose value is 1500.
+
+   The existing predicate `numberp' now returns `t' if the argument is
+any kind of number--either integer or floating.  The new predicates
+`integerp' and `floatp' check for specific types of numbers.
+
+   You can do arithmetic on floating point numbers with the ordinary
+arithmetic functions, `+', `-', `*' and `/'.  If you call one of these
+functions with both integers and floating point numbers among the
+arguments, the arithmetic is done in floating point.  The same applies
+to the numeric comparison functions such as `=' and `<'.  The remainder
+function `%' does not accept floating point arguments, and neither do
+the bitwise boolean operations such as `logand' or the shift functions
+such as `ash'.
+
+   There is a new arithmetic function, `abs', which returns the absolute
+value of its argument.  It handles both integers and floating point
+numbers.
+
+   To convert an integer to floating point, use the function `float'.
+There are four functions to convert floating point numbers to integers;
+they differ in how they round.  `truncate' rounds toward 0, `floor'
+rounds down, `ceil' rounds up, and `round' produces the nearest integer.
+
+   You can use `logb' to extract the binary exponent of a floating
+point number.  More precisely, it is the logarithm base 2, rounded down
+to an integer.
+
+   Emacs has several new mathematical functions that accept any kind of
+number as argument, but always return floating point numbers.
+
+`cos'
+`sin'
+`tan'
+     Trigonometric functions.
+
+`acos'
+`asin'
+`atan'
+     Inverse trigonometric functions.
+
+`exp'
+     The exponential function (power of E).
+
+`log'
+     Logarithm base E.
+
+`log10'
+     Logarithm base 10
+
+`expt'
+     Raise X to power Y.
+
+`sqrt'
+     The square root function.
+
+   The new function `string-to-number' now parses a string containing
+either an integer or a floating point number, returning the number.
+
+   The `format' function now handles the specifications `%e', `%f' and
+`%g' for printing floating point numbers; likewise `message'.
+
+   The new variable `float-output-format' controls how Lisp prints
+floating point numbers.  Its value should be `nil' or a string.
+
+   If it is a string, it should contain a `%'-spec like those accepted
+by `printf' in C, but with some restrictions.  It must start with the
+two characters `%.'.  After that comes an integer which is the
+precision specification, and then a letter which controls the format.
+
+   The letters allowed are `e', `f' and `g'.  Use `e' for exponential
+notation (`DIG.DIGITSeEXPT').  Use `f' for decimal point notation
+(`DIGITS.DIGITS').  Use `g' to choose the shorter of those two formats
+for the number at hand.
+
+   The precision in any of these cases is the number of digits following
+the decimal point.  With `e', a precision of 0 means to omit the
+decimal point.  0 is not allowed with `f' or `g'.
+
+   A value of `nil' means to use the format `%.20g'.
+
+   No matter what the value of `float-output-format', printing ensures
+that the result fits the syntax rules for a floating point number.  If
+it doesn't fit (for example, if it looks like an integer), it is
+modified to fit.  By contrast, the `format' function formats floating
+point numbers without requiring the output to fit the syntax rules for
+floating point number.
+
+New Features for Printing And Formatting Output
+===============================================
+
+   * The `format' function has a new feature: `%S'.  This print spec
+     prints any kind of Lisp object, even a string, using its Lisp
+     printed representation.
+
+     By contrast, `%s' prints everything without quotation.
+
+   * `prin1-to-string' now takes an optional second argument which says
+     not to print the Lisp quotation characters.  (In other words, to
+     use `princ' instead of `prin1'.)
+
+   * The new variable `print-level' specifies the maximum depth of list
+     nesting to print before cutting off all deeper structure.  A value
+     of `nil' means no limit.
+
+Changes in Basic Editing Functions
+==================================
+
+   * There are two new primitives for putting text in the kill ring:
+     `kill-new' and `kill-append'.
+
+     The function `kill-new' adds a string to the front of the kill
+     ring.
+
+     Use `kill-append' to add a string to a previous kill.  The second
+     argument BEFORE-P, if non-`nil', says to add the string at the
+     beginning; otherwise, it goes at the end.
+
+     Both of these functions apply `interprogram-cut-function' to the
+     entire string of killed text that ends up at the beginning of the
+     kill ring.
+
+   * The new function `current-kill' rotates the yanking pointer in the
+     kill ring by N places, and returns the text at that place in the
+     ring.  If the optional second argument DO-NOT-MOVE is non-`nil',
+     it doesn't actually move the yanking point; it just returns the
+     Nth kill forward.  If N is zero, indicating a request for the
+     latest kill, `current-kill' calls `interprogram-paste-function'
+     (documented below) before consulting the kill ring.
+
+     All Emacs Lisp programs should either use `current-kill',
+     `kill-new', and `kill-append' to manipulate the kill ring, or be
+     sure to call `interprogram-paste-function' and
+     `interprogram-cut-function' as appropriate.
+
+   * The variables `interprogram-paste-function' and
+     `interprogram-cut-function' exist so that you can provide functions
+     to transfer killed text to and from other programs.
+
+   * The `kill-region' function can now be used in read-only buffers.
+     It beeps, but adds the region to the kill ring without deleting it.
+
+   * The new function `compare-buffer-substrings' lets you compare two
+     substrings of the same buffer or two different buffers.  Its
+     arguments look like this:
+
+          (compare-buffer-substrings BUF1 BEG1 END1 BUF2 BEG2 END2)
+
+     The first three arguments specify one substring, giving a buffer
+     and two positions within the buffer.  The last three arguments
+     specify the other substring in the same way.
+
+     The value is negative if the first substring is less, positive if
+     the first is greater, and zero if they are equal.  The absolute
+     value of the result is one plus the index of the first different
+     characters.
+
+   * Overwrite mode treats tab and newline characters specially.  You
+     can now turn off this special treatment by setting
+     `overwrite-binary-mode' to `t'.
+
+   * Once the mark "exists" in a buffer, it normally never ceases to
+     exist.  However, in Transient Mark mode, it may become "inactive".
+     The variable `mark-active', which is always local in all buffers,
+     indicates whether the mark is active: non-`nil' means yes.
+
+     When the mark is inactive, the function `mark' normally gets an
+     error.  However, `(mark t)' returns the position of the inactive
+     mark.
+
+     The function `push-mark' normally does not activate the mark.
+     However, it accepts an optional third argument ACTIVATE which, if
+     non-`nil', says to activate.
+
+     A command can request deactivation of the mark upon return to the
+     editor command loop by setting `deactivate-mark' to a non-`nil'
+     value.  Transient Mark mode works by causing the command loop to
+     take note of `deactivate-mark' and actually deactivate the mark.
+
+     Transient Mark mode enables highlighting of the region when the
+     mark is active.  This is currently implemented only under the X
+     Window System.  A few other commands vary their behavior slightly
+     in this case, by testing `transient-mark-mode'.  More
+     specifically, they avoid special display actions such as moving
+     the cursor temporarily, which are not needed when the region is
+     shown by highlighting.
+
+     The variables `activate-mark-hook' and `deactivate-mark-hook' are
+     normal hooks run, respectively, when the mark becomes active and
+     when it becomes inactive.  The hook `activate-mark-hook' is also
+     run at the end of a command if the mark is active and the region
+     may have changed.
+
+   * The function `move-to-column' now accepts a second optional
+     argument FORCE, in addition to COLUMN; if the requested column
+     COLUMN is in the middle of a tab character and FORCE is non-`nil',
+     `move-to-column' replaces the tab with the appropriate sequence of
+     spaces so that it can place point exactly at COLUMN.
+
+   * The search functions when successful now return the value of point
+     rather than just `t'.  This affects the functions
+     `search-forward', `search-backward', `word-search-forward',
+     `word-search-backward', `re-search-forward', and
+     `re-search-backward'.
+
+   * When you do regular expression searching or matching, there is no
+     longer a limit to how many `\(...\)' pairs you can get information
+     about with `match-beginning' and `match-end'.  Also, these
+     parenthetical groupings may now be nested to any degree.
+
+   * In a regular expression, when you use an asterisk after a
+     parenthetical grouping, and then ask about what range was matched
+     by the grouping, Emacs 19 reports just its last occurrence.  Emacs
+     18 used to report the range of all the repetitions put together.
+
+     For example,
+
+          (progn
+           (string-match "f\\(o\\)*" "foo")
+           (list (match-beginning 1)
+                 (match-end 1)))
+
+     returns `(2 3)' in Emacs 19, corresponding to just the last
+     repetition of `\(o\)'.  In Emacs 18, that expression returns `(1
+     3)', encompassing both repetitions.
+
+     If you want the Emacs 18 behavior, use a grouping *containing* the
+     asterisk: `"f\\(o*\\)"'.
+
+   * The new special form `save-match-data' preserves the regular
+     expression match status.  Usage: `(save-match-data BODY...)'.
+
+   * The function `translate-region' applies a translation table to the
+     characters in a part of the buffer.  Invoke it as
+     `(translate-region START END TABLE)'; START and END bound the
+     region to translate.
+
+     The translation table TABLE is a string; `(aref TABLE OCHAR)'
+     gives the translated character corresponding to OCHAR.  If the
+     length of TABLE is less than 256, any characters with codes larger
+     than the length of TABLE are not altered by the translation.
+
+     `translate-region' returns the number of characters which were
+     actually changed by the translation.  This does not count
+     characters which were mapped into themselves in the translation
+     table.
+
+   * There are two new hook variables that let you notice all changes
+     in all buffers (or in a particular buffer, if you make them
+     buffer-local): `before-change-function' and
+     `after-change-function'.
+
+     If `before-change-function' is non-`nil', then it is called before
+     any buffer modification.  Its arguments are the beginning and end
+     of the region that is going to change, represented as integers.
+     The buffer that's about to change is always the current buffer.
+
+     If `after-change-function' is non-`nil', then it is called after
+     any buffer modification.  It takes three arguments: the beginning
+     and end of the region just changed, and the length of the text that
+     existed before the change.  (To get the current length, subtract
+     the region beginning from the region end.)  All three arguments are
+     integers.  The buffer that has just changed is always the current
+     buffer.
+
+     Both of these variables are temporarily bound to `nil' during the
+     time that either of these hooks is running.  This means that if
+     one of these functions changes the buffer, that change won't run
+     these functions.  If you do want hooks to be run recursively,
+     write your hook functions to bind these variables back to their
+     usual values.
+
+   * The hook `first-change-hook' is run using `run-hooks' whenever a
+     buffer is changed that was previously in the unmodified state.
+
+   * The second argument to `insert-abbrev-table-description' is now
+     optional.
+
+Text Properties
+===============
+
+   Each character in a buffer or a string can have a "text property
+list", much like the property list of a symbol.  The properties belong
+to a particular character at a particular place, such as, the letter
+`T' at the beginning of this sentence.  Each property has a name, which
+is usually a symbol, and an associated value, which can be any Lisp
+object--just as for properties of symbols.
+
+   You can use the property `face' to control the font and color of
+text.  Several other property names have special meanings.  You can
+create properties of any name and examine them later for your own
+purposes.
+
+   Copying text between strings and buffers preserves the properties
+along with the characters; this includes such diverse functions as
+`substring', `insert', and `buffer-substring'.
+
+   Since text properties are considered part of the buffer contents,
+changing properties in a buffer "modifies" the buffer, and you can also
+undo such changes.
+
+   Strings with text properties have a special printed representation
+which describes all the properties.  This representation is also the
+read syntax for such a string.  It looks like this:
+
+     #("CHARACTERS" PROPERTY-DATA...)
+
+where PROPERTY-DATA is zero or more elements in groups of three as
+follows:
+
+     BEG END PLIST
+
+The elements BEG and END are integers, and together specify a portion
+of the string; PLIST is the property list for that portion.
+
+Examining Text Properties
+-------------------------
+
+   The simplest way to examine text properties is to ask for the value
+of a particular property of a particular character.  For that, use
+`get-text-property'.  Use `text-properties-at' to get the entire
+property list of a character.
+
+   `(get-text-property POS PROP OBJECT)' returns the PROP property of
+the character after POS in OBJECT (a buffer or string).  The argument
+OBJECT is optional and defaults to the current buffer.
+
+   `(text-properties-at POS OBJECT)' returns the entire property list
+of the character after POS in the string or buffer OBJECT (which
+defaults to the current buffer).
+
+Changing Text Properties
+------------------------
+
+   There are four primitives for changing properties of a specified
+range of text:
+
+`add-text-properties'
+     This function puts on specified properties, leaving other existing
+     properties unaltered.
+
+`put-text-property'
+     This function puts on a single specified property, leaving others
+     unaltered.
+
+`remove-text-properties'
+     This function removes specified properties, leaving other
+     properties unaltered.
+
+`set-text-properties'
+     This function replaces the entire property list, leaving no
+     vestige of the properties that that text used to have.
+
+   All these functions take four arguments: START, END, PROPS, and
+OBJECT.  The last argument is optional and defaults to the current
+buffer.  The argument PROPS has the form of a property list.
+
+Property Search Functions
+-------------------------
+
+   In typical use of text properties, most of the time several or many
+consecutive characters have the same value for a property.  Rather than
+writing your programs to examine characters one by one, it is much
+faster to process chunks of text that have the same property value.
+
+   The functions `next-property-change' and `previous-property-change'
+scan forward or backward from position POS in OBJECT, looking for a
+change in any property between two characters scanned.  They returns
+the position between those two characters, or `nil' if no change is
+found.
+
+   The functions `next-single-property-change' and
+`previous-single-property-change' are similar except that you specify a
+particular property and they look for changes in the value of that
+property only.  The property is the second argument, and OBJECT is
+third.
+
+Special Properties
+------------------
+
+   If a character has a `category' property, we call it the "category"
+of the character.  It should be a symbol.  The properties of the symbol
+serve as defaults for the properties of the character.
+
+   You can use the property `face' to control the font and color of
+text.
+
+   You can specify a different keymap for a portion of the text by means
+of a `local-map' property.  The property's value, for the character
+after point, replaces the buffer's local map.
+
+   If a character has the property `read-only', then modifying that
+character is not allowed.  Any command that would do so gets an error.
+
+   If a character has the property `modification-hooks', then its value
+should be a list of functions; modifying that character calls all of
+those functions.  Each function receives two arguments: the beginning
+and end of the part of the buffer being modified.  Note that if a
+particular modification hook function appears on several characters
+being modified by a single primitive, you can't predict how many times
+the function will be called.
+
+   Insertion of text does not, strictly speaking, change any existing
+character, so there is a special rule for insertion.  It compares the
+`read-only' properties of the two surrounding characters; if they are
+`eq', then the insertion is not allowed.  Assuming insertion is
+allowed, it then gets the `modification-hooks' properties of those
+characters and calls all the functions in each of them.  (If a function
+appears on both characters, it may be called once or twice.)
+
+   The special properties `point-entered' and `point-left' record hook
+functions that report motion of point.  Each time point moves, Emacs
+compares these two property values:
+
+   * the `point-left' property of the character after the old location,
+     and
+
+   * the `point-entered' property of the character after the new
+     location.
+
+If these two values differ, each of them is called (if not `nil') with
+two arguments: the old value of point, and the new one.
+
+   The same comparison is made for the characters before the old and new
+locations.  The result may be to execute two `point-left' functions
+(which may be the same function) and/or two `point-entered' functions
+(which may be the same function).  The `point-left' functions are
+always called before the `point-entered' functions.
+
+   A primitive function may examine characters at various positions
+without moving point to those positions.  Only an actual change in the
+value of point runs these hook functions.
+
+New Features for Files
+======================
+
+   * The new function `file-accessible-directory-p' tells you whether
+     you can open files in a particular directory.  Specify as an
+     argument either a directory name or a file name which names a
+     directory file.  The function returns `t' if you can open existing
+     files in that directory.
+
+   * The new function `file-executable-p' returns `t' if its argument
+     is the name of a file you have permission to execute.
+
+   * The function `file-truename' returns the "true name" of a
+     specified file.  This is the name that you get by following
+     symbolic links until none remain.  The argument must be an
+     absolute file name.
+
+   * New functions `make-directory' and `delete-directory' create and
+     delete directories.  They both take one argument, which is the
+     name of the directory as a file.
+
+   * The function `read-file-name' now takes an additional argument
+     which specifies an initial file name.  If you specify this
+     argument, `read-file-name' inserts it along with the directory
+     name.  It puts the cursor between the directory and the initial
+     file name.
+
+     The user can then use the initial file name unchanged, modify it,
+     or simply kill it with `C-k'.
+
+     If the variable `insert-default-directory' is `nil', then the
+     default directory is not inserted, and the new argument is ignored.
+
+   * The function `file-relative-name' does the inverse of
+     expansion--it tries to return a relative name which is equivalent
+     to FILENAME when interpreted relative to DIRECTORY.  (If such a
+     relative name would be longer than the absolute name, it returns
+     the absolute name instead.)
+
+   * The function `file-newest-backup' returns the name of the most
+     recent backup file for FILENAME, or `nil' that file has no backup
+     files.
+
+   * The list returned by `file-attributes' now has 12 elements.  The
+     12th element is the file system number of the file system that the
+     file is in.  This element together with the file's inode number,
+     which is the 11th element, give enough information to distinguish
+     any two files on the system--no two files can have the same values
+     for both of these numbers.
+
+   * The new function `set-visited-file-modtime' updates the current
+     buffer's recorded modification time from the visited file's time.
+
+     This is useful if the buffer was not read from the file normally,
+     or if the file itself has been changed for some known benign
+     reason.
+
+     If you give the function an argument, that argument specifies the
+     new value for the recorded modification time.  The argument should
+     be a list of the form `(HIGH . LOW)' or `(HIGH LOW)' containing
+     two integers, each of which holds 16 bits of the time.  (This is
+     the same format that `file-attributes' uses to return time values.)
+
+     The new function `visited-file-modtime' returns the recorded last
+     modification time, in that same format.
+
+   * The function `directory-files' now takes an optional fourth
+     argument which, if non-`nil', inhibits sorting the file names.
+     Use this if you want the utmost possible speed and don't care what
+     order the files are processed in.
+
+     If the order of processing is at all visible to the user, then the
+     user will probably be happier if you do sort the names.
+
+   * The variable `directory-abbrev-alist' contains an alist of
+     abbreviations to use for file directories.  Each element has the
+     form `(FROM . TO)', and says to replace FROM with TO when it
+     appears in a directory name.  This replacement is done when
+     setting up the default directory of a newly visited file.  The
+     FROM string is actually a regular expression; it should always
+     start with `^'.
+
+     You can set this variable in `site-init.el' to describe the
+     abbreviations appropriate for your site.
+
+   * The function `abbreviate-file-name' applies abbreviations from
+     `directory-abbrev-alist' to its argument, and substitutes `~' for
+     the user's home directory.
+
+     Abbreviated directory names are useful for directories that are
+     normally accessed through symbolic links.  If you think of the
+     link's name as "the name" of the directory, you can define it as
+     an abbreviation for the directory's official name; then ordinarily
+     Emacs will call that directory by the link name you normally use.
+
+   * `write-region' can write a given string instead of text from the
+     buffer.  Use the string as the first argument (in place of the
+     starting character position).
+
+     You can supply a second file name as the fifth argument (VISIT).
+     Use this to write the data to one file (the first argument,
+     FILENAME) while nominally visiting a different file (the fifth
+     argument, VISIT).  The argument VISIT is used in the echo area
+     message and also for file locking; VISIT is stored in
+     `buffer-file-name'.
+
+   * The value of `write-file-hooks' does not change when you switch to
+     a new major mode.  The intention is that these hooks have to do
+     with where the file came from, and not with what it contains.
+
+   * There is a new hook variable for saving files:
+     `write-contents-hooks'.  It works just like `write-file-hooks'
+     except that switching to a new major mode clears it back to `nil'.
+     Major modes should use this hook variable rather than
+     `write-file-hooks'.
+
+   * The hook `after-save-buffer-hook' runs just after a buffer has been
+     saved in its visited file.
+
+   * The new function `set-default-file-modes' sets the file protection
+     for new files created with Emacs.  The argument must be an
+     integer.  (It would be better to permit symbolic arguments like
+     the `chmod' program, but that would take more work than this
+     function merits.)
+
+     Use the new function `default-file-modes' to read the current
+     default file mode.
+
+   * Call the new function `unix-sync' to force all pending disk output
+     to happen as soon as possible.
+
+Making Certain File Names "Magic"
+=================================
+
+   You can implement special handling for a class of file names.  You
+must supply a regular expression to define the class of names (all those
+which match the regular expression), plus a handler that implements all
+the primitive Emacs file operations for file names that do match.
+
+   The value of `file-name-handler-alist' is a list of handlers,
+together with regular expressions that decide when to apply each
+handler.  Each element has the form `(REGEXP . HANDLER)'.  If a file
+name matches REGEXP, then all work on that file is done by calling
+HANDLER.
+
+   All the Emacs primitives for file access and file name transformation
+check the given file name against `file-name-handler-alist', and call
+HANDLER to do the work if appropriate.  The first argument given to
+HANDLER is the name of the primitive; the remaining arguments are the
+arguments that were passed to that primitive.  (The first of these
+arguments is typically the file name itself.)  For example, if you do
+this:
+
+     (file-exists-p FILENAME)
+
+and FILENAME has handler HANDLER, then HANDLER is called like this:
+
+     (funcall HANDLER 'file-exists-p FILENAME)
+
+   Here are the primitives that you can handle in this way:
+
+     `add-name-to-file', `copy-file', `delete-directory',
+     `delete-file', `directory-file-name', `directory-files',
+     `dired-compress-file', `dired-uncache', `expand-file-name',
+     `file-accessible-directory-p', `file-attributes',
+     `file-directory-p', `file-executable-p', `file-exists-p',
+     `file-local-copy', `file-modes', `file-name-all-completions',
+     `file-name-as-directory', `file-name-completion',
+     `file-name-directory', `file-name-nondirectory',
+     `file-name-sans-versions', `file-newer-than-file-p',
+     `file-readable-p', `file-symlink-p', `file-writable-p',
+     `insert-directory', `insert-file-contents', `load',
+     `make-directory', `make-symbolic-link', `rename-file',
+     `set-file-modes', `set-visited-file-modtime',
+     `unhandled-file-name-directory', `verify-visited-file-modtime',
+     `write-region'.
+
+   The handler function must handle all of the above operations, and
+possibly others to be added in the future.  Therefore, it should always
+reinvoke the ordinary Lisp primitive when it receives an operation it
+does not recognize.  Here's one way to do this:
+
+     (defun my-file-handler (operation &rest args)
+       ;; First check for the specific operations
+       ;; that we have special handling for.
+       (cond ((eq operation 'insert-file-contents) ...)
+             ((eq operation 'write-region) ...)
+             ...
+             ;; Handle any operation we don't know about.
+             (t (let (file-name-handler-alist)
+                  (apply operation args)))))
+
+   The function `file-local-copy' copies file FILENAME to the local
+site, if it isn't there already.  If FILENAME specifies a "magic" file
+name which programs outside Emacs cannot directly read or write, this
+copies the contents to an ordinary file and returns that file's name.
+
+   If FILENAME is an ordinary file name, not magic, then this function
+does nothing and returns `nil'.
+
+   The function `unhandled-file-name-directory' is used to get a
+non-magic directory name from an arbitrary file name.  It uses the
+directory part of the specified file name if that is not magic.
+Otherwise, it asks the file name's handler what to do.
+
+Frames
+======
+
+   Emacs now supports multiple X windows via a new data type known as a
+"frame".
+
+   A frame is a rectangle on the screen that contains one or more Emacs
+windows.  Subdividing a frame works just like subdividing the screen in
+earlier versions of Emacs.
+
+   There are two kinds of frames: terminal frames and X window frames.
+Emacs creates one terminal frame when it starts up with no X display; it
+uses Termcap or Terminfo to display using characters.  There is no way
+to create another terminal frame after startup.  If Emacs has an X
+display, it does not make a terminal frame, and there is none.
+
+   When you are using X windows, Emacs starts out with a single X window
+frame.  You can create any number of X window frames using `make-frame'.
+
+   Use the predicate `framep' to determine whether a given Lisp object
+is a frame.
+
+   The function `redraw-frame' redisplays the entire contents of a
+given frame.
+
+Creating and Deleting Frames
+----------------------------
+
+   Use `make-frame' to create a new frame.  This is the only primitive
+for creating frames.  In principle it could work under any window system
+which Emacs understands; the only one we support is X.
+
+   `make-frame' takes just one argument, which is an alist specifying
+frame parameters.  Any parameters not mentioned in the argument alist
+default based on the value of `default-frame-alist'; parameters not
+specified there default from the standard X defaults file and X
+resources.
+
+   When you invoke Emacs, if you specify arguments for window appearance
+and so forth, these go into `default-frame-alist' and that is how they
+have their effect.
+
+   You can specify the parameters for the initial startup X window
+frame by setting `initial-frame-alist' in your `.emacs' file.  If these
+parameters specify a separate minibuffer-only frame, and you have not
+created one, Emacs creates one for you, using the parameter values
+specified in `minibuffer-frame-alist'.
+
+   You can specify the size and position of a frame using the frame
+parameters `left', `top', `height' and `width'.  You must specify
+either both size parameters or neither.  You must specify either both
+position parameters or neither.  The geometry parameters that you don't
+specify are chosen by the window manager in its usual fashion.
+
+   The function `x-parse-geometry' converts a standard X-style geometry
+string to an alist which you can use as part of the argument to
+`make-frame'.
+
+   Use the function `delete-frame' to eliminate a frame.  Frames are
+like buffers where deletion is concerned; a frame actually continues to
+exist as a Lisp object until it is deleted *and* there are no
+references to it, but once it is deleted, it has no further effect on
+the screen.
+
+   The function `frame-live-p' returns non-`nil' if the argument (a
+frame) has not been deleted.
+
+Finding All Frames
+------------------
+
+   The function `frame-list' returns a list of all the frames that have
+not been deleted.  It is analogous to `buffer-list'.  The list that you
+get is newly created, so modifying the list doesn't have any effect on
+the internals of Emacs.  The function `visible-frame-list' returns the
+list of just the frames that are visible.
+
+   `next-frame' lets you cycle conveniently through all the frames from
+an arbitrary starting point.  Its first argument is a frame.  Its second
+argument MINIBUF says what to do about minibuffers:
+
+`nil'
+     Exclude minibuffer-only frames.
+
+a window
+     Consider only the frames using that particular window as their
+     minibuffer.
+
+anything else
+     Consider all frames.
+
+Frames and Windows
+------------------
+
+   All the non-minibuffer windows in a frame are arranged in a tree of
+subdivisions; the root of this tree is available via the function
+`frame-root-window'.  Each window is part of one and only one frame;
+you can get the frame with `window-frame'.
+
+   At any time, exactly one window on any frame is "selected within the
+frame".  You can get the frame's current selected window with
+`frame-selected-window'.  The significance of this designation is that
+selecting the frame selects for Emacs as a whole the window currently
+selected within that frame.
+
+   Conversely, selecting a window for Emacs with `select-window' also
+makes that window selected within its frame.
+
+Frame Visibility
+----------------
+
+   A frame may be "visible", "invisible", or "iconified".  If it is
+invisible, it doesn't show in the screen, not even as an icon.  You can
+set the visibility status of a frame with `make-frame-visible',
+`make-frame-invisible', and `iconify-frame'.  You can examine the
+visibility status with `frame-visible-p'--it returns `t' for a visible
+frame, `nil' for an invisible frame, and `icon' for an iconified frame.
+
+Selected Frame
+--------------
+
+   At any time, one frame in Emacs is the "selected frame".  The
+selected window always resides on the selected frame.
+
+ - Function: selected-frame
+     This function returns the selected frame.
+
+   The X server normally directs keyboard input to the X window that the
+mouse is in.  Some window managers use mouse clicks or keyboard events
+to "shift the focus" to various X windows, overriding the normal
+behavior of the server.
+
+   Lisp programs can switch frames "temporarily" by calling the function
+`select-frame'.  This does not override the window manager; rather, it
+escapes from the window manager's control until that control is somehow
+reasserted.  The function takes one argument, a frame, and selects that
+frame.  The selection lasts until the next time the user does something
+to select a different frame, or until the next time this function is
+called.
+
+   Emacs cooperates with the X server and the window managers by
+arranging to select frames according to what the server and window
+manager ask for.  It does so by generating a special kind of input
+event, called a "focus" event.  The command loop handles a focus event
+by calling `internal-select-frame'.
+
+Frame Size and Position
+-----------------------
+
+   The new functions `frame-height' and `frame-width' return the height
+and width of a specified frame (or of the selected frame), measured in
+characters.
+
+   The new functions `frame-pixel-height' and `frame-pixel-width'
+return the height and width of a specified frame (or of the selected
+frame), measured in pixels.
+
+   The new functions `frame-char-height' and `frame-char-width' return
+the height and width of a character in a specified frame (or in the
+selected frame), measured in pixels.
+
+   `set-frame-size' sets the size of a frame, measured in characters;
+its arguments are FRAME, COLS and ROWS.  To set the size with values
+measured in pixels, you can use `modify-frame-parameters'.
+
+   The function `set-frame-position' sets the position of the top left
+corner of a frame.  Its arguments are FRAME, LEFT and TOP.
+
+Frame Parameters
+----------------
+
+   A frame has many parameters that affect how it displays.  Use the
+function `frame-parameters' to get an alist of all the parameters of a
+given frame.  To alter parameters, use `modify-frame-parameters', which
+takes two arguments: the frame to modify, and an alist of parameters to
+change and their new values.  Each element of ALIST has the form `(PARM
+. VALUE)', where PARM is a symbol.  Parameters that aren't meaningful
+are ignored.  If you don't mention a parameter in ALIST, its value
+doesn't change.
+
+   Just what parameters a frame has depends on what display mechanism it
+uses.  Here is a table of the parameters of an X window frame:
+
+`name'
+     The name of the frame.
+
+`left'
+     The screen position of the left edge.
+
+`top'
+     The screen position of the top edge.
+
+`height'
+     The height of the frame contents, in pixels.
+
+`width'
+     The width of the frame contents, in pixels.
+
+`window-id'
+     The number of the X window for the frame.
+
+`minibuffer'
+     Whether this frame has its own minibuffer.  `t' means yes, `none'
+     means no, `only' means this frame is just a minibuffer, a
+     minibuffer window (in some other frame) means the new frame uses
+     that minibuffer.
+
+`font'
+     The name of the font for the text.
+
+`foreground-color'
+     The color to use for the inside of a character.  Use strings to
+     designate colors; the X server defines the meaningful color names.
+
+`background-color'
+     The color to use for the background of text.
+
+`mouse-color'
+     The color for the mouse cursor.
+
+`cursor-color'
+     The color for the cursor that shows point.
+
+`border-color'
+     The color for the border of the frame.
+
+`cursor-type'
+     The way to display the cursor.  There are two legitimate values:
+     `bar' and `box'.  The value `bar' specifies a vertical bar between
+     characters as the cursor.  The value `box' specifies an ordinary
+     black box overlaying the character after point; that is the
+     default.
+
+`icon-type'
+     Non-`nil' for a bitmap icon, `nil' for a text icon.
+
+`border-width'
+     The width in pixels of the window border.
+
+`internal-border-width'
+     The distance in pixels between text and border.
+
+`auto-raise'
+     Non-`nil' means selecting the frame raises it.
+
+`auto-lower'
+     Non-`nil' means deselecting the frame lowers it.
+
+`vertical-scroll-bars'
+     Non-`nil' gives the frame a scroll bar for vertical scrolling.
+
+Minibufferless Frames
+---------------------
+
+   Normally, each frame has its own minibuffer window at the bottom,
+which is used whenever that frame is selected.  However, you can also
+create frames with no minibuffers.  These frames must use the
+minibuffer window of some other frame.
+
+   The variable `default-minibuffer-frame' specifies where to find a
+minibuffer for frames created without minibuffers of their own.  Its
+value should be a frame which does have a minibuffer.
+
+   You can also specify a minibuffer window explicitly when you create a
+frame; then `default-minibuffer-frame' is not used.
+
+X Window System Features
+========================
+
+   * The new functions `mouse-position' and `set-mouse-position' give
+     access to the current position of the mouse.
+
+     `mouse-position' returns a description of the position of the
+     mouse.  The value looks like `(FRAME X . Y)', where X and Y are
+     measured in pixels relative to the top left corner of the inside
+     of FRAME.
+
+     `set-mouse-position' takes three arguments, FRAME, X and Y, and
+     warps the mouse cursor to that location on the screen.
+
+   * `track-mouse' is a new special form for tracking mouse motion.
+     Use it in definitions of mouse clicks that want pay to attention to
+     the motion of the mouse, not just where the buttons are pressed and
+     released.  Here is how to use it:
+
+          (track-mouse BODY...)
+
+     While BODY executes, mouse motion generates input events just as
+     mouse clicks do.  BODY can read them with `read-event' or
+     `read-key-sequence'.
+
+     `track-mouse' returns the value of the last form in BODY.
+
+     The format of these events is described under "New Input Event
+     Formats."
+
+   * `x-set-selection' sets a "selection" in the X server.  It takes
+     two arguments: a selection type TYPE, and the value to assign to
+     it, DATA.  If DATA is `nil', it means to clear out the selection.
+     Otherwise, DATA may be a string, a symbol, an integer (or a cons
+     of two integers or list of two integers), or a cons of two markers
+     pointing to the same buffer.  In the last case, the selection is
+     considered to be the text between the markers.  The data may also
+     be a vector of valid non-vector selection values.
+
+     Each possible TYPE has its own selection value, which changes
+     independently.  The usual values of TYPE are `PRIMARY' and
+     `SECONDARY'; these are symbols with upper-case names, in accord
+     with X protocol conventions.  The default is `PRIMARY'.
+
+     To get the value of the selection, call `x-get-selection'.  This
+     function accesses selections set up by Emacs and those set up by
+     other X clients.  It takes two optional arguments, TYPE and
+     DATA-TYPE.  The default for TYPE is `PRIMARY'.
+
+     The DATA-TYPE argument specifies the form of data conversion to
+     use; meaningful values include `TEXT', `STRING', `TARGETS',
+     `LENGTH', `DELETE', `FILE_NAME', `CHARACTER_POSITION',
+     `LINE_NUMBER', `COLUMN_NUMBER', `OWNER_OS', `HOST_NAME', `USER',
+     `CLASS', `NAME', `ATOM', and `INTEGER'.  (These are symbols with
+     upper-case names in accord with X Windows conventions.) The
+     default for DATA-TYPE is `STRING'.
+
+   * The X server has a set of numbered "cut buffers" which can store
+     text or other data being moved between applications.  Use
+     `x-get-cut-buffer' to get the contents of a cut buffer; specify the
+     cut buffer number as argument.  Use `x-set-cut-buffer' with
+     argument STRING to store a new string into the first cut buffer
+     (moving the other values down through the series of cut buffers,
+     kill-ring-style).
+
+     Cut buffers are considered obsolete, but Emacs supports them for
+     the sake of X clients that still use them.
+
+   * You can close the connection with the X server with the function
+     `x-close-current-connection'.  This takes no arguments.
+
+     Then you can connect to a different X server with
+     `x-open-connection'.  The first argument, DISPLAY, is the name of
+     the display to connect to.
+
+     The optional second argument XRM-STRING is a string of resource
+     names and values, in the same format used in the `.Xresources'
+     file.  The values you specify override the resource values
+     recorded in the X server itself.  Here's an example of what this
+     string might look like:
+
+          "*BorderWidth: 3\n*InternalBorder: 2\n"
+
+   * A series of new functions give you information about the X server
+     and the screen you are using.
+
+    `x-display-screens'
+          The number of screens associated with the current display.
+
+    `x-server-version'
+          The version numbers of the X server in use.
+
+    `x-server-vendor'
+          The vendor supporting the X server in use.
+
+    `x-display-pixel-height'
+          The height of this X screen in pixels.
+
+    `x-display-mm-height'
+          The height of this X screen in millimeters.
+
+    `x-display-pixel-width'
+          The width of this X screen in pixels.
+
+    `x-display-mm-width'
+          The width of this X screen in millimeters.
+
+    `x-display-backing-store'
+          The backing store capability of this screen.  Values can be
+          the symbols `always', `when-mapped', or `not-useful'.
+
+    `x-display-save-under'
+          Non-`nil' if this X screen supports the SaveUnder feature.
+
+    `x-display-planes'
+          The number of planes this display supports.
+
+    `x-display-visual-class'
+          The visual class for this X screen.  The value is one of the
+          symbols `static-gray', `gray-scale', `static-color',
+          `pseudo-color', `true-color', and `direct-color'.
+
+    `x-display-color-p'
+          `t' if the X screen in use is a color screen.
+
+    `x-display-color-cells'
+          The number of color cells this X screen supports.
+
+     There is also a variable `x-no-window-manager', whose value is `t'
+     if no X window manager is in use.
+
+   * The function `x-synchronize' enables or disables an X Windows
+     debugging mode: synchronous communication.  It takes one argument,
+     non-`nil' to enable the mode and `nil' to disable.
+
+     In synchronous mode, Emacs waits for a response to each X protocol
+     command before doing anything else.  This means that errors are
+     reported right away, and you can directly find the erroneous
+     command.  Synchronous mode is not the default because it is much
+     slower.
+
+   * The function `x-get-resource' retrieves a resource value from the X
+     Windows defaults database.  Its three arguments are ATTRIBUTE,
+     NAME and CLASS.  It searches using a key of the form
+     `INSTANCE.ATTRIBUTE', with class `Emacs', where INSTANCE is the
+     name under which Emacs was invoked.
+
+     The optional arguments COMPONENT and SUBCLASS add to the key and
+     the class, respectively.  You must specify both of them or neither.
+     If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE',
+     and the class is `Emacs.SUBCLASS'.
+
+   * `x-display-color-p' returns `t' if you are using an X server with
+     a color display, and `nil' otherwise.
+
+     `x-color-defined-p' takes as argument a string describing a color;
+     it returns `t' if the display supports that color.  (If the color
+     is `"black"' or `"white"' then even black-and-white displays
+     support it.)
+
+   * `x-popup-menu' has been generalized.  It now accepts a keymap as
+     the MENU argument.  Then the menu items are the prompt strings of
+     individual key bindings, and the item values are the keys which
+     have those bindings.
+
+     You can also supply a list of keymaps as the first argument; then
+     each keymap makes one menu pane (but keymaps that don't provide
+     any menu items don't appear in the menu at all).
+
+     `x-popup-menu' also accepts a mouse button event as the POSITION
+     argument.  Then it displays the menu at the location at which the
+     event took place.  This is convenient for mouse-invoked commands
+     that pop up menus.
+
+   * You can use the function `x-rebind-key' to change the sequence of
+     characters generated by the X server for one of the keyboard keys.
+
+     The first two arguments, KEYCODE and SHIFT-MASK, should be numbers
+     representing the keyboard code and shift mask respectively.  They
+     specify what key to change.
+
+     The third argument, NEWSTRING, is the new definition of the key.
+     It is a sequence of characters that the key should produce as
+     input.
+
+     The shift mask value is a combination of bits according to this
+     table:
+
+    8
+          Control
+
+    4
+          Meta
+
+    2
+          Shift
+
+    1
+          Shift Lock
+
+     If you specify `nil' for SHIFT-MASK, then the key specified by
+     KEYCODE is redefined for all possible shift combinations.
+
+     For the possible values of KEYCODE and their meanings, see the
+     file `/usr/lib/Xkeymap.txt'.  Keep in mind that the codes in that
+     file are in octal!
+
+     The related function `x-rebind-keys' redefines a single keyboard
+     key, specifying the behavior for each of the 16 shift masks
+     independently.  The first argument is KEYCODE, as in
+     `x-rebind-key'.  The second argument STRINGS is a list of 16
+     elements, one for each possible shift mask value; each element
+     says how to redefine the key KEYCODE with the corresponding shift
+     mask value.  If an element is a string, it is the new definition.
+     If an element is `nil', the definition does not change for that
+     shift mask.
+
+   * The function `x-parse-geometry' parses a string specifying window
+     size and position in the usual X format.  It returns an alist
+     describing which parameters were specified, and the values that
+     were given for them.
+
+     The elements of the alist look like `(PARAMETER .  VALUE)'.  The
+     possible PARAMETER values are `left', `top', `width', and `height'.
+
+New Window Features
+===================
+
+   * The new function `window-at' tells you which window contains a
+     given horizontal and vertical position on a specified frame.  Call
+     it with three arguments, like this:
+
+          (window-at X COLUMN FRAME)
+
+     The function returns the window which contains that cursor
+     position in the frame FRAME.  If you omit FRAME, the selected
+     frame is used.
+
+   * The function `coordinates-in-window-p' takes two arguments and
+     checks whether a particular frame position falls within a
+     particular window.
+
+          (coordinates-in-window-p COORDINATES WINDOW)
+
+     The argument COORDINATES is a cons cell of this form:
+
+          (X . Y)
+
+     The two coordinates are measured in characters, and count from the
+     top left corner of the screen or frame.
+
+     The value of the function tells you what part of the window the
+     position is in.  The possible values are:
+
+    `(RELX . RELY)'
+          The coordinates are inside WINDOW.  The numbers RELX and RELY
+          are equivalent window-relative coordinates, counting from 0
+          at the top left corner of the window.
+
+    `mode-line'
+          The coordinates are in the mode line of WINDOW.
+
+    `vertical-split'
+          The coordinates are in the vertical line between WINDOW and
+          its neighbor to the right.
+
+    `nil'
+          The coordinates are not in any sense within WINDOW.
+
+     You need not specify a frame when you call
+     `coordinates-in-window-p', because it assumes you mean the frame
+     which window WINDOW is on.
+
+   * The function `minibuffer-window' now accepts a frame as argument
+     and returns the minibuffer window used for that frame.  If you
+     don't specify a frame, the currently selected frame is used.  The
+     minibuffer window may be on the frame in question, but if that
+     frame has no minibuffer of its own, it uses the minibuffer window
+     of some other frame, and `minibuffer-window' returns that window.
+
+   * Use `window-live-p' to test whether a window is still alive (that
+     is, not deleted).
+
+   * Use `window-minibuffer-p' to determine whether a given window is a
+     minibuffer or not.  It no longer works to do this by comparing the
+     window with the result of `(minibuffer-window)', because there can
+     be more than one minibuffer window at a time (if you have multiple
+     frames).
+
+   * If you set the variable `pop-up-frames' non-`nil', then the
+     functions to show something "in another window" actually create a
+     new frame for the new window.  Thus, you will tend to have a frame
+     for each window, and you can easily have a frame for each buffer.
+
+     The value of the variable `pop-up-frame-function' controls how new
+     frames are made.  The value should be a function which takes no
+     arguments and returns a frame.  The default value is a function
+     which creates a frame using parameters from `pop-up-frame-alist'.
+
+   * `display-buffer' is the basic primitive for finding a way to show a
+     buffer on the screen.  You can customize its behavior by storing a
+     function in the variable `display-buffer-function'.  If this
+     variable is non-`nil', then `display-buffer' calls it to do the
+     work.  Your function should accept two arguments, as follows:
+
+    BUFFER
+          The buffer to be displayed.
+
+    FLAG
+          A flag which, if non-`nil', means you should find another
+          window to display BUFFER in, even if it is already visible in
+          the selected window.
+
+     The function you supply will be used by commands such as
+     `switch-to-buffer-other-window' and `find-file-other-window' as
+     well as for your own calls to `display-buffer'.
+
+   * `delete-window' now gives all of the deleted window's screen space
+     to a single neighboring window.  Likewise, `enlarge-window' takes
+     space from only one neighboring window until that window
+     disappears; only then does it take from another window.
+
+   * `next-window' and `previous-window' accept another argument,
+     ALL-FRAMES.
+
+     These functions now take three optional arguments: WINDOW, MINIBUF
+     and ALL-FRAMES.  WINDOW is the window to start from (`nil' means
+     use the selected window).  MINIBUF says whether to include the
+     minibuffer in the windows to cycle through: `t' means yes, `nil'
+     means yes if it is active, and anything else means no.
+
+     Normally, these functions cycle through all the windows in the
+     selected frame, plus the minibuffer used by the selected frame
+     even if it lies in some other frame.
+
+     If ALL-FRAMES is `t', then these functions cycle through all the
+     windows in all the frames that currently exist.  If ALL-FRAMES is
+     neither `t' nor `nil', then they limit themselves strictly to the
+     windows in the selected frame, excluding the minibuffer in use if
+     it lies in some other frame.
+
+   * The functions `get-lru-window' and `get-largest-window' now take
+     an optional argument ALL-FRAMES.  If it is non-`nil', the
+     functions consider all windows on all frames.  Otherwise, they
+     consider just the windows on the selected frame.
+
+     Likewise, `get-buffer-window' takes an optional second argument
+     ALL-FRAMES.
+
+   * The variable `other-window-scroll-buffer' specifies which buffer
+     `scroll-other-window' should scroll.
+
+   * You can now mark a window as "dedicated" to its buffer.  Then
+     Emacs will not try to use that window for any other buffer unless
+     you explicitly request it.
+
+     Use the new function `set-window-dedicated-p' to set the dedication
+     flag of a window WINDOW to the value FLAG.  If FLAG is `t', this
+     makes the window dedicated.  If FLAG is `nil', this makes the
+     window non-dedicated.
+
+     Use `window-dedicated-p' to examine the dedication flag of a
+     specified window.
+
+   * The new function `walk-windows' cycles through all visible
+     windows, calling `proc' once for each window with the window as
+     its sole argument.
+
+     The optional second argument MINIBUF says whether to include
+     minibuffer windows.  A value of `t' means count the minibuffer
+     window even if not active.  A value of `nil' means count it only
+     if active.  Any other value means not to count the minibuffer even
+     if it is active.
+
+     If the optional third argument ALL-FRAMES is `t', that means
+     include all windows in all frames.  If ALL-FRAMES is `nil', it
+     means to cycle within the selected frame, but include the
+     minibuffer window (if MINIBUF says so) that that frame uses, even
+     if it is on another frame.  If ALL-FRAMES is neither `nil' nor `t',
+     `walk-windows' sticks strictly to the selected frame.
+
+   * The function `window-end' is a counterpart to `window-start': it
+     returns the buffer position of the end of the display in a given
+     window (or the selected window).
+
+   * The function `window-configuration-p' returns non-`nil' when given
+     an object that is a window configuration (such as is returned by
+     `current-window-configuration').
+
+Display Features
+================
+
+   * `baud-rate' is now a variable rather than a function.  This is so
+     you can set it to reflect the effective speed of your terminal,
+     when the system doesn't accurately know the speed.
+
+   * You can now remove any echo area message and make the minibuffer
+     visible.  To do this, call `message' with `nil' as the only
+     argument.  This clears any existing message, and lets the current
+     minibuffer contents show through.  Previously, there was no
+     reliable way to make sure that the minibuffer contents were
+     visible.
+
+   * The variable `temp-buffer-show-hook' has been renamed
+     `temp-buffer-show-function', because its value is a single function
+     (of one argument), not a normal hook.
+
+   * The new function `force-mode-line-update' causes redisplay of the
+     current buffer's mode line.
+
+Display Tables
+==============
+
+   You can use the "display table" feature to control how all 256
+possible character codes display on the screen.  This is useful for
+displaying European languages that have letters not in the ASCII
+character set.
+
+   The display table maps each character code into a sequence of
+"glyphs", each glyph being an image that takes up one character
+position on the screen.  You can also define how to display each glyph
+on your terminal, using the "glyph table".
+
+Display Tables Proper
+---------------------
+
+   Use `make-display-table' to create a display table.  The table
+initially has `nil' in all elements.
+
+   A display table is actually an array of 261 elements.  The first 256
+elements of a display table control how to display each possible text
+character.  The value should be `nil' or a vector (which is a sequence
+of glyphs; see below).  `nil' as an element means to display that
+character following the usual display conventions.
+
+   The remaining five elements of a display table serve special purposes
+(`nil' means use the default stated below):
+
+256
+     The glyph for the end of a truncated screen line (the default for
+     this is `\').
+
+257
+     The glyph for the end of a continued line (the default is `$').
+
+258
+     The glyph for the indicating an octal character code (the default
+     is `\').
+
+259
+     The glyph for indicating a control characters (the default is `^').
+
+260
+     The vector of glyphs for indicating the presence of invisible
+     lines (the default is `...').
+
+   Each buffer typically has its own display table.  The display table
+for the current buffer is stored in `buffer-display-table'.  (This
+variable automatically becomes local if you set it.)  If this variable
+is `nil', the value of `standard-display-table' is used in that buffer.
+
+   Each window can have its own display table, which overrides the
+display table of the buffer it is showing.
+
+   If neither the selected window nor the current buffer has a display
+table, and if `standard-display-table' is `nil', then Emacs uses the
+usual display conventions:
+
+   * Character codes 32 through 127 map to glyph codes 32 through 127.
+
+   * Codes 0 through 31 map to sequences of two glyphs, where the first
+     glyph is the ASCII code for `^'.
+
+   * Character codes 128 through 255 map to sequences of four glyphs,
+     where the first glyph is the ASCII code for `\', and the others
+     represent digits.
+
+   The usual display conventions are also used for any character whose
+entry in the active display table is `nil'.  This means that when you
+set up a display table, you need not specify explicitly what to do with
+each character, only the characters for which you want unusual behavior.
+
+Glyphs
+------
+
+   A glyph stands for an image that takes up a single character
+position on the screen.  A glyph is represented in Lisp as an integer.
+
+   The meaning of each integer, as a glyph, is defined by the glyph
+table, which is the value of the variable `glyph-table'.  It should be a
+vector; the Gth element defines glyph code G.  The possible definitions
+of a glyph code are:
+
+INTEGER
+     Define this glyph code as an alias for code INTEGER.  This is used
+     with X Windows to specify a face code.
+
+STRING
+     Send the characters in STRING to the terminal to output this
+     glyph.  This alternative is available only for character
+     terminals, not with X.
+
+`NIL'
+     This glyph is simple.  On an ordinary terminal, the glyph code mod
+     256 is the character to output.  With X, the glyph code mod 256 is
+     character to output, and the glyph code divided by 256 specifies
+     the "face code" to use while outputting it.
+
+   Any glyph code beyond the length of the glyph table is automatically
+simple.
+
+   If `glyph-table' is `nil', then all possible glyph codes are simple.
+
+   A "face" is a named combination of a font and a pair of colors
+(foreground and background).  A glyph code can specify a face id number
+to use for displaying that glyph.
+
+ISO Latin 1
+-----------
+
+   If you have a terminal that can handle the entire ISO Latin 1
+character set, you can arrange to use that character set as follows:
+
+     (standard-display-european 1)
+
+   If you are editing buffers written in the ISO Latin 1 character set
+and your terminal doesn't handle anything but ASCII, you can load the
+file `iso-ascii' to set up a display table which makes the other ISO
+characters display as sequences of ASCII characters.  For example, the
+character "o with umlaut" displays as `{"o}'.
+
+   Some European countries have terminals that don't support ISO Latin 1
+but do support the special characters for that country's language.  You
+can define a display table to work one language using such terminals.
+For an example, see `lisp/iso-swed.el', which handles certain Swedish
+terminals.
+
+   You can load the appropriate display table for your terminal
+automatically by writing a terminal-specific Lisp file for the terminal
+type.
+
+Overlays
+========
+
+   You can use "overlays" to alter the appearance of a buffer's text on
+the screen.  An overlay is an object which belongs to a particular
+buffer, and has a specified beginning and end.  It also has properties
+which you can examine and set; these affect the display of the text
+within the overlay.
+
+Overlay Properties
+------------------
+
+   Overlay properties are like text properties in some respects, but the
+differences are more important than the similarities.  Text properties
+are considered a part of the text; overlays are specifically considered
+not to be part of the text.  Thus, copying text between various buffers
+and strings preserves text properties, but does not try to preserve
+overlays.  Changing a buffer's text properties marks the buffer as
+modified, while moving an overlay or changing its properties does not.
+
+`face'
+     This property specifies a face for displaying the text within the
+     overlay.
+
+`priority'
+     This property's value (which should be a nonnegative number)
+     determines the priority of the overlay.  The priority matters when
+     two or more overlays cover the same character and both specify a
+     face for display; the one whose `priority' value is larger takes
+     priority over the other, and its face attributes override the face
+     attributes of the lower priority overlay.
+
+     Currently, all overlays take priority over text properties.  Please
+     avoid using negative priority values, as we have not yet decided
+     just what they should mean.
+
+`window'
+     If the `window' property is non-`nil', then the overlay applies
+     only on that window.
+
+Overlay Functions
+-----------------
+
+   Use the functions `overlay-get' and `overlay-put' to access and set
+the properties of an overlay.  They take arguments like `get' and
+`put', except that the first argument is an overlay rather than a
+symbol.
+
+   To create an overlay, call `(make-overlay START END)'.  You can
+specify the buffer as the third argument if you wish.  To delete one,
+use `delete-overlay'.
+
+   Use `overlay-start', `overlay-end' and `overlay-buffer' to examine
+the location and range of an overlay.  Use `move-overlay' to change
+them; its arguments are OVERLAY, START, END and (optionally) the buffer.
+
+   There are two functions to search for overlays: `overlays-at' and
+`next-overlay-change'.  `overlays-at' returns a list of all the
+overlays containing a particular position.  `(next-overlay-change POS)'
+returns the position of the next overlay beginning or end following POS.
+
+Faces
+=====
+
+   A "face" is a named collection of graphical attributes: font,
+foreground color, background color and optional underlining.  Faces
+control the display of text on the screen.
+
+   Each face has its own "face id number" which distinguishes faces at
+low levels within Emacs.  However, for most purposes, you can refer to
+faces in Lisp programs by their names.
+
+   Each face name is meaningful for all frames, and by default it has
+the same meaning in all frames.  But you can arrange to give a
+particular face name a special meaning in one frame if you wish.
+
+Choosing a Face for Display
+---------------------------
+
+   Here are all the ways to specify which face to use for display of
+text:
+
+   * With defaults.  Each frame has a "default face", whose id number is
+     zero, which is used for all text that doesn't somehow specify
+     another face.
+
+   * With text properties.  A character may have a `face' property; if
+     so, it's displayed with that face.  If the character has a
+     `mouse-face' property, that is used instead of the `face' property
+     when the mouse is "near enough" to the character.
+
+   * With overlays.  An overlay may have `face' and `mouse-face'
+     properties too; they apply to all the text covered by the overlay.
+
+   * With special glyphs.  Each glyph can specify a particular face id
+     number.
+
+   If these various sources together specify more than one face for a
+particular character, Emacs merges the attributes of the various faces
+specified.  The attributes of the faces of special glyphs come first;
+then come attributes of faces from overlays, followed by those from text
+properties, and last the default face.
+
+   When multiple overlays cover one character, an overlay with higher
+priority overrides those with lower priority.
+
+   If an attribute such as the font or a color is not specified in any
+of the above ways, the frame's own font or color is used.
+
+   *Note Face Functions: (elisp)Face Functions, for functions to create
+and change faces.
+
+New Input Event Formats
+=======================
+
+   Mouse clicks, mouse movements and function keys no longer appear in
+the input stream as characters; instead, other kinds of Lisp objects
+represent them as input.
+
+   * An ordinary input character event consists of a "basic code"
+     between 0 and 255, plus any or all of these "modifier bits":
+
+    meta
+          The 2**23 bit in the character code indicates a character
+          typed with the meta key held down.
+
+    control
+          The 2**22 bit in the character code indicates a non-ASCII
+          control character.
+
+          ASCII control characters such as `C-a' have special basic
+          codes of their own, so Emacs needs no special bit to indicate
+          them.  Thus, the code for `C-a' is just 1.
+
+          But if you type a control combination not in ASCII, such as
+          `%' with the control key, the numeric value you get is the
+          code for `%' plus 2**22 (assuming the terminal supports
+          non-ASCII control characters).
+
+    shift
+          The 2**21 bit in the character code indicates an ASCII control
+          character typed with the shift key held down.
+
+          For letters, the basic code indicates upper versus lower
+          case; for digits and punctuation, the shift key selects an
+          entirely different character with a different basic code.  In
+          order to keep within the ASCII character set whenever
+          possible, Emacs avoids using the 2**21 bit for those
+          characters.
+
+          However, ASCII provides no way to distinguish `C-A' from
+          `C-a', so Emacs uses the 2**21 bit in `C-A' and not in `C-a'.
+
+    hyper
+          The 2**20 bit in the character code indicates a character
+          typed with the hyper key held down.
+
+    super
+          The 2**19 bit in the character code indicates a character
+          typed with the super key held down.
+
+    alt
+          The 2**18 bit in the character code indicates a character
+          typed with the alt key held down.  (On some terminals, the
+          key labeled ALT is actually the meta key.)
+
+     In the future, Emacs may support a larger range of basic codes.
+     We may also move the modifier bits to larger bit numbers.
+     Therefore, you should avoid mentioning specific bit numbers in
+     your program.  Instead, the way to test the modifier bits of a
+     character is with the function `event-modifiers' (see below).
+
+   * Function keys are represented as symbols.  The symbol's name is
+     the function key's label.  For example, pressing a key labeled F1
+     places the symbol `f1' in the input stream.
+
+     There are a few exceptions to the symbol naming convention:
+
+    `kp-add', `kp-decimal', `kp-divide', ...
+          Keypad keys (to the right of the regular keyboard).
+
+    `kp-0', `kp-1', ...
+          Keypad keys with digits.
+
+    `kp-f1', `kp-f2', `kp-f3', `kp-f4'
+          Keypad PF keys.
+
+    `left', `up', `right', `down'
+          Cursor arrow keys
+
+     You can use the modifier keys CTRL, META, HYPER, SUPER, ALT and
+     SHIFT with function keys.  The way to represent them is with
+     prefixes in the symbol name:
+
+    `A-'
+          The alt modifier.
+
+    `C-'
+          The control modifier.
+
+    `H-'
+          The hyper modifier.
+
+    `M-'
+          The meta modifier.
+
+    `s-'
+          The super modifier.
+
+    `S-'
+          The shift modifier.
+
+     Thus, the symbol for the key F3 with META held down is `M-F3'.
+     When you use more than one prefix, we recommend you write them in
+     alphabetical order (though the order does not matter in arguments
+     to the key-binding lookup and modification functions).
+
+   * Mouse events are represented as lists.
+
+     If you press a mouse button and release it at the same location,
+     this generates a "click" event.  Mouse click events have this form:
+
+          (BUTTON-SYMBOL
+           (WINDOW (COLUMN . ROW)
+            BUFFER-POS TIMESTAMP))
+
+     Here is what the elements normally mean:
+
+    BUTTON-SYMBOL
+          indicates which mouse button was used.  It is one of the
+          symbols `mouse-1', `mouse-2', ..., where the buttons are
+          normally numbered left to right.
+
+          You can also use prefixes `A-', `C-', `H-', `M-', `S-' and
+          `s-' for modifiers alt, control, hyper, meta, shift and
+          super, just as you would with function keys.
+
+    WINDOW
+          is the window in which the click occurred.
+
+    COLUMN
+    ROW
+          are the column and row of the click, relative to the top left
+          corner of WINDOW, which is `(0 . 0)'.
+
+    BUFFER-POS
+          is the buffer position of the character clicked on.
+
+    TIMESTAMP
+          is the time at which the event occurred, in milliseconds.
+          (Since this value wraps around the entire range of Emacs Lisp
+          integers in about five hours, it is useful only for relating
+          the times of nearby events.)
+
+     The meanings of BUFFER-POS, ROW and COLUMN are somewhat different
+     when the event location is in a special part of the screen, such
+     as the mode line or a scroll bar.
+
+     If the position is in the window's scroll bar, then BUFFER-POS is
+     the symbol `vertical-scroll-bar', and the pair `(COLUMN . ROW)' is
+     replaced with a pair `(PORTION . WHOLE)', where PORTION is the
+     distance of the click from the top or left end of the scroll bar,
+     and WHOLE is the length of the entire scroll bar.
+
+     If the position is on a mode line or the vertical line separating
+     WINDOW from its neighbor to the right, then BUFFER-POS is the
+     symbol `mode-line' or `vertical-line'.  In this case ROW and
+     COLUMN do not have meaningful data.
+
+   * Releasing a mouse button above a different character position
+     generates a "drag" event, which looks like this:
+
+          (BUTTON-SYMBOL
+           (WINDOW1 (COLUMN1 . ROW1)
+            BUFFER-POS1 TIMESTAMP1)
+           (WINDOW2 (COLUMN2 . ROW2)
+            BUFFER-POS2 TIMESTAMP2))
+
+     The name of BUTTON-SYMBOL contains the prefix `drag-'.  The second
+     and third elements of the event give the starting and ending
+     position of the drag.
+
+     The `drag-' prefix follows the modifier key prefixes such as `C-'
+     and `M-'.
+
+     If `read-key-sequence' receives a drag event which has no key
+     binding, and the corresponding click event does have a binding, it
+     changes the drag event into a click event at the drag's starting
+     position.  This means that you don't have to distinguish between
+     click and drag events unless you want to.
+
+   * Click and drag events happen when you release a mouse button.
+     Another kind of event happens when you press a button.  It looks
+     just like a click event, except that the name of BUTTON-SYMBOL
+     contains the prefix `down-'.  The `down-' prefix follows the
+     modifier key prefixes such as `C-' and `M-'.
+
+     The function `read-key-sequence', and the Emacs command loop,
+     ignore any down events that don't have command bindings.  This
+     means that you need not worry about defining down events unless
+     you want them to do something.  The usual reason to define a down
+     event is so that you can track mouse motion until the button is
+     released.
+
+   * For example, if the user presses and releases the left mouse
+     button over the same location, Emacs generates a sequence of
+     events like this:
+
+          (down-mouse-1 (#<window 18 on NEWS> 2613 (0 . 38) -864320))
+          (mouse-1      (#<window 18 on NEWS> 2613 (0 . 38) -864180))
+
+     Or, while holding the control key down, the user might hold down
+     the second mouse button, and drag the mouse from one line to the
+     next.  That produces two events, as shown here:
+
+          (C-down-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219))
+          (C-drag-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219)
+                          (#<window 18 on NEWS> 3510 (0 . 28) -729648))
+
+     Or, while holding down the meta and shift keys, the user might
+     press the second mouse button on the window's mode line, and then
+     drag the mouse into another window.  That produces an event like
+     this:
+
+          (M-S-down-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844))
+          (M-S-drag-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844)
+                            (#<window 20 on carlton-sanskrit.tex> 161 (33 . 3)
+                             -453816))
+
+   * A key sequence that starts with a mouse click is read using the
+     keymaps of the buffer in the window clicked on, not the current
+     buffer.
+
+     This does not imply that clicking in a window selects that window
+     or its buffer.  The execution of the command begins with no change
+     in the selected window or current buffer.  However, the command
+     can switch windows or buffers if programmed to do so.
+
+   * Mouse motion events are represented by lists.  During the
+     execution of the body of a `track-mouse' form, moving the mouse
+     generates events that look like this:
+
+          (mouse-movement (WINDOW (COLUMN . ROW)
+                           BUFFER-POS TIMESTAMP))
+
+     The second element of the list describes the current position of
+     the mouse, just as in a mouse click event.
+
+     Outside of `track-mouse' forms, Emacs does not generate events for
+     mere motion of the mouse, and these events do not appear.
+
+   * Focus shifts between frames are represented by lists.
+
+     When the mouse shifts temporary input focus from one frame to
+     another, Emacs generates an event like this:
+
+          (switch-frame NEW-FRAME)
+
+     where NEW-FRAME is the frame switched to.
+
+     In X windows, most window managers are set up so that just moving
+     the mouse into a window is enough to set the focus there.  As far
+     as the user is concerned, Emacs behaves consistently with this.
+     However, there is no need for the Lisp program to know about the
+     focus change until some other kind of input arrives.  So Emacs
+     generates the focus event only when the user actually types a
+     keyboard key or presses a mouse button in the new frame; just
+     moving the mouse between frames does not generate a focus event.
+
+     The global key map usually binds this event to the
+     `internal-select-frame' function, so that characters typed at a
+     frame apply to that frame's selected window.
+
+     If the user switches frames in the middle of a key sequence, then
+     Emacs delays the `switch-frame' event until the key sequence is
+     over.  For example, suppose `C-c C-a' is a key sequence in the
+     current buffer's keymaps.  If the user types `C-c', moves the
+     mouse to another frame, and then types `C-a', `read-key-sequence'
+     returns the sequence `"\C-c\C-a"', and the next call to
+     `read-event' or `read-key-sequence' will return the `switch-frame'
+     event.
+
+Working with Input Events
+=========================
+
+   * Functions which work with key sequences now handle non-character
+     events.  Functions like `define-key', `global-set-key', and
+     `local-set-key' used to accept strings representing key sequences;
+     now, since events may be arbitrary lisp objects, they also accept
+     vectors.  The function `read-key-sequence' may return a string or a
+     vector, depending on whether or not the sequence read contains only
+     characters.
+
+     List events may be represented by the symbols at their head; to
+     bind clicks of the left mouse button, you need only present the
+     symbol `mouse-1', not an entire mouse click event.  If you do put
+     an event which is a list in a key sequence, only the event's head
+     symbol is used in key lookups.
+
+     For example, to globally bind the left mouse button to the function
+     `mouse-set-point', you could evaluate this:
+
+          (global-set-key [mouse-1] 'mouse-set-point)
+
+     To bind the sequence `C-c F1' to the command `tex-view' in
+     `tex-mode-map', you could evaluate this:
+
+          (define-key tex-mode-map [?\C-c f1] 'tex-view)
+
+     To find the binding for the function key labeled NEXT in
+     `minibuffer-local-map', you could evaluate this:
+
+          (lookup-key minibuffer-local-map [next])
+               => next-history-element
+
+     If you call the function `read-key-sequence' and then press `C-x
+     C-F5', here is how it behaves:
+
+          (read-key-sequence "Press `C-x C-F5': ")
+               => [24 C-f5]
+
+     Note that `24' is the character `C-x'.
+
+   * The documentation functions (`single-key-description',
+     `key-description', etc.) now handle the new event types.  Wherever
+     a string of keyboard input characters was acceptable in previous
+     versions of Emacs, a vector of events should now work.
+
+   * Special parts of a window can have their own bindings for mouse
+     events.
+
+     When mouse events occur in special parts of a window, such as a
+     mode line or a scroll bar, the event itself shows nothing
+     special--only the symbol that would normally represent that mouse
+     button and modifier keys.  The information about the screen region
+     is kept in other parts of the event list.  But `read-key-sequence'
+     translates this information into imaginary prefix keys, all of
+     which are symbols: `mode-line', `vertical-line', and
+     `vertical-scroll-bar'.
+
+     For example, if you call `read-key-sequence' and then click the
+     mouse on the window's mode line, this is what happens:
+
+          (read-key-sequence "Click on the mode line: ")
+               => [mode-line (mouse-1 (#<window 6 on NEWS> mode-line
+                                        (40 . 63) 5959987))]
+
+     You can define meanings for mouse clicks in special window regions
+     by defining key sequences using these imaginary prefix keys.  For
+     example, here is how to bind the third mouse button on a window's
+     mode line delete the window:
+
+          (global-set-key [mode-line mouse-3] 'mouse-delete-window)
+
+     Here's how to bind the middle button (modified by META) on the
+     vertical line at the right of a window to scroll the window to the
+     left.
+
+          (global-set-key [vertical-line M-mouse-2] 'scroll-left)
+
+   * Decomposing an event symbol.
+
+     Each symbol used to identify a function key or mouse button has a
+     property named `event-symbol-elements', which is a list containing
+     an unmodified version of the symbol, followed by modifiers the
+     symbol name contains.  The modifiers are symbols; they include
+     `shift', `control', and `meta'.  In addition, a mouse event symbol
+     has one of `click', `drag', and `down'.  For example:
+
+          (get 'f5 'event-symbol-elements)
+               => (f5)
+          (get 'C-f5 'event-symbol-elements)
+               => (f5 control)
+          (get 'M-S-f5 'event-symbol-elements)
+               => (f5 meta shift)
+          (get 'mouse-1 'event-symbol-elements)
+               => (mouse-1 click)
+          (get 'down-mouse-1 'event-symbol-elements)
+               => (mouse-1 down)
+
+     Note that the `event-symbol-elements' property for a mouse click
+     explicitly contains `click', but the event symbol name itself does
+     not contain `click'.
+
+   * Use `read-event' to read input if you want to accept any kind of
+     event.  The old function `read-char' now discards events other than
+     keyboard characters.
+
+   * `last-command-char' and `last-input-char' can now hold any kind of
+     event.
+
+   * The new variable `unread-command-events' is much like
+     `unread-command-char'.  Its value is a list of events of any type,
+     to be processed as command input in order of appearance in the
+     list.
+
+   * The function `this-command-keys' may return a string or a vector,
+     depending on whether or not the sequence read contains only
+     characters.  You may need to upgrade code which uses this function.
+
+     The function `recent-keys' now returns a vector of events.  You
+     may need to upgrade code which uses this function.
+
+   * A keyboard macro's definition can now be either a string or a
+     vector.  All that really matters is what elements it has.  If the
+     elements are all characters, then the macro can be a string;
+     otherwise, it has to be a vector.
+
+   * The variable `last-event-frame' records which frame the last input
+     event was directed to.  Usually this is the frame that was
+     selected when the event was generated, but if that frame has
+     redirected input focus to another frame, `last-event-frame' is the
+     frame to which the event was redirected.
+
+   * The interactive specification now allows a new code letter `e' to
+     simplify commands bound to events which are lists.  This code
+     supplies as an argument the complete event object.
+
+     You can use `e' more than once in a single command's interactive
+     specification.  If the key sequence which invoked the command has
+     N events with parameters, the Nth `e' provides the Nth
+     parameterized event.  Events which are not lists, such as function
+     keys and ASCII keystrokes, do not count where `e' is concerned.
+
+   * You can extract the starting and ending position values from a
+     mouse button or motion event using the two functions `event-start'
+     and `event-end'.  These two functions return different values for
+     drag and motion events; for click and button-down events, they
+     both return the position of the event.
+
+   * The position, a returned by `event-start' and `event-end', is a
+     list of this form:
+
+          (WINDOW BUFFER-POSITION (COL . ROW) TIMESTAMP)
+
+     You can extract parts of this list with the functions
+     `posn-window', `posn-point', `posn-col-row', and `posn-timestamp'.
+
+   * The function `scroll-bar-scale' is useful for computing where to
+     scroll to in response to a mouse button event from a scroll bar.
+     It takes two arguments, RATIO and TOTAL, and in effect multiplies
+     them.  We say "in effect" because RATIO is not a number; rather a
+     pair `(NUM . DENOM)'.
+
+     Here's the usual way to use `scroll-bar-scale':
+
+          (scroll-bar-scale (posn-col-row (event-start event))
+                            (buffer-size))
+
+Putting Keyboard Events in Strings
+==================================
+
+   In most of the places where strings are used, we conceptualize the
+string as containing text characters--the same kind of characters found
+in buffers or files.  Occasionally Lisp programs use strings which
+conceptually contain keyboard characters; for example, they may be key
+sequences or keyboard macro definitions.  There are special rules for
+how to put keyboard characters into a string, because they are not
+limited to the range of 0 to 255 as text characters are.
+
+   A keyboard character typed using the META key is called a "meta
+character".  The numeric code for such an event includes the 2**23 bit;
+it does not even come close to fitting in a string.  However, earlier
+Emacs versions used a different representation for these characters,
+which gave them codes in the range of 128 to 255.  That did fit in a
+string, and many Lisp programs contain string constants that use `\M-'
+to express meta characters, especially as the argument to `define-key'
+and similar functions.
+
+   We provide backward compatibility to run those programs with special
+rules for how to put a keyboard character event in a string.  Here are
+the rules:
+
+   * If the keyboard event value is in the range of 0 to 127, it can go
+     in the string unchanged.
+
+   * The meta variants of those events, with codes in the range of
+     2**23 to 2**23+127, can also go in the string, but you must change
+     their numeric values.  You must set the 2**7 bit instead of the
+     2**23 bit, resulting in a value between 128 and 255.
+
+   * Other keyboard character events cannot fit in a string.  This
+     includes keyboard events in the range of 128 to 255.
+
+   Functions such as `read-key-sequence' that can construct strings
+containing events follow these rules.
+
+   When you use the read syntax `\M-' in a string, it produces a code
+in the range of 128 to 255--the same code that you get if you modify
+the corresponding keyboard event to put it in the string.  Thus, meta
+events in strings work consistently regardless of how they get into the
+strings.
+
+   New programs can avoid dealing with these rules by using vectors
+instead of strings for key sequences when there is any possibility that
+these issues might arise.
+
+   The reason we changed the representation of meta characters as
+keyboard events is to make room for basic character codes beyond 127,
+and support meta variants of such larger character codes.
+
+Menus
+=====
+
+   You can now define menus conveniently as keymaps.  Menus are normally
+used with the mouse, but they can work with the keyboard also.
+
+Defining Menus
+--------------
+
+   A keymap is suitable for menu use if it has an "overall prompt
+string", which is a string that appears as an element of the keymap.  It
+should describes the purpose of the menu.  The easiest way to construct
+a keymap with a prompt string is to specify the string as an argument
+when you run `make-keymap' or `make-sparse-keymap'.
+
+   The individual bindings in the menu keymap should also have prompt
+strings; these strings are the items in the menu.  A binding with a
+prompt string looks like this:
+
+     (CHAR STRING . REAL-BINDING)
+
+   As far as `define-key' is concerned, the string is part of the
+character's binding--the binding looks like this:
+
+     (STRING . REAL-BINDING).
+
+   However, only REAL-BINDING is used for executing the key.
+
+   You can also supply a second string, called the help string, as
+follows:
+
+     (CHAR STRING HELP-STRING . REAL-BINDING)
+
+   Currently Emacs does not actually use HELP-STRING; it knows only how
+to ignore HELP-STRING in order to extract REAL-BINDING.  In the future
+we hope to make HELP-STRING serve as longer documentation for the menu
+item, available on request.
+
+   The prompt string for a binding should be short--one or two words.
+Its meaning should describe the command it corresponds to.
+
+   If REAL-BINDING is `nil', then STRING appears in the menu but cannot
+be selected.
+
+   If REAL-BINDING is a symbol, and has a non-`nil' `menu-enable'
+property, that property is an expression which controls whether the
+menu item is enabled.  Every time the keymap is used to display a menu,
+Emacs evaluates the expression, and it enables the menu item only if
+the expression's value is non-`nil'.  When a menu item is disabled, it
+is displayed in a "fuzzy" fashion, and cannot be selected with the
+mouse.
+
+Menus and the Mouse
+-------------------
+
+   The way to make a menu keymap produce a menu is to make it the
+definition of a prefix key.
+
+   When the prefix key ends with a mouse event, Emacs handles the menu
+keymap by popping up a visible menu that you can select from with the
+mouse.  When you click on a menu item, the event generated is whatever
+character or symbol has the binding which brought about that menu item.
+
+   A single keymap can appear as multiple panes, if you explicitly
+arrange for this.  The way to do this is to make a keymap for each
+pane, then create a binding for each of those maps in the main keymap
+of the menu.  Give each of these bindings a prompt string that starts
+with `@'.  The rest of the prompt string becomes the name of the pane.
+See the file `lisp/mouse.el' for an example of this.  Any ordinary
+bindings with prompt strings are grouped into one pane, which appears
+along with the other panes explicitly created for the submaps.
+
+   You can also get multiple panes from separate keymaps.  The full
+definition of a prefix key always comes from merging the definitions
+supplied by the various active keymaps (minor modes, local, and
+global).  When more than one of these keymaps is a menu, each of them
+makes a separate pane or panes.
+
+Menus and the Keyboard
+----------------------
+
+   When a prefix key ending with a keyboard event (a character or
+function key) has a definition that is a menu keymap, you can use the
+keyboard to choose a menu item.
+
+   Emacs displays the menu alternatives in the echo area.  If they don't
+all fit at once, type SPC to see the next line of alternatives.  If you
+keep typing SPC, you eventually get to the end of the menu and then
+cycle around to the beginning again.
+
+   When you have found the alternative you want, type the corresponding
+character--the one whose binding is that alternative.
+
+   In a menu intended for keyboard use, each menu item must clearly
+indicate what character to type.  The best convention to use is to make
+the character the first letter of the menu item prompt string.  That is
+something users will understand without being told.
+
+The Menu Bar
+------------
+
+   Under X Windows, each frame can have a "menu bar"--a permanently
+displayed menu stretching horizontally across the top of the frame.  The
+items of the menu bar are the subcommands of the fake "function key"
+`menu-bar', as defined by all the active keymaps.
+
+   To add an item to the menu bar, invent a fake "function key" of your
+own (let's call it KEY), and make a binding for the key sequence
+`[menu-bar KEY]'.  Most often, the binding is a menu keymap, so that
+pressing a button on the menu bar item leads to another menu.
+
+   In order for a frame to display a menu bar, its `menu-bar-lines'
+property must be greater than zero.  Emacs uses just one line for the
+menu bar itself; if you specify more than one line, the other lines
+serve to separate the menu bar from the windows in the frame.  We
+recommend you try one or two as the `menu-bar-lines' value.
+
+Keymaps
+=======
+
+   * The representation of keymaps has changed to support the new event
+     types.  All keymaps now have the form `(keymap ELEMENT ELEMENT
+     ...)'.  Each ELEMENT takes one of the following forms:
+
+    PROMPT-STRING
+          A string as an element of the keymap marks the keymap as a
+          menu, and serves as the overall prompt string for it.
+
+    `(KEY . BINDING)'
+          A cons cell binds KEY to DEFINITION.  Here KEY may be any
+          sort of event head--a character, a function key symbol, or a
+          mouse button symbol.
+
+    VECTOR
+          A vector of 128 elements binds all the ASCII characters; the
+          Nth element holds the binding for character number N.
+
+    `(t . BINDING)'
+          A cons cell whose CAR is `t' is a default binding; anything
+          not bound by previous keymap elements is given BINDING as its
+          binding.
+
+          Default bindings are important because they allow a keymap to
+          bind all possible events without having to enumerate all the
+          possible function keys and mouse clicks, with all possible
+          modifier prefixes.
+
+          The function `lookup-key' (and likewise other functions for
+          examining a key binding) normally report only explicit
+          bindings of the specified key sequence; if there is none,
+          they return `nil', even if there is a default binding that
+          would apply to that key sequence if it were actually typed
+          in.  However, these functions now take an optional argument
+          ACCEPT-DEFAULTS which, if non-`nil', says to consider default
+          bindings.
+
+          Note that if a vector in the keymap binds an ASCII character
+          to `nil' (thus making it "unbound"), the default binding does
+          not apply to the character.  Think of the vector element as
+          an explicit binding of `nil'.
+
+          Note also that if the keymap for a minor or major mode
+          contains a default binding, it completely masks out any
+          lower-priority keymaps.
+
+   * A keymap can now inherit from another keymap.  To do this, make the
+     latter keymap the "tail" of the new one.  Such a keymap looks like
+     this:
+
+          (keymap BINDINGS... . OTHER-KEYMAP)
+
+     The effect is that this keymap inherits all the bindings of
+     OTHER-KEYMAP, but can add to them or override them with BINDINGS.
+     Subsequent changes in the bindings of OTHER-KEYMAP *do* affect
+     this keymap.
+
+     For example,
+
+          (setq my-mode-map (cons 'keymap text-mode-map))
+
+     makes a keymap that by default inherits all the bindings of Text
+     mode--whatever they may be at the time a key is looked up.  Any
+     bindings made explicitly in `my-mode-map' override the bindings
+     inherited from Text mode, however.
+
+   * Minor modes can now have local keymaps.  Thus, a key can act a
+     special way when a minor mode is in effect, and then revert to the
+     major mode or global definition when the minor mode is no longer
+     in effect.  The precedence of keymaps is now: minor modes (in no
+     particular order), then major mode, and lastly the global map.
+
+     The new `current-minor-mode-maps' function returns a list of all
+     the keymaps of currently enabled minor modes, in the other that
+     they apply.
+
+     To set up a keymap for a minor mode, add an element to the alist
+     `minor-mode-map-alist'.  Its elements look like this:
+
+          (SYMBOL . KEYMAP)
+
+     The keymap KEYMAP is active whenever SYMBOL has a non-`nil' value.
+     Use for SYMBOL the variable which indicates whether the minor
+     mode is enabled.
+
+     When more than one minor mode keymap is active, their order of
+     precedence is the order of `minor-mode-map-alist'.  But you should
+     design minor modes so that they don't interfere with each other,
+     and if you do this properly, the order will not matter.
+
+     The function `minor-mode-key-binding' returns a list of all the
+     active minor mode bindings of KEY.  More precisely, it returns an
+     alist of pairs `(MODENAME . BINDING)', where MODENAME is the the
+     variable which enables the minor mode, and BINDING is KEY's
+     definition in that mode.  If KEY has no minor-mode bindings, the
+     value is `nil'.
+
+     If the first binding is a non-prefix, all subsequent bindings from
+     other minor modes are omitted, since they would be completely
+     shadowed.  Similarly, the list omits non-prefix bindings that
+     follow prefix bindings.
+
+   * The new function `copy-keymap' copies a keymap, producing a new
+     keymap with the same key bindings in it.  If the keymap contains
+     other keymaps directly, these subkeymaps are copied recursively.
+
+     If you want to, you can define a prefix key with a binding that is
+     a symbol whose function definition is another keymap.  In this
+     case, `copy-keymap' does not look past the symbol; it doesn't copy
+     the keymap inside the symbol.
+
+   * `substitute-key-definition' now accepts an optional fourth
+     argument, which is a keymap to use as a template.
+
+          (substitute-key-definition olddef newdef keymap oldmap)
+
+     finds all characters defined in OLDMAP as OLDDEF, and defines them
+     in KEYMAP as NEWDEF.
+
+     In addition, this function now operates recursively on the keymaps
+     that define prefix keys within KEYMAP and OLDMAP.
+
+Minibuffer Features
+===================
+
+   The minibuffer input functions `read-from-minibuffer' and
+`completing-read' have new features.
+
+Minibuffer History
+------------------
+
+   A new optional argument HIST specifies which history list to use.
+If you specify a variable (a symbol), that variable is the history
+list.  If you specify a cons cell `(VARIABLE . STARTPOS)', then
+VARIABLE is the history list variable, and STARTPOS specifies the
+initial history position (an integer, counting from zero which
+specifies the most recent element of the history).
+
+   If you specify STARTPOS, then you should also specify that element
+of the history as INITIAL-INPUT, for consistency.
+
+   If you don't specify HIST, then the default history list
+`minibuffer-history' is used.  Other standard history lists that you
+can use when appropriate include `query-replace-history',
+`command-history', and `file-name-history'.
+
+   The value of the history list variable is a list of strings, most
+recent first.  You should set a history list variable to `nil' before
+using it for the first time.
+
+   `read-from-minibuffer' and `completing-read' add new elements to the
+history list automatically, and provide commands to allow the user to
+reuse items on the list.  The only thing your program needs to do to
+use a history list is to initialize it and to pass its name to the
+input functions when you wish.  But it is safe to modify the list by
+hand when the minibuffer input functions are not using it.
+
+Other Minibuffer Features
+-------------------------
+
+   The INITIAL argument to `read-from-minibuffer' and other minibuffer
+input functions can now be a cons cell `(STRING . POSITION)'.  This
+means to start off with STRING in the minibuffer, but put the cursor
+POSITION characters from the beginning, rather than at the end.
+
+   In `read-no-blanks-input', the INITIAL argument is now optional; if
+it is omitted, the initial input string is the empty string.
+
+New Features for Defining Commands
+==================================
+
+   * If the interactive specification begins with `@', this means to
+     select the window under the mouse.  This selection takes place
+     before doing anything else with the command.
+
+     You can use both `@' and `*' together in one command; they are
+     processed in order of appearance.
+
+   * Prompts in an interactive specification can incorporate the values
+     of the preceding arguments.  Emacs replaces `%'-sequences (as used
+     with the `format' function) in the prompt with the interactive
+     arguments that have been read so far.  For example, a command with
+     this interactive specification
+
+          (interactive "sReplace: \nsReplace %s with: ")
+
+     prompts for the first argument with `Replace: ', and then prompts
+     for the second argument with `Replace FOO with: ', where FOO is
+     the string read as the first argument.
+
+   * If a command name has a property `enable-recursive-minibuffers'
+     which is non-`nil', then the command can use the minibuffer to read
+     arguments even if it is invoked from the minibuffer.  The
+     minibuffer command `next-matching-history-element' (normally bound
+     to `M-s' in the minibuffer) uses this feature.
+
+New Features for Reading Input
+==============================
+
+   * The function `set-input-mode' now takes four arguments.  The last
+     argument is optional.  Their names are INTERRUPT, FLOW, META and
+     QUIT.
+
+     The argument INTERRUPT says whether to use interrupt-driven input.
+     Non-`nil' means yes, and `nil' means no (use CBREAK mode).
+
+     The argument FLOW says whether to enable terminal flow control.
+     Non-`nil' means yes.
+
+     The argument META controls support for input character codes above
+     127.  If META is `t', Emacs converts characters with the 8th bit
+     set into Meta characters.  If META is `nil', Emacs disregards the
+     8th bit; this is necessary when the terminal uses it as a parity
+     bit.  If META is neither `t' nor `nil', Emacs uses all 8 bits of
+     input unchanged.  This is good for terminals using European 8-bit
+     character sets.
+
+     If QUIT non-`nil', it is the character to use for quitting.
+     (Normally this is `C-g'.)
+
+   * The variable `meta-flag' has been deleted; use `set-input-mode' to
+     enable or disable support for a META key.  This change was made
+     because `set-input-mode' can send the terminal the appropriate
+     commands to enable or disable operation of the META key.
+
+   * The new variable `extra-keyboard-modifiers' lets Lisp programs
+     "press" the modifier keys on the keyboard.  The value is a bit
+     mask:
+
+    1
+          The SHIFT key.
+
+    2
+          The LOCK key.
+
+    4
+          The CTL key.
+
+    8
+          The META key.
+
+     When you use X windows, the program can press any of the modifier
+     keys in this way.  Otherwise, only the CTL and META keys can be
+     virtually pressed.
+
+   * You can use the new function `keyboard-translate' to set up
+     `keyboard-translate-table' conveniently.
+
+   * Y-or-n questions using the `y-or-n-p' function now accept `C-]'
+     (usually mapped to `abort-recursive-edit') as well as `C-g' to
+     quit.
+
+   * The variable `num-input-keys' is the total number of key sequences
+     that the user has typed during this Emacs session.
+
+   * A new Lisp variable, `function-key-map', holds a keymap which
+     describes the character sequences sent by function keys on an
+     ordinary character terminal.  This uses the same keymap data
+     structure that is used to hold bindings of key sequences, but it
+     has a different meaning: it specifies translations to make while
+     reading a key sequence.
+
+     If `function-key-map' "binds" a key sequence K to a vector V, then
+     when K appears as a subsequence *anywhere* in a key sequence, it
+     is replaced with V.
+
+     For example, VT100 terminals send `ESC O P' when the "keypad" PF1
+     key is pressed.  Thus, on a VT100, `function-key-map' should
+     "bind" that sequence to `[pf1]'.  This specifies translation of
+     `ESC O P' into PF1 anywhere in a key sequence.
+
+     Thus, typing `C-c PF1' sends the character sequence `C-c ESC O P',
+     but `read-key-sequence' translates this back into `C-c PF1', which
+     it returns as the vector `[?\C-c PF1]'.
+
+     Entries in `function-key-map' are ignored if they conflict with
+     bindings made in the minor mode, local, or global keymaps.
+
+     The value of `function-key-map' is usually set up automatically
+     according to the terminal's Terminfo or Termcap entry, and the
+     terminal-specific Lisp files.  Emacs comes with a number of
+     terminal-specific files for many common terminals; their main
+     purpose is to make entries in `function-key-map' beyond those that
+     can be deduced from Termcap and Terminfo.
+
+   * The variable `key-translation-map' works like `function-key-map'
+     except for two things:
+
+        * `key-translation-map' goes to work after `function-key-map' is
+          finished; it receives the results of translation by
+          `function-key-map'.
+
+        * `key-translation-map' overrides actual key bindings.
+
+     The intent of `key-translation-map' is for users to map one
+     character set to another, including ordinary characters normally
+     bound to `self-insert-command'.
+
+New Syntax Table Features
+=========================
+
+   * You can use two new functions to move across characters in certain
+     syntax classes.
+
+     `skip-syntax-forward' moves point forward across characters whose
+     syntax classes are mentioned in its first argument, a string.  It
+     stops when it encounters the end of the buffer, or position LIM
+     (the optional second argument), or a character it is not supposed
+     to skip.  The function `skip-syntax-backward' is similar but moves
+     backward.
+
+   * The new function `forward-comment' moves point by comments.  It
+     takes one argument, COUNT; it moves point forward across COUNT
+     comments (backward, if COUNT is negative).  If it finds anything
+     other than a comment or whitespace, it stops, leaving point at the
+     far side of the last comment found.  It also stops after
+     satisfying COUNT.
+
+   * The new variable `words-include-escapes' affects the behavior of
+     `forward-word' and everything that uses it.  If it is non-`nil',
+     then characters in the "escape" and "character quote" syntax
+     classes count as part of words.
+
+   * There are two new syntax flags for use in syntax tables.
+
+        - The prefix flag.
+
+          The `p' flag identifies additional "prefix characters" in Lisp
+          syntax.  You can set this flag with `modify-syntax-entry' by
+          including the letter `p' in the syntax specification.
+
+          These characters are treated as whitespace when they appear
+          between expressions.  When they appear withing an expression,
+          they are handled according to their usual syntax codes.
+
+          The function `backward-prefix-chars' moves back over these
+          characters, as well as over characters whose primary syntax
+          class is prefix (`'').
+
+        - The `b' comment style flag.
+
+          Emacs can now supports two comment styles simultaneously.
+          (This is for the sake of C++.)  More specifically, it can
+          recognize two different comment-start sequences.  Both must
+          share the same first character; only the second character may
+          differ.  Mark the second character of the `b'-style comment
+          start sequence with the `b' flag.  You can set this flag with
+          `modify-syntax-entry' by including the letter `b' in the
+          syntax specification.
+
+          The two styles of comment can have different comment-end
+          sequences.  A comment-end sequence (one or two characters)
+          applies to the `b' style if its first character has the `b'
+          flag set; otherwise, it applies to the `a' style.
+
+          The appropriate comment syntax settings for C++ are as
+          follows:
+
+         `/'
+               `124b'
+
+         `*'
+               `23'
+
+         newline
+               `>b'
+
+          Thus `/*' is a comment-start sequence for `a' style, `//' is
+          a comment-start sequence for `b' style, `*/' is a comment-end
+          sequence for `a' style, and newline is a comment-end sequence
+          for `b' style.
+
+The Case Table
+==============
+
+   You can customize case conversion using the new case table feature.
+A case table is a collection of strings that specifies the mapping
+between upper case and lower case letters.  Each buffer has its own
+case table.  You need a case table if you are using a language which
+has letters that are not standard ASCII letters.
+
+   A case table is a list of this form:
+
+     (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
+
+where each element is either `nil' or a string of length 256.  The
+element DOWNCASE says how to map each character to its lower-case
+equivalent.  The element UPCASE maps each character to its upper-case
+equivalent.  If lower and upper case characters are in 1-1
+correspondence, use `nil' for UPCASE; then Emacs deduces the upcase
+table from DOWNCASE.
+
+   For some languages, upper and lower case letters are not in 1-1
+correspondence.  There may be two different lower case letters with the
+same upper case equivalent.  In these cases, you need to specify the
+maps for both directions.
+
+   The element CANONICALIZE maps each character to a canonical
+equivalent; any two characters that are related by case-conversion have
+the same canonical equivalent character.
+
+   The element EQUIVALENCES is a map that cyclicly permutes each
+equivalence class (of characters with the same canonical equivalent).
+
+   You can provide `nil' for both CANONICALIZE and EQUIVALENCES, in
+which case both are deduced from DOWNCASE and UPCASE.
+
+   Here are the functions for working with case tables:
+
+   `case-table-p' is a predicate that says whether a Lisp object is a
+valid case table.
+
+   `set-standard-case-table' takes one argument and makes that argument
+the case table for new buffers created subsequently.
+`standard-case-table' returns the current value of the new buffer case
+table.
+
+   `current-case-table' returns the case table of the current buffer.
+`set-case-table' sets the current buffer's case table to the argument.
+
+   `set-case-syntax-pair' is a convenient function for specifying a
+pair of letters, upper case and lower case.  Call it with two arguments,
+the upper case letter and the lower case letter.  It modifies the
+standard case table and a few syntax tables that are predefined in
+Emacs.  This function is intended as a subroutine for packages that
+define non-ASCII character sets.
+
+   Load the library `iso-syntax' to set up the syntax and case table for
+the 256 bit ISO Latin 1 character set.
+
+New Features for Dealing with Buffers
+=====================================
+
+   * The new function `buffer-modified-tick' returns a buffer's
+     modification-count that ticks every time the buffer is modified.
+     It takes one optional argument, which is the buffer you want to
+     examine.  If the argument is `nil' (or omitted), the current
+     buffer is used.
+
+   * `buffer-disable-undo' is a new name for the function formerly
+     known as `buffer-flush-undo'.  This turns off recording of undo
+     information in the buffer given as argument.
+
+   * The new function `generate-new-buffer-name' chooses a name that
+     would be unique for a new buffer--but does not create the buffer.
+     Give it one argument, a starting name.  It produces a name not in
+     use for a buffer by appending a number inside of `<...>'.
+
+   * The function `rename-buffer' now takes an optional second argument
+     which tells it that if the specified new name corresponds to an
+     existing buffer, it should use `generate-new-buffer-name' to
+     modify the name to be unique, rather than signaling an error.
+
+     `rename-buffer' now returns the name to which the buffer was
+     renamed.
+
+   * The function `list-buffers' now looks at the local variable
+     `list-buffers-directory' in each non-file-visiting buffer, and
+     shows its value where the file would normally go.  Dired sets this
+     variable in each Dired buffer, so the buffer list now shows which
+     directory each Dired buffer is editing.
+
+   * The function `other-buffer' now takes an optional second argument
+     VISIBLE-OK which, if non-`nil', indicates that buffers currently
+     being displayed in windows may be returned even if there are other
+     buffers not visible.  Normally, `other-buffer' returns a currently
+     visible buffer only as a last resort, if there are no suitable
+     nonvisible buffers.
+
+   * The hook `kill-buffer-hook' now runs whenever a buffer is killed.
+
+Local Variables Features
+========================
+
+   * If a local variable name has a non-`nil' `permanent-local'
+     property, then `kill-all-local-variables' does not kill it.  Such
+     local variables are "permanent"--they remain unchanged even if you
+     select a different major mode.
+
+     Permanent locals are useful when they have to do with where the
+     file came from or how to save it, rather than with how to edit the
+     contents.
+
+   * The function `make-local-variable' now never changes the value of
+     the variable that it makes local.  If the variable had no value
+     before, it still has no value after becoming local.
+
+   * The new function `default-boundp' tells you whether a variable has
+     a default value (as opposed to being unbound in its default
+     value).  If `(default-boundp 'foo)' returns `nil', then
+     `(default-value 'foo)' would get an error.
+
+     `default-boundp' is to `default-value' as `boundp' is to
+     `symbol-value'.
+
+   * The special forms `defconst' and `defvar', when the variable is
+     local in the current buffer, now set the variable's default value
+     rather than its local value.
+
+New Features for Subprocesses
+=============================
+
+   * `call-process' and `call-process-region' now return a value that
+     indicates how the synchronous subprocess terminated.  It is either
+     a number, which is the exit status of a process, or a signal name
+     represented as a string.
+
+   * `process-status' now returns `open' and `closed' as the status
+     values for network connections.
+
+   * The standard asynchronous subprocess features work on VMS now, and
+     the special VMS asynchronous subprocess functions have been
+     deleted.
+
+   * You can use the transaction queue feature for more convenient
+     communication with subprocesses using transactions.
+
+     Call `tq-create' to create a transaction queue communicating with a
+     specified process.  Then you can call `tq-enqueue' to send a
+     transaction.  `tq-enqueue' takes these five arguments:
+
+          (tq-enqueue TQ QUESTION REGEXP CLOSURE FN)
+
+     TQ is the queue to use.  (Specifying the queue has the effect of
+     specifying the process to talk to.)  The argument QUESTION is the
+     outgoing message which starts the transaction.  The argument FN is
+     the function to call when the corresponding answer comes back; it
+     is called with two arguments: CLOSURE, and the answer received.
+
+     The argument REGEXP is a regular expression to match the entire
+     answer; that's how `tq-enqueue' tells where the answer ends.
+
+     Call `tq-close' to shut down a transaction queue and terminate its
+     subprocess.
+
+   * The function `signal-process' sends a signal to process PID, which
+     need not be a child of Emacs.  The second argument SIGNAL
+     specifies which signal to send; it should be an integer.
+
+New Features for Dealing with Times And Time Delays
+===================================================
+
+   * The new function `current-time' returns the system's time value as
+     a list of three integers: `(HIGH LOW MICROSEC)'.  The integers
+     HIGH and LOW combine to give the number of seconds since 0:00
+     January 1, 1970, which is HIGH * 2**16 + LOW.
+
+     MICROSEC gives the microseconds since the start of the current
+     second (or 0 for systems that return time only on the resolution
+     of a second).
+
+   * The function `current-time-string' accepts an optional argument
+     TIME-VALUE.  If given, this specifies a time to format instead of
+     the current time.  The argument should be a cons cell containing
+     two integers, or a list whose first two elements are integers.
+     Thus, you can use times obtained from `current-time' (see above)
+     and from `file-attributes'.
+
+   * You can now find out the user's time zone using
+     `current-time-zone'.
+
+     The value has the form `(OFFSET NAME)'.  Here OFFSET is an integer
+     giving the number of seconds ahead of UTC (east of Greenwich).  A
+     negative value means west of Greenwich.  The second element, NAME
+     is a string giving the name of the time zone.  Both elements
+     change when daylight savings time begins or ends; if the user has
+     specified a time zone that does not use a seasonal time
+     adjustment, then the value is constant through time.
+
+     If the operating system doesn't supply all the information
+     necessary to compute the value, both elements of the list are
+     `nil'.
+
+     The optional argument TIME-VALUE, if given, specifies a time to
+     analyze instead of the current time.  The argument should be a
+     cons cell containing two integers, or a list whose first two
+     elements are integers.  Thus, you can use times obtained from
+     `current-time' and from `file-attributes'.
+
+   * `sit-for', `sleep-for' now let you specify the time period in
+     milliseconds as well as in seconds.  The first argument gives the
+     number of seconds, as before, and the optional second argument
+     gives additional milliseconds.  The time periods specified by
+     these two arguments are added together.
+
+     Not all systems support this; you get an error if you specify
+     nonzero milliseconds and it isn't supported.
+
+     `sit-for' also accepts an optional third argument NODISP.  If this
+     is non-`nil', `sit-for' does not redisplay.  It still waits for
+     the specified time or until input is available.
+
+   * `accept-process-output' now accepts a timeout specified by optional
+     second and third arguments.  The second argument specifies the
+     number of seconds, while the third specifies the number of
+     milliseconds.  The time periods specified by these two arguments
+     are added together.
+
+     Not all systems support this; you get an error if you specify
+     nonzero milliseconds and it isn't supported.
+
+     The function returns `nil' if the timeout expired before output
+     arrived, or non-`nil' if it did get some output.
+
+   * You can set up a timer to call a function at a specified future
+     time.  To do so, call `run-at-time', like this:
+
+          (run-at-time TIME REPEAT FUNCTION ARGS...)
+
+     Here, TIME is a string saying when to call the function.  The
+     argument FUNCTION is the function to call later, and ARGS are the
+     arguments to give it when it is called.
+
+     The argument REPEAT specifies how often to repeat the call.  If
+     REPEAT is `nil', there are no repetitions; FUNCTION is called just
+     once, at TIME.  If REPEAT is an integer, it specifies a repetition
+     period measured in seconds.
+
+     Absolute times may be specified in a wide variety of formats; The
+     form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where all fields are
+     numbers, works; the format that `current-time-string' returns is
+     also allowed.
+
+     To specify a relative time, use numbers followed by units.  For
+     example:
+
+    `1 min'
+          denotes 1 minute from now.
+
+    `1 min 5 sec'
+          denotes 65 seconds from now.
+
+    `1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year'
+          denotes exactly 103 months, 123 days, and 10862 seconds from
+          now.
+
+     If TIME is an integer, that specifies a relative time measured in
+     seconds.
+
+   To cancel the requested future action, pass the value that
+`run-at-time' returned to the function `cancel-timer'.
+
+Profiling Lisp Programs
+=======================
+
+   You can now make execution-time profiles of Emacs Lisp programs using
+the `profile' library.  See the file `profile.el' for instructions; if
+you have written a Lisp program big enough to be worth profiling, you
+can surely understand them.
+
+New Features for Lisp Debuggers
+===============================
+
+   * You can now specify which kinds of errors should invoke the Lisp
+     debugger by setting the variable `debug-on-error' to a list of
+     error conditions.  For example, if you set it to the list
+     `(void-variable)', then only errors about a variable that has no
+     value invoke the debugger.
+
+   * The variable `command-debug-status' is used by Lisp debuggers.  It
+     records the debugging status of current interactive command.  Each
+     time a command is called interactively, this variable is bound to
+     `nil'.  The debugger can set this variable to leave information for
+     future debugger invocations during the same command.
+
+     The advantage of this variable over some other variable in the
+     debugger itself is that the data will not be visible for any other
+     command invocation.
+
+   * The function `backtrace-frame' is intended for use in Lisp
+     debuggers.  It returns information about what a frame on the Lisp
+     call stack is doing.  You specify one argument, which is the
+     number of stack frames to count up from the current execution
+     point.
+
+     If that stack frame has not evaluated the arguments yet (or is a
+     special form), the value is `(nil FUNCTION ARG-FORMS...)'.
+
+     If that stack frame has evaluated its arguments and called its
+     function already, the value is `(t FUNCTION ARG-VALUES...)'.
+
+     In the return value, FUNCTION is whatever was supplied as CAR of
+     evaluated list, or a `lambda' expression in the case of a macro
+     call.  If the function has a `&rest' argument, that is represented
+     as the tail of the list ARG-VALUES.
+
+     If the argument is out of range, `backtrace-frame' returns `nil'.
+
+Memory Allocation Changes
+=========================
+
+   The list that `garbage-collect' returns now has one additional
+element.  This is a cons cell containing two numbers.  It gives
+information about the number of used and free floating point numbers,
+much as the first element gives such information about the number of
+used and free cons cells.
+
+   The new function `memory-limit' returns an indication of the last
+address allocated by Emacs.  More precisely, it returns that address
+divided by 1024.  You can use this to get a general idea of how your
+actions affect the memory usage.
+
+Hook Changes
+============
+
+   * Expanding an abbrev first runs the new hook
+     `pre-abbrev-expand-hook'.
+
+   * The editor command loop runs the normal hook `pre-command-hook'
+     before each command, and runs `post-command-hook' after each
+     command.
+
+   * Auto-saving runs the new hook `auto-save-hook' before actually
+     starting to save any files.
+
+   * The new variable `revert-buffer-insert-file-contents-function'
+     holds a function that `revert-buffer' now uses to read in the
+     contents of the reverted buffer--instead of calling
+     `insert-file-contents'.
+
+   * The variable `lisp-indent-hook' has been renamed to
+     `lisp-indent-function'.
+
+   * The variable `auto-fill-hook' has been renamed to
+     `auto-fill-function'.
+
+   * The variable `blink-paren-hook' has been renamed to
+     `blink-paren-function'.
+
+   * The variable `temp-buffer-show-hook' has been renamed to
+     `temp-buffer-show-function'.
+
+   * The variable `suspend-hook' is now a normal hook.  It used to be a
+     special kind of hook; its value had to be a single function, and
+     if the function returned a non-`nil' value, then suspension was
+     inhibited.
+
+   * The new function `add-hook' provides a handy way to add a function
+     to a hook variable.  For example,
+
+          (add-hook 'text-mode-hook 'my-text-hook-function)
+
+     arranges to call `my-text-hook-function' when entering Text mode
+     or related modes.
+
+     `add-hook' takes an optional third argument which says to add the
+     new hook function at the end of the list (normally, it goes at the
+     beginning).
+