]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge from emacs--devo--0
authorMiles Bader <miles@gnu.org>
Wed, 7 Jun 2006 18:05:10 +0000 (18:05 +0000)
committerMiles Bader <miles@gnu.org>
Wed, 7 Jun 2006 18:05:10 +0000 (18:05 +0000)
Patches applied:

 * emacs--devo--0  (patch 285-296)

   - Update from CVS
   - Merge from gnus--rel--5.10
   - Update from CVS: admin/FOR-RELEASE: Update refcard section.

 * gnus--rel--5.10  (patch 102-104)

   - Update from CVS

Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-64

58 files changed:
1  2 
configure
configure.in
etc/HELLO
etc/MORE.STUFF
etc/NEWS
etc/NEWS.19
etc/PROBLEMS
etc/TODO
lib-src/makefile.w32-in
lisp/ChangeLog
lisp/arc-mode.el
lisp/faces.el
lisp/gnus/mm-util.el
lisp/info.el
lisp/international/mule-cmds.el
lisp/international/mule.el
lisp/loadup.el
lisp/mail/rmail.el
lisp/makefile.w32-in
lisp/progmodes/sh-script.el
lisp/simple.el
lisp/startup.el
lisp/subr.el
lisp/term.el
lisp/term/mac-win.el
lisp/term/w32-win.el
lisp/term/x-win.el
lisp/textmodes/ispell.el
lisp/textmodes/sgml-mode.el
src/ChangeLog
src/Makefile.in
src/buffer.c
src/coding.c
src/config.in
src/dispextern.h
src/dispnew.c
src/emacs.c
src/fileio.c
src/fns.c
src/frame.c
src/intervals.c
src/lisp.h
src/lread.c
src/macfns.c
src/macgui.h
src/macterm.c
src/minibuf.c
src/process.c
src/search.c
src/w32fns.c
src/w32term.c
src/window.c
src/xdisp.c
src/xfaces.c
src/xfns.c
src/xmenu.c
src/xterm.c
src/xterm.h

diff --cc configure
index 6969f29fed43af9a1daecd3f4c328f1f6a3321b3,d72790133d7af89fe15496eff5242e30ed54b6de..c84eb76bdd5037d0ceee5d19ab143ea2e07b0dc5
+++ b/configure
@@@ -310,7 -310,7 +310,7 @@@ ac_includes_default="
  # include <unistd.h>
  #endif"
  
- ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO GZIP_PROG LIBSOUND SET_MAKE PKG_CONFIG GTK_CFLAGS GTK_LIBS XFT_CFLAGS XFT_LIBS FREETYPE_CFLAGS FREETYPE_LIBS FONTCONFIG_CFLAGS FONTCONFIG_LIBS HAVE_LIBOTF LIBOTF_CFLAGS LIBOTF_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS GETOPT_H GETOPTOBJS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
 -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO GZIP_PROG LIBSOUND PKG_CONFIG ALSA_CFLAGS ALSA_LIBS CFLAGS_SOUND SET_MAKE GTK_CFLAGS GTK_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS GETOPT_H GETOPTOBJS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INSTALL_INFO GZIP_PROG LIBSOUND PKG_CONFIG ALSA_CFLAGS ALSA_LIBS CFLAGS_SOUND SET_MAKE GTK_CFLAGS GTK_LIBS XFT_CFLAGS XFT_LIBS FREETYPE_CFLAGS FREETYPE_LIBS FONTCONFIG_CFLAGS FONTCONFIG_LIBS HAVE_LIBOTF LIBOTF_CFLAGS LIBOTF_LIBS ALLOCA liblockfile LIBOBJS NEED_SETGID KMEM_GROUP GETLOADAVG_LIBS GETOPT_H GETOPTOBJS version configuration canonical srcdir lispdir locallisppath lisppath x_default_search_path etcdir archlibdir docdir bitmapdir gamedir gameuser c_switch_system c_switch_machine LD_SWITCH_X_SITE LD_SWITCH_X_SITE_AUX C_SWITCH_X_SITE X_TOOLKIT_TYPE machfile opsysfile carbon_appdir LTLIBOBJS'
  ac_subst_files=''
  
  # Initialize some variables set by options.
@@@ -24295,19 -23769,13 +24411,22 @@@ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t 
  s,@INSTALL_INFO@,$INSTALL_INFO,;t t
  s,@GZIP_PROG@,$GZIP_PROG,;t t
  s,@LIBSOUND@,$LIBSOUND,;t t
- s,@SET_MAKE@,$SET_MAKE,;t t
  s,@PKG_CONFIG@,$PKG_CONFIG,;t t
+ s,@ALSA_CFLAGS@,$ALSA_CFLAGS,;t t
+ s,@ALSA_LIBS@,$ALSA_LIBS,;t t
+ s,@CFLAGS_SOUND@,$CFLAGS_SOUND,;t t
+ s,@SET_MAKE@,$SET_MAKE,;t t
  s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t
  s,@GTK_LIBS@,$GTK_LIBS,;t t
 +s,@XFT_CFLAGS@,$XFT_CFLAGS,;t t
 +s,@XFT_LIBS@,$XFT_LIBS,;t t
 +s,@FREETYPE_CFLAGS@,$FREETYPE_CFLAGS,;t t
 +s,@FREETYPE_LIBS@,$FREETYPE_LIBS,;t t
 +s,@FONTCONFIG_CFLAGS@,$FONTCONFIG_CFLAGS,;t t
 +s,@FONTCONFIG_LIBS@,$FONTCONFIG_LIBS,;t t
 +s,@HAVE_LIBOTF@,$HAVE_LIBOTF,;t t
 +s,@LIBOTF_CFLAGS@,$LIBOTF_CFLAGS,;t t
 +s,@LIBOTF_LIBS@,$LIBOTF_LIBS,;t t
  s,@ALLOCA@,$ALLOCA,;t t
  s,@liblockfile@,$liblockfile,;t t
  s,@LIBOBJS@,$LIBOBJS,;t t
diff --cc configure.in
Simple merge
diff --cc etc/HELLO
Simple merge
diff --cc etc/MORE.STUFF
Simple merge
diff --cc etc/NEWS
Simple merge
diff --cc etc/NEWS.19
index 0000000000000000000000000000000000000000,2d2e5f57066e712d08ecf32536721bdb3c264a28..ce06d2a8bfaddc88353c7589bc9eea1884afeb5d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,6540 +1,6540 @@@
 -VC searches for RCS headers in working files (like `$Id$') and
+ GNU Emacs NEWS -- history of user-visible changes.  1992.
+ Copyright (C) 1993, 1994, 1995, 2001, 2006 Free Software Foundation, Inc.
+ See the end for copying conditions.
+ This file is about changes in emacs versions 19.
\f
+ * Emacs 19.34 is a bug-fix release with no user-visible changes.
\f
+ * Changes in Emacs 19.33.
+ ** Bibtex mode no longer turns on Auto Fill automatically.  (No major
+ mode should do that--it is the user's choice.)
+ ** The variable normal-auto-fill-function specifies the function to
+ use for auto-fill-function, if and when Auto Fill is turned on.
+ Major modes can set this locally to alter how Auto Fill works.
\f
+ * Editing Changes in Emacs 19.32
+ ** C-x f with no argument now signals an error.
+ To set the fill column at the current column, use C-u C-x f.
+ ** Expanding dynamic abbrevs with M-/ is now smarter about case
+ conversion.  If you type the abbreviation with mixed case, and it
+ matches the beginning of the expansion including case, then the
+ expansion is copied verbatim.  Using SPC M-/ to copy an additional
+ word always copies it verbatim except when the previous copied word is
+ all caps.
+ ** On a non-windowing terminal, which can display only one Emacs frame
+ at a time, creating a new frame with C-x 5 2 also selects that frame.
+ When using a display that can show multiple frames at once, C-x 5 2
+ does make the frame visible, but does not select it.  This is the same
+ as in previous Emacs versions.
+ ** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a
+ non-X terminal on Unix.  Of course, only one frame is visible at any
+ time, since your terminal doesn't have the ability to display multiple
+ frames.
+ ** On Windows, set win32-pass-alt-to-system to a non-nil value
+ if you would like tapping the Alt key to invoke the Windows menu.
+ This feature is not enabled by default; since the Alt key is also the
+ Meta key, it is too easy and painful to activate this feature by
+ accident.
+ ** The command apply-macro-to-region-lines repeats the last defined
+ keyboard macro once for each complete line within the current region.
+ It does this line by line, by moving point to the beginning of that
+ line and then executing the macro.
+ This command is not new, but was never documented before.
+ ** You can now use Mouse-1 to place the region around a string constant
+ (something surrounded by doublequote characters or other delimiter
+ characters of like syntax) by double-clicking on one of the delimiting
+ characters.
+ ** Font Lock mode
+ *** Font Lock support modes
+ Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see
+ below) in a flexible way.  Rather than adding the appropriate function to the
+ hook font-lock-mode-hook, you can use the new variable font-lock-support-mode
+ to control which modes have Fast Lock mode or Lazy Lock mode turned on when
+ Font Lock mode is enabled.
+ For example, to use Fast Lock mode when Font Lock mode is turned on, put:
+  (setq font-lock-support-mode 'fast-lock-mode)
+ in your ~/.emacs.
+ *** lazy-lock
+ The lazy-lock package speeds up Font Lock mode by making fontification occur
+ only when necessary, such as when a previously unfontified part of the buffer
+ becomes visible in a window.  When you create a buffer with Font Lock mode and
+ Lazy Lock mode turned on, the buffer is not fontified.  When certain events
+ occur (such as scrolling), Lazy Lock makes sure that the visible parts of the
+ buffer are fontified.  Lazy Lock also defers on-the-fly fontification until
+ Emacs has been idle for a given amount of time.
+ To use this package, put in your ~/.emacs:
+  (setq font-lock-support-mode 'lazy-lock-mode)
+ To control the package behavior, see the documentation for `lazy-lock-mode'.
+ ** Changes in BibTeX mode.
+ *** For all entries allow spaces and tabs between opening brace or
+ paren and key.
+ *** Non-escaped double-quoted characters (as in `Sch"of') are now
+ supported.
+ ** Gnus changes.
+ Gnus, the Emacs news reader, has undergone further rewriting.  Many new
+ commands and variables have been added.  There should be no
+ significant incompatibilities between this Gnus version and the
+ previously released version, except in the message composition area.
+ Below is a list of the more user-visible changes.  Coding changes
+ between Gnus 5.1 and 5.2 are more extensive.
+ *** A new message composition mode is used.  All old customization
+ variables for mail-mode, rnews-reply-mode and gnus-msg are now
+ obsolete.
+ *** Gnus is now able to generate "sparse" threads -- threads where
+ missing articles are represented by empty nodes.
+     (setq gnus-build-sparse-threads 'some)
+ *** Outgoing articles are stored on a special archive server.
+     To disable this:  (setq gnus-message-archive-group nil)
+ *** Partial thread regeneration now happens when articles are
+ referred.
+ *** Gnus can make use of GroupLens predictions:
+     (setq gnus-use-grouplens t)
+ *** A trn-line tree buffer can be displayed.
+     (setq gnus-use-trees t)
+ *** An nn-like pick-and-read minor mode is available for the summary
+ buffers.
+     (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
+ *** In binary groups you can use a special binary minor mode:
+     `M-x gnus-binary-mode'
+ *** Groups can be grouped in a folding topic hierarchy.
+     (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
+ *** Gnus can re-send and bounce mail.
+     Use the `S D r' and `S D b'.
+ *** Groups can now have a score, and bubbling based on entry frequency
+ is possible.
+     (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
+ *** Groups can be process-marked, and commands can be performed on
+ groups of groups.
+ *** Caching is possible in virtual groups.
+ *** nndoc now understands all kinds of digests, mail boxes, rnews news
+ batches, ClariNet briefs collections, and just about everything else.
+ *** Gnus has a new backend (nnsoup) to create/read SOUP packets.
+ *** The Gnus cache is much faster.
+ *** Groups can be sorted according to many criteria.
+     For instance: (setq gnus-group-sort-function 'gnus-group-sort-by-rank)
+ *** New group parameters have been introduced to set list-address and
+ expiration times.
+ *** All formatting specs allow specifying faces to be used.
+ *** There are several more commands for setting/removing/acting on
+ process marked articles on the `M P' submap.
+ *** The summary buffer can be limited to show parts of the available
+ articles based on a wide range of criteria.  These commands have been
+ bound to keys on the `/' submap.
+ *** Articles can be made persistent -- as an alternative to saving
+ articles with the `*' command.
+ *** All functions for hiding article elements are now toggles.
+ *** Article headers can be buttonized.
+     (add-hook 'gnus-article-display-hook 'gnus-article-add-buttons-to-head)
+ *** All mail backends support fetching articles by Message-ID.
+ *** Duplicate mail can now be treated properly.  See the
+ `nnmail-treat-duplicates' variable.
+ *** All summary mode commands are available directly from the article
+ buffer.
+ *** Frames can be part of `gnus-buffer-configuration'.
+ *** Mail can be re-scanned by a daemonic process.
+ *** Gnus can make use of NoCeM files to filter spam.
+     (setq gnus-use-nocem t)
+ *** Groups can be made permanently visible.
+     (setq gnus-permanently-visible-groups "^nnml:")
+ *** Many new hooks have been introduced to make customizing easier.
+ *** Gnus respects the Mail-Copies-To header.
+ *** Threads can be gathered by looking at the References header.
+     (setq gnus-summary-thread-gathering-function
+           'gnus-gather-threads-by-references)
+ *** Read articles can be stored in a special backlog buffer to avoid
+ refetching.
+     (setq gnus-keep-backlog 50)
+ *** A clean copy of the current article is always stored in a separate
+ buffer to allow easier treatment.
+ *** Gnus can suggest where to save articles.  See `gnus-split-methods'.
+ *** Gnus doesn't have to do as much prompting when saving.
+     (setq gnus-prompt-before-saving t)
+ *** gnus-uu can view decoded files asynchronously while fetching
+ articles.
+     (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
+ *** Filling in the article buffer now works properly on cited text.
+ *** Hiding cited text adds buttons to toggle hiding, and how much
+ cited text to hide is now customizable.
+     (setq gnus-cited-lines-visible 2)
+ *** Boring headers can be hidden.
+     (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers)
+ *** Default scoring values can now be set from the menu bar.
+ *** Further syntax checking of outgoing articles have been added.
+ The Gnus manual has been expanded.  It explains all these new features
+ in greater detail.
\f
+ * Lisp Changes in Emacs 19.32
+ ** The function set-visited-file-name now accepts an optional
+ second argument NO-QUERY.  If it is non-nil, then the user is not
+ asked for confirmation in the case where the specified file already
+ exists.
+ ** The variable print-length applies to printing vectors and bitvectors,
+ as well as lists.
+ ** The new function keymap-parent returns the parent keymap
+ of a given keymap.
+ ** The new function set-keymap-parent specifies a new parent for a
+ given keymap.  The arguments are KEYMAP and PARENT.  PARENT must be a
+ keymap or nil.
+ ** Sometimes menu keymaps use a command name, a symbol, which is really
+ an automatically generated alias for some other command, the "real"
+ name.  In such a case, you should give that alias symbol a non-nil
+ menu-alias property.  That property tells the menu system to look for
+ equivalent keys for the real name instead of equivalent keys for the
+ alias.
\f
+ * Editing Changes in Emacs 19.31
+ ** Freedom of the press restricted in the United States.
+ Emacs has been censored in accord with the Communications Decency Act.
+ This includes removing some features of the doctor program.  That law
+ was described by its supporters as a ban on pornography, but it bans
+ far more than that.  The Emacs distribution has never contained any
+ pornography, but parts of it were nonetheless prohibited.
+ For information on US government censorship of the Internet, and what
+ you can do to bring back freedom of the press, see the web site
+ `http://www.vtw.org/'.
+ ** A note about C mode indentation customization.
+ The old (Emacs 19.29) ways of specifying a C indentation style
+ do not normally work in the new implementation of C mode.
+ It has its own methods of customizing indentation, which are
+ much more powerful than the old C mode.  See the Editing Programs
+ chapter of the manual for details.
+ However, you can load the library cc-compat to make the old
+ customization variables take effect.
+ ** Marking with the mouse.
+ When you mark a region with the mouse, the region now remains
+ highlighted until the next input event, regardless of whether you are
+ using M-x transient-mark-mode.
+ ** Improved Windows NT/95 support.
+ *** Emacs now supports scroll bars on Windows NT and Windows 95.
+ *** Emacs now supports subprocesses on Windows 95.  (Subprocesses used
+ to work on NT only and not on 95.)
+ *** There are difficulties with subprocesses, though, due to problems
+ in Windows, beyond the control of Emacs.  They work fine as long as
+ you run Windows applications.  The problems arise when you run a DOS
+ application in a subprocesses.  Since current shells run as DOS
+ applications, these problems are significant.
+ If you run a DOS application in a subprocess, then the application is
+ likely to busy-wait, which means that your machine will be 100% busy.
+ However, if you don't mind the temporary heavy load, the subprocess
+ will work OK as long as you tell it to terminate before you start any
+ other DOS application as a subprocess.
+ Emacs is unable to terminate or interrupt a DOS subprocess.
+ You have to do this by providing input directly to the subprocess.
+ If you run two DOS applications at the same time in two separate
+ subprocesses, even if one of them is asynchronous, you will probably
+ have to reboot your machine--until then, it will remain 100% busy.
+ Windows simply does not cope when one Windows process tries to run two
+ separate DOS subprocesses.  Typing CTL-ALT-DEL and then choosing
+ Shutdown seems to work although it may take a few minutes.
+ ** M-x resize-minibuffer-mode.
+ This command, not previously mentioned in NEWS, toggles a mode in
+ which the minibuffer window expands to show as many lines as the
+ minibuffer contains.
+ ** `title' frame parameter and resource.
+ The `title' X resource now specifies just the frame title, nothing else.
+ It does not affect the name used for looking up other X resources.
+ It works by setting the new `title' frame parameter, which likewise
+ affects just the displayed title of the frame.
+ The `name' parameter continues to do what it used to do:
+ it specifies the frame name for looking up X resources,
+ and also serves as the default for the displayed title
+ when the `title' parameter is unspecified or nil.
+ ** Emacs now uses the X toolkit by default, if you have a new
+ enough version of X installed (X11R5 or newer).
+ ** When you compile Emacs with the Motif widget set, Motif handles the
+ F10 key by activating the menu bar.  To avoid confusion, the usual
+ Emacs binding of F10 is replaced with a no-op when using Motif.
+ If you want to be able to use F10 in Emacs, you can rebind the Motif
+ menubar to some other key which you don't use.  To do so, add
+ something like this to your X resources file.  This example rebinds
+ the Motif menu bar activation key to S-F12:
+    Emacs*defaultVirtualBindings:  osfMenuBar : Shift<Key>F12
+ ** In overwrite mode, DEL now inserts spaces in most cases
+ to replace the characters it "deletes".
+ ** The Rmail summary now shows the number of lines in each message.
+ ** Rmail has a new command M-x unforward-rmail-message, which extracts
+ a forwarded message from the message that forwarded it.  To use it,
+ select a message which contains a forwarded message and then type the command.
+ It inserts the forwarded message as a separate Rmail message
+ immediately after the selected one.
+ This command also undoes the textual modifications that are standardly
+ made, as part of forwarding, by Rmail and other mail reader programs.
+ ** Turning off saving of .saves-... files in your home directory.
+ Each Emacs session writes a file named .saves-... in your home
+ directory to record which files M-x recover-session should recover.
+ If you exit Emacs normally with C-x C-c, it deletes that file.  If
+ Emacs or the operating system crashes, the file remains for M-x
+ recover-session.
+ You can turn off the writing of these files by setting
+ auto-save-list-file-name to nil.  If you do this, M-x recover-session
+ will not work.
+ Some previous Emacs versions failed to delete these files even on
+ normal exit.  This is fixed now.  If you are thinking of turning off
+ this feature because of past experiences with versions that had this
+ bug, it would make sense to check whether you still want to do so
+ now that the bug is fixed.
+ ** Changes to Version Control (VC)
+ There is a new variable, vc-follow-symlinks.  It indicates what to do
+ when you visit a link to a file that is under version control.
+ Editing the file through the link bypasses the version control system,
+ which is dangerous and probably not what you want.
+ If this variable is t, VC follows the link and visits the real file,
+ telling you about it in the echo area.  If it is `ask' (the default),
+ VC asks for confirmation whether it should follow the link.  If nil,
+ the link is visited and a warning displayed.
+ ** iso-acc.el now lets you specify a choice of language.
+ Languages include "latin-1" (the default) and "latin-2" (which
+ is designed for entering ISO Latin-2 characters).
+ There are also choices for specific human languages such as French and
+ Portuguese.  These are subsets of Latin-1, which differ in that they
+ enable only the accent characters needed for particular language.
+ The other accent characters, not needed for the chosen language,
+ remain normal.
+ ** Posting articles and sending mail now has M-TAB completion on various
+ header fields (Newsgroups, To, CC, ...).
+ Completion in the Newsgroups header depends on the list of groups
+ known to your news reader.  Completion in the Followup-To header
+ offers those groups which are in the Newsgroups header, since
+ Followup-To usually just holds one of those.
+ Completion in fields that hold mail addresses works based on the list
+ of local users plus your aliases.  Additionally, if your site provides
+ a mail directory or a specific host to use for any unrecognized user
+ name, you can arrange to query that host for completion also.  (See the
+ documentation of variables `mail-directory-process' and
+ `mail-directory-stream'.)
+ ** A greatly extended sgml-mode offers new features such as (to be configured)
+ skeletons with completing read for tags and attributes, typing named
+ characters including optionally all 8bit characters, making tags invisible
+ with optional alternate display text, skipping and deleting tag(pair)s.
+ Note: since Emacs' syntax feature cannot limit the special meaning of ', " and
+ - to inside <>, for some texts the result, especially of font locking, may be
+ wrong (see `sgml-specials' if you get wrong results).
+ The derived html-mode configures this with tags and attributes more or
+ less HTML3ish.  It also offers optional quick keys like C-c 1 for
+ headline or C-c u for unordered list (see `html-quick-keys').  Edit /
+ Text Properties / Face or M-g combinations create tags as applicable.
+ Outline minor mode is supported and level 1 font-locking tries to
+ fontify tag contents (which only works when they fit on one line, due
+ to a limitation in font-lock).
+ External viewing via browse-url can occur automatically upon saving.
+ ** M-x imenu-add-to-menubar now adds to the menu bar for the current
+ buffer only.  If you want to put an Imenu item in the menu bar for all
+ buffers that use a particular major mode, use the mode hook, as in
+ this example:
+     (add-hook 'emacs-lisp-mode-hook
+             '(lambda () (imenu-add-to-menubar "Index")))
+ ** Changes in BibTeX mode.
+ *** Field names may now contain digits, hyphens, and underscores.
+ *** Font Lock mode is now supported.
+ *** bibtex-make-optional-field is no longer interactive.
+ *** If bibtex-maintain-sorted-entries is non-nil, inserting new
+ entries is now done with a faster algorithm.  However, inserting
+ will fail in this case if the buffer contains invalid entries or
+ isn't in sorted order, so you should finish each entry with C-c C-c
+ (bibtex-close-entry) after you have inserted or modified it.
+ The default value of bibtex-maintain-sorted-entries is nil.
+ *** Function `show-all' is no longer bound to a key, since C-u C-c C-q
+ does the same job.
+ *** Entries with quotes inside quote-delimited fields (as `author =
+ "Stefan Sch{\"o}f"') are now supported.
+ *** Case in field names doesn't matter anymore when searching for help
+ text.
+ ** Font Lock mode
+ *** Global Font Lock mode
+ Font Lock mode can be turned on globally, in buffers that support it, by the
+ new command global-font-lock-mode.  You can use the new variable
+ font-lock-global-modes to control which modes have Font Lock mode automagically
+ turned on.  By default, this variable is set so that Font Lock mode is turned
+ on globally where the buffer mode supports it.
+ For example, to automagically turn on Font Lock mode where supported, put:
+  (global-font-lock-mode t)
+ in your ~/.emacs.
+ *** Local Refontification
+ In Font Lock mode, editing a line automatically refontifies that line only.
+ However, if your change alters the syntactic context for following lines,
+ those lines remain incorrectly fontified.  To refontify them, use the new
+ command M-g M-g (font-lock-fontify-block).
+ In certain major modes, M-g M-g refontifies the entire current function.
+ (The variable font-lock-mark-block-function controls how to find the
+ current function.)  In other major modes, M-g M-g refontifies 16 lines
+ above and below point.
+ With a prefix argument N, M-g M-g refontifies N lines above and below point.
+ ** Follow mode
+ Follow mode is a new minor mode combining windows showing the same
+ buffer into one tall "virtual window".  The windows are typically two
+ side-by-side windows.  Follow mode makes them scroll together as if
+ they were a unit.  To use it, go to a frame with just one window,
+ split it into two side-by-side windows using C-x 3, and then type M-x
+ follow-mode.
+ M-x follow-mode turns off Follow mode if it is already enabled.
+ To display two side-by-side windows and activate Follow mode, use the
+ command M-x follow-delete-other-windows-and-split.
+ ** hide-show changes.
+ The hooks hs-hide-hooks and hs-show-hooks have been renamed
+ to hs-hide-hook and hs-show-hook, to follow the convention for
+ normal hooks.
+ ** Simula mode now has a menu containing the most important commands.
+ The new command simula-indent-exp is bound to C-M-q.
+ ** etags can now handle programs written in Erlang.  Files are
+ recognised by the extensions .erl and .hrl.  The tagged lines are
+ those that begin a function, record, or macro.
+ ** MSDOS Changes
+ *** It is now possible to compile Emacs with the version 2 of DJGPP.
+ Compilation with DJGPP version 1 also still works.
+ *** The documentation of DOS-specific aspects of Emacs was rewritten
+ and expanded; see the ``MS-DOS'' node in the on-line docs.
+ *** Emacs now uses ~ for backup file names, not .bak.
+ *** You can simulate mouse-3 on two-button mice by simultaneously
+ pressing both mouse buttons.
+ *** A number of packages and commands which previously failed or had
+ restricted functionality on MS-DOS, now work.  The most important ones
+ are:
+ **** Printing (both with `M-x lpr-buffer' and with `ps-print' package)
+ now works.
+ **** `Ediff' works (in a single-frame mode).
+ **** `M-x display-time' can be used on MS-DOS (due to the new
+ implementation of Emacs timers, see below).
+ **** `Dired' supports Unix-style shell wildcards.
+ **** The `c-macro-expand' command now works as on other platforms.
+ **** `M-x recover-session' works.
+ **** `M-x list-colors-display' displays all the available colors.
+ **** The `TPU-EDT' package works.
\f
+ * Lisp changes in Emacs 19.31.
+ ** The function using-unix-filesystems on Windows NT and Windows 95
+ tells Emacs to read and write files assuming that they reside on a
+ remote Unix filesystem.  No CR/LF translation is done on any files in
+ this case.  Invoking using-unix-filesystems with t activates this
+ behavior, and invoking it with any other value deactivates it.
+ ** Change in system-type and system-configuration values.
+ The value of system-type on a Linux-based GNU system is now `lignux',
+ not `linux'.  This means that some programs which use `system-type'
+ need to be changed.  The value of `system-configuration' will also
+ be different.
+ It is generally recommended to use `system-configuration' rather
+ than `system-type'.
+ See the file LINUX-GNU in this directory for more about this.
+ ** The functions shell-command and dired-call-process
+ now run file name handlers for default-directory, if it has them.
+ ** Undoing the deletion of text now restores the positions of markers
+ that pointed into or next to the deleted text.
+ ** Timers created with run-at-time now work internally to Emacs, and
+ no longer use a separate process.  Therefore, they now work more
+ reliably and can be used for shorter time delays.
+ The new function run-with-timer is a convenient way to set up a timer
+ to run a specified amount of time after the present.  A call looks
+ like this:
+   (run-with-timer SECS REPEAT FUNCTION ARGS...)
+ SECS says how many seconds should elapse before the timer happens.
+ It may be an integer or a floating point number.  When the timer
+ becomes ripe, the action is to call FUNCTION with arguments ARGS.
+ REPEAT gives the interval for repeating the timer (measured in
+ seconds).  It may be an integer or a floating point number.  nil or 0
+ means don't repeat at all--call FUNCTION just once.
+ *** with-timeout provides an easy way to do something but give
+ up if too much time passes.
+   (with-timeout (SECONDS TIMEOUT-FORMS...) BODY...)
+ This executes BODY, but gives up after SECONDS seconds.
+ If it gives up, it runs the TIMEOUT-FORMS and returns the value
+ of the last one of them.  Normally it returns the value of the last
+ form in BODY.
+ *** You can now arrange to call a function whenever Emacs is idle for
+ a certain length of time.  To do this, call run-with-idle-timer.  A
+ call looks like this:
+   (run-with-idle-timer SECS REPEAT FUNCTION ARGS...)
+ SECS says how many seconds of idleness should elapse before the timer
+ runs.  It may be an integer or a floating point number.  When the
+ timer becomes ripe, the action is to call FUNCTION with arguments
+ ARGS.
+ Emacs becomes idle whenever it finishes executing a keyboard or mouse
+ command.  It remains idle until it receives another keyboard or mouse
+ command.
+ REPEAT, if non-nil, means this timer should be activated again each
+ time Emacs becomes idle and remains idle for SECS seconds The timer
+ does not repeat if Emacs *remains* idle; it runs at most once after
+ each time Emacs becomes idle.
+ If REPEAT is nil, the timer runs just once, the first time Emacs is
+ idle for SECS seconds.
+ *** post-command-idle-hook is now obsolete; you shouldn't use it at
+ all, because it interferes with the idle timer mechanism.  If your
+ programs use post-command-idle-hook, convert them to use idle timers
+ instead.
+ *** y-or-n-p-with-timeout lets you ask a question but give up if
+ there is no answer within a certain time.
+   (y-or-n-p-with-timeout PROMPT SECONDS DEFAULT-VALUE)
+ asks the question PROMPT (just like y-or-n-p).  If the user answers
+ within SECONDS seconds, it returns the answer that the user gave.
+ Otherwise it gives up after SECONDS seconds, and returns DEFAULT-VALUE.
+ ** Minor change to `encode-time': you can now pass more than seven
+ arguments.  If you do that, the first six arguments have the usual
+ meaning, the last argument is interpreted as the time zone, and the
+ arguments in between are ignored.
+ This means that it works to use the list returned by `decode-time' as
+ the list of arguments for `encode-time'.
+ ** The default value of load-path now includes the directory
+ /usr/local/share/emacs/VERSION/site-lisp In addition to
+ /usr/local/share/emacs/site-lisp.  You can use this new directory for
+ site-specific Lisp packages that belong with a particular Emacs
+ version.
+ It is not unusual for a Lisp package that works well in one Emacs
+ version to cause trouble in another.  Sometimes packages need updating
+ for incompatible changes; sometimes they look at internal data that
+ has changed; sometimes the package has been installed in Emacs itself
+ and the installed version should be used.  Whatever the reason for the
+ problem, this new feature makes it easier to solve.
+ ** When your program contains a fixed file name (like .completions or
+ .abbrev.defs), the file name usually needs to be different on operating
+ systems with limited file name syntax.
+ Now you can avoid ad-hoc conditionals by using the function
+ convert-standard-filename to convert the file name to a proper form
+ for each operating system.  Here is an example of use, from the file
+ completions.el:
+ (defvar save-completions-file-name
+         (convert-standard-filename "~/.completions")
+   "*The filename to save completions to.")
+ This sets the variable save-completions-file-name to a value that
+ depends on the operating system, because the definition of
+ convert-standard-filename depends on the operating system.  On
+ Unix-like systems, it returns the specified file name unchanged.  On
+ MS-DOS, it adapts the name to fit the limitations of that system.
+ ** The interactive spec N now returns the numeric prefix argument
+ rather than the raw prefix argument.  (It still reads a number using the
+ minibuffer if there is no prefix argument at all.)
+ ** When a process is deleted, this no longer disconnects the process
+ marker from its buffer position.
+ ** The variable garbage-collection-messages now controls whether
+ Emacs displays a message at the beginning and end of garbage collection.
+ The default is nil, meaning there are no messages.
+ ** The variable debug-ignored-errors specifies certain kinds of errors
+ that should not enter the debugger.  Its value is a list of error
+ condition symbols and/or regular expressions.  If the error has any
+ of the condition symbols listed, or if any of the regular expressions
+ matches the error message, then that error does not enter the debugger,
+ regardless of the value of debug-on-error.
+ This variable is initialized to match certain common but uninteresting
+ errors that happen often during editing.
+ ** The new function error-message-string converts an error datum
+ into its error message.  The error datum is what condition-case
+ puts into the variable, to describe the error that happened.
+ ** Anything that changes which buffer appears in a given window
+ now runs the window-scroll-functions for that window.
+ ** The new function get-buffer-window-list returns a list of windows displaying
+ a buffer.  The function is called with the buffer (a buffer object or a buffer
+ name) and two optional arguments specifying the minibuffer windows and frames
+ to search.  Therefore this function takes optional args like next-window etc.,
+ and not get-buffer-window.
+ ** buffer-substring now runs the hook buffer-access-fontify-functions,
+ calling each function with two arguments--the range of the buffer
+ being accessed.  buffer-substring-no-properties does not call them.
+ If you use this feature, you should set the variable
+ buffer-access-fontified-property to a non-nil symbol, which is a
+ property name.  Then, if all the characters in the buffer range have a
+ non-nil value for that property, the buffer-access-fontify-functions
+ are not called.  When called, these functions should put a non-nil
+ property on the text that they fontify, so that they won't get called
+ over and over for the same text.
+ ** Changes in lisp-mnt.el
+ *** The lisp-mnt package can now recognize file headers that are written
+ in the formats used by the `what' command and the RCS `ident' command:
+ ;; @(#) HEADER: text
+ ;; $HEADER: text $
+ in addition to the normal
+ ;; HEADER: text
+ *** The commands lm-verify and lm-synopsis are now interactive.  lm-verify
+ checks that the library file has proper sections and headers, and
+ lm-synopsis extracts first line "synopsis'"information.
\f
+ * Editing Changes in Emacs 19.30.
+ ** Be sure to recompile your byte-compiled Emacs Lisp files
+ if you last compiled them with Emacs 19.28 or earlier.
+ You can use M-x byte-force-recompile to recompile all the .elc files
+ in a specified directory.
+ ** Emacs now provides multiple-frame support on Windows NT
+ and Windows 95.
+ ** M-x column-number-mode toggles a minor mode which displays
+ the current column number in the mode line.
+ ** Line Number mode is now enabled by default.
+ ** M-x what-line now displays the line number in the accessible
+ portion of the buffer as well as the line number in the full buffer,
+ when narrowing is in effect.
+ ** If you type a M-x command that has an equivalent key binding,
+ the equivalent is shown in the minibuffer before the command executes.
+ This feature is enabled by default for the sake of beginning users.
+ You can turn the feature off by setting suggest-key-bindings to nil.
+ ** The menu bar is now visible on text-only terminals.  To choose a
+ command from the menu bar when you have no mouse, type M-`
+ (Meta-Backquote) or F10.  To turn off menu bar display,
+ do (menu-bar-mode -1).
+ ** Whenever you invoke a minibuffer, it appears in the minibuffer
+ window that the current frame uses.
+ Emacs can only use one minibuffer window at a time.  If you activate
+ the minibuffer while a minibuffer window is active in some other
+ frame, the outer minibuffer window disappears while the inner one is
+ active.
+ ** Echo area messages always appear in the minibuffer window that the
+ current frame uses.  If a minibuffer is active in some other frame,
+ the echo area message does not hide it even temporarily.
+ ** The minibuffer now has a menu-bar menu.  You can use it to exit or
+ abort the minibuffer, or to ask for completion.
+ ** Dead-key and composite character processing is done in the standard
+ X11R6 manner (through the default "input method" using the
+ /usr/lib/X11/locale/*/Compose databases of key combinations).  I.e. if
+ it works in xterm, it should also work in emacs now.
+ ** Mouse changes
+ *** You can now use the mouse when running Emacs in an xterm.
+ Use M-x xterm-mouse-mode to let emacs take control over the mouse.
+ *** C-mouse-1 now once again provides a menu of buffers to select.
+ S-mouse-1 is now the way to select a default font for the frame.
+ *** There is a new mouse-scroll-min-lines variable to control the
+ minimum number of lines scrolled by dragging the mouse outside a
+ window's edge.
+ *** Dragging mouse-1 on a vertical line that separates windows
+ now moves the line, thus changing the widths of the two windows.
+ (This feature is available only if you don't have vertical scroll bars.
+ If you do use them, a scroll bar separates two side-by-side windows.)
+ *** Double-click mouse-1 on a character with "symbol" syntax (such as
+ underscore, in C mode) selects the entire symbol surrounding that
+ character.  (Double-click mouse-1 on a letter selects a whole word.)
+ ** When incremental search wraps around to the beginning (or end) of
+ the buffer, if you keep on searching until you go past the original
+ starting point of the search, the echo area changes from "Wrapped" to
+ "Overwrapped".  That tells you that you are revisiting matches that
+ you have already seen.
+ ** Filling changes.
+ *** If the variable colon-double-space is non-nil, the explicit fill
+ commands put two spaces after a colon.
+ *** Auto-Fill mode now supports Adaptive Fill mode just as the
+ explicit fill commands do.  The variable adaptive-fill-regexp
+ specifies a regular expression to match text at the beginning of
+ a line that should be the fill prefix.
+ *** Adaptive Fill mode can take a fill prefix from the first line of a
+ paragraph, *provided* that line is not a paragraph-starter line.
+ Paragraph-starter lines are indented lines that start a new
+ paragraph because they are indented.  This indentation shouldn't
+ be copied to additional lines.
+ Whether indented lines are paragraph lines depends on the value of the
+ variable paragraph-start.  Some major modes set this; you can set it
+ by hand or in mode hooks as well.  For editing text in which paragraph
+ first lines are not indented, and which contains paragraphs in which
+ all lines are indented, you should use Indented Text mode or arrange
+ for paragraph-start not to match these lines.
+ *** You can specify more complex ways of choosing a fill prefix
+ automatically by setting `adaptive-fill-function'.  This function
+ is called with point after the left margin of a line, and it should
+ return the appropriate fill prefix based on that line.
+ If it returns nil, that means it sees no fill prefix in that line.
+ ** Gnus changes.
+ Gnus, the Emacs news reader, has been rewritten and expanded.  Most
+ things that worked with the old version should still work with the new
+ version.  Code that relies heavily on Gnus internals is likely to
+ fail, though.
+ *** Incompatibilities with the old GNUS.
+ **** All interactive commands have kept their names, but many internal
+ functions have changed names.
+ **** The summary mode gnus-uu commands have been moved from the `C-c
+ C-v' keymap to the `X' keymap.
+ **** There can now be several summary buffers active at once.
+ Variables that are relevant to each summary buffer are buffer-local to
+ that buffer.
+ **** Old hilit code doesn't work at all.  Gnus performs its own
+ highlighting based not only on what's visible in the buffer, but on
+ other data structures.
+ **** Old packages like `expire-kill' will no longer work.
+ **** `C-c C-l' in the group buffer no longer switches to a different
+ buffer, but instead lists killed groups in the group buffer.
+ *** New features.
+ **** The look of all buffers can be changed by setting format-like
+ variables.
+ **** Local spool and several NNTP servers can be used at once.
+ **** Groups can be combined into virtual groups.
+ **** Different mail formats can be read much the same way as one would
+ read newsgroups.  All the mail backends implement mail expiry schemes.
+ **** Gnus can use various strategies for gathering threads that have
+ lost their roots (thereby gathering loose sub-threads into one thread)
+ or it can go back and retrieve enough headers to build a complete
+ thread.
+ **** Killed groups can be read.
+ **** Gnus can do partial group updates - you do not have to retrieve
+ the entire active file just to check for new articles in a few groups.
+ **** Gnus implements a sliding scale of subscribedness to groups.
+ **** You can score articles according to any number of criteria.  You
+ can get Gnus to score articles for you using adaptive scoring.
+ **** Gnus maintains a dribble buffer that is auto-saved the normal
+ Emacs manner, so it should be difficult to lose much data on what you
+ have read if your machine should go down.
+ **** Gnus now has its own startup file (`.gnus.el') to avoid
+ cluttering up the `.emacs' file.
+ **** You can set the process mark on both groups and articles and
+ perform operations on all the marked items.
+ **** You can grep through a subset of groups and create a group from
+ the results.
+ **** You can list subsets of groups using matches on group names or
+ group descriptions.
+ **** You can browse foreign servers and subscribe to groups from those
+ servers.
+ **** Gnus can pre-fetch articles asynchronously on a second connection
+ to the servers.
+ **** You can cache articles locally.
+ **** Gnus can fetch FAQs to and descriptions of groups.
+ **** Digests (and other files) can be used as the basis for groups.
+ **** Articles can be highlighted and customized.
+ ** Changes to Version Control (VC)
+ *** General changes (all backends).
+ VC directory listings (C-x v d) are now kept up to date when you do a
+ vc-next-action (C-x v v) on the marked files.  The `g' command updates
+ the buffer properly.  `=' in a VC dired buffer produces a version
+ control diff, not an ordinary diff.
+ *** CVS changes.
+ Under CVS, you no longer need to type C-x C-q before you can edit a
+ file.  VC doesn't write-protect unmodified buffers anymore; you can
+ freely change them at any time.  The mode line keeps track of the
+ file status.
+ If you do want unmodified files to be write-protected, set your
+ CVSREAD environment variable.  VC sees this and behaves accordingly;
+ that will give you the behavior of Emacs 19.29, similar to that under
+ RCS and SCCS.  In this mode, if the variable vc-mistrust-permissions
+ is nil, VC learns the modification state from the file permissions.
+ When setting CVSREAD for the first time, you should check out the
+ whole module anew, so that the file permissions are set correctly.
+ VC also works with remote repositories now.  When you visit a file, it
+ doesn't run "cvs status" anymore, so there shouldn't be any long delays.
+ Directory listings under VC/CVS have been enhanced.  Type C-x v d, and
+ you get a list of all files in or below the current directory that are
+ not up-to-date.  The actual status (modified, merge, conflict, ...) is
+ displayed for each file.  If you give a prefix argument (C-u C-x v d),
+ up-to-date files are also listed.  You can mark any number of files,
+ and execute the next logical version control command on them (C-x v v).
+ *** Starting a new branch.
+ If you try to lock a version that is not the latest on its branch,
+ VC asks for confirmation in the minibuffer.  If you say no, it offers
+ to lock the latest version instead.
+ *** RCS non-strict locking.
+ VC can now handle RCS non-strict locking, too.  In this mode, working
+ files are always writable and you needn't lock the file before making
+ changes, similar to the default mode under CVS.  To enable non-strict
+ locking for a file, use the "rcs -U" command.
+ *** Sharing RCS master files.
+ If you share RCS subdirs with other users (through symbolic links),
+ and you always want to work on the latest version, set
+ vc-consult-headers to nil and vc-mistrust-permissions to `t'.
+ Then you see the state of the *latest* version on the mode line, not
+ that of your working file.  When you do a check out, VC overwrites
+ your working file with the latest version from the master.
+ *** RCS customization.
+ There is a new variable vc-consult-headers.  If it is t (the default),
++VC searches for RCS headers in working files (like `$Id: NEWS.19,v 1.1 2006/06/04 01:01:51 kfstorm Exp $') and
+ determines the state of the file from them, not from the master file.
+ This is fast and more reliable when you use branches.  (The variable
+ was already present in Emacs 19.29, but didn't get mentioned in the
+ NEWS.)
+ ** Calendar changes.
+ *** New calendars supported: Chinese, Coptic, Ethiopic
+ Here are the commands for converting to and from these calendars:
+    gC: calendar-goto-chinese-date
+    gk: calendar-goto-coptic-date
+    ge: calendar-goto-ethiopic-date
+    pC: calendar-print-chinese-date
+    pk: calendar-print-coptic-date
+    pe: calendar-print-ethiopic-date
+ *** Printed calendars
+ Calendar mode now has commands to produce fancy printed calendars via
+ LaTeX.  You can ask for a calendar for one or more days, weeks, months
+ or years.  The commands all start with `t'; see the manual for a list
+ of them.
+ *** New sexp diary entry type
+ Reminders that apply in the days leading up to an event.
+ ** The CC-mode package now provides the default C and C++ modes.
+ See the manual for documentation of its features.
+ ** The uniquify package chooses buffer names differently when you
+ visit multiple files with the same name (in different directories).
+ ** RMAIL now always uses the movemail program when it renames an
+ inbox file, so that it can interlock properly with the mailer
+ no matter where it is delivering mail.
+ ** tex-start-of-header and tex-end-of-header are now regular expressions,
+ not strings.
+ ** To enable automatic uncompression of compressed files,
+ type M-x auto-compression-mode.  (This command used to be called
+ toggle-auto-compression, but was not documented before.)  In Lisp,
+ you can do
+    (auto-compression-mode 1)
+ to turn the mode on.
+ ** The new pc-select package emulates the key bindings for cutting and
+ pasting, and selection of regions, found in Windows, Motif, and the
+ Macintosh.
+ ** Help buffers now use a special major mode, Help mode.  This mode
+ normally turns on View mode; it also provides a hook, help-mode-hook,
+ which you can use for other customization.
+ ** Apropos now uses faces for enhanced legibility.  It now describes
+ symbol properties as well as their function definitions and variable
+ values.  You can use Mouse-2 or RET to get more information about a
+ function definition, variable, or property.
+ ** Font Lock mode
+ *** Supports Scheme, TCL and Help modes
+ For example, to automatically turn on Font Lock mode in the *Help*
+ buffer, put:
+  (add-hook 'help-mode-hook 'turn-on-font-lock)
+ in your ~/.emacs.
+ *** Enhanced fontification
+ The structure of font-lock-keywords is extended to allow "anchored" keywords.
+ Typically, a keyword item of font-lock-keywords comprises a regexp to search
+ for and information to specify how the regexp should be highlighted.  However,
+ the highlighting information is extended so that it can be another keyword
+ item.  This keyword item, its regexp and highlighting information, is processed
+ before resuming with the keyword item of which it is part.
+ For example, a typical keyword item might be:
+  ("\\<anchor\\>" (0 anchor-face))
+ which fontifies each occurrence of the discrete word "anchor" in the value of
+ the variable anchor-face.  However, the highlighting information can be used to
+ fontify text that is anchored to the word "anchor".  For example:
+  ("\\<anchor\\>" (0 anchor-face) ("\\=[ ,]*\\(item\\)" nil nil (1 item-face)))
+ which fontifies each occurrence of "anchor" as above, but for each occurrence
+ of "anchor", each occurrence of "item", in any following comma separated list,
+ is fontified in the value of the variable item-face.  Thus the "item" text is
+ anchored to the "anchor" text.  See the variable documentation for further
+ information.
+ This feature is used to extend the level and quality of fontification in a
+ number of modes.  For example, C/C++ modes now have level 3 decoration that
+ includes the fontification of variable and function names in declaration lists.
+ In this instance, the "anchor" described in the above example is a type or
+ class name, and an "item" is a variable or function name.
+ *** Fontification levels
+ The variables font-lock-maximum-decoration and font-lock-maximum-size are
+ extended to specify levels and sizes for specific modes.  The variable
+ font-lock-maximum-decoration specifies the preferred level of fontification for
+ modes that provide multiple levels (typically from "subdued" to "gaudy").  The
+ variable font-lock-maximum-size specifies the buffer size for which buffer
+ fontification is suppressed when Font Lock mode is turned on (typically because
+ it would take too long).
+ These variables can now specify values for individual modes, by supplying
+ lists of mode names and values.  For example, to use the above mentioned level
+ 3 decoration for buffers in C/C++ modes, and default decoration otherwise, put:
+  (setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3)))
+ in your ~/.emacs.  Maximum buffer size values for individual modes are
+ specified in the same way with the variable font-lock-maximum-size.
+ *** Font Lock configuration
+ The mechanism to provide default settings for Font Lock mode are the variables
+ font-lock-defaults and font-lock-maximum-decoration.  Typically, you should
+ only need to change the value of font-lock-maximum-decoration.  However, to
+ support Font Lock mode for buffers in modes that currently do not support Font
+ Lock mode, you should set a buffer local value of font-lock-defaults for that
+ mode, typically via its mode hook.
+ These variables are used by Font Lock mode to set the values of the variables
+ font-lock-keywords, font-lock-keywords-only, font-lock-syntax-table,
+ font-lock-beginning-of-syntax-function and font-lock-keywords-case-fold-search.
+ You need not set these variables directly, and should not set them yourself
+ since the underlining mechanism may change in future.
+ ** Archive mode is now the default mode for various sorts of
+ archive files (files whose names end with .arc, .lzh, .zip, and .zoo).
+ ** You can automatically update the years in copyright notice by
+ means of (add-hook 'write-file-hooks 'copyright-update).
+ Optionally it can update the GPL version as well.
+ ** Scripts of various languages (Shell, AWK, Perl, makefiles ...) can
+ be automatically provided with a magic number and be made executable
+ by their respective modes under control of various user variables.
+ The mode must call (executable-set-magic "perl") or
+ (executable-set-magic "make" "-f").  The latter for example has no
+ effect on [Mm]akefile.
+ ** Shell script mode now supports over 15 different shells.  The new
+ command C-c ! executes the region, and optionally beginning of script
+ as well, by passing them to the shell.
+ Cases such as `sh' being a `bash' are now accounted for.
+ Fontification now also does variables, the magic number and all
+ builtin commands.  Shell script mode no longer mingles `tab-width' and
+ indentation style.  The variable `sh-tab-width' has been renamed to
+ `sh-indentation'.  Empty lines are now indented like previous
+ non-empty line, rather than just previous line.
+ The annoying $ variable prompting has been eliminated.  Instead, shell
+ script mode uses `comint-dynamic-completion' for commands, variables
+ and filenames.
+ ** Two-column mode now automatically scrolls both buffers together,
+ which makes it possible to eliminate the special scrolling commands
+ that used to do so.
+ The commands that operate in two-column mode are no longer bound to
+ keys outside that mode.  f2 o will now position at the same point in
+ associated buffer.
+ the new command f2 RET inserts a newline in both buffers, at point and
+ at the corresponding position in the associated buffer.
+ ** Skeleton commands now work smoothly as abbrev definitions.  The
+ element < no longer exists, ' is a new element.
+ ** The autoinsert insert facility for prefilling empty files as soon
+ as they are found has been extended to accommodate skeletons or calling
+ functions.  See the function auto-insert.
+ ** TPU-edt Changes
+ Loading tpu-edt no longer turns on tpu-edt mode.  In fact, it is no
+ longer necessary to explicitly load tpu-edt.  All you need to do to
+ turn on tpu-edt is run the tpu-edt function.  Here's how to run
+ tpu-edt instead of loading the file:
+   Running Emacs:   Type      emacs -f tpu-edt
+                     not      emacs -l tpu-edt
+   Within Emacs:    Type      M-x tpu-edt <ret>
+                     not      M-x load-library <ret> tpu-edt <ret>
+   In .emacs:       Use       (tpu-edt)
+                    not       (load "tpu-edt")
+ The default name of the tpu-edt X key definition file has changed from
+ ~/.tpu-gnu-keys to ~/.tpu-keys.  If you don't rename the file yourself,
+ tpu-edt will offer to rename it the first time you invoke it under
+ x-windows.
+ ** MS-DOS Enhancements:
+ *** Better mouse control by adding the following functions [in dosfns.c]
+ msdos-mouse-enable, msdos-mouse-disable, msdos-mouse-init.
+ *** If another foreground/background color than the default is setup in
+ your ~/_emacs, then the screen briefly flickers with the default
+ colors before changing to the colors you have specified.  To avoid
+ this, the EMACSCOLORS environment variable exists.  It shall be
+ defined as a string with the following elements:
+     set EMACSCOLORS=fb;fb
+ The first set of "fb" defines the initial foreground and background
+ colors using standard dos color numbers (0=black,.., 7=white).
+ If specified, the second set of "fb" defines the colors which are
+ restored when you leave emacs.
+ *** The new SUSPEND environment variable can now be set as the shell to
+ use when suspending emacs.  This can be used to override the stupid
+ limitation on the environment of sub-shells in MS-DOS (they are just
+ large enough to hold the currently defined variables, not leaving
+ room for more); to overcome this limitation, add this to autoexec.bat:
+     set SUSPEND=%COMSPEC% /E:2000
+ ** The escape character can now be displayed on X frames.  Try
+ this:
+     (aset standard-display-table 27 (vector 27))
+ after first creating a display table (you can do that by loading
+ the disp-table library).
+ ** The new command-line option --eval specifies an expression to evaluate
+ from the command line.
+ ** etags has now the ability to tag Perl files.  They are recognised
+ either by the .pm and .pl suffixes or by a first line which starts
+ with `#!' and specifies a Perl interpreter.  The tagged lines are
+ those beginning with the `sub' keyword.
+ New suffixes recognised are .hpp for C++; .f90 for Fortran; .bib,
+ .ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp; .prolog for
+ prolog (.pl is now Perl).
+ ** The files etc/termcap.dat and etc/termcap.ucb have been replaced
+ with a new, merged, and much more comprehensive termcap file.  The
+ new file should include all the special entries from the old one.
+ This new file is under active development as part of the ncurses
+ project.  If you have any questions about this file, or problems with
+ an entry in it, email terminfo@ccil.org.
\f
+ * Lisp changes in Emacs 19.30.
+ ** New Data Types
+ *** There is a new data type called a char-table which is an array
+ indexed by a character.  Currently this is mostly equivalent to a
+ vector of length 256, but in the future, when a wider character set is
+ in use, it will be different.  To create one, call
+    (make-char-table SUBTYPE INITIAL-VALUE)
+ SUBTYPE is a symbol that identifies the specific use of this
+ character table.  It can be any of these values:
+   syntax-table
+   display-table
+   keyboard-translate-table
+   case-table
+ The function `char-table-subtype' returns the subtype of a char-table.
+ You cannot alter the subtype of an existing char-table.
+ A char-table has an element for each character code.  It also has some
+ "extra slots".  The number of extra slots depends on the subtype and
+ their use depends on the subtype.  (Each subtype symbol has a
+ `char-table-extra-slots' property that says how many extra slots to
+ make.)  Use (char-table-extra-slot TABLE N) to access extra slot N and
+ (set-char-table-extra-slot TABLE N VALUE) to store VALUE in slot N.
+ A char-table T can have a parent, which should be another char-table
+ P.  If you look for the value in T for character C, and the table T
+ actually holds nil, P's element for character C is used instead.
+ The functions `char-table-parent' and `set-char-table-parent'
+ let you read or set the parent of a char-table.
+ To scan all the values in a char-table, do not try to loop through all
+ possible character codes.  That would work for now, but will not work
+ in the future.  Instead, call map-char-table.  (map-char-table
+ FUNCTION TABLE) calls FUNCTION once for each character or character
+ set that has a distinct value in TABLE.  FUNCTION gets two arguments,
+ RANGE and VALUE.  RANGE specifies a range of TABLE that has one
+ uniform value, and VALUE is the value in TABLE for that range.
+ Currently, RANGE is always a vector containing a single character
+ and it refers to that character alone.  In the future, other kinds
+ of ranges will occur.  You can set the value for a given range
+ with (set-char-table-range TABLE RANGE VALUE) and examine the value
+ for a range with (char-table-range TABLE RANGE).
+ *** Syntax tables are now represented as char-tables.
+ All syntax tables other than the standard syntax table
+ normally have the standard syntax table as their parent.
+ Their subtype is `syntax-table'.
+ *** Display tables are now represented as char-tables.
+ Their subtype is `display-table'.
+ *** Case tables are now represented as char-tables.
+ Their subtype is `case-table'.
+ *** The value of keyboard-translate-table may now be a char-table
+ instead of a string.  Normally the char-tables used for this purpose
+ have the subtype `keyboard-translate-table', but that is not required.
+ *** A new data type called a bool-vector is a vector of values
+ that are either t or nil.  To create one, do
+    (make-bool-vector LENGTH INITIAL-VALUE)
+ ** You can now specify, for each marker, how it should relocate when
+ text is inserted at the place where the marker points.  This is called
+ the "insertion type" of the marker.
+ To set the insertion type, do (set-marker-insertion-type MARKER TYPE).
+ If TYPE is t, it means the marker advances when text is inserted.  If
+ TYPE is nil, it means the marker does not advance.  (In Emacs 19.29,
+ markers did not advance.)
+ The function marker-insertion-type reports the insertion type of a
+ given marker.  The function copy-marker takes a second argument TYPE
+ which specifies the insertion type of the new copied marker.
+ ** When you create an overlay, you can specify the insertion type of
+ the beginning and of the end.  To do this, you can use two new
+ arguments to make-overlay: front-advance and rear-advance.
+ ** The new function overlays-in returns a list of the overlays that
+ overlap a specified range of the buffer.  The returned list includes
+ empty overlays at the beginning of this range, as well as within the
+ range.
+ ** The new hook window-scroll-functions is run when a window has been
+ scrolled.  The functions in this list are called just before
+ redisplay, after the new window-start has been computed.  Each function
+ is called with two arguments--the window that has been scrolled, and its
+ new window-start position.
+ This hook is useful for on-the-fly fontification and other features
+ that affect how the redisplayed text will look when it is displayed.
+ The window-end value of the window is not valid when these functions
+ are called.  The computation of window-end is byproduct of actual
+ redisplay of the window contents, which means it has not yet happened
+ when the hook is run.  Computing window-end specially in advance for
+ the sake of these functions would cause a slowdown.
+ The hook functions can determine where the text on the window will end
+ by calling vertical-motion starting with the window-start position.
+ ** The new hook redisplay-end-trigger-functions is run whenever
+ redisplay in window uses text that extends past a specified end
+ trigger position.  You set the end trigger position with the function
+ set-window-redisplay-end-trigger.  The functions are called with two
+ arguments: the window, and the end trigger position.  Storing nil for
+ the end trigger position turns off the feature, and the trigger value
+ is automatically reset to nil just after the hook is run.
+ You can use the function window-redisplay-end-trigger to read a
+ window's current end trigger value.
+ ** The new function insert-file-contents-literally inserts the
+ contents of a file without any character set translation or decoding.
+ ** The new function safe-length computes the length of a list.
+ It never gets an error--it treats any non-list like nil.
+ If given a circular list, it returns an upper bound for the number
+ of elements before the circularity.
+ ** replace-match now takes a fifth argument, SUBEXP.  If SUBEXP is
+ non-nil, that says to replace just subexpression number SUBEXP of the
+ regexp that was matched, not the entire match.  For example, after
+ matching `foo \(ba*r\)' calling replace-match with 1 as SUBEXP means
+ to replace just the text that matched `\(ba*r\)'.
+ ** The new keymap special-event-map defines bindings for certain
+ events that should be handled at a very low level--as soon as they
+ are read.  The read-event function processes these events itself,
+ and never returns them.
+ Events that are handled in this way do not echo, they are never
+ grouped into key sequences, and they never appear in the value of
+ last-command-event or (this-command-keys).  They do not discard a
+ numeric argument, they cannot be unread with unread-command-events,
+ they may not appear in a keyboard macro, and they are not recorded
+ in a keyboard macro while you are defining one.
+ These events do, however, appear in last-input-event immediately after
+ they are read, and this is the way for the event's definition to find
+ the actual event.
+ The events types iconify-frame, make-frame-visible and delete-frame
+ are normally handled in this way.
+ ** encode-time now supports simple date arithmetic by means of
+ out-of-range values for its SEC, MINUTE, HOUR, DAY, and MONTH
+ arguments; for example, day 0 means the day preceding the given month.
+ Also, the ZONE argument can now be a TZ-style string.
+ ** command-execute and call-interactively now accept an optional third
+ argument KEYS.  If specified and non-nil, this specifies the key
+ sequence containing the events that were used to invoke the command.
+ ** The environment variable NAME, if set, now specifies the value of
+ (user-full-name), when Emacs starts up.
\f
+ * User Editing Changes in Emacs 19.29
+ ** If you run out of memory.
+ If you get the error message "Virtual memory exhausted", type C-x s.
+ That way of saving files has the least additional memory needs.  Emacs
+ 19.29 keeps a reserve of memory which it makes available when this
+ error happens; that is to ensure that C-x s can complete its work.
+ Once you have saved your data, you can exit and restart Emacs, or use
+ M-x kill-some-buffers to free up space.  If you kill buffers
+ containing a substantial amount of text, you can go on editing.
+ Do not use M-x buffer-menu to save or kill buffers when you are out of
+ memory, because that needs a fair amount memory itself and you may not
+ have enough to get it started.
+ ** The format of compiled files has changed incompatibly.
+ Byte-compiled files made with Emacs 19.29 normally use a new format
+ that will not work in older Emacs versions.  You can compile files
+ in the old format if you wish; see "Changes in compilation," below.
+ ** Emacs 19.29 supports the DEC Alpha.
+ ** Emacs runs on Windows NT.
+ This port does not yet support windowing features.  It works like a
+ text-only terminal, but it does support a mouse.
+ In general, support for non-GNU-like operating systems is not a high
+ priority for the GNU project.  We merged in the support for Windows NT
+ because that system is expected to be very widely used.
+ ** Emacs supports Motif widgets.
+ You can build Emacs with Motif widgets by specifying --with-x-toolkit=motif
+ when you run configure.
+ Motif defines collections of windows called "tab groups", and uses the
+ tab key and the cursor keys to move between windows in a tab group.
+ Emacs naturally does not support this--it has other uses for the tab
+ key and cursor keys.  Emacs does not support Motif accelerators either,
+ because it uses its normal keymap event binding features.
+ We give higher priority to operation with a free widget set than to
+ operation with a proprietary one.
+ ** If Emacs or the computer crashes, you can recover all the files you
+ were editing from their auto save files by typing M-x recover-session.
+ This first shows you a list of recorded interrupted sessions.  Move
+ point to the one you choose, and type C-c C-c.
+ Then recover-session asks about each of the files that were being
+ edited during that session, asking whether to recover that file.  If
+ you answer y, it calls recover-file, which works in its normal
+ fashion.  It shows the dates of the original file and its auto-save
+ file and asks once again whether to recover that file.
+ When recover-session is done, the files you've chosen to recover
+ are present in Emacs buffers.  You should then save them.
+ Only this--saving them--updates the files themselves.
+ ** Menu bar menus now stay up if you click on the menu bar item and
+ release the mouse button within a certain amount of time.  This is in
+ the X Toolkit version.
+ ** The menu bar menus have been rearranged and split up to make for a
+ better organization.  Two new menu bar menus, Tools and Search,
+ contain items that were formerly in the Files and Edit menus, as well
+ as some that did not exist in the menu bar menus before.
+ ** Emacs can now display on more than one X display at the same time.
+ Use the command make-frame-on-display to create a frame, specifying
+ which display to use.
+ ** M-x talk-connect sets up a multi-user talk connection
+ via Emacs.  Specify the X display of the person you want to talk to.
+ You can talk to any number of people (within reason) by using
+ this command repeatedly to specify different people.
+ Emacs does not make a fuss about security; the people who you talk to
+ can use all Emacs features, including visiting and editing files.  If
+ this frightens you, don't use M-x talk-connect.
+ ** The range of integer values is now at least 2**28 on all machines.
+ This means the maximum size of a buffer is at least 2**27-1,
+ or 134,217,727.
+ ** When you start Emacs, you can now specify option names in
+ long GNU form (starting with `--') and you can abbreviate the names.
+ You can now specify the options in any order.
+ The previous requirements about the order of options
+ have been eliminated.
+ The -L or --directory option lets you specify an additional
+ directory to search for Lisp libraries (including libraries
+ that you specify with the -l or --load options).
+ ** Incremental search in Transient Mark mode, if the mark is already
+ active, now leaves the mark active and does not change its position.
+ You can make incremental search deactivate the mark once again with
+ this expression.
+     (add-hook 'isearch-mode-hook 'deactivate-mark)
+ ** C-delete now deletes a word backwards.  This is for compatibility
+ with some editors in the PC world.  (This key is not available on
+ ordinary ASCII terminals, because C-delete is not a distinct character
+ on those terminals.)
+ ** ESC ESC ESC is now a command to escape from various temporary modes
+ and states.
+ ** M-x pc-bindings-mode sets up bindings compatible with many PC editors.
+ In particular, Delete and its variants delete forward instead of backward.
+ Use Backspace to delete backward.
+ C-Backspace kills backward a word (as C-Delete normally would).
+ M-Backspace does undo.
+ Home and End move to beginning and end of line
+ C-Home and C-End move to beginning and end of buffer.
+ ** The key sequence for evaluating a Lisp expression using the minibuffer
+ is now ESC :.  It used to be ESC ESC, but we moved it to make way for
+ the ESC ESC ESC feature, on the grounds that people who evaluate Lisp
+ expressions are experienced users and can cope with a change.
+ If you prefer the old ESC ESC binding, put in your `~/.emacs':
+       (global-set-key "\e\e" 'eval-expression)
+ ** The f1 function key is now equivalent to the help key.  This is
+ done with key-translation-map; delete the binding for f1 in that map
+ if you want to use f1 for something else.
+ ** Mouse-3, in the simplest case, still sets the region.  But now, it
+ places the mark where point was, and sets point where you click.
+ (It used to set the mark where you click and leave point alone.)
+ If you position point with Mouse-1, then scroll with the scroll bar
+ and use Mouse-3, Mouse-3 uses the position you specified with Mouse-1
+ even if it has scrolled off the screen (and point is no longer there).
+ This makes it easier to select a region with the mouse which is bigger
+ than a screenful.
+ Any editing of the buffer, and any cursor motion or scrolling for any
+ reason other than the scroll bar, cancels the special state set up by
+ Mouse-1--so that a subsequent Mouse-3 click will use the actual value
+ of point.
+ ** C-mouse-3 now pops up a mode-specific menu of commands--normally
+ the same ones available in the mode's own menu bar menus.
+ ** C-mouse-2 now pops up a menu of faces, indentation, justification,
+ and certain other text properties.  This menu is also available
+ through the menu-bar Edit menu.  It is meant for use with Enriched
+ mode.
+ *** You can use this menu to change the face of the region.
+ You can also set the face of the region with the new M-g command.
+ *** The menu also includes commands for indenting the region,
+ which locally changes the values of left-margin and fill-column that
+ are used.
+ *** All fill functions now indent every line to the left-margin.  If
+ there is also a fill-prefix, that goes after the margin indentation.
+ *** Open-line and newline also make sure that the lines they create
+ are indented to the left margin.
+ *** It also allows you to set the "justification" of the region:
+ whether it should be centered, flush right, and so forth.  The fill
+ functions (including auto-fill-mode) will maintain the justification
+ and indentation that you request.
+ *** The new function `list-colors-display' shows you what colors are
+ available.  This is also accessible from the C-mouse-2 menu.
+ ** You can now save and load files including their faces and other
+ text-properties by using Enriched-mode.  Files are saved in an
+ extended version of the MIME text/enriched format.  You can use the
+ menus described above, or M-g and other keyboard commands, to
+ alter the formatting information.
+ ** C-mouse-1 now pops up the menu for changing the frame's default font.
+ ** You can input Hyper, Super, Meta, and Alt characters, as well as
+ non-ASCII control characters, on an ASCII-only terminal.
+ To do this, use
+   C-x @ h  --  hyper
+   C-x @ s  --  super
+   C-x @ m  --  meta
+   C-x @ a  --  alt
+   C-x @ S  --  shift
+   C-x @ c  --  control
+ These are not ordinary key sequences; they operate through
+ function-key-map, which means they can be used even in the
+ middle of an ordinary key sequence.
+ ** Outline minor mode and Hideif mode now use C-c @ as their prefix
+ character.
+ ** Echo area messages are now logged in the "*Messages*" buffer.  The
+ size of this buffer is limited to message-log-max lines.
+ ** RET in various special modes for read-only buffers that contain
+ lists of items now selects the item point is on.  These modes include
+ Dired, Compilation buffers, Buffer-menu, Tar mode, and Occur mode.
+ (In Info, RET follows the reference near point; in completion list
+ buffers, RET chooses the completion around point.)
+ ** set-background-color now updates the modeline face in a special
+ way.  If that face was previously set up to be reverse video, the
+ reverse of the default face, then set-background-color updates it so
+ that it remains the reverse of the default face.
+ ** The functions raise-frame and lower-frame are now commands.
+ When used interactively, they apply to the selected frame.
+ ** M-x buffer-menu now displays the buffer list in the selected window.
+ Use M-x buffer-menu-other-window to display it in another window.
+ ** M-w followed by a kill command now *does not* append the text in
+ the kill ring.  In consequence, M-w followed by C-w works as you would
+ expect: it leaves the top of the kill ring matching the region that
+ you killed.
+ ** In Lisp mode, the C-M-x command now executes defvar forms in a
+ special way: it unconditionally sets the variable to the specified
+ default value, if there is one.  Normal execution of defvar does not
+ alter the variable if it already has a non-void value.
+ ** In completion list buffers, the left and right arrow keys run the
+ new commands previous-completion and next-completion.  They move one
+ completion at a time.
+ ** While doing completion in the minibuffer, the `prior' or `pageup'
+ key switches to the completion list window.
+ ** When you exit the minibuffer with empty contents, the empty string
+ is not put in the minibuffer history.
+ ** The default buffer for insert-buffer is now the "first" buffer
+ other than the current one.  If you have more than one window, this
+ is a buffer visible in another window.  (Usually it is the buffer
+ that C-M-v would scroll.)
+ ** The etags program is now capable of recording tags based on regular
+ expressions provided on the command line.
+ This new feature allows easy support for constructs not normally
+ handled by etags, such as the macros frequently used in big C/C++
+ projects to define project-specific structures.  It also enables the
+ use of etags and TAGS files for languages not supported by etags.
+ The Emacs manual section on Tags contains explanations and examples
+ for Emacs's DEFVAR, VHDL, Cobol, Postscript and TCL.
+ ** Various mode-specific commands that used to be bound to C-c LETTER
+ have been moved.
+ *** In gnus-uu mode, gnus-uu-interactive-scan-directory is now on C-c C-d,
+ and gnus-uu-interactive-save-current-file is on C-c C-z.
+ *** In Scribe mode, scribe-insert-environment is now on C-c C-v,
+ scribe-chapter is on C-c C-c, scribe-subsection is on C-c C-s,
+ scribe-section is on C-c C-t, scribe-bracket-region-be is on C-c C-e,
+ scribe-italicize-word is on C-c C-i, scribe-bold-word is on C-c C-b,
+ and scribe-underline-word is on C-c C-u.
+ *** In Gomoku mode, gomoku-human-takes-back is now on C-c C-b,
+ gomoku-human-plays is on C-c C-p, gomoku-human-resigns is on C-c C-r,
+ and gomoku-emacs-plays is on C-c C-e.
+ *** In the Outline mode defined in allout.el,
+ outline-rebullet-current-heading is now on C-c *.
+ ** M-s in Info now searches through the nodes of the Info file,
+ just like s.  The alias M-s was added so that you can use the same
+ command for searches in both Info and Rmail.
+ ** iso-acc.el now lets you enter inverted-! and inverted-?
+ with the sequences ~! and ~?.
+ ** M-x compare-windows now pushes mark in both windows before
+ it starts moving point.
+ ** There are two new commands in Dired, A (dired-do-search)
+ and Q (dired-do-query-replace).  These are similar to tags-search and
+ tags-query-replace, but instead of searching the list of files that
+ appears in a tags table, they search all the files marked in Dired.
+ ** Changes to dabbrev.
+ A new function, `dabbrev-completion' (bound to M-C-/), expands the
+ unique part of an abbreviation.
+ Dabbrev now looks for expansions in other buffers, looks for symbols
+ instead of words and it works in the minibuffer.
+ Dabbrev can be customized to work for shell scripts, with variables
+ that sometimes have and sometimes haven't a leading "$".  See the
+ variable 'dabbrev-abbrev-skip-leading-regexp'.
+ ** In Rmail, the command rmail-input-menu has been eliminated.  The
+ feature of selecting an Rmail file from a menu is now implemented in
+ another way.
+ ** Bookmarks changes.
+ *** It now works to set bookmarks in Info nodes.
+ *** Bookmarks can have annotations; type "C-h m" after doing
+ "M-x list-bookmarks", for more information on annotations.
+ *** The bookmark-jump popup menu function is now `bookmark-menu-jump', for
+ those who bind it to a mouse click.
+ *** The default bookmarks file name is now "~/.emacs.bmk".  If you
+ already have a bookmarks file, it will be renamed automagically when
+ you next load it.
+ ** New package, ps-print.
+ The ps-print package generates PostScript printouts of buffers or
+ regions, and includes face attributes such as color, underlining,
+ boldface and italics in the printed output.
+ ** New package, msb.
+ The msb package provides a buffer-menu in the menubar with separate
+ menus for different types of buffers.
+ ** `cpp.el' is a new library that can highlight or hide parts of a C
+ file according to C preprocessor conditionals.  To try it, run the
+ command M-x cpp-highlight-buffer.
+ ** Changes in CC mode.
+ *** c-set-offset and related functions and variables can now accept
+ variable symbols.  Also ++ and -- which mean 2* positive and negative
+ c-basic-offset respectively.
+ *** New variable, c-recognize-knr-p, which controls whether K&R C
+ constructs will be recognized.  Trying to recognize K&R constructs is a
+ time hog so if you're programming strictly in ANSI C, set this
+ variable to nil (it should already be nil in c++-mode).
+ *** New variable, c-hanging-comment-ender-p for controlling
+ c-fill-paragraph's behavior.
+ *** New syntactic symbol: statement-case-open.  This is assigned to lines
+ containing an open brace just after a case/default label.
+ *** New variable, c-progress-interval, which controls minibuffer update
+ message displays during long re-indention.  This is a new feature
+ which prints percentage complete messages at specified intervals.
+ ** Makefile mode changes.
+ *** The electric keys are not enabled by default.
+ *** There is now a mode-specific menu bar menu.
+ *** The mode supports font-lock, add-log, and imenu.
+ *** The command M-TAB does completion of target names and variable names.
+ ** icomplete.el now works more like a minor mode.  Use M-x icomplete-mode
+ to turn it on and off.
+ Icomplete now supports an `icomplete-minibuffer-setup-hook', which is
+ run on minibuffer setup whenever icompletion will be occurring.  This
+ hook can be used to customize interoperation of icomplete with other
+ minibuffer-specific packages, eg rsz-mini.  See the doc string for
+ more info.
+ ** Ediff change.
+ Use ediff-revision instead of vc-ediff.  It also replaces rcs-ediff,
+ for those who use that; if you want to use a version control package
+ other than vc.el, you must set the variable
+ ediff-version-control-package to specify which package.
+ ** VC now supports branches with RCS.
+ You can use C-u C-x C-q to select any branch or version by number.
+ It reads the version number or branch number with the minibuffer,
+ then checks out the file unlocked.
+ Type C-x C-q again to lock the selected branch or version.
+ When you check in changes to that branch or version, there are two
+ possibilities:
+ -- If you've selected a branch, or a version at the tip of a branch,
+ then the new version adds to that branch.  If you wish to create a
+ new branch, use C-u C-x C-q to specify a version number when you check
+ in the new version.
+ -- If you've selected an inner version which is not the latest in its
+ branch, then the new version automatically creates a new branch.
+ ** VC now supports CVS as well as RCS and SCCS.
+ Since there are no locks in CVS, some things behave slightly
+ different when the backend is CVS.  When vc-next-action is invoked
+ in a directory handled by CVS, it does the following:
+    If the file is not already registered, this registers it for version
+ control.  This does a "cvs add", but no "cvs commit".
+    If the file is added but not committed, it is committed.
+    If the file has not been changed, neither in your working area or
+ in the repository, a message is printed and nothing is done.
+    If your working file is changed, but the repository file is
+ unchanged, this pops up a buffer for entry of a log message; when you
+ finish the log message with C-c C-c, that checks in the resulting
+ changes along with the log message as change commentary.  A writable
+ file remains in existence.
+    If vc-next-action changes the repository file, it asks you
+ whether to merge in the changes into your working copy.
+ vc-directory, when started in a CVS file hierarchy, reports
+ all files that are modified (and thus need to be committed).
+ (When the backend is RCS or SCCS vc-directory reports all
+ locked files).
+ VC has no support for running the initial "cvs checkout" to get a
+ working copy of a module.  You can only use VC in a working copy of
+ a module.
+ You can disable the CVS support as follows:
+   (setq vc-master-templates (delq 'vc-find-cvs-master vc-master-templates))
+ or by setting vc-handle-cvs to nil.
+ This may be desirable if you run a non-standard version of CVS, or
+ if CVS was compiled with FORCE_USE_EDITOR or (possibly)
+ RELATIVE_REPOS.
+ ** Comint and shell mode changes:
+ *** Completion works with file names containing quoted characters.
+ File names containing special characters (such as " ", "!", etc.) that are
+ quoted with a "\" character are recognised during completion.  Special
+ characters are quoted when they are inserted during completion.
+ *** You can use M-x comint-truncate-buffer to truncate the buffer.
+ When this command is run, the buffer is truncated to a maximum number
+ of lines, specified by the variable comint-buffer-maximum-size.  Just
+ like the command comint-strip-ctrl-m, this can be run automatically
+ during process output by doing this:
+ (add-hook 'comint-output-filter-functions
+         'comint-truncate-buffer)
+ ** Telnet mode buffer name changed.
+ The buffer name for a Telnet buffer is now *telnet-HOST*, not
+  *HOST-telnet*.  This is for consistency with other Emacs packages.
+ ** M-x man (man) is now faster and more robust.  On systems where the
+ entire man page is indented, the indentation is removed.
+ The user option names that used to end in -p now end in -flag.  The
+ new names are: Man-reuse-okay-flag, Man-downcase-section-letters-flag,
+ Man-circular-pages-flag.  The Man-notify user option has been renamed to
+ Man-notify-method and accepts one more value, `pushy', that just
+ switches the current buffer to the manpage buffer, without switching
+ frames nor changing your windows configuration.
+ A new user option Man-fontify-manpage-flag disables fontification
+ (thus speeding up man) when set to nil.  Default is to fontify if a
+ window system is used.  Two new user options Man-overstrike-face
+ (default 'bold) and Man-underline-face (default 'underline) can be set
+ to the preferred faces to be used for the words that man overstrikes
+ and underlines.  Useful for those who like coloured man pages.
+ Two new interactive functions are provided: Man-cleanup-manpage and
+ Man-fontify-manpage.  Both can be used on a buffer that contains the
+ output of a `rsh host man manpage' command, or the output of an
+ `nroff -man -Tman manpage' command to make them readable.
+ Man-cleanup-manpage is faster, but does not fontify.
+ ** The new function modify-face makes it easy to specify
+ all the attributes of a face, all at once.
+ ** Faces now support background stippling.
+ Use the command set-face-stipple to specify the stipple-pattern for a
+ face.  Use face-stipple to access the specified stipple pattern.  The
+ existing face functions now handle the stipple pattern when
+ appropriate.
+ If you specify one of the standard gray colors as a face background
+ color, and your display doesn't handle gray, Emacs automatically uses
+ stipple instead to get the same effect.
+ ** Changes in Font Lock mode.
+ *** Fontification
+ Two new default faces are provided; `font-lock-variable-name-face' and
+ `font-lock-reference-face'.  The face `font-lock-doc-string-face' has
+ been removed since it is the same as the existing
+ `font-lock-string-face'.  Where appropriate, fontification
+ automatically uses these new faces.
+ Fontification via commands `font-lock-mode' and
+ `font-lock-fontify-buffer' is now cleanly interruptible (i.e., with
+ C-g).  If you interrupt during the fontification process, the buffer
+ remains in its previous modified state and all highlighting is removed
+ from the buffer.
+ For C/C++ modes, Font Lock mode is much faster but highlights much
+ more.  Other modes are faster/more extensive/more discriminatory, or a
+ combination of these.
+ To enable Font Lock mode, add the new function `turn-on-font-lock' in
+ one of the following ways:
+  (add-hook 'c-mode-hook 'turn-on-font-lock)
+ Or for any visited file with:
+  (add-hook 'find-file-hooks 'turn-on-font-lock)
+ *** Supports color and grayscale displays
+ Font Lock mode supports different ways of highlighting, depending on
+ the type of display and background shade.  Attributes (face color,
+ bold, italic and underline, and display type and background mode) can
+ be controlled either from Emacs Lisp or X resources.
+ See the new variables `font-lock-display-type' and
+ `font-lock-face-attributes'.
+ *** Supports more modes
+ The following modes are directly supported:
+ ada-mode, asm-mode, bibtex-mode, c++-c-mode, c++-mode, c-mode,
+ change-log-mode, compilation-mode, dired-mode, emacs-lisp-mode,
+ fortran-mode, latex-mode, lisp-mode, mail-mode, makefile-mode,
+ outline-mode, pascal-mode, perl-mode, plain-tex-mode, rmail-mode,
+ rmail-summary-mode, scheme-mode, shell-mode, slitex-mode, tex-mode,
+ texinfo-mode.
+ See the new variables `font-lock-defaults-alist' and
+ `font-lock-defaults'.
+ Some modes support different levels of fontification.  You can choose
+ to use the minimum or maximum available decoration by changing the
+ value of the new variable `font-lock-maximum-decoration'.
+ Programmers are urged to make available to the community their own
+ keywords for modes not yet supported.  See font-lock.el for
+ information about efficiency.
+ *** fast-lock
+ The fast-lock package speeds up Font Lock mode by saving font choices
+ in associated cache files.  When you visit a file with Font Lock mode
+ and Fast Lock mode turned on for the first time, the file's buffer is
+ fontified as normal.  When certain events occur (such as exiting
+ Emacs), Fast Lock saves the highlighting in a cache file.  When you
+ subsequently visit this file, its cache is used to restore the
+ highlighting.
+ To use this package, put in your `~/.emacs':
+  (add-hook 'font-lock-mode-hook 'turn-on-fast-lock)
+ To control the use of caches, see the documentation for `fast-lock-mode'.
+ ** You can tell pop-to-buffer to display certain buffers in the selected
+ window rather than finding some other window to display them in.
+ There are two variables you can use to specify these buffers.
+ same-window-buffer-names holds a list of buffer names; if a buffer's
+ name appears in this list, pop-to-buffer puts it in the selected window.
+ same-window-regexps holds a list of regexps--if any one of them
+ matches a buffer's name, then pop-to-buffer puts that buffer in the
+ selected window.
+ The default values of these variables are not nil: they list various
+ buffers that normally appear, when you as for them, in the selected
+ window.  These include shell buffers, mail buffers, telnet buffers,
+ and others.  By removing elements from these variables, you can ask
+ Emacs to display those buffers in separate windows.
+ ** The special-display-buffer-names and special-display-regexps lists
+ have been generalized.  An element may now be a list.  The car of the list
+ is the buffer name or regular expression for matching buffer names.
+ The cdr of the list can be an alist specifying additional frame
+ parameters for use in constructing the special display frame.
+ Alternatively, the cdr can have this form:
+   (FUNCTION ARGS...)
+ where FUNCTION is a symbol.  Then the frame is constructed by calling
+ FUNCTION; its first argument is the buffer, and its remaining
+ arguments are ARGS.
+ ** If the environment variable REPLYTO is set, its value is the default
+ for mail-default-reply-to.
+ ** When you send a message in Emacs, if you specify an Rmail file with
+ the FCC: header field, Emacs converts the message to Rmail format
+ before writing it.  Thus, the file never contains anything but Rmail
+ format messages.
+ ** The new variable mail-from-style controls whether the From: header
+ should include the sender's full name, and if so, which format to use.
+ ** The new variable mail-personal-alias-file specifies the name of the
+ user's personal aliases.  This defaults to the file ~/.mailrc.
+ mailabbrev.el used to have its own variable for this purpose
+ (mail-abbrev-mailrc-file).  That variable is no longer used.
+ ** In Buffer-Menu mode, the d and C-d commands (which mark buffers for
+ deletion) now accept a prefix argument which serves as a repeat count.
+ ** Changes in BibTeX mode.
+ *** Reference keys can now be entered with TAB completion.  All
+ reference keys defined in that buffer and all labels that appear in
+ crossreference entries are object to completion.
+ *** Braces are supported as field delimiters in addition to quotes.
+ BibTeX entries may have brace-delimited and quote-delimited fields
+ intermixed.  The delimiters generated for new entries are specified by
+ the variables bibtex-field-left-delimiter and
+ bibtex-field-right-delimiter on a buffer-local basis. Those variables
+ default to braces, since it is easier to put quote accented characters
+ (as the german umlauts) into a brace-delimited entry.
+ *** The function bibtex-clean-entry can now be invoked with a prefix
+ argument.  In this case, a label is automatically generated from
+ various fields in the record.  If bibtex-clean-entry is invoked on a
+ record without label, a label is also generated automatically.
+ Various variables (all beginning with `bibtex-autokey-') control the
+ creation of that key.  The variable bibtex-autokey-edit-before-use
+ determines, if the user is allowed to edit auto-generated reference
+ keys before they are used.
+ *** A New function bibtex-complete-string completes strings with
+ respect to the strings defined in this buffer and a set of predefined
+ strings (initialized to the string macros defined in the standard
+ BibTeX style files) in the same way in which ispell-complete-word
+ works with respect to words in a dictionary.  Candidates for
+ bibtex-complete-string are initialized from variable
+ bibtex-predefined-strings and by parsing the files found in
+ bibtex-string-files for @String definitions.
+ *** Every reference/field pair has now attached a comment which
+ appears in the echo area when this field is edited.  These comments
+ should provide useful hints for BibTeX usage, especially for BibTeX
+ beginners.  New variable bibtex-help-message determines if these help
+ messages are to appear in the minibuffer when moving to a text entry.
+ *** Inscriptions of menu bar changed from "Entry Types" to
+ "Entry-Types" and "Bibtex Edit" to "BibTeX-Edit".
+ *** The variable bibtex-include-OPTcrossref is now not longer a binary
+ switch but a list of reference names which should contain a crossref
+ field.  E.g., you can tell bibtex-mode you want a crossref field for
+ @InProceedings and @InBook entries but for no other.
+ *** The function validate-bibtex-buffer was completely rewritten to
+ validate if a buffer is syntactically correct.  find-bibtex-duplicates
+ is no longer a function itself but was moved into
+ validate-bibtex-buffer.
+ *** Cleaning a BibTeX entry tests, if necessary fields are there.
+ E.g., if you tell bibtex-mode to include a crossref entry, some fields
+ are optional which would be required without the crossref entry.  If
+ you now leave the crossref entry empty and do a bibtex-clean-entry
+ with some now required fields left empty, version 2.0 of bibtex.el
+ complains about the absence of these fields, whereas version 1.3
+ didn't.
+ *** Default value for variables bibtex-maintain-sorted-entries and
+ bibtex-sort-ignore-string-entries is now t.
+ *** All interactive functions are renamed to begin with `bibtex-'.
+ *** Keybindings with \C-c\C-e entry changed for unification.  Often
+ used reference types are now on control-modified keys, mediocre used
+ types are on unmodified keys, seldom used types are on shift-modified
+ keys and almost never used types on meta-modified keys.
\f
+ * Configuration Changes in Emacs 19.29
+ ** Emacs now uses directory /usr/local/share for most of its installed
+ files.  This follows a GNU convention for directory usage.
+ ** The option --with-x11 is no longer supported.
+ X11 is the only version of X that Emacs 19.29 supports;
+ use --with-x if you need to request X support explicitly.
+ (Normally this should not be necessary, since configure should
+ automatically enable X support if X is installed on your machine.)
+ ** If you use the site-init.el file to set the variable
+ mail-host-address to a string in the dumped Emacs, that string becomes
+ the default host address for initializing user-mail-address.
+ It is used instead of the value of (system-name).
\f
+ * Lisp-Level Changes in Emacs 19.29
+ ** Basic Lisp
+ *** The range of integer values is now at least 2**28 on all machines.
+ This means the maximum size of a buffer is at least 2**27-1,
+ or 134,217,727.
+ *** You can now use Common Lisp syntax for the backquote and comma
+ macros.  Thus, you can now write `(x ,y z) instead of (` (x (, y) z)).
+ The old syntax is still accepted.
+ *** The new function rassoc is like assoc, except that it compares the
+ key against the cdr of each alist element, where assoc would compare
+ it against the car of each alist element.
+ *** The new function unintern deletes a symbol from an obarray.  The
+ first argument can be the symbol to delete, or a string giving its
+ name.  The second argument specifies the obarray (nil means the
+ current default obarray).
+ If the specified symbol is not in the obarray, or if there's no symbol
+ in the obarray matching the specified string, unintern does nothing
+ and returns nil.  If it does delete a symbol, it returns t.
+ *** You can specify an alternative read function for use by load and
+ eval-region by binding the variable load-read-function to some other
+ function.  This function should accept one argument just like read.
+ If load-read-function is nil, load and eval-region use ordinary read.
+ *** The new function `type-of' takes any object as argument, and
+ returns a symbol identifying the type of that object--one of `symbol',
+ `integer', `float', `string', `cons', `vector', `marker', `overlay',
+ `window', `buffer', `subr', `compiled-function',
+ `window-configuration', `process'.
+ *** When you use eval-after-load for a file that is already loaded, it
+ executes the FORM right away.  As before, if the file is not yet
+ loaded, it arranges to execute FORM if and when the file is loaded
+ later.  The result is: if you have called eval-after-load for a file,
+ and if that file has been loaded, then regardless of the order of
+ these two events, the specified form has been evaluated.
+ *** The Lisp construct #@NUMBER now skips the next NUMBER characters,
+ treating them as a comment.
+ You would not want to use this in a file you edit by hand, but it is
+ useful for commenting out parts of machine-generated files.
+ *** Two new functions, `plist-get' and `plist-put',
+ allow you to modify and retrieve values from lists formatted as property-lists.
+ They work like `get' and `put', but operate on any list.
+ `plist-put' returns the modified property-list; you must store it
+ back where you got it.
+ *** The new function add-to-list is called with two elements,
+ a variable that holds a list and a new element.
+ It adds the element to the list unless it is already present.
+ It compares elements using `equal'.  Here is an example:
+ (setq foo '(a b)) => (a b)
+ (add-to-list 'foo 'c) => (c a b)
+ (add-to-list 'foo 'b) => (c a b)
+ foo => (c a b)
+ ** Changes in compilation.
+ Functions and variables loaded from a byte-compiled file
+ now refer to the file for their doc strings.
+ This has a few consequences:
+ -- Loading the file is faster and uses less memory.
+ -- Reference to doc strings is a little slower (the same speed
+    as reference to the doc strings of primitive and preloaded functions).
+ -- The compiled files will not work in old versions of Emacs.
+ -- If you move the compiled file after loading it, Emacs can no longer
+    find these doc strings.
+ -- If you alter the compiled file (such as by compiling a new
+    version), then further access to documentation strings will get
+    nonsense results.
+ The byte compiler now optionally supports lazy loading of compiled
+ functions' definitions.  If you enable this feature when you compile,
+ loading the compiled file does not actually bring the function
+ definitions into core.  Instead it creates references to the compiled
+ file, and brings each function's definition into core the first time
+ you call that function, or when you force it with the new function
+ `fetch-bytecode'.
+ Using the lazy loading feature has a few consequences:
+ -- Loading the file is faster and uses less memory.
+ -- Calling any function in the file for the first time is slower.
+ -- If you move the compiled file after loading it, Emacs can no longer
+    find the function definitions.
+ -- If you alter the compiled file (such as by compiling a new
+    version), then further access to functions not already loaded
+    will get nonsense results.
+ To enable the lazy loading feature, set up a non-nil file local
+ variable binding for the variable `byte-compile-dynamic' in the Lisp
+ source file.  For example, put this on the first line:
+     -*-byte-compile-dynamic: t;-*-
+ It's a good idea to use the lazy loading feature for a file that
+ contains many functions, most of which are not actually used by a
+ given user in a given session.
+ To turn off the basic feature of referring to the file for doc
+ strings, set byte-compile-dynamic-docstrings to nil.  You can do this
+ globally, or for one source file by adding this to the first line:
+     -*-byte-compile-dynamic-docstrings: nil;-*-
+ ** Strings
+ *** Do not pass integer arguments to `concat' (or `vconcat' or
+ `append').  We are phasing out the old unrecommended support for
+ integers as arguments to these functions, in preparation for treating
+ numbers as single characters in a future release.  To concatenate
+ numbers in string form, use `number-to-string' first, or rewrite the
+ call to use `format' instead of `concat'.
+ *** The new function match-string returns the string of text matched at
+ the given parenthesized expression by the last regexp search, or nil
+ if there was no match.  If the last match was by `string-match' on a
+ string, the string must be given.  Therefore, this function can be
+ used in place of `buffer-substring' and `substring', when using
+ `match-beginning' and `match-end' to find match positions.
+    (match-string N)   or   (match-string N STRING)
+ *** The function replace-match now accepts an optional fourth argument,
+ STRING.  Use this after performing string-match on STRING, to replace
+ the portion of STRING that was matched.  When used in this way,
+ replace-match returns a newly created string which is the same as
+ STRING except for the matched portion.
+ *** The new function buffer-substring-no-properties
+ is like buffer-substring except that the string it returns
+ has no text properties.
+ *** The function `equal' now considers two strings to be different
+ if they don't have the same text properties.
+ ** Completion
+ *** all-completions now takes an optional fourth argument.
+ If that argument is non-nil, completions that start with a space
+ are ignored unless the initial string also starts with a space.
+ (This used to happen unconditionally.)
+ ** Local Variables
+ *** Local hook variables.
+ There is now a clean way to give a hook variable a buffer-local value.
+ Call the function `make-local-hook' to do this.
+ Once a hook variable is buffer-local, you can add hooks to it either
+ globally or locally.  run-hooks runs the local hook functions
+ of the current buffer, then all the global hook functions.
+ The functions add-hook and remove-hook take an additional optional
+ argument LOCAL which says whether to add (or remove) a local hook
+ function or a global one.
+ Local hooks use t as an element of the (local) value of the hook
+ variable as a flag meaning to use the global value also.
+ *** The new function local-variable-p tells you whether a particular
+ variable is buffer-local in the current buffer or a specified buffer.
+ ** Editing Facilities
+ *** The function copy-region-as-kill no longer sets this-command;
+ as a result, a following kill command will not normally append
+ to the text saved by copy-region-as-kill.
+ *** Regular expression searching and matching no longer performs full
+ Posix backtracking by default.  They now stop with the first match found
+ instead of looking for the longest match--just as they did in Emacs 18.
+ The reason for this change is to get higher speed.
+ There are new functions you can use if you really want to search or
+ match with Posix behavior: posix-search-forward,
+ posix-search-backward, posix-looking-at, and posix-string-match.  Call
+ these just like re-search-forward, re-search-backward, looking-at, and
+ string-match.
+ ** Files
+ *** The new variable `format-alist' defines file formats,
+ which are ways of translating between the data in a file and things
+ (text, text-properties, and possibly other information) in a buffer.
+ `format-alist' has one element for each format.  Each element is a
+ list like this:
+   (NAME DOC-STRING REGEXP FROM-FN TO-FN MODIFY MODE-FN)
+ containing the name of the format, a documentation string, a regular
+ expression which is used to recognize files in that format, a decoding
+ function, an encoding function, a flag that indicates whether the
+ encoding function modifies the buffer, and a mode function.
+ FROM-FN is called to decode files in that format; it gets two args, BEGIN
+         and END, and can make any modifications it likes, returning the new
+         end position.  It must make sure that the beginning of the file no
+       longer matches REGEXP, or else it will get called again.
+ TO-FN   is called to encode a region into that format; it is also passed BEGIN
+         and END, and either returns a list of annotations as in
+         `write-region-annotate-functions', or modifies the region and returns
+         the new end position.
+ MODIFY, if non-nil, means the TO-FN modifies the region.  If nil, TO-FN may
+         not make any changes and should return a list of annotations.
+ `insert-file-contents' checks the beginning of the file that it is
+ inserting to see if it matches one of the regexps.  If so, then it
+ calls the decoding function, and then looks for another match.  When
+ visiting a file, it also calls the mode function, and sets the
+ variable `buffer-file-format' to the list of formats that the file
+ used.
+ `write-region' calls the encoding functions for each format in
+ `buffer-file-format' before it writes the file.  To save a file in a
+ different format, either set `buffer-file-format' to a different
+ value, or call the new function `format-write-file'.
+ Since some encoding functions may be slow, you can request that
+ auto-save use a format different from the buffer's default by setting
+ the variable `auto-save-file-format' to the desired format.  This will
+ determine the format of all auto-save files.
+ *** The new function file-ownership-preserved-p tells you whether
+ deleting a file and recreating it would keep the file's owner
+ unchanged.
+ *** The new function file-regular-p returns t if a file
+ is a "regular" file (not a directory, symlink, named pipe,
+ terminal, or other I/O device).
+ *** The new function file-name-sans-extension discards the extension
+ of a file name.  You call it with a file name, and returns a string
+ lacking the extension.
+ *** The variable path-separator is a string which says which
+ character separates directories in a search path.  It is ":"
+ for Unix and GNU systems, ";" for MSDOG and Windows NT.
+ ** Commands and Key Sequences
+ *** Key sequences consisting of C-c followed by {, }, <, >, : or ; are
+ now reserved for major modes.  Sequences consisting of C-c followed by
+ any other punctuation character are now meant for minor modes.  We don't
+ plan to convert all existing major modes to stop using those sequences,
+ but we hope to keep them to a minimum.
+ *** When the post-command-hook or the pre-command-hook gets an error, the error
+ is silently ignored.  Emacs no longer sets the hook variable to nil when this
+ happens.  Meanwhile, the hook functions can now alter the hook variable in
+ a normal fashion; there is no need to do anything special.
+ *** define-key, lookup-key, and various other functions for changing or
+ looking up key bindings now let you write an event type with a list
+ like (ctrl meta newline) or (meta ?d), as in XEmacs.  (ctrl meta newline)
+ is equivalent to the event type symbol C-M-newline, and (meta ?d)
+ is equivalent to the character ?\M-d.
+ *** The function event-convert-list converts a list such as
+ (meta ?d) into the corresponding event type (a symbol or integer).
+ *** In an interactive spec, `k' means to read a key sequence.  In this
+ key sequence, upper case characters and shifted function keys which
+ have no bindings are converted to lower case if that makes them
+ defined.
+ The new interactive code `K' reads a key sequence similarly, but does
+ not convert the last event.  `K' is useful for reading a key sequence
+ to be given a binding.
+ *** The variable overriding-local-map now has no effect on the menu bar
+ display unless overriding-local-map-menu-flag is non-nil.  This is why
+ incremental search no longer temporarily changes the menu bars.
+ Note that overriding-local-map does still affect the execution of key
+ sequences entered using the menu bar.  So if you use
+ overriding-local-map, and a menu bar key sequence comes in, you should
+ make sure to clear overriding-local-map before that key sequence gets
+ looked up and executed.  But this is what you'd normally do anyway:
+ programs that use overriding-local-map normally exit and "put back"
+ any event such as menu-bar that they do not handle specially.
+ *** The new variable `overriding-terminal-local-map' is like
+ overriding-local-map, but is specific to a single terminal.
+ *** delete-frame events.
+ When you use the X window manager's "delete window" command, this now
+ generates a delete-frame event.  The standard definition of this event
+ is a command that deletes the frame that received the event, and kills
+ Emacs when the last visible or iconified frame is deleted.  You can
+ rebind the event to some other command if you wish.
+ *** Two new types of events, iconify-frame and make-frame-visible,
+ indicate that the user iconified or deiconified a frame with the
+ window manager.  Since the window manager has already done the work,
+ the default definition for both event types in Emacs is to do nothing.
+ ** Frames and X
+ *** Certain Lisp variables are now local to an X terminal (in other
+ words, all the screens of a single X server).  The value in effect, at
+ any given time, is the one that belongs to the terminal of the
+ selected frame.  The terminal-local variables are
+ default-minibuffer-frame, system-key-alist, defining-kbd-macro, and
+ last-kbd-macro.  There is no way for Lisp programs to create others.
+ The terminal-local variables cannot be buffer-local.
+ *** When you create an X frame, for the `top' and `left' frame
+ parameters, you can now use values of the form (+ N) or (- N), where N
+ is an integer.  (+ N) means N pixels to the right of the left edge of
+ the screen and (- N) means N pixels to the left of the right edge.  In
+ both cases, N may be zero (exactly at the edge) or negative (putting
+ the window partly off the screen).
+ The function x-parse-geometry can return values of these forms
+ for certain inputs.
+ *** The variable menu-bar-file-menu has been renamed to
+ menu-bar-files-menu to match the actual item that appears in the menu.
+ (All the other such variable names do match.)
+ *** The new function active-minibuffer-window returns the minibuffer window
+ currently active, or nil if none is now active.
+ *** In the functions next-window, previous-window, next-frame,
+ previous-frame, get-buffer-window, get-lru-window, get-largest-window
+ and delete-windows-on, if you specify 0 for the last argument,
+ it means to consider all visible and iconified frames.
+ *** When you set a frame's cursor type with modify-frame-parameters,
+ you can now specify (bar . INTEGER) as the cursor type.  This stands
+ for a bar cursor of width INTEGER.
+ *** The new function facep returns t if its argument is a face name
+ (or if it is a vector such as is used internally by the Lisp code
+ to represent a face).
+ *** Each frame can now have a buffer-predicate function,
+ which is the `buffer-predicate' frame parameter.
+ When `other-buffer' looks for an alternative buffer, it considers
+ only the buffers that fit the selected frame's buffer predicate (if it
+ has one).  This is useful for applications that make their own frames.
+ *** When you create an X frame, you can now specify the frame parameter
+ `display'.  This says which display to put the frame on.  The value
+ should be a display name--a string of the form
+ "HOST:DPYNUMBER.SCREENNUMBER".
+ The functions x-server-... and x-display-... now take an optional
+ argument which specifies the display to ask about.  You can use either
+ a display name string or a frame.  A value of nil stands for the
+ selected frame.
+ To close the connection to an X display, use the function
+ x-close-connection.  Specify which display with a display name.  You
+ cannot close the connection if Emacs still has frames open on that
+ display.
+ x-display-list returns a list indicating which displays Emacs has
+ connections to.  Its elements are display names (strings).
+ *** The icon-type frame parameter may now be a file name.
+ Then the contents of that file specify the icon bitmap to use
+ for that frame.
+ *** The title of an Emacs frame, displayed by most window managers, is
+ set from frame-title-format or icon-title-format.  These have the same
+ structure as mode-line-format.
+ *** x-display-grayscale-p is a new function that returns non-nil if
+ your X server can display shades of gray.  Currently it returns
+ non-nil for color displays (because they can display shades of gray);
+ we may change it in the next version to return nil for color displays.
+ *** The frame parameter scroll-bar-width specifies the width of the
+ scrollbar in pixels.
+ ** Buffers
+ *** Creating a buffer with get-buffer-create does not obey
+ default-major-mode.  That variable is now handled in a separate
+ function, set-buffer-major-mode.  get-buffer-create and generate-new-buffer
+ always leave the newly created buffer in Fundamental mode.
+ Creating a new buffer by visiting a file or with switch-to-buffer,
+ pop-to-buffer, and similar functions does call set-buffer-major-mode
+ to select the default major mode specified with default-major-mode.
+ *** You can now create an "indirect buffer".  An indirect buffer shares
+ its text, including text properties, with another buffer (the "base
+ buffer"), but has its own major mode, local variables, overlays, and
+ narrowing.  An indirect buffer has a name of its own, distinct from
+ those of the base buffer and all other buffers.  An indirect buffer
+ cannot itself be visiting a file (though its base buffer can be).
+ The base buffer cannot itself be indirect.
+ Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer
+ named NAME whose base is BASE-BUFFER.  If BASE-BUFFER is an indirect
+ buffer, its base buffer is used as the base for the new buffer.
+ You can make an indirect buffer current, or switch to it in a window,
+ just as you would a non-indirect buffer.
+ The function buffer-base-buffer, given an indirect buffer, returns its
+ base buffer.  It returns nil when given an ordinary buffer (not
+ indirect).
+ The library `noutline' has versions of Outline mode and Outline minor
+ mode which let you display different parts of the outline in different
+ indirect buffers.
+ ** Subprocesses
+ *** The functions call-process and call-process-region now allow
+ you to direct error message output from the subprocess into a
+ separate destination, instead of mixing it with ordinary output.
+ To do this, specify for the third argument, BUFFER, a list of the form
+   (BUFFER-OR-NAME ERROR-DESTINATION)
+ BUFFER-OR-NAME specifies where to put ordinary output; it should
+ be a buffer or buffer name, or t, nil or 0.  This is what would
+ have been the BUFFER argument, ordinarily.
+ ERROR-DESTINATION specifies where to put the error output.
+ nil means discard it, t means mix it with the ordinary output,
+ and a string specifies a file name to write this output into.
+ You can't specify a buffer to put the error output in; that is not
+ easy to implement directly.  You can put the error output into a
+ buffer by sending it to a temporary file and then inserting the file
+ into a buffer.
+ *** Comint mode changes:
+ **** The variable comint-completion-addsuffix can also be a cons pair
+ of the form (DIRSUFFIX . FILESUFFIX), where DIRSUFFIX and FILESUFFIX are
+ strings added on unambiguous or exact completion of directories and file
+ names, respectively.
+ ** Text properties
+ *** You can now specify which values of the `invisible' property
+ make text invisible in a given buffer.  The variable
+ `buffer-invisibility-spec', which is always local in all buffers,
+ controls this.
+ If its value is t, then any non-nil `invisible' property makes
+ a character invisible.
+ If its value is a list, then a character is invisible if its
+ `invisible' property value appears as a member of the list, or if it
+ appears as the car of a member of the list.
+ When the `invisible' property value appears as the car of a member of
+ the `buffer-invisibility-spec' list, then the cdr of that member has
+ an effect.  If it is non-nil, then an ellipsis appears in place of the
+ character.  (This happens only for the *last* invisible character in a
+ series of consecutive invisible characters, and only at the end of a
+ line.)
+ If a character's `invisible' property is a list, then Emacs checks each
+ element of the list against `buffer-invisibility-spec'.  If any element
+ matches, the character is invisible.
+ *** The command `list-text-properties-at' shows what text properties
+ are in effect at point.
+ *** Frame objects now exist in Emacs even on systems that don't support
+ X Windows.  You can create multiple frames, and switch between them
+ using select-frame.  The selected frame is actually displayed on your
+ terminal; other frames are not displayed at all.  The selected frame
+ number appears in the mode line after `Emacs', except for frame 1.
+ Switching frames on ASCII terminals is therefore more or less
+ equivalent to switching between different window configurations.
+ *** The new variable window-size-change-functions holds a list of
+ functions to be called if window sizes change (or if windows are
+ created or deleted).  The functions are called once for each frame on
+ which changes have occurred, with the frame as the sole argument.
+ This takes place shortly before redisplay.
+ *** The modification hook functions of overlays now work differently.
+ They are called both before and after each change.  This makes it
+ possible for the functions to determine exactly what the change was.
+ This change affects three overlay properties: the modification-hooks
+ property, a list of functions called for deletions overlapping the
+ overlay's range and for insertions inside it; the
+ insert-in-front-hooks, a list of functions called for insertions at
+ the beginning of the overlay; and the insert-behind-hooks, a list of
+ functions called for insertions at the end of the overlay.
+ Each function is called both before and after each change that it
+ applies to.  Before the change, it is called with four arguments:
+     (funcall FUNCTION OVERLAY nil START END)
+ START and END are the same arguments that the before-change-functions
+ receive.
+ After the change, each function is called with five arguments:
+     (funcall FUNCTION OVERLAY t START END OLDSIZE)
+ The last arguments, START and END and OLDSIZE,
+ are the same arguments that the after-change-functions receive.
+ This means the function must accept either four or five arguments.
+ *** You can set defaults for text-properties with the new variable
+ `default-text-properties'.  Its value is a property list; the values
+ specified there are used whenever a character (or its category) does
+ not specify a value.
+ *** The `face' property of a character or an overlay can now be a list
+ of face names.  Formerly it had to be just one face name.
+ *** Changes in handling the `intangible' text property.
+ **** If inhibit-point-motion-hooks is non-nil, then `intangible' properties
+ are ignored.
+ **** Moving to just before a stretch of intangible text
+ is no longer special in any way.  Point stays at that place.
+ **** When you move point backwards into the midst of intangible text,
+ point moves back to the beginning of that text.  (It used to move
+ forward to the end of that text, which was not very useful.)
+ **** When moving across intangible text, Emacs stops wherever the
+ property value changes.  So if you have two stretches of intangible
+ text, with different non-nil intangible properties, it is possible to
+ place point between them.
+ ** Overlays
+ *** Overlay changes.
+ **** The new function previous-overlay-change returns the position of
+ the previous overlay start or end, before a specified position.  This
+ is the backwards-moving counterpart of next-overlay-change.
+ **** overlay-get now supports category properties on an overlay
+ the same way get-text-property supports them as text properties.
+ Specifically, if an overlay does not have the property PROP that you
+ ask for, but it does have a `category' property which is a symbol,
+ then that symbol's PROP property is used.
+ **** If an overlay has a non-nil `evaporate' property, it will be
+ deleted if it ever becomes empty (i.e., when it spans no characters).
+ **** If an overlay has a `before-string' and/or `after-string' property,
+ these strings are displayed at the overlay's endpoints.
+ ** Filling
+ *** The new variable fill-paragraph-function provides a way for major
+ modes to override the filling of paragraphs.  If this is non-nil,
+ fill-paragraph calls it as a function, passing along its sole
+ argument.  If the function returns non-nil, fill-paragraph assumes it
+ has done the job and simply passes on whatever value it returned.
+ The usual use of this feature is to fill comments in programming
+ language modes.
+ *** Text filling and justification changes:
+ **** The new variable use-hard-newlines can be used to make a
+ distinction between "hard" and "soft" newlines; the fill functions
+ will then never remove a newline that was manually inserted.  Hard
+ newlines are marked with a non-nil `hard' text-property.
+ **** The fill-column and left-margin can now be modified by text-properties.
+ Most lisp programs should use the new functions (current-fill-column) and
+ (current-left-margin), which return the proper values to use for the
+ current line.
+ **** There are new functions for dealing with margins:
+ ***** Set-left-margin and set-right-margin (set the value for a region
+ and re-fill).  These functions take three arguments: two to specify
+ a region, and the desired margin value.
+ ***** Increase-left-margin, decrease-left-margin, increase-right-margin, and
+ decrease-right-margin (change settings relative to current values, and
+ re-fill).
+ ***** move-to-left-margin moves point there, optionally adding
+ indentation or changing tabs to spaces in order to make that possible.
+ beginning-of-line-text also moves past the fill-prefix and any
+ indentation added to center or right-justify a line, to the beginning
+ of the text that the user actually typed.
+ ***** delete-to-left-margin removes any left-margin indentation, but
+ does not change the property.
+ **** The paragraph-movement functions look for the paragraph-start and
+ paragraph-separate regexps at the current left margin, not at the
+ beginning of the line.  This means that those regexps should NOT use ^
+ to anchor the search.  However, for backwards compatibility, a ^ at
+ the beginning of the regexp will be ignored, so most packages won't break.
+ **** justify-current-line is now capable of doing left, center, or
+ right justification as well as full justification.
+ **** The fill functions can do any kind of justification based on the new
+ `justification' text-property and `default-justification' variable,
+ or arguments to the functions.  They also have a new option which
+ defeats the normal removal of extra whitespace.
+ **** The new function `current-justification' returns the kind of
+ justification used for the current line.  The new function
+ `set-justification' can be used to change it, including re-justifying
+ the text of the region according to the new value.
+ **** Filling and auto-fill are disabled if justification is `none'.
+ **** The auto-fill-function is now called regardless of whether
+ the fill-column has been exceeded; the function can determine on its
+ own whether filling (or justification) is necessary.
+ ** Processes
+ *** process-tty-name is a new function that returns the name of the
+ terminal that the process itself reads and writes on (not the name of
+ the pty that Emacs uses to talk with that terminal).
+ *** Errors in process filters and sentinels are now normally caught
+ automatically, so that they don't abort other Lisp programs.
+ Setting debug-on-error non-nil turns off this feature; then errors in
+ filters and sentinels are not caught.  As a result, they can invoke
+ the debugger, under the control of debug-on-error.
+ *** Emacs now preserves the match data around the execution of process
+ filters and sentinels.  You can use search and match functions freely
+ in filters and sentinels without explicitly bothering to save the
+ match data.
+ ** Display
+ *** The variable message-log-max controls how messages are logged in the
+ "*Messages*" buffer.  An integer value means to keep that many lines;
+ t means to log with no limit; nil means disable message logging.  Lisp
+ code that calls `message' excessively (e.g. isearch.el) should probably
+ bind this variable to nil.
+ *** Display tables now have a new element, at index 261, specifying the
+ glyph to use for the separator between two side-by-side windows.  By
+ default, this is the vertical bar character `|'.  Probably the only
+ other useful character to store for this element is a space, to make
+ less visual separation between two side-by-side windows displaying
+ related information.
+ *** The new mode-line-format spec %c displays the current column number.
+ *** The new variable blink-matching-delay specifies how long to keep
+ the cursor at the matching open-paren, after you insert a close-paren.
+ This is useful mainly on systems which can wait for a fraction of a
+ second--you can then specify fractional values such as 0.5.
+ *** Faster processing of buffers with long lines
+ The new variable cache-long-line-scans determines whether Emacs
+ should use caches to handle long lines more quickly.  This variable is
+ buffer-local, in all buffers.
+ Normally, the line-motion functions work by scanning the buffer for
+ newlines.  Columnar operations (like `move-to-column' and
+ `compute-motion') also work by scanning the buffer, summing character
+ widths as they go.  This works well for ordinary text, but if the
+ buffer's lines are very long (say, more than 500 characters), these
+ motion functions will take longer to execute.  Emacs may also take
+ longer to update the display.
+ If cache-long-line-scans is non-nil, these motion functions cache
+ the results of their scans, and consult the cache to avoid rescanning
+ regions of the buffer until the text is modified.  The caches are most
+ beneficial when they prevent the most searching---that is, when the
+ buffer contains long lines and large regions of characters with the
+ same, fixed screen width.
+ When cache-long-line-scans is non-nil, processing short lines will
+ become slightly slower (because of the overhead of consulting the
+ cache), and the caches will use memory roughly proportional to the
+ number of newlines and characters whose screen width varies.
+ The caches require no explicit maintenance; their accuracy is
+ maintained internally by the Emacs primitives.  Enabling or disabling
+ the cache should not affect the behavior of any of the motion functions;
+ it should only affect their performance.
+ ** System Interface
+ *** The function user-login-name now accepts an optional
+ argument uid.  If the argument is non-nil, user-login-name
+ returns the login name for that user id.
+ *** system-name, user-name, user-full-name and user-real-name are now
+ variables as well as functions.  The variables hold the same values
+ that the functions would return.  The new variable multiple-frames
+ is non-nil if at least two non-minibuffer frames are visible.  These
+ variables may be useful in constructing the value of frame-title-format
+ or icon-title-format.
+ *** Changes in time-conversion functions.
+ **** The new function format-time-string takes a format string and a
+ time value.  It converts the time to a string, according to the format
+ specified.  You can specify what kind of conversion to use with
+ %-specifications.
+ **** The new function decode-time converts a time value into a list of
+ specific items of information: the year, month, day of week, day of
+ month, hour, minute and second.  (A time value is a list of two or
+ three integers.)
+ **** The new function encode-time converts specific items of time
+ information--the second, minute, hour, day, month, year, and time
+ zone--into a time value.
\f
+ * Changes in Emacs 19.27
+ There are no changes; however, here is one bug fix made in 19.26 that users
+ think should be documented here.
+ ** SPC and DEL in Info now handle menus consistently.
+ SPC and DEL scroll through an entire subtree an Info manual.  Once you
+ scroll through a node far enough to reach a menu, SPC begins moving
+ into the subnodes of the menu, starting with the first one.  When you
+ reach the end of a subnode, SPC moves into the next subnode, and so
+ on.
+ DEL more or less scrolls through the same text in reverse order.
\f
+ * User Editing Changes in Emacs 19.26
+ ** In the X toolkit version, if you click on a menu bar item and
+ release the button quickly outside the menu, the menu remains visible
+ until you click or type something else.  If you click on the menu, you
+ select from the menu.  Any other mouse click makes the menu disappear.
+ Keyboard input gets rid of the menu and then is processed normally.
+ "Quickly" means within double-click-time milliseconds.
+ ** The C-x 5 commands to select a buffer in "another frame" now use an
+ existing iconified frame, if any, deiconifying it.  They also raise
+ the frame.
+ ** Region highlighting on a black-and-white-only display now uses
+ underlining.  Inverse-video had the problem that you couldn't see
+ the cursor.
+ ** You can now change the height of a window by pressing mouse-1 on
+ the mode line and dragging it up and down.
+ ** If you set the environment variable LC_CTYPE to iso_8859_1 or
+ iso-8859-1, Emacs automatically sets up for display and syntactic
+ handling of the ISO Latin-1 character set.
+ This does not automatically load any of the packages for input of
+ these characters, because it's not yet clear what is right to do.
+ You must still explicitly load either iso-transl or iso-acc.
+ ** For a read-only buffer that is also modified, the mode line now displays
+ %* instead of %%.
+ ** M-prior (scroll-other-window-down) is a new command that works like
+ M-next (and C-M-v) but scrolls in the opposite direction.
+ M-home moves to the beginning of the buffer, in the other window.
+ M-end moves to the end of the buffer, in the other window.  These two
+ commands, along with M-next and M-prior, form a series of commands for
+ moving around in the other window.
+ ** In change logs, the mail address is now delimited with <...> instead
+ of (...).
+ This makes it a little more convenient to extract the mail address for
+ use in mailing a message.
+ ** In Shell mode and other comint modes, C-a has now returned to
+ its ordinary meaning: move to the beginning of the line.
+ Use C-c C-a to move to the end of the prompt.
+ ** If you set mail-signature to t to cause automatic insertion of
+ your .signature file, you now get a -- before the signature.
+ ** Setting rmail-highlighted-headers to nil entirely turns off
+ highlighting in Rmail.  However, if your motivation for doing this is
+ that the highlighted text doesn't look good on your display, it might
+ be better to change the appearance of the `highlight' face.  Once
+ you've done that, you may find Rmail highlighting is useful.
+ ** In the calendar, mouse-2 is now used only for commands that apply to a date.
+ If you click it when not on a date, it gives an immediate error.
+ Mouse-3 in the calendar now gives a menu of commands that do not apply
+ to a particular date.
+ The D command displays diary entries from a specified diary file (not
+ your standard diary file).
+ ** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view
+ is now C-c C-v C-d, not C-c C-v C-h.  Thus, C-c C-v C-h is now available
+ for asking for a list of the subcommands of C-c C-v.
+ ** You can now specify "who you are" for various Emacs packages by
+ setting just one variable, user-mail-address.  This currently applies
+ to posting news with GNUS and to making change log entries.  It may
+ apply to additional Emacs features in the future.
\f
+ * Lisp-Level Changes in Emacs 19.26:
+ ** The function insert-char now takes an optional third argument
+ which, if non-nil, says the inserted characters should inherit sticky
+ text properties from the surrounding text.
+ ** The `diary' library has been renamed to `diary-lib'.  If you refer
+ to this library in your Lisp code, you must update the references.
+ ** Sending text to a subprocess can read input from subprocesses if it
+ has to wait because the destination subprocess's terminal input buffer
+ is full.
+ It was already possible in unusual occasions for this operation to
+ read subprocess input, but it did not happen very often.  It is now
+ more likely to happen.
+ ** last-nonmenu-event is now bound to t around filter functions and sentinels.
+ This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default.
+ ** In mode lines, %+ now displays as % for unmodified read-only
+ buffers.  It is now the same as %* except in the case of a modified
+ read-only buffer; in that case, %+ displays as *.
+ The old meaning of %+ is now available on %&.
+ It displays * for a modified buffer and - for an unmodified buffer,
+ regardless of read-only status.
+ ** You can now use `underline' in the color list of a face.
+ It serves as a last resort, and says to underline the face
+ (if previous color list elements can't be used).
+ ** The new function x-color-values returns the list of color values
+ for a given color name (a string).  The list contains three integers
+ which give the amounts of red, green and blue in the color: (R G B).
+ ** In run-at-time, 0 as the repeat interval means "don't repeat".
+ ** The variable trim-versions-without-asking has been renamed to
+ delete-old-versions.
+ ** The new function other-window-for-scrolling returns the choice of
+ other window for C-M-v to scroll.
+ ** Note that the function fceiling was mistakenly documented as fceil before.
\f
+ * Changes in cc-mode.el in Emacs 19.26:
+ ** A new syntactic symbol has been added: substatement-open.  It
+   defines the open brace of a substatement block.  These used to get:
+   ((block-open ...) (substatement . ...)).
+   Non-block substatement lines still get just ((substatement . ...))
+   Note that the custom indent function c-adaptive-block-open has been
+   removed as obsolete.
+ ** You can now specify the `hanginess' of closing braces.  See
+   c-hanging-braces-alist.
+ ** Recognizes try and catch blocks in C++.  They are given the
+   substatement syntactic symbol.
+ ** should be generally more forgiving about non-GNU standard top-level
+   construct definition styles (i.e. where the function/class/struct
+   opening brace does not start in column zero).
+   If you hang the braces that open a top-level construct on the right
+   edge, and you find you still need to define defun-open-prompt (Emacs
+   19) please let me know.  Note that there may still be performance
+   issues related to non-column zero opening braces.
+ ** c-macro-expand is put on C-c C-e
+ ** New style: "Default".  Resets indentation to those shipped with
+   cc-mode.el.
+ ** internal defun c-indent-via-language-element has been renamed
+   c-indent-line for compatibility with c-mode.el and awk-mode.
+ ** new buffer-local variable c-comment-start-regexp for (potential)
+   flexibility in adding new modes based on cc-mode.el
\f
+ * Changes in Emacs 19.25
+ The variable x-cross-pointer-shape (which didn't really exist) has
+ been renamed to x-sensitive-text-pointer-shape, and now does exist.
\f
+ * Changes in Emacs 19.24
+ Here is a list of new Lisp packages introduced since 19.22.
+ derived.el            Define new major modes based on old ones.
+ dired-x.el            Extra Dired features.
+ double.el             New mode for conveniently inputting non-beyond chars.
+ easymenu.el           Create menus easily.
+ ediff.el              Snazzy diff interface.
+ foldout.el            A kind of outline mode designed for editing programs.
+ gnus-uu.el            UUdecode in GNUS buffers.
+ ielm.el                       Interactively evaluate Lisp.
+                        This is a replacement for Lisp Interaction Mode.
+ iso-cvt.el            Conversion of beyond-ASCII characters between
+                        various different representations.
+ jka-compr.el          Automatic compression/decompression.
+ mldrag.el             Drag modeline to change heights of windows.
+ mail-hist.el          Provides history for headers of outgoing mail.
+ rsz-mini.el           Automatically resizing minibuffers.
+ s-region.el           Set region by holding shift.
+ skeleton.el           Templates for statement insertion.
+ soundex.el            Classifying words by how they sound.
+ tempo.el              Template insertion with hotspots.
\f
+ * User Editing Changes in 19.23.
+ ** Emacs 19.23 uses Ispell version 3.
+ Previous Emacs 19 versions used Ispell version 4.  That version had
+ improvements in storing the dictionary compactly, but these are not
+ very important nowadays.  Meanwhile, in parallel to the work on Ispell
+ 4, many useful features were added to Ispell 3.  Until a few months
+ ago, the terms on Ispell 3 did not let us use it; but they have now
+ been changed, so now we are using it.  We are dropping Ispell 4.
+ ** Emacs 19.23 can run on MS-DOG.  See the file MSDOS in the same
+ directory as this file.
+ ** Emacs 19.23 can work with an X toolkit.  You must specify toolkit
+ operation when you configure Emacs: use the option
+ --with-x-toolkit=yes.  (This option uses code developed by Lucid;
+ thanks to Frederic Pierresteguy for helping to adapt it.)
+ ** Emacs now has dialog boxes; yes/no and y/n questions automatically
+ use them in commands invoked with the mouse.  For more information,
+ see below under "Lisp programming changes".
+ ** Menus now display the keyboard equivalents (if any) of the menu
+ commands in parentheses after the menu item.
+ ** Kill commands, used in a read-only buffer, now move point across
+ the text they would otherwise have killed.  This way, you can use
+ repeated kill commands to transfer text into the kill ring.
+ ** There is now a global mark ring in addition to the mark ring that is local
+ to each buffer.  The global mark ring stores positions in any buffer.  Any
+ time the mark is set and the current buffer is different from the last time
+ the mark was set, the new mark is pushed on the global mark ring as well.
+ The new command C-x C-SPC (pop-global-mark) pops the global mark ring and
+ jumps to the last mark pushed, first switching to that buffer.
+ ** Query Replace is now available in the Edit menu.
+ ** ESC no longer simply exits a Query Replace.  It now exits the Query
+ Replace and remains pending.  Thus, ESC A and M-A are now equivalent
+ in Query Replace.
+ To simply exit a Query Replace, type RET or Period.
+ ** M-mouse-2 now puts point at the end of the yanked secondary selection.
+ ** Mouse-1 in the mode line now simply selects the window above that
+ mode line.  Mouse-2 in the mode line selects that window and expands
+ it to fill the frame it is in.
+ ** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find
+ a file you click on, in a compilation buffer to go to a particular
+ error message, and in a *Occur* buffer to go to a particular
+ occurrence.
+ (It was already possible to do likewise in Info and in completion list
+ buffers.)
+ What's more, the sensitive areas of the buffer now highlight when you
+ move the mouse over them.
+ ** In a completion list buffer, the command RET now chooses the completion
+ that is around or next to point.
+ ** If you specify the foreground color for the `mode-line' face, and
+ mode-line-inverse-video is non-nil, then the default background color
+ is the usual foreground color.
+ ** revert-buffer now preserves markers pointing within the unchanged
+ text (if any) at the beginning and end of the file.
+ ** Version control checkin and checkout preserve all markers if the
+ file does not contain any of the magic version header sequences that
+ are updated automatically by RCS and SCCS.  If such version headers
+ are present, checkin and checkout preserve a marker unless it comes
+ between two such sequences.  (So it's a good idea to put all the
+ header sequences close together.)
+ ** When a large deletion shuts off auto save temporarily in a buffer,
+ you can now turn it on again by saving the buffer with C-x C-s (as was
+ possible in Emacs 18).  You can also turn it on again with M-1 M-x
+ auto-save (as has been possible in Emacs 19).
+ ** C-x r d now runs the command delete-rectangle.
+ ** The new command imenu shows you a menu of interesting places in the
+ current buffer and lets you select one; then it moves point there.
+ The definition of interesting places depends on the major mode, but
+ typically this includes function definitions and such.  Normally,
+ imenu displays the menu in a buffer; but if you bind it to a mouse
+ event, it shows a mouse popup menu.
+ ** You can make certain chosen buffers, that normally appear in a
+ separate window, appear in special frames of their own.  To do this,
+ set special-display-buffer-names to a list of buffer names; any buffer
+ whose name is in that list automatically gets a special frame when it
+ is to be displayed in another window.
+ A good value to try is ("*compilation*" "*grep*" "*TeX Shell*").
+ More generally, you can set special-display-regexps to a list of regular
+ expressions; then each buffer whose name matches any of those regular
+ expressions gets its own frame.
+ The variable special-display-frame-alist specifies the frame
+ parameters for these frames.  It has a default value, so you don't
+ need to set it.
+ ** If you set sentence-end-double-space to nil, the fill commands
+ expect just one space at the end of a sentence.  (If you want the
+ sentence commands to accept single spaces, you must modify the regexp
+ sentence-end also.)
+ ** You can suppress the startup echo area message by adding text like
+ this to your .emacs file:
+ (setq inhibit-startup-echo-area-message "YOUR-LOGIN-NAME")
+ Simply setting inhibit-startup-echo-area-message to your login name is
+ not sufficient to inhibit the message; Emacs explicitly checks whether
+ .emacs contains an expression as shown above.  Your login name must
+ appear in the expression as a Lisp string constant.
+ This way, you can easily inhibit the message for yourself if you wish,
+ but thoughtless copying of your .emacs file will not inhibit the
+ message for someone else.
+ ** Outline minor mode now uses C-c C-o as a prefix instead of just C-c.
+ ** In Outline mode, hide-subtree is now C-c C-d.  (It was C-c C-h; but
+ that is now a conventional way to ask for help about C-c commands.)
+ ** There are two additional commands in Outline mode.
+ M-x hide-sublevels
+   hides all headers except the topmost N levels.
+ M-x hide-other
+   hides everything about the body that point is in
+   plus the headers leading up from there to the top of the tree.
+ ** In iso-transl and iso-insert, the sequences for entering A-ring and
+ the AE ligature are now just A and E (plus the initial C-x 8 or Alt).
+ You used to have to enter AA or AE, after the C-x 8 prefix of course.
+ Likewise for lower case a-ring and ae.
+ ** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix.
+ Instead of prefixing a sequence with C-x 8, you can add Alt to the
+ first character of the sequence.  For example, Alt-" a is now a way
+ to enter an a-umlaut.
+ ** CC mode is a greatly improved mode for C and C++.
+ See the following page.
+ ** tcl mode is a new major mode.  It provides features for
+ editing, indenting and running tcl programs.
+ ** Compilation minor mode lets you parse error messages in any buffer,
+ not just a normal compilation output buffer.  Type M-x
+ compilation-minor-mode to enable the minor mode; then C-c C-c jumps to
+ the source location for the error at point, as in the `*compilation*'
+ buffer.  If you use compilation-minor-mode in an Rlogin buffer, it
+ automatically accesses remote source files by ftp.
+ ** Comint and shell mode changes:
+ *** Comint modes (including Shell mode, GUD modes, etc.) now bind
+ C-M-l to the command comint-show-output.  This command scrolls the
+ buffer to show the last batch of output from the subprogram.
+ *** Completion in Comint modes now truly operates on the string before
+ point, rather than the word that point is within.
+ *** Comint mode file name completion ignores those files that end with a
+ string in the new variable comint-completion-fignore.  This variable's
+ default value is nil.
+ *** Shell mode uses the variable shell-completion-fignore to set
+ comint-completion-fignore.  The default value is nil, but some
+ people prefer ("~" "#" "%").
+ *** The function `comint-watch-for-password-prompt' can be used to
+ suppress echoing when a subprocess asks for a password.  To use it,
+ do this:
+ (add-hook 'comint-output-filter-functions
+         'comint-watch-for-password-prompt)
+ *** You can use M-x shell-strip-ctrl-m to strip ^M characters from
+ process output.
+ *** In Shell mode, TAB now completes environment variables, if possible,
+ and expands directory references.
+ *** You can use M-x comint-run to execute any program of your choice in
+ a comint mode.  Some programs such as shells, rlogin, and debuggers
+ have their own specialized modes; this command is one way to use
+ comint to run programs for which no such specialized mode exits.  (You
+ can also run a shell with M-x shell and run the program of your choice
+ under the shell--but that gives you the specializations of Shell
+ mode.)
+ ** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB
+ to do file name completion in the minibuffer.
+ The "Complete" menu includes an item for directory expansion.
+ ** GUD working with future versions of GDB will permit TAB for
+ GDB-style symbol completion.  This will work with GDB 4.13.
+ ** Rmail no longer gets new mail automatically when you visit an Rmail
+ file specified by name--not even if it is your primary Rmail file.  To
+ get new mail, type `g'.  This feature is an advantage because you now
+ have a choice of whether to get new mail.  (This change actually
+ occurred in an earlier version, but wasn't listed here then, since it
+ made the code do what the documentation already said.)
+ ** Rmail now highlights certain fields automatically, when you use X
+ windows.  The variable rmail-highlighted-headers controls which
+ fields.
+ ** If you set rmail-summary-window-size to an integer, Rmail uses
+ a window that many lines high for the summary buffer.
+ ** rmail-input-menu is a new command that visits an Rmail file letting
+ you choose which file with a mouse menu.  rmail-output-menu is
+ similar; it outputs the current message, using a mouse menu to choose
+ which Rmail file.  These commands use the variables
+ rmail-secondary-file-directory and rmail-secondary-file-regexp.
+ ** The mh-e package has been changed substantially.
+ See the file ./MH-E-NEWS for details.
+ ** The calendar and diary have new features.
+ The menu bar for the calendar contains most of the calendar commands,
+ arranged into logical categories.
+ Mouse-2 now performs specific-date-related commands when clicked on a
+ date in the calendar window and common three-month-related commands
+ when clicked elsewhere in the calendar window.
+ You can set up colored/shaded highlighting of holidays, diary entry
+ dates, and today's date, by setting calendar-holiday-marker,
+ diary-entry-marker, and calendar-today-marker to a face instead of a
+ character.  Using a special face is now the default if you are using a
+ window system.
+ ** The appt package for displaying appointment reminders has new
+ features.
+ *** The appt alarm window stays for the full duration of
+ appt-display-duration.  It no longer disappears when you start typing
+ text.
+ *** You can change the way the appointment window is created/deleted by
+ setting the variables appt-disp-window-function and
+ appt-delete-window-function.
+ For instance, these variables can be set to functions that display
+ appointments in pop-up frames, which are lowered or iconified after
+ appt-display-duration seconds.
+ ** desktop.el can now save a list of buffer-local variables,
+ and saves more global ones.
+ ** Pascal mode has been completely rewritten.  It now features
+ completing of function names, variables and type definitions around
+ current point (like M-TAB does with lisp-symbols).  There's also an
+ outline mode (M-x pascal-outline) that hides the bodies of all
+ functions you're not working with.
+ ** Edebug has a number of changes:
+ *** Edebug syntax error reporting is improved.
+ *** Top-level forms and defining forms other than defun and defmacro may
+ now be debugged with Edebug.
+ *** Edebug specifications may now contain body, &define, name, arg or
+ arglist, def-body, and def-form, to support definitions.
+ *** edebug-all-defuns is renamed to edebug-all-defs.
+ def-edebug-form-spec is replaced by def-edebug-form whose arguments
+ are unevaluated.  The old names are still available for now.
+ *** Frequency counts and coverage data may be displayed for functions being
+ debugged.
+ *** A global break condition is now checked at every stop point.
+ *** The previous condition at a breakpoint may now be edited.
+ *** A new "next" mode stops only after expression evaluation.
+ *** A new command, top-level-nonstop, does not even stop for unwind-protect,
+ as top-level would.
\f
+ * Changes in CC mode in Emacs 19.23.
+ `cc-mode' provides ANSI C, K&R C, and ARM C++ language editing.  It
+ represents the merge of c++-mode.el and c-mode.el.  cc-mode provides a
+ new, more flexible indentation engine so that indentation
+ customization is more intuitive.  There are two steps to calculating
+ indentation: first, CC mode analyzes the line for syntactic content,
+ then based on this content it applies user defined offsets and adds
+ this offset to the indentation of some previous line.
+ The syntactic analysis determines if the line describes a `statement',
+ `substatement', `class-open', `member-init-intro', etc.  These are
+ described in detail with C-h v c-offsets-alist.  You can change the
+ offsets interactively with C-c C-o (c-set-offsets), or
+ programmatically in your c-mode-common-hook, which is run both by
+ c-mode and c++-mode.  You can also set up "styles" in the same way
+ that you could with c-mode.el.   The variable c-basic-offset controls
+ the basic offset given to a level of indentation.
+ If, for example, you wanted to change this style:
+ int foo (int i)
+ {
+     switch (i) {
+     case 1:
+         printf ("its a foo\n");
+         break;
+     default:
+         printf ("don't know what it is\n");
+         break;
+     }
+ }
+ into this:
+ int foo (int i)
+ {
+     switch (i) {
+       case 1:
+         printf ("its a foo\n");
+         break;
+       default:
+         printf ("don't know what it is\n");
+         break;
+     }
+ }
+ you could add the following to your .emacs file:
+ (defun my-c-mode-common-hook ()
+   (c-set-offset 'case-label 2)
+   (c-set-offset 'statement-case-intro 2))
+ (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
+ ** New variables:
+ c-offsets-alist contains an association list of syntactic symbols and
+ their relative offsets.  Do a "C-h v c-offsets-alist" to get a list of
+ all syntactic symbols currently defined, and their meanings.  You
+ should not change this variable directly; use the supplied interface
+ commands c-set-offset and c-set-style.
+ c-mode-common-hook is run by both c-mode and c++-mode during their
+ common initializations.  You should put any customizations that are
+ the same for both C and C++ into this hook.
+ The variable c-strict-semantics-p is used mainly for debugging.  When
+ non-nil, CC mode signals an error if it returns a syntactic symbol
+ that can't be found in c-offsets-alist.
+ If you want CC mode to echo the syntactic analysis for a particular
+ line when you hit the TAB key, set c-echo-semantic-information-p to
+ non-nil.
+ c-basic-offset controls the standard amount of offset for a level of
+ indentation.  You can set a syntactic symbol's offset to + or - as a
+ short-hand for positive or negative c-basic-offset.
+ c-comment-only-line-offset lets you control indentation given to lines
+ which contain only a comment, in the case of C++ line style comments,
+ or the introduction to a C block comment.  Comment-only lines at
+ column zero can be anchored there independent of the indentation given
+ to other comment-only lines.
+ c-block-comments-indent-p controls the style of C block comment
+ re-indentation.  If you put leading stars in front of comment
+ continuation lines, you should set this variable to nil.
+ c-cleanup-list is a list describing certain C and C++ constructs to be
+ "cleaned up" as they are typed, but only when the auto-newline feature
+ is turned on.  In C++, make sure this variable contains at least
+ 'scope-operator so that double colons will not be separated by a
+ newline.
+ Colons (`:') and braces (`{` and `}') are special in C and C++.  For
+ certain constructs, you may like them to hang on the right edge of the
+ code, or you may like them to start a new line of code.  You can use
+ the two variables c-hanging-braces-alist and c-hanging-colons-alist
+ to control whether newlines are placed before and/or after colons and
+ braces when certain C and C++ constructs are entered.  For example,
+ you can control whether the colon that introduces a C++ member
+ initialization list hangs on the right edge, starts a new line, or has
+ no newlines either before or after it.
+ c-special-indent-hook is run after a line is indented by CC mode.  You
+ can perform any custom indentations here.
+ c-delete-function is the function that is called when a single
+ character is deleted with the c-electric-delete command (DEL).
+ c-electric-pound-behavior describes what happens when you enter the
+ `#' that introduces a cpp macro.
+ If c-tab-always-indent is neither t nor nil, then TAB inserts a tab
+ when within strings, comments, and cpp directives, but it reindents
+ the line unconditionally.
+ c-inhibit-startup-warnings-p inhibits warnings about any old
+ version of Emacs you might be running, which could be incompatible
+ with cc-mode.
+ ** There are two new minor-mode features in CC mode: auto-newline and
+ hungry-delete.  Auto-newline inserts newlines automatically as you
+ type certain constructs.  Hungry-delete consumes all preceding
+ whitespace (spaces, tabs, and newlines) when the delete key is hit.
+ You can toggle auto-newline on and off on a per-buffer basis by
+ hitting C-c C-a.  You can toggle hungry-delete on and off by hitting
+ C-c C-d.   You can toggle them both on and off together with C-c C-t.
+ ** Slash (`/') and star (`*') are now both electric characters.
+ ** New commands:
+ The new C-c C-o (c-set-offset) command can be used to interactively change
+ the offset for a particular syntactic symbol.
+ The new command C-c : (c-scope-operator) inserts the C++ scope operator in
+ c++-mode only.
+ The new command C-c C-q (c-indent-defun) indents the entire enclosing
+ top-level function or class.
+ The new command C-c C-s (c-show-semantic-information) echos the current
+ syntactic analysis without re-indenting the current line.
+ The new commands M-x c-forward-into-nomenclature and M-x
+ c-backward-into-nomenclature (currently otherwise unbound to a key
+ sequence), make movement easier when using the C++ variable naming
+ convention of VariableNamesWithoutUnderscoresButEachWordCapitalized.
+ ** Command from c-mode.el that have been renamed in cc-mode.el:
+   electric-c-brace      => c-electric-brace
+   electric-c-semi       => c-electric-semi&comma
+   electric-c-sharp-sign => c-electric-pound
+   mark-c-function       => c-mark-function
+   electric-c-terminator => c-electric-colon
+   indent-c-exp          => c-indent-exp
+   set-c-style           => c-set-style
+ ** Variables from c-mode.el that are obsolete with cc-mode.el:
+   c-indent-level
+   c-brace-imaginary-offset
+   c-brace-offset
+   c-argdecl-indent
+   c-label-offset
+   c-continued-statement-offset
+   c-continued-brace-offset
\f
+ * Lisp programming changes in Emacs 19.23.
+ ** To pop up a dialog box, call x-popup-dialog.
+ It takes two arguments, POSITION and CONTENTS.
+ POSITION specifies which frame to place the dialog box over;
+ the dialog box always goes on the center of the frame.
+ POSITION may be a mouse event, a window, a frame,
+ or t meaning use the frame that the mouse is in.
+ CONTENTS specifies the contents of the dialog box.
+ It looks like a single pane of a popup menu:
+ (TITLE ITEM1 ITEM2 ...), where each ITEM has the form (STRING . VALUE).
+ The return value is VALUE from the chosen item.
+ An ITEM may also be just a string--that makes a nonselectable item.
+ An ITEM may also be nil--that means to put all preceding items
+ on the left of the dialog box and all following items on the right.
+ (By default, approximately half appear on each side.)
+ If your Emacs is not using an X toolkit, then it cannot display a
+ real dialog box; so instead it displays a pop-up menu in the center
+ of the frame.
+ ** y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes
+ to ask their question(s) if the command that is running was reached by
+ a mouse event.
+ If you want to control which way these functions work, bind the
+ variable last-nonmenu-event around the call.  These functions use the
+ keyboard if that variable holds a keyboard event (actually, any
+ non-list); they use the mouse if that variable holds a mouse event
+ (actually, any list).
+ ** The mouse-face property is now implemented, both in overlays and as
+ a text property.  It specifies a face to use when the mouse is in the
+ range of text for which the property is specified.
+ ** When text has a non-nil `intangible' property, you cannot move point
+ within it or right before it.  If you try, point actually moves to the
+ end of the intangible text.  Note that this means that backward-char
+ is a no-op when there is an intangible character to the left of point.
+ ** minibuffer-exit-hook is a new normal hook that is run when you
+ exit the minibuffer.
+ ** The variable x-cross-pointer-shape specifies the cursor shape to use
+ when the mouse is over text that has a mouse-face property.
+ ** The new variable interpreter-mode-alist specifies major modes to use
+ for shell scripts that specify a command interpreter.  Its elements
+ look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is
+ one element present by default.  This feature applies only when the
+ file name doesn't indicate which mode to use.
+ ** If you use a minibuffer-only frame, set the variable
+ minibuffer-auto-raise to t, and entering the minibuffer will then
+ raise the minibuffer frame.
+ ** If pop-up-frames is t, display-buffer now looks for an existing
+ window in any visible frame, showing the specified buffer, and uses
+ such a window in preference to making a new frame.
+ ** In the functions next-window, previous-window, next-frame,
+ previous-frame, get-buffer-window, get-lru-window, get-largest-window
+ and delete-windows-on, if you specify `visible' for the last argument,
+ it means to consider all visible frames.
+ ** Mouse events now give the X and Y coordinates in pixels, rather than
+ in characters.  You can convert these values to characters by dividing by
+ the values of (frame-char-width) and (frame-char-height).
+ ** The new functions mouse-pixel-position and set-mouse-pixel-position
+ read and set the mouse position in units of pixels.  The existing
+ functions mouse-position and set-mouse-position continue to work with
+ units of characters.
+ ** The new function compute-motion is useful for computing the width
+ of certain text when it is displayed.
+ ** The function vertical-motion now takes an option second argument WINDOW
+ which says which window to use for the display calculations.
+ vertical-motion always operates on the current buffer.
+ It is ok to specify a window displaying some other buffer.
+ Then vertical-motion uses the width, hscroll and display-table of
+ the specified window, but still scans the current buffer.
+ ** An error no longer sets last-command to t; the value of last-command
+ does reflect the previous command (the one that got an error).
+ If you do not want a particular command to be recognized as the
+ previous command in the case where it got an error, you must code that
+ command to prevent this.  Set this-command to t at the beginning of
+ the command, and set this-command back to its proper value at the end,
+ like this:
+   (defun foo (args...)
+     (interactive ...)
+     (setq this-command t)
+     ...do the work...
+     (setq this-command 'foo))
+ or like this:
+   (defun foo (args...)
+     (interactive ...)
+     (let ((old-this-command this-command))
+       (setq this-command t)
+       ...do the work...
+       (setq this-command old-this-command)))
+ The undo and yank commands do this.
+ ** If you specify an explicit title for a new frame when you create it,
+ the title is used as the resource name when looking up X resources to
+ control the shape of that frame.  If you don't specify the frame title,
+ the value of x-resource-name is used, as before.
+ ** The frame parameter user-position, if non-nil, says that the user
+ has specified the frame position.  Emacs reports this to the window
+ manager, to tell it not to override the position that the user
+ specified.
+ ** Major modes can now set change-major-mode-hook to arrange for state
+ to be cleaned up when the user switches to a new major mode.  The function
+ kill-all-local-variables runs this hook.  For best results, make the hook a
+ buffer-local variable so that it will disappear after doing its job and will
+ not interfere with the subsequent major mode.
+ ** The new variable overriding-local-map, if non-nil, specifies a keymap
+ that overrides the current local map, all minor mode keymaps, and all
+ text property keymaps.  Incremental search uses this feature to override
+ all other keymaps temporarily.
+ ** A key definition in a menu keymap can now have additional structure:
+ in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed
+ before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is
+ allowed.  (HELPSTRING is optional, and is not currently used.)
+ Here (...) represents a sublist containing information about keyboard
+ key sequences that run the same command COMMAND.  Displaying the menu
+ automatically creates and updates the sublist when appropriate; you
+ need never set these up yourself.
+ lookup-key, key-binding, and similar functions return just COMMAND,
+ not the whole binding.
+ To precompute this information for a given keymap, you can do
+   (x-popup-menu nil KEYMAP).
+ ** When you specify coordinates for x-popup-menu as a list ((XOFFSET
+ YOFFSET) WINDOW), the coordinates are now measured in pixels.
+ ** where-is-internal now takes just four arguments:
+ DEFINITION KEYMAP FIRSTONLY NOINDIRECT.
+ The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1.
+ If KEYMAP is non-nil, where-is-internal searches only KEYMAP and the
+ global keymap.
+ If KEYMAP is nil, where-is-internal searches all the currently active
+ keymaps, but finds the active keymaps as if overriding-local-map were
+ nil.
+ If you pass a list of the form (keymap) as KEYMAP, where-is-internal
+ searches only the global map.  (This is not a special case--it follows
+ from the specifications above.)
+ If you pass the value of overriding-local-map as KEYMAP, where-is-internal
+ searches in exactly the same was as command execution does.
+ ** Use the macro define-derived-mode to define a new major mode that
+ inherits the definition of another major mode.  Here's how to define a
+ command named hypertext-mode that inherits from the command text-mode:
+     (define-derived-mode hypertext-mode text-mode "Hypertext"
+       "Major mode for hypertext.\n\n\\{hypertext-mode-map}"
+       (setq case-fold-search nil))
+     (define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link)
+ The new mode has its own keymap, which inherits from that of the
+ original mode.  It also has its own syntax and abbrev tables, which
+ are initialized by copying those of the original mode.  It also has
+ its own mode hook.  All are given names made by appending a suffix
+ to the name of the new mode.
+ ** A syntax table can now inherit the data for some characters from
+ standard-syntax-table, while specifying other characters itself.
+ Syntax code 13 means "inherit this character from the standard syntax
+ table."  In modify-syntax-entry, the character `@' represents this code.
+ The function `make-syntax-table' now creates a syntax table which
+ inherits all letters and control characters (0 to 31 and 128 to 255)
+ from the standard syntax table, while copying the other characters
+ from the standard syntax table.  Most syntax tables in Emacs are set
+ up this way.
+ This sort of inheritance is useful for people who set up character
+ sets with additional alphabetic characters in the range 128 to 255.
+ Just changing the standard syntax for these characters affects all
+ major modes.
+ ** The new function transpose-regions swaps two regions of the buffer.
+ It preserves the markers in those two regions, so that they stay with
+ the surrounding text as it is swapped.
+ ** revert-buffer now runs before-revert-hook at the beginning and
+ after-revert-hook at the end.  These can be used by minor modes
+ that need to clean up state variables.
+ ** The new function get-char-property is like get-text-property, but
+ checks for overlays with properties as well as for text properties.
+ It checks for overlays first, in order of descending priority, and
+ text properties last.
+ get-char-property allows windows as the OBJECT argument, as well
+ as buffers and strings.  If you specify a window, then only overlays
+ active on that window are considered.
+ ** Overlays can have the `invisible' property.
+ ** The function insert-file-contents now takes an optional fifth
+ argument called REPLACE.  If this is t, it means to replace the
+ contents of the buffer (actually, just the accessible portion)
+ with the contents of the file.
+ This is better than simply deleting and inserting the whole thing
+ because (1) it preserves some marker positions and (2) it puts less
+ data in the undo list.
+ ** The variable inhibit-first-line-modes-regexps specifies classes of
+ file names for which -*- on the first line should not be looked for.
+ ** The variables before-change-functions and after-change-functions
+ hold lists of functions to call before and after a change in the
+ buffer's text.  They work much like before-change-function and
+ after-change-function, except that they hold a list of functions
+ instead of just one.
+ These variables will eventually make before-change-function and
+ after-change-function obsolete.
+ ** The variable kill-buffer-query-functions holds a list of functions
+ to be called with no arguments when a buffer is about to be killed.
+ (That buffer is the current buffer when the function is called.)
+ If any of the functions returns nil, the buffer is not killed
+ (and the remaining functions in the list are not called).
+ ** The variable kill-emacs-query-functions holds a list of functions
+ to be called with no arguments when you ask to exit Emacs.
+ If any of the functions returns nil, the exit is canceled
+ (and the remaining functions in the list are not called).
+ ** The argument for buffer-disable-undo is now optional,
+ like the argument for buffer-enable-undo.
+ ** The new variable system-configuration holds the canonical three-part
+ GNU configuration name for which Emacs was built.
+ ** The function system-name now tries harder to return a fully qualified
+ domain name.
+ ** The variable emacs-major-version holds the major version number
+ of Emacs.  (Currently 19.)
+ ** The variable emacs-minor-version holds the minor version number
+ of Emacs.  (Currently 23.)
+ ** The default value of comint-input-autoexpand is now nil.
+ However, Shell mode sets it from the value of shell-input-autoexpand,
+ whose default value is `history'.
+ ** The new function set-process-window-size specifies the terminal window
+ size for a subprocess.  On some systems it sends the subprocess a signal
+ to let it know that the size has changed.
+ ** %P is a new way to display a percentage in the mode line.  It
+ displays the percentage of the buffer text that is above the *bottom*
+ of the window (which includes the text visible, in the window as well
+ as the text above the top).  It displays `Top' as well as the
+ percentage if the top of the buffer is visible on screen.
+ ** %+ in the mode line specs displays `*' if the buffer is modified,
+ and otherwise `-'.  It never displays `%', as `%*' would do; whether the
+ buffer is read-only has no effect on %+.
+ ** The new functions ffloor, fceiling, fround and ftruncate take a
+ floating point argument and return a floating point result whose value
+ is a nearby integer.  ffloor returns the nearest integer below; fceiling,
+ the nearest integer above; ftruncate, the nearest integer in the
+ direction towards zero; fround, the nearest integer.
+ ** Setting `print-escape-newlines' to a non-nil value now also makes
+ formfeeds print as ``\f''.
+ ** auto-mode-alist now has a new feature.  If an element has the form
+ (REGEXP FUNCTION t), and REGEXP matches the file name, then after calling
+ FUNCTION, Emacs deletes the part of the file name that matched REGEXP
+ and then searches auto-mode-alist again for a new match.
+ This is useful for uncompression packages.  An entry of this sort for
+ .gz can uncompress the file and then put the uncompressed file in the
+ proper mode according to the name sans .gz.
+ ** The new function emacs-pid returns the process ID number of Emacs.
+ ** user-login-name now consistently checks the LOGNAME environment
+ variable before USER.  user-original-login-name is obsolete, since it
+ provides the same functionality.  To ignore the environment variables,
+ use user-real-login-name.
+ ** There is a more general way of handling the system-specific X
+ keysyms.  Set the variable system-key-alist to an alist containing
+ elements of the form (CODE . SYMBOL), where CODE is the numeric keysym
+ code minus the "vendor specific" bit, and symbol is the name for the
+ function key.
+ ** You can use the variable command-line-functions to set up functions
+ to process unrecognized command line arguments.  The variable's value
+ should be a list of functions of no arguments.  The functions are
+ called successively until one of them returns non-nil.
+ Each function should access the free variables argi (the current
+ argument) and command-line-args-left (the remaining arguments).  The
+ function should return non-nil only if it recognizes and processes the
+ argument in argi.  If it does so, it may consume following arguments
+ as well by removing them from command-line-args-left.
+ ** There's a new way for a magic file name handler to run a primitive
+ and inhibit handling of the file name.  Here is how to do it:
+ (let ((inhibit-file-name-handlers
+        (cons 'ange-ftp-file-handler
+              (and (eq inhibit-file-name-operation operation)
+                       inhibit-file-name-handlers)))
+       (inhibit-file-name-operation operation))
+   (apply this-operation args))
+ The function find-file-name-handler now takes two arguments.  The
+ second argument is OPERATION, the operation for which the handler is
+ being sought.
+ People have suggested that the second argument should be optional, for
+ backward compatibility.  It would be nice if that were possible, but
+ it is not.  There is simply no way for find-file-name-handler to do
+ the right thing without receiving the proper value for its second
+ argument.
+ ** The variable completion-regexp-list affects the completion
+ primitives try-completion and all-completions.  They consider
+ only the possible completions that match each regexp in the list.
+ ** Case conversion in the function replace-match has been changed.
+ The old behavior was this: if any word in the old text was
+ capitalized, replace-match capitalized each word of the replacement
+ text.
+ The new behavior is this: if the first word in the old text is capitalized,
+ replace-match capitalizes the first word of the replacement text.
+ ** You can now specify a case table with CANON non-nil and EQV nil.
+ Then the EQV part of the case table is deduced from CANON.
+ ** The new function minibuffer-prompt takes no arguments and returns
+ the current minibuffer prompt string.
+ The new function minibuffer-prompt-width takes no arguments and
+ returns the display width of the minibuffer prompt string.
+ ** The new function frame-first-window returns the window at the
+ upper left corner of a given frame.
+ ** wholenump is a new alias for natnump.
+ ** The variable installation-directory, if non-@code{nil}, names a
+ directory within which to look for the `lib-src' and `etc'
+ subdirectories.  This is non-nil when Emacs can't find those
+ directories in their standard installed locations, but can find them
+ near where the Emacs executable was found.
+ ** invocation-name and invocation-directory are now variables as well
+ as functions.  The variable values are the same values that the
+ functions return: the Emacs program name sans directories, and the
+ directory it was found in.  (invocation-directory may be nil, if Emacs
+ can't determine which directory it should be.)
+ ** Installation change regarding version number counting.
+ The version number of an Emacs executable contains three numbers.
+ The first two describe the Emacs release and the third increments
+ each time you build Emacs.
+ Now the file version.el contains only the first two version numbers.
+ The third component is now determined on the basis of the names of the
+ existing executable files.  This means that version.el is not altered
+ by building Emacs.
\f
+ * Changes in 19.22.
+ ** The mouse click M-mouse-2 now inserts the current secondary
+ selection (from Emacs or any other X client) where you click.
+ It does not move point.
+ This command is called mouse-yank-secondary.
+ mouse-kill-secondary no longer has a key binding by default.
+ Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice
+ may be a convenient enough way of killing the secondary selection.
+ Or perhaps there should be a keyboard binding for killing the
+ secondary selection.  Any suggestions?
+ ** New packages:
+ *** `icomplete' provides character-by-character information
+ about what you could complete if you type TAB.
+ *** `avoid' moves the mouse away from point so that it doesn't hide
+ your typing.
+ *** `shadowfile' helps you update files that are supposed to be stored
+ identically in different places (perhaps on different machines).
+ ** C-h p now knows about four additional keywords: data, faces, mouse,
+ and matching.
+ ** The key for starting an inferior Lisp process, in Lisp mode,
+ is now C-c C-z instead of C-c C-l.
+ ** When the VC commands ask whether to save the buffer, if you say no,
+ they signal an error.  This is so that you won't operate on the wrong
+ data.
+ ** ISO Accents mode now supports `"s' as a way of typing German sharp s.
+ ** By default, comint buffers (including Shell mode and debuggers)
+ no longer try to scroll to keep the cursor on the bottom line.
+ This feature was added in 19.21 but did not work smoothly enough.
+ ** Emacs now handles the window manager "delete window" operation.
+ ** Display of buffers with text properties is much faster now.
+ ** The feature previously announced whereby `insert' does not inherit
+ text properties from surrounding text was not fully implemented
+ before; but now it is.  use `insert-and-inherit' if you wish to
+ inherit sticky properties from the surrounding text.
+ ** The functions next-property-change, previous-property-change,
+ next-single-property-change, and previous-single-property-change
+ now take one additional optional argument LIMIT that is a position at
+ which to stop scanning.  If scan ends without finding the property
+ change sought, these functions return the specified limit.
+ The value returned by previous-single-property-change and
+ previous-property-change, when they do find a change, is now one
+ greater than what it used to be.  It is the position between the two
+ characters whose properties differ, which is one greater than the
+ position of the first character found (while scanning back) with
+ different properties.
\f
+ * User editing changes in version 19.21.
+ ** ISO Accents mode supports four additional characters:
+ A-with-ring (entered as /A), AE ligature (entered as /E),
+ and their lower-case equivalents.
\f
+ * User editing changes in version 19.20.
+ (See following page for Lisp programming changes.)
+ Note that some of these changes were made subsequent to the Emacs 19.20
+ editions of the Emacs manual and Emacs Lisp manual; therefore, if you
+ have those editions, do read this page.
+ ** Dragging with mouse button 1 now puts the selected region
+ in the kill ring so you can paste it into other X applications.
+ ** Double and triple clicks with button 1 now behave as in xterm,
+ selecting the word or line surrounding where you click.  If you drag
+ after the last click, you can select a range of words or lines.
+ ** You can use button 3 to extend a mouse-selected region, as in xterm.
+ This works for regions selected either by dragging Mouse-1 or by
+ multiple-clicking Mouse-1.  Clicking Mouse-3 moves the end of the
+ region that is (initially) nearer to where you click.
+ If the selection was first made by multiple-clicking Mouse-1, and thus
+ consists of entire words or lines, Mouse-3 preserves that state.
+ As before, clicking Mouse-3 again in the same place kills the region
+ thus selected.
+ ** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been
+ likewise modified.
+ ** You can now search for strings and regexps using the Edit menu bar menu.
+ ** You can now access bookmarks using the Bookmark submenu in the File
+ menu in the menu bar.
+ ** ISO Accents mode, a buffer-local minor mode, provides a convenient
+ way to type certain non-ASCII characters.  It makes the characters `,
+ ', ", ^, ~ and / serve as modifiers for the following letter.  ` and '
+ add accents, " adds an umlaut or dieresis, ^ adds a circumflex, ~
+ adds a tilde, and / adds a slash to the following letter.
+ If the following character is not a letter, or cannot be modified as
+ requested, then both characters stand for themselves.  If you
+ duplicate the modifier accent character, that enters the corresponding
+ ISO non-spacing accent character (thus, '' enters the ISO acute-accent
+ character).  To enter a modifier character itself, type it followed by
+ a space.
+ This feature can be used whenever a key sequence is expected: for
+ ordinary insertion, for searching, and for certain command arguments.
+ A few special combinations:
+ ~c => c with cedilla
+ ~d => d with stroke
+ ~< => left guillemot
+ ~> => right guillemot
+ ** iso-transl.el is a new library that replaces iso-insert.el.
+ It defines C-x 8 as an insertion prefix for the ISO characters
+ between 128 and 255, much like iso-insert, except that iso-transl
+ works even in searches and help commands--wherever a key sequence
+ is expected.
+ To define case-conversion for these characters for ISO 8859/1,
+ load the library iso-syntax.  (This is not new.)
+ ** M-TAB in Text mode now runs the command ispell-complete-word
+ which performs completion using the spelling dictionary.
+ The spelling correction submenu now includes this command
+ and another command which completes a word fragment (that is,
+ it doesn't assume that the text to be completed starts at the
+ beginning of a word.
+ ** In incremental search, you can use M-y to yank the most recent kill
+ into the search string.
+ ** The new function ispell-message checks the spelling of a message
+ you are about to send or post.  It ignores text cited from other
+ messages.
+ To automatically check all your outgoing messages, include the
+ following line in your .emacs file:
+   (setq news-inews-hook (setq mail-send-hook 'ispell-message))
+ ** There is now a separate minibuffer history list for the names of
+ extended commands.  This history list is used by M-x when reading
+ the command name.  The motivation for this is to prevent command
+ names from appearing in the history used for other minibuffer
+ arguments.
+ Note that the history list for entire commands that use the minibuffer
+ is a separate feature.  That history list records a command with all
+ its arguments, and you must use C-x ESC ESC to access it.
+ ** You can use the new command C-x v ~ VERSION RET to examine a
+ specified version of a file that is maintained with version control.
+ ** In Indented Text mode, only blank lines now separate paragraphs.
+ Indented lines continue the paragraph that is in progress.  This makes
+ the user option variable adaptive-fill-mode have its intended effect.
+ ** Local variable specifications in files for variables whose names end
+ in `-hook' and `-function' are now controlled by the variable
+ `enable-local-eval', just like the `eval' variable.
+ ** C-x r j (jump-to-register) when restoring a frame configuration now
+ makes all unwanted frames (existing frames not mentioned in the
+ configuration) invisible.
+ If you want to delete these unwanted frames, use a prefix argument for
+ C-x r j.
+ ** You can customize the calendar to display weeks beginning on
+ Monday: set the variable `calendar-week-start-day' to 1.
+ ** Rmail changes.
+ If you save messages to a file in Unix format while viewing a message
+ with its whole header, this now copies to the file the entire header
+ of each message copied.
+ ** Comint mode changes.
+ C-c C-e shows as much output as possible in the window.
+ C-c RET copies an old input (the one at point)
+ and places the copy after the latest prompt.
+ C-c C-p and C-c C-n move through the buffer, stopping at places
+ where the subshell prompted for input.
+ C-c C-h lists the input history in a `*Help*' buffer.
+ There are new menu bar items for completion/input/output/signal commands.
+ Input behavior is configurable.  Variables control whether some windows
+ showing the buffer scroll to the bottom before insertion.  These are
+ `comint-scroll-to-bottom-on-input' and `before-change-function'.  By default,
+ insertion causes the selected window to scroll to the bottom before insertion
+ occurs.
+ Subprocess output now keeps point at the end of the buffer in each
+ window individually if point was already at the end of the buffer in
+ that window.
+ If `comint-scroll-show-maximum-output' is non-nil (which is the
+ default), then scrolling due to arrival of output tries to place the
+ last line of text at the bottom line of the window, so as to show as
+ much useful text as possible.  (This mimics the scrolling behavior of
+ many terminals.)
+ By setting `comint-scroll-to-bottom-on-output', you can opt for having
+ point jump to the end of the buffer whenever output arrives--no matter
+ where in the buffer point was before.  If the value is `this', point
+ jumps in the selected window.  If the value is `all', point jumps in
+ each window that shows the comint buffer.  If the value is `other',
+ point jumps in all nonselected windows that show the current buffer.
+ The default value is nil, which means point does not jump to the end.
+ Input history insertion is configurable.  A variable controls whether only the
+ first instance of successive identical inputs is stored in the input history.
+ This is `comint-input-ignoredups'.
+ Completion (bound to TAB) is now more general.  Depending on context,
+ completion now operates on the input history, on command names, or (as
+ before) on filenames.
+ Filename completion is configurable.  Variables control whether
+ file/directory suffix characters are added (`comint-completion-addsuffix'),
+ whether shortest completion is acceptable when no further unambiguous
+ completion is possible (`comint-completion-recexact'), and the timing of
+ completion candidate listing (`comint-completion-autolist').
+ Comint mode now provides history expansion.  Insert input using `!'
+ and `^', in the same syntax that typical shells use; then type TAB.
+ This searches the comint input history for a matching element,
+ performs substitution if necessary, and places the result in the
+ comint buffer in place of the original input.
+ History references in the input may be expanded before insertion into
+ the input ring, or on input to the interpreter (and therefore
+ visibly).  The variable `comint-input-autoexpand' specifies which.
+ You can make the SPC key perform history expansion by binding
+ SPC to the command `comint-magic-space'.
+ The command `comint-dynamic-complete-variable' does variable name
+ completion using the environment variables as set within Emacs.  The
+ variables controlling filename completion apply to variable name
+ completion too.  This command is normally available through the menu
+ bar.
+ ** Shell mode
+ Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate
+ on output groups (i.e., shell prompt plus associated shell output).
+ TAB now completes commands, as well as file names and expand history.
+ Commands are searched for along the path that Emacs has on startup.
+ C-c C-f now moves forward a command (`shell-forward-command') and
+ C-c C-b now moves backward a command (`shell-backward-command').
+ Command completion is configurable.  The variables controlling
+ filename completion in comint mode apply, together with a variable
+ controlling whether to restrict possible completions to only files
+ that are executable (`shell-command-execonly').
+ The input history is initialised from the file name given in the
+ variable `shell-input-ring-file-name'--normally `.history' in your
+ home directory.
+ Directory tracking is more robust.  It can cope with command sequences
+ and forked commands, and can detect the failure of directory changing
+ commands in most circumstances.  It's still not infallible, of course.
+ You can now configure the behavior of `pushd'.  Variables control
+ whether `pushd' behaves like `cd' if no argument is given
+ (`shell-pushd-tohome'), pop rather than rotate with a numeric argument
+ (`shell-pushd-dextract'), and only add directories to the directory
+ stack if they are not already on it (`shell-pushd-dunique').  The
+ configuration you choose should match the underlying shell, of course.
\f
+ * Emacs Lisp programming changes in Emacs 19.20.
+ ** A new function `remove-hook' is now used to remove a hook that you might
+ have added with `add-hook'.
+ ** There is now a Lisp pretty-printer in the library `pp'.
+ ** The partial Common Lisp support has been entirely reimplemented.
+ ** When you insert text using `insert', `insert-before-markers' or
+ `insert-buffer-substring', text properties are no longer inherited
+ from the surrounding text.
+ When you want to inherit text properties, use the new functions
+ `insert-and-inherit' or `insert-before-markers-and-inherit'.
+ The self-inserting character command does do inheritance.
+ ** Frame creation hooks.
+ The function make-frame now runs the normal hooks
+ before-make-frame-hook and after-make-frame-hook.
+ ** You can now use function-key-map to make a key an alias for other
+ key sequences that can vary depending on circumstances.  To do this,
+ give the key a definition in function-key-map which is a function
+ rather than a specific expansion key sequence.
+ If the function reads input itself, it can have the effect of altering
+ the event that follows.  For example, here's how to define C-c h to
+ turn the character that follows into a hyper character:
+ (define-key function-key-map "\C-ch" 'hyperify)
+ (defun hyperify (prompt)
+   (let ((e (read-event)))
+     (vector (if (numberp e)
+               (logior (lsh 1 20) e)
+             (if (memq 'hyper (event-modifiers e))
+                 e
+               (add-event-modifier "H-" e))))))
+ (defun add-event-modifier (string e)
+   (let ((symbol (if (symbolp e) e (car e))))
+     (setq symbol (intern (concat string (symbol-name symbol))))
+     (if (symbolp e)
+       symbol
+       (cons symbol (cdr e)))))
+ The character translation function gets one argument, which is the
+ prompt that was specified in read-key-sequence--or nil if the key
+ sequence is being read by the editor command loop.  In most cases
+ you can just ignore the prompt value.
+ ** Changes for reading and writing text properties.
+ New low-level Lisp features make it possible to write Lisp programs to
+ save text properties in files, and read text properties from files.
+ You can program any file format you like.
+ The variable `write-region-annotation-functions' should contain a list
+ of functions to be run by `write-region' to encode text properties in
+ some fashion as annotations to the text that is written.
+ Each function in the list is called with two arguments: the start and
+ end of the region to be written.  These functions should not alter the
+ contents of the buffer.  Instead, they should return lists indicating
+ annotations to write in the file in addition to the text in the
+ buffer.
+ Each function should return a list of elements of the form (POSITION
+ . STRING), where POSITION is an integer specifying the relative
+ position in the text to be written, and STRING is the annotation to
+ add there.
+ Each list returned by one of these functions must be already sorted in
+ increasing order by POSITION.  If there is more than one function,
+ `write-region' merges the lists destructively into one sorted list.
+ When `write-region' actually writes the text from the buffer to the
+ file, it intermixes the specified annotations at the corresponding
+ positions.  All this takes place without modifying the buffer.
+ The variable `after-insert-file-functions' should contain a list of
+ functions to be run each time a file's contents have been inserted into
+ a buffer.  Each function receives one argument, the length of the
+ inserted text; point indicates the start of that text.  The function
+ should make whatever changes it wants to make, then return the updated
+ length of the inserted text, as it stands after those changes.  The
+ value returned by one function is used as the argument to the next.
+ These functions should always return with point at the beginning of
+ the inserted text.
+ The intended use of `after-insert-file-functions' is for converting
+ some sort of textual annotations into actual text properties.  But many
+ other uses may be possible.
+ We now invite users to begin implementing Lisp programs to store and
+ retrieve text properties in files, using these new primitive features,
+ and thus to experiment with various data formats and find good ones.
+ We suggest not trying to handle arbitrary Lisp objects as property
+ names or property values--because a program that general is probably
+ difficult to write, and slow.  Instead, choose a set of possible data
+ types that are reasonably flexible, and not too hard to encode.
+ ** Comint completion.
+ Currently comint-dynamic-complete-command (and associated variable
+ comint-after-partial-pathname-command) are set by default to complete a
+ filename.  Other comint-mode users should have their own functions to achieve
+ this.  For example, gud-mode could complete debugger commands.  A completion
+ function is provided solely for this reason (comint-dynamic-simple-complete).
+ Other comint-mode users should bind comint-dynamic-complete (shell-mode does
+ already).
+ ** Comint history reference expansion
+ Currently comint-input-autoexpand is 'history, which means only expand
+ history on insertion to comint-input-ring.  For non-shell modes, this is
+ a strange default, since non-shells will not understand history references.
+ Perhaps it would be better for the variable to be 'input, which means expand
+ on RET.
+ The value 'history might possibly be wrong even for shells, since the
+ expansion will be done both by comint and the underlying shell (except sh, of
+ course).  It would be better for expansion to be done by one or the other,
+ not both since they may (ahem) disagree.  Since it is silly to put a literal
+ history reference into comint-input-ring, perhaps it would be better for the
+ variable to be 'input too.
+ The reason the variable is not 'input by default is that I was attempting to
+ adhere to The Principle of Least Astonishment.  I didn't want to shock users
+ by having their input change in front of their eyes.
+ ** Argument delimiters and Comint mode.
+ Currently comint-delimiter-argument-list is '(), which means no strings are
+ to be treated as delimiters and arguments.  In shell-mode, this variable is
+ set to shell-delimiter-argument-list, '("|" "&" "<" ">" "(" ")" ";").  Other
+ comint-mode users should set this variable too.  For example, a lisp-type
+ mode might want to set this to '("." "(" ")") or some such.
+ ** Comint output hook.
+ There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the
+ output filter, comint-output-filter.  This is useful for scrolling (see
+ below), but also things like processing output for specific text, output
+ highlighting, etc.
+ So that such output processing may be done efficiently, there is a new
+ variable, comint-last-output-start, that records the position of the start of
+ the lastest output inserted into the buffer (effectively the previous value
+ of process-mark).  Output processing functions should process the text
+ between comint-last-output-start (or perhaps the beginning of the line that
+ the position lies on) and process-mark.
+ ** Comint scrolling.
+ There is now automatic scrolling of process windows.
+ Currently comint-scroll-show-maximum-output is t, which means when scrolling
+ output put process-mark at the bottom of the window.  There is a good case
+ for it to be t, since the user is likely to want to see as much output as
+ possible.  But, then again, there is a comint-show-maximum-output command.
+ ** Comint history retrieval.
+ The input following point is not deleted when moving around the input history
+ (with M-p etc.).  Emacs maintainers may not like this.  However, I feel this
+ is a useful feature.  The simple remedy is to put end-of-line in before
+ delete-region in comint-previous-matching-input.
+ The input history retrieval commands still wrap-around the input ring, unlike
+ Emacs command history.
\f
+ * Changes in version 19.19.
+ ** The new package bookmark.el records named bookmarks: positions that
+ you can jump to.  Bookmarks are saved automatically between Emacs
+ sessions.
+ ** Another simpler package saveplace.el records your position in each
+ file when you kill its buffer (or kill Emacs), and jumps to the same
+ position when you visit the file again (even in another Emacs
+ session).  Use `toggle-save-place' to turn on place-saving in a given file;
+ use (setq-default save-place t) to turn it on for all files.
+ ** In Outline mode, you can now customize how to compute the level of a
+ heading line.  Set `outline-level' to a function of no arguments which
+ returns the level, assuming point is at the beginning of a heading
+ line.
+ ** You can now specify the prefix key to use for Outline minor mode.
+ (The default is C-c.)  Set the variable outline-minor-mode-prefix to
+ the key sequence you want to use (as a string or vector).
+ ** In Bibtex mode, C-c e has been changed to C-c C-b.  This is because
+ C-c followed by a letter is reserved for users.
+ ** The `mod' function is no longer an alias for `%', but is a separate function
+ that yields a result with the same sign as the divisor.  `floor' now takes an
+ optional second argument, which divides the first argument before the floor is
+ taken.
+ ** `%' no longer allows floating point arguments, since the results were often
+ inconsistent with integer `%'.
\f
+ * Changes in version 19.18.
+ ** Typing C-z in an iconified Emacs frame now deiconifies it.
+ ** hilit19 is a new library for automatic highlighting of parts of the
+ text in the buffer, based on its meaning and context.
+ ** Killing no longer sends the killed text to the X clipboard.
+ And large strings are not put in the cut buffer either.
+ The variable x-cut-buffer-max specifies the maximum number of characters
+ to put in the cut buffer.
+ ** The new command C-x 5 o (other-frame) selects different frames,
+ successively, in cyclic order.  It does for frames what C-x o
+ does for windows.
+ ** The command M-ESC (eval-expression) has its own command history.
+ ** The commands M-! and M-| for running shell commands have their own
+ command history.
+ ** If the directory containing the Emacs executable has a sibling named
+ `lisp', that `lisp' directory is added to the end of `load-path'
+ (provided you don't override the normal value with the EMACSLOADPATH
+ environment variable).  This feature may make it easier to move
+ an installed Emacs from place to place.
+ ** M-x validate-tex-buffer now records the locations of mismatches
+ found in the `*Occur*' buffer.  You can go to that buffer and type C-c
+ C-c to visit a particular mismatch.
+ ** There are new commands in Shell mode.
+ C-c C-n and C-c C-p move point to the next or previous shell input line.
+ C-c C-d is now another way to send an end-of-file to the subshell.
+ ** Changes to calendar/diary.
+ Time zone data is now determined automatically, including the
+ start/stop days and times of daylight savings time.  The code now
+ works correctly almost anywhere in the world.
+ The format of the holiday specifications has changed and IS NO LONGER
+ COMPATIBLE with the old (version 18) format.  See the documentation of
+ the variable calendar-holidays for details of the new, improved
+ format.
+ The hook `diary-display-hook' has been split into two:
+ diary-display-hook which should be used ONLY for the display and
+ `diary-hook' which should be used for appointment notification.  If
+ diary-display-hook is nil (the default), simple-diary-display is
+ used.  This allows the diary hooks to be correctly set with add-hook.
+ The forms used for dates in diary entries and general display are no
+ longer autoloaded, but set at load time; this means they will be set
+ correctly based on values you assign to various variables.
+ ** The functions x-rebind-key and x-rebind-keys have been deleted,
+ because you can accomplish the same job by binding keys to keyboard
+ macros.
+ ** Emacs now distinguishes double and triple drag events and double and
+ triple button-down events.  These work analogously to double and
+ triple click events.
+ Double drag events, if not defined, convert to ordinary click events.
+ Double down events, if not defined, convert first to ordinary down
+ events, which are then discarded if not defined.  Triple events that
+ are not defined convert to the corresponding double event; if that is
+ also not defined, it may convert further.
+ ** The new function event-click-count returns the number of clicks,
+ from an event which is a list.  It is 1 for an ordinary click, drag,
+ or button-down event, 2 for a double event, and 3 or more for a triple
+ event.
+ ** The new function previous-frame is like next-frame, but moves
+ around through the set of existing frames in the opposite order.
+ ** The post-command-hook now runs even after commands that get an error
+ and return to top level.  As a consequence of the same change, this
+ hook also runs before Emacs reads the first command.  That might sound
+ paradoxical, as if this hook were the same as the pre-command-hook.
+ Actually, they are not similar; the latter runs before *execution* of
+ a command, but after it has been read.
+ ** You can turn off the text property hooks that run when point moves
+ to certain places in the buffer, by binding inhibit-point-motion-hooks
+ to a non-nil value.
+ ** Inserting a string with no text properties into the buffer normally
+ inherits the properties of the preceding character.  You can now
+ control this inheritance by setting the front-sticky and
+ rear-nonsticky properties of a character.
+ If you make a character's front-sticky property t, then insertion
+ before the character inherits its properties.  If you make the
+ rear-nonsticky property t, then insertion after the character does not
+ inherit its properties.  You can regard characters as normally being
+ rear-sticky and not front-sticky, and this is why insertion normally
+ inherits from the previous character.
+ If neither side of an insertion is suitably sticky, then the inserted
+ text gets no properties.  If both sides are sticky, then the inserted
+ text gets the properties of both sides, with the previous character's
+ properties taking precedence when both sides have a property in
+ common.
+ You can also specify stickiness for individual properties.  To do so,
+ use a list of property names as the value of the front-sticky property
+ or the rear-nonsticky property.  For example, if a character has a
+ rear-nonsticky property whose value is (face read-only), then
+ insertion after the character will not inherit its face property or
+ read-only property (if any), but will inherit any other properties.
+ The merging of properties when both sides of the insertion are sticky
+ takes place one property at a time.  If the preceding character is
+ rear-sticky for the property, and the property is non-nil, it
+ dominates.  Otherwise, the following character's property value is
+ used if it is front-sticky for that property.
+ ** If you give a character a non-nil `invisible' text property, the
+ character does not appear on the screen.  This works much like
+ selective display.
+ The details of this feature are likely to change in future Emacs
+ versions.
+ ** In Info, when you go to a node, it runs the normal hook
+ Info-selection-hook.
+ ** You can use the new function `invocation-directory' to get the name
+ of the directory containing the Emacs executable that was run.
+ ** Entry to the minibuffer runs the normal hook minibuffer-setup-hook.
+ ** The new function minibuffer-window-active-p takes one argument, a
+ minibuffer window, and returns t if the window is currently active.
\f
+ * Changes in version 19.17.
+ ** When Emacs displays a list of completions in a buffer,
+ you can select a completion by clicking mouse button 2
+ on that completion.
+ ** Use the command `list-faces-display' to display a list of
+ all the currently defined faces, showing what they look like.
+ ** Menu bar items from local maps now come after the usual items.
+ ** The Help menu bar item always comes last in the menu bar.
+ ** If you enable Font-Lock mode on a buffer containing a program
+ (certain languages such as C and Lisp are supported), everything you
+ type is automatically given a face property appropriate to its
+ syntactic role.  For example, there are faces for comments, string
+ constants, names of functions being defined, and so on.
+ ** Dunnet, an adventure game, is now available.
+ ** Several major modes now have their own menu bar items,
+ including Dired, Rmail, and Sendmail.  We would like to add
+ suitable menu bar items to other major modes.
+ ** The key binding C-x a C-h has been eliminated.
+ This is because it got in the way of the general feature of typing
+ C-h after a prefix character.  If you want to run
+ inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead.
+ ** If you set the variable `rmail-mail-new-frame' to a non-nil value,
+ all the Rmail commands to send mail make a new frame to do it in.
+ When you send the message, or use the menu bar command not to send it,
+ that frame is deleted.
+ ** In Rmail, the o and C-o commands are now almost interchangeable.
+ Both commands check the format of the file you specify, and append
+ the message to it in Rmail format if it is an Rmail file, and in
+ inbox file format otherwise.  C-o and o are different only when you
+ specify a new file.
+ ** The function `copy-face' now takes an optional fourth argument
+ NEW-FRAME.  If you specify this, it copies the definition of face
+ OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME.
+ ** A local map can now cancel out one of the global map's menu items.
+ Just define that subcommand of the menu item with `undefined'
+ as the definition.  For example, this cancels out the `Buffers' item
+ for the current major mode:
+     (local-set-key [menu-bar buffer] 'undefined)
+ ** To put global items at the end of the menu bar, use the new variable
+ `menu-bar-final-items'.  It should be a list of symbols--event types
+ bound in the menu bar.  The menu bar items for these symbols are
+ moved to the end.
+ ** The list returned by `buffer-local-variables' now contains cons-cell
+ elements of the form (SYMBOL . VALUE) only for buffer-local variables
+ that have values.  For unbound buffer-local variables, the variable
+ name (symbol) appears directly as an element of the list.
+ ** The `modification-hooks' property of a character no longer affects
+ insertion; it runs only for deletion and modification of the character.
+ To detect insertion, use `insert-in-front-hooks' and
+ `insert-behind-hooks' properties.  The former runs when text is
+ inserted immediately preceding the character that has the property;
+ the latter runs when text is inserted immediately following the
+ character.
+ ** Buffer modification now runs hooks belonging to overlays as well as
+ hooks belonging to characters.  If an overlay has a
+ `modification-hooks' property, it applies to any change to text in the
+ overlay, and any insertion within the overlay.  If the overlay has a
+ `insert-in-front-hooks' property, it runs for insertion at the
+ beginning boundary of the overlay.  If the overlay has an
+ `insert-behind-hooks' property, it runs for insertion at the end
+ boundary of the overlay.
+ The values of these properties should be lists of functions.  Each
+ function is called, receiving as arguments the overlay in question,
+ followed by the bounds of the range being modified.
+ ** The new `-name NAME' option directs Emacs to search for its X
+ resources using the name `NAME', and sets the title of the initial
+ frame.  This argument was added for consistency with other X clients.
+ ** The new `-xrm DATABASE' option tells Emacs to treat the string
+ DATABASE as the text of an X resource database.  Emacs searches
+ DATABASE for resource values, in addition to the usual places.  This
+ argument was added for consistency with other X clients.
+ ** Emacs now searches for X resources in the files specified by the
+ XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment
+ variables, emulating the functionality provided by programs written
+ using Xt.  Because of this change, Emacs will now notice system-wide
+ application defaults files, as other X clients do.
+ XFILESEARCHPATH and XUSERFILESEARCHPATH should be a list of file names
+ separated by colons; XAPPLRESDIR should be a list of directory names
+ separated by colons.
+ Emacs searches for X resources
+   + specified on the command line, with the `-xrm RESOURCESTRING'
+     option,
+   + then in the value of the XENVIRONMENT environment variable,
+     - or if that is unset, in the file named ~/.Xdefaults-HOSTNAME if it exists
+       (where HOSTNAME is the hostname of the machine Emacs is running on),
+   + then in the screen-specific and server-wide resource properties
+     provided by the server,
+     - or if those properties are unset, in the file named ~/.Xdefaults
+       if it exists,
+   + then in the files listed in XUSERFILESEARCHPATH,
+     - or in files named LANG/Emacs in directories listed in XAPPLRESDIR
+       (where LANG is the value of the LANG environment variable), if
+       the LANG environment variable is set,
+     - or in files named Emacs in the directories listed in XAPPLRESDIR
+     - or in ~/LANG/Emacs (if the LANG environment variable is set),
+     - or in ~/Emacs,
+   + then in the files listed in XFILESEARCHPATH.
+ The paths in the variables XFILESEARCHPATH, XUSERFILESEARCHPATH, and
+ XAPPLRESDIR may contain %-escapes (like the control strings passed to
+ the Emacs lisp `format' function or C printf function), which Emacs expands.
+ %N is replaced by the string "Emacs" wherever it occurs.
+ %T is replaced by "app-defaults" wherever it occurs.
+ %S is replaced by the empty string wherever it occurs.
+ %L and %l are replaced by the value of the LANG environment variable; if LANG
+    is not set, Emacs does not use that directory or file name at all.
+ %C is replaced by the value of the resource named "customization"
+    (class "Customization"), as retrieved from the server's resource
+    properties or the user's ~/.Xdefaults file, or the empty string if
+    that resource doesn't exist.
+ So, for example,
+   if XFILESEARCHPATH is set to the value
+     "/usr/lib/X11/%L/%T/%N%C:/usr/lib/X11/%T/%N%C:/usr/lib/X11/%T/%N",
+   and the LANG environment variable is set to
+     "english",
+   and the customization resource is the string
+     "-color",
+ then, in the last step of the process described above, Emacs checks
+ for resources in the first of the following files that is present and
+ readable:
+       /usr/lib/X11/english/app-defaults/Emacs-color
+       /usr/lib/X11/app-defaults/Emacs-color
+       /usr/lib/X11/app-defaults/Emacs
+ If the LANG environment variable is not set, then Emacs never uses the
+ first element of the path, "/usr/lib/X11/%L/%T/%N%C", because it
+ contains the %L escape.
+ If XFILESEARCHPATH is unset, Emacs uses the default value
+ "/usr/lib/X11/%L/app-defaults/Emacs%C:\
+ /usr/lib/X11/app-defaults/Emacs%C:\
+ /usr/lib/X11/%L/app-defaults/Emacs:\
+ /usr/lib/X11/app-defaults/Emacs"
+ This feature was added for consistency with other X applications.
+ ** The new function `text-property-any' scans the region of text from
+ START to END to see if any character's property PROP is `eq' to
+ VALUE.  If so, it returns the position of the first such character.
+ Otherwise, it returns nil.
+ The optional fifth argument, OBJECT, specifies the string or buffer to
+ be examined.
+ ** The new function `text-property-not-all' scans the region of text from
+ START to END to see if any character's property PROP is not `eq' to
+ VALUE.  If so, it returns the position of the first such character.
+ Otherwise, it returns nil.
+ The optional fifth argument, OBJECT, specifies the string or buffer to
+ be examined.
+ ** The function `delete-windows-on' now takes an optional second
+ argument FRAME, which specifies which frames it should affect.
+   + If FRAME is nil or omitted, then `delete-windows-on' deletes windows
+     showing BUFFER (its first argument) on all frames.
+   + If FRAME is t, then `delete-windows-on' only deletes windows on the
+     selected frame; other frames are unaffected.
+   + If FRAME is a frame, then `delete-windows-on' only deletes windows on
+     the given frame; other frames are unaffected.
\f
+ * Changes in version 19.16.
+ ** When dragging the mouse to select a region, Emacs now highlights the
+ region as you drag (if Transient Mark mode is enabled).  If you
+ continue the drag beyond the boundaries of the window, Emacs scrolls
+ the window at a steady rate until you either move the mouse back into
+ the window or release the button.
+ ** RET now exits `query-replace' and `query-replace-regexp'; this makes it
+ more consistent with the incremental search facility, which uses RET
+ to end the search.
+ ** In C mode, C-c C-u now runs c-up-conditional.
+ C-c C-n and C-c C-p now run new commands that move forward
+ and back over balanced sets of C conditionals (c-forward-conditional
+ and c-backward-conditional).
+ ** The Edit entry in the menu bar has a new alternative:
+ "Choose Next Paste".  It gives you a menu showing the various
+ strings in the kill ring; click on one to select it as the text
+ to be yanked ("pasted") the next time you yank.
+ ** If you enable Transient Mark mode and set `mark-even-if-inactive' to
+ non-nil, then the region is highlighted in a transient fashion just as
+ normally in Transient Mark mode, but the mark really remains active
+ all the time; commands that use the region can be used even if the
+ region highlighting turns off.
+ ** If you type C-h after a prefix key, it displays the bindings
+ that start with that prefix.
+ ** The VC package now searches for version control commands in the
+ directories named by the variable `vc-path'; its value should be a
+ list of strings.
+ ** If you are visiting a file that has locks registered under RCS,
+ VC now displays each lock's owner and version number in the mode line
+ after the string `RCS'.  If there are no locks, VC displays the head
+ version number.
+ ** When using X, if you load the `paren' library, Emacs automatically
+ underlines or highlights the matching paren whenever point is
+ next to the outside of a paren.  When point is before an open-paren,
+ this shows the matching close; when point is after a close-paren,
+ this shows the matching open.
+ ** The new function `define-key-after' is like `define-key',
+ but takes an extra argument AFTER.  It places the newly defined
+ binding after the binding for the event AFTER.
+ ** `accessible-keymaps' now takes an optional second argument, PREFIX.
+ If PREFIX is non-nil, it means the value should include only maps for
+ keys that start with PREFIX.
+ `describe-bindings' also accepts an optional argument PREFIX which
+ means to describe only the keys that start with PREFIX.
+ ** The variable `prefix-help-command' hold a command to run to display help
+ whenever the character `help-char' follows a prefix key and does not have
+ a key binding in that context.
+ ** Emacs now detects double- and triple-mouse clicks.  A single mouse
+ click produces a pair events of the form:
+       (down-mouse-N POSITION)
+       (mouse-N POSITION)
+ Clicking the same mouse button again, soon thereafter and at the same
+ location, produces another pair of events of the form:
+       (down-mouse-N POSITION)
+       (double-mouse-N POSITION 2)
+ Another click will produce an event pair of the form:
+       (down-mouse-N POSITION)
+       (triple-mouse-N POSITION 3)
+ All the POSITIONs in such a sequence would be identical, except for
+ their timestamps.
+ To count as double- and triple-clicks, mouse clicks must be at the
+ same location as the first click, and the number of milliseconds
+ between the first release and the second must be less than the value
+ of the lisp variable `double-click-time'.  Setting `double-click-time'
+ to nil disables multi-click detection.  Setting it to t removes the
+ time limit; Emacs then detects multi-clicks by position only.
+ If `read-key-sequence' finds no binding for a double-click event, but
+ the corresponding single-click event would be bound,
+ `read-key-sequence' demotes it to a single-click.  Similarly, it
+ demotes unbound triple-clicks to double- or single-clicks.  This means
+ you don't have to distinguish between single- and multi-clicks if you
+ don't want to.
+ Emacs reports all clicks after the third as `triple-mouse-N' clicks,
+ but increments the click count after POSITION.  For example, a fourth
+ click, soon after the third and at the same location, produces a pair
+ of events of the form:
+       (down-mouse-N POSITION)
+       (triple-mouse-N POSITION 4)
+ ** The way Emacs reports positions of mouse events has changed
+ slightly.  If a mouse event includes a position list of the form:
+       (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP)
+ this denotes exactly the same position as the list:
+       (WINDOW  PLACE-SYMBOL  (COLUMN . ROW) TIMESTAMP)
+ That is, the event occurred over a non-textual area of the frame,
+ specified by PLACE-SYMBOL, a symbol like `mode-line' or
+ `vertical-scroll-bar'.
+ Enclosing PLACE-SYMBOL in a singleton list does not change the
+ position denoted, but the `read-key-sequence' function uses the
+ presence or absence of the singleton list to tell whether or not it
+ should prefix the event with its place symbol.
+ Normally, `read-key-sequence' prefixes mouse events occurring over
+ non-textual areas with their PLACE-SYMBOLs, to select the sub-keymap
+ appropriate for the event; for example, clicking on the mode line
+ produces a sequence like
+       [mode-line (mouse-1 POSN)]
+ However, if lisp code elects to unread the resulting key sequence by
+ placing it in the `unread-command-events' variable, it is important
+ that `read-key-sequence' not insert the prefix symbol again; that
+ would produce a malformed key sequence like
+       [mode-line mode-line (mouse-1 POSN)]
+ For this reason, `read-key-sequence' encloses the event's PLACE-SYMBOL
+ in a singleton list when it first inserts the prefix, but doesn't
+ insert the prefix when processing events whose PLACE-SYMBOLs are
+ already thus enclosed.
\f
+ * Changes in version 19.15.
+ ** `make-frame-visible', which uniconified frames, is now a command,
+ and thus may be bound to a key.  This makes sense because frames
+ respond to user input while iconified.
+ ** You can now use Meta mouse clicks to set and use the "secondary
+ selection".  You can drag M-Mouse-1 across the region you want to
+ select.  Or you can press M-Mouse-1 at one end and M-Mouse-3 at the
+ other (this also copies the text to the kill ring).  Repeating M-Mouse-3
+ again at the same place kills that text.
+ M-Mouse-2 kills the secondary selection.
+ Setting the secondary selection does not move point or the mark.  It
+ is possible to make a secondary selection that does not all fit on the
+ screen, by using M-Mouse-1 at one end, scrolling, then using M-Mouse-3
+ at the other end.
+ Emacs has only one secondary selection at any time.  Starting to set
+ a new one cancels any previous one.  The secondary selection displays
+ using a face named `secondary-selection'.
+ ** There's a new way to request use of Supercite (sc.el).  Do this:
+     (add-hook 'mail-citation-hook 'sc-cite-original)
+ Currently this works with Rmail.  In the future, other Emacs based
+ mail-readers should be modified to understand this hook also.
+ In the mean time, you should keep doing what you have done in the past
+ for those other mail readers.
+ ** When a regular expression contains `\(...\)' inside a repetition
+ operator such as `*' or `+', and you ask about the range that was matched
+ using `match-beginning' and `match-end', the range you get corresponds
+ to the *last* repetition *only*.  In Emacs 18, you would get a range
+ corresponding to all the repetitions.
+ If you want to get a range corresponding to all the repetitions,
+ put a `\(...\)' grouping *outside* the repetition operator.  This
+ is the syntax that corresponds logically to the desired result, and
+ it works the same in Emacs 18 and Emacs 19.
+ (This change actually took place earlier, but we didn't know about it
+ and thus didn't document it.)
\f
+ * Changes in version 19.14.
+ ** To modify read-only text, bind the variable `inhibit-read-only'
+ to a non-nil value.  If the value is t, then all reasons that might
+ make text read-only are inhibited (including `read-only' text properties).
+ If the value is a list, then a `read-only' property is inhibited
+ if it is `memq' in the list.
+ ** If you call `get-buffer-window' passing t as its second argument, it
+ will only search for windows on visible frames.  Previously, passing t
+ as the secord argument caused `get-buffer-window' to search all
+ frames, visible or not.
+ ** If you call `other-buffer' with a nil or omitted second argument, it
+ will ignore buffers displayed windows on any visible frame, not just
+ the selected frame.
+ ** You can specify a window or a frame for C-x # to use when
+ selects a server buffer.  Set the variable server-window
+ to the window or frame that you want.
+ ** The command M-( now inserts spaces outside the open-parentheses in
+ some cases--depending on the syntax classes of the surrounding
+ characters.  If the variable `parens-dont-require-spaces' is non-nil,
+ it inhibits insertion of these spaces.
+ ** The GUD package now supports the debugger known as xdb on HP/UX
+ systems.  Use M-x xdb.  The variable `gud-xdb-directories' lets you
+ specify a list of directories to search for source code.
+ ** If you are using the mailabbrev package, you should note that its
+ function for defining an alias is now called `define-mail-abbrev'.
+ This package no longer contains a definition for `define-mail-alias';
+ that name is used only in mailaliases.
+ ** Inserted characters now inherit the properties of the text before
+ them, by default, rather than those of the following text.
+ ** The function `insert-file-contents' now takes optional arguments BEG
+ and END that specify which part of the file to insert.  BEG defaults to
+ 0 (the beginning of the file), and END defaults to the end of the file.
+ If you specify BEG or END, then the argument VISIT must be nil.
\f
+ * Changes in version 19.13.
+ ** Magic file names can now handle the `load' operation.
+ ** Bibtex mode now sets up special entries in the menu bar.
+ ** The incremental search commands C-w and C-y, which copy text from
+ the buffer into the search string, now convert it to lower case
+ if you are in a case-insensitive search.  This is to avoid making
+ the search a case-sensitive one.
+ ** GNUS now knows your time zone automatically if Emacs does.
+ ** Hide-ifdef mode no longer defines keys of the form
+ C-c LETTER, since those keys are reserved for users.
+ Those commands have been moved to C-c M-LETTER.
+ We may move them again for greater consistency with other modes.
\f
+ * Changes in version 19.12.
+ ** You can now make many of the sort commands ignore case by setting
+ `sort-fold-case' to a non-nil value.
\f
+ * Changes in version 19.11.
+ ** Supercite is installed.
+ ** `write-file-hooks' functions that return non-nil are responsible
+ for making a backup file if you want that to be done.
+ To do so, execute the following code:
+    (or buffer-backed-up (backup-buffer))
+ You might wish to save the file modes value returned by
+ `backup-buffer' and use that to set the mode bits of the file
+ that you write.  This is what `basic-save-buffer' does when
+ it writes a file in the usual way.
+ (This is not actually new, but wasn't documented before.)
\f
+ * Changes in version 19.10.
+ ** The command `repeat-complex-command' is now on C-x ESC ESC.
+ It used to be bound to C-x ESC.
+ The reason for this change is to make function keys work after C-x.
+ ** The variable `highlight-nonselected-windows' now controls whether
+ the region is highlighted in windows other than the selected window
+ (in Transient Mark mode only, of course, and currently only when
+ using X).
\f
+ * Changes in version 19.8.
+ ** It is now simpler to tell Emacs to display accented characters under
+ X windows.  M-x standard-display-european toggles the display of
+ buffer text according to the ISO Latin-1 standard.  With a prefix
+ argument, this command enables European character display iff the
+ argument is positive.
+ ** The `-i' command-line argument tells Emacs to use a picture of the
+ GNU gnu as its icon, instead of letting the window manager choose an
+ icon for it.  This option used to insert a file into the current
+ buffer; use `-insert' to do that now.
+ ** The `configure' script now supports `--prefix' and `--exec-prefix'
+ options.
+ The `--prefix=PREFIXDIR' option specifies where the installation process
+ should put emacs and its data files.  This defaults to `/usr/local'.
+ - Emacs (and the other utilities users run) go in PREFIXDIR/bin
+   (unless the `--exec-prefix' option says otherwise).
+ - The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION
+   (where VERSION is the version number of Emacs, like `19.7').
+ - The architecture-dependent files go in
+   PREFIXDIR/lib/emacs/VERSION/CONFIGURATION
+   (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2),
+   unless the `--exec-prefix' option says otherwise.
+ The `--exec-prefix=EXECDIR' option allows you to specify a separate
+ portion of the directory tree for installing architecture-specific
+ files, like executables and utility programs.  If specified,
+ - Emacs (and the other utilities users run) go in EXECDIR/bin, and
+ - The architecture-dependent files go in
+   EXECDIR/lib/emacs/VERSION/CONFIGURATION.
+ EXECDIR/bin should be a directory that is normally in users' PATHs.
+ ** When running under X, the new lisp function `x-list-fonts'
+ allows code to find out which fonts are available from the X server.
+ The first argument PATTERN is a string, perhaps with wildcard characters;
+   the * character matches any substring, and
+   the ? character matches any single character.
+   PATTERN is case-insensitive.
+ If the optional arguments FACE and FRAME are specified, then
+ `x-list-fonts' returns only fonts the same size as FACE on FRAME.
\f
+ * Changes in version 19.
+ ** When you kill buffers, Emacs now returns memory to the operating system,
+ thus reducing the size of the Emacs process.  All the space that you free
+ up by killing buffers can now be reused for other buffers no matter what
+ their sizes, or reused by other processes if Emacs doesn't need it.
+ ** Emacs now does garbage collection and auto saving while it is waiting
+ for input, which often avoids the need to do these things while you
+ are typing.
+ The variable `auto-save-timeout' says how many seconds Emacs should
+ wait, after you stop typing, before it does an auto save and a garbage
+ collection.
+ ** If auto saving detects that a buffer has shrunk greatly, it refrains
+ from auto saving that buffer and displays a warning.  Now it also turns
+ off Auto Save mode in that buffer, so that you won't get the same
+ warning again.
+ If you reenable Auto Save mode in that buffer, Emacs will start saving
+ it again with no further warnings.
+ ** A new minor mode called Line Number mode displays the current line
+ number in the mode line, updating it as necessary when you move
+ point.
+ However, if the buffer is very large (larger than the value of
+ `line-number-display-limit'), then the line number doesn't appear.
+ This is because computing the line number can be painfully slow if the
+ buffer is very large.
+ ** You can quit while Emacs is waiting to read or write files.
+ ** The arrow keys now have default bindings to move in the appropriate
+ directions.
+ ** You can suppress next-line's habit of inserting a newline when
+ called at the end of a buffer by setting next-line-add-newlines to nil
+ (it defaults to t).
+ ** You can now get back recent minibuffer inputs conveniently.  While
+ in the minibuffer, type M-p to fetch the next earlier minibuffer
+ input, and use M-n to fetch the next later input.
+ There are also commands to search forward or backward through the
+ history for history elements that match a regular expression.  M-r
+ searches older elements in the history, while M-s searches newer
+ elements.  By special dispensation, these commands can always use the
+ minibuffer to read their arguments even though you are already in the
+ minibuffer when you issue them.
+ The history feature is available for all uses of the minibuffer, but
+ there are separate history lists for different kinds of input.  For
+ example, there is a list for file names, used by all the commands that
+ read file names.  There is a list for arguments of commands like
+ `query-replace'.  There are also very specific history lists, such
+ as the one that `compile' uses for compilation commands.
+ ** You can now display text in a mixture of fonts and colors, using the
+ "face" feature, together with the overlay and text property features.
+ See the Emacs Lisp manual for details.  The Emacs Users Manual describes
+ how to change the colors and font of standard predefined faces.
+ ** You can refer to files on other machines using special file name syntax:
+ /HOST:FILENAME
+ /USER@HOST:FILENAME
+ When you do this, Emacs uses the FTP program to read and write files on
+ the specified host.  It logs in through FTP using your user name or the
+ name USER.  It may ask you for a password from time to time; this
+ is used for logging in on HOST.
+ ** Some C-x key bindings have been moved onto new prefix keys.
+ C-x r is a prefix for registers and rectangles.
+ C-x n is a prefix for narrowing.
+ C-x a is a prefix for abbrev commands.
+ C-x r C-SPC
+ C-x r SPC     point-to-register    (Was C-x /)
+ C-x r j               jump-to-register     (Was C-x j)
+ C-x r s               copy-to-register     (Was C-x x)
+ C-x r i               insert-register      (Was C-x g)
+ C-x r r               copy-rectangle-to-register  (Was C-x r)
+ C-x r k               kill-rectangle
+ C-x r y               yank-rectangle
+ C-x r o               open-rectangle
+ C-x r f               frame-configuration-to-register
+                 (This saves the state of all windows in all frames.)
+ C-x r w               window-configuration-to-register
+                 (This saves the state of all windows in the selected  frame.)
+ (Use C-x r j to restore a configuration saved with C-x r f or C-x r w.)
+ C-x n n               narrow-to-region        (Was C-x n)
+ C-x n p               narrow-to-page          (Was C-x p)
+ C-x n w               widen                   (Was C-x w)
+ C-x a l               add-mode-abbrev         (Was C-x C-a)
+ C-x a g               add-global-abbrev       (Was C-x +)
+ C-x a i l     inverse-add-mode-abbrev (Was C-x C-h)
+ C-x a i g     inverse-add-global-abbrev  (Was C-x -)
+ C-x a e               expand-abbrev           (Was C-x ')
+ (The old key bindings C-x /, C-x j, C-x x and C-x g
+ have not yet been removed.)
+ ** You can put a file name in a register to be able to visit the file
+ quickly.  Do this:
+    (set-register ?CHAR '(file . NAME))
+ where NAME is the file name as a string.  Then C-x r j CHAR finds that
+ file.
+ This is useful for files that you need to visit frequently,
+ but that you don't want to keep in buffers all the time.
+ ** The keys M-g (fill-region) and C-x a (append-to-buffer)
+ have been eliminated.
+ ** The new command `string-rectangle' inserts a specified string on
+ each line of the region-rectangle.
+ ** C-x 4 r is now `find-file-read-only-other-window'.
+ ** C-x 4 C-o is now `display-buffer', which displays a specified buffer
+ in another window without selecting it.
+ ** Picture mode has been substantially improved.  The picture editing commands
+ now arrange for automatic horizontal scrolling to keep point visible
+ when editing a wide buffer with truncate-lines on.  Picture-mode
+ initialization now does a better job of rebinding standard commands;
+ it finds not just their normal keybindings, but any function keys
+ attached to them.
+ ** If you enable Transient Mark mode, then the mark becomes "inactive"
+ after every command that modifies the buffer.  While the mark is
+ active, the region is highlighted (under X, at least).  Most commands
+ that use the mark give an error if the mark is inactive, but you can
+ use C-x C-x to make it active again.  This feature is also sometimes
+ known as "Zmacs mode".
+ ** Outline mode is now available as a minor mode.  This minor mode can
+ combine with any major mode; it substitutes the C-c commands of
+ Outline mode for those of the major mode.  Use M-x outline-minor-mode
+ to enable and disable the new mode.
+ M-x outline-mode is unchanged; it still switches to Outline mode as a
+ major mode.
+ ** The default setting of `version-control' comes from the environment
+ variable VERSION_CONTROL.
+ ** The user option for controlling whether files can set local
+ variables is now called `enable-local-variables'.  A value of t means
+ local-variables lists are obeyed; nil means they are ignored; anything
+ else means query the user.
+ The user option for controlling use of the `eval' local variable is
+ now called is `enable-local-eval'; its values are interpreted like
+ those of `enable-local-variables'.
+ ** X Window System changes:
+ C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new
+ frame.  Likewise, C-x 5 m starts outgoing mail in another frame, and
+ C-x 5 . finds a tag in another frame.
+ When you are using X, C-z now iconifies the selected frame.
+ Emacs can now exchange text with other X applications.  Killing or
+ copying text in Emacs now makes that text available for pasting into
+ other X applications.  The Emacs yanking commands now insert the
+ latest selection set by other applications, and add the text to the
+ kill ring.  The Emacs commands for selecting and inserting text with
+ the mouse now use the kill ring in the same way the keyboard killing
+ and yanking commands do.
+ The option to specify the title for the initial frame is now `-name NAME'.
+ There is currently no way to specify an icon title; perhaps we will add
+ one in the future.
+ ** Undoing a deletion now puts point back where it was before the
+ deletion.
+ ** The variables that control how much undo information to save have
+ been renamed to `undo-limit' and `undo-strong-limit'.  They used to be
+ called `undo-threshold' and `undo-high-threshold'.
+ ** You can now use kill commands in read-only buffers.  They don't
+ actually change the buffer, and Emacs will beep and warn you that the
+ buffer is read-only, but they do copy the text you tried to kill into
+ the kill ring, so you can yank it into other buffers.
+ ** C-o inserts the fill-prefix on the newly created line.  The command
+ M-^ deletes the prefix (if it occurs) after the newline that it
+ deletes.
+ ** C-M-l now runs the command `reposition-window'.  It scrolls the
+ window heuristically in a way designed to get useful information onto
+ the screen.
+ ** C-M-r is now reverse incremental regexp search.
+ ** M-z now kills through the target character.  In version 18, it
+ killed up to but not including the target character.
+ ** M-! now runs the specified shell command asynchronously if it
+ ends in `&' (just as the shell does).
+ ** C-h C-f and C-h C-k are new help commands that display the Info
+ node for a given Emacs function name or key sequence, respectively.
+ ** The C-h p command system lets you find Emacs Lisp packages by
+ topic keywords.  Here is a partial list of package categories:
+ abbrev              abbreviation handling, typing shortcuts, macros
+ bib         code related to the bib bibliography processor
+ c           C and C++ language support
+ calendar      calendar and time management support
+ comm        communications, networking, remote access to files
+ docs        support for Emacs documentation
+ emulations    emulations of other editors
+ extensions    Emacs Lisp language extensions
+ games       games, jokes and amusements
+ hardware      support for interfacing with exotic hardware
+ help        support for on-line help systems
+ i14n        internationalization and alternate character-set support
+ internal      code for Emacs internals, build process, defaults
+ languages     specialized modes for editing programming languages
+ lisp        Lisp support, including Emacs Lisp
+ local       code local to your site
+ maint       maintenance aids for the Emacs development group
+ mail        modes for electronic-mail handling
+ news        support for netnews reading and posting
+ processes     process, subshell, compilation, and job control support
+ terminals     support for terminal types
+ tex         code related to the TeX formatter
+ tools       programming tools
+ unix        front-ends/assistants for, or emulators of, UNIX features
+ vms         support code for vms
+ wp          word processing
+ More will be added soon.
+ ** The command to split a window into two side-by-side windows is now
+ C-x 3.  It was C-x 5.
+ ** M-. (find-tag) no longer has any effect on what M-, will do
+ subsequently.  You can no longer use M-, to find the next similar tag;
+ you must use M-. with a prefix argument, instead.
+ The motive for this change is so that you can more reliably use
+ M-, to resume a suspended `tags-search' or `tags-query-replace'.
+ ** C-x s (`save-some-buffers') now gives you more options when it asks
+ whether to save a particular buffer.  In addition to `y' or `n', you
+ can answer `!' to save all the remaining buffers, `.' to save this
+ buffer but not save any others, ESC to stop saving and exit the
+ command, and C-h to get help.  These options are analogous to those
+ of `query-replace'.
+ ** M-x make-symbolic-link does not expand its first argument.
+ This lets you make a link with a target that is a relative file name.
+ ** M-x add-change-log-entry and C-x 4 a now automatically insert the
+ name of the file and often the name of the function that you changed.
+ They also handle grouping of entries.
+ There is now a special major mode for editing ChangeLog files.  It
+ makes filling work conveniently.  Each bunch of grouped entries is one
+ paragraph, and each collection of entries from one person on one day
+ is considered a page.
+ ** The `comment-region' command adds comment delimiters to the lines that
+ start in the region, thus commenting them out.  With a negative argument,
+ it deletes comment delimiters from the lines in the region--this cancels
+ the effect of `comment-region' without an argument.
+ With a positive argument, `comment-region' adds comment delimiters
+ but duplicates the last character of the comment start sequence as many
+ times as the argument specifies.  This is a way of calling attention to
+ the comment.  In Lisp, you should use an argument at least two, because
+ the indentation convention for single semicolon comments does not leave
+ them at the beginning of a line.
+ ** If `split-window-keep-point' is non-nil, C-x 2 tries to avoid
+ shifting any text on the screen by putting point in whichever window
+ happens to contain the screen line the cursor is already on.
+ The default is that `split-window-keep-point' is non-nil on slow
+ terminals.
+ ** M-x super-apropos is like M-x apropos except that it searches both
+ Lisp symbol names and documentation strings for matches.  It describes
+ every symbol that has a match in either the symbol's name or its
+ documentation.
+ Both M-x apropos and M-x super-apropos take an optional second
+ argument DO-ALL which controls the more expensive part of the job.
+ This includes looking up and printing the key bindings of all
+ commands.  It also includes checking documentation strings in
+ super-apropos.  DO-ALL is nil by default; use a prefix arg to make it
+ non-nil.
+ ** M-x revert-buffer no longer offers to revert from a recent auto-save
+ file unless you give it a prefix argument.  Otherwise it always
+ reverts from the real file regardless of whether there has been an
+ auto-save since thenm.  (Reverting from the auto-save file is no longer
+ very useful now that the undo capacity is larger.)
+ ** M-x recover-file no longer turns off Auto Save mode when it reads
+ the last Auto Save file.
+ ** M-x rename-buffer, if you give it a prefix argument,
+ avoids errors by modifying the new name to make it unique.
+ ** M-x rename-uniquely renames the current buffer to a similar name
+ with a numeric suffix added to make it both different and unique.
+ One use of this command is for creating multiple shell buffers.
+ If you rename your shell buffer, and then do M-x shell again, it
+ makes a new shell buffer.  This method is also good for mail buffers,
+ compilation buffers, and any Emacs feature which creates a special
+ buffer with a particular name.
+ ** M-x compare-windows with a prefix argument ignores changes in whitespace.
+ If `compare-ignore-case' is non-nil, then differences in case are also
+ ignored.
+ ** `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph'
+ to M-}.  Originally, these commands were bound to M-[ and M-], but they were
+ running into conflicts with the use of function keys.  On many terminals,
+ function keys send a sequence beginning ESC-[, so many users have defined this
+ as a prefix key.
+ ** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by
+ default; these commands seem to be often hit by accident, and can be
+ quite destructive if their effects are not noticed immediately.
+ ** The function `erase-buffer' is now interactive, but disabled by default.
+ ** When visiting a new file, Emacs attempts to abbreviate the file's
+ path using the symlinks listed in `directory-abbrev-alist'.
+ ** When you visit the same file in under two names that translate into
+ the same name once symbolic links are handled, Emacs warns you that
+ you have two buffers for the same file.
+ ** If you wish to avoid visiting the same file in two buffers under
+ different names, set the variable `find-file-existing-other-name'
+ non-nil.  Then `find-file' uses the existing buffer visiting the file,
+ no matter which of the file's names you specify.
+ ** If you set `find-file-visit-truename' non-nil, then the file name
+ recorded for a buffer is the file's truename (in which all symbolic
+ links have been removed), rather than the name you specify.  Setting
+ `find-file-visit-truename' also implies the effect of
+ `find-file-existing-other-name'.
+ ** C-x C-v now inserts the entire current file name in the minibuffer.
+ This is convenient if you made a small mistake in typing it.  Point
+ goes after the last slash, before the last file name component, so if
+ you want to replace it entirely, you can use C-k right away to delete
+ it.
+ ** Commands such as C-M-f in Lisp mode now ignore parentheses within comments.
+ ** C-x q now uses ESC to terminate all iterations of the keyboard
+ macro, rather than C-d as before.
+ ** Use the command `setenv' to set an individual environment variable
+ for Emacs subprocesses.  Specify a variable name and a value, both as
+ strings.  This command applies only to subprocesses yet to be
+ started.
+ ** Use `rot13-other-window' to examine a buffer with rot13.
+ This command does not change the text in the buffer.  Instead, it
+ creates a window with a funny display table that applies the code when
+ displaying the text.
+ ** The command `M-x version' now prints the current Emacs version; The
+ `version' command is an alias for the `emacs-version' command.
+ ** More complex changes in existing packages.
+ *** `fill-nonuniform-paragraphs' is a new command, much like
+ `fill-individual-paragraphs' except that only separator lines separate
+ paragraphs.  Since this means that the lines of one paragraph may have
+ different amounts of indentation, the fill prefix used is the smallest
+ amount of indentation of any of the lines of the paragraph.
+ *** Filling is now partially controlled by a new minor mode, Adaptive
+ Fill mode.  When this mode is enabled (and it is enabled by default),
+ if you use M-x fill-region-as-paragraph on an indented paragraph and
+ you don't have a fill prefix, it uses the indentation of the second
+ line of the paragraph as the fill prefix.
+ Adaptive Fill mode doesn't have much effect on M-q in most major
+ modes, because an indented line will probably count as a paragraph
+ starter and thus each line of an indented paragraph will be considered
+ a paragraph of its own.
+ *** M-q in C mode now runs `c-fill-paragraph', which is designed
+ for filling C comments.  (We assume you don't want to fill
+ the code in a C program.)
+ *** M-$ now runs the Ispell program instead of the Unix spell program.
+ M-$ starts an Ispell process the first time you use it.  But the process
+ stays alive, so that subsequent uses of M-$ run very fast.
+ If you want to get rid of the process, use M-x kill-ispell.
+ To check the entire current buffer, use M-x ispell-buffer.
+ Use M-x ispell-region to check just the current region.
+ Ispell commands often involve interactive replacement of words.
+ You can interrupt the interactive replacement with C-g.
+ You can restart it again afterward with C-u M-$.
+ During interactive replacement, you can type the following characters:
+ a     Accept this word this time.
+ DIGIT Replace the word (this time) with one of the displayed near-misses.
+       The digit you use says which near-miss to use.
+ i     Insert this word in your private dictionary
+         so that Ispell will consider it correct it from now on.
+ r     Replace the word this time with a string typed by you.
+ When the Ispell process starts, it reads your private dictionary which
+ is the file `~/ispell.words'.  If you "insert" words with the `i' command,
+ these words are added to that file, but not right away--only at the end
+ of the interactive replacement process.
+ Use M-x reload-ispell to reload your private dictionary from
+ `~/ispell.words' if you edit it outside of Ispell.
+ ** Changes in existing modes.
+ *** gdb-mode has been replaced by gud-mode.
+ The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs
+ 19.  It provides a gdb.el-like interface to any of three debuggers;
+ gdb itself, the sdb debugger supported on some Unix systems, or the
+ dbx debugger on Berkeley systems.
+    You start it up with one of the commands M-x gdb, M-x sdb, or
+ M-x dbx.  Each entry point finishes by executing a hook; gdb-mode-hook,
+ sdb-mode-hook or dbx-mode-hook respectively.
+ These bindings have changed:
+ C-x C-a >     gud-down                        (was M-d)
+ C-x C-a <     gud-up                          (was M-u)
+ C-x C-a C-r   gud-cont                        (was M-c)
+ C-x C-a C-n   gud-next                        (was M-n)
+ C-x C-a C-s   gud-step                        (was M-s)
+ C-x C-a C-i   gud-stepi                       (was M-i)
+ C-x C-a C-l   gud-recenter                    (was C-l)
+ C-d           comint-delchar-or-maybe-eof     (was C-c C-d)
+ These bindings have been removed:
+ C-c C-r               (was comint-show-output; now gud-cont)
+ Since GUD mode uses comint, it uses comint's input history commands,
+ superseding C-c C-y (copy-last-shell-input):
+   M-p         comint-next-input
+   M-n         comint-previous-input
+   M-r         comint-previous-similar-input
+   M-s         comint-next-similar-input
+   M-C-r               comint-previous-input-matching
+ The C-x C-a bindings are also active in source files.
+ *** The old TeX mode bindings of M-{ and M-} have been moved to C-c {
+ and C-c }.  (These commands are `up-list' and `tex-insert-braces';
+ they are the TeX equivalents of M-( and M-).)  This is because M-{
+ and M-} are now globally defined commands.
+ *** Changes in Mail mode.
+ `%' is now a word-separator character in Mail mode.
+ `mail-signature', if non-nil, tells M-x mail to insert your
+ `.signature' file automatically.  If you don't want your signature in
+ a particular message, just delete it before you send the message.
+ You can specify the text to insert at the beginning of each line when
+ you use C-c C-y to yank the message you are replying to.  Set
+ `mail-yank-prefix' to the desired string.  A value of `nil' (the
+ default) means to use indentation, as in Emacs 18.  If you use just
+ C-u as the prefix argument to C-c C-y, then it does not insert
+ anything at the beginning of the lines, regardless of the value of
+ `mail-yank-prefix'.
+ If you like, you can expand mail aliases as abbrevs, as soon as you
+ type them in.  To enable this feature, execute the following:
+     (add-hook 'mail-setup-hook 'mail-abbrevs-setup)
+ This can go in your .emacs file.
+ Word abbrevs don't expand unless you insert a word-separator character
+ afterward.  Any mail aliases that you didn't expand at insertion time
+ are expanded subsequently when you send the message.
+ *** Changes in Rmail.
+ Rmail by default gets new mail only from the system inbox file,
+ not from `~/mbox'.
+ In Rmail, you can retry sending a message that failed
+ by typing `M-m' on the failure message.
+ By contrast, another new command M-x rmail-resend is used for
+ forwarding a message and marking it as "resent from" you
+ with header fields "Resent-From:" and "Resent-To:".
+ `e' is now the command to edit a message.
+ To expunge, type `x'.  We know this will surprise people
+ some of the time, but the surprise will not be disastrous--if
+ you type `e' meaning to expunge, just turn off editing with C-c C-c
+ and then type `x'.
+ Another new Rmail command is `<', which moves to the first message.
+ This is for symmetry with `>'.
+ Use the `b' command to bury the Rmail buffer and its summary buffer,
+ if any, removing both of them from display on the screen.
+ The variable `rmail-output-file-alist' now controls the default
+ for the file to output a message to.
+ In the Rmail summary buffer, all cursor motion commands select
+ the message you move to.  It's really neat when you use
+ incremental search.
+ You can now issue most Rmail commands from an Rmail summary buffer.
+ The commands do the same thing in that buffer that they do in the
+ Rmail buffer.  They apply to the message that is selected in the Rmail
+ buffer, which is always the one described by the current summary
+ line.
+ Conversely, motion and deletion commands in the Rmail buffer also
+ update the summary buffer.  If you set the variable
+ `rmail-redisplay-summary' to a non-nil value, then they bring the
+ summary buffer (if one exists) back onto the screen.
+ C-M-t is a new command to make a summary by topic.  It uses regexp
+ matching against just the subjects of the messages to decide which
+ messages to show in the summary.
+ You can easily convert an Rmail file to system mailbox format with the
+ command `unrmail'.  This command reads two arguments, the name of
+ the Rmail file to convert, and the name of the new mailbox file.
+ (This command does not change the Rmail file itself.)
+ Rmail now handles Content Length fields in messages.
+ *** `mail-extract-address-components' unpacks mail addresses.
+ It takes an address as a string (the contents of the From field, for
+ example) and returns a list of the form (FULL-NAME
+ CANONICAL-ADDRESS).
+ *** Changes in C mode and C-related commands.
+ **** M-x c-up-conditional
+ In C mode, `c-up-conditional' moves back to the containing
+ preprocessor conditional, setting the mark where point was
+ previously.
+ A prefix argument acts as a repeat count.  With a negative argument,
+ this command moves forward to the end of the containing preprocessor
+ conditional.  When going backwards, `#elif' acts like `#else' followed
+ by `#if'.  When going forwards, `#elif' is ignored.
+ **** In C mode, M-a and M-e are now defined as
+ `c-beginning-of-statement' and `c-end-of-statement'.
+ **** In C mode, M-x c-backslash-region is a new command to insert or
+ align `\' characters at the ends of the lines of the region, except
+ for the last such line.  This is useful after writing or editing a C
+ macro definition.
+ If a line already ends in `\', this command adjusts the amount of
+ whitespace before it.  Otherwise, it inserts a new `\'.
+ *** New features in info.
+ When Info looks for an Info file, it searches the directories
+ in `Info-directory-list'.  This makes it easy to install the Info files
+ that come with various packages.  You can specify the path with
+ the environment variable INFOPATH.
+ There are new commands in Info mode.
+ `]' now moves forward a node, going up and down levels as needed.
+ `[' is similar but moves backward.  These two commands try to traverse
+ the entire Info tree, node by node.  They are the equivalent of reading
+ a printed manual sequentially.
+ `<' moves to the top node of the current Info file.
+ `>' moves to the last node of the file.
+ SPC scrolls through the current node; at the end, it advances to the
+ next node in depth-first order (like `]').
+ DEL scrolls backwards in the current node; at the end, it moves to the
+ previous node in depth-first order (like `[').
+ After a menu select, the info `up' command now restores point in the
+ menu.  The combination of this and the previous two changes means that
+ repeated SPC keystrokes do the right (depth-first traverse forward) thing.
+ `i STRING RET' moves to the node associated with STRING in the index
+ or indices of this manual.  If there is more than one match for
+ STRING, the `i' command finds the first match.
+ `,' finds the next match for the string in the previous `i' command
+ If you click the middle mouse button near a cross-reference,
+ menu item or node pointer while in Info, you will go to the node
+ which is referenced.
+ *** Changes in M-x compile.
+ You can repeat any previous compilation command conveniently using the
+ minibuffer history commands, while in the minibuffer entering the
+ compilation command.
+ While a compilation is going on, the string `Compiling' appears in
+ the mode line.  When this string disappears, that tells you the
+ compilation is finished.
+ The buffer of compiler messages is in Compilation mode.  This mode
+ provides the keys SPC and DEL to scroll by screenfuls, and M-n and M-p
+ to move to the next or previous error message.  You can also use C-c
+ C-c on any error message to find the corresponding source code.
+ Emacs 19 has a more general parser for compiler messages.  For example, it
+ can understand messages from lint, and from certain C compilers whose error
+ message format is unusual.  Also, it only parses until it sees the error
+ message you want; you never have to wait a long time to see the first
+ error, no matter how big the buffer is.
+ *** M-x diff and M-x diff-backup.
+ This new command compares two files, displaying the differences in an
+ Emacs buffer.  The options for the `diff' program come from the
+ variable `diff-switches', whose value should be a string.
+ The buffer of differences has Compilation mode as its major mode, so you
+ can use C-x ` to visit successive changed locations in the two
+ source files, or you can move to a particular hunk of changes and type
+ C-c C-c to move to the corresponding source.  You can also use the
+ other special commands of Compilation mode: SPC and DEL for
+ scrolling, and M-n and M-p for cursor motion.
+ M-x diff-backup compares a file with its most recent backup.
+ If you specify the name of a backup file, `diff-backup' compares it
+ with the source file that it is a backup of.
+ *** The View commands (such as M-x view-buffer and M-x view-file) no
+ longer use recursive edits; instead, they switch temporarily to a
+ different major mode (View mode) specifically designed for moving
+ around through a buffer without editing it.
+ *** Changes in incremental search.
+ **** The character to terminate an incremental search is now RET.
+ This is for compatibility with the way most other arguments are read.
+ To search for a newline in an incremental search, type LFD (also known
+ as C-j).
+ **** Incremental search now maintains a ring of previous search
+ strings.  Use M-p and M-n to move through the ring to pick a search
+ string to reuse.  These commands leave the selected search ring
+ element in the minibuffer, where you can edit it.  Type C-s or C-r to
+ finish editing and search for the chosen string.
+ **** If you type an upper case letter in incremental search, that turns
+ off case-folding, so that you get a case-sensitive search.
+ **** If you type a space during regexp incremental search, it matches
+ any sequence of whitespace characters.  If you want to match just a space,
+ type C-q SPC.
+ **** Incremental search is now implemented as a major mode.  When you
+ type C-s, it switches temporarily to a different keymap which defines
+ each key to do what it ought to do for incremental search.  This has
+ next to no effect on the user-visible behavior of searching, but makes
+ it easier to customize that behavior.
+ Emacs 19 eliminates the old variables `search-...-char' that used to
+ be the way to specify the characters to use for various special
+ purposes in incremental search.  Instead, you can define the meaning
+ of a character in incremental search by modifying `isearch-mode-map'.
+ *** New commands in Buffer Menu mode.
+ The command C-o now displays the current line's buffer in another
+ window but does not select it.  This is like the existing command `o'
+ which selects the current line's buffer in another window.
+ The command % toggles the read-only flag of the current line's buffer.
+ The way to switch to a set of several buffers, including those marked
+ with m, is now v.  The q command simply quits, replacing the buffer
+ menu buffer with the buffer that was displayed previously.
+ ** New major modes and packages.
+ *** The news reader GNUS is now installed.
+ *** There is a new interface for version control systems, called VC.
+ It works with both RCS and SCCS; in fact, you don't really have to
+ know which one of them is being used, because it automatically deals
+ with either one.
+ Most of the time, the only command you have to know about is C-x C-q.
+ This command normally toggles the read-only flag of the current
+ buffer.  If the buffer is visiting a file that is maintained with a
+ version control system, the command still toggles read-only, but does
+ so by checking the file in or checking it out.
+ When you check a file in, VC asks you for a log entry by popping up a
+ buffer.  Edit the entry there, then type C-c C-c when it is ready.
+ That's when the actual checkin happens.  If you change your mind about
+ the checkin, simply switch buffers and don't ever go back to the log
+ buffer.
+ To start using version control for a file, use the command C-x v v.
+ This works like C-x C-q (performing the next logical version-control
+ operation needed to change the file's writability) but it will also
+ perform initial checkin on an unregistered file.
+ By default, VC uses RCS if RCS is installed on your machine;
+ otherwise, SCCS.  If you want to make the choice explicitly, you can do
+ it by setting `vc-default-back-end' to the symbol `RCS' or the symbol
+ `SCCS'.
+ You can tell when a file you visit is maintained with version control
+ because either `RCS' or `SCCS' appears in the mode line.
+ *** A new Calendar mode has been added, the work of Edward M. Reingold.
+ The mode can display the Gregorian calendar and a variety of other
+ calendars at any date, and interacts with a diary facility similar to
+ the UNIX `calendar' utility.
+ *** There is a new major mode for editing binary files: Hexl mode.
+ To use it, use M-x hexl-find-file instead of C-x C-f to visit the file.
+ This command converts the file's contents to hexadecimal and lets you
+ edit the translation.  When you save the file, it is converted
+ automatically back to binary.
+ You can also use M-x hexl-mode to translate an existing buffer into hex.
+ Do this if you have already visited a binary file.
+ Hexl mode has a few other commands:
+ C-M-d insert a byte with a code typed in decimal.
+ C-M-o insert a byte with a code typed in octal.
+ C-M-x insert a byte with a code typed in hex.
+ C-x [   move to the beginning of a 1k-byte "page".
+ C-x ]   move to the end of a 1k-byte "page".
+ M-g     go to an address specified in hex.
+ M-j   go to an address specified in decimal.
+ C-c C-c       leave hexl mode and go back to the previous major mode.
+ *** Miscellaneous new major modes include Awk mode, Icon mode, Makefile
+ mode, Perl mode and SGML mode.
+ *** Edebug, a new source-level debugger for Emacs Lisp functions.
+ To use Edebug, use the command M-x edebug-defun to "evaluate" a
+ function definition in an Emacs Lisp file.  We put "evaluate" in
+ quotation marks because it doesn't just evaluate the function, it also
+ inserts additional information to support source-level debugging.
+ You must also do
+     (setq debugger 'edebug-debug)
+ to cause errors and single-stepping to use Edebug instead of the usual
+ Emacs Lisp debugger.
+ For more information, see the Edebug manual, which should be included
+ in the Emacs distribution.
+ *** C++ mode is like C mode, except that it understands C++ comment syntax
+ and certain other differences between C and C++.  It also has a command
+ `fill-c++-comment' which fills a paragraph made of comment lines.
+ The command `comment-region' is useful in C++ mode for commenting out
+ several consecutive lines, or removing the commenting out of such lines.
+ *** A new package for merging two variants of the same text.
+ It's not unusual for programmers to get their signals crossed and
+ modify the same program in two different directions.  Then somebody
+ has to merge the two versions.  The command `emerge-files' makes this
+ easier.
+ `emerge-files' reads two file names and compares them.  Then it
+ displays three buffers: one for each file, and one for the
+ differences.
+ If the original version of the file is available, you can make things
+ even easier using `emerge-files-with-ancestor'.  It reads three file
+ names--variant 1, variant 2, and the common ancestor--and uses diff3
+ to compare them.
+ You control the merging interactively.  The main loop of Emerge
+ consists of showing you one set of differences, asking you what to do
+ about them, and doing it.  You have a choice of two modes for giving
+ directions to Emerge: "fast" mode and "edit" mode.
+ In Fast mode, Emerge commands are single characters, and ordinary
+ Emacs commands are disabled.  This makes Emerge operations fast, but
+ prevents you from doing more than selecting the A or the B version of
+ differences.  In Edit mode, all emerge commands use the C-c prefix,
+ and the usual Emacs commands are available.  This allows editing the
+ merge buffer, but slows down Emerge operations.  Edit and fast modes
+ are indicated by `F' and `E' in the minor modes in the mode line.
+ The Emerge commands are:
+       p       go to the previous difference
+       n       go to the next difference
+       a       select the A version of this difference
+       b       select the B version of this difference
+       j       go to a particular difference (prefix argument
+               specifies which difference) (0j suppresses display of
+               the flags)
+       q       quit - finish the merge*
+       f       go into fast mode
+       e       go into edit mode
+       l       recenter (C-l) all three windows*
+       - and 0 through 9
+               prefix numeric arguments
+       d a     select the A version as the default from here down in
+               the merge buffer*
+       d b     select the B version as the default from here down in
+               the merge buffer*
+       c a     copy the A version of the difference into the kill
+               ring
+       c b     copy the B version of the difference into the kill
+               ring
+       i a     insert the A version of the difference at the point
+       i b     insert the B version of the difference at the point
+       m       put the point and mark around the difference region
+       ^       scroll-down (like M-v) the three windows*
+       v       scroll-up (like C-v) the three windows*
+       <       scroll-left (like C-x <) the three windows*
+       >       scroll-right (like C-x >) the three windows*
+       |       reset horizontal scroll on the three windows*
+       x 1     shrink the merge window to one line (use C-u l to restore it
+               to full size)
+       x a     find the difference containing a location in the A buffer*
+       x b     find the difference containing a location in the B buffer*
+       x c     combine the two versions of this difference*
+       x C     combine the two versions of this difference, using a
+               register's value as the template*
+       x d     find the difference containing a location in the merge buffer*
+       x f     show the files/buffers Emerge is operating on in Help window
+               (use C-u l to restore windows)
+       x j     join this difference with the following one
+               (C-u x j joins this difference with the previous one)
+       x l     show line numbers of points in A, B, and merge buffers
+       x m     change major mode of merge buffer*
+       x s     split this difference into two differences
+               (first position the point in all three buffers to the places
+               to split the difference)
+       x t     trim identical lines off top and bottom of difference
+               (such lines occur when the A and B versions are
+               identical but differ from the ancestor version)
+       x x     set the template for the x c command*
+ Normally, the merged output goes back in the first file specified.
+ If you use a prefix argument, Emerge reads another file name to use
+ for the output file.
+ Once Emerge has prepared the buffer of differences, it runs the hooks
+ in `emerge-startup-hooks'.
+ *** Asm mode is a new major mode for editing files of assembler code.
+ It defines these commands:
+ TAB   tab-to-tab-stop.
+ LFD   Insert a newline and then indent using tab-to-tab-stop.
+ :     Insert a colon and then remove the indentation
+       from before the label preceding colon.  Then tab-to-tab-stop.
+ ;     Insert or align a comment.
+ *** Two-column mode lets you conveniently edit two side-by-side columns
+ of text.  It works using two side-by-side windows, each showing its
+ own buffer.
+ Here are three ways to enter two-column mode:
+ C-x 6 2 makes the current buffer into the left-hand buffer.  In the
+ right-hand window it puts a buffer whose name is based on the current
+ buffer's name.
+ C-x 6 b BUFFER RET makes the current buffer into the left-hand buffer,
+ and uses buffer BUFFER as the right-hand buffer.
+ C-x 6 s splits the current buffer, which contains two-column text,
+ into two side-by-side buffers.  The old current buffer becomes the
+ left-hand buffer, but the text in the right column is moved into the
+ right-hand buffer.  The current column specifies the split point.
+ Splitting starts with the current line and continues to the end of the
+ buffer.
+ C-x 6 s takes a prefix argument which specifies how many characters
+ before point constitute the column separator.  (The default argument
+ is 1, as usual, so by default the column separator is the character
+ before point.)  Lines that don't have the column separator at the
+ proper place remain unsplit; they stay in the left-hand buffer, and
+ the right-hand buffer gets an empty line to correspond.
+ You can scroll both buffers together using C-x 6 SPC (scroll up), C-x
+ 6 DEL (scroll down), and C-x 6 RET (scroll up one line).  C-x 6 C-l
+ recenters both buffers together.
+ If you want to make a line which will span both columns, put it in
+ the left-hand buffer, with an empty line in the corresponding place in
+ the right-hand buffer.
+ When you have edited both buffers as you wish, merge them with C-x 6
+ 1.  This copies the text from the right-hand buffer as a second column
+ in the other buffer.  To go back to two-column editing, use C-x 6 s.
+ Use C-x 6 d to disassociate the two buffers, leaving each as it
+ stands.  (If the other buffer, the one that was not current when you
+ type C-x 6 d, is empty, C-x 6 d kills it.)
+ *** You can supply command arguments such as files to visit to an Emacs
+ that is already running.  To do this, you must do this in your .emacs
+ file:
+    (add-hook 'suspend-hook 'resume-suspend-hook)
+ Also you must use the shellscript emacs.csh or emacs.sh, found in the
+ etc subdirectory.
+ *** Shell mode has been completely replaced.
+ The basic idea is the same, but there are new commands available in
+ this mode.
+ TAB now completes the file name before point in the shell buffer.
+ To get a list of all possible completions, type M-?.
+ There is a new convenient history mechanism for repeating previous
+ commands.  Use the command M-p to recall the last command; it copies
+ the text of that command to the place where you are editing.  If you
+ repeat M-p, it replaces the copied command with the previous command.
+ M-n is similar but goes in the opposite direction towards the present.
+ When you find the command you wanted, you can edit it, or just
+ resubmit it by typing RET.
+ You can also use M-r and M-s to search for (respectively) earlier or
+ later inputs starting with a given string.  First type the string,
+ then type M-r to yank a previous input from the history which starts
+ with that string.  You can repeat M-r to find successively earlier
+ inputs starting with the same string.  You can start moving in the
+ opposite direction (toward more recent inputs) by typing M-s instead
+ of M-r.  As long as you don't use any commands except M-r and M-s,
+ they keep using the same string that you had entered initially.
+ C-c C-o kills the last batch of output from a shell command.  This is
+ useful if a shell command spews out lots of output that just gets in
+ the way.
+ C-c C-r scrolls to display the beginning of the last batch of output
+ at the top of the window; it also moves the cursor there.
+ C-a on a line that starts with a shell prompt moves to the end of the
+ prompt, not to the very beginning of the line.
+ C-d typed at the end of the shell buffer sends EOF to the subshell.
+ At any other position in the buffer, it deletes a character as usual.
+ If Emacs gets confused while trying to track changes in the shell's
+ current directory, type M-x dirs to re-synchronize.
+ M-x send-invisible reads a line of text without echoing it, and
+ sends it to the shell.
+ If you accidentally suspend your process, use M-x comint-continue-subjob
+ to continue it.
+ *** There is now a convenient way to enable flow control on terminals
+ where you can't win without it.  Suppose you want to do this on
+ VT-100 and H19 terminals; put the following in your `.emacs' file:
+    (enable-flow-control-on "vt100" "h19")
+ When flow control is enabled, you must type C-\ to get the effect of a
+ C-s, and type C-^ to get the effect of a C-q.
+ The function `enable-flow-control' enables flow control unconditionally.
\f
+ ** Changes in Dired
+ Dired has many new features which allow you to do these things:
+ - Rename, copy, or make links to many files at once.
+ - Make distinguishable types of marks for different operations.
+ - Display contents of subdirectories in the same Dired buffer as the
+ parent directory.
+ *** Setting and Clearing Marks
+ There are now two kinds of marker that you can put on a file in Dired:
+ `D' for deletion, and `*' for any other kind of operation.
+ The `x' command deletes only files marked with `D', and most
+ other Dired commands operate only on the files marked with `*'.
+ To mark files with `D' (also called "flagging" the files), you
+ can use `d' as usual.  Here are some commands for marking with
+ `*' (and also for unmarking):
+ **** `m' marks the current file with `*', for an operation other than
+ deletion.
+ **** `*' marks all executable files.  With a prefix argument, it
+ unmarks all those files.
+ **** `@' marks all symbolic links.  With a prefix argument, it unmarks
+ all those files.
+ **** `/' marks all directory files except `.' and `..'.  With a prefix
+ argument, it unmarks all those files.
+ **** M-DEL removes a specific or all marks from every file.  With an
+ argument, queries for each marked file.  Type your help character,
+ usually C-h, at that time for help.
+ **** `c' replaces all marks that use the character OLD with marks that
+ use the character NEW.  You can use almost any character as a mark
+ character by means of this command, to distinguish various classes of
+ files.  If OLD is ` ', then the command operates on all unmarked
+ files; if NEW is ` ', then the command unmarks the files it acts on.
+ *** Operating on Multiple Files
+ The Dired commands to operate directly on files (rename them, copy
+ them, and so on) have been generalized to work on multiple files.
+ There are also some additional commands in this series.
+ All of these commands use the same convention to decide which files to
+ manipulate:
+ - If you give the command a numeric prefix argument @var{n}, it operates
+ on the next @var{n} files, starting with the current file.
+ - Otherwise, if there are marked files, the commands operate on all the
+ marked files.
+ - Otherwise, the command operates on the current file only.
+ These are the commands:
+ **** `C' copies the specified files.  You must specify a directory to
+ copy into, or (if copying a single file) a new name.
+ If `dired-copy-preserve-time' is non-`nil', then copying sets
+ the modification time of the new file to be the same as that of the old
+ file.
+ **** `R' renames the specified files.  You must specify a directory to
+ rename into, or (if renaming a single file) a new name.
+ Dired automatically changes the visited file name of buffers associated
+ with renamed files so that they refer to the new names.
+ **** `H' makes hard links to the specified files.  You must specify a
+ directory to make the links in, or (if making just one link) the name
+ to give the link.
+ **** `S' makes symbolic links to the specified files.  You must specify
+ a directory to make the links in, or (if making just one link) the
+ name to give the link.
+ **** `M' changes the mode of the specified files.  This calls the
+ `chmod' program, so you can describe the desired mode change with any
+ argument that `chmod' would handle.
+ **** `G' changes the group of the specified files.
+ **** `O' changes the owner of the specified files.  (On normal systems,
+ only the superuser can do this.)
+ The variable `dired-chown-program' specifies the name of the
+ program to use to do the work (different systems put `chown' in
+ different places.
+ **** `Z' compresses or uncompresses the specified files.
+ **** `L' loads the specified Emacs Lisp files.
+ **** `B' byte compiles the specified Emacs Lisp files.
+ **** `P' prints the specified files.  It uses the variables
+ `lpr-command' and `lpr-switches' just as `lpr-file' does.
+ *** Shell Commands in Dired
+ `!' reads a shell command string in the minibuffer and runs the shell
+ command on all the specified files.  There are two ways of applying a
+ shell command to multiple files:
+ - If you use `*' in the command, then the shell command runs just
+ once, with the list of file names substituted for the `*'.
+ Thus, `! tar cf foo.tar * RET' runs `tar' on the entire list of file
+ names, putting them into one tar file `foo.tar'.  The file names are
+ inserted in the order that they appear in the Dired buffer.
+ - If the command string doesn't contain `*', then it runs once for
+ each file, with the file name attached at the end.  For example, `!
+ uudecode RET' runs `uudecode' on each file.
+ To run the shell command once for each file but without being limited
+ to putting the file name inserted in the middle, use a shell loop.
+ For example, this shell command would run `uuencode' on each of the
+ specified files, writing the output into a corresponding `.uu' file:
+     for file in *; uuencode $file $file >$file.uu; done
+ The working directory for the shell command is the top level directory
+ of the Dired buffer.
+ *** Regular Expression File Name Substitution
+ **** `% m REGEXP RET' marks all files whose names match the regular
+ expression REGEXP.
+ Only the non-directory part of the file name is used in matching.  Use
+ `^' and `$' to anchor matches.  Exclude subdirs by hiding them.
+ **** `% d REGEXP RET' flags for deletion all files whose names match
+ the regular expression REGEXP.
+ **** `% R', `% C', `% H', `% S'
+ These four commands rename, copy, make hard links and make soft links,
+ in each case computing the new name by regular expression substitution
+ from the name of the old file.  They  effectively perform
+ `query-replace-regexp' on the selected file names in the Dired buffer.
+ The commands read two arguments: a regular expression, and a
+ substitution pattern.  Each selected file name is matched against the
+ regular expression, and then the part which matched is replaced with
+ the substitution pattern.  You can use `\&' and `\DIGIT' in the
+ substitution pattern to refer to all or part of the old file name.
+ If the regular expression matches more than once in a file name,
+ only the first match is replaced.
+ Normally, the replacement process does not consider the directory names;
+ it operates on the file name within the directory.  If you specify a
+ prefix argument of zero, then replacement affects entire file name.
+ To apply the command to all files matching the same regexp that you
+ use in the command, mark those files with `% m REGEXP RET', then use
+ the same regular expression in `% R'.  To make this easier, `% R' uses
+ as a default the last regular expression specified in a `%' command.
+ *** Dired Case Conversion
+ **** `% u' renames each of the selected files to an upper case name.
+ **** `% l' renames each of the selected files to a lower case name.
+ *** File Comparison with Dired
+ **** `=' compares the current file with another file (the file at the
+ mark), by running the `diff' program.  The file at the mark is given
+ to `diff' first.
+ **** `M-=' compares the current file with its backup file.  If there
+ are several numerical backups, it uses the most recent one.  If this
+ file is a backup, it is compared with its original.
+ The backup file is the first file given to `diff'.
+ *** Subdirectories in Dired
+ You can display more than one directory in one Dired buffer.
+ The simplest way to do this is to specify the options `-lR' for
+ running `ls'.  That produces a recursive directory listing showing
+ all subdirectories, all within the same Dired buffer.
+ You can also insert the contents of a particular subdirectory with the
+ `i' command.  Use this command on the line that describes a file which
+ is a directory.  Inserted subdirectory contents follow the top-level
+ directory of the Dired buffer, just as they do in `ls -lR' output.
+ If the subdirectory's contents are already present in the buffer, the
+ `i' command just moves to it (type `l' to refresh it).  It sets the
+ Emacs mark before moving, so C-x C-x takes you back to the old
+ position in the buffer.
+ When you have subdirectories in the Dired buffer, you can use the page
+ motion commands C-x [ and C-x ] to move by entire directories.
+ The following commands move up and down in the tree of directories
+ in one Dired buffer:
+ **** C-M-u  Go up to the parent directory's headerline.
+ **** C-M-d  Go down in the tree, to the first subdirectory's
+ headerline.
+ **** C-M-n  Go to next subdirectory headerline, regardless of level.
+ **** C-M-p  Go to previous subdirectory headerline, regardless of
+ level.
+ *** Hiding Subdirectories
+ "Hiding" a subdirectory means to make it invisible, except for its
+ headerline.  Files inside a hidden subdirectory are never considered
+ by Dired.  For example, the commands to operate on marked files ignore
+ files in hidden directories even if they are marked.
+ **** `$' hides or unhides the current subdirectory and move to next
+ subdirectory.  A prefix argument serves as a repeat count.
+ **** `M-$' hides all subdirectories, leaving only their header lines.
+ Or, if at least one subdirectory is currently hidden, it makes
+ everything visible again.  You can use this command to get an overview
+ in very deep directory trees or to move quickly to subdirectories far
+ away.
+ *** Editing the Dired Buffer
+ **** `l' updates the specified files in a Dired buffer.  This means
+ reading their current status from the file system and changing the
+ buffer to reflect it properly.
+ If you use this command on a subdirectory header line, it updates the
+ contents of the subdirectory.
+ **** `g' updates the entire contents of the Dired buffer.  It preserves
+ all marks except for those on files that have vanished.  Hidden
+ subdirectories are updated but remain hidden.
+ **** `k' kills all marked lines (not the files).  With a prefix
+ argument, it kills that many lines starting with the current line.
+ This command does not delete files; it just deletes text from the Dired
+ buffer.
+ If you kill the line for a file that is a directory, then its contents
+ are also deleted from the buffer.  Typing `C-u k' on the header line
+ for a subdirectory is another way to delete a subdirectory from the
+ Dired buffer.
+ *** `find' and Dired.
+ To search for files with names matching a wildcard pattern use
+ `find-name-dired'.  Its arguments are DIRECTORY and
+ PATTERN.  It selects all the files in DIRECTORY or its
+ subdirectories whose own names match PATTERN.
+ The files thus selected are displayed in a Dired buffer in which the
+ ordinary Dired commands are available.
+ If you want to test the contents of files, rather than their names, use
+ `find-grep-dired'.  This command takes two minibuffer arguments,
+ DIRECTORY and REGEXP; it selects all the files in
+ DIRECTORY or its subdirectories that contain a match for
+ REGEXP.  It works by running `find' and `grep'.
+ The most general command in this series is `find-dired', which lets
+ you specify any condition that `find' can test.  It takes two
+ minibuffer arguments, DIRECTORY and FIND-ARGS; it runs `find' in
+ DIRECTORY with using FIND-ARGS as the arguments to `find' specifying
+ which files to accept.  To use this command, you need to know how to
+ use `find'.
\f
+ ** New amusements and novelties.
+ *** `M-x mpuz' displays a multiplication puzzle, in which each letter
+ stands for a digit, and you must determine which digit.  The puzzles
+ are determined randomly, so they are always different.
+ *** `M-x gomoku' plays the game Gomoku with you.  It needs more work.
+ *** `M-x spook' adds a line of randomly chosen keywords to an outgoing
+ mail message.  The keywords are chosen from a list of words that
+ suggest you are discussing something subversive.
+ The idea is that the NSA reads all messages that contain keywords
+ suggesting they might be interested, and that adding these lines could
+ help to overload them.  I would guess that they have modified their
+ program by now to ignore these lines of keywords; perhaps the program
+ can be updated if some clever hacker can determine what criterion they
+ actually use now.
\f
+ ** Installation changes
+ *** The configure script has been provided to help with the
+ installation process.  It takes the place of editing the Makefiles and
+ src/config.h, and can often guess the appropriate operating system to
+ use for a particular machine type.  See INSTALL for a more detailed
+ description of the steps required for installation.
+ *** If you create a Lisp file named `site-start.el', Emacs loads the file
+ whenever it starts up.
+ *** A new Lisp variable, `data-directory', indicates the directory
+ containing the DOC file, tutorial, copying agreement, and other
+ familiar `etc' files.  The value of `data-directory' is a simple string.
+ The default should be set at build time, and the person installing
+ Emacs should place all the data files in this directory.  The `help.el'
+ functions that look for docstrings and information files check this
+ variable.  All Emacs Lisp packages should also be coded so that they
+ refer to `data-directory' to find data files.
+ *** The PURESIZE definition has been moved from config.h to its own
+ file, puresize.h.  Since almost every file of C source in the
+ distribution depends on config.h, but only alloc.c and data.c depend
+ on puresize.h, this means that changing the value of PURESIZE causes
+ only those two files to be recompiled.
+ *** The makefile at the top of the Emacs source tree now supports a
+ `dist' target, which creates a compressed tar file suitable for
+ distribution, using the contents of the source tree.  Object files,
+ old file versions, executables, DOC files, and other
+ architecture-specific or easy-to-recreate files are not included in
+ the tar file.
\f
+ ----------------------------------------------------------------------
+ Copyright information:
+ Copyright (C) 1993, 1994, 1995, 2001, 2006 Free Software Foundation, Inc.
+    Permission is granted to anyone to make or distribute verbatim copies
+    of this document as received, in any medium, provided that the
+    copyright notice and this permission notice are preserved,
+    thus giving the recipient permission to redistribute in turn.
+    Permission is granted to distribute modified versions
+    of this document, or of portions of it,
+    under the above conditions, provided also that they
+    carry prominent notices stating who last changed them.
\f
+ Local variables:
+ mode: outline
+ paragraph-separate: "[        \f]*$"
+ end:
+ arch-tag: 944be39b-afe8-4217-9977-c745b68a7ca2
diff --cc etc/PROBLEMS
Simple merge
diff --cc etc/TODO
Simple merge
Simple merge
diff --cc lisp/ChangeLog
Simple merge
Simple merge
diff --cc lisp/faces.el
Simple merge
Simple merge
diff --cc lisp/info.el
Simple merge
Simple merge
Simple merge
diff --cc lisp/loadup.el
Simple merge
Simple merge
Simple merge
index 0e73427a33cc42d46ab85b91499b5ea31dcd9f20,ef80d28c578c785cf9415947fc9a09aa70d02c73..b80fe4c0fbc4f6a739e66c152a8e6e19bc4bc8a5
@@@ -1019,11 -1088,12 +1088,12 @@@ This is used to flag quote characters i
      (")" 0 (sh-font-lock-paren (match-beginning 0)))))
  
  (defun sh-font-lock-syntactic-face-function (state)
-   (if (nth 3 state)
-       (if (characterp (nth 3 state))
-         font-lock-string-face
-       sh-heredoc-face)
-     font-lock-comment-face))
+   (let ((q (nth 3 state)))
+     (if q
 -        (if (char-valid-p q)
++        (if (characterp q)
+             (if (eq q ?\`) 'sh-quoted-exec font-lock-string-face)
+           sh-heredoc-face)
+       font-lock-comment-face)))
  
  (defgroup sh-indentation nil
    "Variables controlling indentation in shell scripts.
diff --cc lisp/simple.el
Simple merge
diff --cc lisp/startup.el
Simple merge
diff --cc lisp/subr.el
Simple merge
diff --cc lisp/term.el
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc src/ChangeLog
Simple merge
diff --cc src/Makefile.in
index 049a4c5bc17d718372bfc21412c32ba728213b61,4b6599dc26df1338feacf6b9c87533136d73a4de..342540df7be1365ebe03c6b8ba9c4a5524cd24a0
@@@ -281,7 -280,7 +281,7 @@@ TOOLKIT_DEFINES 
  
  /* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
     since it may have -I options that should override those two.  */
- ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(TOOLKIT_DEFINES) $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS} @FREETYPE_CFLAGS@ @FONTCONFIG_CFLAGS@ @LIBOTF_CFLAGS@
 -ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(TOOLKIT_DEFINES) $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS_SOUND} ${CFLAGS}
++ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(TOOLKIT_DEFINES) $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS_SOUND} ${CFLAGS} @FREETYPE_CFLAGS@ @FONTCONFIG_CFLAGS@ @LIBOTF_CFLAGS@
  .c.o:
        $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  
diff --cc src/buffer.c
Simple merge
diff --cc src/coding.c
index debb2f27ffcae5d84e4048132605b6900f4ce2e5,be39ceb7fe6c50bfa2e7ba9b8fff163a1ac803f7..9f95c2c677798c7c377e405754d436bbc75da204
@@@ -8304,811 -7446,204 +8304,818 @@@ DECODING-SYSTEM is the coding system t
  \(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
  for encoding (in case OPERATION does encoding).
  
 -The first argument OPERATION specifies an I/O primitive:
 -  For file I/O, `insert-file-contents' or `write-region'.
 -  For process I/O, `call-process', `call-process-region', or `start-process'.
 -  For network I/O, `open-network-stream'.
 +The first argument OPERATION specifies an I/O primitive:
 +  For file I/O, `insert-file-contents' or `write-region'.
 +  For process I/O, `call-process', `call-process-region', or `start-process'.
 +  For network I/O, `open-network-stream'.
 +
 +The remaining arguments should be the same arguments that were passed
 +to the primitive.  Depending on which primitive, one of those arguments
 +is selected as the TARGET.  For example, if OPERATION does file I/O,
 +whichever argument specifies the file name is TARGET.
 +
 +TARGET has a meaning which depends on OPERATION:
-   For file I/O, TARGET is a file name.
++  For file I/O, TARGET is a file name (except for the special case below).
 +  For process I/O, TARGET is a process name.
 +  For network I/O, TARGET is a service name or a port number
 +
 +This function looks up what specified for TARGET in,
 +`file-coding-system-alist', `process-coding-system-alist',
 +or `network-coding-system-alist' depending on OPERATION.
 +They may specify a coding system, a cons of coding systems,
 +or a function symbol to call.
 +In the last case, we call the function with one argument,
 +which is a list of all the arguments given to this function.
 +
++If OPERATION is `insert-file-contents', the argument corresponding to
++TARGET may be a cons (FILENAME . BUFFER).  In that case, FILENAME is a
++file name to look up, and BUFFER is a buffer that contains the file's
++contents (not yet decoded).  If `file-coding-system-alist' specifies a
++function to call for FILENAME, that function should examine the
++contents of BUFFER instead of reading the file.
++
 +usage: (find-operation-coding-system OPERATION ARGUMENTS ...)  */)
 +     (nargs, args)
 +     int nargs;
 +     Lisp_Object *args;
 +{
 +  Lisp_Object operation, target_idx, target, val;
 +  register Lisp_Object chain;
 +
 +  if (nargs < 2)
 +    error ("Too few arguments");
 +  operation = args[0];
 +  if (!SYMBOLP (operation)
 +      || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
 +    error ("Invalid first arguement");
 +  if (nargs < 1 + XINT (target_idx))
 +    error ("Too few arguments for operation: %s",
 +         SDATA (SYMBOL_NAME (operation)));
 +  target = args[XINT (target_idx) + 1];
 +  if (!(STRINGP (target)
 +      || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
 +    error ("Invalid %dth argument", XINT (target_idx) + 1);
 +
 +  chain = ((EQ (operation, Qinsert_file_contents)
 +          || EQ (operation, Qwrite_region))
 +         ? Vfile_coding_system_alist
 +         : (EQ (operation, Qopen_network_stream)
 +            ? Vnetwork_coding_system_alist
 +            : Vprocess_coding_system_alist));
 +  if (NILP (chain))
 +    return Qnil;
 +
 +  for (; CONSP (chain); chain = XCDR (chain))
 +    {
 +      Lisp_Object elt;
 +
 +      elt = XCAR (chain);
 +      if (CONSP (elt)
 +        && ((STRINGP (target)
 +             && STRINGP (XCAR (elt))
 +             && fast_string_match (XCAR (elt), target) >= 0)
 +            || (INTEGERP (target) && EQ (target, XCAR (elt)))))
 +      {
 +        val = XCDR (elt);
 +        /* Here, if VAL is both a valid coding system and a valid
 +             function symbol, we return VAL as a coding system.  */
 +        if (CONSP (val))
 +          return val;
 +        if (! SYMBOLP (val))
 +          return Qnil;
 +        if (! NILP (Fcoding_system_p (val)))
 +          return Fcons (val, val);
 +        if (! NILP (Ffboundp (val)))
 +          {
-             val = call1 (val, Flist (nargs, args));
++            val = safe_call1 (val, Flist (nargs, args));
 +            if (CONSP (val))
 +              return val;
 +            if (SYMBOLP (val) && ! NILP (Fcoding_system_p (val)))
 +              return Fcons (val, val);
 +          }
 +        return Qnil;
 +      }
 +    }
 +  return Qnil;
 +}
 +
 +DEFUN ("set-coding-system-priority", Fset_coding_system_priority,
 +       Sset_coding_system_priority, 0, MANY, 0,
 +       doc: /* Assign higher priority to the coding systems given as arguments.
 +If multiple coding systems belongs to the same category,
 +all but the first one are ignored.
 +
 +usage: (set-coding-system-priority ...)  */)
 +     (nargs, args)
 +     int nargs;
 +     Lisp_Object *args;
 +{
 +  int i, j;
 +  int changed[coding_category_max];
 +  enum coding_category priorities[coding_category_max];
 +
 +  bzero (changed, sizeof changed);
 +
 +  for (i = j = 0; i < nargs; i++)
 +    {
 +      enum coding_category category;
 +      Lisp_Object spec, attrs;
 +
 +      CHECK_CODING_SYSTEM_GET_SPEC (args[i], spec);
 +      attrs = AREF (spec, 0);
 +      category = XINT (CODING_ATTR_CATEGORY (attrs));
 +      if (changed[category])
 +      /* Ignore this coding system because a coding system of the
 +         same category already had a higher priority.  */
 +      continue;
 +      changed[category] = 1;
 +      priorities[j++] = category;
 +      if (coding_categories[category].id >= 0
 +        && ! EQ (args[i], CODING_ID_NAME (coding_categories[category].id)))
 +      setup_coding_system (args[i], &coding_categories[category]);
 +      Fset (AREF (Vcoding_category_table, category), args[i]);
 +    }
 +
 +  /* Now we have decided top J priorities.  Reflect the order of the
 +     original priorities to the remaining priorities.  */
 +
 +  for (i = j, j = 0; i < coding_category_max; i++, j++)
 +    {
 +      while (j < coding_category_max
 +           && changed[coding_priorities[j]])
 +      j++;
 +      if (j == coding_category_max)
 +      abort ();
 +      priorities[i] = coding_priorities[j];
 +    }
 +
 +  bcopy (priorities, coding_priorities, sizeof priorities);
 +
 +  /* Update `coding-category-list'.  */
 +  Vcoding_category_list = Qnil;
 +  for (i = coding_category_max - 1; i >= 0; i--)
 +    Vcoding_category_list
 +      = Fcons (AREF (Vcoding_category_table, priorities[i]),
 +             Vcoding_category_list);
 +
 +  return Qnil;
 +}
 +
 +DEFUN ("coding-system-priority-list", Fcoding_system_priority_list,
 +       Scoding_system_priority_list, 0, 1, 0,
 +       doc: /* Return a list of coding systems ordered by their priorities.
 +HIGHESTP non-nil means just return the highest priority one.  */)
 +     (highestp)
 +     Lisp_Object highestp;
 +{
 +  int i;
 +  Lisp_Object val;
 +
 +  for (i = 0, val = Qnil; i < coding_category_max; i++)
 +    {
 +      enum coding_category category = coding_priorities[i];
 +      int id = coding_categories[category].id;
 +      Lisp_Object attrs;
 +
 +      if (id < 0)
 +      continue;
 +      attrs = CODING_ID_ATTRS (id);
 +      if (! NILP (highestp))
 +      return CODING_ATTR_BASE_NAME (attrs);
 +      val = Fcons (CODING_ATTR_BASE_NAME (attrs), val);
 +    }
 +  return Fnreverse (val);
 +}
 +
 +static char *suffixes[] = { "-unix", "-dos", "-mac" };
 +
 +static Lisp_Object
 +make_subsidiaries (base)
 +     Lisp_Object base;
 +{
 +  Lisp_Object subsidiaries;
 +  int base_name_len = SBYTES (SYMBOL_NAME (base));
 +  char *buf = (char *) alloca (base_name_len + 6);
 +  int i;
 +
 +  bcopy (SDATA (SYMBOL_NAME (base)), buf, base_name_len);
 +  subsidiaries = Fmake_vector (make_number (3), Qnil);
 +  for (i = 0; i < 3; i++)
 +    {
 +      bcopy (suffixes[i], buf + base_name_len, strlen (suffixes[i]) + 1);
 +      ASET (subsidiaries, i, intern (buf));
 +    }
 +  return subsidiaries;
 +}
 +
 +
 +DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
 +       Sdefine_coding_system_internal, coding_arg_max, MANY, 0,
 +       doc: /* For internal use only.
 +usage: (define-coding-system-internal ...)  */)
 +     (nargs, args)
 +     int nargs;
 +     Lisp_Object *args;
 +{
 +  Lisp_Object name;
 +  Lisp_Object spec_vec;               /* [ ATTRS ALIASE EOL_TYPE ] */
 +  Lisp_Object attrs;          /* Vector of attributes.  */
 +  Lisp_Object eol_type;
 +  Lisp_Object aliases;
 +  Lisp_Object coding_type, charset_list, safe_charsets;
 +  enum coding_category category;
 +  Lisp_Object tail, val;
 +  int max_charset_id = 0;
 +  int i;
 +
 +  if (nargs < coding_arg_max)
 +    goto short_args;
 +
 +  attrs = Fmake_vector (make_number (coding_attr_last_index), Qnil);
 +
 +  name = args[coding_arg_name];
 +  CHECK_SYMBOL (name);
 +  CODING_ATTR_BASE_NAME (attrs) = name;
 +
 +  val = args[coding_arg_mnemonic];
 +  if (! STRINGP (val))
 +    CHECK_CHARACTER (val);
 +  CODING_ATTR_MNEMONIC (attrs) = val;
 +
 +  coding_type = args[coding_arg_coding_type];
 +  CHECK_SYMBOL (coding_type);
 +  CODING_ATTR_TYPE (attrs) = coding_type;
 +
 +  charset_list = args[coding_arg_charset_list];
 +  if (SYMBOLP (charset_list))
 +    {
 +      if (EQ (charset_list, Qiso_2022))
 +      {
 +        if (! EQ (coding_type, Qiso_2022))
 +          error ("Invalid charset-list");
 +        charset_list = Viso_2022_charset_list;
 +      }
 +      else if (EQ (charset_list, Qemacs_mule))
 +      {
 +        if (! EQ (coding_type, Qemacs_mule))
 +          error ("Invalid charset-list");
 +        charset_list = Vemacs_mule_charset_list;
 +      }
 +      for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
 +      if (max_charset_id < XFASTINT (XCAR (tail)))
 +        max_charset_id = XFASTINT (XCAR (tail));
 +    }
 +  else
 +    {
 +      charset_list = Fcopy_sequence (charset_list);
 +      for (tail = charset_list; !NILP (tail); tail = Fcdr (tail))
 +      {
 +        struct charset *charset;
 +
 +        val = Fcar (tail);
 +        CHECK_CHARSET_GET_CHARSET (val, charset);
 +        if (EQ (coding_type, Qiso_2022)
 +            ? CHARSET_ISO_FINAL (charset) < 0
 +            : EQ (coding_type, Qemacs_mule)
 +            ? CHARSET_EMACS_MULE_ID (charset) < 0
 +            : 0)
 +          error ("Can't handle charset `%s'",
 +                 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 +
 +        XSETCAR (tail, make_number (charset->id));
 +        if (max_charset_id < charset->id)
 +          max_charset_id = charset->id;
 +      }
 +    }
 +  CODING_ATTR_CHARSET_LIST (attrs) = charset_list;
 +
 +  safe_charsets = Fmake_string (make_number (max_charset_id + 1),
 +                              make_number (255));
 +  for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
 +    SSET (safe_charsets, XFASTINT (XCAR (tail)), 0);
 +  CODING_ATTR_SAFE_CHARSETS (attrs) = safe_charsets;
 +
 +  CODING_ATTR_ASCII_COMPAT (attrs) = args[coding_arg_ascii_compatible_p];
 +
 +  val = args[coding_arg_decode_translation_table];
 +  if (! CHAR_TABLE_P (val) && ! CONSP (val))
 +    CHECK_SYMBOL (val);
 +  CODING_ATTR_DECODE_TBL (attrs) = val;
 +
 +  val = args[coding_arg_encode_translation_table];
 +  if (! CHAR_TABLE_P (val) && ! CONSP (val))
 +    CHECK_SYMBOL (val);
 +  CODING_ATTR_ENCODE_TBL (attrs) = val;
 +
 +  val = args[coding_arg_post_read_conversion];
 +  CHECK_SYMBOL (val);
 +  CODING_ATTR_POST_READ (attrs) = val;
 +
 +  val = args[coding_arg_pre_write_conversion];
 +  CHECK_SYMBOL (val);
 +  CODING_ATTR_PRE_WRITE (attrs) = val;
 +
 +  val = args[coding_arg_default_char];
 +  if (NILP (val))
 +    CODING_ATTR_DEFAULT_CHAR (attrs) = make_number (' ');
 +  else
 +    {
 +      CHECK_CHARACTER (val);
 +      CODING_ATTR_DEFAULT_CHAR (attrs) = val;
 +    }
 +
 +  val = args[coding_arg_for_unibyte];
 +  CODING_ATTR_FOR_UNIBYTE (attrs) = NILP (val) ? Qnil : Qt;
 +
 +  val = args[coding_arg_plist];
 +  CHECK_LIST (val);
 +  CODING_ATTR_PLIST (attrs) = val;
 +
 +  if (EQ (coding_type, Qcharset))
 +    {
 +      /* Generate a lisp vector of 256 elements.  Each element is nil,
 +       integer, or a list of charset IDs.
 +
 +       If Nth element is nil, the byte code N is invalid in this
 +       coding system.
 +
 +       If Nth element is a number NUM, N is the first byte of a
 +       charset whose ID is NUM.
 +
 +       If Nth element is a list of charset IDs, N is the first byte
 +       of one of them.  The list is sorted by dimensions of the
 +       charsets.  A charset of smaller dimension comes firtst. */
 +      val = Fmake_vector (make_number (256), Qnil);
 +
 +      for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
 +      {
 +        struct charset *charset = CHARSET_FROM_ID (XFASTINT (XCAR (tail)));
 +        int dim = CHARSET_DIMENSION (charset);
 +        int idx = (dim - 1) * 4;
 +
 +        if (CHARSET_ASCII_COMPATIBLE_P (charset))
 +          CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
 +
 +        for (i = charset->code_space[idx];
 +             i <= charset->code_space[idx + 1]; i++)
 +          {
 +            Lisp_Object tmp, tmp2;
 +            int dim2;
 +
 +            tmp = AREF (val, i);
 +            if (NILP (tmp))
 +              tmp = XCAR (tail);
 +            else if (NUMBERP (tmp))
 +              {
 +                dim2 = CHARSET_DIMENSION (CHARSET_FROM_ID (XFASTINT (tmp)));
 +                if (dim < dim2)
 +                  tmp = Fcons (XCAR (tail), Fcons (tmp, Qnil));
 +                else
 +                  tmp = Fcons (tmp, Fcons (XCAR (tail), Qnil));
 +              }
 +            else
 +              {
 +                for (tmp2 = tmp; CONSP (tmp2); tmp2 = XCDR (tmp2))
 +                  {
 +                    dim2 = CHARSET_DIMENSION (CHARSET_FROM_ID (XFASTINT (XCAR (tmp2))));
 +                    if (dim < dim2)
 +                      break;
 +                  }
 +                if (NILP (tmp2))
 +                  tmp = nconc2 (tmp, Fcons (XCAR (tail), Qnil));
 +                else
 +                  {
 +                    XSETCDR (tmp2, Fcons (XCAR (tmp2), XCDR (tmp2)));
 +                    XSETCAR (tmp2, XCAR (tail));
 +                  }
 +              }
 +            ASET (val, i, tmp);
 +          }
 +      }
 +      ASET (attrs, coding_attr_charset_valids, val);
 +      category = coding_category_charset;
 +    }
 +  else if (EQ (coding_type, Qccl))
 +    {
 +      Lisp_Object valids;
 +
 +      if (nargs < coding_arg_ccl_max)
 +      goto short_args;
  
 -The remaining arguments should be the same arguments that were passed
 -to the primitive.  Depending on which primitive, one of those arguments
 -is selected as the TARGET.  For example, if OPERATION does file I/O,
 -whichever argument specifies the file name is TARGET.
 +      val = args[coding_arg_ccl_decoder];
 +      CHECK_CCL_PROGRAM (val);
 +      if (VECTORP (val))
 +      val = Fcopy_sequence (val);
 +      ASET (attrs, coding_attr_ccl_decoder, val);
  
 -TARGET has a meaning which depends on OPERATION:
 -  For file I/O, TARGET is a file name (except for the special case below).
 -  For process I/O, TARGET is a process name.
 -  For network I/O, TARGET is a service name or a port number
 +      val = args[coding_arg_ccl_encoder];
 +      CHECK_CCL_PROGRAM (val);
 +      if (VECTORP (val))
 +      val = Fcopy_sequence (val);
 +      ASET (attrs, coding_attr_ccl_encoder, val);
  
 -This function looks up what specified for TARGET in,
 -`file-coding-system-alist', `process-coding-system-alist',
 -or `network-coding-system-alist' depending on OPERATION.
 -They may specify a coding system, a cons of coding systems,
 -or a function symbol to call.
 -In the last case, we call the function with one argument,
 -which is a list of all the arguments given to this function.
 +      val = args[coding_arg_ccl_valids];
 +      valids = Fmake_string (make_number (256), make_number (0));
 +      for (tail = val; !NILP (tail); tail = Fcdr (tail))
 +      {
 +        int from, to;
  
 -If OPERATION is `insert-file-contents', the argument corresponding to
 -TARGET may be a cons (FILENAME . BUFFER).  In that case, FILENAME is a
 -file name to look up, and BUFFER is a buffer that contains the file's
 -contents (not yet decoded).  If `file-coding-system-alist' specifies a
 -function to call for FILENAME, that function should examine the
 -contents of BUFFER instead of reading the file.
 +        val = Fcar (tail);
 +        if (INTEGERP (val))
 +          {
 +            from = to = XINT (val);
 +            if (from < 0 || from > 255)
 +              args_out_of_range_3 (val, make_number (0), make_number (255));
 +          }
 +        else
 +          {
 +            CHECK_CONS (val);
 +            CHECK_NATNUM_CAR (val);
 +            CHECK_NATNUM_CDR (val);
 +            from = XINT (XCAR (val));
 +            if (from > 255)
 +              args_out_of_range_3 (XCAR (val),
 +                                   make_number (0), make_number (255));
 +            to = XINT (XCDR (val));
 +            if (to < from || to > 255)
 +              args_out_of_range_3 (XCDR (val),
 +                                   XCAR (val), make_number (255));
 +          }
 +        for (i = from; i <= to; i++)
 +          SSET (valids, i, 1);
 +      }
 +      ASET (attrs, coding_attr_ccl_valids, valids);
  
 -usage: (find-operation-coding-system OPERATION ARGUMENTS ...)  */)
 -     (nargs, args)
 -     int nargs;
 -     Lisp_Object *args;
 -{
 -  Lisp_Object operation, target_idx, target, val;
 -  register Lisp_Object chain;
 +      category = coding_category_ccl;
 +    }
 +  else if (EQ (coding_type, Qutf_16))
 +    {
 +      Lisp_Object bom, endian;
  
 -  if (nargs < 2)
 -    error ("Too few arguments");
 -  operation = args[0];
 -  if (!SYMBOLP (operation)
 -      || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
 -    error ("Invalid first argument");
 -  if (nargs < 1 + XINT (target_idx))
 -    error ("Too few arguments for operation: %s",
 -         SDATA (SYMBOL_NAME (operation)));
 -  /* For write-region, if the 6th argument (i.e. VISIT, the 5th
 -     argument to write-region) is string, it must be treated as a
 -     target file name.  */
 -  if (EQ (operation, Qwrite_region)
 -      && nargs > 5
 -      && STRINGP (args[5]))
 -    target_idx = make_number (4);
 -  target = args[XINT (target_idx) + 1];
 -  if (!(STRINGP (target)
 -      || (EQ (operation, Qinsert_file_contents) && CONSP (target)
 -          && STRINGP (XCAR (target)) && BUFFERP (XCDR (target)))
 -      || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
 -    error ("Invalid argument %d", XINT (target_idx) + 1);
 -  if (CONSP (target))
 -    target = XCAR (target);
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qnil;
  
 -  chain = ((EQ (operation, Qinsert_file_contents)
 -          || EQ (operation, Qwrite_region))
 -         ? Vfile_coding_system_alist
 -         : (EQ (operation, Qopen_network_stream)
 -            ? Vnetwork_coding_system_alist
 -            : Vprocess_coding_system_alist));
 -  if (NILP (chain))
 -    return Qnil;
 +      if (nargs < coding_arg_utf16_max)
 +      goto short_args;
  
 -  for (; CONSP (chain); chain = XCDR (chain))
 -    {
 -      Lisp_Object elt;
 -      elt = XCAR (chain);
 +      bom = args[coding_arg_utf16_bom];
 +      if (! NILP (bom) && ! EQ (bom, Qt))
 +      {
 +        CHECK_CONS (bom);
 +        val = XCAR (bom);
 +        CHECK_CODING_SYSTEM (val);
 +        val = XCDR (bom);
 +        CHECK_CODING_SYSTEM (val);
 +      }
 +      ASET (attrs, coding_attr_utf_16_bom, bom);
 +
 +      endian = args[coding_arg_utf16_endian];
 +      CHECK_SYMBOL (endian);
 +      if (NILP (endian))
 +      endian = Qbig;
 +      else if (! EQ (endian, Qbig) && ! EQ (endian, Qlittle))
 +      error ("Invalid endian: %s", SDATA (SYMBOL_NAME (endian)));
 +      ASET (attrs, coding_attr_utf_16_endian, endian);
 +
 +      category = (CONSP (bom)
 +                ? coding_category_utf_16_auto
 +                : NILP (bom)
 +                ? (EQ (endian, Qbig)
 +                   ? coding_category_utf_16_be_nosig
 +                   : coding_category_utf_16_le_nosig)
 +                : (EQ (endian, Qbig)
 +                   ? coding_category_utf_16_be
 +                   : coding_category_utf_16_le));
 +    }
 +  else if (EQ (coding_type, Qiso_2022))
 +    {
 +      Lisp_Object initial, reg_usage, request, flags;
 +      int i;
  
 -      if (CONSP (elt)
 -        && ((STRINGP (target)
 -             && STRINGP (XCAR (elt))
 -             && fast_string_match (XCAR (elt), target) >= 0)
 -            || (INTEGERP (target) && EQ (target, XCAR (elt)))))
 +      if (nargs < coding_arg_iso2022_max)
 +      goto short_args;
 +
 +      initial = Fcopy_sequence (args[coding_arg_iso2022_initial]);
 +      CHECK_VECTOR (initial);
 +      for (i = 0; i < 4; i++)
        {
 -        val = XCDR (elt);
 -        /* Here, if VAL is both a valid coding system and a valid
 -             function symbol, we return VAL as a coding system.  */
 -        if (CONSP (val))
 -          return val;
 -        if (! SYMBOLP (val))
 -          return Qnil;
 -        if (! NILP (Fcoding_system_p (val)))
 -          return Fcons (val, val);
 -        if (! NILP (Ffboundp (val)))
 +        val = Faref (initial, make_number (i));
 +        if (! NILP (val))
            {
 -            val = safe_call1 (val, Flist (nargs, args));
 -            if (CONSP (val))
 -              return val;
 -            if (SYMBOLP (val) && ! NILP (Fcoding_system_p (val)))
 -              return Fcons (val, val);
 +            struct charset *charset;
 +
 +            CHECK_CHARSET_GET_CHARSET (val, charset);
 +            ASET (initial, i, make_number (CHARSET_ID (charset)));
 +            if (i == 0 && CHARSET_ASCII_COMPATIBLE_P (charset))
 +              CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
            }
 -        return Qnil;
 +        else
 +          ASET (initial, i, make_number (-1));
        }
 -    }
 -  return Qnil;
 -}
  
 -DEFUN ("update-coding-systems-internal",  Fupdate_coding_systems_internal,
 -       Supdate_coding_systems_internal, 0, 0, 0,
 -       doc: /* Update internal database for ISO2022 and CCL based coding systems.
 -When values of any coding categories are changed, you must
 -call this function.  */)
 -     ()
 -{
 -  int i;
 +      reg_usage = args[coding_arg_iso2022_reg_usage];
 +      CHECK_CONS (reg_usage);
 +      CHECK_NUMBER_CAR (reg_usage);
 +      CHECK_NUMBER_CDR (reg_usage);
  
 -  for (i = CODING_CATEGORY_IDX_EMACS_MULE; i < CODING_CATEGORY_IDX_MAX; i++)
 -    {
 -      Lisp_Object val;
 +      request = Fcopy_sequence (args[coding_arg_iso2022_request]);
 +      for (tail = request; ! NILP (tail); tail = Fcdr (tail))
 +      {
 +        int id;
 +        Lisp_Object tmp;
 +
 +        val = Fcar (tail);
 +        CHECK_CONS (val);
 +        tmp = XCAR (val);
 +        CHECK_CHARSET_GET_ID (tmp, id);
 +        CHECK_NATNUM_CDR (val);
 +        if (XINT (XCDR (val)) >= 4)
 +          error ("Invalid graphic register number: %d", XINT (XCDR (val)));
 +        XSETCAR (val, make_number (id));
 +      }
  
 -      val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[i]);
 -      if (!NILP (val))
 +      flags = args[coding_arg_iso2022_flags];
 +      CHECK_NATNUM (flags);
 +      i = XINT (flags);
 +      if (EQ (args[coding_arg_charset_list], Qiso_2022))
 +      flags = make_number (i | CODING_ISO_FLAG_FULL_SUPPORT);
 +
 +      ASET (attrs, coding_attr_iso_initial, initial);
 +      ASET (attrs, coding_attr_iso_usage, reg_usage);
 +      ASET (attrs, coding_attr_iso_request, request);
 +      ASET (attrs, coding_attr_iso_flags, flags);
 +      setup_iso_safe_charsets (attrs);
 +
 +      if (i & CODING_ISO_FLAG_SEVEN_BITS)
 +      category = ((i & (CODING_ISO_FLAG_LOCKING_SHIFT
 +                        | CODING_ISO_FLAG_SINGLE_SHIFT))
 +                  ? coding_category_iso_7_else
 +                  : EQ (args[coding_arg_charset_list], Qiso_2022)
 +                  ? coding_category_iso_7
 +                  : coding_category_iso_7_tight);
 +      else
        {
 -        if (! coding_system_table[i])
 -          coding_system_table[i] = ((struct coding_system *)
 -                                    xmalloc (sizeof (struct coding_system)));
 -        setup_coding_system (val, coding_system_table[i]);
 +        int id = XINT (AREF (initial, 1));
 +
 +        category = (((i & CODING_ISO_FLAG_LOCKING_SHIFT)
 +                     || EQ (args[coding_arg_charset_list], Qiso_2022)
 +                     || id < 0)
 +                    ? coding_category_iso_8_else
 +                    : (CHARSET_DIMENSION (CHARSET_FROM_ID (id)) == 1)
 +                    ? coding_category_iso_8_1
 +                    : coding_category_iso_8_2);
        }
 -      else if (coding_system_table[i])
 +      if (category != coding_category_iso_8_1
 +        && category != coding_category_iso_8_2)
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qnil;
 +    }
 +  else if (EQ (coding_type, Qemacs_mule))
 +    {
 +      if (EQ (args[coding_arg_charset_list], Qemacs_mule))
 +      ASET (attrs, coding_attr_emacs_mule_full, Qt);
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
 +      category = coding_category_emacs_mule;
 +    }
 +  else if (EQ (coding_type, Qshift_jis))
 +    {
 +
 +      struct charset *charset;
 +
 +      if (XINT (Flength (charset_list)) != 3
 +        && XINT (Flength (charset_list)) != 4)
 +      error ("There should be three or four charsets");
 +
 +      charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +      if (CHARSET_DIMENSION (charset) != 1)
 +      error ("Dimension of charset %s is not one",
 +             SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 +      if (CHARSET_ASCII_COMPATIBLE_P (charset))
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
 +
 +      charset_list = XCDR (charset_list);
 +      charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +      if (CHARSET_DIMENSION (charset) != 1)
 +      error ("Dimension of charset %s is not one",
 +             SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 +
 +      charset_list = XCDR (charset_list);
 +      charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +      if (CHARSET_DIMENSION (charset) != 2)
 +      error ("Dimension of charset %s is not two",
 +             SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 +
 +      charset_list = XCDR (charset_list);
 +      if (! NILP (charset_list))
        {
 -        xfree (coding_system_table[i]);
 -        coding_system_table[i] = NULL;
 +        charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +        if (CHARSET_DIMENSION (charset) != 2)
 +          error ("Dimension of charset %s is not two",
 +                 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
        }
 +
 +      category = coding_category_sjis;
 +      Vsjis_coding_system = name;
      }
 +  else if (EQ (coding_type, Qbig5))
 +    {
 +      struct charset *charset;
  
 -  return Qnil;
 -}
 +      if (XINT (Flength (charset_list)) != 2)
 +      error ("There should be just two charsets");
  
 -DEFUN ("set-coding-priority-internal", Fset_coding_priority_internal,
 -       Sset_coding_priority_internal, 0, 0, 0,
 -       doc: /* Update internal database for the current value of `coding-category-list'.
 -This function is internal use only.  */)
 -     ()
 -{
 -  int i = 0, idx;
 -  Lisp_Object val;
 +      charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +      if (CHARSET_DIMENSION (charset) != 1)
 +      error ("Dimension of charset %s is not one",
 +             SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
 +      if (CHARSET_ASCII_COMPATIBLE_P (charset))
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
  
 -  val = Vcoding_category_list;
 +      charset_list = XCDR (charset_list);
 +      charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
 +      if (CHARSET_DIMENSION (charset) != 2)
 +      error ("Dimension of charset %s is not two",
 +             SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
  
 -  while (CONSP (val) && i < CODING_CATEGORY_IDX_MAX)
 +      category = coding_category_big5;
 +      Vbig5_coding_system = name;
 +    }
 +  else if (EQ (coding_type, Qraw_text))
      {
 -      if (! SYMBOLP (XCAR (val)))
 -      break;
 -      idx = XFASTINT (Fget (XCAR (val), Qcoding_category_index));
 -      if (idx >= CODING_CATEGORY_IDX_MAX)
 -      break;
 -      coding_priorities[i++] = (1 << idx);
 -      val = XCDR (val);
 +      category = coding_category_raw_text;
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
 +    }
 +  else if (EQ (coding_type, Qutf_8))
 +    {
 +      category = coding_category_utf_8;
 +      CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
 +    }
 +  else if (EQ (coding_type, Qundecided))
 +    category = coding_category_undecided;
 +  else
 +    error ("Invalid coding system type: %s",
 +         SDATA (SYMBOL_NAME (coding_type)));
 +
 +  CODING_ATTR_CATEGORY (attrs) = make_number (category);
 +  CODING_ATTR_PLIST (attrs)
 +    = Fcons (QCcategory, Fcons (AREF (Vcoding_category_table, category),
 +                              CODING_ATTR_PLIST (attrs)));
 +  CODING_ATTR_PLIST (attrs)
 +    = Fcons (QCascii_compatible_p, 
 +           Fcons (CODING_ATTR_ASCII_COMPAT (attrs),
 +                  CODING_ATTR_PLIST (attrs)));
 +
 +  eol_type = args[coding_arg_eol_type];
 +  if (! NILP (eol_type)
 +      && ! EQ (eol_type, Qunix)
 +      && ! EQ (eol_type, Qdos)
 +      && ! EQ (eol_type, Qmac))
 +    error ("Invalid eol-type");
 +
 +  aliases = Fcons (name, Qnil);
 +
 +  if (NILP (eol_type))
 +    {
 +      eol_type = make_subsidiaries (name);
 +      for (i = 0; i < 3; i++)
 +      {
 +        Lisp_Object this_spec, this_name, this_aliases, this_eol_type;
 +
 +        this_name = AREF (eol_type, i);
 +        this_aliases = Fcons (this_name, Qnil);
 +        this_eol_type = (i == 0 ? Qunix : i == 1 ? Qdos : Qmac);
 +        this_spec = Fmake_vector (make_number (3), attrs);
 +        ASET (this_spec, 1, this_aliases);
 +        ASET (this_spec, 2, this_eol_type);
 +        Fputhash (this_name, this_spec, Vcoding_system_hash_table);
 +        Vcoding_system_list = Fcons (this_name, Vcoding_system_list);
 +        val = Fassoc (Fsymbol_name (this_name), Vcoding_system_alist);
 +        if (NILP (val))
 +          Vcoding_system_alist
 +            = Fcons (Fcons (Fsymbol_name (this_name), Qnil),
 +                     Vcoding_system_alist);
 +      }
      }
 -  /* If coding-category-list is valid and contains all coding
 -     categories, `i' should be CODING_CATEGORY_IDX_MAX now.  If not,
 -     the following code saves Emacs from crashing.  */
 -  while (i < CODING_CATEGORY_IDX_MAX)
 -    coding_priorities[i++] = CODING_CATEGORY_MASK_RAW_TEXT;
 +
 +  spec_vec = Fmake_vector (make_number (3), attrs);
 +  ASET (spec_vec, 1, aliases);
 +  ASET (spec_vec, 2, eol_type);
 +
 +  Fputhash (name, spec_vec, Vcoding_system_hash_table);
 +  Vcoding_system_list = Fcons (name, Vcoding_system_list);
 +  val = Fassoc (Fsymbol_name (name), Vcoding_system_alist);
 +  if (NILP (val))
 +    Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (name), Qnil),
 +                                Vcoding_system_alist);
 +
 +  {
 +    int id = coding_categories[category].id;
 +
 +    if (id < 0 || EQ (name, CODING_ID_NAME (id)))
 +      setup_coding_system (name, &coding_categories[category]);
 +  }
  
    return Qnil;
 +
 + short_args:
 +  return Fsignal (Qwrong_number_of_arguments,
 +                Fcons (intern ("define-coding-system-internal"),
 +                       make_number (nargs)));
  }
  
 -DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
 -       Sdefine_coding_system_internal, 1, 1, 0,
 -       doc: /* Register CODING-SYSTEM as a base coding system.
 -This function is internal use only.  */)
 -     (coding_system)
 -     Lisp_Object coding_system;
 +
 +DEFUN ("coding-system-put", Fcoding_system_put, Scoding_system_put,
 +       3, 3, 0,
 +       doc: /* Change value in CODING-SYSTEM's property list PROP to VAL.  */)
 +  (coding_system, prop, val)
 +     Lisp_Object coding_system, prop, val;
  {
 -  Lisp_Object safe_chars, slot;
 +  Lisp_Object spec, attrs;
  
 -  if (NILP (Fcheck_coding_system (coding_system)))
 -    Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
 -  safe_chars = coding_safe_chars (coding_system);
 -  if (! EQ (safe_chars, Qt) && ! CHAR_TABLE_P (safe_chars))
 -    error ("No valid safe-chars property for %s",
 -         SDATA (SYMBOL_NAME (coding_system)));
 -  if (EQ (safe_chars, Qt))
 +  CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
 +  attrs = AREF (spec, 0);
 +  if (EQ (prop, QCmnemonic))
      {
 -      if (NILP (Fmemq (coding_system, XCAR (Vcoding_system_safe_chars))))
 -      XSETCAR (Vcoding_system_safe_chars,
 -               Fcons (coding_system, XCAR (Vcoding_system_safe_chars)));
 +      if (! STRINGP (val))
 +      CHECK_CHARACTER (val);
 +      CODING_ATTR_MNEMONIC (attrs) = val;
      }
 -  else
 +  else if (EQ (prop, QCdefalut_char))
      {
 -      slot = Fassq (coding_system, XCDR (Vcoding_system_safe_chars));
 -      if (NILP (slot))
 -      XSETCDR (Vcoding_system_safe_chars,
 -               nconc2 (XCDR (Vcoding_system_safe_chars),
 -                       Fcons (Fcons (coding_system, safe_chars), Qnil)));
 +      if (NILP (val))
 +      val = make_number (' ');
        else
 -      XSETCDR (slot, safe_chars);
 +      CHECK_CHARACTER (val);
 +      CODING_ATTR_DEFAULT_CHAR (attrs) = val;
 +    }
 +  else if (EQ (prop, QCdecode_translation_table))
 +    {
 +      if (! CHAR_TABLE_P (val) && ! CONSP (val))
 +      CHECK_SYMBOL (val);
 +      CODING_ATTR_DECODE_TBL (attrs) = val;
 +    }
 +  else if (EQ (prop, QCencode_translation_table))
 +    {
 +      if (! CHAR_TABLE_P (val) && ! CONSP (val))
 +      CHECK_SYMBOL (val);
 +      CODING_ATTR_ENCODE_TBL (attrs) = val;
 +    }
 +  else if (EQ (prop, QCpost_read_conversion))
 +    {
 +      CHECK_SYMBOL (val);
 +      CODING_ATTR_POST_READ (attrs) = val;
 +    }
 +  else if (EQ (prop, QCpre_write_conversion))
 +    {
 +      CHECK_SYMBOL (val);
 +      CODING_ATTR_PRE_WRITE (attrs) = val;
 +    }
 +  else if (EQ (prop, QCascii_compatible_p))
 +    {
 +      CODING_ATTR_ASCII_COMPAT (attrs) = val;
 +    }
 +
 +  CODING_ATTR_PLIST (attrs)
 +    = Fplist_put (CODING_ATTR_PLIST (attrs), prop, val);
 +  return val;
 +}
 +
 +
 +DEFUN ("define-coding-system-alias", Fdefine_coding_system_alias,
 +       Sdefine_coding_system_alias, 2, 2, 0,
 +       doc: /* Define ALIAS as an alias for CODING-SYSTEM.  */)
 +     (alias, coding_system)
 +     Lisp_Object alias, coding_system;
 +{
 +  Lisp_Object spec, aliases, eol_type, val;
 +
 +  CHECK_SYMBOL (alias);
 +  CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
 +  aliases = AREF (spec, 1);
 +  /* ALISES should be a list of length more than zero, and the first
 +     element is a base coding system.  Append ALIAS at the tail of the
 +     list.  */
 +  while (!NILP (XCDR (aliases)))
 +    aliases = XCDR (aliases);
 +  XSETCDR (aliases, Fcons (alias, Qnil));
 +
 +  eol_type = AREF (spec, 2);
 +  if (VECTORP (eol_type))
 +    {
 +      Lisp_Object subsidiaries;
 +      int i;
 +
 +      subsidiaries = make_subsidiaries (alias);
 +      for (i = 0; i < 3; i++)
 +      Fdefine_coding_system_alias (AREF (subsidiaries, i),
 +                                   AREF (eol_type, i));
      }
 +
 +  Fputhash (alias, spec, Vcoding_system_hash_table);
 +  Vcoding_system_list = Fcons (alias, Vcoding_system_list);
 +  val = Fassoc (Fsymbol_name (alias), Vcoding_system_alist);
 +  if (NILP (val))
 +    Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (alias), Qnil),
 +                                Vcoding_system_alist);
 +
    return Qnil;
  }
  
diff --cc src/config.in
Simple merge
Simple merge
diff --cc src/dispnew.c
Simple merge
diff --cc src/emacs.c
Simple merge
diff --cc src/fileio.c
Simple merge
diff --cc src/fns.c
Simple merge
diff --cc src/frame.c
Simple merge
diff --cc src/intervals.c
Simple merge
diff --cc src/lisp.h
Simple merge
diff --cc src/lread.c
index b6161ebedaa5b6eff05bfcbb451c8a850756c6ac,31f974d9bc03bd41f6aaaf6ac1b7cdc2f5beb73a..d8abde1c4588350acbc1200333c49fdff334b721
@@@ -89,13 -87,8 +89,14 @@@ Lisp_Object Qascii_character, Qload, Ql
  Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
  Lisp_Object Qinhibit_file_name_operation;
  Lisp_Object Qeval_buffer_list, Veval_buffer_list;
+ Lisp_Object Qfile_truename, Qdo_after_load_evaluation; /* ACM 2006/5/16 */
  
 +/* Used instead of Qget_file_char while loading *.elc files compiled
 +   by Emacs 21 or older.  */
 +static Lisp_Object Qget_emacs_mule_file_char;
 +
 +static Lisp_Object Qload_force_doc_strings;
 +
  extern Lisp_Object Qevent_symbol_element_mask;
  extern Lisp_Object Qfile_exists_p;
  
@@@ -906,8 -728,7 +907,9 @@@ Return t if the file exists and loads s
    Lisp_Object handler;
    int safe_p = 1;
    char *fmode = "r";
+   Lisp_Object tmp[2];
 +  int version;
 +
  #ifdef DOS_NT
    fmode = "rt";
  #endif /* DOS_NT */
      Vloads_in_progress = Fcons (found, Vloads_in_progress);
    }
  
+   /* Get the name for load-history. */
+   hist_file_name = (! NILP (Vpurify_flag)
+                     ? Fconcat (2, (tmp[0] = Ffile_name_directory (file),
+                                    tmp[1] = Ffile_name_nondirectory (found),
+                                    tmp))
+                     : found) ;
 +  version = -1;
    if (!bcmp (SDATA (found) + SBYTES (found) - 4,
 -           ".elc", 4))
 +           ".elc", 4)
 +      || (version = safe_to_load_p (fd)) > 0)
      /* Load .elc files directly, but not when they are
         remote and have no handler!  */
      {
          struct stat s1, s2;
          int result;
  
-         GCPRO2 (file, found);
+         GCPRO3 (file, found, hist_file_name);
  
 -        if (!safe_to_load_p (fd))
 +        if (version < 0
 +            && ! (version = safe_to_load_p (fd)))
            {
              safe_p = 0;
              if (!load_dangerous_libraries)
    load_descriptor_list
      = Fcons (make_number (fileno (stream)), load_descriptor_list);
    load_in_progress++;
 -  readevalloop (Qget_file_char, stream, hist_file_name,
 -              Feval, 0, Qnil, Qnil, Qnil, Qnil);
 +  if (! version || version >= 22)
-     readevalloop (Qget_file_char, stream,
-                 (! NILP (Vpurify_flag) ? file : found),
++    readevalloop (Qget_file_char, stream, hist_file_name,
 +                Feval, 0, Qnil, Qnil, Qnil, Qnil);
 +  else
 +    {
 +      /* We can't handle a file which was compiled with
 +       byte-compile-dynamic by older version of Emacs.  */
 +      specbind (Qload_force_doc_strings, Qt);
-       readevalloop (Qget_emacs_mule_file_char, stream, file, Feval,
++      readevalloop (Qget_emacs_mule_file_char, stream, hist_file_name, Feval,
 +                  0, Qnil, Qnil, Qnil, Qnil);
 +    }
    unbind_to (count, Qnil);
  
-   /* Run any load-hooks for this file.  */
-   temp = Fassoc (file, Vafter_load_alist);
-   if (!NILP (temp))
-     Fprogn (Fcdr (temp));
+   /* Run any eval-after-load forms for this file */
+   if (NILP (Vpurify_flag)
+       && (!NILP (Ffboundp (Qdo_after_load_evaluation))))
+     call1 (Qdo_after_load_evaluation, hist_file_name) ;
    UNGCPRO;
  
    if (saved_doc_string)
@@@ -1581,8 -1396,16 +1589,14 @@@ readevalloop (readcharfun, stream, sour
    record_unwind_protect (readevalloop_1, load_convert_to_unibyte ? Qt : Qnil);
    load_convert_to_unibyte = !NILP (unibyte);
  
 -  readchar_backlog = -1;
 -
    GCPRO4 (sourcename, readfun, start, end);
  
+   /* Try to ensure sourcename is a truename, except whilst preloading. */
+   if (NILP (Vpurify_flag)
+       && !NILP (sourcename) && Ffile_name_absolute_p (sourcename)
+       && (!NILP (Ffboundp (Qfile_truename))))
+     sourcename = call1 (Qfile_truename, sourcename) ;
    LOADHIST_ATTACH (sourcename);
  
    continue_reading_p = 1;
diff --cc src/macfns.c
Simple merge
diff --cc src/macgui.h
Simple merge
diff --cc src/macterm.c
Simple merge
diff --cc src/minibuf.c
Simple merge
diff --cc src/process.c
Simple merge
diff --cc src/search.c
Simple merge
diff --cc src/w32fns.c
Simple merge
diff --cc src/w32term.c
Simple merge
diff --cc src/window.c
Simple merge
diff --cc src/xdisp.c
Simple merge
diff --cc src/xfaces.c
index 2b2f1620133822156c7c1b3c6c7c168457e90e07,df303e401fd75b4d8049b665aac45087dc8fbbc3..9adc9218f6d7e44b1e3d33e97115ab7b127fb06b
@@@ -7485,10 -7070,10 +7484,10 @@@ realize_default_face (f
    xassert (lface_fully_specified_p (XVECTOR (lface)->contents));
    check_lface (lface);
    bcopy (XVECTOR (lface)->contents, attrs, sizeof attrs);
 -  face = realize_face (c, attrs, 0, NULL, DEFAULT_FACE_ID);
 +  face = realize_face (c, attrs, DEFAULT_FACE_ID);
  
  #ifdef HAVE_WINDOW_SYSTEM
- #ifdef HAVE_X_WINDOWS  
+ #ifdef HAVE_X_WINDOWS
    if (face->font != FRAME_FONT (f))
      /* As the font specified for the frame was not acceptable as a
         font for the default face (perhaps because auto-scaled fonts
diff --cc src/xfns.c
Simple merge
diff --cc src/xmenu.c
Simple merge
diff --cc src/xterm.c
Simple merge
diff --cc src/xterm.h
Simple merge