+*** `syntax-class' extracts the class of a syntax code (as returned
+by `syntax-after').
+
++++
+*** The new function `syntax-ppss' rovides an efficient way to find the
+current syntactic context at point.
+
+** File operation changes:
+
++++
+*** New vars `exec-suffixes' and `load-suffixes' used when
+searching for an executable or an Emacs Lisp file.
+
++++
+*** The new primitive `set-file-times' sets a file's access and
+modification times. Magic file name handlers can handle this
+operation.
+
++++
+*** The new function `file-remote-p' tests a file name and returns
+non-nil if it specifies a remote file (one that Emacs accesses using
+its own special methods and not directly through the file system).
+The value in that case is an identifier for the remote file system.
+
++++
+*** `buffer-auto-save-file-format' is the new name for what was
+formerly called `auto-save-file-format'. It is now a permanent local.
+
++++
+*** Functions `file-name-sans-extension' and `file-name-extension' now
+ignore the leading dots in file names, so that file names such as
+`.emacs' are treated as extensionless.
+
++++
+*** `copy-file' now takes an additional option arg MUSTBENEW.
+
+This argument works like the MUSTBENEW argument of write-file.
+
++++
+*** `visited-file-modtime' and `calendar-time-from-absolute' now return
+a list of two integers, instead of a cons.
+
++++
+*** `file-chase-links' now takes an optional second argument LIMIT which
+specifies the maximum number of links to chase through. If after that
+many iterations the file name obtained is still a symbolic link,
+`file-chase-links' returns it anyway.
+
++++
+*** The new hook `before-save-hook' is invoked by `basic-save-buffer'
+before saving buffers. This allows packages to perform various final
+tasks, for example; it can be used by the copyright package to make
+sure saved files have the current year in any copyright headers.
+
++++
+*** If `buffer-save-without-query' is non-nil in some buffer,
+`save-some-buffers' will always save that buffer without asking (if
+it's modified).
+
++++
+*** New function `locate-file' searches for a file in a list of directories.
+`locate-file' accepts a name of a file to search (a string), and two
+lists: a list of directories to search in and a list of suffixes to
+try; typical usage might use `exec-path' and `load-path' for the list
+of directories, and `exec-suffixes' and `load-suffixes' for the list
+of suffixes. The function also accepts a predicate argument to
+further filter candidate files.
+
+One advantage of using this function is that the list of suffixes in
+`exec-suffixes' is OS-dependant, so this function will find
+executables without polluting Lisp code with OS dependancies.
+
+---
+*** The precedence of file name handlers has been changed.
+
+Instead of choosing the first handler that matches,
+`find-file-name-handler' now gives precedence to a file name handler
+that matches nearest the end of the file name. More precisely, the
+handler whose (match-beginning 0) is the largest is chosen. In case
+of ties, the old "first matched" rule applies.
+
++++
+*** A file name handler can declare which operations it handles.
+
+You do this by putting an `operation' property on the handler name
+symbol. The property value should be a list of the operations that
+the handler really handles. It won't be called for any other
+operations.
+
+This is useful for autoloaded handlers, to prevent them from being
+autoloaded when not really necessary.
+
+** Input changes:
+
++++
+*** An interactive specification can now use the code letter 'U' to get
+the up-event that was discarded in case the last key sequence read for a
+previous `k' or `K' argument was a down-event; otherwise nil is used.
+
++++
+*** The new interactive-specification `G' reads a file name
+much like `F', but if the input is a directory name (even defaulted),
+it returns just the directory name.
+
+---
+*** Functions `y-or-n-p', `read-char', `read-key-sequence' and the like, that
+display a prompt but don't use the minibuffer, now display the prompt
+using the text properties (esp. the face) of the prompt string.
+
++++
+*** (while-no-input BODY...) runs BODY, but only so long as no input
+arrives. If the user types or clicks anything, BODY stops as if a
+quit had occurred. `while-no-input' returns the value of BODY, if BODY
+finishes. It returns nil if BODY was aborted.
+
+** Minibuffer changes:
+
++++
+*** The new function `minibufferp' returns non-nil if its optional
+buffer argument is a minibuffer. If the argument is omitted, it
+defaults to the current buffer.
+
++++
+*** New function `minibuffer-selected-window' returns the window which
+was selected when entering the minibuffer.
+
++++
+*** `read-from-minibuffer' now accepts an additional argument KEEP-ALL
+saying to put all inputs in the history list, even empty ones.
+
++++
+*** The `read-file-name' function now takes an additional argument which
+specifies a predicate which the file name read must satify. The
+new variable `read-file-name-predicate' contains the predicate argument
+while reading the file name from the minibuffer; the predicate in this
+variable is used by read-file-name-internal to filter the completion list.
+
+---
+*** The new variable `read-file-name-function' can be used by Lisp code
+to override the built-in `read-file-name' function.
+
++++
+*** The new variable `read-file-name-completion-ignore-case' specifies
+whether completion ignores case when reading a file name with the
+`read-file-name' function.
+
++++
+*** The new function `read-directory-name' for reading a directory name.
+
+It is like `read-file-name' except that the defaulting works better
+for directories, and completion inside it shows only directories.
+
+** Completion changes:
+
++++
+*** The functions `all-completions' and `try-completion' now accept lists
+of strings as well as hash-tables additionally to alists, obarrays
+and functions. Furthermore, the function `test-completion' is now
+exported to Lisp. The keys in alists and hash tables can be either
+strings or symbols, which are automatically converted with to strings.
+
++++
+*** The new macro `dynamic-completion-table' supports using functions
+as a dynamic completion table.
+
+ (dynamic-completion-table FUN)
+
+FUN is called with one argument, the string for which completion is required,
+and it should return an alist containing all the intended possible
+completions. This alist can be a full list of possible completions so that FUN
+can ignore the value of its argument. If completion is performed in the
+minibuffer, FUN will be called in the buffer from which the minibuffer was
+entered. `dynamic-completion-table' then computes the completion.
+
++++
+*** The new macro `lazy-completion-table' initializes a variable
+as a lazy completion table.
+
+ (lazy-completion-table VAR FUN &rest ARGS)
+
+If the completion table VAR is used for the first time (e.g., by passing VAR
+as an argument to `try-completion'), the function FUN is called with arguments
+ARGS. FUN must return the completion table that will be stored in VAR. If
+completion is requested in the minibuffer, FUN will be called in the buffer
+from which the minibuffer was entered. The return value of
+`lazy-completion-table' must be used to initialize the value of VAR.
+
++++
+** Enhancements to keymaps.
+
+*** Cleaner way to enter key sequences.
+
+You can enter a constant key sequence in a more natural format, the
+same one used for saving keyboard macros, using the macro `kbd'. For
+example,
+
+(kbd "C-x C-f") => "\^x\^f"
+
+*** Interactive commands can be remapped through keymaps.
+
+This is an alternative to using `defadvice' or `substitute-key-definition'
+to modify the behavior of a key binding using the normal keymap
+binding and lookup functionality.
+
+When a key sequence is bound to a command, and that command is
+remapped to another command, that command is run instead of the
+original command.
+
+Example:
+Suppose that minor mode `my-mode' has defined the commands
+`my-kill-line' and `my-kill-word', and it wants C-k (and any other key
+bound to `kill-line') to run the command `my-kill-line' instead of
+`kill-line', and likewise it wants to run `my-kill-word' instead of
+`kill-word'.
+
+Instead of rebinding C-k and the other keys in the minor mode map,
+command remapping allows you to directly map `kill-line' into
+`my-kill-line' and `kill-word' into `my-kill-word' using `define-key':
+
+ (define-key my-mode-map [remap kill-line] 'my-kill-line)
+ (define-key my-mode-map [remap kill-word] 'my-kill-word)
+
+When `my-mode' is enabled, its minor mode keymap is enabled too. So
+when the user types C-k, that runs the command `my-kill-line'.
+
+Only one level of remapping is supported. In the above example, this
+means that if `my-kill-line' is remapped to `other-kill', then C-k still
+runs `my-kill-line'.
+
+The following changes have been made to provide command remapping:
+
+- Command remappings are defined using `define-key' with a prefix-key
+ `remap', i.e. `(define-key MAP [remap CMD] DEF)' remaps command CMD
+ to definition DEF in keymap MAP. The definition is not limited to
+ another command; it can be anything accepted for a normal binding.
+
+- The new function `command-remapping' returns the binding for a
+ remapped command in the current keymaps, or nil if not remapped.
+
+- `key-binding' now remaps interactive commands unless the optional
+ third argument NO-REMAP is non-nil.
+
+- `where-is-internal' now returns nil for a remapped command (e.g.
+ `kill-line', when `my-mode' is enabled), and the actual key binding for
+ the command it is remapped to (e.g. C-k for my-kill-line).
+ It also has a new optional fifth argument, NO-REMAP, which inhibits
+ remapping if non-nil (e.g. it returns "C-k" for `kill-line', and
+ "<kill-line>" for `my-kill-line').
+
+- The new variable `this-original-command' contains the original
+ command before remapping. It is equal to `this-command' when the
+ command was not remapped.
+
+*** If text has a `keymap' property, that keymap takes precedence
+over minor mode keymaps.
+
+*** The `keymap' property now also works at the ends of overlays and
+text properties, according to their stickiness. This also means that it
+works with empty overlays. The same hold for the `local-map' property.
+
+*** Dense keymaps now handle inheritance correctly.
+
+Previously a dense keymap would hide all of the simple-char key
+bindings of the parent keymap.
+
+*** `define-key-after' now accepts keys longer than 1.
+
+*** New function `current-active-maps' returns a list of currently
+active keymaps.
+
+*** New function `describe-buffer-bindings' inserts the list of all
+defined keys and their definitions.
+
+*** New function `keymap-prompt' returns the prompt string of a keymap.
+
+*** (map-keymap FUNCTION KEYMAP) applies the function to each binding
+in the keymap.
+
+*** New variable `emulation-mode-map-alists'.
+
+Lisp packages using many minor mode keymaps can now maintain their own
+keymap alist separate from `minor-mode-map-alist' by adding their
+keymap alist to this list.
+
+** Abbrev changes:
+
++++
+*** The new function `copy-abbrev-table' copies an abbrev table.
+
+It returns a new abbrev table that is a copy of a given abbrev table.
+
++++
+*** `define-abbrev' now accepts an optional argument SYSTEM-FLAG.
+
+If non-nil, this marks the abbrev as a "system" abbrev, which means
+that it won't be stored in the user's abbrevs file if he saves the
+abbrevs. Major modes that predefine some abbrevs should always
+specify this flag.