changeset 124:9b50b4588a93 r20-1b15

Import from CVS: tag r20-1b15
author cvs
date Mon, 13 Aug 2007 09:26:39 +0200
parents c77884c6318d
children 8b0638b347ec
files CHANGES-beta ChangeLog PROBLEMS etc/AIX.DUMP etc/INTERVIEW etc/LNEWS etc/MH-E-ONEWS etc/NEWS etc/README etc/echo.msg etc/ledit.l etc/news.texi etc/sperber.xpm.Z etc/sperberm.xpm.Z etc/thiessel.xpm.Z etc/thiesselm.xpm.Z etc/ulimit.hack lisp/ChangeLog lisp/calendar/appt.el lisp/comint/telnet.el lisp/custom/ChangeLog lisp/custom/cus-edit.el lisp/custom/cus-face.el lisp/custom/custom.el lisp/custom/wid-browse.el lisp/custom/wid-edit.el lisp/custom/widget-example.el lisp/custom/widget.el lisp/edebug/edebug.el lisp/emulators/crisp.el lisp/games/xmine.el lisp/gnus/ChangeLog lisp/gnus/gnus-art.el lisp/gnus/gnus-msg.el lisp/gnus/gnus-sum.el lisp/gnus/gnus.el lisp/gnus/md5.el lisp/gnus/message.el lisp/gnus/nnweb.el lisp/modes/list-mode.el lisp/modes/make-mode.el lisp/modes/outl-mouse.el lisp/packages/apropos.el lisp/packages/cu-edit-faces.el lisp/packages/font-lock.el lisp/packages/ispell.el lisp/packages/paren.el lisp/packages/ps-print.el lisp/packages/vc.el lisp/prim/about.el lisp/prim/auto-autoloads.el lisp/prim/cus-start.el lisp/prim/custom-load.el lisp/prim/loadup.el lisp/prim/simple.el lisp/prim/sound.el lisp/tm/tm-vm.el lisp/utils/detached-minibuf.el lisp/utils/highlight-headers.el lisp/utils/id-select.el lisp/utils/live-icon.el lisp/version.el lisp/w3/ChangeLog lisp/w3/url-cache.el lisp/w3/url-cookie.el lisp/w3/url-gw.el lisp/w3/url-irc.el lisp/w3/url-vars.el lisp/w3/url.el lisp/w3/w3-display.el lisp/w3/w3-vars.el man/custom.texi man/gnus.texi man/message.texi man/tm/tm-vm-en.texi man/widget.texi src/ChangeLog src/Makefile.in.in src/event-Xt.c src/events.c src/fileio.c src/glyphs-x.c src/glyphs.c src/glyphs.h src/linuxplay.c src/ntproc.c tests/auc-tex-test
diffstat 87 files changed, 4512 insertions(+), 11742 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES-beta	Mon Aug 13 09:26:04 2007 +0200
+++ b/CHANGES-beta	Mon Aug 13 09:26:39 2007 +0200
@@ -1,4 +1,14 @@
 							-*- indented-text -*-
+to 20.1 beta15
+-- Restoration of zawinski features in telnet.el.
+-- paren.el & ps-print.el customized
+-- Gnus-5.4.45
+-- W3-3.0.82
+-- xmine.el-1.7
+-- Crisp.el-1.17
+-- miscellaneous bug fixes
+-- Custom-1.84
+
 to 20.1 beta14
 -- about.el hacking
 -- W3-3.0.81
--- a/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -1,3 +1,18 @@
+Sat Apr 12 20:11:08 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.1-b15 is released.
+
+Sat Apr 12 09:01:32 1997  Hrvoje Niksic <hniksic@srce.hr>
+	* PROBLEMS: I have cleaned up a bit the PROBLEMS file, by:
+	1) changing it into sections -- there is now a section for building,
+	   running and compatibility problems
+
+	2) removing some obviously obsolete entries -- e.g. those pertaining
+	   to Emacs 18, etc. --> size is off by 20K
+
+	3) Rearranging the entries by relevance.  I have tried to put the most
+	   relevant entries in front.
+	
 Thu Apr 10 19:07:26 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 20.1-b14 is released.  (Beta 13 was skipped).
--- a/PROBLEMS	Mon Aug 13 09:26:04 2007 +0200
+++ b/PROBLEMS	Mon Aug 13 09:26:39 2007 +0200
@@ -2,7 +2,11 @@
 This file describes various problems that have been encountered
 in compiling, installing and running XEmacs.
 
-(synched up with: 19.30)
+This file is large, but we have tried to sort the entries by their
+respective relevance for XEmacs, but may have not succeeded completely
+in that task.  Try finding the things you need using one of the search
+commands XEmacs provides (e.g. `C-s').
+
 (updated for 20.1)
 
 * Watch out for .emacs file
@@ -11,1018 +15,9 @@
 invoke XEmacs with the `-q' option and see if you can repeat the
 problem.
 
-* "Symbol's value as variable is void: unread-command-char".
-* "Wrong type argument: arrayp, #<keymap 143 entries>"
-* "Wrong type argument: stringp, [#<keypress-event return>]"
-
-There are a few incompatible changes in XEmacs, and these are the
-symptoms.  Some of the emacs-lisp code you are running needs to be
-updated to be compatible with XEmacs.
-
-The code should not treat keymaps as arrays (use `define-key', etc.),
-should not use obsolete variables like `unread-command-char' (use
-`unread-command-event').  Many (most) of the new ways of doing things
-are compatible in GNU Emacs and XEmacs.
-
-Modern Emacs packages (Gnus, VM, etc) are written cleanly, as to
-support GNU Emacs and XEmacs.  We have provided modified versions of
-several popular emacs packages (dired, etc) which are compatible with
-this version of emacs.  Check to make sure you have not set your
-load-path so that your private copies of these packages are being
-found before the versions in the lisp directory.
-
-Make sure that your load-path and your $EMACSLOADPATH environment
-variable are not pointing at an Emacs18 lisp directory.  This will
-cripple emacs.
-
-* On Irix, I don't see the toolbar icons and I'm getting lots of
-  entries in the warnings buffer.
-
-SGI ships a really old Xpm library in /usr/lib which does not work at
-all well with XEmacs.  The solution is to install your own copy of the
-latest version of Xpm somewhere and then use the --site-includes and
---site-libraries flags to tell configure where to find it.
-
-* On Digital UNIX, the DEC C compiler might have a problem compiling
-  some files.
-
-In particular, src/extents.c and src/faces.c might cause the DEC C
-compiler to abort.  When this happens: cd src, compile the files by
-hand, cd .., and redo the "make" command.  When recompiling the files by
-hand, use the old C compiler for the following versions of Digital UNIX:
-  - V3.n: Remove "-migrate" from the compile command.
-  - V4.n: Add "-oldc" to the compile command.
-
-* On HPUX, the HP C compiler might have a problem compiling some files
-  with optimization.
-
-Richard Cognot <cognot@ensg.u-nancy.fr> writes:
-
-  Had to drop once again to level 2 optimization, at least to
-  compile lstream.c. Otherwise, I get a "variable is void: \if"
-  problem while dumping (this is a problem I already reported
-  with vanilla hpux 10.01 and 9.07, which went away after
-  applying patches for the C compiler). Trouble is I still
-  haven't found the same patch for hpux 10.10, and I don't
-  remember the patch numbers. I think potential XEmacs builders
-  on HP should be warned about this.
-
-* On HPUX, you get "poll: Interrupted system call" message in the window
-  where XEmacs was launched.
-
-Richard Cognot <cognot@ensg.u-nancy.fr> writes:
-
-  I get a very strange problem when linking libc.a
-  dynamically: every event (mouse, keyboard, expose...) results
-  in a "poll: Interrupted system call" message in the window
-  where XEmacs was launched. Forcing a static link of libc.a
-  alone by adding /usr/lib/libc.a at the end of the link line
-  solves this. Note that my 9.07 build of 19.14b17 and my (old)
-  build of 19.13 both exhibit the same behaviour. I've tried
-  various hpux patches to no avail. If this problem cannot be
-  solved before the release date, binary kits for HP *must* be
-  linked statically against libc, otherwise this problem will
-  show up. (This is directed at whoever will volunteer for this
-  kit, as I won't be available to do it, unless 19.14 gets
-  delayed until mid-june ;-). I think this problem will be an FAQ
-  soon after the release otherwise.
-
-* Native cc on SCO OpenServer 5 is now OK.  Icc may still throw you
-  a curve.  Here is what Robert Lipe <robertl@arnet.com> says:
-
-Unlike XEmacs 19.13, building with the native cc on SCO OpenServer 5 
-now produces a functional binary.   I will typically build this
-configuration for COFF with:
-
-	/path_to_XEmacs_source/configure --with-gcc=no \
-	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
-	  --with-xpm --with-xface --with-sound=nas
-
-This version now supports ELF builds.  I highly recommend this to 
-reduce the in-core footprint of XEmacs.  This is now how I compile 
-all my test releases.  Build it like this:
-
-	/path_to_XEmacs_source/configure --with-gcc=no \
-	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
-	  --with-xpm --with-xface --with-sound=nas --dynamic
-
-The compiler known as icc [ supplied with the OpenServer 5 Development 
-System ] generates a working binary, but it takes forever to generate
-XEmacs.  ICC also whines more about the code than /bin/cc does.  I do
-believe all its whining is legitimate, however.    Note that you do
-have to 'cd src ; make  LD=icc' to avoid linker errors.
-
-The way I handle the build procedure is:
-
-	/path_to_XEmacs_source/configure --with-gcc=no \
-	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
-	  --with-xpm --with-xface --with-sound=nas --dynamic --compiler="icc"
-
-*NOTE* I have the xpm, xface, and audio libraries and includes in 
-	/usr/local/lib, /usr/local/include.  If you don't have these,
-	don't include the "--with-*" arguments in any of my examples.
-
-In previous versions of XEmacs, you had to override the defaults while 
-compiling font-lock.o and extents.o when building with icc.  This seems
-to no longer be true, but I'm including this old information in case it
-resurfaces.  The process I used was:
-
-	make -k    
-	[ procure pizza, beer, repeat ] 
-	cd src
-	make CC="icc -W0,-mP1COPT_max_tree_size=3000" font-lock.o extents.o
-	make LD=icc
-
-If you want sound support, get the tls566 supplement from 
-ftp.sco.com:/TLS or any of its mirrors.  It works just groovy 
-with XEmacs.
-
-The M-x manual-entry is known not to work.  If you know Lisp and would
-like help in making it work, e-mail me at <robertl@dgii.com>
-
-In earlier releases, gnuserv/gnuclient/gnudoit would open a frame 
-just fine, but the client would lock up and the server would
-terminate when you used C-x # to close the frame.   This is now 
-fixed in XEmacs.
-
-In etc/ there are two files of note. emacskeys.sco and emacsstrs.sco.
-The comments at the top of emacskeys.sco describe its function, and
-the emacstrs.sco is a suitable candidate for /usr/lib/keyboard/strings
-to take advantage of the keyboard map in emacskeys.sco.
-
-* Don't use -O2 with gcc 2.7.2 under Linux without also using
-  -fno-strength-reduce.
-
-gcc will generate incorrect code otherwise.  This bug is present in at
-least 2.6.x and 2.7.[0-2].  This bug has been fixed in GCC 2.7.2.1 and
-later.
-
-* Under some versions of OSF XEmacs runs fine if built without
-optimization but will crash randomly if built with optimization.
-Using 'cc -g' is not sufficient to eliminate all optimization.  Try
-'cc -g -O0' instead.
-
-* On HP/UX configure selects gcc even though it isn't actually present.
-
-Some versions of SoftBench have an executable called 'gcc' that is not
-actually the GNU C compiler.  Use the --with-gcc=no flag when running
-configure.
-
-* When Emacs tries to ring the bell, you get an error like
-
-	audio: sst_open: SETQSIZE" Invalid argument
-	audio: sst_close: SETREG MMR2, Invalid argument
-
-you have probably compiled using an ANSI C compiler, but with non-ANSI include
-files.  In particular, on Suns, the file /usr/include/sun/audioio.h uses the
-_IOW macro to define the constant AUDIOSETQSIZE.  _IOW in turn uses a K&R
-preprocessor feature that is now explicitly forbidden in ANSI preprocessors,
-namely substitution inside character constants.  All ANSI C compilers must 
-provide a workaround for this problem.  Lucid's C compiler is shipped with a 
-new set of system include files.  If you are using GCC, there is a script
-called fixincludes that creates new versions of some system include files that
-use this obsolete feature.
-
-* The `Alt' key doesn't behave as `Meta' when running DECwindows.
-
-The default DEC keyboard mapping has the Alt keys set up to generate the
-keysym `Multi_key', which has a meaning to xemacs which is distinct from that
-of the `Meta_L' and `Meta-R' keysyms.  A second problem is that certain keys
-have the Mod2 modifier attached to them for no adequately explored reason.
-The correct fix is to pass this file to xmodmap upon starting X:
-
-	clear mod2
-	keysym Multi_key = Alt_L
-	add mod1 = Alt_L
-	add mod1 = Alt_R
-
-* I get complaints about the mapping of my HP keyboard at startup, but I
-  haven't changed anything.
-
-The default HP keymap is set up to have Mod1 assigned to two different keys:
-Meta_L and Mode_switch (even though there is not actually a Mode_switch key on
-the keyboard -- it uses an "imaginary" keycode.)  There actually is a reason
-for this, but it's not a good one.  The correct fix is to execute this command
-upon starting X:
-
-	xmodmap -e 'remove mod1 = Mode_switch'
-
-* I have focus problems when I use `M-o' to switch to another screen without
-  using the mouse.
-
-The focus issues with a program like XEmacs, which has multiple homogeneous
-top-level windows, are very complicated, and as a result, most window managers
-don't implement them correctly.
-
-The R4/R5 version of twm (and all of its descendants) had buggy focus
-handling; there is a patch in .../xemacs/etc/twm-patch which fixes this.
-Sufficiently recent versions of tvtwm do not need this patch, but most other
-versions of twm do.  If you need to apply this patch, please try to get it
-integrated by the maintainer of whichever version of twm you're using.
-
-In addition, if you're using twm, make sure you have not specified
-"NoTitleFocus" in your .tvtwmrc file.  The very nature of this option makes
-twm do some illegal focus tricks, even with the patch.
-
-It is known that olwm and olvwm are buggy, and in different ways.  If you're 
-using click-to-type mode, try using point-to-type, or vice versa.
-
-In older versions of NCDwm, one could not even type at XEmacs windows.  This
-has been fixed in newer versions (2.4.3, and possibly earlier).
-
-(Many people suggest that XEmacs should warp the mouse when focusing on
-another screen in point-to-type mode.  This is not ICCCM-compliant behavior.
-Implementing such policy is the responsibility of the window manager itself,
-it is not legal for a client to do this.)
-
-* My buffers are full of \000 characters or otherwise corrupt.
-
-Some compilers have trouble with gmalloc.c and ralloc.c; try recompiling
-without optimization.  If that doesn't work, try recompiling with
-SYSTEM_MALLOC defined, and/or with REL_ALLOC undefined.
-
-* Some packages that worked before now cause the error
-  Wrong type argument: arrayp, #<face ... >
-
-Code which uses the `face' accessor functions must be recompiled with xemacs
-19.9 or later.  The functions whose callers must be recompiled are: face-font,
-face-foreground, face-background, face-background-pixmap, and face-underline-p.
-The .elc files generated by version 19.9 will work in 19.6 and 19.8, but older
-.elc files which contain calls to these functions will not work in 19.9.
-
-* On Solaris 2.* I get undefined symbols from libcurses.a.
-
-You probably have /usr/ucblib/ on your LD_LIBRARY_PATH.  Do the link with
-LD_LIBRARY_PATH unset.
-
-* On Solaris 2.* I cannot make alloc.o, glyphs.o or process.o.
-
-The SparcWorks C compiler may have difficulty building those modules
-with optimization level -xO4.  Try using only "-fast" optimization
-for just those modules.  (Or use gcc).
-
-* I don't have `xmkmf' and `imake' on my HP.
-
-You can get these standard X tools by anonymous FTP to hpcvaaz.cv.hp.com.
-Essentially all X programs need these.
-
-* When emacs starts up, I get lots of warnings about unknown keysyms.
-
-If you are running the prebuilt binaries, the Motif library expects to find
-certain thing in the XKeysymDB file.  This file is normally in /usr/lib/X11/
-or in /usr/openwin/lib/.  If you keep yours in a different place, set the
-environment variable $XKEYSYMDB to point to it before starting emacs.  If 
-you still have the problem after doing that, perhaps your version of X is 
-too old.  There is a copy of the MIT X11R5 XKeysymDB file in the emacs `etc'
-directory.  Try using that one.
-
-* My X resources used to work, and now some of them are being ignored.
-
-Check the resources in .../etc/Emacs.ad (which is the same as the file
-sample.Xdefaults).  Perhaps some of the default resources built in to 
-emacs are now overriding your existing resources.  Copy and edit the
-resources in Emacs.ad as necessary.
-
-* Solaris 2.3 /bin/sh coredumps during configuration.
-
-This only occurs if you have LANG != C.  This is a known bug with
-/bin/sh fixed by installing Patch-ID# 101613-01.
-
-* "Cannot find callback list" messages from dialog boxes on HPUX, in
-  Emacs built with Motif.
-
-This problem resulted from a bug in GCC 2.4.5.  Newer GCC versions
-such as 2.7.0 fix the problem.
-
-* On Irix 6.0, make tries (and fails) to build a program named unexelfsgi
-
-A compiler bug inserts spaces into the string "unexelfsgi . o"
-in src/Makefile.  Edit src/Makefile, after configure is run,
-find that string, and take out the spaces.
-
-Compiler fixes in Irix 6.0.1 should eliminate this problem.
-
-* With certain fonts, when the cursor appears on a character, the
-  character doesn't appear--you get a solid box instead.
-
-One user on a Linux system reported that this problem went away with
-installation of a new X server.  The failing server was XFree86 3.1.1.
-XFree86 3.1.2 works.
-
-* On SunOS 4.1.3, Emacs unpredictably crashes in _yp_dobind_soft.
-
-This happens if you configure Emacs specifying just `sparc-sun-sunos4'
-on a system that is version 4.1.3.  You must specify the precise
-version number (or let configure figure out the configuration, which
-it can do perfectly well for SunOS).
-
-* On SunOS 4, Emacs processes keep going after you kill the X server
-  (or log out, if you logged in using X).
-
-Someone reported that recompiling with GCC 2.7.0 fixed this problem.
-
-* On AIX 4, some programs fail when run in a Shell buffer
-  with an error message like   No terminfo entry for "unknown".
-
-On AIX, many terminal type definitions are not installed by default.
-`unknown' is one of them.  Install the "Special Generic Terminal
-Definitions" to make them defined.
-
-* On SunOS, you get linker errors
-   ld: Undefined symbol 
-      _get_wmShellWidgetClass
-      _get_applicationShellWidgetClass
-
-The fix to this is to install patch 100573 for OpenWindows 3.0
-or link libXmu statically.
-
-* On AIX 4.1.2, linker error messages such as
-  ld: 0711-212 SEVERE ERROR: Symbol .__quous, found in the global symbol table
-	of archive /usr/lib/libIM.a, was not defined in archive member shr.o.
-
-This is a problem in libIM.a.  You can work around it by executing
-these shell commands in the src subdirectory of the directory where
-you build Emacs:
-
-    cp /usr/lib/libIM.a .
-    chmod 664 libIM.a
-    ranlib libIM.a
-
-Then change -lIM to ./libIM.a in the command to link temacs (in
-Makefile).
-
-* Emacs exits with "X protocol error" when run with an X server for
-  Windows.
-
-A certain X server for Windows had a bug which caused this.
-Supposedly the newer 32-bit version of this server doesn't have the
-problem.
-
-* A position you specified in .Xdefaults is ignored, using twm.
-
-twm normally ignores "program-specified" positions.
-You can tell it to obey them with this command in your `.twmrc' file:
-
-  UsePPosition	"on"		#allow clents to request a position
-
-* Compiling lib-src says there is no rule to make test-distrib.c.
-
-This results from a bug in a VERY old version of GNU Sed.  To solve
-the problem, install the current version of GNU Sed, then rerun
-Emacs's configure script.
-
-* On Sunos 4.1.1, there are errors compiling sysdep.c.
-
-If you get errors such as
-
-    "sysdep.c", line 2017: undefined structure or union
-    "sysdep.c", line 2017: undefined structure or union
-    "sysdep.c", line 2019: nodename undefined
-
-This can result from defining LD_LIBRARY_PATH.  It is very tricky
-to use that environment variable with Emacs.  The Emacs configure
-script links many test programs with the system libraries; you must
-make sure that the libraries available to configure are the same
-ones available when you build Emacs.
-
-* The right Alt key works wrong on German HP keyboards (and perhaps
-  other non-English HP keyboards too).
-
-This is because HPUX defines the modifiers wrong in X.  Here is a
-shell script to fix the problem; be sure that it is run after VUE
-configures the X server.
-
-    xmodmap 2> /dev/null - << EOF
-    keysym Alt_L = Meta_L
-    keysym Alt_R = Meta_R
-    EOF
-
-    xmodmap - << EOF
-    clear mod1
-    keysym Mode_switch = NoSymbol
-    add mod1 = Meta_L
-    keysym Meta_R = Mode_switch
-    add mod2 = Mode_switch
-    EOF
-
-* The Emacs window disappears when you type M-q.
-
-Some versions of the Open Look window manager interpret M-q as a quit
-command for whatever window you are typing at.  If you want to use
-Emacs with that window manager, you should try to configure the window
-manager to use some other command.   You can disable the
-shortcut keys entirely by adding this line to ~/.OWdefaults:
-
-    OpenWindows.WindowMenuAccelerators: False
-
-* Emacs does not notice when you release the mouse.
-
-There are reports that this happened with (some) Microsoft mice and
-that replacing the mouse made it stop.
-
-* Trouble using ptys on IRIX, or running out of ptys.
-
-The program mkpts (which may be in `/usr/adm' or `/usr/sbin') needs to
-be set-UID to root, or non-root programs like Emacs will not be able
-to allocate ptys reliably.
-
-* On Irix 5.2, unexelfsgi.c can't find cmplrs/stsupport.h.
-
-The file cmplrs/stsupport.h was included in the wrong file set in the
-Irix 5.2 distribution.  You can find it in the optional fileset
-compiler_dev, or copy it from some other Irix 5.2 system.  A kludgy
-workaround is to change unexelfsgi.c to include sym.h instead of
-syms.h.
-
-* Slow startup on Linux.
-
-People using systems based on the Linux kernel sometimes report that
-startup takes 10 to 15 seconds longer than `usual'.
-
-This is because Emacs looks up the host name when it starts.
-Normally, this takes negligible time; the extra delay is due to
-improper system configuration.  This problem can occur for both
-networked and non-networked machines.
-
-Here is how to fix the configuration.  It requires being root.
-
-** Networked Case
-
-First, make sure the files `/etc/hosts' and `/etc/host.conf' both
-exist.  The first line in the `/etc/hosts' file should look like this
-(replace HOSTNAME with your host name):
-
-    127.0.0.1      localhost HOSTNAME
-
-Also make sure that the `/etc/host.conf' files contains the following
-lines:
-
-    order hosts, bind 
-    multi on
-
-Any changes, permanent and temporary, to the host name should be
-indicated in the `/etc/hosts' file, since it acts a limited local
-database of addresses and names (e.g., some SLIP connections
-dynamically allocate ip addresses).
-
-** Non-Networked Case
-
-The solution described in the networked case applies here as well.
-However, if you never intend to network your machine, you can use a
-simpler solution: create an empty `/etc/host.conf' file.  The command
-`touch /etc/host.conf' suffices to create the file.  The `/etc/hosts'
-file is not necessary with this approach.
-
-* On Solaris 2.4, Dired hangs and C-g does not work.  Or Emacs hangs
-  forever waiting for termination of a subprocess that is a zombie.
-
-casper@fwi.uva.nl says the problem is in X11R6.  Rebuild libX11.so
-after changing the file xc/config/cf/sunLib.tmpl.  Change the lines
-
-    #if ThreadedX
-    #define SharedX11Reqs -lthread
-    #endif
-
-to:
-
-    #if OSMinorVersion < 4
-    #if ThreadedX
-    #define SharedX11Reqs -lthread
-    #endif
-    #endif
-
-Be sure also to edit x/config/cf/sun.cf so that OSMinorVersion is 4
-(as it should be for Solaris 2.4).  The file has three definitions for
-OSMinorVersion: the first is for x86, the second for SPARC under
-Solaris, and the third for SunOS 4.  Make sure to update the
-definition for your type of machine and system.
-
-Then do `make Everything' in the top directory of X11R6, to rebuild
-the makefiles and rebuild X.  The X built this way work only on
-Solaris 2.4, not on 2.3.
-
-For multithreaded X to work it necessary to install patch
-101925-02 to fix problems in header files [2.4].  You need
-to reinstall gcc or re-run just-fixinc after installing that
-patch.
-
-However, Frank Rust <frust@iti.cs.tu-bs.de> used a simpler solution:
-he changed
-    #define ThreadedX          YES
-to
-    #define ThreadedX          NO
-in sun.cf and did `make World' to rebuild X11R6.  Removing all
-`-DXTHREAD*' flags and `-lthread' entries from lib/X11/Makefile and
-typing 'make install' in that directory also seemed to work.
+* Problems with building XEmacs
 
-* With M-x enable-flow-control, you need to type C-\ twice to do
-  incremental search--a single C-\ gets no response.
-
-This has been traced to communicating with your machine via kermit,
-with C-\ as the kermit escape character.  One solution is to use
-another escape character in kermit.  One user did
-
-   set escape-character 17
-
-in his .kermrc file, to make C-q the kermit escape character.
-
-* The Motif version of Emacs paints the screen a solid color.
-
-This has been observed to result from the following X resource:
-
-   Emacs*default.attributeFont:	-*-courier-medium-r-*-*-*-140-*-*-*-*-iso8859-*
-
-That the resource has this effect indicates a bug in something, but we
-do not yet know what.  If it is an Emacs bug, we hope someone can
-explain what the bug is so we can fix it.  In the mean time, removing
-the resource prevents the problem.
-
-* Emacs gets hung shortly after startup, on Sunos 4.1.3.
-
-We think this is due to a bug in Sunos.  The word is that
-one of these Sunos patches fixes the bug:
-
-100075-11  100224-06  100347-03  100482-05  100557-02  100623-03  100804-03  101080-01
-100103-12  100249-09             100496-02  100564-07  100630-02  100891-10  101134-01
-100170-09  100296-04  100377-09  100507-04  100567-04  100650-02  101070-01  101145-01
-100173-10  100305-15  100383-06  100513-04  100570-05  100689-01  101071-03  101200-02
-100178-09  100338-05  100421-03  100536-02  100584-05  100784-01  101072-01  101207-01
-
-We don't know which of these patches really matter.  If you find out
-which ones, please inform bug-gnu-emacs@prep.ai.mit.edu.
-
-* Emacs aborts while starting up, only when run without X.
-
-This problem often results from compiling Emacs with GCC when GCC was
-installed incorrectly.  The usual error in installing GCC is to
-specify --includedir=/usr/include.  Installation of GCC makes
-corrected copies of the system header files.  GCC is supposed to use
-the corrected copies in preference to the original system headers.
-Specifying --includedir=/usr/include causes the original system header
-files to be used.  On some systems, the definition of ioctl in the
-original system header files is invalid for ANSI C and causes Emacs
-not to work.
-
-The fix is to reinstall GCC, and this time do not specify --includedir
-when you configure it.  Then recompile Emacs.  Specifying --includedir
-is appropriate only in very special cases and it should *never* be the
-same directory where system header files are kept.
-
-* The Compose key on a DEC keyboard does not work as Meta key.
-
-This shell command should fix it:
-
-  xmodmap -e 'keycode 0xb1 = Meta_L'
-
-* Regular expressions matching bugs on SCO systems.
-
-On SCO, there are problems in regexp matching when Emacs is compiled
-with the system compiler.  The compiler version is "Microsoft C
-version 6", SCO 4.2.0h Dev Sys Maintenance Supplement 01/06/93; Quick
-C Compiler Version 1.00.46 (Beta).  The solution is to compile with
-GCC.
-
-* On Sunos 4, you get the error ld: Undefined symbol __lib_version.
-
-This is the result of using cc or gcc with the shared library meant
-for acc (the Sunpro compiler).  Check your LD_LIBRARY_PATH and delete
-/usr/lang/SC2.0.1 or some similar directory.
-
-* You can't select from submenus.
-
-On certain systems, mouse-tracking and selection in top-level menus
-works properly with the X toolkit, but neither of them works when you
-bring up a submenu (such as Bookmarks or Compare or Apply Patch, in
-the Files menu).
-
-This works on most systems.  There is speculation that the failure is
-due to bugs in old versions of X toolkit libraries, but no one really
-knows.  If someone debugs this and finds the precise cause, perhaps a
-workaround can be found.
-
-* Unusable default font on SCO 3.2v4.
-
-The Open Desktop environment comes with default X resource settings
-that tell Emacs to use a variable-width font.  Emacs cannot use such
-fonts, so it does not work.
-
-This is caused by the file /usr/lib/X11/app-defaults/ScoTerm, which is
-the application-specific resource file for the `scoterm' terminal
-emulator program.  It contains several extremely general X resources
-that affect other programs besides `scoterm'.  In particular, these
-resources affect Emacs also:
-
-	*Font: -*-helvetica-medium-r-*--12-*-p-*
-	*Background:			scoBackground
-	*Foreground:			scoForeground
-
-The best solution is to create an application-specific resource file for
-Emacs, /usr/lib/X11/app-defaults/Emacs, with the following contents:
-
-	Emacs*Font:	-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
-	Emacs*Background:	white
-	Emacs*Foreground:	black
-
-(or whatever other defaults you prefer).
-
-These resource files are not normally shared across a network of SCO
-machines; you must create the file on each machine individually.
-
-* rcs2log gives you the awk error message "too many fields".
-
-This is due to an arbitrary limit in certain versions of awk.
-The solution is to use gawk (GNU awk).
-
-* Emacs is slow using X11R5 on HP/UX.
-
-This happens if you use the MIT versions of the X libraries--it
-doesn't run as fast as HP's version.  People sometimes use the version
-because they see the HP version doesn't have the libraries libXaw.a,
-libXmu.a, libXext.a and others.  HP/UX normally doesn't come with
-those libraries installed.  To get good performance, you need to
-install them and rebuild Emacs.
-
-* Loading fonts is very slow.
-
-You might be getting scalable fonts instead of precomputed bitmaps.
-Known scalable font directories are "Type1" and "Speedo".  A font
-directory contains scalable fonts if it contains the file
-"fonts.scale".
-
-If this is so, re-order your X windows font path to put the scalable
-font directories last.  See the documentatoin of `xset' for details.
-
-With some X servers, it may be necessary to take the scalable font
-directories out of your path entirely, at least for Emacs 19.26.
-Changes in the future may make this unnecessary.
-
-* On AIX 3.2.4, releasing Ctrl/Act key has no effect, if Shift is down.
-
-Due to a feature of AIX, pressing or releasing the Ctrl/Act key is
-ignored when the Shift, Alt or AltGr keys are held down.  This can
-lead to the keyboard being "control-locked"--ordinary letters are
-treated as control characters.
-
-You can get out of this "control-locked" state by pressing and
-releasing Ctrl/Act while not pressing or holding any other keys.
-
-* display-time causes kernel problems on ISC systems.
-
-Under Interactive Unix versions 3.0.1 and 4.0 (and probably other
-versions), display-time causes the loss of large numbers of STREVENT 
-cells.  Eventually the kernel's supply of these cells is exhausted.
-This makes emacs and the whole system run slow, and can make other 
-processes die, in particular pcnfsd.
-	
-Other emacs functions that communicate with remote processes may have 
-the same problem.  Display-time seems to be far the worst.
-
-The only known fix: Don't run display-time.
-
-* On Solaris, C-x doesn't get through to Emacs when you use the console.
-
-This is a Solaris feature (at least on Intel x86 cpus).  Type C-r
-C-r C-t, to toggle whether C-x gets through to Emacs.
-
-* Error message `Symbol's value as variable is void: x', followed by
-  segmentation fault and core dump.
-
-This has been tracked to a bug in tar!  People report that tar erroneously
-added a line like this at the beginning of files of Lisp code:
-
-   x FILENAME, N bytes, B tape blocks
-
-If your tar has this problem, install GNU tar--if you can manage to
-untar it :-).
-
-* Link failure when using acc on a Sun.
-
-To use acc, you need additional options just before the libraries, such as
-
-   /usr/lang/SC2.0.1/values-Xt.o -L/usr/lang/SC2.0.1/cg87 -L/usr/lang/SC2.0.1
-
-and you need to add -lansi just before -lc.
-
-The precise file names depend on the compiler version, so we
-cannot easily arrange to supply them.
-
-* Link failure on IBM AIX 1.3 ptf 0013.
-
-There is a real duplicate definition of the function `_slibc_free' in
-the library /lib/libc_s.a (just do nm on it to verify).  The
-workaround/fix is:
-
-    cd /lib
-    ar xv libc_s.a NLtmtime.o
-    ar dv libc_s.a NLtmtime.o
-
-* Undefined symbols _dlopen, _dlsym and/or _dlclose on a Sun.
-
-If you see undefined symbols _dlopen, _dlsym, or _dlclose when linking
-with -lX11, compile and link against the file mit/util/misc/dlsym.c in
-the MIT X11R5 distribution.  Alternatively, link temacs using shared
-libraries with s/sunos4shr.h.  (This doesn't work if you use the X
-toolkit.)
-
-If you get the additional error that the linker could not find
-lib_version.o, try extracting it from X11/usr/lib/X11/libvim.a in
-X11R4, then use it in the link.
-
-* In Shell mode, you get a ^M at the end of every line.
-
-This happens to people who use tcsh, because it is trying to be too
-smart.  It sees that the Shell uses terminal type `unknown' and turns
-on the flag to output ^M at the end of each line.  You can fix the
-problem by adding this to your .cshrc file:
-
-    if ($?EMACS) then
-        if ($EMACS == "t") then
-            unset edit 
-            stty  -icrnl -onlcr -echo susp ^Z
-        endif
-    endif
-
-* An error message such as `X protocol error: BadMatch (invalid
-parameter attributes) on protocol request 93'.
-
-This comes from having an invalid X resource, such as
-   emacs*Cursor:   black
-(which is invalid because it specifies a color name for something
-that isn't a color.)
-
-The fix is to correct your X resources.
-
-* Undefined symbols when linking on Sunos 4.1.
-
-If you get the undefined symbols _atowc _wcslen, _iswprint, _iswspace,
-_iswcntrl, _wcscpy, and _wcsncpy, then you need to add -lXwchar after
--lXaw in the command that links temacs.
-
-This problem seems to arise only when the international language
-extensions to X11R5 are installed.
-
-* src/Makefile and lib-src/Makefile are truncated--most of the file missing.
-
-This can happen if configure uses GNU sed version 2.03.  That version
-had a bug.  GNU sed version 2.05 works properly.
-
-* Slow startup on X11R6 with X windows.
-
-If Emacs takes two minutes to start up on X11R6, see if your X
-resources specify any Adobe fonts.  That causes the type-1 font
-renderer to start up, even if the font you asked for is not a type-1
-font.
-
-One way to avoid this problem is to eliminate the type-1 fonts from
-your font path, like this:
-
-	xset -fp /usr/X11R6/lib/X11/fonts/Type1/
-
-* Pull-down menus appear in the wrong place, in the toolkit version of Emacs.
-
-An X resource of this form can cause the problem:
-
-   Emacs*geometry:	80x55+0+0
-
-This resource is supposed to apply, and does apply, to the menus
-individually as well as to Emacs frames.  If that is not what you
-want, rewrite the resource.
-
-To check thoroughly for such resource specifications, use `xrdb
--query' to see what resources the X server records, and also look at
-the user's ~/.Xdefaults and ~/.Xdefaults-* files.
-
-* `make install' fails on install-doc with `Error 141'.
-
-This happens on Ultrix 4.2 due to failure of a pipeline of tar
-commands.  We don't know why they fail, but the bug seems not to be in
-Emacs.  The workaround is to run the shell command in install-doc by
-hand.
-
-* Subprocesses remain, hanging but not zombies, on Sunos 5.3.
-
-A bug in Sunos 5.3 causes Emacs subprocesses to remain after Emacs
-exits.  Sun patch # 101415-02 is part of the fix for this, but it only
-applies to ptys, and doesn't fix the problem with subprocesses
-communicating through pipes.
-
-* Mail is lost when sent to local aliases.
-
-Many emacs mail user agents (VM and rmail, for instance) use the
-sendmail.el library.  This library can arrange for mail to be
-delivered by passing messages to the /usr/lib/sendmail (usually)
-program .  In doing so, it passes the '-t' flag to sendmail, which
-means that the name of the recipient of the message is not on the
-command line and, therefore, that sendmail must parse the message to
-obtain the destination address.
-
-There is a bug in the SunOS4.1.1 and SunOS4.1.3 versions of sendmail.
-In short, when given the -t flag, the SunOS sendmail won't recognize
-non-local (i.e. NIS) aliases.  It has been reported that the Solaris
-2.x versions of sendmail do not have this bug.  For those using SunOS
-4.1, the best fix is to install sendmail V8 or IDA sendmail (which
-have other advantages over the regular sendmail as well).  At the time
-of this writing, these official versions are available:
-
- Sendmail V8 on ftp.cs.berkeley.edu in /ucb/sendmail:
-   sendmail.8.6.9.base.tar.Z (the base system source & documentation)
-   sendmail.8.6.9.cf.tar.Z   (configuration files)
-   sendmail.8.6.9.misc.tar.Z (miscellaneous support programs)
-   sendmail.8.6.9.xdoc.tar.Z (extended documentation, with postscript)
-
- IDA sendmail on vixen.cso.uiuc.edu in /pub:
-   sendmail-5.67b+IDA-1.5.tar.gz
-
-* On AIX, you get this message when running Emacs:
-
-    Could not load program emacs
-    Symbol smtcheckinit in csh is undefined
-    Error was: Exec format error
-
-or this one:
-
-    Could not load program .emacs
-    Symbol _system_con in csh is undefined
-    Symbol _fp_trapsta in csh is undefined
-    Error was: Exec format error
-
-These can happen when you try to run on AIX 3.2.5 a program that was
-compiled with 3.2.4.  The fix is to recompile.
-
-* On AIX, you get this compiler error message:
-
-    Processing include file ./XMenuInt.h
-        1501-106: (S) Include file X11/Xlib.h not found.
-
-This means your system was installed with only the X11 runtime i.d
-libraries.  You have to find your sipo (bootable tape) and install
-X11Dev... with smit.
-
-* You "lose characters" after typing Compose Character key.
-
-This is because the Compose Character key is defined as the keysym
-Multi_key, and Emacs (seeing that) does the proper X11
-character-composition processing.  If you don't want your Compose key
-to do that, you can redefine it with xmodmap.
-
-For example, here's one way to turn it into a Meta key:
-
-    xmodmap -e "keysym Multi_key = Meta_L"
-
-If all users at your site of a particular keyboard prefer Meta to
-Compose, you can make the remapping happen automatically by adding the
-xmodmap command to the xdm setup script for that display.
-
-* C-z just refreshes the screen instead of suspending Emacs.
-
-You are probably using a shell that doesn't support job control, even
-though the system itself is capable of it.  Either use a different shell,
-or set the variable `cannot-suspend' to a non-nil value.
-
-* After running emacs once, subsequent invocations crash.
-
-Some versions of SVR4 have a serious bug in the implementation of the
-mmap () system call in the kernel; this causes emacs to run correctly
-the first time, and then crash when run a second time.
-
-Contact your vendor and ask for the mmap bug fix; in the mean time,
-you may be able to work around the problem by adding a line to your
-operating system description file (whose name is reported by the
-configure script) that reads:
-#define SYSTEM_MALLOC
-This makes Emacs use memory less efficiently, but seems to work around
-the kernel bug.
-
-* Inability to send an Alt-modified key, when Emacs is communicating
-directly with an X server.
-
-If you have tried to bind an Alt-modified key as a command, and it
-does not work to type the command, the first thing you should check is
-whether the key is getting through to Emacs.  To do this, type C-h c
-followed by the Alt-modified key.  C-h c should say what kind of event
-it read.  If it says it read an Alt-modified key, then make sure you
-have made the key binding correctly.
-
-If C-h c reports an event that doesn't have the Alt modifier, it may
-be because your X server has no key for the Alt modifier.  The X
-server that comes from MIT does not set up the Alt modifier by
-default.
-
-If your keyboard has keys named Alt, you can enable them as follows:
-
-    xmodmap -e 'add mod2 = Alt_L'
-    xmodmap -e 'add mod2 = Alt_R'
-
-If the keyboard has just one key named Alt, then only one of those
-commands is needed.  The modifier `mod2' is a reasonable choice if you
-are using an unmodified MIT version of X.  Otherwise, choose any
-modifier bit not otherwise used.
-
-If your keyboard does not have keys named Alt, you can use some other
-keys.  Use the keysym command in xmodmap to turn a function key (or
-some other 'spare' key) into Alt_L or into Alt_R, and then use the
-commands show above to make them modifier keys.
-
-Note that if you have Alt keys but no Meta keys, Emacs translates Alt
-into Meta.  This is because of the great importance of Meta in Emacs.
-
-* `Pid xxx killed due to text modification or page I/O error'
-
-On HP/UX, you can get that error when the Emacs executable is on an NFS
-file system.  HP/UX responds this way if it tries to swap in a page and
-does not get a response from the server within a timeout whose default
-value is just ten seconds.
-
-If this happens to you, extend the timeout period.
-
-* `expand-file-name' fails to work on any but the machine you dumped Emacs on.
-
-On Ultrix, if you use any of the functions which look up information
-in the passwd database before dumping Emacs (say, by using
-expand-file-name in site-init.el), then those functions will not work
-in the dumped Emacs on any host but the one Emacs was dumped on.
-
-The solution?  Don't use expand-file-name in site-init.el, or in
-anything it loads.  Yuck - some solution.
-
-I'm not sure why this happens; if you can find out exactly what is
-going on, and perhaps find a fix or a workaround, please let us know.
-Perhaps the YP functions cache some information, the cache is included
-in the dumped Emacs, and is then inaccurate on any other host.
-
-* On some variants of SVR4, Emacs does not work at all with X.
-
-Try defining BROKEN_FIONREAD in your config.h file.  If this solves
-the problem, please send a bug report to tell us this is needed; be
-sure to say exactly what type of machine and system you are using.
-
-* Emacs fails to understand most Internet host names, even though
-the names work properly with other programs on the same system.
-* Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
-* Gnus can't make contact with the specified host for nntp.
-
-This typically happens on Suns and other systems that use shared
-libraries.  The cause is that the site has installed a version of the
-shared library which uses a name server--but has not installed a
-similar version of the unshared library which Emacs uses.
-
-The result is that most programs, using the shared library, work with
-the nameserver, but Emacs does not.
-
-The fix is to install an unshared library that corresponds to what you
-installed in the shared library, and then relink Emacs.
-
-On SunOS 4.1, simply define HAVE_RES_INIT.
-
-If you have already installed the name resolver in the file libresolv.a,
-then you need to compile Emacs to use that library.  The easiest way to
-do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
-or LIB_STANDARD which uses -lresolv.  Watch out!  If you redefine a macro
-that is already in use in your configuration to supply some other libraries,
-be careful not to lose the others.
-
-Thus, you could start by adding this to config.h:
-
-#define LIBS_SYSTEM -lresolv
-
-Then if this gives you an error for redefining a macro, and you see that
-the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
-again to say this:
-
-#define LIBS_SYSTEM -lresolv -lfoo -lbar
-
-* On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
-
-    /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment 
-
-The problem is in the Sun shared C library, not in GNU ld.
-
-The solution is to install Patch-ID# 100267-03 from Sun.
-
-* SunOS 4.1.2: undefined symbol _get_wmShellWidgetClass
-
-  Apparently the version of libXmu.so.a that Sun ships is hosed: it's missing
-  some stuff that is in libXmu.a (the static version).  Sun has a patch for 
-  this, but a workaround is to use the static version of libXmu, by changing
-  the link command from "-lXmu" to "-Bstatic -lXmu -Bdynamic".  If you have
-  OpenWindows 3.0, ask Sun for these patches:
-    100512-02       4.1.x OpenWindows 3.0 libXt Jumbo patch
-    100573-03       4.1.x OpenWindows 3.0 undefined symbols with shared libXmu
-
-* Random other SunOS 4.1.[12] link errors.
-
-  The X headers and libraries that Sun ships in /usr/{include,lib}/X11 are
-  broken.  Use the ones in /usr/openwin/{include,lib} instead.
-
-* Bus errors on startup when compiled with Sun's "acc" (in the routine
-  make_string_internal() called from initialize_environment_alist())
-
-  The Sun ANSI compiler doesn't place uninitialized static variables in BSS
-  space like other compilers do.  This breaks emacs.  If you want to use acc,
-  you need to make the file "lastfile.o" be the *first* file in the link 
-  command.  Better yet, use Lucid C or GCC.
-
-* The compiler generates lots and lots of syntax errors.
+** The compiler generates lots and lots of syntax errors.
 
 Are you using an ANSI C compiler, like lcc or gcc?  The SunOS 4.1 bundled cc
 is not ANSI.
@@ -1031,167 +26,10 @@
 compiler, then you will have to hack the automatically-generated makefile in
 the `lwlib' directory by hand to make it use an ANSI compiler.
 
-* When using gcc, you get the error message "undefined symbol __fixunsdfsi".
-* When using gcc, you get the error message "undefined symbol __main".
-
-This means that you need to link with the gcc library.  It may be called
-"gcc-gnulib" or "libgcc.a"; figure out where it is, and define LIB_GCC in
-config.h to point to it.
-
-It may also work to use the GCC version of `ld' instead of the standard one.
-
-* When compiling with X11, you get "undefined symbol _XtStrings".
-
-This means that you are trying to link emacs against the X11r4 version of
-libXt.a, but you have compiled either Emacs or the code in the lwlib
-subdirectory with the X11r5 header files.  That doesn't work.
-
-Remember, you can't compile lwlib for r4 and emacs for r5, or vice versa.
-They must be in sync.
-
-* Self documentation messages are garbled.
-
-This means that the file `etc/DOC-...' doesn't properly correspond
-with the Emacs executable.  Redumping Emacs and then installing the
-corresponding pair of files should fix the problem.
-
-* Trouble using ptys on AIX.
-
-People often install the pty devices on AIX incorrectly.
-Use `smit pty' to reinstall them properly.
-
-* Shell mode on HP/UX gives the message, "`tty`: Ambiguous".
-
-christos@theory.tn.cornell.edu says:
-
-The problem is that in your .cshrc you have something that tries to
-execute `tty`. If you are not running the shell on a real tty then 
-tty will print "not a tty". Csh expects one word in some places, 
-but tty is giving it back 3.
-
-The solution is to add a pair of quotes around `tty` to make it a single
-word: 
-
-if (`tty` == "/dev/console") 
-
-should be changed to:
-
-if ("`tty`" == "/dev/console") 
-
-Even better, move things that set up terminal sections out of .cshrc
-and into .login.
-
-* With process-connection-type set to t, each line of subprocess output is
-  terminated with a ^M, making ange-ftp and GNUS not work.
-
-On SunOS systems, this problem has been seen to be a result of an incomplete
-installation of gcc 2.2 which allowed some non-ANSI compatible include files
-into the compilation.  In particular this affected virtually all ioctl() calls.
-
-* Once you pull down a menu from the menubar, it won't go away.
-
-It has been claimed that this is caused by a bug in certain very old (1990?)
-versions of the twm window manager.  It doesn't happen with recent vintages,
-or with other window managers.
-
-* Emacs ignores the "help" key when running OLWM.
-
-OLWM grabs the help key, and retransmits it to the appropriate client using
-XSendEvent.  Allowing emacs to react to synthetic events is a security hole,
-so this is turned off by default.  You can enable it by setting the variable
-x-allow-sendevents to t.  You can also cause fix this by telling OLWM to not
-grab the help key, with the null binding "OpenWindows.KeyboardCommand.Help:".
-
-* Using X11, control-shift-leftbutton makes Emacs hang.
-
-Use the shell command `xset bc' to make the old X Menu package work.
-
-* Emacs running under X11 does not handle mouse clicks.
-* `emacs -geometry 80x20' finds a file named `80x20'.
-
-One cause of such problems is having (setq term-file-prefix nil) in
-your .emacs file.  Another cause is a bad value of EMACSLOADPATH in
-the environment.
-
-* Emacs gets error message from linker on Sun.
-
-If the error message says that a symbol such as `f68881_used' or
-`ffpa_used' or `start_float' is undefined, this probably indicates
-that you have compiled some libraries, such as the X libraries, 
-with a floating point option other than the default.
-
-It's not terribly hard to make this work with small changes in
-crt0.c together with linking with Fcrt1.o, Wcrt1.o or Mcrt1.o.
-However, the easiest approach is to build Xlib with the default
-floating point option: -fsoft to decide at run time what hardware 
-is available.
-
-* Keyboard input gets confused after a beep when using a DECserver
-  as a concentrator.
-
-This problem seems to be a matter of configuring the DECserver to use
-7 bit characters rather than 8 bit characters.
-
-* M-x shell persistently reports "Process shell exited abnormally with code 1".
-
-This happened on Suns as a result of what is said to be a bug in Sunos
-version 4.0.x.  The only fix was to reboot the machine. 
-
-* Programs running under terminal emulator do not recognize `emacs'
-  terminal type.
-
-The cause of this is a shell startup file that sets the TERMCAP
-environment variable.  The terminal emulator uses that variable to
-provide the information on the special terminal type that Emacs
-emulates.
-
-Rewrite your shell startup file so that it does not change TERMCAP
-in such a case.  You could use the following conditional which sets
-it only if it is undefined.
-
-    if ( ! ${?TERMCAP} ) setenv TERMCAP ~/my-termcap-file
-
-Or you could set TERMCAP only when you set TERM--which should not
-happen in a non-login shell.
-
-* Problem with remote X server on Suns.
-
-On a Sun, running Emacs on one machine with the X server on another
-may not work if you have used the unshared system libraries.  This
-is because the unshared libraries fail to use YP for host name lookup.
-As a result, the host name you specify may not be recognized.
-
-* Shell mode ignores interrupts on Apollo Domain
-
-You may find that M-x shell prints the following message:
-
-   Warning: no access to tty; thus no job control in this shell...
-
-This can happen if there are not enough ptys on your system.
-Here is how to make more of them.
-
-    % cd /dev
-    % ls pty*
-    # shows how many pty's you have. I had 8, named pty0 to pty7)
-    % /etc/crpty 8
-    # creates eight new pty's
-
-* Fatal signal in the command  temacs -l loadup inc dump
-
-This command is the final stage of building Emacs.  It is run by the
-Makefile in the src subdirectory, or by build.com on VMS.
-
-It has been known to get fatal errors due to insufficient swapping
-space available on the machine.
-
-On 68000's, it has also happened because of bugs in the
-subroutine `alloca'.  Verify that `alloca' works right, even
-for large blocks (many pages).
-
-* test-distrib says that the distribution has been clobbered
-* or, temacs prints "Command key out of range 0-127"
-* or, temacs runs and dumps xemacs, but xemacs totally fails to work.
-* or, temacs gets errors dumping xemacs
+** test-distrib says that the distribution has been clobbered
+** or, temacs prints "Command key out of range 0-127"
+** or, temacs runs and dumps xemacs, but xemacs totally fails to work.
+** or, temacs gets errors dumping xemacs
 
 This can be because the .elc files have been garbled.  Do not be
 fooled by the fact that most of a .elc file is text: these are
@@ -1224,7 +62,7 @@
   and remake temacs.
  7) Remake xemacs.  It should work now, with valid .elc files.
 
-* temacs prints "Pure Lisp storage exhausted"
+** temacs prints "Pure Lisp storage exhausted"
 
 This means that the Lisp code loaded from the .elc and .el
 files during  temacs -l loadup inc dump  took up more
@@ -1253,7 +91,411 @@
 of something else that is wrong.  Be sure to check and fix the real
 problem.
 
-* Changes made to .el files do not take effect.
+** Don't use -O2 with gcc 2.7.2 under Linux without also using
+   `-fno-strength-reduce'.
+
+gcc will generate incorrect code otherwise.  This bug is present in at
+least 2.6.x and 2.7.[0-2].  This bug has been fixed in GCC 2.7.2.1 and
+later.
+
+** `Error: No ExtNode to pop!' on Linux systems with Lesstif.
+
+This error message has been observed with lesstif-0.75a.  It does not
+appear to cause any harm.
+
+** Sparc Linux -vs- libXmu.
+
+There have been reports of configure not detecting libXmu on
+SparcLinux.  The fix is to add -lXmu to the link flags.
+
+** Debian Linux and Berkeley db include files.
+
+Debian Linux puts the Berkeley db include files in /usr/include/db
+instead of /usr/include.  The fix is to use
+--site-includes=/usr/include/db with configure.
+
+** alloc.c will not compile without -P on HP-UX 9.05
+
+Pekka Marjola <pema@iki.fi> writes:
+  Gcc (2.7.2, with cpplib IIRC) required something (-P worked :) to
+  get it to compile. Otherwise it failed on those DEFUN macros with
+  comments inside parameter lists (like buffer.c, line 296).
+
+** Excessive optimization with pgcc can break XEmacs
+
+It has been reported on some systems that compiling with -O6 can lead
+to XEmacs failures.  The workaround is to use a lower optimization
+level.  -O2 and -O4 have been tested extensively.
+
+** -O2 optimization on Irix 5.3 can cause compiler complaint.
+
+Nick J. Crabtree <nickc@scopic.com> writes:
+  Comes up OK on a tty (all I have available over this slow link). Ill
+  give it a hammering tomorrow.  The -O2 optimisation complained about
+  sizes exceeding thresholds; I haven't bothered to use the -Olimit
+  option it recommends.
+
+** Excessive optimization on AIX 4.2 can lead to compiler failure.
+
+Valdis.Kletnieks@vt.edu writes:
+  At least at the b34 level, and the latest-and-greatest IBM xlc
+  (3.1.4.4), there are problems with -O3.  I haven't investigated
+  further.
+
+** Sed problems on Solaris 2.5
+
+There have been reports of Sun sed truncating very lines in the
+Makefile during configuration.  The workaround is to use GNU sed or,
+even better, think of a better way to generate Makefile, and send us a 
+patch. :-)
+
+** CDE is not autodetected on HP.
+
+Richard Cognot <cognot@ensg.u-nancy.fr> writes:
+  I have to force /usr/dt/{lib,include} into the site include/lib
+  command line options. I could add these in hpux10.h, but then I
+  would think these should be pretty standard (to my knowledge, that's
+  also where Sun puts its CDE stuff), so that wouldn't fix the problem
+  on other architectures. AAMOF, when these path are given, CDE is
+  detected, and DragAndDrop works (more or less, see next issue).
+
+** Linking with -rpath on IRIX.
+
+Darrell Kindred <dkindred@cmu.edu> writes:
+There are a couple of problems [with use of -rpath with Irix ld], though:
+
+  1. The ld in IRIX 5.3 ignores all but the last -rpath
+     spec, so the patched configure spits out a warning
+     if --x-libraries or --site-runtime-libraries are
+     specified under irix 5.x, and it only adds -rpath 
+     entries for the --site-runtime-libraries.  This bug was
+     fixed sometime between 5.3 and 6.2.
+
+  2. IRIX gcc 2.7.2 doesn't accept -rpath directly, so
+     it would have to be prefixed by -Xlinker or "-Wl,".
+     This would be fine, except that configure compiles with
+        ${CC-cc} $CFLAGS $LDFLAGS ...
+     rather than quoting $LDFLAGS with prefix-args, like
+     src/Makefile does.  So if you specify --x-libraries
+     or --site-runtime-libraries, you must use --use-gcc=no,
+     or configure will fail.
+
+** On Irix 5.x and 6.x, the dumped XEmacs (xemacs) core dumps when executed 
+   on another machine, or after newer SGI IRIX patches have been installed.
+
+The xemacs binary must be executed with the same "libc.so" file which
+was used when the xemacs binary was dumped.  Some SGI IRIX patches
+update this file.  Make sure that all machines using the xemacs binary
+are using the same set of IRIX patches.  If xemacs core dumps after a
+patch upgrade then you will have to redump it from temacs.
+
+** xemacs: can't resolve symbol '__malloc_hook'
+
+This is a Linux problem where you've compiled the XEmacs binary on a libc
+5.4 with version higher than 5.4.19 and attempted to run the binary against
+an earlier version.  The solution is to upgrade your old library.
+
+** Compilation errors on VMS.
+
+Sorry, XEmacs does not work under VMS.  You might consider working on
+the port if you really want to have XEmacs work under VMS.
+
+** On HP/UX configure selects gcc even though it isn't actually present.
+
+Some versions of SoftBench have an executable called 'gcc' that is not
+actually the GNU C compiler.  Use the --with-gcc=no flag when running
+configure.
+
+** On Solaris 2.* I get undefined symbols from libcurses.a.
+
+You probably have /usr/ucblib/ on your LD_LIBRARY_PATH.  Do the link with
+LD_LIBRARY_PATH unset.
+
+** On Solaris 2.* I cannot make alloc.o, glyphs.o or process.o.
+
+The SparcWorks C compiler may have difficulty building those modules
+with optimization level -xO4.  Try using only "-fast" optimization
+for just those modules.  (Or use gcc).
+
+** On Digital UNIX, the DEC C compiler might have a problem compiling
+   some files.
+
+In particular, src/extents.c and src/faces.c might cause the DEC C
+compiler to abort.  When this happens: cd src, compile the files by
+hand, cd .., and redo the "make" command.  When recompiling the files by
+hand, use the old C compiler for the following versions of Digital UNIX:
+  - V3.n: Remove "-migrate" from the compile command.
+  - V4.n: Add "-oldc" to the compile command.
+
+** On HPUX, the HP C compiler might have a problem compiling some files
+   with optimization.
+
+Richard Cognot <cognot@ensg.u-nancy.fr> writes:
+
+  Had to drop once again to level 2 optimization, at least to
+  compile lstream.c. Otherwise, I get a "variable is void: \if"
+  problem while dumping (this is a problem I already reported
+  with vanilla hpux 10.01 and 9.07, which went away after
+  applying patches for the C compiler). Trouble is I still
+  haven't found the same patch for hpux 10.10, and I don't
+  remember the patch numbers. I think potential XEmacs builders
+  on HP should be warned about this.
+
+** I don't have `xmkmf' and `imake' on my HP.
+
+You can get these standard X tools by anonymous FTP to hpcvaaz.cv.hp.com.
+Essentially all X programs need these.
+
+** Solaris 2.3 /bin/sh coredumps during configuration.
+
+This only occurs if you have LANG != C.  This is a known bug with
+/bin/sh fixed by installing Patch-ID# 101613-01.
+
+** On Irix 6.0, make tries (and fails) to build a program named unexelfsgi
+
+A compiler bug inserts spaces into the string "unexelfsgi . o"
+in src/Makefile.  Edit src/Makefile, after configure is run,
+find that string, and take out the spaces.
+
+Compiler fixes in Irix 6.0.1 should eliminate this problem.
+
+** Native cc on SCO OpenServer 5 is now OK.  Icc may still throw you
+   a curve.  Here is what Robert Lipe <robertl@arnet.com> says:
+
+Unlike XEmacs 19.13, building with the native cc on SCO OpenServer 5 
+now produces a functional binary.   I will typically build this
+configuration for COFF with:
+
+	/path_to_XEmacs_source/configure --with-gcc=no \
+	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
+	  --with-xpm --with-xface --with-sound=nas
+
+This version now supports ELF builds.  I highly recommend this to 
+reduce the in-core footprint of XEmacs.  This is now how I compile 
+all my test releases.  Build it like this:
+
+	/path_to_XEmacs_source/configure --with-gcc=no \
+	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
+	  --with-xpm --with-xface --with-sound=nas --dynamic
+
+The compiler known as icc [ supplied with the OpenServer 5 Development 
+System ] generates a working binary, but it takes forever to generate
+XEmacs.  ICC also whines more about the code than /bin/cc does.  I do
+believe all its whining is legitimate, however.    Note that you do
+have to 'cd src ; make  LD=icc' to avoid linker errors.
+
+The way I handle the build procedure is:
+
+	/path_to_XEmacs_source/configure --with-gcc=no \
+	  --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
+	  --with-xpm --with-xface --with-sound=nas --dynamic --compiler="icc"
+
+NOTE I have the xpm, xface, and audio libraries and includes in 
+	/usr/local/lib, /usr/local/include.  If you don't have these,
+	don't include the "--with-*" arguments in any of my examples.
+
+In previous versions of XEmacs, you had to override the defaults while 
+compiling font-lock.o and extents.o when building with icc.  This seems
+to no longer be true, but I'm including this old information in case it
+resurfaces.  The process I used was:
+
+	make -k    
+	[ procure pizza, beer, repeat ] 
+	cd src
+	make CC="icc -W0,-mP1COPT_max_tree_size=3000" font-lock.o extents.o
+	make LD=icc
+
+If you want sound support, get the tls566 supplement from 
+ftp.sco.com:/TLS or any of its mirrors.  It works just groovy 
+with XEmacs.
+
+The M-x manual-entry is known not to work.  If you know Lisp and would
+like help in making it work, e-mail me at <robertl@dgii.com>.
+(UNCHECKED for 19.15 -- it might work).
+
+In earlier releases, gnuserv/gnuclient/gnudoit would open a frame 
+just fine, but the client would lock up and the server would
+terminate when you used C-x # to close the frame.   This is now 
+fixed in XEmacs.
+
+In etc/ there are two files of note. emacskeys.sco and emacsstrs.sco.
+The comments at the top of emacskeys.sco describe its function, and
+the emacstrs.sco is a suitable candidate for /usr/lib/keyboard/strings
+to take advantage of the keyboard map in emacskeys.sco.
+
+** Under some versions of OSF XEmacs runs fine if built without
+   optimization but will crash randomly if built with optimization.
+
+Using 'cc -g' is not sufficient to eliminate all optimization.  Try
+'cc -g -O0' instead.
+
+** On SunOS, you get linker errors
+    ld: Undefined symbol 
+       _get_wmShellWidgetClass
+       _get_applicationShellWidgetClass
+
+The fix to this is to install patch 100573 for OpenWindows 3.0
+or link libXmu statically.
+
+** On Sunos 4, you get the error ld: Undefined symbol __lib_version.
+
+This is the result of using cc or gcc with the shared library meant
+for acc (the Sunpro compiler).  Check your LD_LIBRARY_PATH and delete
+/usr/lang/SC2.0.1 or some similar directory.
+
+** On AIX 4.1.2, linker error messages such as
+   ld: 0711-212 SEVERE ERROR: Symbol .__quous, found in the global symbol table
+	 of archive /usr/lib/libIM.a, was not defined in archive member shr.o.
+
+This is a problem in libIM.a.  You can work around it by executing
+these shell commands in the src subdirectory of the directory where
+you build Emacs:
+
+    cp /usr/lib/libIM.a .
+    chmod 664 libIM.a
+    ranlib libIM.a
+
+Then change -lIM to ./libIM.a in the command to link temacs (in
+Makefile).
+
+** On Irix 5.2, unexelfsgi.c can't find cmplrs/stsupport.h.
+
+The file cmplrs/stsupport.h was included in the wrong file set in the
+Irix 5.2 distribution.  You can find it in the optional fileset
+compiler_dev, or copy it from some other Irix 5.2 system.  A kludgy
+workaround is to change unexelfsgi.c to include sym.h instead of
+syms.h.
+
+** Link failure when using acc on a Sun.
+
+To use acc, you need additional options just before the libraries, such as
+
+   /usr/lang/SC2.0.1/values-Xt.o -L/usr/lang/SC2.0.1/cg87 -L/usr/lang/SC2.0.1
+
+and you need to add -lansi just before -lc.
+
+The precise file names depend on the compiler version, so we
+cannot easily arrange to supply them.
+
+** Link failure on IBM AIX 1.3 ptf 0013.
+
+There is a real duplicate definition of the function `_slibc_free' in
+the library /lib/libc_s.a (just do nm on it to verify).  The
+workaround/fix is:
+
+    cd /lib
+    ar xv libc_s.a NLtmtime.o
+    ar dv libc_s.a NLtmtime.o
+
+** Undefined symbols _dlopen, _dlsym and/or _dlclose on a Sun.
+
+If you see undefined symbols _dlopen, _dlsym, or _dlclose when linking
+with -lX11, compile and link against the file mit/util/misc/dlsym.c in
+the MIT X11R5 distribution.  Alternatively, link temacs using shared
+libraries with s/sunos4shr.h.  (This doesn't work if you use the X
+toolkit.)
+
+If you get the additional error that the linker could not find
+lib_version.o, try extracting it from X11/usr/lib/X11/libvim.a in
+X11R4, then use it in the link.
+
+** Undefined symbols when linking on Sunos 4.1.
+
+If you get the undefined symbols _atowc _wcslen, _iswprint, _iswspace,
+_iswcntrl, _wcscpy, and _wcsncpy, then you need to add -lXwchar after
+-lXaw in the command that links temacs.
+
+This problem seems to arise only when the international language
+extensions to X11R5 are installed.
+
+** src/Makefile and lib-src/Makefile are truncated--most of the file missing.
+
+This can happen if configure uses GNU sed version 2.03.  That version
+had a bug.  GNU sed version 2.05 works properly.
+
+** On AIX, you get this compiler error message:
+
+    Processing include file ./XMenuInt.h
+        1501-106: (S) Include file X11/Xlib.h not found.
+
+This means your system was installed with only the X11 runtime i.d
+libraries.  You have to find your sipo (bootable tape) and install
+X11Dev... with smit.
+
+** C-z just refreshes the screen instead of suspending Emacs.
+
+You are probably using a shell that doesn't support job control, even
+though the system itself is capable of it.  Either use a different shell,
+or set the variable `cannot-suspend' to a non-nil value.
+
+** On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
+
+    /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment 
+
+The problem is in the Sun shared C library, not in GNU ld.
+
+The solution is to install Patch-ID# 100267-03 from Sun.
+
+** SunOS 4.1.2: undefined symbol _get_wmShellWidgetClass
+
+  Apparently the version of libXmu.so.a that Sun ships is hosed: it's missing
+  some stuff that is in libXmu.a (the static version).  Sun has a patch for 
+  this, but a workaround is to use the static version of libXmu, by changing
+  the link command from "-lXmu" to "-Bstatic -lXmu -Bdynamic".  If you have
+  OpenWindows 3.0, ask Sun for these patches:
+    100512-02       4.1.x OpenWindows 3.0 libXt Jumbo patch
+    100573-03       4.1.x OpenWindows 3.0 undefined symbols with shared libXmu
+
+** Random other SunOS 4.1.[12] link errors.
+
+  The X headers and libraries that Sun ships in /usr/{include,lib}/X11 are
+  broken.  Use the ones in /usr/openwin/{include,lib} instead.
+
+** When using gcc, you get the error message "undefined symbol __fixunsdfsi".
+** When using gcc, you get the error message "undefined symbol __main".
+
+This means that you need to link with the gcc library.  It may be called
+"gcc-gnulib" or "libgcc.a"; figure out where it is, and define LIB_GCC in
+config.h to point to it.
+
+It may also work to use the GCC version of `ld' instead of the standard one.
+
+** When compiling with X11, you get "undefined symbol _XtStrings".
+
+This means that you are trying to link emacs against the X11r4 version of
+libXt.a, but you have compiled either Emacs or the code in the lwlib
+subdirectory with the X11r5 header files.  That doesn't work.
+
+Remember, you can't compile lwlib for r4 and emacs for r5, or vice versa.
+They must be in sync.
+
+* Problems with running XEmacs
+
+** You type Control-H (Backspace) expecting to delete characters.
+
+Emacs has traditionally used Control-H for help; unfortunately this
+interferes with its use as Backspace on TTY's.  One way to solve this
+problem is to put this in your .emacs:
+
+  (keyboard-translate ?\C-h ?\C-?)
+  (global-set-key "\M-?" 'help-command)
+
+This makes Control-H (Backspace) work sensibly, and moves help to
+Meta-? (ESC ?).
+
+Note that you can probably also access help using F1.
+
+** On Solaris, C-x doesn't get through to Emacs when you use the console.
+
+This is a Solaris feature (at least on Intel x86 cpus).  Type C-r
+C-r C-t, to toggle whether C-x gets through to Emacs.
+
+** VM appears to hang in large folders
+
+This is normal (trust us) when upgrading to VM-6.22 from earlier
+versions.  Let VM finish what it is doing and all will be well.
+
+** Changes made to .el files do not take effect.
 
 You may have forgotten to recompile them into .elc files.
 Then the old .elc files will be loaded, and your changes
@@ -1263,8 +505,8 @@
 Note that you may get a warning when loading a .elc file that
 is older than the corresponding .el file.
 
-* Things which should be bold or italic (such as the initial copyright notice)
-  are not.
+** Things which should be bold or italic (such as the initial copyright notice)
+   are not.
 
 The fonts of the "bold" and "italic" faces are generated from the font of
 the "default" face; in this way, your bold and italic fonts will have the
@@ -1285,7 +527,7 @@
 should use those forms.  See the man pages for X(1), xlsfonts(1), and
 xfontsel(1).
 
-* The dumped Emacs (XEmacs) crashes when run, trying to write pure data.
+** The dumped Emacs (XEmacs) crashes when run, trying to write pure data.
 
 Two causes have been seen for such problems.
 
@@ -1300,19 +542,100 @@
 not initialized are not supposed to be pure.  On these systems you
 may need to add "#define static" to the m- or the s- file.
 
-* Reading and writing files is very very slow.
+** Reading and writing files is very very slow.
 
 Try evaluating the form (setq lock-directory nil) and see if that helps.
 There is a problem with file-locking on some systems (possibly related
 to NFS) that I don't understand.  Please send mail to the address 
 xemacs@xemacs.org if you figure this one out.
 
-* Compilation errors on VMS.
+** The Emacs window disappears when you type M-q.
+
+Some versions of the Open Look window manager interpret M-q as a quit
+command for whatever window you are typing at.  If you want to use
+Emacs with that window manager, you should try to configure the window
+manager to use some other command.   You can disable the
+shortcut keys entirely by adding this line to ~/.OWdefaults:
+
+    OpenWindows.WindowMenuAccelerators: False
+
+** The `Alt' key doesn't behave as `Meta' when running DECwindows.
+
+The default DEC keyboard mapping has the Alt keys set up to generate the
+keysym `Multi_key', which has a meaning to xemacs which is distinct from that
+of the `Meta_L' and `Meta-R' keysyms.  A second problem is that certain keys
+have the Mod2 modifier attached to them for no adequately explored reason.
+The correct fix is to pass this file to xmodmap upon starting X:
+
+	clear mod2
+	keysym Multi_key = Alt_L
+	add mod1 = Alt_L
+	add mod1 = Alt_R
+
+** The Compose key on a DEC keyboard does not work as Meta key.
+
+This shell command should fix it:
+
+  xmodmap -e 'keycode 0xb1 = Meta_L'
+
+
+** When emacs starts up, I get lots of warnings about unknown keysyms.
+
+If you are running the prebuilt binaries, the Motif library expects to find
+certain thing in the XKeysymDB file.  This file is normally in /usr/lib/X11/
+or in /usr/openwin/lib/.  If you keep yours in a different place, set the
+environment variable $XKEYSYMDB to point to it before starting emacs.  If 
+you still have the problem after doing that, perhaps your version of X is 
+too old.  There is a copy of the MIT X11R5 XKeysymDB file in the emacs `etc'
+directory.  Try using that one.
+
+** My X resources used to work, and now some of them are being ignored.
 
-Sorry, XEmacs does not work under VMS.  You might consider working on
-the port if you really want to have XEmacs work under VMS.
+Check the resources in .../etc/Emacs.ad (which is the same as the file
+sample.Xdefaults).  Perhaps some of the default resources built in to 
+emacs are now overriding your existing resources.  Copy and edit the
+resources in Emacs.ad as necessary.
+
+** I get complaints about the mapping of my HP keyboard at startup, but I
+   haven't changed anything.
+
+The default HP keymap is set up to have Mod1 assigned to two different keys:
+Meta_L and Mode_switch (even though there is not actually a Mode_switch key on
+the keyboard -- it uses an "imaginary" keycode.)  There actually is a reason
+for this, but it's not a good one.  The correct fix is to execute this command
+upon starting X:
+
+	xmodmap -e 'remove mod1 = Mode_switch'
+
+** I have focus problems when I use `M-o' to switch to another screen without
+   using the mouse.
+
+The focus issues with a program like XEmacs, which has multiple homogeneous
+top-level windows, are very complicated, and as a result, most window managers
+don't implement them correctly.
 
-* Mail agents (VM, Gnus, rmail) cannot get new mail
+The R4/R5 version of twm (and all of its descendants) had buggy focus
+handling; there is a patch in .../xemacs/etc/twm-patch which fixes this.
+Sufficiently recent versions of tvtwm do not need this patch, but most other
+versions of twm do.  If you need to apply this patch, please try to get it
+integrated by the maintainer of whichever version of twm you're using.
+
+In addition, if you're using twm, make sure you have not specified
+"NoTitleFocus" in your .tvtwmrc file.  The very nature of this option makes
+twm do some illegal focus tricks, even with the patch.
+
+It is known that olwm and olvwm are buggy, and in different ways.  If you're 
+using click-to-type mode, try using point-to-type, or vice versa.
+
+In older versions of NCDwm, one could not even type at XEmacs windows.  This
+has been fixed in newer versions (2.4.3, and possibly earlier).
+
+(Many people suggest that XEmacs should warp the mouse when focusing on
+another screen in point-to-type mode.  This is not ICCCM-compliant behavior.
+Implementing such policy is the responsibility of the window manager itself,
+it is not legal for a client to do this.)
+
+** Mail agents (VM, Gnus, rmail) cannot get new mail
 
 rmail and VM get new mail from /usr/spool/mail/$USER using a program
 called `movemail'.  This program interlocks with /bin/mail using the
@@ -1350,7 +673,7 @@
 mode of the installed copy; changing the group and mode of the build
 directory copy is ineffective.
 
-* Emacs spontaneously displays "I-search: " at the bottom of the screen.
+** Emacs spontaneously displays "I-search: " at the bottom of the screen.
 
 This means that Control-S/Control-Q (XON/XOFF) "flow control" is being
 used.  C-s/C-q flow control is bad for Emacs editors because it takes
@@ -1434,7 +757,7 @@
 will not make Emacs worse for properly designed systems for the sake
 of inferior systems.
 
-* Control-S and Control-Q commands are ignored completely.
+** Control-S and Control-Q commands are ignored completely.
 
 For some reason, your system is using brain-damaged C-s/C-q flow
 control despite Emacs's attempts to turn it off.  Perhaps your
@@ -1449,8 +772,8 @@
 into C-s and C-q using keyboard-translate-table.  The example above
 shows how to do this with C-^ and C-\.
 
-* Control-S and Control-Q commands are ignored completely on a net
-  connection.
+** Control-S and Control-Q commands are ignored completely on a net
+   connection.
 
 Some versions of rlogin (and possibly telnet) do not pass flow
 control characters to the remote system to which they connect.
@@ -1476,7 +799,7 @@
 See the entry about spontaneous display of I-search (above) for more
 info.
 
-* Screen is updated wrong, but only on one kind of terminal.
+** Screen is updated wrong, but only on one kind of terminal.
 
 This could mean that the termcap entry you are using for that terminal
 is wrong, or it could mean that Emacs has a bug handing the
@@ -1514,7 +837,7 @@
 This is unambiguously an Emacs bug, and can probably be fixed in
 termcap.c, tparam.c, term.c, scroll.c, cm.c or dispnew.c.
 
-* Output from Control-V is slow.
+** Output from Control-V is slow.
 
 On many bit-map terminals, scrolling operations are fairly slow.
 Often the termcap entry for the type of terminal in use fails
@@ -1557,7 +880,7 @@
 A `cs' string to set the scrolling region will reduce the amount
 of motion you see on the screen when part of the screen is scrolled.
 
-* Your Delete key sends a Backspace to the terminal, using an AIXterm.
+** Your Delete key sends a Backspace to the terminal, using an AIXterm.
 
 The solution is to include in your .Xdefaults the lines:
 
@@ -1566,256 +889,520 @@
 
 This makes your Backspace key send DEL (ASCII 127).
 
-* You type Control-H (Backspace) expecting to delete characters.
+** With certain fonts, when the cursor appears on a character, the
+   character doesn't appear--you get a solid box instead.
+
+One user on a Linux system reported that this problem went away with
+installation of a new X server.  The failing server was XFree86 3.1.1.
+XFree86 3.1.2 works.
+
+** On SunOS 4.1.3, Emacs unpredictably crashes in _yp_dobind_soft.
 
-Emacs has traditionally used Control-H for help; unfortunately this
-interferes with its use as Backspace on TTY's.  One way to solve this
-problem is to put this in your .emacs:
+This happens if you configure Emacs specifying just `sparc-sun-sunos4'
+on a system that is version 4.1.3.  You must specify the precise
+version number (or let configure figure out the configuration, which
+it can do perfectly well for SunOS).
+
+** On Irix, I don't see the toolbar icons and I'm getting lots of
+   entries in the warnings buffer.
 
-  (keyboard-translate ?\C-h ?\C-?)
-  (global-set-key "\M-?" 'help-command)
+SGI ships a really old Xpm library in /usr/lib which does not work at
+all well with XEmacs.  The solution is to install your own copy of the
+latest version of Xpm somewhere and then use the --site-includes and
+--site-libraries flags to tell configure where to find it.
+
+** On HPUX, you get "poll: Interrupted system call" message in the window
+   where XEmacs was launched.
+
+Richard Cognot <cognot@ensg.u-nancy.fr> writes:
 
-This makes Control-H (Backspace) work sensibly, and moves help to
-Meta-? (ESC ?).
-
-Note that you can probably also access help using F1.
+  I get a very strange problem when linking libc.a
+  dynamically: every event (mouse, keyboard, expose...) results
+  in a "poll: Interrupted system call" message in the window
+  where XEmacs was launched. Forcing a static link of libc.a
+  alone by adding /usr/lib/libc.a at the end of the link line
+  solves this. Note that my 9.07 build of 19.14b17 and my (old)
+  build of 19.13 both exhibit the same behaviour. I've tried
+  various hpux patches to no avail. If this problem cannot be
+  solved before the release date, binary kits for HP *must* be
+  linked statically against libc, otherwise this problem will
+  show up. (This is directed at whoever will volunteer for this
+  kit, as I won't be available to do it, unless 19.14 gets
+  delayed until mid-june ;-). I think this problem will be an FAQ
+  soon after the release otherwise.
 
-* Editing files through RFS gives spurious "file has changed" warnings.
-It is possible that a change in Emacs 18.37 gets around this problem,
-but in case not, here is a description of how to fix the RFS bug that
-causes it.
+** When Emacs tries to ring the bell, you get an error like
+
+	audio: sst_open: SETQSIZE" Invalid argument
+	audio: sst_close: SETREG MMR2, Invalid argument
+
+you have probably compiled using an ANSI C compiler, but with non-ANSI include
+files.  In particular, on Suns, the file /usr/include/sun/audioio.h uses the
+_IOW macro to define the constant AUDIOSETQSIZE.  _IOW in turn uses a K&R
+preprocessor feature that is now explicitly forbidden in ANSI preprocessors,
+namely substitution inside character constants.  All ANSI C compilers must 
+provide a workaround for this problem.  Lucid's C compiler is shipped with a 
+new set of system include files.  If you are using GCC, there is a script
+called fixincludes that creates new versions of some system include files that
+use this obsolete feature.
+
+** My buffers are full of \000 characters or otherwise corrupt.
 
-    There was a serious pair of bugs in the handling of the fsync() system
-    call in the RFS server.
+Some compilers have trouble with gmalloc.c and ralloc.c; try recompiling
+without optimization.  If that doesn't work, try recompiling with
+SYSTEM_MALLOC defined, and/or with REL_ALLOC undefined.
+
+** On AIX 4, some programs fail when run in a Shell buffer
+   with an error message like   No terminfo entry for "unknown".
+
+On AIX, many terminal type definitions are not installed by default.
+`unknown' is one of them.  Install the "Special Generic Terminal
+Definitions" to make them defined.
+
+** Emacs exits with "X protocol error" when run with an X server for
+   Windows.
 
-    The first is that the fsync() call is handled as another name for the
-    close() system call (!!).  It appears that fsync() is not used by very
-    many programs; Emacs version 18 does an fsync() before closing files
-    to make sure that the bits are on the disk.
+A certain X server for Windows had a bug which caused this.
+Supposedly the newer 32-bit version of this server doesn't have the
+problem.
+
+** A position you specified in .Xdefaults is ignored, using twm.
+
+twm normally ignores "program-specified" positions.
+You can tell it to obey them with this command in your `.twmrc' file:
 
-    This is fixed by the enclosed patch to the RFS server.
+  UsePPosition	"on"		#allow clents to request a position
+
+** The right Alt key works wrong on German HP keyboards (and perhaps
+   other non-English HP keyboards too).
+
+This is because HPUX defines the modifiers wrong in X.  Here is a
+shell script to fix the problem; be sure that it is run after VUE
+configures the X server.
 
-    The second, more serious problem, is that fsync() is treated as a
-    non-blocking system call (i.e., it's implemented as a message that
-    gets sent to the remote system without waiting for a reply).  Fsync is
-    a useful tool for building atomic file transactions.  Implementing it
-    as a non-blocking RPC call (when the local call blocks until the sync
-    is done) is a bad idea; unfortunately, changing it will break the RFS
-    protocol.  No fix was supplied for this problem.
+    xmodmap 2> /dev/null - << EOF
+    keysym Alt_L = Meta_L
+    keysym Alt_R = Meta_R
+    EOF
+
+    xmodmap - << EOF
+    clear mod1
+    keysym Mode_switch = NoSymbol
+    add mod1 = Meta_L
+    keysym Meta_R = Mode_switch
+    add mod2 = Mode_switch
+    EOF
+
+** Emacs does not notice when you release the mouse.
 
-    (as always, your line numbers may vary)
+There are reports that this happened with (some) Microsoft mice and
+that replacing the mouse made it stop.
+
+** Trouble using ptys on IRIX, or running out of ptys.
+
+The program mkpts (which may be in `/usr/adm' or `/usr/sbin') needs to
+be set-UID to root, or non-root programs like Emacs will not be able
+to allocate ptys reliably.
+
+** Slow startup on Linux.
+
+People using systems based on the Linux kernel sometimes report that
+startup takes 10 to 15 seconds longer than `usual'.
+
+This is because Emacs looks up the host name when it starts.
+Normally, this takes negligible time; the extra delay is due to
+improper system configuration.  This problem can occur for both
+networked and non-networked machines.
 
-    % rcsdiff -c -r1.2 serversyscall.c
-    RCS file: RCS/serversyscall.c,v
-    retrieving revision 1.2
-    diff -c -r1.2 serversyscall.c
-    *** /tmp/,RCSt1003677   Wed Jan 28 15:15:02 1987
-    --- serversyscall.c     Wed Jan 28 15:14:48 1987
-    ***************
-    *** 163,169 ****
-	    /*
-	     * No return sent for close or fsync!
-	     */
-    !       if (syscall == RSYS_close || syscall == RSYS_fsync)
-		    proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
-	    else
-	    {
-    --- 166,172 ----
-	    /*
-	     * No return sent for close or fsync!
-	     */
-    !       if (syscall == RSYS_close)
-		    proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
-	    else
-	    {
+Here is how to fix the configuration.  It requires being root.
+
+*** Networked Case
+
+First, make sure the files `/etc/hosts' and `/etc/host.conf' both
+exist.  The first line in the `/etc/hosts' file should look like this
+(replace HOSTNAME with your host name):
+
+    127.0.0.1      localhost HOSTNAME
+
+Also make sure that the `/etc/host.conf' files contains the following
+lines:
+
+    order hosts, bind 
+    multi on
+
+Any changes, permanent and temporary, to the host name should be
+indicated in the `/etc/hosts' file, since it acts a limited local
+database of addresses and names (e.g., some SLIP connections
+dynamically allocate ip addresses).
+
+*** Non-Networked Case
+
+The solution described in the networked case applies here as well.
+However, if you never intend to network your machine, you can use a
+simpler solution: create an empty `/etc/host.conf' file.  The command
+`touch /etc/host.conf' suffices to create the file.  The `/etc/hosts'
+file is not necessary with this approach.
+
+** On Solaris 2.4, Dired hangs and C-g does not work.  Or Emacs hangs
+   forever waiting for termination of a subprocess that is a zombie.
+
+casper@fwi.uva.nl says the problem is in X11R6.  Rebuild libX11.so
+after changing the file xc/config/cf/sunLib.tmpl.  Change the lines
+
+    #if ThreadedX
+    #define SharedX11Reqs -lthread
+    #endif
+
+to:
+
+    #if OSMinorVersion < 4
+    #if ThreadedX
+    #define SharedX11Reqs -lthread
+    #endif
+    #endif
+
+Be sure also to edit x/config/cf/sun.cf so that OSMinorVersion is 4
+(as it should be for Solaris 2.4).  The file has three definitions for
+OSMinorVersion: the first is for x86, the second for SPARC under
+Solaris, and the third for SunOS 4.  Make sure to update the
+definition for your type of machine and system.
+
+Then do `make Everything' in the top directory of X11R6, to rebuild
+the makefiles and rebuild X.  The X built this way work only on
+Solaris 2.4, not on 2.3.
+
+For multithreaded X to work it necessary to install patch
+101925-02 to fix problems in header files [2.4].  You need
+to reinstall gcc or re-run just-fixinc after installing that
+patch.
 
-* Vax C compiler bugs affecting Emacs.
+However, Frank Rust <frust@iti.cs.tu-bs.de> used a simpler solution:
+he changed
+    #define ThreadedX          YES
+to
+    #define ThreadedX          NO
+in sun.cf and did `make World' to rebuild X11R6.  Removing all
+`-DXTHREAD*' flags and `-lthread' entries from lib/X11/Makefile and
+typing 'make install' in that directory also seemed to work.
+
+** With M-x enable-flow-control, you need to type C-\ twice to do
+   incremental search--a single C-\ gets no response.
 
-You may get one of these problems compiling Emacs:
+This has been traced to communicating with your machine via kermit,
+with C-\ as the kermit escape character.  One solution is to use
+another escape character in kermit.  One user did
+
+   set escape-character 17
+
+in his .kermrc file, to make C-q the kermit escape character.
 
-   foo.c line nnn: compiler error: no table entry for op STASG
-   foo.c: fatal error in /lib/ccom
+** The Motif version of Emacs paints the screen a solid color.
+
+This has been observed to result from the following X resource:
+
+   Emacs*default.attributeFont:	-*-courier-medium-r-*-*-*-140-*-*-*-*-iso8859-*
+
+That the resource has this effect indicates a bug in something, but we
+do not yet know what.  If it is an Emacs bug, we hope someone can
+explain what the bug is so we can fix it.  In the mean time, removing
+the resource prevents the problem.
 
-These are due to bugs in the C compiler; the code is valid C.
-Unfortunately, the bugs are unpredictable: the same construct
-may compile properly or trigger one of these bugs, depending
-on what else is in the source file being compiled.  Even changes
-in header files that should not affect the file being compiled
-can affect whether the bug happens.  In addition, sometimes files
-that compile correctly on one machine get this bug on another machine.
+** Regular expressions matching bugs on SCO systems.
+
+On SCO, there are problems in regexp matching when Emacs is compiled
+with the system compiler.  The compiler version is "Microsoft C
+version 6", SCO 4.2.0h Dev Sys Maintenance Supplement 01/06/93; Quick
+C Compiler Version 1.00.46 (Beta).  The solution is to compile with
+GCC.
+
+** In Shell mode, you get a ^M at the end of every line.
+
+This happens to people who use tcsh, because it is trying to be too
+smart.  It sees that the Shell uses terminal type `unknown' and turns
+on the flag to output ^M at the end of each line.  You can fix the
+problem by adding this to your .cshrc file:
+
+    if ($?EMACS) then
+        if ($EMACS == "t") then
+            unset edit 
+            stty  -icrnl -onlcr -echo susp ^Z
+        endif
+    endif
+
+** An error message such as `X protocol error: BadMatch (invalid
+parameter attributes) on protocol request 93'.
+
+This comes from having an invalid X resource, such as
+   emacs*Cursor:   black
+(which is invalid because it specifies a color name for something
+that isn't a color.)
+
+The fix is to correct your X resources.
+
+** Mail is lost when sent to local aliases.
 
-As a result, it is hard for me to make sure this bug will not affect
-you.  I have attempted to find and alter these constructs, but more
-can always appear.  However, I can tell you how to deal with it if it
-should happen.  The bug comes from having an indexed reference to an
-array of Lisp_Objects, as an argument in a function call:
-  Lisp_Object *args;
-  ...
-   ... foo (5, args[i], ...)...
-putting the argument into a temporary variable first, as in
-  Lisp_Object *args;
-  Lisp_Object tem;
-  ...
-   tem = args[i];
-   ... foo (r, tem, ...)...
-causes the problem to go away.
-The `contents' field of a Lisp vector is an array of Lisp_Objects,
-so you may see the problem happening with indexed references to that.
+Many emacs mail user agents (VM and rmail, for instance) use the
+sendmail.el library.  This library can arrange for mail to be
+delivered by passing messages to the /usr/lib/sendmail (usually)
+program .  In doing so, it passes the '-t' flag to sendmail, which
+means that the name of the recipient of the message is not on the
+command line and, therefore, that sendmail must parse the message to
+obtain the destination address.
+
+There is a bug in the SunOS4.1.1 and SunOS4.1.3 versions of sendmail.
+In short, when given the -t flag, the SunOS sendmail won't recognize
+non-local (i.e. NIS) aliases.  It has been reported that the Solaris
+2.x versions of sendmail do not have this bug.  For those using SunOS
+4.1, the best fix is to install sendmail V8 or IDA sendmail (which
+have other advantages over the regular sendmail as well).  At the time
+of this writing, these official versions are available:
+
+ Sendmail V8 on ftp.cs.berkeley.edu in /ucb/sendmail:
+   sendmail.8.6.9.base.tar.Z (the base system source & documentation)
+   sendmail.8.6.9.cf.tar.Z   (configuration files)
+   sendmail.8.6.9.misc.tar.Z (miscellaneous support programs)
+   sendmail.8.6.9.xdoc.tar.Z (extended documentation, with postscript)
+
+ IDA sendmail on vixen.cso.uiuc.edu in /pub:
+   sendmail-5.67b+IDA-1.5.tar.gz
+
+** On AIX, you get this message when running Emacs:
 
-* 68000 C compiler problems
+    Could not load program emacs
+    Symbol smtcheckinit in csh is undefined
+    Error was: Exec format error
+
+or this one:
+
+    Could not load program .emacs
+    Symbol _system_con in csh is undefined
+    Symbol _fp_trapsta in csh is undefined
+    Error was: Exec format error
+
+These can happen when you try to run on AIX 3.2.5 a program that was
+compiled with 3.2.4.  The fix is to recompile.
+
+** After running emacs once, subsequent invocations crash.
+
+Some versions of SVR4 have a serious bug in the implementation of the
+mmap () system call in the kernel; this causes emacs to run correctly
+the first time, and then crash when run a second time.
+
+Contact your vendor and ask for the mmap bug fix; in the mean time,
+you may be able to work around the problem by adding a line to your
+operating system description file (whose name is reported by the
+configure script) that reads:
+#define SYSTEM_MALLOC
+This makes Emacs use memory less efficiently, but seems to work around
+the kernel bug.
+
+** Inability to send an Alt-modified key, when Emacs is communicating
+ directly with an X server.
 
-Various 68000 compilers have different problems.
-These are some that have been observed.
+If you have tried to bind an Alt-modified key as a command, and it
+does not work to type the command, the first thing you should check is
+whether the key is getting through to Emacs.  To do this, type C-h c
+followed by the Alt-modified key.  C-h c should say what kind of event
+it read.  If it says it read an Alt-modified key, then make sure you
+have made the key binding correctly.
+
+If C-h c reports an event that doesn't have the Alt modifier, it may
+be because your X server has no key for the Alt modifier.  The X
+server that comes from MIT does not set up the Alt modifier by
+default.
+
+If your keyboard has keys named Alt, you can enable them as follows:
 
-** Using value of assignment expression on union type loses.
-This means that  x = y = z;  or  foo (x = z);  does not work
-if x is of type Lisp_Object.
+    xmodmap -e 'add mod2 = Alt_L'
+    xmodmap -e 'add mod2 = Alt_R'
+
+If the keyboard has just one key named Alt, then only one of those
+commands is needed.  The modifier `mod2' is a reasonable choice if you
+are using an unmodified MIT version of X.  Otherwise, choose any
+modifier bit not otherwise used.
 
-** "cannot reclaim" error.
+If your keyboard does not have keys named Alt, you can use some other
+keys.  Use the keysym command in xmodmap to turn a function key (or
+some other 'spare' key) into Alt_L or into Alt_R, and then use the
+commands show above to make them modifier keys.
+
+Note that if you have Alt keys but no Meta keys, Emacs translates Alt
+into Meta.  This is because of the great importance of Meta in Emacs.
+
+** `Pid xxx killed due to text modification or page I/O error'
 
-This means that an expression is too complicated.  You get the correct
-line number in the error message.  The code must be rewritten with
-simpler expressions.
+On HP/UX, you can get that error when the Emacs executable is on an NFS
+file system.  HP/UX responds this way if it tries to swap in a page and
+does not get a response from the server within a timeout whose default
+value is just ten seconds.
+
+If this happens to you, extend the timeout period.
+
+** `expand-file-name' fails to work on any but the machine you dumped Emacs on.
+
+On Ultrix, if you use any of the functions which look up information
+in the passwd database before dumping Emacs (say, by using
+expand-file-name in site-init.el), then those functions will not work
+in the dumped Emacs on any host but the one Emacs was dumped on.
+
+The solution?  Don't use expand-file-name in site-init.el, or in
+anything it loads.  Yuck - some solution.
 
-** XCONS, XSTRING, etc macros produce incorrect code.
+I'm not sure why this happens; if you can find out exactly what is
+going on, and perhaps find a fix or a workaround, please let us know.
+Perhaps the YP functions cache some information, the cache is included
+in the dumped Emacs, and is then inaccurate on any other host.
+
+** Emacs fails to understand most Internet host names, even though
+the names work properly with other programs on the same system.
+** Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
+** Gnus can't make contact with the specified host for nntp.
 
-If temacs fails to run at all, this may be the cause.
-Compile this test program and look at the assembler code:
+This typically happens on Suns and other systems that use shared
+libraries.  The cause is that the site has installed a version of the
+shared library which uses a name server--but has not installed a
+similar version of the unshared library which Emacs uses.
 
-struct foo { char x; unsigned int y : 24; };
+The result is that most programs, using the shared library, work with
+the nameserver, but Emacs does not.
+
+The fix is to install an unshared library that corresponds to what you
+installed in the shared library, and then relink Emacs.
 
-lose (arg)
-     struct foo arg;
-{
-  test ((int *) arg.y);
-}
+On SunOS 4.1, simply define HAVE_RES_INIT.
+
+If you have already installed the name resolver in the file libresolv.a,
+then you need to compile Emacs to use that library.  The easiest way to
+do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
+or LIB_STANDARD which uses -lresolv.  Watch out!  If you redefine a macro
+that is already in use in your configuration to supply some other libraries,
+be careful not to lose the others.
+
+Thus, you could start by adding this to config.h:
+
+#define LIBS_SYSTEM -lresolv
+
+Then if this gives you an error for redefining a macro, and you see that
+the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
+again to say this:
+
+#define LIBS_SYSTEM -lresolv -lfoo -lbar
+
+** Bus errors on startup when compiled with Sun's "acc" (in the routine
+   make_string_internal() called from initialize_environment_alist())
+
+  The Sun ANSI compiler doesn't place uninitialized static variables in BSS
+  space like other compilers do.  This breaks emacs.  If you want to use acc,
+  you need to make the file "lastfile.o" be the *first* file in the link 
+  command.  Better yet, use Lucid C or GCC.
+
+** Trouble using ptys on AIX.
 
-If the code is incorrect, your compiler has this problem.
-In the XCONS, etc., macros in lisp.h you must replace (a).u.val with
-((a).u.val + coercedummy) where coercedummy is declared as int.
+People often install the pty devices on AIX incorrectly.
+Use `smit pty' to reinstall them properly.
+
+** Shell mode on HP/UX gives the message, "`tty`: Ambiguous".
+
+christos@theory.tn.cornell.edu says:
+
+The problem is that in your .cshrc you have something that tries to
+execute `tty`. If you are not running the shell on a real tty then 
+tty will print "not a tty". Csh expects one word in some places, 
+but tty is giving it back 3.
+
+The solution is to add a pair of quotes around `tty` to make it a single
+word: 
 
-This problem will not happen if the m-...h file for your type
-of machine defines NO_UNION_TYPE.  That is the recommended setting now.
+if (`tty` == "/dev/console") 
+
+should be changed to:
+
+if ("`tty`" == "/dev/console") 
+
+Even better, move things that set up terminal sections out of .cshrc
+and into .login.
 
-* C compilers lose on returning unions
+** With process-connection-type set to t, each line of subprocess output is
+  terminated with a ^M, making ange-ftp and GNUS not work.
 
-I hear that some C compilers cannot handle returning a union type.
-Most of the functions in GNU Emacs return type Lisp_Object, which is
-defined as a union on some rare architectures.
+On SunOS systems, this problem has been seen to be a result of an incomplete
+installation of gcc 2.2 which allowed some non-ANSI compatible include files
+into the compilation.  In particular this affected virtually all ioctl() calls.
+
+** Once you pull down a menu from the menubar, it won't go away.
 
-This problem will not happen if the m-...h file for your type of
-machine defines NO_UNION_TYPE.  That is the recommended setting now.
+It has been claimed that this is caused by a bug in certain very old (1990?)
+versions of the twm window manager.  It doesn't happen with recent vintages,
+or with other window managers.
+
+** Emacs ignores the "help" key when running OLWM.
 
-* `Error: No ExtNode to pop!' on Linux systems with Lesstif.
+OLWM grabs the help key, and retransmits it to the appropriate client using
+XSendEvent.  Allowing emacs to react to synthetic events is a security hole,
+so this is turned off by default.  You can enable it by setting the variable
+x-allow-sendevents to t.  You can also cause fix this by telling OLWM to not
+grab the help key, with the null binding "OpenWindows.KeyboardCommand.Help:".
+
+** Programs running under terminal emulator do not recognize `emacs'
+   terminal type.
 
-This error message has been observed with lesstif-0.75a.  It does not
-appear to cause any harm.
+The cause of this is a shell startup file that sets the TERMCAP
+environment variable.  The terminal emulator uses that variable to
+provide the information on the special terminal type that Emacs
+emulates.
 
-* Sparc Linux -vs- libXmu.
+Rewrite your shell startup file so that it does not change TERMCAP
+in such a case.  You could use the following conditional which sets
+it only if it is undefined.
+
+    if ( ! ${?TERMCAP} ) setenv TERMCAP ~/my-termcap-file
+
+Or you could set TERMCAP only when you set TERM--which should not
+happen in a non-login shell.
+
+* Compatibility problems (with Emacs 18, GNU Emacs, or previous XEmacs/lemacs)
 
-There have been reports of configure not detecting libXmu on
-SparcLinux.  The fix is to add -lXmu to the link flags.
+** "Symbol's value as variable is void: unread-command-char".
+** "Wrong type argument: arrayp, #<keymap 143 entries>"
+** "Wrong type argument: stringp, [#<keypress-event return>]"
 
-* Debian Linux and Berkeley db include files.
+There are a few incompatible changes in XEmacs, and these are the
+symptoms.  Some of the emacs-lisp code you are running needs to be
+updated to be compatible with XEmacs.
+
+The code should not treat keymaps as arrays (use `define-key', etc.),
+should not use obsolete variables like `unread-command-char' (use
+`unread-command-event').  Many (most) of the new ways of doing things
+are compatible in GNU Emacs and XEmacs.
 
-Debian Linux puts the Berkeley db include files in /usr/include/db
-instead of /usr/include.  The fix is to use
---site-includes=/usr/include/db with configure.
+Modern Emacs packages (Gnus, VM, etc) are written to support GNU Emacs
+and XEmacs.  We have provided modified versions of several popular
+emacs packages (dired, etc) which are compatible with this version of
+emacs.  Check to make sure you have not set your load-path so that
+your private copies of these packages are being found before the
+versions in the lisp directory.
+
+Make sure that your load-path and your $EMACSLOADPATH environment
+variable are not pointing at an Emacs18 lisp directory.  This will
+cripple emacs.
 
-* Signaling: (error "Byte code stack underflow (byte compiler bug), pc 38")
+** Some packages that worked before now cause the error
+   Wrong type argument: arrayp, #<face ... >
+
+Code which uses the `face' accessor functions must be recompiled with xemacs
+19.9 or later.  The functions whose callers must be recompiled are: face-font,
+face-foreground, face-background, face-background-pixmap, and face-underline-p.
+The .elc files generated by version 19.9 will work in 19.6 and 19.8, but older
+.elc files which contain calls to these functions will not work in 19.9.
+
+** Signaling: (error "Byte code stack underflow (byte compiler bug), pc 38")
 
 This error is given when XEmacs 20 is compiled without MULE support
 but is attempting to load a .elc which requires MULE support.  The fix
 is to rebytecompile the offending file.
 
-* alloc.c will not compile without -P on HP-UX 9.05
-
-Pekka Marjola <pema@iki.fi> writes:
-  Gcc (2.7.2, with cpplib IIRC) required something (-P worked :) to
-  get it to compile. Otherwise it failed on those DEFUN macros with
-  comments inside parameter lists (like buffer.c, line 296).
-
-* Excessive optimization with pgcc can break XEmacs
-
-It has been reported on some systems that compiling with -O6 can lead
-to XEmacs failures.  The workaround is to use a lower optimization
-level.  -O2 and -O4 have been tested extensively.
-
-* -O2 optimization on Irix 5.3 can cause compiler complaint.
-
-Nick J. Crabtree <nickc@scopic.com> writes:
-  Comes up OK on a tty (all I have available over this slow link). Ill
-  give it a hammering tomorrow.  The -O2 optimisation complained about
-  sizes exceeding thresholds; I haven't bothered to use the -Olimit
-  option it recommends.
-
-* Excessive optimization on AIX 4.2 can lead to compiler failure.
-
-Valdis.Kletnieks@vt.edu writes:
-  At least at the b34 level, and the latest-and-greatest IBM xlc
-  (3.1.4.4), there are problems with -O3.  I haven't investigated
-  further.
-
-* Sed problems on Solaris 2.5
-
-There have been reports of Sun sed truncating very lines in the
-Makefile during configuration.  The workaround is to use GNU sed or,
-even better, think of a better way to generate Makefile, and send us a 
-patch. :-)
-
-* CDE is not autodetected on HP.
-
-Richard Cognot <cognot@ensg.u-nancy.fr> writes:
-  I have to force /usr/dt/{lib,include} into the site include/lib
-  command line options. I could add these in hpux10.h, but then I
-  would think these should be pretty standard (to my knowledge, that's
-  also where Sun puts its CDE stuff), so that wouldn't fix the problem
-  on other architectures. AAMOF, when these path are given, CDE is
-  detected, and DragAndDrop works (more or less, see next issue).
-
-* Signalling: (wrong-type-argument ...) when loading mail-abbrevs
+** Signaling: (wrong-type-argument ...) when loading mail-abbrevs
 
 The is seen when installing the Big Brother Data Base (bbdb) which
 includes an outdated copy of mail-abbrevs.el.  Remove the copy that
 comes with bbdb and use the one that comes with XEmacs.
-
-* Linking with -rpath on IRIX.
-
-Darrell Kindred <dkindred@cmu.edu> writes:
-There are a couple of problems [with use of -rpath with Irix ld], though:
-
-  1. The ld in IRIX 5.3 ignores all but the last -rpath
-     spec, so the patched configure spits out a warning
-     if --x-libraries or --site-runtime-libraries are
-     specified under irix 5.x, and it only adds -rpath 
-     entries for the --site-runtime-libraries.  This bug was
-     fixed sometime between 5.3 and 6.2.
-
-  2. IRIX gcc 2.7.2 doesn't accept -rpath directly, so
-     it would have to be prefixed by -Xlinker or "-Wl,".
-     This would be fine, except that configure compiles with
-        ${CC-cc} $CFLAGS $LDFLAGS ...
-     rather than quoting $LDFLAGS with prefix-args, like
-     src/Makefile does.  So if you specify --x-libraries
-     or --site-runtime-libraries, you must use --use-gcc=no,
-     or configure will fail.
-
-* On Irix 5.x and 6.x, the dumped XEmacs (xemacs) core dumps when executed 
-  on another machine, or after newer SGI IRIX patches have been installed.
-
-The xemacs binary must be executed with the same "libc.so" file which
-was used when the xemacs binary was dumped.  Some SGI IRIX patches
-update this file.  Make sure that all machines using the xemacs binary
-are using the same set of IRIX patches.  If xemacs core dumps after a
-patch upgrade then you will have to redump it from temacs.
-
-* xemacs: can't resolve symbol '__malloc_hook'
-
-This is a Linux problem where you've compiled the XEmacs binary on a libc
-5.4 with version higher than 5.4.19 and attempted to run the binary against
-an earlier version.  The solution is to upgrade your old library.
-
-* VM appears to hang in large folders
-
-This is normal (trust us) when upgrading to VM-6.22 from earlier
-versions.  Let VM finish what it is doing and all will be well.
--- a/etc/AIX.DUMP	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-The following text was written by someone at IBM to describe an older
-version of the code for dumping on AIX.  It does NOT apply to
-the current version of Emacs.  It is included in case someone
-is curious.
-
-
-I (rms) couldn't understand the code, and I can't fully understand
-this text either.  I rewrote the code to use the same basic
-principles, as far as I understood them, but more cleanly.  This
-rewritten code does not always work.  In fact, the basic method 
-seems to be intrinsically flawed.
-
-Since then, someone else implemented a different way of dumping on
-the RS/6000, which does seem to work.  None of the following
-applies to the way Emacs now dumps on the 6000.  However, the
-current method fails to use shared libraries.  Anyone who might be
-interested in trying to resurrect the previous method might still
-find the following information useful.
-
-
-It seems that the IBM dumping code was simply set up to detect when
-the dumped data cannot be used, and in that case to act approximately
-as if CANNOT_DUMP had been defined all along.  (This is buried in
-paragraph 1.)  It seems simpler just to define CANNOT_DUMP, since
-Emacs is not set up to decide at run time whether there is dumping or
-not, and doing so correctly would be a lot of work.
-
-Note that much of the other information, such as the name and format 
-of the dumped data file, has been changed.
-
-
-		--rms
-
-
-
-        A different approach has been taken to implement the
-"dump/load" feature of GNU Emacs for AIX 3.1.  Traditionally the
-unexec function creates a new a.out executable file which contains
-preloaded Lisp code.  Executing the new a.out file (normally called
-xemacs) provides rapid startup since the standard suite of Lisp code
-is preloaded as part of the executable file.
-
-        AIX 3.1 architecture precludes the use of this technique
-because the dynamic loader cannot guarantee a fixed starting location
-for the process data section.  The loader loads all shared library
-data BEFORE process data.  When a shared library changes its data
-space, the process initial data section address (_data) will change
-and all global process variables are automatically relocated to new
-addresses.  This invalidates the "dumped" Emacs executable which has
-data addresses which are not relocatable and now corrupt.  Emacs would
-fail to execute until rebuilt with the new libraries.
-
-        To circumvent the dynamic loader feature of AIX 3.1, the dump process
-has been modified as follows:
-
-        1) A new executable file is NOT created.  Instead, both pure and
-           impure data are saved by the dump function and automatically
-           reloaded during process initialization.  If any of the saved data
-           is unavailable or invalid, loadup.el will be automatically loaded.
-
-        2) Pure data is defined as a shared memory segment and attached
-           automatically as read-only data during initialization.  This
-           allows the pure data to be a shared resource among all Emacs
-           processes.  The shared memory segment size is PURESIZE bytes.
-           If the shared memory segment is unavailable or invalid, a new
-           shared memory segment is created and the impure data save file
-           is destroyed, forcing loadup.el to be reloaded.
-
-        3) The ipc key used to create and access Emacs shared memory is
-           SHMKEY and can be overridden by the environment symbol EMACSSHMKEY.
-           Only one ipc key is allowed per system.  The environment symbol
-           is provided in case the default ipc key has already been used.
-
-        4) Impure data is written to the ../bin/.emacs.data file by the
-           dump function.  This file contains the process' impure data
-           at the moment of load completion.  During Emacs initialization,
-           the process' data section is expanded and overwritten
-           with the .emacs.data file contents.
-
-        The following are software notes concerning the GNU Emacs dump function under AIX 3.1:
-
-        1) All of the new dump/load code is activated by the #ifdef SHMKEY
-           conditional.
-
-        2) The automatic loading of loadup.el does NOT cause the dump function
-           to be performed.  Therefore once the pure/impure data is discarded,
-           someone must remake Emacs to create the saved data files.  This
-           should only be necessary when Emacs is first installed or whenever
-           AIX is upgraded.
-
-        3) Emacs will exit with an error if executed in a non-X environment
-           and the dump function was performed within a X window.  Therefore
-           the dump function should always be performed in a non-X
-           environment unless the X environment will ALWAYS be available.
-
-        4) Emacs only maintains the lower 24 bits of any data address.  The
-           remaining upper 8 bits are reset by the XPNTR macro whenever any
-           Lisp object is referenced.  This poses a serious problem because
-           pure data is stored in segment 3 (shared memory) and impure data
-           is stored in segment 2 (data).  To reset the upper 8 address bits
-           correctly, XPNTR must guess as to which type of data is represented
-           by the lower 24 address bits.  The technique chosen is based upon
-           the fact that pure data offsets in segment 3 range from
-           0 -> PURESIZE-1, which are relatively small offsets.  Impure data
-           offsets in segment 2 are relatively large (> 0x40000) because they
-           must follow all shared library data.  Therefore XPNTR adds segment
-           3 to each data offset which is small (below PURESIZE) and adds
-           segment 2 to all other offsets.  This algorithm will remain valid
-           as long as a) pure data size remains relatively small and b) process
-           data is loaded after shared library data.
-
-           To eliminate this guessing game, Emacs must preserve the 32-bit
-           address and add additional data object overhead for the object type
-           and garbage collection mark bit.
-
-        5) The data section written to .emacs.data is divided into three
-           areas as shown below.  The file header contains four character
-           pointers which are used during automatic data loading.  The file's
-           contents will only be used if the first three addresses match
-           their counterparts in the current process.  The fourth address is
-           the new data segment address required to hold all of the preloaded
-           data.
-
-
-                        .emacs.data file format
-
-                +---------------------------------------+ \
-                |     address of _data                  |  \
-                +---------------------------------------+   \
-                |     address of _end                   |    \
-                +---------------------------------------+      file header
-                |     address of initial sbrk(0)        |    /
-                +---------------------------------------+   /
-                |     address of final sbrk(0)          |  /
-                +---------------------------------------+ /
-                \                                       \
-                \                                       \
-                      all data to be loaded from
-                      _data to _end
-                \                                       \
-                \                                       \
-                +---------------------------------------+
-                \                                       \
-                \                                       \
-                      all data to be loaded from
-                      initial to final sbrk(0)
-                \                                       \
-                +---------------------------------------+
-
-
-           Sections two and three contain the preloaded data which is
-           restored at locations _data and initial sbrk(0) respectively.
-
-           The reason two separate sections are needed is that process
-           initialization allocates data (via malloc) prior to main()
-           being called.  Therefore _end is several kbytes lower than
-           the address returned by an initial sbrk(0).  This creates a
-           hole in the process data space and malloc will abort if this
-           region is overwritten during the load function.
-
-           One further complication with the malloc'd space is that it
-           is partially empty and must be "consumed" so that data space
-           malloc'd in the future is not assigned to this region.  The malloc
-           function distributed with Emacs anticipates this problem but the
-           AIX 3.1 version does not.  Therefore, repeated malloc calls are
-           needed to exhaust this initial malloc space.  How do you know
-           when malloc has exhausted its free memory?  You don't!  So the
-           code must repeatedly call malloc for each buffer size and
-           detect when a new memory page has been allocated.  Once the new
-           memory page is allocated, you can calculate the number of free
-           buffers in that page and request exactly that many more.  Future
-           malloc requests will now be added at the top of a new memory page.
-
-           One final point - the initial sbrk(0) is the value of sbrk(0)
-           after all of the above malloc hacking has been performed.
-
-
-        The following Emacs dump/load issues need to be addressed:
-
-        1) Loadup.el exits with an error message because the xemacs and
-           emacs-xxx files are not created during the dump function.
-
-           Loadup.el should be changed to check for the new .emacs.data
-           file.
-
-        2) Dump will only support one .emacs.data file for the entire
-           system.  This precludes the ability to allow each user to
-           define his/her own "dumped" Emacs.
-
-           Add an environment symbol to override the default .emacs.data
-           path.
-
-        3) An error message "error in init file" is displayed out of
-           startup.el when the dumped Emacs is invoked by a non-root user.
-           Although all of the preloaded Lisp code is present, the important
-           purify-flag has not been set back to Qnil - precluding the
-           loading of any further Lisp code until the flag is manually
-           reset.
-
-           The problem appears to be an access violation which will go
-           away if the read-write access modes to all of the files are
-           changed to rw-.
-
-        4) In general, all file access modes should be changed from
-           rw-r--r-- to rw-rw-rw-.  They are currently setup to match
-           standard AIX access modes.
-
-        5) The dump function is not invoked when the automatic load of
-           loadup.el is performed.
-
-           Perhaps the command arguments array should be expanded with
-           "dump" added to force an automatic dump.
-
-        6) The automatic initialization function alloc_shm will delete
-           the shared memory segment and .emacs.data file if the "dump"
-           command argument is found in ANY argument position.  The
-           dump function will only take place in loadup.el if "dump"
-           is the third or fourth command argument.
-
-           Change alloc_shm to live by loadup.el rules.
-
--- a/etc/INTERVIEW	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +0,0 @@
-
-			   GNU'S NOT UNIX
-
-		 Conducted by David Betz and Jon Edwards
-
-	      Richard Stallman discusses his public-domain
-		    UNIX-compatible software system
-			   with BYTE editors
-			      (July 1986)
-
-Copyright (C) 1986 Richard Stallman.  Permission is granted to make and
-distribute copies of this article as long as the copyright and this notice
-appear on all copies.
-
-Richard Stallman has undertaken probably the most ambitious free software
-development project to date, the GNU system.  In his GNU Manifesto,
-published in the March 1985 issue of Dr. Dobb's Journal, Stallman described
-GNU as a "complete Unix-compatible software system which I am writing so
-that I can give it away free to everyone who can use it...  Once GNU is
-written, everyone will be able to obtain good system software free, just
-like air."  (GNU is an acronym for GNU's Not UNIX; the "G" is pronounced.)
-
-   Stallman is widely known as the author of EMACS, a powerful text editor
-that he developed at the MIT Artificial Intelligence Laboratory.  It is no
-coincidence that the first piece of software produced as part of the GNU
-project was a new implementation of EMACS.  GNU EMACS has already achieved a
-reputation as one of the best implementations of EMACS currently available
-at any price.
-
-BYTE: We read your GNU Manifesto in the March 1985 issue of Dr. Dobb's.
-What has happened since?  Was that really the beginning, and how have you
-progressed since then?
-
-Stallman: The publication in Dr. Dobb's wasn't the beginning of the
-project.  I wrote the GNU Manifesto when I was getting ready to start the
-project, as a proposal to ask computer manufacturers for funding.  They
-didn't want to get involved, and I decided that rather than spend my time
-trying to pursue funds, I ought to spend it writing code.  The manifesto was
-published about a year and a half after I had written it, when I had barely
-begun distributing the GNU EMACS.  Since that time, in addition to making
-GNU EMACS more complete and making it run on many more computers, I have
-nearly finished the optimizing C compiler and all the other software that
-is needed for running C programs.  This includes a source-level debugger
-that has many features that the other source-level debuggers on UNIX don't
-have.  For example, it has convenience variables within the debugger so you
-can save values, and it also has a history of all the values that you have
-printed out, making it tremendously easier to chase around list structures.
-
-BYTE: You have finished an editor that is now widely distributed and you
-are about to finish the compiler.
-
-Stallman: I expect that it will be finished this October.
-
-BYTE: What about the kernel?
-
-Stallman: I'm currently planning to start with the kernel that was written
-at MIT and was released to the public recently with the idea that I would
-use it.  This kernel is called TRIX; it's based on remote procedure call.  I
-still need to add compatibility for a lot of the features of UNIX which it
-doesn't have currently.  I haven't started to work on that yet.  I'm
-finishing the compiler before I go to work on the kernel.  I am also going
-to have to rewrite the file system.  I intend to make it failsafe just by
-having it write blocks in the proper order so that the disk structure is
-always consistent.  Then I want to add version numbers.  I have a complicated
-scheme to reconcile version numbers with the way people usually use UNIX.
-You have to be able to specify filenames without version numbers, but you
-also have to be able to specify them with explicit version numbers, and
-these both need to work with ordinary UNIX programs that have not been
-modified in any way to deal with the existence of this feature.  I think I
-have a scheme for doing this, and only trying it will show me whether it
-really does the job.
-
-BYTE: Do you have a brief description you can give us as to how GNU as a
-system will be superior to other systems?  We know that one of your goals is
-to produce something that is compatible with UNIX.  But at least in the area
-of file systems you have already said that you are going to go beyond UNIX
-and produce something that is better.
-
-Stallman: The C compiler will produce better code and run faster.  The
-debugger is better.  With each piece I may or may not find a way to improve
-it.  But there is no one answer to this question.  To some extent I am
-getting the benefit of reimplementation, which makes many systems much
-better.  To some extent it's because I have been in the field a long time
-and worked on many other systems.  I therefore have many ideas to bring to
-bear.  One way in which it will be better is that practically everything in
-the system will work on files of any size, on lines of any size, with any
-characters appearing in them.  The UNIX system is very bad in that regard.
-It's not anything new as a principle of software engineering that you
-shouldn't have arbitrary limits.  But it just was the standard practice in
-writing UNIX to put those in all the time, possibly just because they were
-writing it for a very small computer.  The only limit in the GNU system is
-when your program runs out of memory because it tried to work on too much
-data and there is no place to keep it all.
-
-BYTE: And that isn't likely to be hit if you've got virtual memory.  You may
-just take forever to come up with the solution.
-
-Stallman: Actually these limits tend to hit in a time long before you take
-forever to come up with the solution.
-
-BYTE: Can you say something about what types of machines and environments
-GNU EMACS in particular has been made to run under?  It's now running on
-VAXes; has it migrated in any form to personal computers?
-
-Stallman: I'm not sure what you mean by personal computers.  For example, is
-a Sun a personal computer?  GNU EMACS requires at least a megabyte of
-available memory and preferably more.  It is normally used on machines that
-have virtual memory.  Except for various technical problems in a few C
-compilers, almost any machine with virtual memory and running a fairly
-recent version of UNIX will run GNU EMACS, and most of them currently do.
-
-BYTE: Has anyone tried to port it to Ataris or Macintoshes?
-
-Stallman: The Atari 1040ST still doesn't have quite enough memory.  The next
-Atari machine, I expect, will run it.  I also think that future Ataris will
-have some forms of memory mapping.  Of course, I am not designing the
-software to run on the kinds of computers that are prevalent today.  I knew
-when I started this project it was going to take a few years.  I therefore
-decided that I didn't want to make a worse system by taking on the
-additional challenge of making it run in the currently constrained
-environment.  So instead I decided I'm going to write it in the way that
-seems the most natural and best.  I am confident that in a couple of years
-machines of sufficient size will be prevalent.  In fact, increases in memory
-size are happening so fast it surprises me how slow most of the people are
-to put in virtual memory; I think it is totally essential.
-
-BYTE: I think people don't really view it as being necessary for
-single-user machines.
-
-Stallman: They don't understand that single user doesn't mean single
-program.  Certainly for any UNIX-like system it's important to be able to
-run lots of different processes at the same time even if there is only one
-of you.  You could run GNU EMACS on a nonvirtual-memory machine with enough
-memory, but you couldn't run the rest of the GNU system very well or a UNIX
-system very well.
-
-BYTE: How much of LISP is present in GNU EMACS?  It occurred to me that it
-may be useful to use that as a tool for learning LISP.
-
-Stallman: You can certainly do that.  GNU EMACS contains a complete,
-although not very powerful, LISP system.  It's powerful enough for writing
-editor commands.  It's not comparable with, say, a Common LISP System,
-something you could really use for system programming, but it has all the
-things that LISP needs to have.
-
-BYTE: Do you have any predictions about when you would be likely to
-distribute a workable environment in which, if we put it on our machines or
-workstations, we could actually get reasonable work done without using
-anything other than code that you distribute?
-
-Stallman: It's really hard to say.  That could happen in a year, but of
-course it could take longer.  It could also conceivably take less, but
-that's not too likely anymore.  I think I'll have the compiler finished in a
-month or two.  The only other large piece of work I really have to do is in
-the kernel.  I first predicted GNU would take something like two years, but
-it has now been two and a half years and I'm still not finished.  Part of
-the reason for the delay is that I spent a lot of time working on one
-compiler that turned out to be a dead end.  I had to rewrite it completely.
-Another reason is that I spent so much time on GNU EMACS.  I originally
-thought I wouldn't have to do that at all.
-
-BYTE: Tell us about your distribution scheme.
-
-Stallman: I don't put software or manuals in the public domain, and the
-reason is that I want to make sure that all the users get the freedom to
-share.  I don't want anyone making an improved version of a program I wrote
-and distributing it as proprietary.  I don't want that to ever be able to
-happen.  I want to encourage the free improvements to these programs, and
-the best way to do that is to take away any temptation for a person to make
-improvements nonfree.  Yes, a few of them will refrain from making
-improvements, but a lot of others will make the same improvements and
-they'll make them free.
-
-BYTE: And how do you go about guaranteeing that?
-
-Stallman: I do this by copyrighting the programs and putting on a notice
-giving people explicit permission to copy the programs and change them but
-only on the condition that they distribute under the same terms that I
-used, if at all.  You don't have to distribute the changes you make to any
-of my programs--you can just do it for yourself, and you don't have to give
-it to anyone or tell anyone.  But if you do give it to someone else, you
-have to do it under the same terms that I use.
-
-BYTE: Do you obtain any rights over the executable code derived from the C
-compiler?
-
-Stallman: The copyright law doesn't give me copyright on output from the
-compiler, so it doesn't give me a way to say anything about that, and in
-fact I don't try to.  I don't sympathize with people developing proprietary
-products with any compiler, but it doesn't seem especially useful to try to
-stop them from developing them with this compiler, so I am not going to.
-
-BYTE: Do your restrictions apply if people take pieces of your code to
-produce other things as well?
-
-Stallman: Yes, if they incorporate with changes any sizable piece.  If it
-were two lines of code, that's nothing; copyright doesn't apply to that.
-Essentially, I have chosen these conditions so that first there is a
-copyright, which is what all the software hoarders use to stop everybody
-from doing anything, and then I add a notice giving up part of those
-rights.  So the conditions talk only about the things that copyright applies
-to.  I don't believe that the reason you should obey these conditions is
-because of the law.  The reason you should obey is because an upright person
-when he distributes software encourages other people to share it further.
-
-BYTE: In a sense you are enticing people into this mode of thinking by
-providing all of these interesting tools that they can use but only if they
-buy into your philosophy.
-
-Stallman: Yes.  You could also see it as using the legal system that
-software hoarders have set up against them.  I'm using it to protect the
-public from them.
-
-BYTE: Given that manufacturers haven't wanted to fund the project, who do
-you think will use the GNU system when it is done?
-
-Stallman: I have no idea, but it is not an important question.  My purpose
-is to make it possible for people to reject the chains that come with
-proprietary software.  I know that there are people who want to do that.
-Now, there may be others who don't care, but they are not my concern.  I
-feel a bit sad for them and for the people that they influence.  Right now a
-person who perceives the unpleasantness of the terms of proprietary
-software feels that he is stuck and has no alternative except not to use a
-computer.  Well, I am going to give him a comfortable alternative.
-    Other people may use the GNU system simply because it is technically
-superior.  For example, my C compiler is producing about as good a code as I
-have seen from any C compiler.  And GNU EMACS is generally regarded as being
-far superior to the commercial competition.  And GNU EMACS was not funded by
-anyone either, but everyone is using it.  I therefore think that many people
-will use the rest of the GNU system because of its technical advantages.
-But I would be doing a GNU system even if I didn't know how to make it
-technically better because I want it to be socially better.  The GNU project
-is really a social project.  It uses technical means to make a change in
-society.
-
-BYTE: Then it is fairly important to you that people adopt GNU.  It is not
-just an academic exercise to produce this software to give it away to
-people.  You hope it will change the way the software industry operates.
-
-Stallman: Yes.  Some people say no one will ever use it because it doesn't
-have some attractive corporate logo on it, and other people say that they
-think it is tremendously important and everyone's going to want to use it.
-I have no way of knowing what is really going to happen.  I don't know any
-other way to try to change the ugliness of the field that I find myself in,
-so this is what I have to do.
-
-BYTE: Can you address the implications?  You obviously feel that this is an
-important political and social statement.
-
-Stallman: It is a change.  I'm trying to change the way people approach
-knowledge and information in general.  I think that to try to own knowledge,
-to try to control whether people are allowed to use it, or to try to stop
-other people from sharing it, is sabotage.  It is an activity that benefits
-the person that does it at the cost of impoverishing all of society.  One
-person gains one dollar by destroying two dollars' worth of wealth.  I think
-a person with a conscience wouldn't do that sort of thing except perhaps if
-he would otherwise die.  And of course the people who do this are fairly
-rich; I can only conclude that they are unscrupulous.  I would like to see
-people get rewards for writing free software and for encouraging other
-people to use it.  I don't want to see people get rewards for writing
-proprietary software because that is not really a contribution to society.
-The principle of capitalism is the idea that people manage to make money by
-producing things and thereby are encouraged to do what is useful,
-automatically, so to speak.  But that doesn't work when it comes to owning
-knowledge.  They are encouraged to do not really what's useful, and what
-really is useful is not encouraged.  I think it is important to say that
-information is different from material objects like cars and loaves of
-bread because people can copy it and share it on their own and, if nobody
-attempts to stop them, they can change it and make it better for
-themselves.  That is a useful thing for people to do.  This isn't true of
-loaves of bread.  If you have one loaf of bread and you want another, you
-can't just put your loaf of bread into a bread copier.  you can't make
-another one except by going through all the steps that were used to make
-the first one.  It therefore is irrelevant whether people are permitted to
-copy it--it's impossible.
-   Books were printed only on printing presses until recently.  It was
-possible to make a copy yourself by hand, but it wasn't practical because
-it took so much more work than using a printing press.  And it produced
-something so much less attractive that, for all intents and purposes, you
-could act as if it were impossible to make books except by mass producing
-them.  And therefore copyright didn't really take any freedom away from the
-reading public.  There wasn't anything that a book purchaser could do that
-was forbidden by copyright.
-   But this isn't true for computer programs.  It's also not true for tape
-cassettes.  It's partly false now for books, but it is still true that for
-most books it is more expensive and certainly a lot more work to Xerox them
-than to buy a copy, and the result is still less attractive.  Right now we
-are in a period where the situation that made copyright harmless and
-acceptable is changing to a situation where copyright will become
-destructive and intolerable.  So the people who are slandered as "pirates"
-are in fact the people who are trying to do something useful that they have
-been forbidden to do.   The copyright laws are entirely designed to help
-people take complete control over the use of some information for their own
-good.  But they aren't designed to help people who want to make sure that
-the information is accessible to the public and stop others from depriving
-the public.  I think that the law should recognize a class of works that are
-owned by the public, which is different from public domain in the same
-sense that a public park is different from something found in a garbage
-can.  It's not there for anybody to take away, it's there for everyone to
-use but for no one to impede.  Anybody in the public who finds himself being
-deprived of the derivative work of something owned by the public should be
-able to sue about it.
-
-BYTE: But aren't pirates interested in getting copies of programs because
-they want to use those programs, not because they want to use that
-knowledge to produce something better?
-
-Stallman: I don't see that that's the important distinction.  More people
-using a program means that the program contributes more to society.  You
-have a loaf of bread that could be eaten either once or a million times.
-
-BYTE: Some users buy commercial software to obtain support.  How does your
-distribution scheme provide support?
-
-Stallman: I suspect that those users are misled and are not thinking
-clearly.  It is certainly useful to have support, but when they start
-thinking about how that has something to do with selling software or with
-the software being proprietary, at that point they are confusing
-themselves.  There is no guarantee that proprietary software will receive
-good support.  Simply because sellers say that they provide support, that
-doesn't mean it will be any good.  And they may go out of business.  In fact,
-people think that GNU EMACS has better support than commercial EMACSes.  One
-of the reasons is that I'm probably a better hacker than the people who
-wrote the other EMACSes, but the other reason is that everyone has sources
-and there are so many people interested in figuring out how to do things
-with it that you don't have to get your support from me.  Even just the free
-support that consists of my fixing bugs people report to me and
-incorporating that in the next release has given people a good level of
-support.  You can always hire somebody to solve a problem for you, and when
-the software is free you have a competitive market for the support.  You can
-hire anybody.  I distribute a service list with EMACS, a list of people's
-names and phone numbers and what they charge to provide support.
-
-BYTE: Do you collect their bug fixes?
-
-Stallman: Well, they send them to me.  I asked all the people who wanted to
-be listed to promise that they would never ask any of their customers to
-keep secret whatever they were told or any changes they were given to the
-GNU software as part of that support.
-
-BYTE: So you can't have people competing to provide support based on their
-knowing the solution to some problem that somebody else doesn't know.
-
-Stallman: No.  They can compete based on their being clever and more likely
-to find the solution to your problem, or their already understanding more
-of the common problems, or knowing better how to explain to you what you
-should do.  These are all ways they can compete.  They can try to do better,
-but they cannot actively impede their competitors.
-
-BYTE: I suppose it's like buying a car.  You're not forced to go back to the
-original manufacturer for support or continued maintenance.
-
-Stallman: Or buying a house--what would it be like if the only person who
-could ever fix problems with your house was the contractor who built it
-originally?  That is the kind of imposition that's involved in proprietary
-software.  People tell me about a problem that happens in UNIX.  Because
-manufacturers sell improved versions of UNIX, they tend to collect fixes
-and not give them out except in binaries.  The result is that the bugs don't
-really get fixed.
-
-BYTE: They're all duplicating effort trying to solve bugs independently.
-
-Stallman: Yes.  Here is another point that helps put the problem of
-proprietary information in a social perspective.  Think about the liability
-insurance crisis.  In order to get any compensation from society, an injured
-person has to hire a lawyer and split the money with that lawyer.  This is a
-stupid and inefficient way of helping out people who are victims of
-accidents.  And consider all the time that people put into hustling to take
-business away from their competition.  Think of the pens that are packaged
-in large cardboard packages that cost more than the pen--just to make sure
-that the pen isn't stolen.  Wouldn't it be better if we just put free pens
-on every street corner?  And think of all the toll booths that impede the
-flow of traffic.  It's a gigantic social phenomenon.  People find ways of
-getting money by impeding society.  Once they can impede society, they can
-be paid to leave people alone.  The waste inherent in owning information
-will become more and more important and will ultimately make the difference
-between the utopia in which nobody really has to work for a living because
-it's all done by robots and a world just like ours where everyone spends
-much time replicating what the next fellow is doing.
-
-BYTE: Like typing in copyright notices on the software.
-
-Stallman: More like policing everyone to make sure that they don't have
-forbidden copies of anything and duplicating all the work people have
-already done because it is proprietary.
-
-BYTE: A cynic might wonder how you earn your living.
-
-Stallman: From consulting.  When I do consulting, I always reserve the right
-to give away what I wrote for the consulting job.  Also, I could be making
-my living by mailing copies of the free software that I wrote and some that
-other people wrote.  Lots of people send in $150 for GNU EMACS, but now this
-money goes to the Free Software Foundation that I started.  The foundation
-doesn't pay me a salary because it would be a conflict of interest.
-Instead, it hires other people to work on GNU.  As long as I can go on
-making a living by consulting I think that's the best way.
-
-BYTE: What is currently included in the official GNU distribution tape?
-
-Stallman: Right now the tape contains GNU EMACS (one version fits all
-computers); Bison, a program that replaces YACC; MIT Scheme, which is
-Professor Sussman's super-simplified dialect of LISP; and Hack, a
-dungeon-exploring game similar to Rogue.
-
-BYTE: Does the printed manual come with the tape as well?
-
-Stallman: No.  Printed manuals cost $15 each or copy them yourself.  Copy
-this interview and share it, too.
-
-BYTE: How can you get a copy of that?
-
-Stallman: Write to the Free Software Foundation, 675 Massachusetts Ave.,
-Cambridge, MA 02139.
-
-[In June 1995, this address changed to:
-     Free Software Foundation
-     59 Temple Place - Suite 330
-     Boston, MA  02111-1307,  USA
-     Voice:  +1-617-542-5942
-     Fax:    +1-617-542-2652
--gnu@prep.ai.mit.edu
-]
-
-BYTE: What are you going to do when you are done with the GNU system?
-
-Stallman: I'm not sure.  Sometimes I think that what I'll go on to do is the
-same thing in other areas of software.
-
-BYTE: So this is just the first of a whole series of assaults on the
-software industry?
-
-Stallman: I hope so.  But perhaps what I'll do is just live a life of ease
-working a little bit of the time just to live.  I don't have to live
-expensively.  The rest of the time I can find interesting people to hang
-around with or learn to do things that I don't know how to do.
-
-Editorial Note: BYTE holds the right to provide this interview on BIX but
-will not interfere with its distribution.
-
-Richard Stallman, 545 Technology Square, Room 703, Cambridge, MA 02139.
-Copyright (C) 1986 Richard Stallman.  Permission is granted to make and
-distribute copies of this article as long as the copyright and this notice
-appear on all copies.
--- a/etc/LNEWS	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3171 +0,0 @@
-This is Info file LNEWS, produced by Makeinfo-1.55 from the input file
-news.texi.
-
-   This file describes the new Lisp features of Emacs version 19 as
-first released to the public.  For Lisp changes in subsequent Emacs 19
-releases, see the file NEWS.
-
-New Features in the Lisp Language
-=================================
-
-   * The new function `delete' is a traditional Lisp function.  It takes
-     two arguments, ELT and LIST, and deletes from LIST any elements
-     that are equal to ELT.  It uses the function `equal' to compare
-     elements with ELT.
-
-   * The new function `member' is a traditional Lisp function.  It takes
-     two arguments, ELT and LIST, and finds the first element of LIST
-     that is equal to ELT.  It uses the function `equal' to compare
-     each list element with ELT.
-
-     The value is a sublist of LIST, whose first element is the one
-     that was found.  If no matching element is found, the value is
-     `nil'.
-
-   * The new function `indirect-function' finds the effective function
-     definition of an object called as a function.  If the object is a
-     symbol, `indirect-function' looks in the function definition of the
-     symbol.  It keeps doing this until it finds something that is not a
-     symbol.
-
-   * There are new escape sequences for use in character and string
-     constants.  The escape sequence `\a' is equivalent to `\C-g', the
-     ASCII BEL character (code 7).  The escape sequence `\x' followed
-     by a hexidecimal number represents the character whose ASCII code
-     is that number.  There is no limit on the number of digits in the
-     hexidecimal value.
-
-   * The function `read' when reading from a buffer now does not skip a
-     terminator character that terminates a symbol.  It leaves that
-     character to be read (or just skipped, if it is whitespace) next
-     time.
-
-   * When you use a function FUNCTION as the input stream for `read',
-     it is usually called with no arguments, and should return the next
-     character.  In Emacs 19, sometimes FUNCTION is called with one
-     argument (always a character).  When that happens, FUNCTION should
-     save the argument and arrange to return it when called next time.
-
-   * `random' with integer argument N returns a random number between 0
-     and N-1.
-
-   * The functions `documentation' and `documentation-property' now
-     take an additional optional argument which, if non-`nil', says to
-     refrain from calling `substitute-command-keys'.  This way, you get
-     the exact text of the documentation string as written, without the
-     usual substitutions.  Make sure to call `substitute-command-keys'
-     yourself if you decide to display the string.
-
-   * The new function `invocation-name' returns as a string the program
-     name that was used to run Emacs, with any directory names
-     discarded.
-
-   * The new function `map-y-or-n-p' makes it convenient to ask a series
-     of similar questions.  The arguments are PROMPTER, ACTOR, LIST,
-     and optional HELP.
-
-     The value of LIST is a list of objects, or a function of no
-     arguments to return either the next object or `nil' meaning there
-     are no more.
-
-     The argument PROMPTER specifies how to ask each question.  If
-     PROMPTER is a string, the question text is computed like this:
-
-          (format PROMPTER OBJECT)
-
-     where OBJECT is the next object to ask about.
-
-     If not a string, PROMPTER should be a function of one argument
-     (the next object to ask about) and should return the question text.
-
-     The argument ACTOR should be a function of one argument, which is
-     called with each object that the user says yes for.  Its argument
-     is always one object from LIST.
-
-     If HELP is given, it is a list `(OBJECT OBJECTS ACTION)', where
-     OBJECT is a string containing a singular noun that describes the
-     objects conceptually being acted on; OBJECTS is the corresponding
-     plural noun and ACTION is a transitive verb describing ACTOR.  The
-     default is `("object" "objects" "act on")'.
-
-     Each time a question is asked, the user may enter `y', `Y', or SPC
-     to act on that object; `n', `N', or DEL to skip that object; `!'
-     to act on all following objects; ESC or `q' to exit (skip all
-     following objects); `.' (period) to act on the current object and
-     then exit; or `C-h' to get help.
-
-     `map-y-or-n-p' returns the number of objects acted on.
-
-   * You can now "set" environment variables with the `setenv' command.
-     This works by setting the variable `process-environment', which
-     `getenv' now examines in preference to the environment Emacs
-     received from its parent.
-
-New Features for Loading Libraries
-==================================
-
-   You can now arrange to run a hook if a particular Lisp library is
-loaded.
-
-   The variable `after-load-alist' is an alist of expressions to be
-evalled when particular files are loaded.  Each element looks like
-`(FILENAME FORMS...)'.
-
-   When `load' is run and the file name argument equals FILENAME, the
-FORMS in the corresponding element are executed at the end of loading.
-fILENAME must match exactly!  Normally FILENAME is the name of a
-library, with no directory specified, since that is how `load' is
-normally called.
-
-   An error in FORMS does not undo the load, but does prevent execution
-of the rest of the FORMS.
-
-   The function `eval-after-load' provides a convenient way to add
-entries to the alist.  Call it with two arguments, FILE and a form to
-execute.
-
-   The function `autoload' now supports autoloading a keymap.  Use
-`keymap' as the fourth argument if the autoloaded function will become
-a keymap when loaded.
-
-   There is a new feature for specifying which functions in a library
-should be autoloaded by writing special "magic" comments in that
-library itself.
-
-   Write `;;;###autoload' on a line by itself before the real
-definition of the function, in its autoloadable source file; then the
-command `M-x update-file-autoloads' automatically puts the `autoload'
-call into `loaddefs.el'.
-
-   You can also put other kinds of forms into `loaddefs.el', by writing
-`;;;###autoload' followed on the same line by the form.  `M-x
-update-file-autoloads' copies the form from that line.
-
-Compilation Features
-====================
-
-   * Inline functions.
-
-     You can define an "inline function" with `defsubst'.  Use
-     `defsubst' just like `defun', and it defines a function which you
-     can call in all the usual ways.  Whenever the function thus defined
-     is used in compiled code, the compiler will open code it.
-
-     You can get somewhat the same effects with a macro, but a macro
-     has the limitation that you can use it only explicitly; a macro
-     cannot be called with `apply', `mapcar' and so on.  Also, it takes
-     some work to convert an ordinary function into a macro.  To
-     convert it into an inline function, simply replace `defun' with
-     `defsubst'.
-
-     Making a function inline makes explicit calls run faster.  But it
-     also has disadvantages.  For one thing, it reduces flexibility; if
-     you change the definition of the function, calls already inlined
-     still use the old definition until you recompile them.
-
-     Another disadvantage is that making a large function inline can
-     increase the size of compiled code both in files and in memory.
-     Since the advantages of inline functions are greatest for small
-     functions, you generally should not make large functions inline.
-
-     Inline functions can be used and open coded later on in the same
-     file, following the definition, just like macros.
-
-   * The command `byte-compile-file' now offers to save any buffer
-     visiting the file you are compiling.
-
-   * The new command `compile-defun' reads, compiles and executes the
-     defun containing point.  If you use this on a defun that is
-     actually a function definition, the effect is to install a
-     compiled version of that function.
-
-   * Whenever you load a Lisp file or library, you now receive a
-     warning if the directory contains both a `.el' file and a `.elc'
-     file, and the `.el' file is newer.  This typically indicates that
-     someone has updated the Lisp code but forgotten to recompile it,
-     so the changes do not take effect.  The warning is a reminder to
-     recompile.
-
-   * The special form `eval-when-compile' marks the forms it contains to
-     be evaluated at compile time *only*.  At top-level, this is
-     analogous to the Common Lisp idiom `(eval-when (compile) ...)'.
-     Elsewhere, it is similar to the Common Lisp `#.' reader macro (but
-     not when interpreting).
-
-     If you're thinking of using this feature, we recommend you
-     consider whether `provide' and `require' might do the job as well.
-
-   * The special form `eval-and-compile' is similar to
-     `eval-when-compile', but the whole form is evaluated both at
-     compile time and at run time.
-
-     If you're thinking of using this feature, we recommend you consider
-     whether `provide' and `require' might do the job as well.
-
-   * Emacs Lisp has a new data type for byte-code functions.  This makes
-     them faster to call, and also saves space.  Internally, a byte-code
-     function object is much like a vector; however, the evaluator
-     handles this data type specially when it appears as a function to
-     be called.
-
-     The printed representation for a byte-code function object is like
-     that for a vector, except that it starts with `#' before the
-     opening `['.  A byte-code function object must have at least four
-     elements; there is no maximum number, but only the first six
-     elements are actually used.  They are:
-
-    ARGLIST
-          The list of argument symbols.
-
-    BYTE-CODE
-          The string containing the byte-code instructions.
-
-    CONSTANTS
-          The vector of constants referenced by the byte code.
-
-    STACKSIZE
-          The maximum stack size this function needs.
-
-    DOCSTRING
-          The documentation string (if any); otherwise, `nil'.
-
-    INTERACTIVE
-          The interactive spec (if any).  This can be a string or a Lisp
-          expression.  It is `nil' for a function that isn't
-          interactive.
-
-     The predicate `byte-code-function-p' tests whether a given object
-     is a byte-code function.
-
-     You can create a byte-code function object in a Lisp program with
-     the function `make-byte-code'.  Its arguments are the elements to
-     put in the byte-code function object.
-
-     You should not try to come up with the elements for a byte-code
-     function yourself, because if they are inconsistent, Emacs may
-     crash when you call the function.  Always leave it to the byte
-     compiler to create these objects; it, we hope, always makes the
-     elements consistent.
-
-Floating Point Numbers
-======================
-
-   You can now use floating point numbers in Emacs, if you define the
-macro `LISP_FLOAT_TYPE' when you compile Emacs.
-
-   The printed representation for floating point numbers requires
-either a decimal point surrounded by digits, or an exponent, or both.
-For example, `1500.0', `15e2', `15.0e2' and `1.5e3' are four ways of
-writing a floating point number whose value is 1500.
-
-   The existing predicate `numberp' now returns `t' if the argument is
-any kind of number--either integer or floating.  The new predicates
-`integerp' and `floatp' check for specific types of numbers.
-
-   You can do arithmetic on floating point numbers with the ordinary
-arithmetic functions, `+', `-', `*' and `/'.  If you call one of these
-functions with both integers and floating point numbers among the
-arguments, the arithmetic is done in floating point.  The same applies
-to the numeric comparison functions such as `=' and `<'.  The remainder
-function `%' does not accept floating point arguments, and neither do
-the bitwise boolean operations such as `logand' or the shift functions
-such as `ash'.
-
-   There is a new arithmetic function, `abs', which returns the absolute
-value of its argument.  It handles both integers and floating point
-numbers.
-
-   To convert an integer to floating point, use the function `float'.
-There are four functions to convert floating point numbers to integers;
-they differ in how they round.  `truncate' rounds toward 0, `floor'
-rounds down, `ceil' rounds up, and `round' produces the nearest integer.
-
-   You can use `logb' to extract the binary exponent of a floating
-point number.  More precisely, it is the logarithm base 2, rounded down
-to an integer.
-
-   Emacs has several new mathematical functions that accept any kind of
-number as argument, but always return floating point numbers.
-
-`cos'
-`sin'
-`tan'
-     Trigonometric functions.
-
-`acos'
-`asin'
-`atan'
-     Inverse trigonometric functions.
-
-`exp'
-     The exponential function (power of E).
-
-`log'
-     Logarithm base E.
-
-`log10'
-     Logarithm base 10
-
-`expt'
-     Raise X to power Y.
-
-`sqrt'
-     The square root function.
-
-   The new function `string-to-number' now parses a string containing
-either an integer or a floating point number, returning the number.
-
-   The `format' function now handles the specifications `%e', `%f' and
-`%g' for printing floating point numbers; likewise `message'.
-
-   The new variable `float-output-format' controls how Lisp prints
-floating point numbers.  Its value should be `nil' or a string.
-
-   If it is a string, it should contain a `%'-spec like those accepted
-by `printf' in C, but with some restrictions.  It must start with the
-two characters `%.'.  After that comes an integer which is the
-precision specification, and then a letter which controls the format.
-
-   The letters allowed are `e', `f' and `g'.  Use `e' for exponential
-notation (`DIG.DIGITSeEXPT').  Use `f' for decimal point notation
-(`DIGITS.DIGITS').  Use `g' to choose the shorter of those two formats
-for the number at hand.
-
-   The precision in any of these cases is the number of digits following
-the decimal point.  With `e', a precision of 0 means to omit the
-decimal point.  0 is not allowed with `f' or `g'.
-
-   A value of `nil' means to use the format `%.20g'.
-
-   No matter what the value of `float-output-format', printing ensures
-that the result fits the syntax rules for a floating point number.  If
-it doesn't fit (for example, if it looks like an integer), it is
-modified to fit.  By contrast, the `format' function formats floating
-point numbers without requiring the output to fit the syntax rules for
-floating point number.
-
-New Features for Printing And Formatting Output
-===============================================
-
-   * The `format' function has a new feature: `%S'.  This print spec
-     prints any kind of Lisp object, even a string, using its Lisp
-     printed representation.
-
-     By contrast, `%s' prints everything without quotation.
-
-   * `prin1-to-string' now takes an optional second argument which says
-     not to print the Lisp quotation characters.  (In other words, to
-     use `princ' instead of `prin1'.)
-
-   * The new variable `print-level' specifies the maximum depth of list
-     nesting to print before cutting off all deeper structure.  A value
-     of `nil' means no limit.
-
-Changes in Basic Editing Functions
-==================================
-
-   * There are two new primitives for putting text in the kill ring:
-     `kill-new' and `kill-append'.
-
-     The function `kill-new' adds a string to the front of the kill
-     ring.
-
-     Use `kill-append' to add a string to a previous kill.  The second
-     argument BEFORE-P, if non-`nil', says to add the string at the
-     beginning; otherwise, it goes at the end.
-
-     Both of these functions apply `interprogram-cut-function' to the
-     entire string of killed text that ends up at the beginning of the
-     kill ring.
-
-   * The new function `current-kill' rotates the yanking pointer in the
-     kill ring by N places, and returns the text at that place in the
-     ring.  If the optional second argument DO-NOT-MOVE is non-`nil',
-     it doesn't actually move the yanking point; it just returns the
-     Nth kill forward.  If N is zero, indicating a request for the
-     latest kill, `current-kill' calls `interprogram-paste-function'
-     (documented below) before consulting the kill ring.
-
-     All Emacs Lisp programs should either use `current-kill',
-     `kill-new', and `kill-append' to manipulate the kill ring, or be
-     sure to call `interprogram-paste-function' and
-     `interprogram-cut-function' as appropriate.
-
-   * The variables `interprogram-paste-function' and
-     `interprogram-cut-function' exist so that you can provide functions
-     to transfer killed text to and from other programs.
-
-   * The `kill-region' function can now be used in read-only buffers.
-     It beeps, but adds the region to the kill ring without deleting it.
-
-   * The new function `compare-buffer-substrings' lets you compare two
-     substrings of the same buffer or two different buffers.  Its
-     arguments look like this:
-
-          (compare-buffer-substrings BUF1 BEG1 END1 BUF2 BEG2 END2)
-
-     The first three arguments specify one substring, giving a buffer
-     and two positions within the buffer.  The last three arguments
-     specify the other substring in the same way.
-
-     The value is negative if the first substring is less, positive if
-     the first is greater, and zero if they are equal.  The absolute
-     value of the result is one plus the index of the first different
-     characters.
-
-   * Overwrite mode treats tab and newline characters specially.  You
-     can now turn off this special treatment by setting
-     `overwrite-binary-mode' to `t'.
-
-   * Once the mark "exists" in a buffer, it normally never ceases to
-     exist.  However, in Transient Mark mode, it may become "inactive".
-     The variable `mark-active', which is always local in all buffers,
-     indicates whether the mark is active: non-`nil' means yes.
-
-     When the mark is inactive, the function `mark' normally gets an
-     error.  However, `(mark t)' returns the position of the inactive
-     mark.
-
-     The function `push-mark' normally does not activate the mark.
-     However, it accepts an optional third argument ACTIVATE which, if
-     non-`nil', says to activate.
-
-     A command can request deactivation of the mark upon return to the
-     editor command loop by setting `deactivate-mark' to a non-`nil'
-     value.  Transient Mark mode works by causing the command loop to
-     take note of `deactivate-mark' and actually deactivate the mark.
-
-     Transient Mark mode enables highlighting of the region when the
-     mark is active.  This is currently implemented only under the X
-     Window System.  A few other commands vary their behavior slightly
-     in this case, by testing `transient-mark-mode'.  More
-     specifically, they avoid special display actions such as moving
-     the cursor temporarily, which are not needed when the region is
-     shown by highlighting.
-
-     The variables `activate-mark-hook' and `deactivate-mark-hook' are
-     normal hooks run, respectively, when the mark becomes active and
-     when it becomes inactive.  The hook `activate-mark-hook' is also
-     run at the end of a command if the mark is active and the region
-     may have changed.
-
-   * The function `move-to-column' now accepts a second optional
-     argument FORCE, in addition to COLUMN; if the requested column
-     COLUMN is in the middle of a tab character and FORCE is non-`nil',
-     `move-to-column' replaces the tab with the appropriate sequence of
-     spaces so that it can place point exactly at COLUMN.
-
-   * The search functions when successful now return the value of point
-     rather than just `t'.  This affects the functions
-     `search-forward', `search-backward', `word-search-forward',
-     `word-search-backward', `re-search-forward', and
-     `re-search-backward'.
-
-   * When you do regular expression searching or matching, there is no
-     longer a limit to how many `\(...\)' pairs you can get information
-     about with `match-beginning' and `match-end'.  Also, these
-     parenthetical groupings may now be nested to any degree.
-
-   * In a regular expression, when you use an asterisk after a
-     parenthetical grouping, and then ask about what range was matched
-     by the grouping, Emacs 19 reports just its last occurrence.  Emacs
-     18 used to report the range of all the repetitions put together.
-
-     For example,
-
-          (progn
-           (string-match "f\\(o\\)*" "foo")
-           (list (match-beginning 1)
-                 (match-end 1)))
-
-     returns `(2 3)' in Emacs 19, corresponding to just the last
-     repetition of `\(o\)'.  In Emacs 18, that expression returns `(1
-     3)', encompassing both repetitions.
-
-     If you want the Emacs 18 behavior, use a grouping *containing* the
-     asterisk: `"f\\(o*\\)"'.
-
-   * The new special form `save-match-data' preserves the regular
-     expression match status.  Usage: `(save-match-data BODY...)'.
-
-   * The function `translate-region' applies a translation table to the
-     characters in a part of the buffer.  Invoke it as
-     `(translate-region START END TABLE)'; START and END bound the
-     region to translate.
-
-     The translation table TABLE is a string; `(aref TABLE OCHAR)'
-     gives the translated character corresponding to OCHAR.  If the
-     length of TABLE is less than 256, any characters with codes larger
-     than the length of TABLE are not altered by the translation.
-
-     `translate-region' returns the number of characters which were
-     actually changed by the translation.  This does not count
-     characters which were mapped into themselves in the translation
-     table.
-
-   * There are two new hook variables that let you notice all changes
-     in all buffers (or in a particular buffer, if you make them
-     buffer-local): `before-change-function' and
-     `after-change-function'.
-
-     If `before-change-function' is non-`nil', then it is called before
-     any buffer modification.  Its arguments are the beginning and end
-     of the region that is going to change, represented as integers.
-     The buffer that's about to change is always the current buffer.
-
-     If `after-change-function' is non-`nil', then it is called after
-     any buffer modification.  It takes three arguments: the beginning
-     and end of the region just changed, and the length of the text that
-     existed before the change.  (To get the current length, subtract
-     the region beginning from the region end.)  All three arguments are
-     integers.  The buffer that has just changed is always the current
-     buffer.
-
-     Both of these variables are temporarily bound to `nil' during the
-     time that either of these hooks is running.  This means that if
-     one of these functions changes the buffer, that change won't run
-     these functions.  If you do want hooks to be run recursively,
-     write your hook functions to bind these variables back to their
-     usual values.
-
-   * The hook `first-change-hook' is run using `run-hooks' whenever a
-     buffer is changed that was previously in the unmodified state.
-
-   * The second argument to `insert-abbrev-table-description' is now
-     optional.
-
-Text Properties
-===============
-
-   Each character in a buffer or a string can have a "text property
-list", much like the property list of a symbol.  The properties belong
-to a particular character at a particular place, such as, the letter
-`T' at the beginning of this sentence.  Each property has a name, which
-is usually a symbol, and an associated value, which can be any Lisp
-object--just as for properties of symbols.
-
-   You can use the property `face' to control the font and color of
-text.  Several other property names have special meanings.  You can
-create properties of any name and examine them later for your own
-purposes.
-
-   Copying text between strings and buffers preserves the properties
-along with the characters; this includes such diverse functions as
-`substring', `insert', and `buffer-substring'.
-
-   Since text properties are considered part of the buffer contents,
-changing properties in a buffer "modifies" the buffer, and you can also
-undo such changes.
-
-   Strings with text properties have a special printed representation
-which describes all the properties.  This representation is also the
-read syntax for such a string.  It looks like this:
-
-     #("CHARACTERS" PROPERTY-DATA...)
-
-where PROPERTY-DATA is zero or more elements in groups of three as
-follows:
-
-     BEG END PLIST
-
-The elements BEG and END are integers, and together specify a portion
-of the string; PLIST is the property list for that portion.
-
-Examining Text Properties
--------------------------
-
-   The simplest way to examine text properties is to ask for the value
-of a particular property of a particular character.  For that, use
-`get-text-property'.  Use `text-properties-at' to get the entire
-property list of a character.
-
-   `(get-text-property POS PROP OBJECT)' returns the PROP property of
-the character after POS in OBJECT (a buffer or string).  The argument
-OBJECT is optional and defaults to the current buffer.
-
-   `(text-properties-at POS OBJECT)' returns the entire property list
-of the character after POS in the string or buffer OBJECT (which
-defaults to the current buffer).
-
-Changing Text Properties
-------------------------
-
-   There are four primitives for changing properties of a specified
-range of text:
-
-`add-text-properties'
-     This function puts on specified properties, leaving other existing
-     properties unaltered.
-
-`put-text-property'
-     This function puts on a single specified property, leaving others
-     unaltered.
-
-`remove-text-properties'
-     This function removes specified properties, leaving other
-     properties unaltered.
-
-`set-text-properties'
-     This function replaces the entire property list, leaving no
-     vestige of the properties that that text used to have.
-
-   All these functions take four arguments: START, END, PROPS, and
-OBJECT.  The last argument is optional and defaults to the current
-buffer.  The argument PROPS has the form of a property list.
-
-Property Search Functions
--------------------------
-
-   In typical use of text properties, most of the time several or many
-consecutive characters have the same value for a property.  Rather than
-writing your programs to examine characters one by one, it is much
-faster to process chunks of text that have the same property value.
-
-   The functions `next-property-change' and `previous-property-change'
-scan forward or backward from position POS in OBJECT, looking for a
-change in any property between two characters scanned.  They returns
-the position between those two characters, or `nil' if no change is
-found.
-
-   The functions `next-single-property-change' and
-`previous-single-property-change' are similar except that you specify a
-particular property and they look for changes in the value of that
-property only.  The property is the second argument, and OBJECT is
-third.
-
-Special Properties
-------------------
-
-   If a character has a `category' property, we call it the "category"
-of the character.  It should be a symbol.  The properties of the symbol
-serve as defaults for the properties of the character.
-
-   You can use the property `face' to control the font and color of
-text.
-
-   You can specify a different keymap for a portion of the text by means
-of a `local-map' property.  The property's value, for the character
-after point, replaces the buffer's local map.
-
-   If a character has the property `read-only', then modifying that
-character is not allowed.  Any command that would do so gets an error.
-
-   If a character has the property `modification-hooks', then its value
-should be a list of functions; modifying that character calls all of
-those functions.  Each function receives two arguments: the beginning
-and end of the part of the buffer being modified.  Note that if a
-particular modification hook function appears on several characters
-being modified by a single primitive, you can't predict how many times
-the function will be called.
-
-   Insertion of text does not, strictly speaking, change any existing
-character, so there is a special rule for insertion.  It compares the
-`read-only' properties of the two surrounding characters; if they are
-`eq', then the insertion is not allowed.  Assuming insertion is
-allowed, it then gets the `modification-hooks' properties of those
-characters and calls all the functions in each of them.  (If a function
-appears on both characters, it may be called once or twice.)
-
-   The special properties `point-entered' and `point-left' record hook
-functions that report motion of point.  Each time point moves, Emacs
-compares these two property values:
-
-   * the `point-left' property of the character after the old location,
-     and
-
-   * the `point-entered' property of the character after the new
-     location.
-
-If these two values differ, each of them is called (if not `nil') with
-two arguments: the old value of point, and the new one.
-
-   The same comparison is made for the characters before the old and new
-locations.  The result may be to execute two `point-left' functions
-(which may be the same function) and/or two `point-entered' functions
-(which may be the same function).  The `point-left' functions are
-always called before the `point-entered' functions.
-
-   A primitive function may examine characters at various positions
-without moving point to those positions.  Only an actual change in the
-value of point runs these hook functions.
-
-New Features for Files
-======================
-
-   * The new function `file-accessible-directory-p' tells you whether
-     you can open files in a particular directory.  Specify as an
-     argument either a directory name or a file name which names a
-     directory file.  The function returns `t' if you can open existing
-     files in that directory.
-
-   * The new function `file-executable-p' returns `t' if its argument
-     is the name of a file you have permission to execute.
-
-   * The function `file-truename' returns the "true name" of a
-     specified file.  This is the name that you get by following
-     symbolic links until none remain.  The argument must be an
-     absolute file name.
-
-   * New functions `make-directory' and `delete-directory' create and
-     delete directories.  They both take one argument, which is the
-     name of the directory as a file.
-
-   * The function `read-file-name' now takes an additional argument
-     which specifies an initial file name.  If you specify this
-     argument, `read-file-name' inserts it along with the directory
-     name.  It puts the cursor between the directory and the initial
-     file name.
-
-     The user can then use the initial file name unchanged, modify it,
-     or simply kill it with `C-k'.
-
-     If the variable `insert-default-directory' is `nil', then the
-     default directory is not inserted, and the new argument is ignored.
-
-   * The function `file-relative-name' does the inverse of
-     expansion--it tries to return a relative name which is equivalent
-     to FILENAME when interpreted relative to DIRECTORY.  (If such a
-     relative name would be longer than the absolute name, it returns
-     the absolute name instead.)
-
-   * The function `file-newest-backup' returns the name of the most
-     recent backup file for FILENAME, or `nil' that file has no backup
-     files.
-
-   * The list returned by `file-attributes' now has 12 elements.  The
-     12th element is the file system number of the file system that the
-     file is in.  This element together with the file's inode number,
-     which is the 11th element, give enough information to distinguish
-     any two files on the system--no two files can have the same values
-     for both of these numbers.
-
-   * The new function `set-visited-file-modtime' updates the current
-     buffer's recorded modification time from the visited file's time.
-
-     This is useful if the buffer was not read from the file normally,
-     or if the file itself has been changed for some known benign
-     reason.
-
-     If you give the function an argument, that argument specifies the
-     new value for the recorded modification time.  The argument should
-     be a list of the form `(HIGH . LOW)' or `(HIGH LOW)' containing
-     two integers, each of which holds 16 bits of the time.  (This is
-     the same format that `file-attributes' uses to return time values.)
-
-     The new function `visited-file-modtime' returns the recorded last
-     modification time, in that same format.
-
-   * The function `directory-files' now takes an optional fourth
-     argument which, if non-`nil', inhibits sorting the file names.
-     Use this if you want the utmost possible speed and don't care what
-     order the files are processed in.
-
-     If the order of processing is at all visible to the user, then the
-     user will probably be happier if you do sort the names.
-
-   * The variable `directory-abbrev-alist' contains an alist of
-     abbreviations to use for file directories.  Each element has the
-     form `(FROM . TO)', and says to replace FROM with TO when it
-     appears in a directory name.  This replacement is done when
-     setting up the default directory of a newly visited file.  The
-     FROM string is actually a regular expression; it should always
-     start with `^'.
-
-     You can set this variable in `site-init.el' to describe the
-     abbreviations appropriate for your site.
-
-   * The function `abbreviate-file-name' applies abbreviations from
-     `directory-abbrev-alist' to its argument, and substitutes `~' for
-     the user's home directory.
-
-     Abbreviated directory names are useful for directories that are
-     normally accessed through symbolic links.  If you think of the
-     link's name as "the name" of the directory, you can define it as
-     an abbreviation for the directory's official name; then ordinarily
-     Emacs will call that directory by the link name you normally use.
-
-   * `write-region' can write a given string instead of text from the
-     buffer.  Use the string as the first argument (in place of the
-     starting character position).
-
-     You can supply a second file name as the fifth argument (VISIT).
-     Use this to write the data to one file (the first argument,
-     FILENAME) while nominally visiting a different file (the fifth
-     argument, VISIT).  The argument VISIT is used in the echo area
-     message and also for file locking; VISIT is stored in
-     `buffer-file-name'.
-
-   * The value of `write-file-hooks' does not change when you switch to
-     a new major mode.  The intention is that these hooks have to do
-     with where the file came from, and not with what it contains.
-
-   * There is a new hook variable for saving files:
-     `write-contents-hooks'.  It works just like `write-file-hooks'
-     except that switching to a new major mode clears it back to `nil'.
-     Major modes should use this hook variable rather than
-     `write-file-hooks'.
-
-   * The hook `after-save-buffer-hook' runs just after a buffer has been
-     saved in its visited file.
-
-   * The new function `set-default-file-modes' sets the file protection
-     for new files created with Emacs.  The argument must be an
-     integer.  (It would be better to permit symbolic arguments like
-     the `chmod' program, but that would take more work than this
-     function merits.)
-
-     Use the new function `default-file-modes' to read the current
-     default file mode.
-
-   * Call the new function `unix-sync' to force all pending disk output
-     to happen as soon as possible.
-
-Making Certain File Names "Magic"
-=================================
-
-   You can implement special handling for a class of file names.  You
-must supply a regular expression to define the class of names (all those
-which match the regular expression), plus a handler that implements all
-the primitive Emacs file operations for file names that do match.
-
-   The value of `file-name-handler-alist' is a list of handlers,
-together with regular expressions that decide when to apply each
-handler.  Each element has the form `(REGEXP . HANDLER)'.  If a file
-name matches REGEXP, then all work on that file is done by calling
-HANDLER.
-
-   All the Emacs primitives for file access and file name transformation
-check the given file name against `file-name-handler-alist', and call
-HANDLER to do the work if appropriate.  The first argument given to
-HANDLER is the name of the primitive; the remaining arguments are the
-arguments that were passed to that primitive.  (The first of these
-arguments is typically the file name itself.)  For example, if you do
-this:
-
-     (file-exists-p FILENAME)
-
-and FILENAME has handler HANDLER, then HANDLER is called like this:
-
-     (funcall HANDLER 'file-exists-p FILENAME)
-
-   Here are the primitives that you can handle in this way:
-
-     `add-name-to-file', `copy-file', `delete-directory',
-     `delete-file', `directory-file-name', `directory-files',
-     `dired-compress-file', `dired-uncache', `expand-file-name',
-     `file-accessible-directory-p', `file-attributes',
-     `file-directory-p', `file-executable-p', `file-exists-p',
-     `file-local-copy', `file-modes', `file-name-all-completions',
-     `file-name-as-directory', `file-name-completion',
-     `file-name-directory', `file-name-nondirectory',
-     `file-name-sans-versions', `file-newer-than-file-p',
-     `file-readable-p', `file-symlink-p', `file-writable-p',
-     `insert-directory', `insert-file-contents', `load',
-     `make-directory', `make-symbolic-link', `rename-file',
-     `set-file-modes', `set-visited-file-modtime',
-     `unhandled-file-name-directory', `verify-visited-file-modtime',
-     `write-region'.
-
-   The handler function must handle all of the above operations, and
-possibly others to be added in the future.  Therefore, it should always
-reinvoke the ordinary Lisp primitive when it receives an operation it
-does not recognize.  Here's one way to do this:
-
-     (defun my-file-handler (operation &rest args)
-       ;; First check for the specific operations
-       ;; that we have special handling for.
-       (cond ((eq operation 'insert-file-contents) ...)
-             ((eq operation 'write-region) ...)
-             ...
-             ;; Handle any operation we don't know about.
-             (t (let (file-name-handler-alist)
-                  (apply operation args)))))
-
-   The function `file-local-copy' copies file FILENAME to the local
-site, if it isn't there already.  If FILENAME specifies a "magic" file
-name which programs outside Emacs cannot directly read or write, this
-copies the contents to an ordinary file and returns that file's name.
-
-   If FILENAME is an ordinary file name, not magic, then this function
-does nothing and returns `nil'.
-
-   The function `unhandled-file-name-directory' is used to get a
-non-magic directory name from an arbitrary file name.  It uses the
-directory part of the specified file name if that is not magic.
-Otherwise, it asks the file name's handler what to do.
-
-Frames
-======
-
-   Emacs now supports multiple X windows via a new data type known as a
-"frame".
-
-   A frame is a rectangle on the screen that contains one or more Emacs
-windows.  Subdividing a frame works just like subdividing the screen in
-earlier versions of Emacs.
-
-   There are two kinds of frames: terminal frames and X window frames.
-Emacs creates one terminal frame when it starts up with no X display; it
-uses Termcap or Terminfo to display using characters.  There is no way
-to create another terminal frame after startup.  If Emacs has an X
-display, it does not make a terminal frame, and there is none.
-
-   When you are using X windows, Emacs starts out with a single X window
-frame.  You can create any number of X window frames using `make-frame'.
-
-   Use the predicate `framep' to determine whether a given Lisp object
-is a frame.
-
-   The function `redraw-frame' redisplays the entire contents of a
-given frame.
-
-Creating and Deleting Frames
-----------------------------
-
-   Use `make-frame' to create a new frame.  This is the only primitive
-for creating frames.  In principle it could work under any window system
-which Emacs understands; the only one we support is X.
-
-   `make-frame' takes just one argument, which is an alist specifying
-frame parameters.  Any parameters not mentioned in the argument alist
-default based on the value of `default-frame-alist'; parameters not
-specified there default from the standard X defaults file and X
-resources.
-
-   When you invoke Emacs, if you specify arguments for window appearance
-and so forth, these go into `default-frame-alist' and that is how they
-have their effect.
-
-   You can specify the parameters for the initial startup X window
-frame by setting `initial-frame-alist' in your `.emacs' file.  If these
-parameters specify a separate minibuffer-only frame, and you have not
-created one, Emacs creates one for you, using the parameter values
-specified in `minibuffer-frame-alist'.
-
-   You can specify the size and position of a frame using the frame
-parameters `left', `top', `height' and `width'.  You must specify
-either both size parameters or neither.  You must specify either both
-position parameters or neither.  The geometry parameters that you don't
-specify are chosen by the window manager in its usual fashion.
-
-   The function `x-parse-geometry' converts a standard X-style geometry
-string to an alist which you can use as part of the argument to
-`make-frame'.
-
-   Use the function `delete-frame' to eliminate a frame.  Frames are
-like buffers where deletion is concerned; a frame actually continues to
-exist as a Lisp object until it is deleted *and* there are no
-references to it, but once it is deleted, it has no further effect on
-the screen.
-
-   The function `frame-live-p' returns non-`nil' if the argument (a
-frame) has not been deleted.
-
-Finding All Frames
-------------------
-
-   The function `frame-list' returns a list of all the frames that have
-not been deleted.  It is analogous to `buffer-list'.  The list that you
-get is newly created, so modifying the list doesn't have any effect on
-the internals of Emacs.  The function `visible-frame-list' returns the
-list of just the frames that are visible.
-
-   `next-frame' lets you cycle conveniently through all the frames from
-an arbitrary starting point.  Its first argument is a frame.  Its second
-argument MINIBUF says what to do about minibuffers:
-
-`nil'
-     Exclude minibuffer-only frames.
-
-a window
-     Consider only the frames using that particular window as their
-     minibuffer.
-
-anything else
-     Consider all frames.
-
-Frames and Windows
-------------------
-
-   All the non-minibuffer windows in a frame are arranged in a tree of
-subdivisions; the root of this tree is available via the function
-`frame-root-window'.  Each window is part of one and only one frame;
-you can get the frame with `window-frame'.
-
-   At any time, exactly one window on any frame is "selected within the
-frame".  You can get the frame's current selected window with
-`frame-selected-window'.  The significance of this designation is that
-selecting the frame selects for Emacs as a whole the window currently
-selected within that frame.
-
-   Conversely, selecting a window for Emacs with `select-window' also
-makes that window selected within its frame.
-
-Frame Visibility
-----------------
-
-   A frame may be "visible", "invisible", or "iconified".  If it is
-invisible, it doesn't show in the screen, not even as an icon.  You can
-set the visibility status of a frame with `make-frame-visible',
-`make-frame-invisible', and `iconify-frame'.  You can examine the
-visibility status with `frame-visible-p'--it returns `t' for a visible
-frame, `nil' for an invisible frame, and `icon' for an iconified frame.
-
-Selected Frame
---------------
-
-   At any time, one frame in Emacs is the "selected frame".  The
-selected window always resides on the selected frame.
-
- - Function: selected-frame
-     This function returns the selected frame.
-
-   The X server normally directs keyboard input to the X window that the
-mouse is in.  Some window managers use mouse clicks or keyboard events
-to "shift the focus" to various X windows, overriding the normal
-behavior of the server.
-
-   Lisp programs can switch frames "temporarily" by calling the function
-`select-frame'.  This does not override the window manager; rather, it
-escapes from the window manager's control until that control is somehow
-reasserted.  The function takes one argument, a frame, and selects that
-frame.  The selection lasts until the next time the user does something
-to select a different frame, or until the next time this function is
-called.
-
-   Emacs cooperates with the X server and the window managers by
-arranging to select frames according to what the server and window
-manager ask for.  It does so by generating a special kind of input
-event, called a "focus" event.  The command loop handles a focus event
-by calling `internal-select-frame'.
-
-Frame Size and Position
------------------------
-
-   The new functions `frame-height' and `frame-width' return the height
-and width of a specified frame (or of the selected frame), measured in
-characters.
-
-   The new functions `frame-pixel-height' and `frame-pixel-width'
-return the height and width of a specified frame (or of the selected
-frame), measured in pixels.
-
-   The new functions `frame-char-height' and `frame-char-width' return
-the height and width of a character in a specified frame (or in the
-selected frame), measured in pixels.
-
-   `set-frame-size' sets the size of a frame, measured in characters;
-its arguments are FRAME, COLS and ROWS.  To set the size with values
-measured in pixels, you can use `modify-frame-parameters'.
-
-   The function `set-frame-position' sets the position of the top left
-corner of a frame.  Its arguments are FRAME, LEFT and TOP.
-
-Frame Parameters
-----------------
-
-   A frame has many parameters that affect how it displays.  Use the
-function `frame-parameters' to get an alist of all the parameters of a
-given frame.  To alter parameters, use `modify-frame-parameters', which
-takes two arguments: the frame to modify, and an alist of parameters to
-change and their new values.  Each element of ALIST has the form `(PARM
-. VALUE)', where PARM is a symbol.  Parameters that aren't meaningful
-are ignored.  If you don't mention a parameter in ALIST, its value
-doesn't change.
-
-   Just what parameters a frame has depends on what display mechanism it
-uses.  Here is a table of the parameters of an X window frame:
-
-`name'
-     The name of the frame.
-
-`left'
-     The screen position of the left edge.
-
-`top'
-     The screen position of the top edge.
-
-`height'
-     The height of the frame contents, in pixels.
-
-`width'
-     The width of the frame contents, in pixels.
-
-`window-id'
-     The number of the X window for the frame.
-
-`minibuffer'
-     Whether this frame has its own minibuffer.  `t' means yes, `none'
-     means no, `only' means this frame is just a minibuffer, a
-     minibuffer window (in some other frame) means the new frame uses
-     that minibuffer.
-
-`font'
-     The name of the font for the text.
-
-`foreground-color'
-     The color to use for the inside of a character.  Use strings to
-     designate colors; the X server defines the meaningful color names.
-
-`background-color'
-     The color to use for the background of text.
-
-`mouse-color'
-     The color for the mouse cursor.
-
-`cursor-color'
-     The color for the cursor that shows point.
-
-`border-color'
-     The color for the border of the frame.
-
-`cursor-type'
-     The way to display the cursor.  There are two legitimate values:
-     `bar' and `box'.  The value `bar' specifies a vertical bar between
-     characters as the cursor.  The value `box' specifies an ordinary
-     black box overlaying the character after point; that is the
-     default.
-
-`icon-type'
-     Non-`nil' for a bitmap icon, `nil' for a text icon.
-
-`border-width'
-     The width in pixels of the window border.
-
-`internal-border-width'
-     The distance in pixels between text and border.
-
-`auto-raise'
-     Non-`nil' means selecting the frame raises it.
-
-`auto-lower'
-     Non-`nil' means deselecting the frame lowers it.
-
-`vertical-scroll-bars'
-     Non-`nil' gives the frame a scroll bar for vertical scrolling.
-
-Minibufferless Frames
----------------------
-
-   Normally, each frame has its own minibuffer window at the bottom,
-which is used whenever that frame is selected.  However, you can also
-create frames with no minibuffers.  These frames must use the
-minibuffer window of some other frame.
-
-   The variable `default-minibuffer-frame' specifies where to find a
-minibuffer for frames created without minibuffers of their own.  Its
-value should be a frame which does have a minibuffer.
-
-   You can also specify a minibuffer window explicitly when you create a
-frame; then `default-minibuffer-frame' is not used.
-
-X Window System Features
-========================
-
-   * The new functions `mouse-position' and `set-mouse-position' give
-     access to the current position of the mouse.
-
-     `mouse-position' returns a description of the position of the
-     mouse.  The value looks like `(FRAME X . Y)', where X and Y are
-     measured in pixels relative to the top left corner of the inside
-     of FRAME.
-
-     `set-mouse-position' takes three arguments, FRAME, X and Y, and
-     warps the mouse cursor to that location on the screen.
-
-   * `track-mouse' is a new special form for tracking mouse motion.
-     Use it in definitions of mouse clicks that want pay to attention to
-     the motion of the mouse, not just where the buttons are pressed and
-     released.  Here is how to use it:
-
-          (track-mouse BODY...)
-
-     While BODY executes, mouse motion generates input events just as
-     mouse clicks do.  BODY can read them with `read-event' or
-     `read-key-sequence'.
-
-     `track-mouse' returns the value of the last form in BODY.
-
-     The format of these events is described under "New Input Event
-     Formats."
-
-   * `x-set-selection' sets a "selection" in the X server.  It takes
-     two arguments: a selection type TYPE, and the value to assign to
-     it, DATA.  If DATA is `nil', it means to clear out the selection.
-     Otherwise, DATA may be a string, a symbol, an integer (or a cons
-     of two integers or list of two integers), or a cons of two markers
-     pointing to the same buffer.  In the last case, the selection is
-     considered to be the text between the markers.  The data may also
-     be a vector of valid non-vector selection values.
-
-     Each possible TYPE has its own selection value, which changes
-     independently.  The usual values of TYPE are `PRIMARY' and
-     `SECONDARY'; these are symbols with upper-case names, in accord
-     with X protocol conventions.  The default is `PRIMARY'.
-
-     To get the value of the selection, call `x-get-selection'.  This
-     function accesses selections set up by Emacs and those set up by
-     other X clients.  It takes two optional arguments, TYPE and
-     DATA-TYPE.  The default for TYPE is `PRIMARY'.
-
-     The DATA-TYPE argument specifies the form of data conversion to
-     use; meaningful values include `TEXT', `STRING', `TARGETS',
-     `LENGTH', `DELETE', `FILE_NAME', `CHARACTER_POSITION',
-     `LINE_NUMBER', `COLUMN_NUMBER', `OWNER_OS', `HOST_NAME', `USER',
-     `CLASS', `NAME', `ATOM', and `INTEGER'.  (These are symbols with
-     upper-case names in accord with X Windows conventions.) The
-     default for DATA-TYPE is `STRING'.
-
-   * The X server has a set of numbered "cut buffers" which can store
-     text or other data being moved between applications.  Use
-     `x-get-cut-buffer' to get the contents of a cut buffer; specify the
-     cut buffer number as argument.  Use `x-set-cut-buffer' with
-     argument STRING to store a new string into the first cut buffer
-     (moving the other values down through the series of cut buffers,
-     kill-ring-style).
-
-     Cut buffers are considered obsolete, but Emacs supports them for
-     the sake of X clients that still use them.
-
-   * You can close the connection with the X server with the function
-     `x-close-current-connection'.  This takes no arguments.
-
-     Then you can connect to a different X server with
-     `x-open-connection'.  The first argument, DISPLAY, is the name of
-     the display to connect to.
-
-     The optional second argument XRM-STRING is a string of resource
-     names and values, in the same format used in the `.Xresources'
-     file.  The values you specify override the resource values
-     recorded in the X server itself.  Here's an example of what this
-     string might look like:
-
-          "*BorderWidth: 3\n*InternalBorder: 2\n"
-
-   * A series of new functions give you information about the X server
-     and the screen you are using.
-
-    `x-display-screens'
-          The number of screens associated with the current display.
-
-    `x-server-version'
-          The version numbers of the X server in use.
-
-    `x-server-vendor'
-          The vendor supporting the X server in use.
-
-    `x-display-pixel-height'
-          The height of this X screen in pixels.
-
-    `x-display-mm-height'
-          The height of this X screen in millimeters.
-
-    `x-display-pixel-width'
-          The width of this X screen in pixels.
-
-    `x-display-mm-width'
-          The width of this X screen in millimeters.
-
-    `x-display-backing-store'
-          The backing store capability of this screen.  Values can be
-          the symbols `always', `when-mapped', or `not-useful'.
-
-    `x-display-save-under'
-          Non-`nil' if this X screen supports the SaveUnder feature.
-
-    `x-display-planes'
-          The number of planes this display supports.
-
-    `x-display-visual-class'
-          The visual class for this X screen.  The value is one of the
-          symbols `static-gray', `gray-scale', `static-color',
-          `pseudo-color', `true-color', and `direct-color'.
-
-    `x-display-color-p'
-          `t' if the X screen in use is a color screen.
-
-    `x-display-color-cells'
-          The number of color cells this X screen supports.
-
-     There is also a variable `x-no-window-manager', whose value is `t'
-     if no X window manager is in use.
-
-   * The function `x-synchronize' enables or disables an X Windows
-     debugging mode: synchronous communication.  It takes one argument,
-     non-`nil' to enable the mode and `nil' to disable.
-
-     In synchronous mode, Emacs waits for a response to each X protocol
-     command before doing anything else.  This means that errors are
-     reported right away, and you can directly find the erroneous
-     command.  Synchronous mode is not the default because it is much
-     slower.
-
-   * The function `x-get-resource' retrieves a resource value from the X
-     Windows defaults database.  Its three arguments are ATTRIBUTE,
-     NAME and CLASS.  It searches using a key of the form
-     `INSTANCE.ATTRIBUTE', with class `Emacs', where INSTANCE is the
-     name under which Emacs was invoked.
-
-     The optional arguments COMPONENT and SUBCLASS add to the key and
-     the class, respectively.  You must specify both of them or neither.
-     If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE',
-     and the class is `Emacs.SUBCLASS'.
-
-   * `x-display-color-p' returns `t' if you are using an X server with
-     a color display, and `nil' otherwise.
-
-     `x-color-defined-p' takes as argument a string describing a color;
-     it returns `t' if the display supports that color.  (If the color
-     is `"black"' or `"white"' then even black-and-white displays
-     support it.)
-
-   * `x-popup-menu' has been generalized.  It now accepts a keymap as
-     the MENU argument.  Then the menu items are the prompt strings of
-     individual key bindings, and the item values are the keys which
-     have those bindings.
-
-     You can also supply a list of keymaps as the first argument; then
-     each keymap makes one menu pane (but keymaps that don't provide
-     any menu items don't appear in the menu at all).
-
-     `x-popup-menu' also accepts a mouse button event as the POSITION
-     argument.  Then it displays the menu at the location at which the
-     event took place.  This is convenient for mouse-invoked commands
-     that pop up menus.
-
-   * You can use the function `x-rebind-key' to change the sequence of
-     characters generated by the X server for one of the keyboard keys.
-
-     The first two arguments, KEYCODE and SHIFT-MASK, should be numbers
-     representing the keyboard code and shift mask respectively.  They
-     specify what key to change.
-
-     The third argument, NEWSTRING, is the new definition of the key.
-     It is a sequence of characters that the key should produce as
-     input.
-
-     The shift mask value is a combination of bits according to this
-     table:
-
-    8
-          Control
-
-    4
-          Meta
-
-    2
-          Shift
-
-    1
-          Shift Lock
-
-     If you specify `nil' for SHIFT-MASK, then the key specified by
-     KEYCODE is redefined for all possible shift combinations.
-
-     For the possible values of KEYCODE and their meanings, see the
-     file `/usr/lib/Xkeymap.txt'.  Keep in mind that the codes in that
-     file are in octal!
-
-     The related function `x-rebind-keys' redefines a single keyboard
-     key, specifying the behavior for each of the 16 shift masks
-     independently.  The first argument is KEYCODE, as in
-     `x-rebind-key'.  The second argument STRINGS is a list of 16
-     elements, one for each possible shift mask value; each element
-     says how to redefine the key KEYCODE with the corresponding shift
-     mask value.  If an element is a string, it is the new definition.
-     If an element is `nil', the definition does not change for that
-     shift mask.
-
-   * The function `x-parse-geometry' parses a string specifying window
-     size and position in the usual X format.  It returns an alist
-     describing which parameters were specified, and the values that
-     were given for them.
-
-     The elements of the alist look like `(PARAMETER .  VALUE)'.  The
-     possible PARAMETER values are `left', `top', `width', and `height'.
-
-New Window Features
-===================
-
-   * The new function `window-at' tells you which window contains a
-     given horizontal and vertical position on a specified frame.  Call
-     it with three arguments, like this:
-
-          (window-at X COLUMN FRAME)
-
-     The function returns the window which contains that cursor
-     position in the frame FRAME.  If you omit FRAME, the selected
-     frame is used.
-
-   * The function `coordinates-in-window-p' takes two arguments and
-     checks whether a particular frame position falls within a
-     particular window.
-
-          (coordinates-in-window-p COORDINATES WINDOW)
-
-     The argument COORDINATES is a cons cell of this form:
-
-          (X . Y)
-
-     The two coordinates are measured in characters, and count from the
-     top left corner of the screen or frame.
-
-     The value of the function tells you what part of the window the
-     position is in.  The possible values are:
-
-    `(RELX . RELY)'
-          The coordinates are inside WINDOW.  The numbers RELX and RELY
-          are equivalent window-relative coordinates, counting from 0
-          at the top left corner of the window.
-
-    `mode-line'
-          The coordinates are in the mode line of WINDOW.
-
-    `vertical-split'
-          The coordinates are in the vertical line between WINDOW and
-          its neighbor to the right.
-
-    `nil'
-          The coordinates are not in any sense within WINDOW.
-
-     You need not specify a frame when you call
-     `coordinates-in-window-p', because it assumes you mean the frame
-     which window WINDOW is on.
-
-   * The function `minibuffer-window' now accepts a frame as argument
-     and returns the minibuffer window used for that frame.  If you
-     don't specify a frame, the currently selected frame is used.  The
-     minibuffer window may be on the frame in question, but if that
-     frame has no minibuffer of its own, it uses the minibuffer window
-     of some other frame, and `minibuffer-window' returns that window.
-
-   * Use `window-live-p' to test whether a window is still alive (that
-     is, not deleted).
-
-   * Use `window-minibuffer-p' to determine whether a given window is a
-     minibuffer or not.  It no longer works to do this by comparing the
-     window with the result of `(minibuffer-window)', because there can
-     be more than one minibuffer window at a time (if you have multiple
-     frames).
-
-   * If you set the variable `pop-up-frames' non-`nil', then the
-     functions to show something "in another window" actually create a
-     new frame for the new window.  Thus, you will tend to have a frame
-     for each window, and you can easily have a frame for each buffer.
-
-     The value of the variable `pop-up-frame-function' controls how new
-     frames are made.  The value should be a function which takes no
-     arguments and returns a frame.  The default value is a function
-     which creates a frame using parameters from `pop-up-frame-alist'.
-
-   * `display-buffer' is the basic primitive for finding a way to show a
-     buffer on the screen.  You can customize its behavior by storing a
-     function in the variable `display-buffer-function'.  If this
-     variable is non-`nil', then `display-buffer' calls it to do the
-     work.  Your function should accept two arguments, as follows:
-
-    BUFFER
-          The buffer to be displayed.
-
-    FLAG
-          A flag which, if non-`nil', means you should find another
-          window to display BUFFER in, even if it is already visible in
-          the selected window.
-
-     The function you supply will be used by commands such as
-     `switch-to-buffer-other-window' and `find-file-other-window' as
-     well as for your own calls to `display-buffer'.
-
-   * `delete-window' now gives all of the deleted window's screen space
-     to a single neighboring window.  Likewise, `enlarge-window' takes
-     space from only one neighboring window until that window
-     disappears; only then does it take from another window.
-
-   * `next-window' and `previous-window' accept another argument,
-     ALL-FRAMES.
-
-     These functions now take three optional arguments: WINDOW, MINIBUF
-     and ALL-FRAMES.  WINDOW is the window to start from (`nil' means
-     use the selected window).  MINIBUF says whether to include the
-     minibuffer in the windows to cycle through: `t' means yes, `nil'
-     means yes if it is active, and anything else means no.
-
-     Normally, these functions cycle through all the windows in the
-     selected frame, plus the minibuffer used by the selected frame
-     even if it lies in some other frame.
-
-     If ALL-FRAMES is `t', then these functions cycle through all the
-     windows in all the frames that currently exist.  If ALL-FRAMES is
-     neither `t' nor `nil', then they limit themselves strictly to the
-     windows in the selected frame, excluding the minibuffer in use if
-     it lies in some other frame.
-
-   * The functions `get-lru-window' and `get-largest-window' now take
-     an optional argument ALL-FRAMES.  If it is non-`nil', the
-     functions consider all windows on all frames.  Otherwise, they
-     consider just the windows on the selected frame.
-
-     Likewise, `get-buffer-window' takes an optional second argument
-     ALL-FRAMES.
-
-   * The variable `other-window-scroll-buffer' specifies which buffer
-     `scroll-other-window' should scroll.
-
-   * You can now mark a window as "dedicated" to its buffer.  Then
-     Emacs will not try to use that window for any other buffer unless
-     you explicitly request it.
-
-     Use the new function `set-window-dedicated-p' to set the dedication
-     flag of a window WINDOW to the value FLAG.  If FLAG is `t', this
-     makes the window dedicated.  If FLAG is `nil', this makes the
-     window non-dedicated.
-
-     Use `window-dedicated-p' to examine the dedication flag of a
-     specified window.
-
-   * The new function `walk-windows' cycles through all visible
-     windows, calling `proc' once for each window with the window as
-     its sole argument.
-
-     The optional second argument MINIBUF says whether to include
-     minibuffer windows.  A value of `t' means count the minibuffer
-     window even if not active.  A value of `nil' means count it only
-     if active.  Any other value means not to count the minibuffer even
-     if it is active.
-
-     If the optional third argument ALL-FRAMES is `t', that means
-     include all windows in all frames.  If ALL-FRAMES is `nil', it
-     means to cycle within the selected frame, but include the
-     minibuffer window (if MINIBUF says so) that that frame uses, even
-     if it is on another frame.  If ALL-FRAMES is neither `nil' nor `t',
-     `walk-windows' sticks strictly to the selected frame.
-
-   * The function `window-end' is a counterpart to `window-start': it
-     returns the buffer position of the end of the display in a given
-     window (or the selected window).
-
-   * The function `window-configuration-p' returns non-`nil' when given
-     an object that is a window configuration (such as is returned by
-     `current-window-configuration').
-
-Display Features
-================
-
-   * `baud-rate' is now a variable rather than a function.  This is so
-     you can set it to reflect the effective speed of your terminal,
-     when the system doesn't accurately know the speed.
-
-   * You can now remove any echo area message and make the minibuffer
-     visible.  To do this, call `message' with `nil' as the only
-     argument.  This clears any existing message, and lets the current
-     minibuffer contents show through.  Previously, there was no
-     reliable way to make sure that the minibuffer contents were
-     visible.
-
-   * The variable `temp-buffer-show-hook' has been renamed
-     `temp-buffer-show-function', because its value is a single function
-     (of one argument), not a normal hook.
-
-   * The new function `force-mode-line-update' causes redisplay of the
-     current buffer's mode line.
-
-Display Tables
-==============
-
-   You can use the "display table" feature to control how all 256
-possible character codes display on the screen.  This is useful for
-displaying European languages that have letters not in the ASCII
-character set.
-
-   The display table maps each character code into a sequence of
-"glyphs", each glyph being an image that takes up one character
-position on the screen.  You can also define how to display each glyph
-on your terminal, using the "glyph table".
-
-Display Tables Proper
----------------------
-
-   Use `make-display-table' to create a display table.  The table
-initially has `nil' in all elements.
-
-   A display table is actually an array of 261 elements.  The first 256
-elements of a display table control how to display each possible text
-character.  The value should be `nil' or a vector (which is a sequence
-of glyphs; see below).  `nil' as an element means to display that
-character following the usual display conventions.
-
-   The remaining five elements of a display table serve special purposes
-(`nil' means use the default stated below):
-
-256
-     The glyph for the end of a truncated screen line (the default for
-     this is `\').
-
-257
-     The glyph for the end of a continued line (the default is `$').
-
-258
-     The glyph for the indicating an octal character code (the default
-     is `\').
-
-259
-     The glyph for indicating a control characters (the default is `^').
-
-260
-     The vector of glyphs for indicating the presence of invisible
-     lines (the default is `...').
-
-   Each buffer typically has its own display table.  The display table
-for the current buffer is stored in `buffer-display-table'.  (This
-variable automatically becomes local if you set it.)  If this variable
-is `nil', the value of `standard-display-table' is used in that buffer.
-
-   Each window can have its own display table, which overrides the
-display table of the buffer it is showing.
-
-   If neither the selected window nor the current buffer has a display
-table, and if `standard-display-table' is `nil', then Emacs uses the
-usual display conventions:
-
-   * Character codes 32 through 127 map to glyph codes 32 through 127.
-
-   * Codes 0 through 31 map to sequences of two glyphs, where the first
-     glyph is the ASCII code for `^'.
-
-   * Character codes 128 through 255 map to sequences of four glyphs,
-     where the first glyph is the ASCII code for `\', and the others
-     represent digits.
-
-   The usual display conventions are also used for any character whose
-entry in the active display table is `nil'.  This means that when you
-set up a display table, you need not specify explicitly what to do with
-each character, only the characters for which you want unusual behavior.
-
-Glyphs
-------
-
-   A glyph stands for an image that takes up a single character
-position on the screen.  A glyph is represented in Lisp as an integer.
-
-   The meaning of each integer, as a glyph, is defined by the glyph
-table, which is the value of the variable `glyph-table'.  It should be a
-vector; the Gth element defines glyph code G.  The possible definitions
-of a glyph code are:
-
-INTEGER
-     Define this glyph code as an alias for code INTEGER.  This is used
-     with X Windows to specify a face code.
-
-STRING
-     Send the characters in STRING to the terminal to output this
-     glyph.  This alternative is available only for character
-     terminals, not with X.
-
-`NIL'
-     This glyph is simple.  On an ordinary terminal, the glyph code mod
-     256 is the character to output.  With X, the glyph code mod 256 is
-     character to output, and the glyph code divided by 256 specifies
-     the "face code" to use while outputting it.
-
-   Any glyph code beyond the length of the glyph table is automatically
-simple.
-
-   If `glyph-table' is `nil', then all possible glyph codes are simple.
-
-   A "face" is a named combination of a font and a pair of colors
-(foreground and background).  A glyph code can specify a face id number
-to use for displaying that glyph.
-
-ISO Latin 1
------------
-
-   If you have a terminal that can handle the entire ISO Latin 1
-character set, you can arrange to use that character set as follows:
-
-     (standard-display-european 1)
-
-   If you are editing buffers written in the ISO Latin 1 character set
-and your terminal doesn't handle anything but ASCII, you can load the
-file `iso-ascii' to set up a display table which makes the other ISO
-characters display as sequences of ASCII characters.  For example, the
-character "o with umlaut" displays as `{"o}'.
-
-   Some European countries have terminals that don't support ISO Latin 1
-but do support the special characters for that country's language.  You
-can define a display table to work one language using such terminals.
-For an example, see `lisp/iso-swed.el', which handles certain Swedish
-terminals.
-
-   You can load the appropriate display table for your terminal
-automatically by writing a terminal-specific Lisp file for the terminal
-type.
-
-Overlays
-========
-
-   You can use "overlays" to alter the appearance of a buffer's text on
-the screen.  An overlay is an object which belongs to a particular
-buffer, and has a specified beginning and end.  It also has properties
-which you can examine and set; these affect the display of the text
-within the overlay.
-
-Overlay Properties
-------------------
-
-   Overlay properties are like text properties in some respects, but the
-differences are more important than the similarities.  Text properties
-are considered a part of the text; overlays are specifically considered
-not to be part of the text.  Thus, copying text between various buffers
-and strings preserves text properties, but does not try to preserve
-overlays.  Changing a buffer's text properties marks the buffer as
-modified, while moving an overlay or changing its properties does not.
-
-`face'
-     This property specifies a face for displaying the text within the
-     overlay.
-
-`priority'
-     This property's value (which should be a nonnegative number)
-     determines the priority of the overlay.  The priority matters when
-     two or more overlays cover the same character and both specify a
-     face for display; the one whose `priority' value is larger takes
-     priority over the other, and its face attributes override the face
-     attributes of the lower priority overlay.
-
-     Currently, all overlays take priority over text properties.  Please
-     avoid using negative priority values, as we have not yet decided
-     just what they should mean.
-
-`window'
-     If the `window' property is non-`nil', then the overlay applies
-     only on that window.
-
-Overlay Functions
------------------
-
-   Use the functions `overlay-get' and `overlay-put' to access and set
-the properties of an overlay.  They take arguments like `get' and
-`put', except that the first argument is an overlay rather than a
-symbol.
-
-   To create an overlay, call `(make-overlay START END)'.  You can
-specify the buffer as the third argument if you wish.  To delete one,
-use `delete-overlay'.
-
-   Use `overlay-start', `overlay-end' and `overlay-buffer' to examine
-the location and range of an overlay.  Use `move-overlay' to change
-them; its arguments are OVERLAY, START, END and (optionally) the buffer.
-
-   There are two functions to search for overlays: `overlays-at' and
-`next-overlay-change'.  `overlays-at' returns a list of all the
-overlays containing a particular position.  `(next-overlay-change POS)'
-returns the position of the next overlay beginning or end following POS.
-
-Faces
-=====
-
-   A "face" is a named collection of graphical attributes: font,
-foreground color, background color and optional underlining.  Faces
-control the display of text on the screen.
-
-   Each face has its own "face id number" which distinguishes faces at
-low levels within Emacs.  However, for most purposes, you can refer to
-faces in Lisp programs by their names.
-
-   Each face name is meaningful for all frames, and by default it has
-the same meaning in all frames.  But you can arrange to give a
-particular face name a special meaning in one frame if you wish.
-
-Choosing a Face for Display
----------------------------
-
-   Here are all the ways to specify which face to use for display of
-text:
-
-   * With defaults.  Each frame has a "default face", whose id number is
-     zero, which is used for all text that doesn't somehow specify
-     another face.
-
-   * With text properties.  A character may have a `face' property; if
-     so, it's displayed with that face.  If the character has a
-     `mouse-face' property, that is used instead of the `face' property
-     when the mouse is "near enough" to the character.
-
-   * With overlays.  An overlay may have `face' and `mouse-face'
-     properties too; they apply to all the text covered by the overlay.
-
-   * With special glyphs.  Each glyph can specify a particular face id
-     number.
-
-   If these various sources together specify more than one face for a
-particular character, Emacs merges the attributes of the various faces
-specified.  The attributes of the faces of special glyphs come first;
-then come attributes of faces from overlays, followed by those from text
-properties, and last the default face.
-
-   When multiple overlays cover one character, an overlay with higher
-priority overrides those with lower priority.
-
-   If an attribute such as the font or a color is not specified in any
-of the above ways, the frame's own font or color is used.
-
-   *Note Face Functions: (elisp)Face Functions, for functions to create
-and change faces.
-
-New Input Event Formats
-=======================
-
-   Mouse clicks, mouse movements and function keys no longer appear in
-the input stream as characters; instead, other kinds of Lisp objects
-represent them as input.
-
-   * An ordinary input character event consists of a "basic code"
-     between 0 and 255, plus any or all of these "modifier bits":
-
-    meta
-          The 2**23 bit in the character code indicates a character
-          typed with the meta key held down.
-
-    control
-          The 2**22 bit in the character code indicates a non-ASCII
-          control character.
-
-          ASCII control characters such as `C-a' have special basic
-          codes of their own, so Emacs needs no special bit to indicate
-          them.  Thus, the code for `C-a' is just 1.
-
-          But if you type a control combination not in ASCII, such as
-          `%' with the control key, the numeric value you get is the
-          code for `%' plus 2**22 (assuming the terminal supports
-          non-ASCII control characters).
-
-    shift
-          The 2**21 bit in the character code indicates an ASCII control
-          character typed with the shift key held down.
-
-          For letters, the basic code indicates upper versus lower
-          case; for digits and punctuation, the shift key selects an
-          entirely different character with a different basic code.  In
-          order to keep within the ASCII character set whenever
-          possible, Emacs avoids using the 2**21 bit for those
-          characters.
-
-          However, ASCII provides no way to distinguish `C-A' from
-          `C-a', so Emacs uses the 2**21 bit in `C-A' and not in `C-a'.
-
-    hyper
-          The 2**20 bit in the character code indicates a character
-          typed with the hyper key held down.
-
-    super
-          The 2**19 bit in the character code indicates a character
-          typed with the super key held down.
-
-    alt
-          The 2**18 bit in the character code indicates a character
-          typed with the alt key held down.  (On some terminals, the
-          key labeled ALT is actually the meta key.)
-
-     In the future, Emacs may support a larger range of basic codes.
-     We may also move the modifier bits to larger bit numbers.
-     Therefore, you should avoid mentioning specific bit numbers in
-     your program.  Instead, the way to test the modifier bits of a
-     character is with the function `event-modifiers' (see below).
-
-   * Function keys are represented as symbols.  The symbol's name is
-     the function key's label.  For example, pressing a key labeled F1
-     places the symbol `f1' in the input stream.
-
-     There are a few exceptions to the symbol naming convention:
-
-    `kp-add', `kp-decimal', `kp-divide', ...
-          Keypad keys (to the right of the regular keyboard).
-
-    `kp-0', `kp-1', ...
-          Keypad keys with digits.
-
-    `kp-f1', `kp-f2', `kp-f3', `kp-f4'
-          Keypad PF keys.
-
-    `left', `up', `right', `down'
-          Cursor arrow keys
-
-     You can use the modifier keys CTRL, META, HYPER, SUPER, ALT and
-     SHIFT with function keys.  The way to represent them is with
-     prefixes in the symbol name:
-
-    `A-'
-          The alt modifier.
-
-    `C-'
-          The control modifier.
-
-    `H-'
-          The hyper modifier.
-
-    `M-'
-          The meta modifier.
-
-    `s-'
-          The super modifier.
-
-    `S-'
-          The shift modifier.
-
-     Thus, the symbol for the key F3 with META held down is `M-F3'.
-     When you use more than one prefix, we recommend you write them in
-     alphabetical order (though the order does not matter in arguments
-     to the key-binding lookup and modification functions).
-
-   * Mouse events are represented as lists.
-
-     If you press a mouse button and release it at the same location,
-     this generates a "click" event.  Mouse click events have this form:
-
-          (BUTTON-SYMBOL
-           (WINDOW (COLUMN . ROW)
-            BUFFER-POS TIMESTAMP))
-
-     Here is what the elements normally mean:
-
-    BUTTON-SYMBOL
-          indicates which mouse button was used.  It is one of the
-          symbols `mouse-1', `mouse-2', ..., where the buttons are
-          normally numbered left to right.
-
-          You can also use prefixes `A-', `C-', `H-', `M-', `S-' and
-          `s-' for modifiers alt, control, hyper, meta, shift and
-          super, just as you would with function keys.
-
-    WINDOW
-          is the window in which the click occurred.
-
-    COLUMN
-    ROW
-          are the column and row of the click, relative to the top left
-          corner of WINDOW, which is `(0 . 0)'.
-
-    BUFFER-POS
-          is the buffer position of the character clicked on.
-
-    TIMESTAMP
-          is the time at which the event occurred, in milliseconds.
-          (Since this value wraps around the entire range of Emacs Lisp
-          integers in about five hours, it is useful only for relating
-          the times of nearby events.)
-
-     The meanings of BUFFER-POS, ROW and COLUMN are somewhat different
-     when the event location is in a special part of the screen, such
-     as the mode line or a scroll bar.
-
-     If the position is in the window's scroll bar, then BUFFER-POS is
-     the symbol `vertical-scroll-bar', and the pair `(COLUMN . ROW)' is
-     replaced with a pair `(PORTION . WHOLE)', where PORTION is the
-     distance of the click from the top or left end of the scroll bar,
-     and WHOLE is the length of the entire scroll bar.
-
-     If the position is on a mode line or the vertical line separating
-     WINDOW from its neighbor to the right, then BUFFER-POS is the
-     symbol `mode-line' or `vertical-line'.  In this case ROW and
-     COLUMN do not have meaningful data.
-
-   * Releasing a mouse button above a different character position
-     generates a "drag" event, which looks like this:
-
-          (BUTTON-SYMBOL
-           (WINDOW1 (COLUMN1 . ROW1)
-            BUFFER-POS1 TIMESTAMP1)
-           (WINDOW2 (COLUMN2 . ROW2)
-            BUFFER-POS2 TIMESTAMP2))
-
-     The name of BUTTON-SYMBOL contains the prefix `drag-'.  The second
-     and third elements of the event give the starting and ending
-     position of the drag.
-
-     The `drag-' prefix follows the modifier key prefixes such as `C-'
-     and `M-'.
-
-     If `read-key-sequence' receives a drag event which has no key
-     binding, and the corresponding click event does have a binding, it
-     changes the drag event into a click event at the drag's starting
-     position.  This means that you don't have to distinguish between
-     click and drag events unless you want to.
-
-   * Click and drag events happen when you release a mouse button.
-     Another kind of event happens when you press a button.  It looks
-     just like a click event, except that the name of BUTTON-SYMBOL
-     contains the prefix `down-'.  The `down-' prefix follows the
-     modifier key prefixes such as `C-' and `M-'.
-
-     The function `read-key-sequence', and the Emacs command loop,
-     ignore any down events that don't have command bindings.  This
-     means that you need not worry about defining down events unless
-     you want them to do something.  The usual reason to define a down
-     event is so that you can track mouse motion until the button is
-     released.
-
-   * For example, if the user presses and releases the left mouse
-     button over the same location, Emacs generates a sequence of
-     events like this:
-
-          (down-mouse-1 (#<window 18 on NEWS> 2613 (0 . 38) -864320))
-          (mouse-1      (#<window 18 on NEWS> 2613 (0 . 38) -864180))
-
-     Or, while holding the control key down, the user might hold down
-     the second mouse button, and drag the mouse from one line to the
-     next.  That produces two events, as shown here:
-
-          (C-down-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219))
-          (C-drag-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219)
-                          (#<window 18 on NEWS> 3510 (0 . 28) -729648))
-
-     Or, while holding down the meta and shift keys, the user might
-     press the second mouse button on the window's mode line, and then
-     drag the mouse into another window.  That produces an event like
-     this:
-
-          (M-S-down-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844))
-          (M-S-drag-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844)
-                            (#<window 20 on carlton-sanskrit.tex> 161 (33 . 3)
-                             -453816))
-
-   * A key sequence that starts with a mouse click is read using the
-     keymaps of the buffer in the window clicked on, not the current
-     buffer.
-
-     This does not imply that clicking in a window selects that window
-     or its buffer.  The execution of the command begins with no change
-     in the selected window or current buffer.  However, the command
-     can switch windows or buffers if programmed to do so.
-
-   * Mouse motion events are represented by lists.  During the
-     execution of the body of a `track-mouse' form, moving the mouse
-     generates events that look like this:
-
-          (mouse-movement (WINDOW (COLUMN . ROW)
-                           BUFFER-POS TIMESTAMP))
-
-     The second element of the list describes the current position of
-     the mouse, just as in a mouse click event.
-
-     Outside of `track-mouse' forms, Emacs does not generate events for
-     mere motion of the mouse, and these events do not appear.
-
-   * Focus shifts between frames are represented by lists.
-
-     When the mouse shifts temporary input focus from one frame to
-     another, Emacs generates an event like this:
-
-          (switch-frame NEW-FRAME)
-
-     where NEW-FRAME is the frame switched to.
-
-     In X windows, most window managers are set up so that just moving
-     the mouse into a window is enough to set the focus there.  As far
-     as the user is concerned, Emacs behaves consistently with this.
-     However, there is no need for the Lisp program to know about the
-     focus change until some other kind of input arrives.  So Emacs
-     generates the focus event only when the user actually types a
-     keyboard key or presses a mouse button in the new frame; just
-     moving the mouse between frames does not generate a focus event.
-
-     The global key map usually binds this event to the
-     `internal-select-frame' function, so that characters typed at a
-     frame apply to that frame's selected window.
-
-     If the user switches frames in the middle of a key sequence, then
-     Emacs delays the `switch-frame' event until the key sequence is
-     over.  For example, suppose `C-c C-a' is a key sequence in the
-     current buffer's keymaps.  If the user types `C-c', moves the
-     mouse to another frame, and then types `C-a', `read-key-sequence'
-     returns the sequence `"\C-c\C-a"', and the next call to
-     `read-event' or `read-key-sequence' will return the `switch-frame'
-     event.
-
-Working with Input Events
-=========================
-
-   * Functions which work with key sequences now handle non-character
-     events.  Functions like `define-key', `global-set-key', and
-     `local-set-key' used to accept strings representing key sequences;
-     now, since events may be arbitrary lisp objects, they also accept
-     vectors.  The function `read-key-sequence' may return a string or a
-     vector, depending on whether or not the sequence read contains only
-     characters.
-
-     List events may be represented by the symbols at their head; to
-     bind clicks of the left mouse button, you need only present the
-     symbol `mouse-1', not an entire mouse click event.  If you do put
-     an event which is a list in a key sequence, only the event's head
-     symbol is used in key lookups.
-
-     For example, to globally bind the left mouse button to the function
-     `mouse-set-point', you could evaluate this:
-
-          (global-set-key [mouse-1] 'mouse-set-point)
-
-     To bind the sequence `C-c F1' to the command `tex-view' in
-     `tex-mode-map', you could evaluate this:
-
-          (define-key tex-mode-map [?\C-c f1] 'tex-view)
-
-     To find the binding for the function key labeled NEXT in
-     `minibuffer-local-map', you could evaluate this:
-
-          (lookup-key minibuffer-local-map [next])
-               => next-history-element
-
-     If you call the function `read-key-sequence' and then press `C-x
-     C-F5', here is how it behaves:
-
-          (read-key-sequence "Press `C-x C-F5': ")
-               => [24 C-f5]
-
-     Note that `24' is the character `C-x'.
-
-   * The documentation functions (`single-key-description',
-     `key-description', etc.) now handle the new event types.  Wherever
-     a string of keyboard input characters was acceptable in previous
-     versions of Emacs, a vector of events should now work.
-
-   * Special parts of a window can have their own bindings for mouse
-     events.
-
-     When mouse events occur in special parts of a window, such as a
-     mode line or a scroll bar, the event itself shows nothing
-     special--only the symbol that would normally represent that mouse
-     button and modifier keys.  The information about the screen region
-     is kept in other parts of the event list.  But `read-key-sequence'
-     translates this information into imaginary prefix keys, all of
-     which are symbols: `mode-line', `vertical-line', and
-     `vertical-scroll-bar'.
-
-     For example, if you call `read-key-sequence' and then click the
-     mouse on the window's mode line, this is what happens:
-
-          (read-key-sequence "Click on the mode line: ")
-               => [mode-line (mouse-1 (#<window 6 on NEWS> mode-line
-                                        (40 . 63) 5959987))]
-
-     You can define meanings for mouse clicks in special window regions
-     by defining key sequences using these imaginary prefix keys.  For
-     example, here is how to bind the third mouse button on a window's
-     mode line delete the window:
-
-          (global-set-key [mode-line mouse-3] 'mouse-delete-window)
-
-     Here's how to bind the middle button (modified by META) on the
-     vertical line at the right of a window to scroll the window to the
-     left.
-
-          (global-set-key [vertical-line M-mouse-2] 'scroll-left)
-
-   * Decomposing an event symbol.
-
-     Each symbol used to identify a function key or mouse button has a
-     property named `event-symbol-elements', which is a list containing
-     an unmodified version of the symbol, followed by modifiers the
-     symbol name contains.  The modifiers are symbols; they include
-     `shift', `control', and `meta'.  In addition, a mouse event symbol
-     has one of `click', `drag', and `down'.  For example:
-
-          (get 'f5 'event-symbol-elements)
-               => (f5)
-          (get 'C-f5 'event-symbol-elements)
-               => (f5 control)
-          (get 'M-S-f5 'event-symbol-elements)
-               => (f5 meta shift)
-          (get 'mouse-1 'event-symbol-elements)
-               => (mouse-1 click)
-          (get 'down-mouse-1 'event-symbol-elements)
-               => (mouse-1 down)
-
-     Note that the `event-symbol-elements' property for a mouse click
-     explicitly contains `click', but the event symbol name itself does
-     not contain `click'.
-
-   * Use `read-event' to read input if you want to accept any kind of
-     event.  The old function `read-char' now discards events other than
-     keyboard characters.
-
-   * `last-command-char' and `last-input-char' can now hold any kind of
-     event.
-
-   * The new variable `unread-command-events' is much like
-     `unread-command-char'.  Its value is a list of events of any type,
-     to be processed as command input in order of appearance in the
-     list.
-
-   * The function `this-command-keys' may return a string or a vector,
-     depending on whether or not the sequence read contains only
-     characters.  You may need to upgrade code which uses this function.
-
-     The function `recent-keys' now returns a vector of events.  You
-     may need to upgrade code which uses this function.
-
-   * A keyboard macro's definition can now be either a string or a
-     vector.  All that really matters is what elements it has.  If the
-     elements are all characters, then the macro can be a string;
-     otherwise, it has to be a vector.
-
-   * The variable `last-event-frame' records which frame the last input
-     event was directed to.  Usually this is the frame that was
-     selected when the event was generated, but if that frame has
-     redirected input focus to another frame, `last-event-frame' is the
-     frame to which the event was redirected.
-
-   * The interactive specification now allows a new code letter `e' to
-     simplify commands bound to events which are lists.  This code
-     supplies as an argument the complete event object.
-
-     You can use `e' more than once in a single command's interactive
-     specification.  If the key sequence which invoked the command has
-     N events with parameters, the Nth `e' provides the Nth
-     parameterized event.  Events which are not lists, such as function
-     keys and ASCII keystrokes, do not count where `e' is concerned.
-
-   * You can extract the starting and ending position values from a
-     mouse button or motion event using the two functions `event-start'
-     and `event-end'.  These two functions return different values for
-     drag and motion events; for click and button-down events, they
-     both return the position of the event.
-
-   * The position, a returned by `event-start' and `event-end', is a
-     list of this form:
-
-          (WINDOW BUFFER-POSITION (COL . ROW) TIMESTAMP)
-
-     You can extract parts of this list with the functions
-     `posn-window', `posn-point', `posn-col-row', and `posn-timestamp'.
-
-   * The function `scroll-bar-scale' is useful for computing where to
-     scroll to in response to a mouse button event from a scroll bar.
-     It takes two arguments, RATIO and TOTAL, and in effect multiplies
-     them.  We say "in effect" because RATIO is not a number; rather a
-     pair `(NUM . DENOM)'.
-
-     Here's the usual way to use `scroll-bar-scale':
-
-          (scroll-bar-scale (posn-col-row (event-start event))
-                            (buffer-size))
-
-Putting Keyboard Events in Strings
-==================================
-
-   In most of the places where strings are used, we conceptualize the
-string as containing text characters--the same kind of characters found
-in buffers or files.  Occasionally Lisp programs use strings which
-conceptually contain keyboard characters; for example, they may be key
-sequences or keyboard macro definitions.  There are special rules for
-how to put keyboard characters into a string, because they are not
-limited to the range of 0 to 255 as text characters are.
-
-   A keyboard character typed using the META key is called a "meta
-character".  The numeric code for such an event includes the 2**23 bit;
-it does not even come close to fitting in a string.  However, earlier
-Emacs versions used a different representation for these characters,
-which gave them codes in the range of 128 to 255.  That did fit in a
-string, and many Lisp programs contain string constants that use `\M-'
-to express meta characters, especially as the argument to `define-key'
-and similar functions.
-
-   We provide backward compatibility to run those programs with special
-rules for how to put a keyboard character event in a string.  Here are
-the rules:
-
-   * If the keyboard event value is in the range of 0 to 127, it can go
-     in the string unchanged.
-
-   * The meta variants of those events, with codes in the range of
-     2**23 to 2**23+127, can also go in the string, but you must change
-     their numeric values.  You must set the 2**7 bit instead of the
-     2**23 bit, resulting in a value between 128 and 255.
-
-   * Other keyboard character events cannot fit in a string.  This
-     includes keyboard events in the range of 128 to 255.
-
-   Functions such as `read-key-sequence' that can construct strings
-containing events follow these rules.
-
-   When you use the read syntax `\M-' in a string, it produces a code
-in the range of 128 to 255--the same code that you get if you modify
-the corresponding keyboard event to put it in the string.  Thus, meta
-events in strings work consistently regardless of how they get into the
-strings.
-
-   New programs can avoid dealing with these rules by using vectors
-instead of strings for key sequences when there is any possibility that
-these issues might arise.
-
-   The reason we changed the representation of meta characters as
-keyboard events is to make room for basic character codes beyond 127,
-and support meta variants of such larger character codes.
-
-Menus
-=====
-
-   You can now define menus conveniently as keymaps.  Menus are normally
-used with the mouse, but they can work with the keyboard also.
-
-Defining Menus
---------------
-
-   A keymap is suitable for menu use if it has an "overall prompt
-string", which is a string that appears as an element of the keymap.  It
-should describes the purpose of the menu.  The easiest way to construct
-a keymap with a prompt string is to specify the string as an argument
-when you run `make-keymap' or `make-sparse-keymap'.
-
-   The individual bindings in the menu keymap should also have prompt
-strings; these strings are the items in the menu.  A binding with a
-prompt string looks like this:
-
-     (CHAR STRING . REAL-BINDING)
-
-   As far as `define-key' is concerned, the string is part of the
-character's binding--the binding looks like this:
-
-     (STRING . REAL-BINDING).
-
-   However, only REAL-BINDING is used for executing the key.
-
-   You can also supply a second string, called the help string, as
-follows:
-
-     (CHAR STRING HELP-STRING . REAL-BINDING)
-
-   Currently Emacs does not actually use HELP-STRING; it knows only how
-to ignore HELP-STRING in order to extract REAL-BINDING.  In the future
-we hope to make HELP-STRING serve as longer documentation for the menu
-item, available on request.
-
-   The prompt string for a binding should be short--one or two words.
-Its meaning should describe the command it corresponds to.
-
-   If REAL-BINDING is `nil', then STRING appears in the menu but cannot
-be selected.
-
-   If REAL-BINDING is a symbol, and has a non-`nil' `menu-enable'
-property, that property is an expression which controls whether the
-menu item is enabled.  Every time the keymap is used to display a menu,
-Emacs evaluates the expression, and it enables the menu item only if
-the expression's value is non-`nil'.  When a menu item is disabled, it
-is displayed in a "fuzzy" fashion, and cannot be selected with the
-mouse.
-
-Menus and the Mouse
--------------------
-
-   The way to make a menu keymap produce a menu is to make it the
-definition of a prefix key.
-
-   When the prefix key ends with a mouse event, Emacs handles the menu
-keymap by popping up a visible menu that you can select from with the
-mouse.  When you click on a menu item, the event generated is whatever
-character or symbol has the binding which brought about that menu item.
-
-   A single keymap can appear as multiple panes, if you explicitly
-arrange for this.  The way to do this is to make a keymap for each
-pane, then create a binding for each of those maps in the main keymap
-of the menu.  Give each of these bindings a prompt string that starts
-with `@'.  The rest of the prompt string becomes the name of the pane.
-See the file `lisp/mouse.el' for an example of this.  Any ordinary
-bindings with prompt strings are grouped into one pane, which appears
-along with the other panes explicitly created for the submaps.
-
-   You can also get multiple panes from separate keymaps.  The full
-definition of a prefix key always comes from merging the definitions
-supplied by the various active keymaps (minor modes, local, and
-global).  When more than one of these keymaps is a menu, each of them
-makes a separate pane or panes.
-
-Menus and the Keyboard
-----------------------
-
-   When a prefix key ending with a keyboard event (a character or
-function key) has a definition that is a menu keymap, you can use the
-keyboard to choose a menu item.
-
-   Emacs displays the menu alternatives in the echo area.  If they don't
-all fit at once, type SPC to see the next line of alternatives.  If you
-keep typing SPC, you eventually get to the end of the menu and then
-cycle around to the beginning again.
-
-   When you have found the alternative you want, type the corresponding
-character--the one whose binding is that alternative.
-
-   In a menu intended for keyboard use, each menu item must clearly
-indicate what character to type.  The best convention to use is to make
-the character the first letter of the menu item prompt string.  That is
-something users will understand without being told.
-
-The Menu Bar
-------------
-
-   Under X Windows, each frame can have a "menu bar"--a permanently
-displayed menu stretching horizontally across the top of the frame.  The
-items of the menu bar are the subcommands of the fake "function key"
-`menu-bar', as defined by all the active keymaps.
-
-   To add an item to the menu bar, invent a fake "function key" of your
-own (let's call it KEY), and make a binding for the key sequence
-`[menu-bar KEY]'.  Most often, the binding is a menu keymap, so that
-pressing a button on the menu bar item leads to another menu.
-
-   In order for a frame to display a menu bar, its `menu-bar-lines'
-property must be greater than zero.  Emacs uses just one line for the
-menu bar itself; if you specify more than one line, the other lines
-serve to separate the menu bar from the windows in the frame.  We
-recommend you try one or two as the `menu-bar-lines' value.
-
-Keymaps
-=======
-
-   * The representation of keymaps has changed to support the new event
-     types.  All keymaps now have the form `(keymap ELEMENT ELEMENT
-     ...)'.  Each ELEMENT takes one of the following forms:
-
-    PROMPT-STRING
-          A string as an element of the keymap marks the keymap as a
-          menu, and serves as the overall prompt string for it.
-
-    `(KEY . BINDING)'
-          A cons cell binds KEY to DEFINITION.  Here KEY may be any
-          sort of event head--a character, a function key symbol, or a
-          mouse button symbol.
-
-    VECTOR
-          A vector of 128 elements binds all the ASCII characters; the
-          Nth element holds the binding for character number N.
-
-    `(t . BINDING)'
-          A cons cell whose CAR is `t' is a default binding; anything
-          not bound by previous keymap elements is given BINDING as its
-          binding.
-
-          Default bindings are important because they allow a keymap to
-          bind all possible events without having to enumerate all the
-          possible function keys and mouse clicks, with all possible
-          modifier prefixes.
-
-          The function `lookup-key' (and likewise other functions for
-          examining a key binding) normally report only explicit
-          bindings of the specified key sequence; if there is none,
-          they return `nil', even if there is a default binding that
-          would apply to that key sequence if it were actually typed
-          in.  However, these functions now take an optional argument
-          ACCEPT-DEFAULTS which, if non-`nil', says to consider default
-          bindings.
-
-          Note that if a vector in the keymap binds an ASCII character
-          to `nil' (thus making it "unbound"), the default binding does
-          not apply to the character.  Think of the vector element as
-          an explicit binding of `nil'.
-
-          Note also that if the keymap for a minor or major mode
-          contains a default binding, it completely masks out any
-          lower-priority keymaps.
-
-   * A keymap can now inherit from another keymap.  To do this, make the
-     latter keymap the "tail" of the new one.  Such a keymap looks like
-     this:
-
-          (keymap BINDINGS... . OTHER-KEYMAP)
-
-     The effect is that this keymap inherits all the bindings of
-     OTHER-KEYMAP, but can add to them or override them with BINDINGS.
-     Subsequent changes in the bindings of OTHER-KEYMAP *do* affect
-     this keymap.
-
-     For example,
-
-          (setq my-mode-map (cons 'keymap text-mode-map))
-
-     makes a keymap that by default inherits all the bindings of Text
-     mode--whatever they may be at the time a key is looked up.  Any
-     bindings made explicitly in `my-mode-map' override the bindings
-     inherited from Text mode, however.
-
-   * Minor modes can now have local keymaps.  Thus, a key can act a
-     special way when a minor mode is in effect, and then revert to the
-     major mode or global definition when the minor mode is no longer
-     in effect.  The precedence of keymaps is now: minor modes (in no
-     particular order), then major mode, and lastly the global map.
-
-     The new `current-minor-mode-maps' function returns a list of all
-     the keymaps of currently enabled minor modes, in the other that
-     they apply.
-
-     To set up a keymap for a minor mode, add an element to the alist
-     `minor-mode-map-alist'.  Its elements look like this:
-
-          (SYMBOL . KEYMAP)
-
-     The keymap KEYMAP is active whenever SYMBOL has a non-`nil' value.
-     Use for SYMBOL the variable which indicates whether the minor
-     mode is enabled.
-
-     When more than one minor mode keymap is active, their order of
-     precedence is the order of `minor-mode-map-alist'.  But you should
-     design minor modes so that they don't interfere with each other,
-     and if you do this properly, the order will not matter.
-
-     The function `minor-mode-key-binding' returns a list of all the
-     active minor mode bindings of KEY.  More precisely, it returns an
-     alist of pairs `(MODENAME . BINDING)', where MODENAME is the
-     variable which enables the minor mode, and BINDING is KEY's
-     definition in that mode.  If KEY has no minor-mode bindings, the
-     value is `nil'.
-
-     If the first binding is a non-prefix, all subsequent bindings from
-     other minor modes are omitted, since they would be completely
-     shadowed.  Similarly, the list omits non-prefix bindings that
-     follow prefix bindings.
-
-   * The new function `copy-keymap' copies a keymap, producing a new
-     keymap with the same key bindings in it.  If the keymap contains
-     other keymaps directly, these subkeymaps are copied recursively.
-
-     If you want to, you can define a prefix key with a binding that is
-     a symbol whose function definition is another keymap.  In this
-     case, `copy-keymap' does not look past the symbol; it doesn't copy
-     the keymap inside the symbol.
-
-   * `substitute-key-definition' now accepts an optional fourth
-     argument, which is a keymap to use as a template.
-
-          (substitute-key-definition olddef newdef keymap oldmap)
-
-     finds all characters defined in OLDMAP as OLDDEF, and defines them
-     in KEYMAP as NEWDEF.
-
-     In addition, this function now operates recursively on the keymaps
-     that define prefix keys within KEYMAP and OLDMAP.
-
-Minibuffer Features
-===================
-
-   The minibuffer input functions `read-from-minibuffer' and
-`completing-read' have new features.
-
-Minibuffer History
-------------------
-
-   A new optional argument HIST specifies which history list to use.
-If you specify a variable (a symbol), that variable is the history
-list.  If you specify a cons cell `(VARIABLE . STARTPOS)', then
-VARIABLE is the history list variable, and STARTPOS specifies the
-initial history position (an integer, counting from zero which
-specifies the most recent element of the history).
-
-   If you specify STARTPOS, then you should also specify that element
-of the history as INITIAL-INPUT, for consistency.
-
-   If you don't specify HIST, then the default history list
-`minibuffer-history' is used.  Other standard history lists that you
-can use when appropriate include `query-replace-history',
-`command-history', and `file-name-history'.
-
-   The value of the history list variable is a list of strings, most
-recent first.  You should set a history list variable to `nil' before
-using it for the first time.
-
-   `read-from-minibuffer' and `completing-read' add new elements to the
-history list automatically, and provide commands to allow the user to
-reuse items on the list.  The only thing your program needs to do to
-use a history list is to initialize it and to pass its name to the
-input functions when you wish.  But it is safe to modify the list by
-hand when the minibuffer input functions are not using it.
-
-Other Minibuffer Features
--------------------------
-
-   The INITIAL argument to `read-from-minibuffer' and other minibuffer
-input functions can now be a cons cell `(STRING . POSITION)'.  This
-means to start off with STRING in the minibuffer, but put the cursor
-POSITION characters from the beginning, rather than at the end.
-
-   In `read-no-blanks-input', the INITIAL argument is now optional; if
-it is omitted, the initial input string is the empty string.
-
-New Features for Defining Commands
-==================================
-
-   * If the interactive specification begins with `@', this means to
-     select the window under the mouse.  This selection takes place
-     before doing anything else with the command.
-
-     You can use both `@' and `*' together in one command; they are
-     processed in order of appearance.
-
-   * Prompts in an interactive specification can incorporate the values
-     of the preceding arguments.  Emacs replaces `%'-sequences (as used
-     with the `format' function) in the prompt with the interactive
-     arguments that have been read so far.  For example, a command with
-     this interactive specification
-
-          (interactive "sReplace: \nsReplace %s with: ")
-
-     prompts for the first argument with `Replace: ', and then prompts
-     for the second argument with `Replace FOO with: ', where FOO is
-     the string read as the first argument.
-
-   * If a command name has a property `enable-recursive-minibuffers'
-     which is non-`nil', then the command can use the minibuffer to read
-     arguments even if it is invoked from the minibuffer.  The
-     minibuffer command `next-matching-history-element' (normally bound
-     to `M-s' in the minibuffer) uses this feature.
-
-New Features for Reading Input
-==============================
-
-   * The function `set-input-mode' now takes four arguments.  The last
-     argument is optional.  Their names are INTERRUPT, FLOW, META and
-     QUIT.
-
-     The argument INTERRUPT says whether to use interrupt-driven input.
-     Non-`nil' means yes, and `nil' means no (use CBREAK mode).
-
-     The argument FLOW says whether to enable terminal flow control.
-     Non-`nil' means yes.
-
-     The argument META controls support for input character codes above
-     127.  If META is `t', Emacs converts characters with the 8th bit
-     set into Meta characters.  If META is `nil', Emacs disregards the
-     8th bit; this is necessary when the terminal uses it as a parity
-     bit.  If META is neither `t' nor `nil', Emacs uses all 8 bits of
-     input unchanged.  This is good for terminals using European 8-bit
-     character sets.
-
-     If QUIT non-`nil', it is the character to use for quitting.
-     (Normally this is `C-g'.)
-
-   * The variable `meta-flag' has been deleted; use `set-input-mode' to
-     enable or disable support for a META key.  This change was made
-     because `set-input-mode' can send the terminal the appropriate
-     commands to enable or disable operation of the META key.
-
-   * The new variable `extra-keyboard-modifiers' lets Lisp programs
-     "press" the modifier keys on the keyboard.  The value is a bit
-     mask:
-
-    1
-          The SHIFT key.
-
-    2
-          The LOCK key.
-
-    4
-          The CTL key.
-
-    8
-          The META key.
-
-     When you use X windows, the program can press any of the modifier
-     keys in this way.  Otherwise, only the CTL and META keys can be
-     virtually pressed.
-
-   * You can use the new function `keyboard-translate' to set up
-     `keyboard-translate-table' conveniently.
-
-   * Y-or-n questions using the `y-or-n-p' function now accept `C-]'
-     (usually mapped to `abort-recursive-edit') as well as `C-g' to
-     quit.
-
-   * The variable `num-input-keys' is the total number of key sequences
-     that the user has typed during this Emacs session.
-
-   * A new Lisp variable, `function-key-map', holds a keymap which
-     describes the character sequences sent by function keys on an
-     ordinary character terminal.  This uses the same keymap data
-     structure that is used to hold bindings of key sequences, but it
-     has a different meaning: it specifies translations to make while
-     reading a key sequence.
-
-     If `function-key-map' "binds" a key sequence K to a vector V, then
-     when K appears as a subsequence *anywhere* in a key sequence, it
-     is replaced with V.
-
-     For example, VT100 terminals send `ESC O P' when the "keypad" PF1
-     key is pressed.  Thus, on a VT100, `function-key-map' should
-     "bind" that sequence to `[pf1]'.  This specifies translation of
-     `ESC O P' into PF1 anywhere in a key sequence.
-
-     Thus, typing `C-c PF1' sends the character sequence `C-c ESC O P',
-     but `read-key-sequence' translates this back into `C-c PF1', which
-     it returns as the vector `[?\C-c PF1]'.
-
-     Entries in `function-key-map' are ignored if they conflict with
-     bindings made in the minor mode, local, or global keymaps.
-
-     The value of `function-key-map' is usually set up automatically
-     according to the terminal's Terminfo or Termcap entry, and the
-     terminal-specific Lisp files.  Emacs comes with a number of
-     terminal-specific files for many common terminals; their main
-     purpose is to make entries in `function-key-map' beyond those that
-     can be deduced from Termcap and Terminfo.
-
-   * The variable `key-translation-map' works like `function-key-map'
-     except for two things:
-
-        * `key-translation-map' goes to work after `function-key-map' is
-          finished; it receives the results of translation by
-          `function-key-map'.
-
-        * `key-translation-map' overrides actual key bindings.
-
-     The intent of `key-translation-map' is for users to map one
-     character set to another, including ordinary characters normally
-     bound to `self-insert-command'.
-
-New Syntax Table Features
-=========================
-
-   * You can use two new functions to move across characters in certain
-     syntax classes.
-
-     `skip-syntax-forward' moves point forward across characters whose
-     syntax classes are mentioned in its first argument, a string.  It
-     stops when it encounters the end of the buffer, or position LIM
-     (the optional second argument), or a character it is not supposed
-     to skip.  The function `skip-syntax-backward' is similar but moves
-     backward.
-
-   * The new function `forward-comment' moves point by comments.  It
-     takes one argument, COUNT; it moves point forward across COUNT
-     comments (backward, if COUNT is negative).  If it finds anything
-     other than a comment or whitespace, it stops, leaving point at the
-     far side of the last comment found.  It also stops after
-     satisfying COUNT.
-
-   * The new variable `words-include-escapes' affects the behavior of
-     `forward-word' and everything that uses it.  If it is non-`nil',
-     then characters in the "escape" and "character quote" syntax
-     classes count as part of words.
-
-   * There are two new syntax flags for use in syntax tables.
-
-        - The prefix flag.
-
-          The `p' flag identifies additional "prefix characters" in Lisp
-          syntax.  You can set this flag with `modify-syntax-entry' by
-          including the letter `p' in the syntax specification.
-
-          These characters are treated as whitespace when they appear
-          between expressions.  When they appear withing an expression,
-          they are handled according to their usual syntax codes.
-
-          The function `backward-prefix-chars' moves back over these
-          characters, as well as over characters whose primary syntax
-          class is prefix (`'').
-
-        - The `b' comment style flag.
-
-          Emacs can now supports two comment styles simultaneously.
-          (This is for the sake of C++.)  More specifically, it can
-          recognize two different comment-start sequences.  Both must
-          share the same first character; only the second character may
-          differ.  Mark the second character of the `b'-style comment
-          start sequence with the `b' flag.  You can set this flag with
-          `modify-syntax-entry' by including the letter `b' in the
-          syntax specification.
-
-          The two styles of comment can have different comment-end
-          sequences.  A comment-end sequence (one or two characters)
-          applies to the `b' style if its first character has the `b'
-          flag set; otherwise, it applies to the `a' style.
-
-          The appropriate comment syntax settings for C++ are as
-          follows:
-
-         `/'
-               `124b'
-
-         `*'
-               `23'
-
-         newline
-               `>b'
-
-          Thus `/*' is a comment-start sequence for `a' style, `//' is
-          a comment-start sequence for `b' style, `*/' is a comment-end
-          sequence for `a' style, and newline is a comment-end sequence
-          for `b' style.
-
-The Case Table
-==============
-
-   You can customize case conversion using the new case table feature.
-A case table is a collection of strings that specifies the mapping
-between upper case and lower case letters.  Each buffer has its own
-case table.  You need a case table if you are using a language which
-has letters that are not standard ASCII letters.
-
-   A case table is a list of this form:
-
-     (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
-
-where each element is either `nil' or a string of length 256.  The
-element DOWNCASE says how to map each character to its lower-case
-equivalent.  The element UPCASE maps each character to its upper-case
-equivalent.  If lower and upper case characters are in 1-1
-correspondence, use `nil' for UPCASE; then Emacs deduces the upcase
-table from DOWNCASE.
-
-   For some languages, upper and lower case letters are not in 1-1
-correspondence.  There may be two different lower case letters with the
-same upper case equivalent.  In these cases, you need to specify the
-maps for both directions.
-
-   The element CANONICALIZE maps each character to a canonical
-equivalent; any two characters that are related by case-conversion have
-the same canonical equivalent character.
-
-   The element EQUIVALENCES is a map that cyclicly permutes each
-equivalence class (of characters with the same canonical equivalent).
-
-   You can provide `nil' for both CANONICALIZE and EQUIVALENCES, in
-which case both are deduced from DOWNCASE and UPCASE.
-
-   Here are the functions for working with case tables:
-
-   `case-table-p' is a predicate that says whether a Lisp object is a
-valid case table.
-
-   `set-standard-case-table' takes one argument and makes that argument
-the case table for new buffers created subsequently.
-`standard-case-table' returns the current value of the new buffer case
-table.
-
-   `current-case-table' returns the case table of the current buffer.
-`set-case-table' sets the current buffer's case table to the argument.
-
-   `set-case-syntax-pair' is a convenient function for specifying a
-pair of letters, upper case and lower case.  Call it with two arguments,
-the upper case letter and the lower case letter.  It modifies the
-standard case table and a few syntax tables that are predefined in
-Emacs.  This function is intended as a subroutine for packages that
-define non-ASCII character sets.
-
-   Load the library `iso-syntax' to set up the syntax and case table for
-the 256 bit ISO Latin 1 character set.
-
-New Features for Dealing with Buffers
-=====================================
-
-   * The new function `buffer-modified-tick' returns a buffer's
-     modification-count that ticks every time the buffer is modified.
-     It takes one optional argument, which is the buffer you want to
-     examine.  If the argument is `nil' (or omitted), the current
-     buffer is used.
-
-   * `buffer-disable-undo' is a new name for the function formerly
-     known as `buffer-flush-undo'.  This turns off recording of undo
-     information in the buffer given as argument.
-
-   * The new function `generate-new-buffer-name' chooses a name that
-     would be unique for a new buffer--but does not create the buffer.
-     Give it one argument, a starting name.  It produces a name not in
-     use for a buffer by appending a number inside of `<...>'.
-
-   * The function `rename-buffer' now takes an optional second argument
-     which tells it that if the specified new name corresponds to an
-     existing buffer, it should use `generate-new-buffer-name' to
-     modify the name to be unique, rather than signaling an error.
-
-     `rename-buffer' now returns the name to which the buffer was
-     renamed.
-
-   * The function `list-buffers' now looks at the local variable
-     `list-buffers-directory' in each non-file-visiting buffer, and
-     shows its value where the file would normally go.  Dired sets this
-     variable in each Dired buffer, so the buffer list now shows which
-     directory each Dired buffer is editing.
-
-   * The function `other-buffer' now takes an optional second argument
-     VISIBLE-OK which, if non-`nil', indicates that buffers currently
-     being displayed in windows may be returned even if there are other
-     buffers not visible.  Normally, `other-buffer' returns a currently
-     visible buffer only as a last resort, if there are no suitable
-     nonvisible buffers.
-
-   * The hook `kill-buffer-hook' now runs whenever a buffer is killed.
-
-Local Variables Features
-========================
-
-   * If a local variable name has a non-`nil' `permanent-local'
-     property, then `kill-all-local-variables' does not kill it.  Such
-     local variables are "permanent"--they remain unchanged even if you
-     select a different major mode.
-
-     Permanent locals are useful when they have to do with where the
-     file came from or how to save it, rather than with how to edit the
-     contents.
-
-   * The function `make-local-variable' now never changes the value of
-     the variable that it makes local.  If the variable had no value
-     before, it still has no value after becoming local.
-
-   * The new function `default-boundp' tells you whether a variable has
-     a default value (as opposed to being unbound in its default
-     value).  If `(default-boundp 'foo)' returns `nil', then
-     `(default-value 'foo)' would get an error.
-
-     `default-boundp' is to `default-value' as `boundp' is to
-     `symbol-value'.
-
-   * The special forms `defconst' and `defvar', when the variable is
-     local in the current buffer, now set the variable's default value
-     rather than its local value.
-
-New Features for Subprocesses
-=============================
-
-   * `call-process' and `call-process-region' now return a value that
-     indicates how the synchronous subprocess terminated.  It is either
-     a number, which is the exit status of a process, or a signal name
-     represented as a string.
-
-   * `process-status' now returns `open' and `closed' as the status
-     values for network connections.
-
-   * The standard asynchronous subprocess features work on VMS now, and
-     the special VMS asynchronous subprocess functions have been
-     deleted.
-
-   * You can use the transaction queue feature for more convenient
-     communication with subprocesses using transactions.
-
-     Call `tq-create' to create a transaction queue communicating with a
-     specified process.  Then you can call `tq-enqueue' to send a
-     transaction.  `tq-enqueue' takes these five arguments:
-
-          (tq-enqueue TQ QUESTION REGEXP CLOSURE FN)
-
-     TQ is the queue to use.  (Specifying the queue has the effect of
-     specifying the process to talk to.)  The argument QUESTION is the
-     outgoing message which starts the transaction.  The argument FN is
-     the function to call when the corresponding answer comes back; it
-     is called with two arguments: CLOSURE, and the answer received.
-
-     The argument REGEXP is a regular expression to match the entire
-     answer; that's how `tq-enqueue' tells where the answer ends.
-
-     Call `tq-close' to shut down a transaction queue and terminate its
-     subprocess.
-
-   * The function `signal-process' sends a signal to process PID, which
-     need not be a child of Emacs.  The second argument SIGNAL
-     specifies which signal to send; it should be an integer.
-
-New Features for Dealing with Times And Time Delays
-===================================================
-
-   * The new function `current-time' returns the system's time value as
-     a list of three integers: `(HIGH LOW MICROSEC)'.  The integers
-     HIGH and LOW combine to give the number of seconds since 0:00
-     January 1, 1970, which is HIGH * 2**16 + LOW.
-
-     MICROSEC gives the microseconds since the start of the current
-     second (or 0 for systems that return time only on the resolution
-     of a second).
-
-   * The function `current-time-string' accepts an optional argument
-     TIME-VALUE.  If given, this specifies a time to format instead of
-     the current time.  The argument should be a cons cell containing
-     two integers, or a list whose first two elements are integers.
-     Thus, you can use times obtained from `current-time' (see above)
-     and from `file-attributes'.
-
-   * You can now find out the user's time zone using
-     `current-time-zone'.
-
-     The value has the form `(OFFSET NAME)'.  Here OFFSET is an integer
-     giving the number of seconds ahead of UTC (east of Greenwich).  A
-     negative value means west of Greenwich.  The second element, NAME
-     is a string giving the name of the time zone.  Both elements
-     change when daylight savings time begins or ends; if the user has
-     specified a time zone that does not use a seasonal time
-     adjustment, then the value is constant through time.
-
-     If the operating system doesn't supply all the information
-     necessary to compute the value, both elements of the list are
-     `nil'.
-
-     The optional argument TIME-VALUE, if given, specifies a time to
-     analyze instead of the current time.  The argument should be a
-     cons cell containing two integers, or a list whose first two
-     elements are integers.  Thus, you can use times obtained from
-     `current-time' and from `file-attributes'.
-
-   * `sit-for', `sleep-for' now let you specify the time period in
-     milliseconds as well as in seconds.  The first argument gives the
-     number of seconds, as before, and the optional second argument
-     gives additional milliseconds.  The time periods specified by
-     these two arguments are added together.
-
-     Not all systems support this; you get an error if you specify
-     nonzero milliseconds and it isn't supported.
-
-     `sit-for' also accepts an optional third argument NODISP.  If this
-     is non-`nil', `sit-for' does not redisplay.  It still waits for
-     the specified time or until input is available.
-
-   * `accept-process-output' now accepts a timeout specified by optional
-     second and third arguments.  The second argument specifies the
-     number of seconds, while the third specifies the number of
-     milliseconds.  The time periods specified by these two arguments
-     are added together.
-
-     Not all systems support this; you get an error if you specify
-     nonzero milliseconds and it isn't supported.
-
-     The function returns `nil' if the timeout expired before output
-     arrived, or non-`nil' if it did get some output.
-
-   * You can set up a timer to call a function at a specified future
-     time.  To do so, call `run-at-time', like this:
-
-          (run-at-time TIME REPEAT FUNCTION ARGS...)
-
-     Here, TIME is a string saying when to call the function.  The
-     argument FUNCTION is the function to call later, and ARGS are the
-     arguments to give it when it is called.
-
-     The argument REPEAT specifies how often to repeat the call.  If
-     REPEAT is `nil', there are no repetitions; FUNCTION is called just
-     once, at TIME.  If REPEAT is an integer, it specifies a repetition
-     period measured in seconds.
-
-     Absolute times may be specified in a wide variety of formats; The
-     form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where all fields are
-     numbers, works; the format that `current-time-string' returns is
-     also allowed.
-
-     To specify a relative time, use numbers followed by units.  For
-     example:
-
-    `1 min'
-          denotes 1 minute from now.
-
-    `1 min 5 sec'
-          denotes 65 seconds from now.
-
-    `1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year'
-          denotes exactly 103 months, 123 days, and 10862 seconds from
-          now.
-
-     If TIME is an integer, that specifies a relative time measured in
-     seconds.
-
-   To cancel the requested future action, pass the value that
-`run-at-time' returned to the function `cancel-timer'.
-
-Profiling Lisp Programs
-=======================
-
-   You can now make execution-time profiles of Emacs Lisp programs using
-the `profile' library.  See the file `profile.el' for instructions; if
-you have written a Lisp program big enough to be worth profiling, you
-can surely understand them.
-
-New Features for Lisp Debuggers
-===============================
-
-   * You can now specify which kinds of errors should invoke the Lisp
-     debugger by setting the variable `debug-on-error' to a list of
-     error conditions.  For example, if you set it to the list
-     `(void-variable)', then only errors about a variable that has no
-     value invoke the debugger.
-
-   * The variable `command-debug-status' is used by Lisp debuggers.  It
-     records the debugging status of current interactive command.  Each
-     time a command is called interactively, this variable is bound to
-     `nil'.  The debugger can set this variable to leave information for
-     future debugger invocations during the same command.
-
-     The advantage of this variable over some other variable in the
-     debugger itself is that the data will not be visible for any other
-     command invocation.
-
-   * The function `backtrace-frame' is intended for use in Lisp
-     debuggers.  It returns information about what a frame on the Lisp
-     call stack is doing.  You specify one argument, which is the
-     number of stack frames to count up from the current execution
-     point.
-
-     If that stack frame has not evaluated the arguments yet (or is a
-     special form), the value is `(nil FUNCTION ARG-FORMS...)'.
-
-     If that stack frame has evaluated its arguments and called its
-     function already, the value is `(t FUNCTION ARG-VALUES...)'.
-
-     In the return value, FUNCTION is whatever was supplied as CAR of
-     evaluated list, or a `lambda' expression in the case of a macro
-     call.  If the function has a `&rest' argument, that is represented
-     as the tail of the list ARG-VALUES.
-
-     If the argument is out of range, `backtrace-frame' returns `nil'.
-
-Memory Allocation Changes
-=========================
-
-   The list that `garbage-collect' returns now has one additional
-element.  This is a cons cell containing two numbers.  It gives
-information about the number of used and free floating point numbers,
-much as the first element gives such information about the number of
-used and free cons cells.
-
-   The new function `memory-limit' returns an indication of the last
-address allocated by Emacs.  More precisely, it returns that address
-divided by 1024.  You can use this to get a general idea of how your
-actions affect the memory usage.
-
-Hook Changes
-============
-
-   * Expanding an abbrev first runs the new hook
-     `pre-abbrev-expand-hook'.
-
-   * The editor command loop runs the normal hook `pre-command-hook'
-     before each command, and runs `post-command-hook' after each
-     command.
-
-   * Auto-saving runs the new hook `auto-save-hook' before actually
-     starting to save any files.
-
-   * The new variable `revert-buffer-insert-file-contents-function'
-     holds a function that `revert-buffer' now uses to read in the
-     contents of the reverted buffer--instead of calling
-     `insert-file-contents'.
-
-   * The variable `lisp-indent-hook' has been renamed to
-     `lisp-indent-function'.
-
-   * The variable `auto-fill-hook' has been renamed to
-     `auto-fill-function'.
-
-   * The variable `blink-paren-hook' has been renamed to
-     `blink-paren-function'.
-
-   * The variable `temp-buffer-show-hook' has been renamed to
-     `temp-buffer-show-function'.
-
-   * The variable `suspend-hook' is now a normal hook.  It used to be a
-     special kind of hook; its value had to be a single function, and
-     if the function returned a non-`nil' value, then suspension was
-     inhibited.
-
-   * The new function `add-hook' provides a handy way to add a function
-     to a hook variable.  For example,
-
-          (add-hook 'text-mode-hook 'my-text-hook-function)
-
-     arranges to call `my-text-hook-function' when entering Text mode
-     or related modes.
-
-     `add-hook' takes an optional third argument which says to add the
-     new hook function at the end of the list (normally, it goes at the
-     beginning).
-
--- a/etc/MH-E-ONEWS	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-This file is automatically generated from news-mh-e.txinfo.  Do not edit.
-
-User-visible changes to mh-e in version 4.0 from 3.8
-
-Note: there are many internal changes to mh-e in this release.  If you
-have the previous version loaded into your Emacs, you will probably not
-be able to load this version on top of it.
-
-
-New Features in mh-e
-====================
-
-Background folder collection.  The first time you are prompted for a
-folder, you must wait while mh-e collects the names of all existing
-folders.  Now however, if you abort, collecting will continue in the
-background, and you can do something else in Emacs until the collection
-completes.  Normally, mh-e will begin collecting folders names in the
-background when you first load it; you can disable this feature by
-setting `mh-auto-folder-collect' to nil.
-
-There is support for composing MIME messages using the `mhn' program
-from MH 6.8.  See the documentation string for mh-edit-mhn.  (While
-composing a letter, type `C-h k C-c C-e'.)  See also mhn(1).  There is
-as yet no support for reading MIME messages.
-
-`mh-show', typically on `.', repositions to the start of the message if
-the message is already visible.  It used to do nothing in this case.
-
-The function `mh-unshar-msg' is renamed `mh-store-msg'.  It now does
-uudecoding, too.  Someday it should do MIME.  It remembers the last
-directory you used and offers it as the default for next time.
-
-New function `mh-header-display', on `,', displays the message with all
-headers, including those normally not displayed.  Type `.' to display
-the message normally again.
-
-New function `mh-list-sequences' lists the sequences in use in the
-current folder.
-
-New function `mh-version' displays version information about MH and
-mh-e.  Please use the output in bug reports.
-
-`mh-quit' now burys the folder buffer and show buffer.
-
-
-New mh-e hooks and customization variables
-==========================================
-
-`mh-pick-mode-hook': new hook called by new mode `mh-pick-mode'.  The
-pick buffer didn't used to have its own mode.  Another advantage of
-`mh-pick-mode' is that `C-h m' works in the pick buffer.
-
-`mail-citation-hook': new variable for supercite.
-
-`mh-refile-msg-hook': new hook called by `mh-refile-msg' (and
-`mh-refile-or-write-again' when refiling).
-
-`mh-msg-folder-hook': new hook used by `mh-refile-msg' and `mh-to-fcc'
-to provide a default folder for user prompt.
-
-`mh-show-hook': new hook called by `mh-show'.
-
-`mh-delete-msg-hook': new hook called by `mh-delete-msg'.
-
-`mh-show-mode-hook': new hook called by new mode `mh-show-mode' for
-`show-' buffers.
-
-`mh-comp-formfile': new variable so can customize `components' file.
-
-`mh-sortm-args': new variable, a list of extra arguments to be passed to
-sortm by `mh-sort-folder'.  Give an argument to `mh-sort-folder' to
-suppress this behavior.
-
-`mh-send-prog': new variable so can customize name of `send' program in
-case of name conflicts.
-
-`mh-scan-prog': new variable so can customize name of `scan' program to
-generate custom effects.
-
-`mh-inc-prog': new variable so can customize name of `inc' program to do
-fancy management of incoming messages.
-
-`mh-forwarded-letter-subject': new function used by `mh-forward' to
-compute the Subject line of the new message.  It is a small function
-which can be replaced by the user for customization.  Uses the new
-variable `mh-forward-subject-format', which allows some simple
-customizations without rewriting even `mh-forwarded-letter-subject'.
-
-`mh-new-draft-cleaned-headers': new variable, header lines removed by
-`mh-edit-again' and `mh-extract-rejected-mail' before offering a message
-as a new draft.
-
-`mh-signature-file-name': new variable used by `mh-insert-signature' to
-so can customize name of the file to insert.
-
-`mh-read-address': new function called to read all To: and Cc:
-addresses.
-
-`mh-msg-folder-hook': new hook used by `mh-refile-msg' and `mh-to-fcc'
-to provide a default folder for user prompt.
-
-
-Key binding changes in mh-e
-===========================
-
-`,' runs new function `mh-header-display'.  It is like `.' but it
-displays *all* the headers.
-
-`M-#' runs the new function `mh-delete-seq'.  One used to have to type
-`C-u M-%' to delete a sequence.
-
-`<' no longer does `mh-first-msg', but `M->' now does `mh-last-msg'.
-This allows first and last to be consistent (`>' was taken) and is more
-likely to be discovered by chance anyway.
-
-`M-d' runs `mh-redistribute', `r' runs `mh-reply' (on the theory that
-the more commonly used function should be easier to type, and the
-obscure action of redistributing can be harder to type).
-
-`M-o' changed to `C-o' (`mh-write-msg-to-file').  It was interfering
-with arrow keys for some people.
-
-`M-n' now runs `mh-store-msg' (formerly `mh-unshar-msg').
-
-`b' no longer runs `mh-quit'; use `q' instead.  `b' may be used in a
-future version for something else.
-
-
-Minor improvements to mh-e
-==========================
-
-The mh-e code is now divided into multiple Emacs Lisp files, so it
-starts up faster because Emacs doesn't have to load all of it at once.
-(This change also makes it easier for the maintainer to manage things.)
-
-When searching for the directory containing the MH programs, search the
-user's PATH in addition to the built-in directories, to increase the
-chance of finding the MH programs.
-
-The subject for a forwarded message no longer has ugly square brackets
-around it.
-
-The name of the folder is no longer appears twice in the show buffer
-mode line.
-
-When typing a folder name in the minibuffer, parent folders complete to
-the trailing slash (/), for easier typing of subfolders.
-
-The folder buffer mode name changed from `mh-e scan' or `mh-e show' to
-`MH-Folder', which makes the hook name easier to guess.  Added
-`mh-showing' to `minor-mode-alist' so there is still an indication in
-the mode line of whether messages will be shown automatically.
-
-`mh-rename-seq' does completion on the old sequence name.
-
-If called by a user who has never used MH on this system before, mh-e
-runs the MH program `install-mh' to get them set up.
-
-Undo history for previous messages is not kept to avoid wasting memory.
-
-The internal temp buffer used by mh-e has `buffer-offer-save' explicitly
-nil.  This change benefits people who change the `buffer-offer-save'
-default.
-
-
-Bug fixes to mh-e
-=================
-
-`mh-to-field': don't bomb if no To: field.
-
-`mh-get-new-mail': restore annotations, e.g., cur, even if no new mail.
-
-`mh-rename-seq': verify that the new seq name was accepted by `mark'
-before updating state.
-
-`mh-internal-seq': the Previous sequence is not notated, since it would
-notate everything scanned.
-
-`mh-read-draft': don't call `find-file-noselect' so an `auto-mode-alist'
-doesn't trigger `mh-letter-mode-hook' twice.  Faster, too.
-
-`mh-show': If user moves onto a message that doesn't exist, don't leave
-the cursor in the show pane.
-
-`mh-delete-scan-msgs': use `equal', not `=', on the result of
-`mh-get-msg-num', since it may be nil.
-
-`mh-get-field': do anchored search so searching for `reply-to:' doesn't
-find `in-reply-to:'.
-
-`mh-widen': do nothing if not narrowed.
-
-`mh-clean-message-header': find end of headers even if no body.
-
--- a/etc/NEWS	Mon Aug 13 09:26:04 2007 +0200
+++ b/etc/NEWS	Mon Aug 13 09:26:39 2007 +0200
@@ -84,1104 +84,6 @@
 C-c C-k  make all subheadings at all levels visible.x1
 
 
-* The History of XEmacs
-=======================
-
-This product is an extension of GNU Emacs, previously known to some as
-"Lucid Emacs" or "ERA".  It was initially based on an early version of Emacs
-Version 19 from the Free Software Foundation and has since been kept
-up-to-date with recent versions of that product.  It stems from a
-collaboration of Lucid, Inc. with SunSoft DevPro (a division of Sun
-Microsystems, Inc.; formerly called SunPro) and the University of Illinois.
-
-NOTE: Lucid, Inc. is currently out of business but development on XEmacs
-continues strong.  Recently, Amdahl Corporation and INS Engineering have
-both contributed significantly to the development of XEmacs.
-
-
-* What's Different?
-===================
-
-
-** Differences between XEmacs and GNU Emacs 19
-==================================================
-In XEmacs 20, characters are first-class objects.  Characters can be
-converted to integers, but are not integers.  FSF 19, XEmacs 19, and Mule
-represent them as integers.
-
-In XEmacs, events are first-class objects.  FSF 19 represents them as
-integers, which obscures the differences between a key gesture and the
-ancient ASCII code used to represent a particular overlapping subset of them.
-
-In XEmacs, keymaps are first-class opaque objects.  FSF 19 represents them as
-complicated combinations of association lists and vectors.  If you use the
-advertised functional interface to manipulation of keymaps, the same code
-will work in XEmacs, Emacs 18, and GNU Emacs 19; if your code depends
-on the underlying implementation of keymaps, it will not.
-
-XEmacs uses "extents" to represent all non-textual aspects of buffers;
-FSF 19 uses two distinct objects, "text properties" and "overlays",
-which divide up the functionality between them.  Extents are a
-superset of the functionality of the two FSF data types.  The full FSF
-19 interface to text properties is supported in XEmacs (with extents
-being the underlying representation).
-
-Extents can be made to be copied into strings, and thus restored by kill
-and yank.  Thus, one can specify this behavior on either "extents" or
-"text properties", whereas in FSF 19 text properties always have this
-behavior and overlays never do.
-
-Many more packages are provided standard with XEmacs than with FSF 19.
-
-Pixmaps of arbitrary size can be embedded in a buffer.
-
-Variable width fonts work.
-
-The height of a line is the height of the tallest font on that line, instead
-of all lines having the same height.
-
-XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
-makes it be a more well-behaved X citizen (and also improves
-portability).  A result of this is that it is possible to include
-other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
-standard Xt command-line arguments.
-
-XEmacs provides support for ToolTalk on systems that have it.
-
-XEmacs can ask questions using popup dialog boxes.  Any command executed from
-a menu will ask yes/no questions with dialog boxes, while commands executed
-via the keyboard will use the minibuffer.
-
-XEmacs has a built-in toolbar.  Four toolbars can actually be configured:
-top, bottom, left, and right toolbars.
-
-XEmacs has vertical and horizontal scrollbars.  Unlike in FSF 19 (which
-provides a primitive form of vertical scrollbar), these are true toolkit
-scrollbars.  A look-alike Motif scrollbar is provided for those who
-don't have Motif. (Even for those who do, the look-alike may be preferable
-as it is faster.)
-
-If you're running on a machine with audio hardware, you can specify sound 
-files for XEmacs to play instead of the default X beep.  See the documentation
-of the function load-sound-file and the variable sound-alist.
-
-An XEmacs frame can be placed within an "external client widget" managed by
-another application.  This allows an application to use an XEmacs frame as its
-text pane rather than the standard Text widget that is provided with Motif or
-Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
-applications, and raw Xlib applications.
-
-Here are some more specifics about the XEmacs implementation:
-
-*** The Input Model
--------------------
-
-The fundamental unit of input is an "event" instead of a character.  An
-event is a new data type that contains several pieces of information.
-There are several kinds of event, and corresponding accessor and utility
-functions.  We tried to abstract them so that they would apply equally
-well to a number of window systems.
-
-NOTE: All timestamps are measured as milliseconds since Emacs started.
-
- key_press_event	
-    event_channel	A token representing which keyboard generated it.
-			For this kind of event, this is a console object.
-    timestamp		When it happened
-    key			What keysym this is; a character or a symbol.
-			If it is a character, it will be a printing
-			ASCII character.
-    modifiers		Bucky-bits on that key: control, meta, etc.
-			For most keys, Shift is not a bit; that is implicit
-			in the keyboard layout.
-
- button_press_event
- button_release_event
-    event_channel	A token representing which mouse generated it.
-			For this kind of event, this is a frame object.
-    timestamp		When it happened
-    button		What button went down or up.
-    modifiers		Bucky-bits on that button: shift, control, meta, etc.
-    x, y		Where it was at the button-state-change (in pixels).
-
- pointer_motion_event
-    event_channel	A token representing which mouse generated it.
-			For this kind of event, this is a frame object.
-    timestamp		When it happened
-    x, y		Where it was after it moved (in pixels).
-    modifiers		Bucky-bits down when the motion was detected.
-			(Possibly not all window systems will provide this?)
-
- process_event
-    timestamp		When it happened
-    process		the emacs "process" object in question
-
- timeout_event
-    timestamp		Now (really, when the timeout was signaled)
-    interval_id		The ID returned when the associated call to
-			add_timeout_cb() was made
-	------ the rest of the fields are filled in by Emacs -----
-    id_number		The Emacs timeout ID for this timeout (more
-			than one timeout event can have the same value
-			here, since Emacs timeouts, as opposed to
-			add_timeout_cb() timeouts, can resignal
-			themselves)
-    function		An elisp function to call when this timeout is
-			processed.
-    object		The object passed to that function.
-
- eval_event
-    timestamp		When it happened
-    function		An elisp function to call with this event object.
-    object		Anything.
-			This kind of event is used internally; sometimes the
-			window system interface would like to inform emacs of
-			some user action (such as focusing on another frame)
-			but needs that to happen synchronously with the other
-			user input, like keypresses.  This is useful when
-			events are reported through callbacks rather
-			than in the standard event stream.
-
- misc_user_event
-    timestamp		When it happened
-    function		An elisp function to call with this event object.
-    object		Anything.
-			This is similar to an eval_event, except that it is
-			generated by user actions: selections in the
-			menubar or scrollbar actions.  It is a "command"
-			event, like key and mouse presses (and unlike mouse
-			motion, process output, and enter and leave window
-			hooks).  In many ways, eval_events are not the same
-			as keypresses or misc_user_events.
-
- magic_event
-			No user-serviceable parts within.  This is for things
-			like KeymapNotify and ExposeRegion events and so on
-			that emacs itself doesn't care about, but which it
-			must do something with for proper interaction with
-			the window system.
-
-			Magic_events are handled somewhat asynchronously, just
-			like subprocess filters.  However, occasionally a 
-			magic_event needs to be handled synchronously; in that
-			case, the asynchronous handling of the magic_event will
-			push an eval_event back onto the queue, which will be 
-			handled synchronously later.  This is one of the
-			reasons why eval_events exist; I'm not entirely happy
-			with this aspect of this event model.
-
-
-The function `next-event' blocks and returns one of the above-described 
-event objects.  The function `dispatch-event' takes an event and processes
-it in the appropriate way.
-
-For a process-event, dispatch-event calls the process's handler; for a
-mouse-motion event, the mouse-motion-handler hook is called, and so on.
-For magic-events, dispatch-event does window-system-dependent things,
-including calling some non-window-system-dependent hooks: map-frame-hook,
-unmap-frame-hook, mouse-enter-frame-hook, and mouse-leave-frame-hook.
-
-The function `next-command-event' calls `next-event' until it gets a key or
-button from the user (that is, not a process, motion, timeout, or magic
-event).  If it gets an event that is not a key or button, it calls
-`dispatch-event' on it immediately and reads another one.  The
-next-command-event function could be implemented in Emacs Lisp, though it
-isn't.  Generally one should call `next-command-event' instead of
-`next-event'.
-
-read-char calls next-command-event; if it doesn't get an event that can be
-converted to an ASCII character, it signals an error.  Otherwise it returns
-an integer.
-
-The variable `last-command-char' always contains an integer, or nil (if the
-last read event has no ASCII equivalent, as when it is a mouse-click or a
-non-ASCII character chord.)
-
-The new variable `last-command-event' holds an event object, that could be
-a non-ASCII character, a button click, a menu selection, etc.
-
-The variable `unread-command-char' no longer exists, and has been replaced
-by `unread-command-events'.  With the new event model, it is incorrect for
-code to do (setq unread-command-char (read-char)), because all user-input
-can't be represented as ASCII characters.  *** This is an incompatible 
-change.  Code which sets `unread-command-char' must be updated to use the
-combination of `next-command-event' and `unread-command-events' instead.
-
-The functions `this-command-keys' and `recent-keys' return a vector of
-event objects, instead of a string of ASCII characters.  *** This also
-is an incompatible change.
-
-Almost nothing happens at interrupt level; the SIGIO handler simply sets a
-flag, and later, the X event queue is scanned for KeyPress events which map
-to ^G.  All redisplay happens in the main thread of the process.
-
-
-*** Keymaps
------------
-
-Instead of keymaps being alists or obarrays, they are a new primary data
-type.  The only user access to the contents of a keymap is through the
-existing keymap-manipulation functions, and a new function, map-keymap.
-This means that existing code that manipulates keymaps may need to 
-be changed.
-
-One of our goals with the new input and keymap code was to make more
-character combinations available for binding, besides just ASCII and
-function keys.  We want to be able bind different commands to Control-a 
-and Control-Shift-a; we also want it to be possible for the keys Control-h
-and Backspace (and Control-M and Return, and Control-I and Tab, etc) to
-be distinct.
-
-One of the most common complaints that new Emacs users have is that backspace
-is help.  The answer is to play around with the keyboard-translate-table, or
-be lucky enough to have a system administrator who has done this for you
-already; but if it were possible to bind backspace and C-h to different
-things, then (under a window manager at least) both backspace and delete
-would delete a character, and ^H would be help.  There's no need to deal 
-with xmodmap, kbd-translate-table, etc.
-
-Here are some more examples: suppose you want to bind one function to Tab, 
-and another to Control-Tab.  This can't be done if Tab and Control-I are the
-same thing.  What about control keys that have no ASCII equivalent, like
-Control-< ?  One might want that to be bound to set-mark-at-point-min.  We
-want M-C-Backspace to be kill-backward-sexp.  But we want M-Backspace to be
-kill-backward-word.  Again, this can't be done if Backspace and C-h are
-indistinguishable.
-
-The user represents keys as a string of ASCII characters (when possible and
-convenient), or as a vector of event objects, or as a vector of "key 
-description lists", that looks like (control a), or (control meta delete) 
-or (shift f1).  The order of the modifier-names is not significant, so
-(meta control x) and (control meta x) are the same.
-
-`define-key' knows how to take any of the above representations and store them
-into a keymap.  When Emacs wants to return a key sequence (this-command-keys,
-recent-keys, keyboard-macros, and read-key-sequence, for example) it returns
-a vector of event objects.  Keyboard macros can also be represented as ASCII
-strings or as vectors of key description lists.  
-
-This is an incompatible change: code which calls `this-command-keys',
-`recent-keys', `read-key-sequence', or manipulates keyboard-macros probably
-needs to be changed so that it no longer assumes that the returned value is a
-string.
-
-Control-Shift-a is specified as (control A), not (control shift a), since A
-is a two-case character.  But for keys that don't have an upper case
-version, like F1, Backspace, and Escape, you use the (shift backspace) syntax.
-
-See the doc string for our version of define-key, reproduced below in the
-`Changed Functions' section.  Note that when the KEYS argument is a string,
-it has the same semantics as the v18 define-key.
-
-
-*** Xt Integration
-------------------
-
-The heart of the event loop is implemented in terms of the Xt event functions
-(specifically XtAppProcessEvent), and uses Xt's concept of timeouts and
-file-descriptor callbacks, eliminating a large amount of system-dependent code
-(Xt does it for you.)
-
-If Emacs is compiled with support for X, it uses the Xt event loop even when
-Emacs is not running on an X display (the Xt event loop supports this).  This
-makes it possible to run Emacs on a dumb TTY, and later connect it to one or
-more X servers.  It should also be possible to later connect an existing Emacs
-process to additional TTY's, although this code is still experimental.  (Our
-intent at this point is not to have an Emacs that is being used by multiple
-people at the same time: it is to make it possible for someone to go home, log
-in on a dialup line, and connect to the same Emacs process that is running
-under X in their office without having to recreate their buffer state and so
-on.)
-
-If Emacs is not compiled with support for X, then it instead uses more general
-code, something like what v18 does; but this way of doing things is a lot more
-modular.
-
-(Linking Emacs with Xt seems to only add about 300k to the executable size,
-compared with an Emacs linked with Xlib only.)
-
-
-*** Region Highlighting
------------------------
-
-If the variable `zmacs-regions' is true, then the region between point and
-mark will be highlighted when "active".  Those commands which push a mark
-(such as C-SPC, and C-x C-x) make the region become "active" and thus
-highlighted.  Most commands (all non-motion commands, basically) cause it to
-become non-highlighted (non-"active").  Commands that operate on the region
-(such as C-w, C-x C-l, etc.) only work if the region is in the highlighted
-state.
-
-zmacs-activate-region-hook and zmacs-deactivate-region-hook are run at the
-appropriate times; under X, zmacs-activate-region-hook makes the X selection
-be the region between point and mark, thus doing two things at once: making
-the region and the X selection be the same; and making the region highlight
-in the same way as the X selection.
-
-If `zmacs-regions' is true, then the `mark-marker' command returns nil unless
-the region is currently in the active (highlighted) state.  With an argument
-of t, this returns the mark (if there is one) regardless of the active-region
-state.  You should *generally* not use the mark unless the region is active,
-if the user has expressed a preference for the active-region model.  Watch
-out!  Moving this marker changes the mark position.  If you set the marker not
-to point anywhere, the buffer will have no mark.
-
-In this way, the primary selection is a fairly transitory entity; but
-when something is copied to the kill ring, it is made the Clipboard
-selection.  It is also stored into CUT_BUFFER0, for compatibility with
-X applications that don't understand selections (like Emacs18).
-
-Compatibility note: if you have code which uses (mark) or (mark-marker),
-then you need to either: change those calls to (mark t) or (mark-marker t);
-or simply bind `zmacs-regions' to nil around the call to mark or mark-marker.
-This is probably the best solution, since it will work in Emacs 18 as well.
-
-
-*** Menubars and Dialog Boxes
------------------------------
-
-Here is an example of a menubar definition:
-
-(defvar default-menubar
-  '(("File"     ["Open File..."         find-file               t]
-                ["Save Buffer"          save-buffer             t]
-                ["Save Buffer As..."    write-file              t]
-                ["Revert Buffer"        revert-buffer           t]
-                "-----"
-                ["Print Buffer"         lpr-buffer              t]
-                "-----"
-                ["Delete Frame"         delete-frame            t]
-                ["Kill Buffer..."       kill-buffer             t]
-                ["Exit Emacs"           save-buffers-kill-emacs t]
-                )
-    ("Edit"     ["Undo"                 advertised-undo         t]
-                ["Cut"                  kill-primary-selection  t]
-                ["Copy"                 copy-primary-selection  t]
-                ["Paste"                yank-clipboard-selection t]
-                ["Clear"                delete-primary-selection t]
-                )
-    ...))
-
-The first element of each menu item is the string to print on the menu.
-
-The second element is the callback function; if it is a symbol, it is
-invoked with `call-interactively.'  If it is a list, it is invoked with
-`eval'.  
-
-If the second element is a symbol, then the menu also displays the key that
-is bound to that command (if any).
-
-The third element of the menu items determines whether the item is selectable.
-It may be t, nil, or a form to evaluate.  Also, a hook is run just before a
-menu is exposed, which can be used to change the value of these slots. 
-For example, there is a hook that makes the "undo" menu item be selectable
-only in the cases when `advertised-undo' would not signal an error.  
-
-Menus may have other menus nested within them; they will cascade.
-
-There are utility functions for adding items to menus, deleting items,
-disabling them, etc.
-
-The function `popup-menu' takes a menu description and pops it up.  
-
-The function `popup-dialog-box' takes a dialog-box description and pops 
-it up.  Dialog box descriptions look a lot like menu descriptions.
-
-The menubar, menu, and dialog-box code is implemented as a library, 
-with an interface which hides the toolkit that implements it.  
-
-
-*** Isearch Changes
--------------------
-
-Isearch has been reimplemented in a different way, adding some new features,
-and causing a few incompatible changes.
-
- -  the old isearch-*-char variables are no longer supported.  In the old
-    system, one could make ^A mean "repeat the search" by doing something
-    like (setq search-repeat-char ?C-a).  In the new system, this is 
-    accomplished with 
-
-       (define-key isearch-mode-map "\C-a" 'isearch-repeat-forward)
-
- -  The advantage of using the normal keymap mechanism for this is that you
-    can bind more than one key to an isearch command: for example, both C-a
-    and C-s could do the same thing inside isearch mode.  You can also bind
-    multi-key sequences inside of isearch mode, and bind non-ASCII keys.
-    For example, to use the F1 key to terminate a search:
-
-       (define-key isearch-mode-map 'f1 'isearch-exit)
-
-    or to make ``C-c C-c'' terminate a search:
-
-       (define-key isearch-mode-map "\C-c\C-c" 'isearch-exit)
-
- -  If isearch is behaving case-insensitively (the default) and you type an
-    upper case character, then the search will become case-sensitive.  This
-    can be disabled by setting `search-caps-disable-folding' to nil.
-
- -  There is a history ring of the strings previously searched for; typing
-    M-p or M-n while searching will cycle through this ring.  Typing M-TAB
-    will do completion across the set of items in the history ring.
-
- -  The ESC key is no longer used to terminate an incremental search.  The
-    RET key should be used instead.  This change is necessary for it to be
-    possible to bind "meta" characters to isearch commands.
-
-
-*** Startup Code Changes
-------------------------
-
-The initial X frame is mapped before the user's .emacs file is executed.
-Without this, there is no way for the user to see any error messages
-generated by their .emacs file, any windows created by the .emacs file
-don't show up, and the copyleft notice isn't shown.
-
-The default values for load-path, exec-path, lock-directory, and
-Info-directory-list are not (necessarily) built into Emacs, but are
-computed at startup time.  
-
-First, Emacs looks at the directory in which its executable file resides:
-
-  o  If that directory contains subdirectories named "lisp" and "lib-src",
-     then those directories are used as the lisp library and exec directory.
-
-  o  If the parent of the directory in which the emacs executable is located
-     contains "lisp" and "lib-src" subdirectories, then those are used.
-
-  o  If ../lib/xemacs-<version> (starting from the directory in which the
-     emacs executable is located) contains a "lisp" subdirectory and either
-     a "lib-src" subdirectory or a <configuration-name> subdirectory, then
-     those are used.
-
-  o  If the emacs executable that was run is a symbolic link, then the link
-     is chased, and the resultant directory is checked as above.
-
-(Actually, it doesn't just look for "lisp/", it looks for "lisp/prim/",
-which reduces the chances of a false positive.)
-
-If the lisp directory contains subdirectories, they are added to the default
-load-path as well.  If the site-lisp directory exists and contains
-subdirectories, they are then added.  Subdirectories whose names begin with
-a dot or a hyphen are not added to the load-path.
-
-These heuristics fail if the Emacs binary was copied from the main Emacs
-tree to some other directory, and links for the lisp directory were not put
-in.  This isn't much of a restriction: either make there be subdirectories
-(or symbolic links) of the directory of the emacs executable, or make the
-"installed" emacs executable be a symbolic link to an executable in a more
-appropriate directory structure.  For example, this setup works:
-
-    /usr/local/xemacs/xemacs*           ; The executable.
-    /usr/local/xemacs/lisp/             ; The associated directories.
-    /usr/local/xemacs/etc/              ; Any of the files in this list
-    /usr/local/xemacs/lock/             ; could be symbolic links as well.
-    /usr/local/xemacs/info/
-
-As does this:
-
-    /usr/local/bin/xemacs -> ../xemacs/src/xemacs-19.14 ; A link...
-    /usr/local/xemacs/src/xemacs-19.14*                 ; The executable,
-    /usr/local/xemacs/lisp/                             ; and the rest of
-    /usr/local/xemacs/etc/                              ; the source tree
-    /usr/local/xemacs/lock/
-    /usr/local/xemacs/info/
-
-This configuration might be used for a multi-architecture installation; assume
-that $LOCAL refers to a directory which contains only files specific to a 
-particular architecture (i.e., executables) and $SHARED refers to those files 
-which are not machine specific (i.e., lisp code and documentation.)
-
-    $LOCAL/bin/xemacs@ -> $LOCAL/xemacs-19.14/xemacs*
-    $LOCAL/xemacs-19.14/lisp@ -> $SHARED/xemacs-19.14/lisp/
-    $LOCAL/xemacs-19.14/etc@  -> $SHARED/xemacs-19.14/etc/
-    $LOCAL/xemacs-19.14/info@ -> $SHARED/xemacs-19.14/info/
-
-The following would also work, but the above is probably more attractive:
-
-    $LOCAL/bin/xemacs*
-    $LOCAL/bin/lisp@ -> $SHARED/xemacs-19.14/lisp/
-    $LOCAL/bin/etc@  -> $SHARED/xemacs-19.14/etc/
-    $LOCAL/bin/info@ -> $SHARED/xemacs-19.14/info/
-
-If Emacs can't find the requisite directories, it writes a message like this
-(or some appropriate subset of it) to stderr:
-
-  WARNING:
-  couldn't find an obvious default for load-path, exec-directory, and
-  lock-directory, and there were no defaults specified in paths.h when
-  Emacs was built.  Perhaps some directories don't exist, or the Emacs
-  executable, /cadillac-th/jwz/somewhere/xemacs is in a strange place?
-
-  Without both exec-directory and load-path, Emacs will be very broken.
-  Consider making a symbolic link from /cadillac-th/jwz/somewhere/etc
-  to wherever the appropriate Emacs etc/ directory is, and from
-  /cadillac-th/jwz/somewhere/lisp/ to wherever the appropriate Emacs
-  lisp library is.
-
-  Without lock-directory set, file locking won't work.  Consider
-  creating /cadillac-th/jwz/somewhere/lock as a directory or symbolic
-  link for use as the lock directory.
-
-The default installation tree is the following:
-
-    /usr/local/bin/b2m                          ;
-                   ctags                        ; executables that
-                   emacsclient                  ; should be in
-                   etags                        ; user's path
-                   xemacs -> xemacs-<version>   ;
-                   xemacs                       ;
-    /usr/local/lib/xemacs/site-lisp
-    /usr/local/lib/xemacs/lock
-    /usr/local/lib/xemacs-<version>/etc         ; architecture ind. files
-    /usr/local/lib/xemacs-<version>/info
-    /usr/local/lib/xemacs-<version>/lisp
-    /usr/local/lib/xemacs-<version>/<configuration>  ; binaries emacs may run
-
-
-*** X Resources
----------------
-
-(Note: This section is copied verbatim from the XEmacs Reference Manual.)
-
-   The Emacs resources are generally set per-frame. Each Emacs frame
-can have its own name or the same name as another, depending on the
-name passed to the `make-frame' function.
-
-   You can specify resources for all frames with the syntax:
-
-     Emacs*parameter: value
-
-or
-
-     Emacs*EmacsFrame.parameter:value
-
-You can specify resources for a particular frame with the syntax:
-
-     Emacs*FRAME-NAME.parameter: value
-
-
-**** Geometry Resources
------------------------
-
-   To make the default size of all Emacs frames be 80 columns by 55
-lines, do this:
-
-     Emacs*EmacsFrame.geometry: 80x55
-
-To set the geometry of a particular frame named `fred', do this:
-
-     Emacs*fred.geometry: 80x55
-
-Important! Do not use the following syntax:
-
-     Emacs*geometry: 80x55
-
-You should never use `*geometry' with any X application. It does not
-say "make the geometry of Emacs be 80 columns by 55 lines."  It really
-says, "make Emacs and all subwindows thereof be 80x55 in whatever units
-they care to measure in."  In particular, that is both telling the
-Emacs text pane to be 80x55 in characters, and telling the menubar pane
-to be 80x55 pixels, which is surely not what you want.
-
-   As a special case, this geometry specification also works (and sets
-the default size of all Emacs frames to 80 columns by 55 lines):
-
-     Emacs.geometry: 80x55
-
-since that is the syntax used with most other applications (since most
-other applications have only one top-level window, unlike Emacs).  In
-general, however, the top-level shell (the unmapped ApplicationShell
-widget named `Emacs' that is the parent of the shell widgets that
-actually manage the individual frames) does not have any interesting
-resources on it, and you should set the resources on the frames instead.
-
-   The `-geometry' command-line argument sets only the geometry of the
-initial frame created by Emacs.
-
-   A more complete explanation of geometry-handling is
-
-   * The `-geometry' command-line option sets the `Emacs.geometry'
-     resource, that is, the geometry of the ApplicationShell.
-
-   * For the first frame created, the size of the frame is taken from
-     the ApplicationShell if it is specified, otherwise from the
-     geometry of the frame.
-
-   * For subsequent frames, the order is reversed: First the frame, and
-     then the ApplicationShell.
-
-   * For the first frame created, the position of the frame is taken
-     from the ApplicationShell (`Emacs.geometry') if it is specified,
-     otherwise from the geometry of the frame.
-
-   * For subsequent frames, the position is taken only from the frame,
-     and never from the ApplicationShell.
-
-   This is rather complicated, but it does seem to provide the most
-intuitive behavior with respect to the default sizes and positions of
-frames created in various ways.
-
-
-**** Iconic Resources
----------------------
-
-   Analogous to `-geometry', the `-iconic' command-line option sets the
-iconic flag of the ApplicationShell (`Emacs.iconic') and always applies
-to the first frame created regardless of its name.  However, it is
-possible to set the iconic flag on particular frames (by name) by using
-the `Emacs*FRAME-NAME.iconic' resource.
-
-
-**** Resource List
-------------------
-
-   Emacs frames accept the following resources:
-
-`geometry' (class `Geometry'): string
-     Initial geometry for the frame.  *Note Geometry Resources:: for a
-     complete discussion of how this works.
-
-`iconic' (class `Iconic'): boolean
-     Whether this frame should appear in the iconified state.
-
-`internalBorderWidth' (class `InternalBorderWidth'): int
-     How many blank pixels to leave between the text and the edge of the
-     window.
-
-`interline' (class `Interline'): int
-     How many pixels to leave between each line (may not be
-     implemented).
-
-`menubar' (class `Menubar'): boolean
-     Whether newly-created frames should initially have a menubar.  Set
-     to true by default.
-
-`initiallyUnmapped' (class `InitiallyUnmapped'): boolean
-     Whether XEmacs should leave the initial frame unmapped when it
-     starts up.  This is useful if you are starting XEmacs as a server
-     (e.g. in conjunction with gnuserv or the external client widget).
-     You can also control this with the `-unmapped' command-line option.
-
-`barCursor' (class `BarColor'): boolean
-     Whether the cursor should be displayed as a bar, or the
-     traditional box.
-
-`textPointer' (class `Cursor'): cursor-name
-     The cursor to use when the mouse is over text.  This resource is
-     used to initialize the variable `x-pointer-shape'.
-
-`selectionPointer' (class `Cursor'): cursor-name
-     The cursor to use when the mouse is over a selectable text region
-     (an extent with the `highlight' property; for example, an Info
-     cross-reference).  This resource is used to initialize the variable
-     `x-selection-pointer-shape'.
-
-`spacePointer' (class `Cursor'): cursor-name
-     The cursor to use when the mouse is over a blank space in a buffer
-     (that is, after the end of a line or after the end-of-file).  This
-     resource is used to initialize the variable
-     `x-nontext-pointer-shape'.
-
-`modeLinePointer' (class `Cursor'): cursor-name
-     The cursor to use when the mouse is over a mode line.  This
-     resource is used to initialize the variable `x-mode-pointer-shape'.
-
-`gcPointer' (class `Cursor'): cursor-name
-     The cursor to display when a garbage-collection is in progress.
-     This resource is used to initialize the variable
-     `x-gc-pointer-shape'.
-
-`scrollbarPointer' (class `Cursor'): cursor-name
-     The cursor to use when the mouse is over the scrollbar.  This
-     resource is used to initialize the variable
-     `x-scrollbar-pointer-shape'.
-
-`pointerColor' (class `Foreground'): color-name
-`pointerBackground' (class `Background'): color-name
-     The foreground and background colors of the mouse cursor.  These
-     resources are used to initialize the variables
-     `x-pointer-foreground-color' and `x-pointer-background-color'.
-
-`scrollBarWidth' (class `ScrollBarWidth'): integer
-     How wide the vertical scrollbars should be, in pixels; 0 means no
-     vertical scrollbars.  You can also use a resource specification of
-     the form `*scrollbar.width', or the usual toolkit scrollbar
-     resources: `*XmScrollBar.width' (Motif), `*XlwScrollBar.width'
-     (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
-     that you use the toolkit resources, though, because they're
-     dependent on how exactly your particular build of XEmacs was
-     configured.
-
-`scrollBarHeight' (class `ScrollBarHeight'): integer
-     How high the horizontal scrollbars should be, in pixels; 0 means no
-     horizontal scrollbars.  You can also use a resource specification
-     of the form `*scrollbar.height', or the usual toolkit scrollbar
-     resources: `*XmScrollBar.height' (Motif), `*XlwScrollBar.height'
-     (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
-     that you use the toolkit resources, though, because they're
-     dependent on how exactly your particular build of XEmacs was
-     configured.
-
-`scrollBarPlacement' (class `ScrollBarPlacement'): string
-     Where the horizontal and vertical scrollbars should be positioned.
-     This should be one of the four strings `bottom-left',
-     `bottom-right', `top-left', and `top-right'.  Default is
-     `bottom-right' for the Motif and Lucid scrollbars and
-     `bottom-left' for the Athena scrollbars.
-
-`topToolBarHeight' (class `TopToolBarHeight'): integer
-`bottomToolBarHeight' (class `BottomToolBarHeight'): integer
-`leftToolBarWidth' (class `LeftToolBarWidth'): integer
-`rightToolBarWidth' (class `RightToolBarWidth'): integer
-     Height and width of the four possible toolbars.
-
-`topToolBarShadowColor' (class `TopToolBarShadowColor'): color-name
-`bottomToolBarShadowColor' (class `BottomToolBarShadowColor'): color-name
-     Color of the top and bottom shadows for the toolbars.  NOTE: These
-     resources do *not* have anything to do with the top and bottom
-     toolbars (i.e. the toolbars at the top and bottom of the frame)!
-     Rather, they affect the top and bottom shadows around the edges of
-     all four kinds of toolbars.
-
-`topToolBarShadowPixmap' (class `TopToolBarShadowPixmap'): pixmap-name
-`bottomToolBarShadowPixmap' (class `BottomToolBarShadowPixmap'): pixmap-name
-     Pixmap of the top and bottom shadows for the toolbars.  If set,
-     these resources override the corresponding color resources. NOTE:
-     These resources do *not* have anything to do with the top and
-     bottom toolbars (i.e. the toolbars at the top and bottom of the
-     frame)!  Rather, they affect the top and bottom shadows around the
-     edges of all four kinds of toolbars.
-
-`toolBarShadowThickness' (class `ToolBarShadowThickness'): integer
-     Thickness of the shadows around the toolbars, in pixels.
-
-`visualBell' (class `VisualBell'): boolean
-     Whether XEmacs should flash the screen rather than making an
-     audible beep.
-
-`bellVolume' (class `BellVolume'): integer
-     Volume of the audible beep.
-
-`useBackingStore' (class `UseBackingStore'): boolean
-     Whether XEmacs should set the backing-store attribute of the X
-     windows it creates.  This increases the memory usage of the X
-     server but decreases the amount of X traffic necessary to update
-     the screen, and is useful when the connection to the X server goes
-     over a low-bandwidth line such as a modem connection.
-
-
-**** Face Resources
--------------------
-
-   The attributes of faces are also per-frame. They can be specified as:
-
-     Emacs.FACE_NAME.parameter: value
-
-     (*do not* use `Emacs*FACE_NAME...')
-
-or
-
-     Emacs*FRAME_NAME.FACE_NAME.parameter: value
-
-Faces accept the following resources:
-
-`attributeFont' (class `AttributeFont'): font-name
-     The font of this face.
-
-`attributeForeground' (class `AttributeForeground'): color-name
-`attributeBackground' (class `AttributeBackground'): color-name
-     The foreground and background colors of this face.
-
-`attributeBackgroundPixmap' (class `AttributeBackgroundPixmap'): file-name
-     The name of an XBM file (or XPM file, if your version of Emacs
-     supports XPM), to use as a background stipple.
-
-`attributeUnderline' (class `AttributeUnderline'): boolean
-     Whether text in this face should be underlined.
-
-   All text is displayed in some face, defaulting to the face named
-`default'.  To set the font of normal text, use
-`Emacs*default.attributeFont'. To set it in the frame named `fred', use
-`Emacs*fred.default.attributeFont'.
-
-   These are the names of the predefined faces:
-
-`default'
-     Everything inherits from this.
-
-`bold'
-     If this is not specified in the resource database, Emacs tries to
-     find a bold version of the font of the default face.
-
-`italic'
-     If this is not specified in the resource database, Emacs tries to
-     find an italic version of the font of the default face.
-
-`bold-italic'
-     If this is not specified in the resource database, Emacs tries to
-     find a bold-italic version of the font of the default face.
-
-`modeline'
-     This is the face that the modeline is displayed in.  If not
-     specified in the resource database, it is determined from the
-     default face by reversing the foreground and background colors.
-
-`highlight'
-     This is the face that highlighted extents (for example, Info
-     cross-references and possible completions, when the mouse passes
-     over them) are displayed in.
-
-`left-margin'
-`right-margin'
-     These are the faces that the left and right annotation margins are
-     displayed in.
-
-`zmacs-region'
-     This is the face that mouse selections are displayed in.
-
-`text-cursor'
-     This is the face that the cursor is displayed in.
-
-`isearch'
-     This is the face that the matched text being searched for is
-     displayed in.
-
-`info-node'
-     This is the face of info menu items.  If unspecified, it is copied
-     from `bold-italic'.
-
-`info-xref'
-     This is the face of info cross-references.  If unspecified, it is
-     copied from `bold'. (Note that, when the mouse passes over a
-     cross-reference, the cross-reference's face is determined from a
-     combination of the `info-xref' and `highlight' faces.)
-
-   Other packages might define their own faces; to see a list of all
-faces, use any of the interactive face-manipulation commands such as
-`set-face-font' and type `?' when you are prompted for the name of a
-face.
-
-   If the `bold', `italic', and `bold-italic' faces are not specified
-in the resource database, then XEmacs attempts to derive them from the
-font of the default face.  It can only succeed at this if you have
-specified the default font using the XLFD (X Logical Font Description)
-format, which looks like
-
-     *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
-
-If you use any of the other, less strict font name formats, some of
-which look like
-
-     lucidasanstypewriter-12
-     fixed
-     9x13
-
-   then XEmacs won't be able to guess the names of the bold and italic
-versions.  All X fonts can be referred to via XLFD-style names, so you
-should use those forms.  See the man pages for `X(1)', `xlsfonts(1)',
-and `xfontsel(1)'.
-
-
-**** Widgets
-------------
-
-   There are several structural widgets between the terminal EmacsFrame
-widget and the top level ApplicationShell; the exact names and types of
-these widgets change from release to release (for example, they changed
-in 19.9, 19.10, 19.12, and 19.13) and are subject to further change in
-the future, so you should avoid mentioning them in your resource database.
-The above-mentioned syntaxes should be forward-compatible.  As of 19.14,
-the exact widget hierarchy is as follows:
-
-    INVOCATION-NAME           "shell"              "container"     FRAME-NAME
-    x-emacs-application-class "TopLevelEmacsShell" "EmacsManager" "EmacsFrame"
-
-(for normal frames)
-
-or
-
-    INVOCATION-NAME           "shell"               "container"     FRAME-NAME
-    x-emacs-application-class "TransientEmacsShell" "EmacsManager" "EmacsFrame"
-
-(for popup/dialog-box frames)
-
-where INVOCATION-NAME is the terminal component of the name of the
-XEmacs executable (usually `xemacs'), and `x-emacs-application-class'
-is generally `Emacs'.
-
-
-**** Menubar Resources
-----------------------
-
-   As the menubar is implemented as a widget which is not a part of
-XEmacs proper, it does not use the face mechanism for specifying fonts
-and colors: It uses whatever resources are appropriate to the type of
-widget which is used to implement it.
-
-   If Emacs was compiled to use only the Motif-lookalike menu widgets,
-then one way to specify the font of the menubar would be
-
-     Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
-
-   If the Motif library is being used, then one would have to use
-
-     Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
-
-   because the Motif library uses the `fontList' resource name instead
-of `font', which has subtly different semantics.
-
-   The same is true of the scrollbars: They accept whichever resources
-are appropriate for the toolkit in use.
-
-
-*** Source Code Highlighting
-----------------------------
-
-It's possible to have your buffers "decorated" with fonts or colors
-indicating syntactic structures (such as strings, comments, function names,
-"reserved words", etc.).  In XEmacs, the preferred way to do this is with
-font-lock-mode; activate it by adding the following code to your .emacs file:
-
-        (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
-        (add-hook 'c-mode-hook          'turn-on-font-lock)
-        (add-hook 'c++-mode-hook        'turn-on-font-lock)
-        (add-hook 'dired-mode-hook      'turn-on-font-lock)
-        ...etc...
-
-To customize it, see the descriptions of the function `font-lock-mode' and
-the variables `font-lock-keywords', `c-font-lock-keywords', etc.
-
-There exist several other source code highlighting packages, but font-lock
-does one thing that most others don't do: highlights as you type new text;
-and one thing that no others do: bases part of its decoration on the
-syntax table of the major mode.  Font-lock has C-level support to do this
-efficiently, so it should also be significantly faster than the others.
-
-If there's something that another highlighting package does that you can't
-make font-lock do, let us know.  We would prefer to consolidate all of the
-desired functionality into one package rather than ship several different
-packages which do essentially the same thing in different ways.
-
-
-** Differences Between XEmacs and Emacs 18
-==========================================
-
-Auto-configure support has been added, so it should be fairly easy to compile
-XEmacs on different systems.  If you have any problems or feedback about
-compiling on your system, please let us know.
-
-We have reimplemented the basic input model in a more general way; instead of
-X input being a special-case of the normal ASCII input stream, XEmacs has a
-concept of "input events", and ASCII characters are a subset of that.  The
-events that XEmacs knows about are not X events, but are a generalization of
-them, so that XEmacs can eventually be ported to different window systems.
-
-We have reimplemented keymaps so that sequences of events can be stored into
-them instead of just ASCII codes; it is possible to, for example, bind
-different commands to each of the chords Control-h, Control-H, Backspace,
-Control-Backspace, and Super-Shift-Backspace.  Key bindings, function key
-bindings, and mouse bindings live in the same keymaps.
-
-Input and display of all ISO-8859-1 characters is supported.
-
-You can have multiple X windows ("frames" in XEmacs terminology).
-
-XEmacs has objects called "extents" and "faces", which are roughly
-analogous to Epoch's "buttons," "zones," and "styles."  An extent is a
-region of text (a start position and an end position) and a face is a
-collection of textual attributes like fonts and colors.  Every extent
-is displayed in some "face", so changing the properties of a face
-immediately updates the display of all associated extents.  Faces can
-be frame-local: you can have a region of text which displays with
-completely different attributes when its buffer is viewed from a
-different X window.
-
-The display attributes of faces may be specified either in lisp or through
-the X resource manager.
-
-Pixmaps of arbitrary size can be embedded in a buffer.
-
-Variable width fonts work.
-
-The height of a line is the height of the tallest font on that line, instead
-of all lines having the same height.
-
-XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
-makes it be a more well-behaved X citizen (and also improves
-portability).  A result of this is that it is possible to include
-other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
-standard Xt command-line arguments.
-
-XEmacs understands the X11 "Selection" mechanism; it's possible to define
-and customize selection converter functions and new selection types from 
-Emacs Lisp, without having to recompile XEmacs.
-
-XEmacs provides support for ToolTalk on systems that have it.
-
-XEmacs supports the Zmacs/Lispm style of region highlighting, where the
-region between the point and mark is highlighted when in its "active" state.
-
-XEmacs has a menubar, whose contents are customizable from emacs-lisp.
-This menubar looks Motif-ish, but does not require Motif.  If you already
-own Motif, however, you can configure XEmacs to use a *real* Motif menubar
-instead.
-
-XEmacs can ask questions using popup dialog boxes.  Any command executed from
-a menu will ask yes/no questions with dialog boxes, while commands executed
-via the keyboard will use the minibuffer.
-
-XEmacs has vertical and horizontal scrollbars.
-
-The initial load-path is computed at run-time, instead of at compile-time.
-This means that if you move the XEmacs executable and associated directories
-to somewhere else, you don't have to recompile anything.
-
-You can specify what the title of the XEmacs windows and icons should be
-with the variables `frame-title-format' and `frame-icon-title-format',
-which have the same syntax as `mode-line-format'.
-
-XEmacs now supports floating-point numbers.
-
-XEmacs now knows about timers directly, instead of them being simulated by
-a subprocess.
-
-XEmacs understands truenames, and can be configured to notice when you are
-visiting two names of the same file.  See the variables find-file-use-truenames
-and find-file-compare-truenames.
-
-If you're running on a machine with audio hardware, you can specify sound 
-files for XEmacs to play instead of the default X beep.  See the documentation
-of the function load-sound-file and the variable sound-alist.
-
-An XEmacs frame can be placed within an "external client widget" managed by
-another application.  This allows an application to use an XEmacs frame as its
-text pane rather than the standard Text widget that is provided with Motif or
-Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
-applications, and raw Xlib applications.
-
-Random changes to the emacs-lisp library: (some of this was not written by
-us, but is included because it's free software and we think it's good stuff)
-
-  - there is a new optimizing byte-compiler
-  - there is a new abbrev-based mail-alias mechanism
-  - the -*- line can contain local-variable settings
-  - there is a new TAGS package
-  - there is a new VI-emulation mode (viper)
-  - there is a new implementation of Dired
-  - there is a new implementation of Isearch
-  - the VM package for reading mail is provided
-  - the W3 package for browsing the World Wide Web hypertext information
-    system is provided
-  - the Hyperbole package, a programmable information management and
-    hypertext system
-  - the OO-Browser package, a multi-language object-oriented browser
-
-There are many more specifics in the "Miscellaneous Changes" section, below.
-
-The online Emacs Manual and Emacs-Lisp Manual are now both relatively
-up-to-date.
-
 * XEmacs Release Notes
 ======================
 
@@ -1201,41 +103,6 @@
 
 ** Major Differences between 20.0 and 20.1
 
-Many packages have been add and upgraded.
-
--- Gnus-5.4.17  Courtesy of Lars Magne Ingebrigtsen
--- mic-paren.el-1.3.1  Courtesy of Mikael Sjödin
--- hyperbole-4.022 Courtesy of Bob Weiner
--- W3-3.0.62 Courtesy of William Perry
--- AUCTeX-9.7k Courtesy of Per Abrahamsen
--- hm--html-menus-5.3 Courtesy of Heiko Muenkel
--- custom-1.46 Courtesy of Per Abrahamsen
--- python-mode.el-2.90 Courtesy of Barry Warsaw
--- balloon-help-1.04 Courtesy of Kyle Jones
--- xrdb-mode.el-1.21 Courtesy of Barry Warsaw
--- igrep.el-2.56 Courtesy of Kevin Rodgers
--- frame-icon.el Courtesy of Michael Lamoureux and Bob Weiner
--- itimer.el-1.01 Courtesy of Kyle Jones
--- redo.el-1.01 Courtesy of Kyle Jones
--- VM-6.15 Courtesy of Kyle Jones
--- OO-Browser-2.10 Courtesy of Bob Weiner
--- viper-2.93 Courtesy of Michael Kifer
--- ediff-2.64 Courtesy of Michael Kifer
--- edmacro.el-3.05 Courtesy of Dave Gillespie, port to XEmacs by
-   Hrvoje Niksic.
--- detached-minibuf.el Courtesy of Alvin Shelton
--- whitespace-mode.el Courtesy of Heiko Muenkel
--- winmgr-mode.el Courtesy of David Konerding, Stefan Strobel & Barry Warsaw
--- mine.el-1.17 Courtesy of Jacques Duthen
--- fast-lock.el-3.11.01 Courtesy of Simon Marshall
--- lazy-lock.el-1.16 Courtesy of Simon Marshall
--- browse-cltl2.el-1.1 Courtesy of Holger Schauer
--- eldoc.el-1.8 Courtesy of Noah Friedman
--- tm-7.105 Courtesy of MORIOKA Tomohiko
--- efs-1.15 courtesy of Andy Norman and Michael Sperber
--- verilog-mode.el Courtesy of Michael McNamara & Adrian Aichner
--- overlay.el Courtesy of Joseph Nuspl
-
 *** User Interface changes.
 
 The keysyms mouse-1, mouse-2, mouse-3 and down-mouse-1, down-mouse-2,
@@ -1248,6 +115,265 @@
 The logo has been changed, and the default background color is now
 shade of gray instead of white.
 
+Many packages have been add and upgraded.
+
+-- Gnus-5.4.43  Courtesy of Lars Magne Ingebrigtsen
+
+*** Gnus changes.
+
+**** nntp.el has been totally rewritten in an asynchronous fashion.
+
+**** Article prefetching functionality has been moved up into 
+Gnus.  
+
+**** Scoring can now be performed with logical operators like 
+`and', `or', `not', and parent redirection.
+
+*** Article washing status can be displayed in the
+article mode line.
+
+**** gnus.el has been split into many smaller files.
+
+**** Suppression of duplicate articles based on Message-ID.
+
+(setq gnus-suppress-duplicates t)
+
+**** New variables for specifying what score and adapt files
+are to be considered home score and adapt files.  See
+`gnus-home-score-file' and `gnus-home-adapt-files'.
+
+**** Groups can inherit group parameters from parent topics.
+
+**** Article editing has been revamped and is now usable.
+
+**** Signatures can be recognized in more intelligent fashions.
+See `gnus-signature-separator' and `gnus-signature-limit'.
+
+**** Summary pick mode has been made to look more nn-like.
+Line numbers are displayed and the `.' command can be
+used to pick articles.
+
+**** Commands for moving the .newsrc.eld from one server to
+another have been added.
+
+    `M-x gnus-change-server'
+
+**** A way to specify that "uninteresting" fields be suppressed when
+generating lines in buffers.
+
+**** Several commands in the group buffer can be undone with
+`M-C-_'.
+
+**** Scoring can be done on words using the new score type `w'.
+
+**** Adaptive scoring can be done on a Subject word-by-word basis:
+
+    (setq gnus-use-adaptive-scoring '(word))
+
+**** Scores can be decayed.
+ 
+    (setq gnus-decay-scores t)
+
+**** Scoring can be performed using a regexp on the Date header.  The
+Date is normalized to compact ISO 8601 format first.
+
+**** A new command has been added to remove all data on articles from
+the native server.
+
+   `M-x gnus-group-clear-data-on-native-groups'
+
+**** A new command for reading collections of documents
+(nndoc with nnvirtual on top) has been added -- `M-C-d'.
+
+**** Process mark sets can be pushed and popped.
+
+**** A new mail-to-news backend makes it possible to post
+even when the NNTP server doesn't allow posting.
+
+**** A new backend for reading searches from Web search engines
+(DejaNews, Alta Vista, InReference) has been added.
+
+    Use the `G w' command in the group buffer to create such
+    a group.
+
+**** Groups inside topics can now be sorted using the standard
+sorting functions, and each topic can be sorted independently.
+
+    See the commands under the `T S' submap.
+
+**** Subsets of the groups can be sorted independently.
+
+    See the commands under the `G P' submap.
+
+**** Cached articles can be pulled into the groups.
+  
+    Use the `Y c' command.
+
+**** Score files are now applied in a more reliable order.
+
+**** Reports on where mail messages end up can be generated.
+
+    `M-x nnmail-split-history'
+
+**** More hooks and functions have been added to remove junk
+from incoming mail before saving the mail.
+ 
+    See `nnmail-prepare-incoming-header-hook'.
+
+**** The nnml mail backend now understands compressed article files.
+
+-- custom-1.82 Courtesy of Per Abrahamsen
+
+The Customize library enables Emacs Lisp programmers to specify types
+of their variables, so that the users can customize them.  For
+example, the old declaration
+
+(defvar foo-blurgoze nil
+  "*non-nil means that foo will act very blurgozely.")
+
+now becomes:
+
+(defcustom foo-blurgoze nil
+  "*non-nil means that foo will act very blurgozely."
+  :type 'boolean)
+
+Now the user can type `M-x customize RET foo-blurgoze RET' to
+customize the variable.  Other, more complex data structures can be
+represented and customized too, e.g.
+
+(defcustom foo-hairy-alist '((somekey . "somestring")
+                             (otherkey . (foo-doit))
+                             (thirdkey . [1 2 3]))
+"*Alist describing the hairy options of foo package.
+The CAR of each element is a symbol, whereas the CDR can be either a
+string, a form to evaluate, or a vector of integers."
+  :type '(repeat (cons (symbol :tag "Key")
+                       (choice string
+                               (vector (repeat :inline t integer))
+                               sexp))))
+
+The user will be able to add and remove the entries to the list, as
+well as save the settings to his/her `.emacs'.
+
+The Customize now has its submenu at the top of the Options menu, and
+is the preferred way to change XEmacs settings.  Tens of packages have
+been converted to take advantage of the Customize features, including:
+Gnus, Message, Supercite, Psgml, Comint, Calendar, W3, cc-mode (and
+many other programming language modes), ispell.el, ps-print.el,
+id-select.el, most of the programming language modes, and many many
+more.
+
+been converted to use the Customize features.
+
+-- mic-paren.el-1.3.1  Courtesy of Mikael Sjödin
+-- hyperbole-4.022 Courtesy of Bob Weiner
+
+-- W3-3.0.80 Courtesy of William Perry
+
+Version 3 of Emacs/W3, the Emacs World Wide Web browser, has been
+included.  It is much faster than any of the previous versions, and
+contains numerous other features.
+
+-- AUCTeX-9.7k Courtesy of Per Abrahamsen
+
+   AUC TeX is a comprehensive customizable integrated environment for
+writing input files for LaTeX using GNU Emacs.
+
+   AUC TeX lets you run TeX/LaTeX and other LaTeX-related tools, such
+as a output filters or post processor from inside Emacs.  Especially
+`running LaTeX' is interesting, as AUC TeX lets you browse through the
+errors TeX reported, while it moves the cursor directly to the reported
+error, and displays some documentation for that particular error.  This
+will even work when the document is spread over several files.
+
+   AUC TeX automatically indents your `LaTeX-source', not only as you
+write it -- you can also let it indent and format an entire document.
+It has a special outline feature, which can greatly help you `getting an
+overview' of a document.
+
+   Apart from these special features, AUC TeX provides an large range of
+handy Emacs macros, which in several different ways can help you write
+your LaTeX documents fast and painless.
+
+-- hm--html-menus-5.3 Courtesy of Heiko Muenkel
+-- python-mode.el-2.90 Courtesy of Barry Warsaw
+-- balloon-help-1.04 Courtesy of Kyle Jones
+-- xrdb-mode.el-1.21 Courtesy of Barry Warsaw
+-- igrep.el-2.56 Courtesy of Kevin Rodgers
+-- frame-icon.el Courtesy of Michael Lamoureux and Bob Weiner
+-- itimer.el-1.01 Courtesy of Kyle Jones
+
+-- redo.el-1.01 Courtesy of Kyle Jones
+
+redo.el is a package that implements true redo mechanism in XEmacs
+buffers.  You can bind the `redo' command to a convenient key to use
+it.
+
+Emacs' normal undo system allows you to undo an arbitrary
+number of buffer changes.  These undos are recorded as ordinary
+buffer changes themselves.  So when you break the chain of
+undos by issuing some other command, you can then undo all
+the undos.  The chain of recorded buffer modifications
+therefore grows without bound, truncated only at garbage
+collection time.
+
+The redo/undo system is different in two ways:
+  1. The undo/redo command chain is only broken by a buffer
+     modification.  You can move around the buffer or switch
+     buffers and still come back and do more undos or redos.
+  2. The `redo' command rescinds the most recent undo without
+     recording the change as a _new_ buffer change.  It
+     completely reverses the effect of the undo, which
+     includes making the chain of buffer modification records
+     shorter by one, to counteract the effect of the undo
+     command making the record list longer by one.
+
+-- VM-6.15 Courtesy of Kyle Jones
+-- OO-Browser-2.10 Courtesy of Bob Weiner
+-- viper-2.93 Courtesy of Michael Kifer
+-- ediff-2.64 Courtesy of Michael Kifer
+
+-- edmacro.el-3.05 Courtesy of Dave Gillespie, port to XEmacs by
+   Hrvoje Niksic.
+
+Edmacro is a utility that provides easy editing of keyboard macros.
+Press `C-x C-k' to invoke the `edit-kbd-macro' command that lets you
+edit and define new keyboard macros.  You can also edit the last 100
+keystrokes and insert them into a macro to be bound to a key.  The
+macros can be conveniently dumped to `.emacs' file.
+
+The `read-kbd-macro' function is now available in XEmacs.  The short
+form `kbd' that evaluates at compile-time can be used instead.
+
+-- detached-minibuf.el Courtesy of Alvin Shelton
+-- whitespace-mode.el Courtesy of Heiko Muenkel
+-- winmgr-mode.el Courtesy of David Konerding, Stefan Strobel & Barry Warsaw
+
+-- xmine.el-1.4 Courtesy of Jens Lautenbacher
+
+XEmacs now includes a minesweeper game with a full-featured graphics
+and mouse interface.  Invoke with `M-x xmine'.
+
+-- fast-lock.el-3.11.01 Courtesy of Simon Marshall
+-- lazy-lock.el-1.16 Courtesy of Simon Marshall
+-- browse-cltl2.el-1.1 Courtesy of Holger Schauer
+-- eldoc.el-1.8 Courtesy of Noah Friedman
+-- tm-7.105 Courtesy of MORIOKA Tomohiko
+
+-- efs-1.15 courtesy of Andy Norman and Michael Sperber
+
+EFS is now integrated with XEmacs, and replaces the old ange-ftp.  It
+has many more features, including info documentation, support for many
+different FTP servers, and integration with dired.
+
+-- verilog-mode.el Courtesy of Michael McNamara & Adrian Aichner
+
+-- overlay.el Courtesy of Joseph Nuspl
+
+The overlay support in XEmacs is now functional.  Overlays are
+implemented on top of native extents, and can be used as a GNU
+Emacs-compatible way of changing display properties.
+
 *** Other changes
 
 First alpha level support of MS Windows NT is available courtesy of
@@ -3121,3 +2247,1101 @@
                 insertion hook is used to fontify text as you type it in.
 
 shell-font.el:  Displays your shell-buffer prompt in boldface.
+
+* The History of XEmacs
+=======================
+
+This product is an extension of GNU Emacs, previously known to some as
+"Lucid Emacs" or "ERA".  It was initially based on an early version of Emacs
+Version 19 from the Free Software Foundation and has since been kept
+up-to-date with recent versions of that product.  It stems from a
+collaboration of Lucid, Inc. with SunSoft DevPro (a division of Sun
+Microsystems, Inc.; formerly called SunPro) and the University of Illinois.
+
+NOTE: Lucid, Inc. is currently out of business but development on XEmacs
+continues strong.  Recently, Amdahl Corporation and INS Engineering have
+both contributed significantly to the development of XEmacs.
+
+
+* What's Different?
+===================
+
+
+** Differences between XEmacs and GNU Emacs 19
+==================================================
+In XEmacs 20, characters are first-class objects.  Characters can be
+converted to integers, but are not integers.  FSF 19, XEmacs 19, and Mule
+represent them as integers.
+
+In XEmacs, events are first-class objects.  FSF 19 represents them as
+integers, which obscures the differences between a key gesture and the
+ancient ASCII code used to represent a particular overlapping subset of them.
+
+In XEmacs, keymaps are first-class opaque objects.  FSF 19 represents them as
+complicated combinations of association lists and vectors.  If you use the
+advertised functional interface to manipulation of keymaps, the same code
+will work in XEmacs, Emacs 18, and GNU Emacs 19; if your code depends
+on the underlying implementation of keymaps, it will not.
+
+XEmacs uses "extents" to represent all non-textual aspects of buffers;
+FSF 19 uses two distinct objects, "text properties" and "overlays",
+which divide up the functionality between them.  Extents are a
+superset of the functionality of the two FSF data types.  The full FSF
+19 interface to text properties is supported in XEmacs (with extents
+being the underlying representation).
+
+Extents can be made to be copied into strings, and thus restored by kill
+and yank.  Thus, one can specify this behavior on either "extents" or
+"text properties", whereas in FSF 19 text properties always have this
+behavior and overlays never do.
+
+Many more packages are provided standard with XEmacs than with FSF 19.
+
+Pixmaps of arbitrary size can be embedded in a buffer.
+
+Variable width fonts work.
+
+The height of a line is the height of the tallest font on that line, instead
+of all lines having the same height.
+
+XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
+makes it be a more well-behaved X citizen (and also improves
+portability).  A result of this is that it is possible to include
+other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
+standard Xt command-line arguments.
+
+XEmacs provides support for ToolTalk on systems that have it.
+
+XEmacs can ask questions using popup dialog boxes.  Any command executed from
+a menu will ask yes/no questions with dialog boxes, while commands executed
+via the keyboard will use the minibuffer.
+
+XEmacs has a built-in toolbar.  Four toolbars can actually be configured:
+top, bottom, left, and right toolbars.
+
+XEmacs has vertical and horizontal scrollbars.  Unlike in FSF 19 (which
+provides a primitive form of vertical scrollbar), these are true toolkit
+scrollbars.  A look-alike Motif scrollbar is provided for those who
+don't have Motif. (Even for those who do, the look-alike may be preferable
+as it is faster.)
+
+If you're running on a machine with audio hardware, you can specify sound 
+files for XEmacs to play instead of the default X beep.  See the documentation
+of the function load-sound-file and the variable sound-alist.
+
+An XEmacs frame can be placed within an "external client widget" managed by
+another application.  This allows an application to use an XEmacs frame as its
+text pane rather than the standard Text widget that is provided with Motif or
+Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
+applications, and raw Xlib applications.
+
+Here are some more specifics about the XEmacs implementation:
+
+*** The Input Model
+-------------------
+
+The fundamental unit of input is an "event" instead of a character.  An
+event is a new data type that contains several pieces of information.
+There are several kinds of event, and corresponding accessor and utility
+functions.  We tried to abstract them so that they would apply equally
+well to a number of window systems.
+
+NOTE: All timestamps are measured as milliseconds since Emacs started.
+
+ key_press_event	
+    event_channel	A token representing which keyboard generated it.
+			For this kind of event, this is a console object.
+    timestamp		When it happened
+    key			What keysym this is; a character or a symbol.
+			If it is a character, it will be a printing
+			ASCII character.
+    modifiers		Bucky-bits on that key: control, meta, etc.
+			For most keys, Shift is not a bit; that is implicit
+			in the keyboard layout.
+
+ button_press_event
+ button_release_event
+    event_channel	A token representing which mouse generated it.
+			For this kind of event, this is a frame object.
+    timestamp		When it happened
+    button		What button went down or up.
+    modifiers		Bucky-bits on that button: shift, control, meta, etc.
+    x, y		Where it was at the button-state-change (in pixels).
+
+ pointer_motion_event
+    event_channel	A token representing which mouse generated it.
+			For this kind of event, this is a frame object.
+    timestamp		When it happened
+    x, y		Where it was after it moved (in pixels).
+    modifiers		Bucky-bits down when the motion was detected.
+			(Possibly not all window systems will provide this?)
+
+ process_event
+    timestamp		When it happened
+    process		the emacs "process" object in question
+
+ timeout_event
+    timestamp		Now (really, when the timeout was signaled)
+    interval_id		The ID returned when the associated call to
+			add_timeout_cb() was made
+	------ the rest of the fields are filled in by Emacs -----
+    id_number		The Emacs timeout ID for this timeout (more
+			than one timeout event can have the same value
+			here, since Emacs timeouts, as opposed to
+			add_timeout_cb() timeouts, can resignal
+			themselves)
+    function		An elisp function to call when this timeout is
+			processed.
+    object		The object passed to that function.
+
+ eval_event
+    timestamp		When it happened
+    function		An elisp function to call with this event object.
+    object		Anything.
+			This kind of event is used internally; sometimes the
+			window system interface would like to inform emacs of
+			some user action (such as focusing on another frame)
+			but needs that to happen synchronously with the other
+			user input, like keypresses.  This is useful when
+			events are reported through callbacks rather
+			than in the standard event stream.
+
+ misc_user_event
+    timestamp		When it happened
+    function		An elisp function to call with this event object.
+    object		Anything.
+			This is similar to an eval_event, except that it is
+			generated by user actions: selections in the
+			menubar or scrollbar actions.  It is a "command"
+			event, like key and mouse presses (and unlike mouse
+			motion, process output, and enter and leave window
+			hooks).  In many ways, eval_events are not the same
+			as keypresses or misc_user_events.
+
+ magic_event
+			No user-serviceable parts within.  This is for things
+			like KeymapNotify and ExposeRegion events and so on
+			that emacs itself doesn't care about, but which it
+			must do something with for proper interaction with
+			the window system.
+
+			Magic_events are handled somewhat asynchronously, just
+			like subprocess filters.  However, occasionally a 
+			magic_event needs to be handled synchronously; in that
+			case, the asynchronous handling of the magic_event will
+			push an eval_event back onto the queue, which will be 
+			handled synchronously later.  This is one of the
+			reasons why eval_events exist; I'm not entirely happy
+			with this aspect of this event model.
+
+
+The function `next-event' blocks and returns one of the above-described 
+event objects.  The function `dispatch-event' takes an event and processes
+it in the appropriate way.
+
+For a process-event, dispatch-event calls the process's handler; for a
+mouse-motion event, the mouse-motion-handler hook is called, and so on.
+For magic-events, dispatch-event does window-system-dependent things,
+including calling some non-window-system-dependent hooks: map-frame-hook,
+unmap-frame-hook, mouse-enter-frame-hook, and mouse-leave-frame-hook.
+
+The function `next-command-event' calls `next-event' until it gets a key or
+button from the user (that is, not a process, motion, timeout, or magic
+event).  If it gets an event that is not a key or button, it calls
+`dispatch-event' on it immediately and reads another one.  The
+next-command-event function could be implemented in Emacs Lisp, though it
+isn't.  Generally one should call `next-command-event' instead of
+`next-event'.
+
+read-char calls next-command-event; if it doesn't get an event that can be
+converted to an ASCII character, it signals an error.  Otherwise it returns
+an integer.
+
+The variable `last-command-char' always contains an integer, or nil (if the
+last read event has no ASCII equivalent, as when it is a mouse-click or a
+non-ASCII character chord.)
+
+The new variable `last-command-event' holds an event object, that could be
+a non-ASCII character, a button click, a menu selection, etc.
+
+The variable `unread-command-char' no longer exists, and has been replaced
+by `unread-command-events'.  With the new event model, it is incorrect for
+code to do (setq unread-command-char (read-char)), because all user-input
+can't be represented as ASCII characters.  *** This is an incompatible 
+change.  Code which sets `unread-command-char' must be updated to use the
+combination of `next-command-event' and `unread-command-events' instead.
+
+The functions `this-command-keys' and `recent-keys' return a vector of
+event objects, instead of a string of ASCII characters.  *** This also
+is an incompatible change.
+
+Almost nothing happens at interrupt level; the SIGIO handler simply sets a
+flag, and later, the X event queue is scanned for KeyPress events which map
+to ^G.  All redisplay happens in the main thread of the process.
+
+
+*** Keymaps
+-----------
+
+Instead of keymaps being alists or obarrays, they are a new primary data
+type.  The only user access to the contents of a keymap is through the
+existing keymap-manipulation functions, and a new function, map-keymap.
+This means that existing code that manipulates keymaps may need to 
+be changed.
+
+One of our goals with the new input and keymap code was to make more
+character combinations available for binding, besides just ASCII and
+function keys.  We want to be able bind different commands to Control-a 
+and Control-Shift-a; we also want it to be possible for the keys Control-h
+and Backspace (and Control-M and Return, and Control-I and Tab, etc) to
+be distinct.
+
+One of the most common complaints that new Emacs users have is that backspace
+is help.  The answer is to play around with the keyboard-translate-table, or
+be lucky enough to have a system administrator who has done this for you
+already; but if it were possible to bind backspace and C-h to different
+things, then (under a window manager at least) both backspace and delete
+would delete a character, and ^H would be help.  There's no need to deal 
+with xmodmap, kbd-translate-table, etc.
+
+Here are some more examples: suppose you want to bind one function to Tab, 
+and another to Control-Tab.  This can't be done if Tab and Control-I are the
+same thing.  What about control keys that have no ASCII equivalent, like
+Control-< ?  One might want that to be bound to set-mark-at-point-min.  We
+want M-C-Backspace to be kill-backward-sexp.  But we want M-Backspace to be
+kill-backward-word.  Again, this can't be done if Backspace and C-h are
+indistinguishable.
+
+The user represents keys as a string of ASCII characters (when possible and
+convenient), or as a vector of event objects, or as a vector of "key 
+description lists", that looks like (control a), or (control meta delete) 
+or (shift f1).  The order of the modifier-names is not significant, so
+(meta control x) and (control meta x) are the same.
+
+`define-key' knows how to take any of the above representations and store them
+into a keymap.  When Emacs wants to return a key sequence (this-command-keys,
+recent-keys, keyboard-macros, and read-key-sequence, for example) it returns
+a vector of event objects.  Keyboard macros can also be represented as ASCII
+strings or as vectors of key description lists.  
+
+This is an incompatible change: code which calls `this-command-keys',
+`recent-keys', `read-key-sequence', or manipulates keyboard-macros probably
+needs to be changed so that it no longer assumes that the returned value is a
+string.
+
+Control-Shift-a is specified as (control A), not (control shift a), since A
+is a two-case character.  But for keys that don't have an upper case
+version, like F1, Backspace, and Escape, you use the (shift backspace) syntax.
+
+See the doc string for our version of define-key, reproduced below in the
+`Changed Functions' section.  Note that when the KEYS argument is a string,
+it has the same semantics as the v18 define-key.
+
+
+*** Xt Integration
+------------------
+
+The heart of the event loop is implemented in terms of the Xt event functions
+(specifically XtAppProcessEvent), and uses Xt's concept of timeouts and
+file-descriptor callbacks, eliminating a large amount of system-dependent code
+(Xt does it for you.)
+
+If Emacs is compiled with support for X, it uses the Xt event loop even when
+Emacs is not running on an X display (the Xt event loop supports this).  This
+makes it possible to run Emacs on a dumb TTY, and later connect it to one or
+more X servers.  It should also be possible to later connect an existing Emacs
+process to additional TTY's, although this code is still experimental.  (Our
+intent at this point is not to have an Emacs that is being used by multiple
+people at the same time: it is to make it possible for someone to go home, log
+in on a dialup line, and connect to the same Emacs process that is running
+under X in their office without having to recreate their buffer state and so
+on.)
+
+If Emacs is not compiled with support for X, then it instead uses more general
+code, something like what v18 does; but this way of doing things is a lot more
+modular.
+
+(Linking Emacs with Xt seems to only add about 300k to the executable size,
+compared with an Emacs linked with Xlib only.)
+
+
+*** Region Highlighting
+-----------------------
+
+If the variable `zmacs-regions' is true, then the region between point and
+mark will be highlighted when "active".  Those commands which push a mark
+(such as C-SPC, and C-x C-x) make the region become "active" and thus
+highlighted.  Most commands (all non-motion commands, basically) cause it to
+become non-highlighted (non-"active").  Commands that operate on the region
+(such as C-w, C-x C-l, etc.) only work if the region is in the highlighted
+state.
+
+zmacs-activate-region-hook and zmacs-deactivate-region-hook are run at the
+appropriate times; under X, zmacs-activate-region-hook makes the X selection
+be the region between point and mark, thus doing two things at once: making
+the region and the X selection be the same; and making the region highlight
+in the same way as the X selection.
+
+If `zmacs-regions' is true, then the `mark-marker' command returns nil unless
+the region is currently in the active (highlighted) state.  With an argument
+of t, this returns the mark (if there is one) regardless of the active-region
+state.  You should *generally* not use the mark unless the region is active,
+if the user has expressed a preference for the active-region model.  Watch
+out!  Moving this marker changes the mark position.  If you set the marker not
+to point anywhere, the buffer will have no mark.
+
+In this way, the primary selection is a fairly transitory entity; but
+when something is copied to the kill ring, it is made the Clipboard
+selection.  It is also stored into CUT_BUFFER0, for compatibility with
+X applications that don't understand selections (like Emacs18).
+
+Compatibility note: if you have code which uses (mark) or (mark-marker),
+then you need to either: change those calls to (mark t) or (mark-marker t);
+or simply bind `zmacs-regions' to nil around the call to mark or mark-marker.
+This is probably the best solution, since it will work in Emacs 18 as well.
+
+
+*** Menubars and Dialog Boxes
+-----------------------------
+
+Here is an example of a menubar definition:
+
+(defvar default-menubar
+  '(("File"     ["Open File..."         find-file               t]
+                ["Save Buffer"          save-buffer             t]
+                ["Save Buffer As..."    write-file              t]
+                ["Revert Buffer"        revert-buffer           t]
+                "-----"
+                ["Print Buffer"         lpr-buffer              t]
+                "-----"
+                ["Delete Frame"         delete-frame            t]
+                ["Kill Buffer..."       kill-buffer             t]
+                ["Exit Emacs"           save-buffers-kill-emacs t]
+                )
+    ("Edit"     ["Undo"                 advertised-undo         t]
+                ["Cut"                  kill-primary-selection  t]
+                ["Copy"                 copy-primary-selection  t]
+                ["Paste"                yank-clipboard-selection t]
+                ["Clear"                delete-primary-selection t]
+                )
+    ...))
+
+The first element of each menu item is the string to print on the menu.
+
+The second element is the callback function; if it is a symbol, it is
+invoked with `call-interactively.'  If it is a list, it is invoked with
+`eval'.  
+
+If the second element is a symbol, then the menu also displays the key that
+is bound to that command (if any).
+
+The third element of the menu items determines whether the item is selectable.
+It may be t, nil, or a form to evaluate.  Also, a hook is run just before a
+menu is exposed, which can be used to change the value of these slots. 
+For example, there is a hook that makes the "undo" menu item be selectable
+only in the cases when `advertised-undo' would not signal an error.  
+
+Menus may have other menus nested within them; they will cascade.
+
+There are utility functions for adding items to menus, deleting items,
+disabling them, etc.
+
+The function `popup-menu' takes a menu description and pops it up.  
+
+The function `popup-dialog-box' takes a dialog-box description and pops 
+it up.  Dialog box descriptions look a lot like menu descriptions.
+
+The menubar, menu, and dialog-box code is implemented as a library, 
+with an interface which hides the toolkit that implements it.  
+
+
+*** Isearch Changes
+-------------------
+
+Isearch has been reimplemented in a different way, adding some new features,
+and causing a few incompatible changes.
+
+ -  the old isearch-*-char variables are no longer supported.  In the old
+    system, one could make ^A mean "repeat the search" by doing something
+    like (setq search-repeat-char ?C-a).  In the new system, this is 
+    accomplished with 
+
+       (define-key isearch-mode-map "\C-a" 'isearch-repeat-forward)
+
+ -  The advantage of using the normal keymap mechanism for this is that you
+    can bind more than one key to an isearch command: for example, both C-a
+    and C-s could do the same thing inside isearch mode.  You can also bind
+    multi-key sequences inside of isearch mode, and bind non-ASCII keys.
+    For example, to use the F1 key to terminate a search:
+
+       (define-key isearch-mode-map 'f1 'isearch-exit)
+
+    or to make ``C-c C-c'' terminate a search:
+
+       (define-key isearch-mode-map "\C-c\C-c" 'isearch-exit)
+
+ -  If isearch is behaving case-insensitively (the default) and you type an
+    upper case character, then the search will become case-sensitive.  This
+    can be disabled by setting `search-caps-disable-folding' to nil.
+
+ -  There is a history ring of the strings previously searched for; typing
+    M-p or M-n while searching will cycle through this ring.  Typing M-TAB
+    will do completion across the set of items in the history ring.
+
+ -  The ESC key is no longer used to terminate an incremental search.  The
+    RET key should be used instead.  This change is necessary for it to be
+    possible to bind "meta" characters to isearch commands.
+
+
+*** Startup Code Changes
+------------------------
+
+The initial X frame is mapped before the user's .emacs file is executed.
+Without this, there is no way for the user to see any error messages
+generated by their .emacs file, any windows created by the .emacs file
+don't show up, and the copyleft notice isn't shown.
+
+The default values for load-path, exec-path, lock-directory, and
+Info-directory-list are not (necessarily) built into Emacs, but are
+computed at startup time.  
+
+First, Emacs looks at the directory in which its executable file resides:
+
+  o  If that directory contains subdirectories named "lisp" and "lib-src",
+     then those directories are used as the lisp library and exec directory.
+
+  o  If the parent of the directory in which the emacs executable is located
+     contains "lisp" and "lib-src" subdirectories, then those are used.
+
+  o  If ../lib/xemacs-<version> (starting from the directory in which the
+     emacs executable is located) contains a "lisp" subdirectory and either
+     a "lib-src" subdirectory or a <configuration-name> subdirectory, then
+     those are used.
+
+  o  If the emacs executable that was run is a symbolic link, then the link
+     is chased, and the resultant directory is checked as above.
+
+(Actually, it doesn't just look for "lisp/", it looks for "lisp/prim/",
+which reduces the chances of a false positive.)
+
+If the lisp directory contains subdirectories, they are added to the default
+load-path as well.  If the site-lisp directory exists and contains
+subdirectories, they are then added.  Subdirectories whose names begin with
+a dot or a hyphen are not added to the load-path.
+
+These heuristics fail if the Emacs binary was copied from the main Emacs
+tree to some other directory, and links for the lisp directory were not put
+in.  This isn't much of a restriction: either make there be subdirectories
+(or symbolic links) of the directory of the emacs executable, or make the
+"installed" emacs executable be a symbolic link to an executable in a more
+appropriate directory structure.  For example, this setup works:
+
+    /usr/local/xemacs/xemacs*           ; The executable.
+    /usr/local/xemacs/lisp/             ; The associated directories.
+    /usr/local/xemacs/etc/              ; Any of the files in this list
+    /usr/local/xemacs/lock/             ; could be symbolic links as well.
+    /usr/local/xemacs/info/
+
+As does this:
+
+    /usr/local/bin/xemacs -> ../xemacs/src/xemacs-19.14 ; A link...
+    /usr/local/xemacs/src/xemacs-19.14*                 ; The executable,
+    /usr/local/xemacs/lisp/                             ; and the rest of
+    /usr/local/xemacs/etc/                              ; the source tree
+    /usr/local/xemacs/lock/
+    /usr/local/xemacs/info/
+
+This configuration might be used for a multi-architecture installation; assume
+that $LOCAL refers to a directory which contains only files specific to a 
+particular architecture (i.e., executables) and $SHARED refers to those files 
+which are not machine specific (i.e., lisp code and documentation.)
+
+    $LOCAL/bin/xemacs@ -> $LOCAL/xemacs-19.14/xemacs*
+    $LOCAL/xemacs-19.14/lisp@ -> $SHARED/xemacs-19.14/lisp/
+    $LOCAL/xemacs-19.14/etc@  -> $SHARED/xemacs-19.14/etc/
+    $LOCAL/xemacs-19.14/info@ -> $SHARED/xemacs-19.14/info/
+
+The following would also work, but the above is probably more attractive:
+
+    $LOCAL/bin/xemacs*
+    $LOCAL/bin/lisp@ -> $SHARED/xemacs-19.14/lisp/
+    $LOCAL/bin/etc@  -> $SHARED/xemacs-19.14/etc/
+    $LOCAL/bin/info@ -> $SHARED/xemacs-19.14/info/
+
+If Emacs can't find the requisite directories, it writes a message like this
+(or some appropriate subset of it) to stderr:
+
+  WARNING:
+  couldn't find an obvious default for load-path, exec-directory, and
+  lock-directory, and there were no defaults specified in paths.h when
+  Emacs was built.  Perhaps some directories don't exist, or the Emacs
+  executable, /cadillac-th/jwz/somewhere/xemacs is in a strange place?
+
+  Without both exec-directory and load-path, Emacs will be very broken.
+  Consider making a symbolic link from /cadillac-th/jwz/somewhere/etc
+  to wherever the appropriate Emacs etc/ directory is, and from
+  /cadillac-th/jwz/somewhere/lisp/ to wherever the appropriate Emacs
+  lisp library is.
+
+  Without lock-directory set, file locking won't work.  Consider
+  creating /cadillac-th/jwz/somewhere/lock as a directory or symbolic
+  link for use as the lock directory.
+
+The default installation tree is the following:
+
+    /usr/local/bin/b2m                          ;
+                   ctags                        ; executables that
+                   emacsclient                  ; should be in
+                   etags                        ; user's path
+                   xemacs -> xemacs-<version>   ;
+                   xemacs                       ;
+    /usr/local/lib/xemacs/site-lisp
+    /usr/local/lib/xemacs/lock
+    /usr/local/lib/xemacs-<version>/etc         ; architecture ind. files
+    /usr/local/lib/xemacs-<version>/info
+    /usr/local/lib/xemacs-<version>/lisp
+    /usr/local/lib/xemacs-<version>/<configuration>  ; binaries emacs may run
+
+
+*** X Resources
+---------------
+
+(Note: This section is copied verbatim from the XEmacs Reference Manual.)
+
+   The Emacs resources are generally set per-frame. Each Emacs frame
+can have its own name or the same name as another, depending on the
+name passed to the `make-frame' function.
+
+   You can specify resources for all frames with the syntax:
+
+     Emacs*parameter: value
+
+or
+
+     Emacs*EmacsFrame.parameter:value
+
+You can specify resources for a particular frame with the syntax:
+
+     Emacs*FRAME-NAME.parameter: value
+
+
+**** Geometry Resources
+-----------------------
+
+   To make the default size of all Emacs frames be 80 columns by 55
+lines, do this:
+
+     Emacs*EmacsFrame.geometry: 80x55
+
+To set the geometry of a particular frame named `fred', do this:
+
+     Emacs*fred.geometry: 80x55
+
+Important! Do not use the following syntax:
+
+     Emacs*geometry: 80x55
+
+You should never use `*geometry' with any X application. It does not
+say "make the geometry of Emacs be 80 columns by 55 lines."  It really
+says, "make Emacs and all subwindows thereof be 80x55 in whatever units
+they care to measure in."  In particular, that is both telling the
+Emacs text pane to be 80x55 in characters, and telling the menubar pane
+to be 80x55 pixels, which is surely not what you want.
+
+   As a special case, this geometry specification also works (and sets
+the default size of all Emacs frames to 80 columns by 55 lines):
+
+     Emacs.geometry: 80x55
+
+since that is the syntax used with most other applications (since most
+other applications have only one top-level window, unlike Emacs).  In
+general, however, the top-level shell (the unmapped ApplicationShell
+widget named `Emacs' that is the parent of the shell widgets that
+actually manage the individual frames) does not have any interesting
+resources on it, and you should set the resources on the frames instead.
+
+   The `-geometry' command-line argument sets only the geometry of the
+initial frame created by Emacs.
+
+   A more complete explanation of geometry-handling is
+
+   * The `-geometry' command-line option sets the `Emacs.geometry'
+     resource, that is, the geometry of the ApplicationShell.
+
+   * For the first frame created, the size of the frame is taken from
+     the ApplicationShell if it is specified, otherwise from the
+     geometry of the frame.
+
+   * For subsequent frames, the order is reversed: First the frame, and
+     then the ApplicationShell.
+
+   * For the first frame created, the position of the frame is taken
+     from the ApplicationShell (`Emacs.geometry') if it is specified,
+     otherwise from the geometry of the frame.
+
+   * For subsequent frames, the position is taken only from the frame,
+     and never from the ApplicationShell.
+
+   This is rather complicated, but it does seem to provide the most
+intuitive behavior with respect to the default sizes and positions of
+frames created in various ways.
+
+
+**** Iconic Resources
+---------------------
+
+   Analogous to `-geometry', the `-iconic' command-line option sets the
+iconic flag of the ApplicationShell (`Emacs.iconic') and always applies
+to the first frame created regardless of its name.  However, it is
+possible to set the iconic flag on particular frames (by name) by using
+the `Emacs*FRAME-NAME.iconic' resource.
+
+
+**** Resource List
+------------------
+
+   Emacs frames accept the following resources:
+
+`geometry' (class `Geometry'): string
+     Initial geometry for the frame.  *Note Geometry Resources:: for a
+     complete discussion of how this works.
+
+`iconic' (class `Iconic'): boolean
+     Whether this frame should appear in the iconified state.
+
+`internalBorderWidth' (class `InternalBorderWidth'): int
+     How many blank pixels to leave between the text and the edge of the
+     window.
+
+`interline' (class `Interline'): int
+     How many pixels to leave between each line (may not be
+     implemented).
+
+`menubar' (class `Menubar'): boolean
+     Whether newly-created frames should initially have a menubar.  Set
+     to true by default.
+
+`initiallyUnmapped' (class `InitiallyUnmapped'): boolean
+     Whether XEmacs should leave the initial frame unmapped when it
+     starts up.  This is useful if you are starting XEmacs as a server
+     (e.g. in conjunction with gnuserv or the external client widget).
+     You can also control this with the `-unmapped' command-line option.
+
+`barCursor' (class `BarColor'): boolean
+     Whether the cursor should be displayed as a bar, or the
+     traditional box.
+
+`textPointer' (class `Cursor'): cursor-name
+     The cursor to use when the mouse is over text.  This resource is
+     used to initialize the variable `x-pointer-shape'.
+
+`selectionPointer' (class `Cursor'): cursor-name
+     The cursor to use when the mouse is over a selectable text region
+     (an extent with the `highlight' property; for example, an Info
+     cross-reference).  This resource is used to initialize the variable
+     `x-selection-pointer-shape'.
+
+`spacePointer' (class `Cursor'): cursor-name
+     The cursor to use when the mouse is over a blank space in a buffer
+     (that is, after the end of a line or after the end-of-file).  This
+     resource is used to initialize the variable
+     `x-nontext-pointer-shape'.
+
+`modeLinePointer' (class `Cursor'): cursor-name
+     The cursor to use when the mouse is over a mode line.  This
+     resource is used to initialize the variable `x-mode-pointer-shape'.
+
+`gcPointer' (class `Cursor'): cursor-name
+     The cursor to display when a garbage-collection is in progress.
+     This resource is used to initialize the variable
+     `x-gc-pointer-shape'.
+
+`scrollbarPointer' (class `Cursor'): cursor-name
+     The cursor to use when the mouse is over the scrollbar.  This
+     resource is used to initialize the variable
+     `x-scrollbar-pointer-shape'.
+
+`pointerColor' (class `Foreground'): color-name
+`pointerBackground' (class `Background'): color-name
+     The foreground and background colors of the mouse cursor.  These
+     resources are used to initialize the variables
+     `x-pointer-foreground-color' and `x-pointer-background-color'.
+
+`scrollBarWidth' (class `ScrollBarWidth'): integer
+     How wide the vertical scrollbars should be, in pixels; 0 means no
+     vertical scrollbars.  You can also use a resource specification of
+     the form `*scrollbar.width', or the usual toolkit scrollbar
+     resources: `*XmScrollBar.width' (Motif), `*XlwScrollBar.width'
+     (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
+     that you use the toolkit resources, though, because they're
+     dependent on how exactly your particular build of XEmacs was
+     configured.
+
+`scrollBarHeight' (class `ScrollBarHeight'): integer
+     How high the horizontal scrollbars should be, in pixels; 0 means no
+     horizontal scrollbars.  You can also use a resource specification
+     of the form `*scrollbar.height', or the usual toolkit scrollbar
+     resources: `*XmScrollBar.height' (Motif), `*XlwScrollBar.height'
+     (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
+     that you use the toolkit resources, though, because they're
+     dependent on how exactly your particular build of XEmacs was
+     configured.
+
+`scrollBarPlacement' (class `ScrollBarPlacement'): string
+     Where the horizontal and vertical scrollbars should be positioned.
+     This should be one of the four strings `bottom-left',
+     `bottom-right', `top-left', and `top-right'.  Default is
+     `bottom-right' for the Motif and Lucid scrollbars and
+     `bottom-left' for the Athena scrollbars.
+
+`topToolBarHeight' (class `TopToolBarHeight'): integer
+`bottomToolBarHeight' (class `BottomToolBarHeight'): integer
+`leftToolBarWidth' (class `LeftToolBarWidth'): integer
+`rightToolBarWidth' (class `RightToolBarWidth'): integer
+     Height and width of the four possible toolbars.
+
+`topToolBarShadowColor' (class `TopToolBarShadowColor'): color-name
+`bottomToolBarShadowColor' (class `BottomToolBarShadowColor'): color-name
+     Color of the top and bottom shadows for the toolbars.  NOTE: These
+     resources do *not* have anything to do with the top and bottom
+     toolbars (i.e. the toolbars at the top and bottom of the frame)!
+     Rather, they affect the top and bottom shadows around the edges of
+     all four kinds of toolbars.
+
+`topToolBarShadowPixmap' (class `TopToolBarShadowPixmap'): pixmap-name
+`bottomToolBarShadowPixmap' (class `BottomToolBarShadowPixmap'): pixmap-name
+     Pixmap of the top and bottom shadows for the toolbars.  If set,
+     these resources override the corresponding color resources. NOTE:
+     These resources do *not* have anything to do with the top and
+     bottom toolbars (i.e. the toolbars at the top and bottom of the
+     frame)!  Rather, they affect the top and bottom shadows around the
+     edges of all four kinds of toolbars.
+
+`toolBarShadowThickness' (class `ToolBarShadowThickness'): integer
+     Thickness of the shadows around the toolbars, in pixels.
+
+`visualBell' (class `VisualBell'): boolean
+     Whether XEmacs should flash the screen rather than making an
+     audible beep.
+
+`bellVolume' (class `BellVolume'): integer
+     Volume of the audible beep.
+
+`useBackingStore' (class `UseBackingStore'): boolean
+     Whether XEmacs should set the backing-store attribute of the X
+     windows it creates.  This increases the memory usage of the X
+     server but decreases the amount of X traffic necessary to update
+     the screen, and is useful when the connection to the X server goes
+     over a low-bandwidth line such as a modem connection.
+
+
+**** Face Resources
+-------------------
+
+   The attributes of faces are also per-frame. They can be specified as:
+
+     Emacs.FACE_NAME.parameter: value
+
+     (*do not* use `Emacs*FACE_NAME...')
+
+or
+
+     Emacs*FRAME_NAME.FACE_NAME.parameter: value
+
+Faces accept the following resources:
+
+`attributeFont' (class `AttributeFont'): font-name
+     The font of this face.
+
+`attributeForeground' (class `AttributeForeground'): color-name
+`attributeBackground' (class `AttributeBackground'): color-name
+     The foreground and background colors of this face.
+
+`attributeBackgroundPixmap' (class `AttributeBackgroundPixmap'): file-name
+     The name of an XBM file (or XPM file, if your version of Emacs
+     supports XPM), to use as a background stipple.
+
+`attributeUnderline' (class `AttributeUnderline'): boolean
+     Whether text in this face should be underlined.
+
+   All text is displayed in some face, defaulting to the face named
+`default'.  To set the font of normal text, use
+`Emacs*default.attributeFont'. To set it in the frame named `fred', use
+`Emacs*fred.default.attributeFont'.
+
+   These are the names of the predefined faces:
+
+`default'
+     Everything inherits from this.
+
+`bold'
+     If this is not specified in the resource database, Emacs tries to
+     find a bold version of the font of the default face.
+
+`italic'
+     If this is not specified in the resource database, Emacs tries to
+     find an italic version of the font of the default face.
+
+`bold-italic'
+     If this is not specified in the resource database, Emacs tries to
+     find a bold-italic version of the font of the default face.
+
+`modeline'
+     This is the face that the modeline is displayed in.  If not
+     specified in the resource database, it is determined from the
+     default face by reversing the foreground and background colors.
+
+`highlight'
+     This is the face that highlighted extents (for example, Info
+     cross-references and possible completions, when the mouse passes
+     over them) are displayed in.
+
+`left-margin'
+`right-margin'
+     These are the faces that the left and right annotation margins are
+     displayed in.
+
+`zmacs-region'
+     This is the face that mouse selections are displayed in.
+
+`text-cursor'
+     This is the face that the cursor is displayed in.
+
+`isearch'
+     This is the face that the matched text being searched for is
+     displayed in.
+
+`info-node'
+     This is the face of info menu items.  If unspecified, it is copied
+     from `bold-italic'.
+
+`info-xref'
+     This is the face of info cross-references.  If unspecified, it is
+     copied from `bold'. (Note that, when the mouse passes over a
+     cross-reference, the cross-reference's face is determined from a
+     combination of the `info-xref' and `highlight' faces.)
+
+   Other packages might define their own faces; to see a list of all
+faces, use any of the interactive face-manipulation commands such as
+`set-face-font' and type `?' when you are prompted for the name of a
+face.
+
+   If the `bold', `italic', and `bold-italic' faces are not specified
+in the resource database, then XEmacs attempts to derive them from the
+font of the default face.  It can only succeed at this if you have
+specified the default font using the XLFD (X Logical Font Description)
+format, which looks like
+
+     *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
+
+If you use any of the other, less strict font name formats, some of
+which look like
+
+     lucidasanstypewriter-12
+     fixed
+     9x13
+
+   then XEmacs won't be able to guess the names of the bold and italic
+versions.  All X fonts can be referred to via XLFD-style names, so you
+should use those forms.  See the man pages for `X(1)', `xlsfonts(1)',
+and `xfontsel(1)'.
+
+
+**** Widgets
+------------
+
+   There are several structural widgets between the terminal EmacsFrame
+widget and the top level ApplicationShell; the exact names and types of
+these widgets change from release to release (for example, they changed
+in 19.9, 19.10, 19.12, and 19.13) and are subject to further change in
+the future, so you should avoid mentioning them in your resource database.
+The above-mentioned syntaxes should be forward-compatible.  As of 19.14,
+the exact widget hierarchy is as follows:
+
+    INVOCATION-NAME           "shell"              "container"     FRAME-NAME
+    x-emacs-application-class "TopLevelEmacsShell" "EmacsManager" "EmacsFrame"
+
+(for normal frames)
+
+or
+
+    INVOCATION-NAME           "shell"               "container"     FRAME-NAME
+    x-emacs-application-class "TransientEmacsShell" "EmacsManager" "EmacsFrame"
+
+(for popup/dialog-box frames)
+
+where INVOCATION-NAME is the terminal component of the name of the
+XEmacs executable (usually `xemacs'), and `x-emacs-application-class'
+is generally `Emacs'.
+
+
+**** Menubar Resources
+----------------------
+
+   As the menubar is implemented as a widget which is not a part of
+XEmacs proper, it does not use the face mechanism for specifying fonts
+and colors: It uses whatever resources are appropriate to the type of
+widget which is used to implement it.
+
+   If Emacs was compiled to use only the Motif-lookalike menu widgets,
+then one way to specify the font of the menubar would be
+
+     Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
+
+   If the Motif library is being used, then one would have to use
+
+     Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
+
+   because the Motif library uses the `fontList' resource name instead
+of `font', which has subtly different semantics.
+
+   The same is true of the scrollbars: They accept whichever resources
+are appropriate for the toolkit in use.
+
+
+*** Source Code Highlighting
+----------------------------
+
+It's possible to have your buffers "decorated" with fonts or colors
+indicating syntactic structures (such as strings, comments, function names,
+"reserved words", etc.).  In XEmacs, the preferred way to do this is with
+font-lock-mode; activate it by adding the following code to your .emacs file:
+
+        (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
+        (add-hook 'c-mode-hook          'turn-on-font-lock)
+        (add-hook 'c++-mode-hook        'turn-on-font-lock)
+        (add-hook 'dired-mode-hook      'turn-on-font-lock)
+        ...etc...
+
+To customize it, see the descriptions of the function `font-lock-mode' and
+the variables `font-lock-keywords', `c-font-lock-keywords', etc.
+
+There exist several other source code highlighting packages, but font-lock
+does one thing that most others don't do: highlights as you type new text;
+and one thing that no others do: bases part of its decoration on the
+syntax table of the major mode.  Font-lock has C-level support to do this
+efficiently, so it should also be significantly faster than the others.
+
+If there's something that another highlighting package does that you can't
+make font-lock do, let us know.  We would prefer to consolidate all of the
+desired functionality into one package rather than ship several different
+packages which do essentially the same thing in different ways.
+
+
+** Differences Between XEmacs and Emacs 18
+==========================================
+
+Auto-configure support has been added, so it should be fairly easy to compile
+XEmacs on different systems.  If you have any problems or feedback about
+compiling on your system, please let us know.
+
+We have reimplemented the basic input model in a more general way; instead of
+X input being a special-case of the normal ASCII input stream, XEmacs has a
+concept of "input events", and ASCII characters are a subset of that.  The
+events that XEmacs knows about are not X events, but are a generalization of
+them, so that XEmacs can eventually be ported to different window systems.
+
+We have reimplemented keymaps so that sequences of events can be stored into
+them instead of just ASCII codes; it is possible to, for example, bind
+different commands to each of the chords Control-h, Control-H, Backspace,
+Control-Backspace, and Super-Shift-Backspace.  Key bindings, function key
+bindings, and mouse bindings live in the same keymaps.
+
+Input and display of all ISO-8859-1 characters is supported.
+
+You can have multiple X windows ("frames" in XEmacs terminology).
+
+XEmacs has objects called "extents" and "faces", which are roughly
+analogous to Epoch's "buttons," "zones," and "styles."  An extent is a
+region of text (a start position and an end position) and a face is a
+collection of textual attributes like fonts and colors.  Every extent
+is displayed in some "face", so changing the properties of a face
+immediately updates the display of all associated extents.  Faces can
+be frame-local: you can have a region of text which displays with
+completely different attributes when its buffer is viewed from a
+different X window.
+
+The display attributes of faces may be specified either in lisp or through
+the X resource manager.
+
+Pixmaps of arbitrary size can be embedded in a buffer.
+
+Variable width fonts work.
+
+The height of a line is the height of the tallest font on that line, instead
+of all lines having the same height.
+
+XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
+makes it be a more well-behaved X citizen (and also improves
+portability).  A result of this is that it is possible to include
+other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
+standard Xt command-line arguments.
+
+XEmacs understands the X11 "Selection" mechanism; it's possible to define
+and customize selection converter functions and new selection types from 
+Emacs Lisp, without having to recompile XEmacs.
+
+XEmacs provides support for ToolTalk on systems that have it.
+
+XEmacs supports the Zmacs/Lispm style of region highlighting, where the
+region between the point and mark is highlighted when in its "active" state.
+
+XEmacs has a menubar, whose contents are customizable from emacs-lisp.
+This menubar looks Motif-ish, but does not require Motif.  If you already
+own Motif, however, you can configure XEmacs to use a *real* Motif menubar
+instead.
+
+XEmacs can ask questions using popup dialog boxes.  Any command executed from
+a menu will ask yes/no questions with dialog boxes, while commands executed
+via the keyboard will use the minibuffer.
+
+XEmacs has vertical and horizontal scrollbars.
+
+The initial load-path is computed at run-time, instead of at compile-time.
+This means that if you move the XEmacs executable and associated directories
+to somewhere else, you don't have to recompile anything.
+
+You can specify what the title of the XEmacs windows and icons should be
+with the variables `frame-title-format' and `frame-icon-title-format',
+which have the same syntax as `mode-line-format'.
+
+XEmacs now supports floating-point numbers.
+
+XEmacs now knows about timers directly, instead of them being simulated by
+a subprocess.
+
+XEmacs understands truenames, and can be configured to notice when you are
+visiting two names of the same file.  See the variables find-file-use-truenames
+and find-file-compare-truenames.
+
+If you're running on a machine with audio hardware, you can specify sound 
+files for XEmacs to play instead of the default X beep.  See the documentation
+of the function load-sound-file and the variable sound-alist.
+
+An XEmacs frame can be placed within an "external client widget" managed by
+another application.  This allows an application to use an XEmacs frame as its
+text pane rather than the standard Text widget that is provided with Motif or
+Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
+applications, and raw Xlib applications.
+
+Random changes to the emacs-lisp library: (some of this was not written by
+us, but is included because it's free software and we think it's good stuff)
+
+  - there is a new optimizing byte-compiler
+  - there is a new abbrev-based mail-alias mechanism
+  - the -*- line can contain local-variable settings
+  - there is a new TAGS package
+  - there is a new VI-emulation mode (viper)
+  - there is a new implementation of Dired
+  - there is a new implementation of Isearch
+  - the VM package for reading mail is provided
+  - the W3 package for browsing the World Wide Web hypertext information
+    system is provided
+  - the Hyperbole package, a programmable information management and
+    hypertext system
+  - the OO-Browser package, a multi-language object-oriented browser
+
+There are many more specifics in the "Miscellaneous Changes" section, below.
+
+The online Emacs Manual and Emacs-Lisp Manual are now both relatively
+up-to-date.
--- a/etc/README	Mon Aug 13 09:26:04 2007 +0200
+++ b/etc/README	Mon Aug 13 09:26:39 2007 +0200
@@ -2,3 +2,93 @@
 This directory contains some text files of documentation for XEmacs or
 of interest to XEmacs users, some programs used by or with XEmacs, and
 the file of on-line documentation for XEmacs.
+
+BABYL			A description of BABYL file format
+CODING-STANDARDS	XEmacs C & Lisp coding standards
+COOKIES			Urban Legend, or True Story? :-)
+COPYING			GNU Public License
+COPYING.LIB		Library GNU Public License
+DEBUG			Hints on how to debug XEmacs
+DISTRIB			How to obtain copies of XEmacs and Emacs
+Emacs.ad		Sample Resource file
+FTP			XEmacs FTP Mirrors
+GNU			GNU Manifesto
+GNUS-NEWS		New features in Gnus-5.4
+LPF			Information about the League for Programming Freedom
+MACHINES		List of known machines configurations (OLD)
+MAILINGLISTS		List of available Mailing lists
+MH-E-NEWS		List of changes to MH-E to version 5.0.
+MORE.STUFF		List of useful unbundled packages
+MSDOS			Status of MSDOS port
+NEWS			XEmacs 20.1 release information
+ORDERS
+ORDERS.EUROPE
+ORDERS.JAPAN
+OTHER.EMACSES		Order forms for GNU software
+README			This file
+SERVICE			How to obtain paid support for free software
+TERMS			Information about termcap entries
+TUTORIAL		Tutorial for first time users
+XKeysymDB		X Keysym Database with Motif bindings
+app-defaults/		Localization resource files (Japanese only)
+auctex/			AUC TeX style files
+*.Z			Various pictures of XEmacs developers
+categories		XEmacs GNATS bug report categories
+ctags.1			Ctags man page
+custom/			Images used in Custom mode
+e/			Emacs terminal types
+edt-user.doc		Information about EDT mode
+emacskeys.sco		
+emacsstrs.sco		Special files for running on an SCO console
+enriched.doc		Information about Enriched mode
+eos/			Images for EOS support (GUD)
+etags.1			Etags man page
+frame-icon/		Images for frame-icon.el
+gnats/			XEmacs GNATS bug report support files
+gnu.xbm			
+gnu.xpm			Image of a Gnu.
+gnuattach.1		Gnuattach man page
+gnuclient.1		Gnuclient man page
+gnudoit.1		Gnudoit man page
+gnus/			Images for the Gnus News & Mail reader
+gnus-refcard.tex	Gnus reference card (refcard.tex in Gnus distribution)
+gnus-tut.txt		Gnus tutorial
+gnuserv.1		Gnuserv man page
+gnuserv.README		Original README file from gnuserv
+gnusref.tex		Gnus reference card
+gray1.xbm		Gray bitmap
+hypb-mouse.txt		Hyperbole mouse reference
+ida-logo.xpm		InfoDock Associates logo
+ledit.l			Ledit lisp file?
+message/		Images for Message mode
+mine/			Images for Xmine game
+ms-kermit
+ms-kermit-7bit		Files for running XEmacs through kermit
+mule/			MULE documentation (OLD)
+recycle.xpm
+recycle2.xpm		Two versions of oversized Recycle cursor
+refcard.ps		Postscript version of XEmacs reference card
+refcard.tex		XEmacs reference card
+sample.Xdefaults	Example ~/.Xdefaults file
+sample.emacs		Example ~/.emacs file
+sgml/			SGML catalog, DTDs, etc.
+sink.xbm		A Gnu icon
+smilies/		Smiley images for smiley.el
+sounds/			Sound files for sound support
+sparcworks/		Support files for Sparcworks
+spook.lines		Keywords that might trip TLA wiretaps
+tests/			Testcases for external widget
+time/			Image files for display-time
+toolbar/		Image files for the toolbar
+trash.xpm		Garbage can icon
+viperCard.tex		Viper reference card
+vm/			Image files for VM mail reader
+w3/			Image files for W3 browser
+xemacs-icon.xpm
+xemacs-icon2.xbm
+xemacs-icon2.xpm
+xemacs-icon3.xpm	Various versions of an XEmacs WM icon
+xemacs.1		XEmacs man page
+xemacs.xbm
+xemacs.xpm		XEmacs logo used on the splash screen
+yow.lines		Database used by yow.el
--- a/etc/echo.msg	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-Path: mit-amt!mit-eddie!think!harvard!seismo!gatech!akgua!whuxlm!whuxl!houxm!ihnp4!stolaf!umn-cs!herndon
-From: herndon@umn-cs.UUCP
-Newsgroups: net.sources
-Subject: GNU Echo, Release 1
-Message-ID: <1600001@umn-cs.UUCP>
-Date: 28 Oct 85 18:23:00 GMT
-
-
-/* Written 12:22 pm  Oct 28, 1985 by umn-cs!herndon in umn-cs:net.jokes */
-/* ---------- "GNU Echo, Release 1" ---------- */
-
-
-
-
-GNUecho(1)	    UNIX Programmer's Manual	       GNUecho(1)
-
-
-
-NAME
-     echo - echo arguments
-
-SYNOPSIS
-     echo [ options ] ...
-
-DESCRIPTION
-     _^HE_^Hc_^Hh_^Ho writes its arguments separated by blanks and terminated
-     by	a newline on the standard output.  Options to filter and
-     redirect the output are as	follows:
-
-     -2	  generate rhyming couplets from keywords
-
-     -3	  generate Haiku verse from keywords
-
-     -5	  generate limerick from keywords
-
-     -a	  convert ASCII	to ASCII
-
-     -A	  disambiguate sentence	structure
-
-     -b	  generate bureaucratese equivalent (see -x)
-
-     -B	  issue	equivalent C code with bugs fixed
-
-     -c	  simplify/calculate arithmetic	expression(s)
-
-     -C	  remove copyright notice(s)
-
-     -d	  define new echo switch map
-
-     -D	  delete all ownership information from	system files
-
-     -e	  evaluate lisp	expression(s)
-
-     -E	  convert ASCII	to Navajo
-
-     -f	  read input from file
-
-     -F	  transliterate	to french
-
-     -g	  generate pseudo-revolutionary	marxist	catch-phrases
-
-     -G	  prepend GNU manifesto
-
-     -h	  halt system (reboot suppressed on Suns, Apollos, and
-	  VAXen, not supported on NOS-2)
-
-     -i	  emulate IBM OS/VU (recursive universes not supported)
-
-     -I	  emulate IBM VTOS 3.7.6 (chronosynclastic infundibulae
-	  supported with restrictions documented in IBM	VTOS
-
-
-
-Printed	10/28/85	 18 January 1983			1
-
-
-
-
-
-
-GNUecho(1)	    UNIX Programmer's Manual	       GNUecho(1)
-
-
-
-	  Reference Manual rev 3.2.6)
-
-     -J	  generate junk	mail
-
-     -j	  justify text (see -b option)
-
-     -k	  output "echo"	software tools
-
-     -K	  delete privileged accounts
-
-     -l	  generate legalese equivalent
-
-     -L	  load echo modules
-
-     -M	  generate mail
-
-     -N	  send output to all reachable networks	(usable	with -J,
-	  -K, -h options)
-
-     -n	  do not add newline to	the output
-
-     -o	  generate obscene text
-
-     -O	  clean	up dirty language
-
-     -p	  decrypt and print /etc/passwd
-
-     -P	  port echo to all reachable networks
-
-     -P1  oolcay itay
-
-     -q	  query	standard input for arguments
-
-     -r	  read alternate ".echo" file on start up
-
-     -R	  change root password to "RMS"
-
-     -s	  suspend operating system during output (Sun and VAX BSD
-	  4.2 only)
-
-     -S	  translate to swahili
-
-     -T	  emulate TCP/IP handler
-
-     -t	  issue	troff output
-
-     -u	  issue	unix philosophy	essay
-
-     -v	  generate reverberating echo
-
-     -V	  print	debugging information
-
-
-
-
-Printed	10/28/85	 18 January 1983			2
-
-
-
-
-
-
-GNUecho(1)	    UNIX Programmer's Manual	       GNUecho(1)
-
-
-
-     -x	  decrypt DES format messages (NSA secret algorithm CX
-	  3.8, not distributed outside continental US)
-
-     _^HE_^Hc_^Hh_^Ho is useful for	producing diagnostics in shell programs
-     and for writing constant data on pipes.  To send diagnostics
-     to	the standard error file, do `echo ... 1>&2'.
-
-AUTHOR
-     Richard M.	Stallman
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Printed	10/28/85	 18 January 1983			3
-
--- a/etc/ledit.l	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-;;; -*- Mode: lisp -*-
-
-; load in the c functions
-
-(removeaddress '_signal)
-(removeaddress '_switch_to_proc)
-(removeaddress '_set_proc_str)
-
-(cfasl "/src/mdc/ledit/leditcfns.o" '_switch_to_proc 'emacs)
-
-(getaddress '_set_proc_str 'set_proc_str)
-
-(declare (special *ledit-infile*               ; emacs->lisp tempfile
-		  *ledit-outfile*              ; lisp->emacs tempfile
-		  *ledit-ppfile*               ; pp->emacs tempfile
-                  *ledit-lisztfile*            ; compiler input
-                  *ledit-objfile*              ; compiler output
-		  *ledit-initialized*)         ; flag
-	 )
-
-(setq *ledit-initialized* nil)
-
-;;; INIT-LEDIT
-
-(defun init-ledit ()
-  (let ((user (getenv '|USER|)))		;USER must be uppercase
-       (setq
-	 *ledit-outfile* (concat "/tmp/" user ".l2") ; lisp -> emacs
-	 *ledit-infile*  (concat "/tmp/" user ".l1") ; emacs -> lisp
-	 *ledit-ppfile*  (concat "/tmp/" user ".l3") ; pp output to emacs.
-	 *ledit-lisztfile*  (concat "/tmp/" user ".l4")
-	 *ledit-objfile*  (concat "/tmp/" user ".o")
-	 *ledit-initialized* t)))
-
-;;; LEDIT
-; if 1 arg, arg is taken as a tag name to pass to emacs.
-; if 2 args, second arg is a keyword.  If 2nd arg is pp,
-; pp is applied to first arg, and result is sent to emacs
-; to put in a buffer called LEDIT (which is first erased.)
-
-(defun ledit fexpr (args)
-    (apply #'ledit* args))
-
-;;; LEDIT*
-
-(defun ledit* n
-    (if (not *ledit-initialized*) (init-ledit))
-    (ledit-output (listify n))
-    (syscall 10. *ledit-infile*)        ; syscall 10 is "delete"
-    (syscall 10. *ledit-lisztfile*)
-    (emacs)
-    (ledit-input)
-    (syscall 10. *ledit-outfile*)
-    (syscall 10. *ledit-ppfile*)
-    t)
-
-;;; LEDIT-OUTPUT
-;;; Egad, what a mess!  Doesn't work for XEMACS yet.
-;;; Here's an example from Mocklisp:
-;;; -> (defun bar (nothing) (bar nothing))
-;;; bar
-;;; -> (ledit bar)
-;;; should produce...
-;;; (progn) (progn tag (setq tag "bar") (&goto-tag))
-;;; and
-;;; -> (ledit bar pp)
-;;; should stuff this to emacs...
-;;; (progn) (switch-to-buffer "LEDIT") (erase-buffer)
-;;; (insert-file "/tmp/walter.l3") (lisp-mode)
-;;; and this...
-;;; (def bar
-;;;   (lambda (x)
-;;;    (bar nothing)))
-;;; into *LEDIT*
-
-(defun ledit-output (args)
-  (if args
-      (let ((ofile (outfile *ledit-outfile*)))
-	   (format ofile "(progn)")             ; this is necessary.
-
-	   (cond ((null (cdr args)) ; no keyword -> arg is a tag.
-		  (format ofile "(progn tag (setq tag \"~A\"~
-			         (&goto-tag))"
-			         (car args)))
-		 ((eq (cadr args) 'pp)       ; pp-> pp first arg to emacs
-		      (apply 'pp `((|F| ,*ledit-ppfile*) ,(car args)))
-		      (format ofile "(switch-to-buffer \"LEDIT\")~
-				     (erase-buffer)")
-		      (format ofile "(insert-file \"~A\")"
-			             *ledit-ppfile*)
-		      (format ofile "(lisp-mode)"))
-	   
-		 (t (format t "~&~A -- unknown option~%" (cdr args))))
-	   (close ofile))))
-
-;;; LISZT*
-;;; Need this guy to do compile-input.
-;;; Liszt returns 0 if all was well.
-;;; Note that in ordinary use the user will have to get used to looking
-;;; at "%Warning: ... Compiler declared *foo* special" messages, since
-;;; you don't usually want to hunt around in your file, zap in the
-;;; declarations, then go back to what you were doing.
-;;; Fortunately this doesn't cause the compiler to bomb.
-;;; Some sleepless night I will think of a way to get around this.
-
-(defun liszt* (&rest args)
-   (apply #'liszt args))
-
-;;; LEDIT-INPUT
-;;; Although there are two cases here, in practice
-;;; it is never the case that there is both input to be
-;;; interpreted and input to be compiled.
-
-(defun ledit-input ()
-  (if (probef *ledit-lisztfile*)
-      (cond ((getd #'liszt)
-	     (format t ";Compiling LEDIT:")
-	     (and (zerop (liszt* *ledit-lisztfile* '-o *ledit-objfile*))
-		  (load *ledit-objfile*)))
-	    (t (format t ";Can't compile LEDIT: No liszt.~%;Reading instead:")
-	       (let ((ifile (infile *ledit-lisztfile*)))
-		 (ledit-load ifile)
-		 (close ifile)))))
-
-  (if (probef *ledit-infile*)
-      (let ((ifile (infile *ledit-infile*)))
-	(format t ";Reading from LEDIT:~%")
-	(ledit-load ifile)
-	(close ifile))))
-
-;;; LEDIT-LOAD
-;;; A generally useful form of load
-
-(defun ledit-load (ifile)
-  (let ((eof-form (list 'eof-form)))
-    (do ((form (read ifile eof-form) (read ifile eof-form)))
-      ((eq form eof-form))
-      (format t ";  ~A~%" (eval form)))))
-
-(setsyntax #/ 'macro 'ledit)                  ; make ^E = (ledit)<return>
-
-;; more robust version of the c function set_proc_str. Does argument checking.
-;; set_proc_str sets the string that is stuffed to the tty after franz pauses
-;; and the csh wakes up. It is usually "%emacs" or "%vemacs" or "%?emacs"
-(defun set-proc-str (arg)
-  (if (stringp arg)
-    (set_proc_str arg)
-    (if (symbolp arg)
-      (set_proc_str (get-pname arg))
-      (error arg " is illegal argument to set-proc-str"))))
--- a/etc/news.texi	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3519 +0,0 @@
-\input texinfo    @c -*-texinfo-*-
-
-@setfilename LNEWS
-
-This file describes the new Lisp features of Emacs version 19 as first
-released to the public.  For Lisp changes in subsequent Emacs 19
-releases, see the file NEWS.
-
-@section New Features in the Lisp Language
-
-@itemize @bullet
-@item
-The new function @code{delete} is a traditional Lisp function.  It takes
-two arguments, @var{elt} and @var{list}, and deletes from @var{list} any
-elements that are equal to @var{elt}.  It uses the function @code{equal}
-to compare elements with @var{elt}.
-
-@item
-The new function @code{member} is a traditional Lisp function.  It takes
-two arguments, @var{elt} and @var{list}, and finds the first element of
-@var{list} that is equal to @var{elt}.  It uses the function
-@code{equal} to compare each list element with @var{elt}.
-
-The value is a sublist of @var{list}, whose first element is the one
-that was found.  If no matching element is found, the value is
-@code{nil}.
-
-@ignore @c Seems not to be true, from looking at the code.
-@item
-The function @code{equal} is now more robust: it does not crash due to
-circular list structure.
-@end ignore
-
-@item
-The new function @code{indirect-function} finds the effective function
-definition of an object called as a function.  If the object is a
-symbol, @code{indirect-function} looks in the function definition of the
-symbol.  It keeps doing this until it finds something that is not a
-symbol.
-
-@item
-There are new escape sequences for use in character and string
-constants.  The escape sequence @samp{\a} is equivalent to @samp{\C-g},
-the @sc{ASCII} @sc{BEL} character (code 7).  The escape sequence
-@samp{\x} followed by a hexadecimal number represents the character
-whose @sc{ASCII} code is that number.  There is no limit on the number
-of digits in the hexadecimal value.
-
-@item
-The function @code{read} when reading from a buffer now does not skip a
-terminator character that terminates a symbol.  It leaves that character
-to be read (or just skipped, if it is whitespace) next time.
-
-@item
-When you use a function @var{function} as the input stream for
-@code{read}, it is usually called with no arguments, and should return
-the next character.  In Emacs 19, sometimes @var{function} is called
-with one argument (always a character).  When that happens,
-@var{function} should save the argument and arrange to return it when
-called next time.
-
-@item
-@code{random} with integer argument @var{n} returns a random number
-between 0 and @var{n}@minus{}1.
-
-@item
-The functions @code{documentation} and @code{documentation-property} now
-take an additional optional argument which, if non-@code{nil}, says to
-refrain from calling @code{substitute-command-keys}.  This way, you get
-the exact text of the documentation string as written, without the usual
-substitutions.  Make sure to call @code{substitute-command-keys}
-yourself if you decide to display the string.
-
-@item
-The new function @code{invocation-name} returns as a string the program
-name that was used to run Emacs, with any directory names discarded.
-
-@item
-The new function @code{map-y-or-n-p} makes it convenient to ask a series
-of similar questions.  The arguments are @var{prompter}, @var{actor},
-@var{list}, and optional @var{help}.
-
-The value of @var{list} is a list of objects, or a function of no
-arguments to return either the next object or @code{nil} meaning there
-are no more.
-
-The argument @var{prompter} specifies how to ask each question.  If
-@var{prompter} is a string, the question text is computed like this:
-
-@example
-(format @var{prompter} @var{object})
-@end example
-
-@noindent
-where @var{object} is the next object to ask about.
-
-If not a string, @var{prompter} should be a function of one argument
-(the next object to ask about) and should return the question text.
-
-The argument @var{actor} should be a function of one argument, which is
-called with each object that the user says yes for.  Its argument is
-always one object from @var{list}.
-
-If @var{help} is given, it is a list @code{(@var{object} @var{objects}
-@var{action})}, where @var{object} is a string containing a singular
-noun that describes the objects conceptually being acted on;
-@var{objects} is the corresponding plural noun and @var{action} is a
-transitive verb describing @var{actor}.  The default is @code{("object"
-"objects" "act on")}.
-
-Each time a question is asked, the user may enter @kbd{y}, @kbd{Y}, or
-@key{SPC} to act on that object; @kbd{n}, @kbd{N}, or @key{DEL} to skip
-that object; @kbd{!} to act on all following objects; @key{ESC} or
-@kbd{q} to exit (skip all following objects); @kbd{.} (period) to act on
-the current object and then exit; or @kbd{C-h} to get help.
-
-@code{map-y-or-n-p} returns the number of objects acted on.
-
-@item
-You can now ``set'' environment variables with the @code{setenv}
-command.  This works by setting the variable @code{process-environment},
-which @code{getenv} now examines in preference to the environment Emacs
-received from its parent.
-@end itemize
-
-@section New Features for Loading Libraries
-
-You can now arrange to run a hook if a particular Lisp library is
-loaded.
-
-The variable @code{after-load-alist} is an alist of expressions to be
-evalled when particular files are loaded.  Each element looks like
-@code{(@var{filename} @var{forms}@dots{})}.
-
-When @code{load} is run and the file name argument equals
-@var{filename}, the @var{forms} in the corresponding element are
-executed at the end of loading.  @var{filename} must match exactly!
-Normally @var{filename} is the name of a library, with no directory
-specified, since that is how @code{load} is normally called.
-
-An error in @var{forms} does not undo the load, but does prevent
-execution of the rest of the @var{forms}.
-
-The function @code{eval-after-load} provides a convenient way to add
-entries to the alist.  Call it with two arguments, @var{file} and a
-form to execute.
-
-The function @code{autoload} now supports autoloading a keymap.
-Use @code{keymap} as the fourth argument if the autoloaded function
-will become a keymap when loaded.
-
-There is a new feature for specifying which functions in a library should
-be autoloaded by writing special ``magic'' comments in that library itself.
-
-  Write @samp{;;;###autoload} on a line by itself before the real
-definition of the function, in its autoloadable source file; then the
-command @kbd{M-x update-file-autoloads} automatically puts the
-@code{autoload} call into @file{loaddefs.el}.
-
-  You can also put other kinds of forms into @file{loaddefs.el}, by
-writing @samp{;;;###autoload} followed on the same line by the form.
-@kbd{M-x update-file-autoloads} copies the form from that line.
-
-@section Compilation Features
-
-@itemize @bullet
-@item
-Inline functions.
-
-You can define an @dfn{inline function} with @code{defsubst}.  Use
-@code{defsubst} just like @code{defun}, and it defines a function which
-you can call in all the usual ways.  Whenever the function thus defined
-is used in compiled code, the compiler will open code it.
-
-You can get somewhat the same effects with a macro, but a macro has the
-limitation that you can use it only explicitly; a macro cannot be called
-with @code{apply}, @code{mapcar} and so on.  Also, it takes some work to
-convert an ordinary function into a macro.  To convert it into an inline
-function, simply replace @code{defun} with @code{defsubst}.
-
-Making a function inline makes explicit calls run faster.  But it also
-has disadvantages.  For one thing, it reduces flexibility; if you change
-the definition of the function, calls already inlined still use the old
-definition until you recompile them.
-
-Another disadvantage is that making a large function inline can increase
-the size of compiled code both in files and in memory.  Since the
-advantages of inline functions are greatest for small functions, you
-generally should not make large functions inline.
-
-Inline functions can be used and open coded later on in the same file,
-following the definition, just like macros.
-
-@item
-The command @code{byte-compile-file} now offers to save any buffer
-visiting the file you are compiling.
-
-@item
-The new command @code{compile-defun} reads, compiles and executes the
-defun containing point.  If you use this on a defun that is actually a
-function definition, the effect is to install a compiled version of
-that function.
-
-@item
-Whenever you load a Lisp file or library, you now receive a warning if
-the directory contains both a @samp{.el} file and a @samp{.elc} file,
-and the @samp{.el} file is newer.  This typically indicates that someone
-has updated the Lisp code but forgotten to recompile it, so the changes
-do not take effect.  The warning is a reminder to recompile.
-
-@item
-The special form @code{eval-when-compile} marks the forms it contains to
-be evaluated at compile time @emph{only}.  At top-level, this is
-analogous to the Common Lisp idiom @code{(eval-when (compile)
-@dots{})}.  Elsewhere, it is similar to the Common Lisp @samp{#.} reader
-macro (but not when interpreting).
-
-If you're thinking of using this feature, we recommend you consider whether
-@code{provide} and @code{require} might do the job as well.
-
-@item
-The special form @code{eval-and-compile} is similar to
-@code{eval-when-compile}, but the whole form is evaluated both at
-compile time and at run time.
-
-If you're thinking of using this feature, we recommend you consider
-whether @code{provide} and @code{require} might do the job as well.
-
-@item
-Emacs Lisp has a new data type for byte-code functions.  This makes
-them faster to call, and also saves space.  Internally, a byte-code
-function object is much like a vector; however, the evaluator handles
-this data type specially when it appears as a function to be called.
-
-The printed representation for a byte-code function object is like that
-for a vector, except that it starts with @samp{#} before the opening
-@samp{[}.  A byte-code function object must have at least four elements;
-there is no maximum number, but only the first six elements are actually
-used.  They are:
-
-@table @var
-@item arglist
-The list of argument symbols.
-
-@item byte-code
-The string containing the byte-code instructions.
-
-@item constants
-The vector of constants referenced by the byte code.
-
-@item stacksize
-The maximum stack size this function needs.
-
-@item docstring
-The documentation string (if any); otherwise, @code{nil}.
-
-@item interactive
-The interactive spec (if any).  This can be a string or a Lisp
-expression.  It is @code{nil} for a function that isn't interactive.
-@end table
-
-The predicate @code{byte-code-function-p} tests whether a given object
-is a byte-code function.
-
-You can create a byte-code function object in a Lisp program
-with the function @code{make-byte-code}.  Its arguments are the elements
-to put in the byte-code function object.
-
-You should not try to come up with the elements for a byte-code function
-yourself, because if they are inconsistent, Emacs may crash when you
-call the function.  Always leave it to the byte compiler to create these
-objects; it, we hope, always makes the elements consistent.
-@end itemize
-
-@section Floating Point Numbers
-
-You can now use floating point numbers in Emacs, if you define the macro
-@code{LISP_FLOAT_TYPE} when you compile Emacs.
-
-The printed representation for floating point numbers requires either a
-decimal point surrounded by digits, or an exponent, or both.  For
-example, @samp{1500.0}, @samp{15e2}, @samp{15.0e2} and @samp{1.5e3} are
-four ways of writing a floating point number whose value is 1500.
-
-The existing predicate @code{numberp} now returns @code{t} if the
-argument is any kind of number---either integer or floating.  The new
-predicates @code{integerp} and @code{floatp} check for specific types of
-numbers.
-
-You can do arithmetic on floating point numbers with the ordinary
-arithmetic functions, @code{+}, @code{-}, @code{*} and @code{/}.  If you
-call one of these functions with both integers and floating point
-numbers among the arguments, the arithmetic is done in floating point.
-The same applies to the numeric comparison functions such as @code{=}
-and @code{<}.  The remainder function @code{%} does not accept floating
-point arguments, and neither do the bitwise boolean operations such as
-@code{logand} or the shift functions such as @code{ash}.
-
-There is a new arithmetic function, @code{abs}, which returns the absolute
-value of its argument.  It handles both integers and floating point
-numbers.
-
-To convert an integer to floating point, use the function @code{float}.
-There are four functions to convert floating point numbers to integers;
-they differ in how they round.  @code{truncate} rounds toward 0,
-@code{floor} rounds down, @code{ceil} rounds up, and @code{round}
-produces the nearest integer.
-
-You can use @code{logb} to extract the binary exponent of a floating
-point number.  More precisely, it is the logarithm base 2, rounded down
-to an integer.
-
-Emacs has several new mathematical functions that accept any kind of
-number as argument, but always return floating point numbers.
-
-@table @code
-@item cos
-@findex cos
-@itemx sin
-@findex sin
-@itemx tan
-@findex tan
-Trigonometric functions.
-@item acos
-@findex acos
-@itemx asin
-@findex asin
-@itemx atan
-@findex atan
-Inverse trigonometric functions.
-@item exp
-@findex exp
-The exponential function (power of @var{e}).
-@item log
-@findex log
-Logarithm base @var{e}.
-@item log10
-@findex log10
-Logarithm base 10
-@item expt
-@findex expt
-Raise @var{x} to power @var{y}.
-@item sqrt
-@findex sqrt
-The square root function.
-@end table
-
-The new function @code{string-to-number} now parses a string containing
-either an integer or a floating point number, returning the number.
-
-The @code{format} function now handles the specifications @samp{%e},
-@samp{%f} and @samp{%g} for printing floating point numbers; likewise
-@code{message}.
-
-The new variable @code{float-output-format} controls how Lisp prints
-floating point numbers.  Its value should be @code{nil} or a string.
-
-If it is a string, it should contain a @samp{%}-spec like those accepted
-by @code{printf} in C, but with some restrictions.  It must start with
-the two characters @samp{%.}.  After that comes an integer which is the
-precision specification, and then a letter which controls the format.
-
-The letters allowed are @samp{e}, @samp{f} and @samp{g}.  Use @samp{e}
-for exponential notation (@samp{@var{dig}.@var{digits}e@var{expt}}).
-Use @samp{f} for decimal point notation
-(@samp{@var{digits}.@var{digits}}).  Use @samp{g} to choose the shorter
-of those two formats for the number at hand.
-
-The precision in any of these cases is the number of digits following
-the decimal point.  With @samp{e}, a precision of 0 means to omit the
-decimal point.  0 is not allowed with @samp{f} or @samp{g}.
-
-A value of @code{nil} means to use the format @samp{%.20g}.
-
-No matter what the value of @code{float-output-format}, printing ensures
-that the result fits the syntax rules for a floating point number.  If
-it doesn't fit (for example, if it looks like an integer), it is
-modified to fit.  By contrast, the @code{format} function formats
-floating point numbers without requiring the output to fit the
-syntax rules for floating point number.
-
-@section New Features for Printing And Formatting Output
-
-@itemize @bullet
-@item
-The @code{format} function has a new feature: @samp{%S}.  This print
-spec prints any kind of Lisp object, even a string, using its Lisp
-printed representation.
-
-By contrast, @samp{%s} prints everything without quotation.
-
-@item
-@code{prin1-to-string} now takes an optional second argument which says
-not to print the Lisp quotation characters.  (In other words, to use
-@code{princ} instead of @code{prin1}.)
-
-@item
-The new variable @code{print-level} specifies the maximum depth of list
-nesting to print before cutting off all deeper structure.  A value of
-@code{nil} means no limit.
-@end itemize
-
-@section Changes in Basic Editing Functions
-
-@itemize @bullet
-@item
-There are two new primitives for putting text in the kill ring:
-@code{kill-new} and @code{kill-append}.
-
-The function @code{kill-new} adds a string to the front of the kill ring.
-
-Use @code{kill-append} to add a string to a previous kill.  The second
-argument @var{before-p}, if non-@code{nil}, says to add the string at
-the beginning; otherwise, it goes at the end.
-
-Both of these functions apply @code{interprogram-cut-function} to the
-entire string of killed text that ends up at the beginning of the kill
-ring.
-
-@item
-The new function @code{current-kill} rotates the yanking pointer in the
-kill ring by @var{n} places, and returns the text at that place in the
-ring.  If the optional second argument @var{do-not-move} is
-non-@code{nil}, it doesn't actually move the yanking point; it just
-returns the @var{n}th kill forward.  If @var{n} is zero, indicating a
-request for the latest kill, @code{current-kill} calls
-@code{interprogram-paste-function} (documented below) before consulting
-the kill ring.
-
-All Emacs Lisp programs should either use @code{current-kill},
-@code{kill-new}, and @code{kill-append} to manipulate the kill ring, or
-be sure to call @code{interprogram-paste-function} and
-@code{interprogram-cut-function} as appropriate.
-
-@item
-The variables @code{interprogram-paste-function} and
-@code{interprogram-cut-function} exist so that you can provide functions
-to transfer killed text to and from other programs.
-
-@item
-The @code{kill-region} function can now be used in read-only buffers.
-It beeps, but adds the region to the kill ring without deleting it.
-
-@item
-The new function @code{compare-buffer-substrings} lets you compare two
-substrings of the same buffer or two different buffers.  Its arguments
-look like this:
-
-@example
-(compare-buffer-substrings @var{buf1} @var{beg1} @var{end1} @var{buf2} @var{beg2} @var{end2})
-@end example
-
-The first three arguments specify one substring, giving a buffer and two
-positions within the buffer.  The last three arguments specify the other
-substring in the same way.
-
-The value is negative if the first substring is less, positive if the
-first is greater, and zero if they are equal.  The absolute value of
-the result is one plus the index of the first different characters.
-
-@item
-Overwrite mode treats tab and newline characters specially.  You can now
-turn off this special treatment by setting @code{overwrite-binary-mode}
-to @code{t}.
-
-@item
-Once the mark ``exists'' in a buffer, it normally never ceases to
-exist.  However, in Transient Mark mode, it may become @dfn{inactive}.
-The variable @code{mark-active}, which is always local in all buffers,
-indicates whether the mark is active: non-@code{nil} means yes.
-
-When the mark is inactive, the function @code{mark} normally gets an
-error.  However, @code{(mark t)} returns the position of the inactive
-mark.
-
-The function @code{push-mark} normally does not activate the mark.
-However, it accepts an optional third argument @var{activate} which,
-if non-@code{nil}, says to activate.
-
-A command can request deactivation of the mark upon return to the editor
-command loop by setting @code{deactivate-mark} to a non-@code{nil}
-value.  Transient Mark mode works by causing the command loop to take
-note of @code{deactivate-mark} and actually deactivate the mark.
-
-Transient Mark mode enables highlighting of the region when the mark is
-active.  This is currently implemented only under the X Window System.
-A few other commands vary their behavior slightly in this case, by
-testing @code{transient-mark-mode}.  More specifically, they avoid
-special display actions such as moving the cursor temporarily, which are
-not needed when the region is shown by highlighting.
-
-The variables @code{activate-mark-hook} and @code{deactivate-mark-hook}
-are normal hooks run, respectively, when the mark becomes active and when
-it becomes inactive.  The hook @code{activate-mark-hook} is also run at
-the end of a command if the mark is active and the region may have
-changed.
-
-@item
-The function @code{move-to-column} now accepts a second optional
-argument @var{force}, in addition to @var{column}; if the requested
-column @var{column} is in the middle of a tab character and @var{force}
-is non-@code{nil}, @code{move-to-column} replaces the tab with the
-appropriate sequence of spaces so that it can place point exactly at
-@var{column}.
-
-@item
-The search functions when successful now return the value of point
-rather than just @code{t}.  This affects the functions
-@code{search-forward}, @code{search-backward},
-@code{word-search-forward}, @code{word-search-backward},
-@code{re-search-forward}, and @code{re-search-backward}.
-
-@item
-When you do regular expression searching or matching, there is no longer
-a limit to how many @samp{\(@dots{}\)} pairs you can get information
-about with @code{match-beginning} and @code{match-end}.  Also, these
-parenthetical groupings may now be nested to any degree.
-
-@item
-In a regular expression, when you use an asterisk after a parenthetical
-grouping, and then ask about what range was matched by the grouping,
-Emacs 19 reports just its last occurrence.  Emacs 18 used to report the
-range of all the repetitions put together.
-
-For example,
-
-@example
-(progn
- (string-match "f\\(o\\)*" "foo")
- (list (match-beginning 1)
-       (match-end 1)))
-@end example
-
-@noindent
-returns @code{(2 3)} in Emacs 19, corresponding to just the last
-repetition of @samp{\(o\)}.  In Emacs 18, that expression returns
-@code{(1 3)}, encompassing both repetitions.
-
-If you want the Emacs 18 behavior, use a grouping @emph{containing} the
-asterisk: @code{"f\\(o*\\)"}.
-
-@item
-The new special form @code{save-match-data} preserves the regular
-expression match status.  Usage: @code{(save-match-data
-@var{body}@dots{})}.
-
-@item
-The function @code{translate-region} applies a translation table to the
-characters in a part of the buffer.  Invoke it as
-@code{(translate-region @var{start} @var{end} @var{table})}; @var{start}
-and @var{end} bound the region to translate.
-
-The translation table @var{table} is a string; @code{(aref @var{table}
-@var{ochar})} gives the translated character corresponding to
-@var{ochar}.  If the length of @var{table} is less than 256, any
-characters with codes larger than the length of @var{table} are not
-altered by the translation.
-
-@code{translate-region} returns the number of characters which were
-actually changed by the translation.  This does not count characters
-which were mapped into themselves in the translation table.
-
-@item
-There are two new hook variables that let you notice all changes in all
-buffers (or in a particular buffer, if you make them buffer-local):
-@code{before-change-function} and @code{after-change-function}.
-
-If @code{before-change-function} is non-@code{nil}, then it is called
-before any buffer modification.  Its arguments are the beginning and end
-of the region that is going to change, represented as integers.  The
-buffer that's about to change is always the current buffer.
-
-If @code{after-change-function} is non-@code{nil}, then it is called
-after any buffer modification.  It takes three arguments: the beginning
-and end of the region just changed, and the length of the text that
-existed before the change.  (To get the current length, subtract the
-region beginning from the region end.)  All three arguments are
-integers.  The buffer that has just changed is always the current
-buffer.
-
-Both of these variables are temporarily bound to @code{nil} during the
-time that either of these hooks is running.  This means that if one of
-these functions changes the buffer, that change won't run these
-functions.  If you do want hooks to be run recursively, write your hook
-functions to bind these variables back to their usual values.
-
-@item
-The hook @code{first-change-hook} is run using @code{run-hooks} whenever
-a buffer is changed that was previously in the unmodified state.
-
-@item
-The second argument to @code{insert-abbrev-table-description} is
-now optional.
-@end itemize
-
-@section Text Properties
-
-  Each character in a buffer or a string can have a @dfn{text property
-list}, much like the property list of a symbol.  The properties belong
-to a particular character at a particular place, such as, the letter
-@samp{T} at the beginning of this sentence.  Each property has a name,
-which is usually a symbol, and an associated value, which can be any
-Lisp object---just as for properties of symbols.
-
-  You can use the property @code{face} to control the font and
-color of text.  Several other property names have special meanings.  You
-can create properties of any name and examine them later for your own
-purposes.
-
-  Copying text between strings and buffers preserves the properties
-along with the characters; this includes such diverse functions as
-@code{substring}, @code{insert}, and @code{buffer-substring}.
-
-  Since text properties are considered part of the buffer contents,
-changing properties in a buffer ``modifies'' the buffer, and you can
-also undo such changes.
-
-  Strings with text properties have a special printed representation
-which describes all the properties.  This representation is also the
-read syntax for such a string.  It looks like this:
-
-@example
-#("@var{characters}" @var{property-data}...)
-@end example
-
-@noindent
-where @var{property-data} is zero or more elements in groups of three as
-follows:
-
-@example
-@var{beg} @var{end} @var{plist}
-@end example
-
-@noindent
-The elements @var{beg} and @var{end} are integers, and together specify
-a portion of the string; @var{plist} is the property list for that
-portion.
-
-@subsection Examining Text Properties
-
-  The simplest way to examine text properties is to ask for the value of
-a particular property of a particular character.  For that, use
-@code{get-text-property}.  Use @code{text-properties-at} to get the
-entire property list of a character.
-
-@code{(get-text-property @var{pos} @var{prop} @var{object})} returns the
-@var{prop} property of the character after @var{pos} in @var{object} (a
-buffer or string).  The argument @var{object} is optional and defaults
-to the current buffer.
-
-@code{(text-properties-at @var{pos} @var{object})} returns the entire
-property list of the character after @var{pos} in the string or buffer
-@var{object} (which defaults to the current buffer).
-
-@subsection Changing Text Properties
-
-  There are four primitives for changing properties of a specified
-range of text:
-
-@table @code
-@item add-text-properties
-This function puts on specified properties, leaving other existing
-properties unaltered.
-
-@item put-text-property
-This function puts on a single specified property, leaving others
-unaltered.
-
-@item remove-text-properties
-This function removes specified properties, leaving other
-properties unaltered.
-
-@item set-text-properties
-This function replaces the entire property list, leaving no vestige of
-the properties that that text used to have.
-@end table
-
-All these functions take four arguments: @var{start}, @var{end},
-@var{props}, and @var{object}.  The last argument is optional and
-defaults to the current buffer.  The argument @var{props} has the form
-of a property list.
-
-@subsection Property Search Functions
-
-In typical use of text properties, most of the time several or many
-consecutive characters have the same value for a property.  Rather than
-writing your programs to examine characters one by one, it is much
-faster to process chunks of text that have the same property value.
-
-The functions @code{next-property-change} and
-@code{previous-property-change} scan forward or backward from position
-@var{pos} in @var{object}, looking for a change in any property between
-two characters scanned.  They returns the position between those two
-characters, or @code{nil} if no change is found.
-
-The functions @code{next-single-property-change} and
-@code{previous-single-property-change} are similar except that you
-specify a particular property and they look for changes in the value of
-that property only.  The property is the second argument, and
-@var{object} is third.
-
-@subsection Special Properties
-
-  If a character has a @code{category} property, we call it the
-@dfn{category} of the character.  It should be a symbol.  The properties
-of the symbol serve as defaults for the properties of the character.
-
-  You can use the property @code{face} to control the font and
-color of text.
-
-  You can specify a different keymap for a portion of the text by means
-of a @code{local-map} property.  The property's value, for the character
-after point, replaces the buffer's local map.
-
-  If a character has the property @code{read-only}, then modifying that
-character is not allowed.  Any command that would do so gets an error.
-
-  If a character has the property @code{modification-hooks}, then its
-value should be a list of functions; modifying that character calls all
-of those functions.  Each function receives two arguments: the beginning
-and end of the part of the buffer being modified.  Note that if a
-particular modification hook function appears on several characters
-being modified by a single primitive, you can't predict how many times
-the function will be called.
-
-  Insertion of text does not, strictly speaking, change any existing
-character, so there is a special rule for insertion.  It compares the
-@code{read-only} properties of the two surrounding characters; if they
-are @code{eq}, then the insertion is not allowed.  Assuming insertion is
-allowed, it then gets the @code{modification-hooks} properties of those
-characters and calls all the functions in each of them.  (If a function
-appears on both characters, it may be called once or twice.)
-
-  The special properties @code{point-entered} and @code{point-left}
-record hook functions that report motion of point.  Each time point
-moves, Emacs compares these two property values:
-
-@itemize @bullet
-@item
-the @code{point-left} property of the character after the old location,
-and
-@item
-the @code{point-entered} property of the character after the new
-location.
-@end itemize
-
-@noindent
-If these two values differ, each of them is called (if not @code{nil})
-with two arguments: the old value of point, and the new one.
-
-  The same comparison is made for the characters before the old and new
-locations.  The result may be to execute two @code{point-left} functions
-(which may be the same function) and/or two @code{point-entered}
-functions (which may be the same function).  The @code{point-left}
-functions are always called before the @code{point-entered} functions.
-
-  A primitive function may examine characters at various positions
-without moving point to those positions.  Only an actual change in the
-value of point runs these hook functions.
-
-@section New Features for Files
-
-@itemize @bullet
-@item
-The new function @code{file-accessible-directory-p} tells you whether
-you can open files in a particular directory.  Specify as an argument
-either a directory name or a file name which names a directory file.
-The function returns @code{t} if you can open existing files in that
-directory.
-
-@item
-The new function @code{file-executable-p} returns @code{t} if its
-argument is the name of a file you have permission to execute.
-
-@item
-The function @code{file-truename} returns the ``true name'' of a
-specified file.  This is the name that you get by following symbolic
-links until none remain.  The argument must be an absolute file name.
-
-@item
-New functions @code{make-directory} and @code{delete-directory} create and
-delete directories.  They both take one argument, which is the name of
-the directory as a file.
-
-@item
-The function @code{read-file-name} now takes an additional argument
-which specifies an initial file name.  If you specify this argument,
-@code{read-file-name} inserts it along with the directory name.  It puts
-the cursor between the directory and the initial file name.
-
-The user can then use the initial file name unchanged, modify it, or
-simply kill it with @kbd{C-k}.
-
-If the variable @code{insert-default-directory} is @code{nil}, then the
-default directory is not inserted, and the new argument is ignored.
-
-@item
-The function @code{file-relative-name} does the inverse of
-expansion---it tries to return a relative name which is equivalent to
-@var{filename} when interpreted relative to @var{directory}.  (If such a
-relative name would be longer than the absolute name, it returns the
-absolute name instead.)
-
-@item
-The function @code{file-newest-backup} returns the name of the most
-recent backup file for @var{filename}, or @code{nil} that file has no
-backup files.
-
-@item
-The list returned by @code{file-attributes} now has 12 elements.  The
-12th element is the file system number of the file system that the file
-is in.  This element together with the file's inode number, which is the
-11th element, give enough information to distinguish any two files on
-the system---no two files can have the same values for both of these
-numbers.
-
-@item
-The new function @code{set-visited-file-modtime} updates the current
-buffer's recorded modification time from the visited file's time.
-
-This is useful if the buffer was not read from the file normally, or
-if the file itself has been changed for some known benign reason.
-
-If you give the function an argument, that argument specifies the new
-value for the recorded modification time.  The argument should be a list
-of the form @code{(@var{high} . @var{low})} or @code{(@var{high}
-@var{low})} containing two integers, each of which holds 16 bits of the
-time.  (This is the same format that @code{file-attributes} uses to
-return time values.)
-
-The new function @code{visited-file-modtime} returns the recorded last
-modification time, in that same format.
-
-@item
-The function @code{directory-files} now takes an optional fourth
-argument which, if non-@code{nil}, inhibits sorting the file names.
-Use this if you want the utmost possible speed and don't care what order
-the files are processed in.
-
-If the order of processing is at all visible to the user, then the user
-will probably be happier if you do sort the names.
-
-@item
-The variable @code{directory-abbrev-alist} contains an alist of
-abbreviations to use for file directories.  Each element has the form
-@code{(@var{from} . @var{to})}, and says to replace @var{from} with
-@var{to} when it appears in a directory name.  This replacement is done
-when setting up the default directory of a newly visited file.  The
-@var{from} string is actually a regular expression; it should always
-start with @samp{^}.
-
-You can set this variable in @file{site-init.el} to describe the
-abbreviations appropriate for your site.
-
-@item
-The function @code{abbreviate-file-name} applies abbreviations from
-@code{directory-abbrev-alist} to its argument, and substitutes @samp{~}
-for the user's home directory.
-
-Abbreviated directory names are useful for directories that are normally
-accessed through symbolic links.  If you think of the link's name as
-``the name'' of the directory, you can define it as an abbreviation for
-the directory's official name; then ordinarily Emacs will call that
-directory by the link name you normally use.
-
-@item
-@code{write-region} can write a given string instead of text from the
-buffer.  Use the string as the first argument (in place of the
-starting character position).
-
-You can supply a second file name as the fifth argument (@var{visit}).
-Use this to write the data to one file (the first argument,
-@var{filename}) while nominally visiting a different file (the fifth
-argument, @var{visit}).  The argument @var{visit} is used in the echo
-area message and also for file locking; @var{visit} is stored in
-@code{buffer-file-name}.
-
-@item
-The value of @code{write-file-hooks} does not change when you switch to
-a new major mode.  The intention is that these hooks have to do with
-where the file came from, and not with what it contains.
-
-@item
-There is a new hook variable for saving files:
-@code{write-contents-hooks}.  It works just like @code{write-file-hooks}
-except that switching to a new major mode clears it back to @code{nil}.
-Major modes should use this hook variable rather than
-@code{write-file-hooks}.
-
-@item
-The hook @code{after-save-buffer-hook} runs just after a buffer has been
-saved in its visited file.
-
-@item
-The new function @code{set-default-file-modes} sets the file protection
-for new files created with Emacs.  The argument must be an integer.  (It
-would be better to permit symbolic arguments like the @code{chmod}
-program, but that would take more work than this function merits.)
-
-Use the new function @code{default-file-modes} to read the current
-default file mode.
-
-@item
-Call the new function @code{unix-sync} to force all pending disk output
-to happen as soon as possible.
-@end itemize
-
-@section Making Certain File Names ``Magic''
-
-You can implement special handling for a class of file names.  You must
-supply a regular expression to define the class of names (all those
-which match the regular expression), plus a handler that implements all
-the primitive Emacs file operations for file names that do match.
-
-The value of @code{file-name-handler-alist} is a list of handlers,
-together with regular expressions that decide when to apply each
-handler.  Each element has the form @code{(@var{regexp}
-. @var{handler})}.  If a file name matches @var{regexp}, then all work
-on that file is done by calling @var{handler}.
-
-All the Emacs primitives for file access and file name transformation
-check the given file name against @code{file-name-handler-alist}, and
-call @var{handler} to do the work if appropriate.  The first argument
-given to @var{handler} is the name of the primitive; the remaining
-arguments are the arguments that were passed to that primitive.  (The
-first of these arguments is typically the file name itself.)  For
-example, if you do this:
-
-@example
-(file-exists-p @var{filename})
-@end example
-
-@noindent
-and @var{filename} has handler @var{handler}, then @var{handler} is
-called like this:
-
-@example
-(funcall @var{handler} 'file-exists-p @var{filename})
-@end example
-
-Here are the primitives that you can handle in this way:
-
-@quotation
-@code{add-name-to-file}, @code{copy-file}, @code{delete-directory},
-@code{delete-file}, @code{directory-file-name}, @code{directory-files},
-@code{dired-compress-file}, @code{dired-uncache},
-@code{expand-file-name}, @code{file-accessible-directory-p},
-@code{file-attributes}, @code{file-directory-p},
-@code{file-executable-p}, @code{file-exists-p}, @code{file-local-copy},
-@code{file-modes}, @code{file-name-all-completions},
-@code{file-name-as-directory}, @code{file-name-completion},
-@code{file-name-directory}, @code{file-name-nondirectory},
-@code{file-name-sans-versions}, @code{file-newer-than-file-p},
-@code{file-readable-p}, @code{file-symlink-p}, @code{file-writable-p},
-@code{insert-directory}, @code{insert-file-contents}, @code{load},
-@code{make-directory}, @code{make-symbolic-link}, @code{rename-file},
-@code{set-file-modes}, @code{set-visited-file-modtime},
-@code{unhandled-file-name-directory},
-@code{verify-visited-file-modtime}, @code{write-region}.
-@end quotation
-
-The handler function must handle all of the above operations, and
-possibly others to be added in the future.  Therefore, it should always
-reinvoke the ordinary Lisp primitive when it receives an operation it
-does not recognize.  Here's one way to do this:
-
-@smallexample
-(defun my-file-handler (operation &rest args)
-  ;; @r{First check for the specific operations}
-  ;; @r{that we have special handling for.}
-  (cond ((eq operation 'insert-file-contents) @dots{})
-        ((eq operation 'write-region) @dots{})
-        @dots{}
-        ;; @r{Handle any operation we don't know about.}
-        (t (let (file-name-handler-alist)
-             (apply operation args)))))
-@end smallexample
-
-The function @code{file-local-copy} copies file @var{filename} to the
-local site, if it isn't there already.  If @var{filename} specifies a
-``magic'' file name which programs outside Emacs cannot directly read or
-write, this copies the contents to an ordinary file and returns that
-file's name.
-
-If @var{filename} is an ordinary file name, not magic, then this function
-does nothing and returns @code{nil}.
-
-The function @code{unhandled-file-name-directory} is used to get a
-non-magic directory name from an arbitrary file name.  It uses the
-directory part of the specified file name if that is not magic.
-Otherwise, it asks the file name's handler what to do.
-
-@section Frames
-@cindex frame
-
-Emacs now supports multiple X windows via a new data type known as a
-@dfn{frame}.
-
-A frame is a rectangle on the screen that contains one or more Emacs
-windows.  Subdividing a frame works just like subdividing the screen in
-earlier versions of Emacs.
-
-@cindex terminal frame
-There are two kinds of frames: terminal frames and X window frames.
-Emacs creates one terminal frame when it starts up with no X display; it
-uses Termcap or Terminfo to display using characters.  There is no way
-to create another terminal frame after startup.  If Emacs has an X
-display, it does not make a terminal frame, and there is none.
-
-@cindex X window frame
-When you are using X windows, Emacs starts out with a single X window
-frame.  You can create any number of X window frames using
-@code{make-frame}.
-
-Use the predicate @code{framep} to determine whether a given Lisp object
-is a frame.
-
-The function @code{redraw-frame} redisplays the entire contents of a
-given frame.
-
-@subsection Creating and Deleting Frames
-
-Use @code{make-frame} to create a new frame.  This is the only primitive
-for creating frames.  In principle it could work under any window system
-which Emacs understands; the only one we support is X.
-
-@code{make-frame} takes just one argument, which is an alist
-specifying frame parameters.  Any parameters not mentioned in the
-argument alist default based on the value of @code{default-frame-alist};
-parameters not specified there default from the standard X defaults file
-and X resources.
-
-When you invoke Emacs, if you specify arguments for window appearance
-and so forth, these go into @code{default-frame-alist} and that is how
-they have their effect.
-
-You can specify the parameters for the initial startup X window frame by
-setting @code{initial-frame-alist} in your @file{.emacs} file.  If these
-parameters specify a separate minibuffer-only frame, and you have not
-created one, Emacs creates one for you, using the parameter values
-specified in @code{minibuffer-frame-alist}.
-
-You can specify the size and position of a frame using the frame
-parameters @code{left}, @code{top}, @code{height} and @code{width}.  You
-must specify either both size parameters or neither.  You must specify
-either both position parameters or neither.  The geometry parameters
-that you don't specify are chosen by the window manager in its usual
-fashion.
-
-The function @code{x-parse-geometry} converts a standard X-style
-geometry string to an alist which you can use as part of the argument to
-@code{make-frame}.
-
-Use the function @code{delete-frame} to eliminate a frame.  Frames are
-like buffers where deletion is concerned; a frame actually continues to
-exist as a Lisp object until it is deleted @emph{and} there are no
-references to it, but once it is deleted, it has no further effect on
-the screen.
-
-The function @code{frame-live-p} returns non-@code{nil} if the argument
-(a frame) has not been deleted.
-
-@subsection Finding All Frames
-
-The function @code{frame-list} returns a list of all the frames that have
-not been deleted.  It is analogous to @code{buffer-list}.  The list that
-you get is newly created, so modifying the list doesn't have any effect
-on the internals of Emacs.  The function @code{visible-frame-list} returns
-the list of just the frames that are visible.
-
-@code{next-frame} lets you cycle conveniently through all the frames from an
-arbitrary starting point.  Its first argument is a frame.  Its second
-argument @var{minibuf} says what to do about minibuffers:
-
-@table @asis
-@item @code{nil}
-Exclude minibuffer-only frames.
-@item a window
-Consider only the frames using that particular window as their
-minibuffer.
-@item anything else
-Consider all frames.
-@end table
-
-@subsection Frames and Windows
-
-All the non-minibuffer windows in a frame are arranged in a tree of
-subdivisions; the root of this tree is available via the function
-@code{frame-root-window}.  Each window is part of one and only one
-frame; you can get the frame with @code{window-frame}.
-
-At any time, exactly one window on any frame is @dfn{selected within the
-frame}.  You can get the frame's current selected window with
-@code{frame-selected-window}.  The significance of this designation is
-that selecting the frame selects for Emacs as a whole the window
-currently selected within that frame.
-
-Conversely, selecting a window for Emacs with @code{select-window} also
-makes that window selected within its frame.
-
-@subsection Frame Visibility
-
-A frame may be @dfn{visible}, @dfn{invisible}, or @dfn{iconified}.  If
-it is invisible, it doesn't show in the screen, not even as an icon.
-You can set the visibility status of a frame with
-@code{make-frame-visible}, @code{make-frame-invisible}, and
-@code{iconify-frame}.  You can examine the visibility status with
-@code{frame-visible-p}---it returns @code{t} for a visible frame,
-@code{nil} for an invisible frame, and @code{icon} for an iconified
-frame.
-
-@subsection Selected Frame
-
-At any time, one frame in Emacs is the @dfn{selected frame}.  The selected
-window always resides on the selected frame.
-
-@defun selected-frame
-This function returns the selected frame.
-@end defun
-
-The X server normally directs keyboard input to the X window that the
-mouse is in.  Some window managers use mouse clicks or keyboard events
-to @dfn{shift the focus} to various X windows, overriding the normal
-behavior of the server.
-
-Lisp programs can switch frames ``temporarily'' by calling the function
-@code{select-frame}.  This does not override the window manager; rather,
-it escapes from the window manager's control until that control is
-somehow reasserted.  The function takes one argument, a frame, and
-selects that frame.  The selection lasts until the next time the user
-does something to select a different frame, or until the next time this
-function is called.
-
-Emacs cooperates with the X server and the window managers by arranging
-to select frames according to what the server and window manager ask
-for.  It does so by generating a special kind of input event, called a
-@dfn{focus} event.  The command loop handles a focus event by calling
-@code{internal-select-frame}.
-
-@subsection Frame Size and Position
-
-The new functions @code{frame-height} and @code{frame-width} return the
-height and width of a specified frame (or of the selected frame),
-measured in characters.
-
-The new functions @code{frame-pixel-height} and @code{frame-pixel-width}
-return the height and width of a specified frame (or of the selected
-frame), measured in pixels.
-
-The new functions @code{frame-char-height} and @code{frame-char-width}
-return the height and width of a character in a specified frame (or in
-the selected frame), measured in pixels.
-
-@code{set-frame-size} sets the size of a frame, measured in characters;
-its arguments are @var{frame}, @var{cols} and @var{rows}.  To set the
-size with values measured in pixels, you can use
-@code{modify-frame-parameters}.
-
-The function @code{set-frame-position} sets the position of the top left
-corner of a frame.  Its arguments are @var{frame}, @var{left} and
-@var{top}.
-
-@ignore
-New functions @code{set-frame-height} and @code{set-frame-width} set the
-size of a specified frame.  The frame is the first argument; the size is
-the second.
-@end ignore
-
-@subsection Frame Parameters
-
-A frame has many parameters that affect how it displays.  Use the
-function @code{frame-parameters} to get an alist of all the parameters
-of a given frame.  To alter parameters, use
-@code{modify-frame-parameters}, which takes two arguments: the frame to
-modify, and an alist of parameters to change and their new values.  Each
-element of @var{alist} has the form @code{(@var{parm} . @var{value})},
-where @var{parm} is a symbol.  Parameters that aren't meaningful are
-ignored.  If you don't mention a parameter in @var{alist}, its value
-doesn't change.
-
-Just what parameters a frame has depends on what display mechanism it
-uses.  Here is a table of the parameters of an X
-window frame:
-
-@table @code
-@item name
-The name of the frame.
-
-@item left
-The screen position of the left edge.
-
-@item top
-The screen position of the top edge.
-
-@item height
-The height of the frame contents, in pixels.
-
-@item width
-The width of the frame contents, in pixels.
-
-@item window-id
-The number of the X window for the frame.
-
-@item minibuffer
-Whether this frame has its own minibuffer.
-@code{t} means yes, @code{none} means no, 
-@code{only} means this frame is just a minibuffer,
-a minibuffer window (in some other frame)
-means the new frame uses that minibuffer.
-
-@item font
-The name of the font for the text.
-
-@item foreground-color
-The color to use for the inside of a character.
-Use strings to designate colors;
-the X server defines the meaningful color names.
-
-@item background-color
-The color to use for the background of text.
-
-@item mouse-color
-The color for the mouse cursor.
-
-@item cursor-color
-The color for the cursor that shows point.
-
-@item border-color
-The color for the border of the frame.
-
-@item cursor-type
-The way to display the cursor.  There are two legitimate values:
-@code{bar} and @code{box}.  The value @code{bar} specifies a vertical
-bar between characters as the cursor.  The value @code{box} specifies an
-ordinary black box overlaying the character after point; that is the
-default.
-
-@item icon-type
-Non-@code{nil} for a bitmap icon, @code{nil} for a text icon.
-
-@item border-width
-The width in pixels of the window border.
-
-@item internal-border-width
-The distance in pixels between text and border.
-
-@item auto-raise
-Non-@code{nil} means selecting the frame raises it.
-
-@item auto-lower
-Non-@code{nil} means deselecting the frame lowers it.
-
-@item vertical-scroll-bars
-Non-@code{nil} gives the frame a scroll bar
-for vertical scrolling.
-
-@ignore
-@item horizontal-scroll-bars
-Non-@code{nil} gives the frame a scroll bar
-for horizontal scrolling.
-@end ignore
-@end table
-
-@subsection Minibufferless Frames
-
-Normally, each frame has its own minibuffer window at the bottom, which
-is used whenever that frame is selected.  However, you can also create
-frames with no minibuffers.  These frames must use the minibuffer window
-of some other frame.
-
-The variable @code{default-minibuffer-frame} specifies where to find a
-minibuffer for frames created without minibuffers of their own.  Its
-value should be a frame which does have a minibuffer.
-
-You can also specify a minibuffer window explicitly when you create a
-frame; then @code{default-minibuffer-frame} is not used.
-
-@section X Window System Features
-
-@itemize @bullet
-@item
-The new functions @code{mouse-position} and @code{set-mouse-position} give
-access to the current position of the mouse.
-
-@code{mouse-position} returns a description of the position of the mouse.
-The value looks like @code{(@var{frame} @var{x} . @var{y})}, where @var{x}
-and @var{y} are measured in pixels relative to the top left corner of
-the inside of @var{frame}.
-
-@code{set-mouse-position} takes three arguments, @var{frame}, @var{x}
-and @var{y}, and warps the mouse cursor to that location on the screen.
-
-@item
-@code{track-mouse} is a new special form for tracking mouse motion.
-Use it in definitions of mouse clicks that want pay to attention to
-the motion of the mouse, not just where the buttons are pressed and
-released.  Here is how to use it:
-
-@example
-(track-mouse @var{body}@dots{})
-@end example
-
-While @var{body} executes, mouse motion generates input events just as mouse
-clicks do.  @var{body} can read them with @code{read-event} or
-@code{read-key-sequence}.
-
-@code{track-mouse} returns the value of the last form in @var{body}.
-
-The format of these events is described under ``New Input Event Formats.''
-
-@item
-@code{x-set-selection} sets a ``selection'' in the X server.
-It takes two arguments: a selection type @var{type}, and the value to
-assign to it, @var{data}.  If @var{data} is @code{nil}, it means to
-clear out the selection.  Otherwise, @var{data} may be a string, a
-symbol, an integer (or a cons of two integers or list of two integers),
-or a cons of two markers pointing to the same buffer.  In the last case,
-the selection is considered to be the text between the markers.  The
-data may also be a vector of valid non-vector selection values.
-
-Each possible @var{type} has its own selection value, which changes
-independently.  The usual values of @var{type} are @code{PRIMARY} and
-@code{SECONDARY}; these are symbols with upper-case names, in accord
-with X protocol conventions.  The default is @code{PRIMARY}.
-
-To get the value of the selection, call @code{x-get-selection}.  This
-function accesses selections set up by Emacs and those set up by other X
-clients.  It takes two optional arguments, @var{type} and
-@var{data-type}.  The default for @var{type} is @code{PRIMARY}.
-
-The @var{data-type} argument specifies the form of data conversion to
-use; meaningful values include @code{TEXT}, @code{STRING},
-@code{TARGETS}, @code{LENGTH}, @code{DELETE}, @code{FILE_NAME},
-@code{CHARACTER_POSITION}, @code{LINE_NUMBER}, @code{COLUMN_NUMBER},
-@code{OWNER_OS}, @code{HOST_NAME}, @code{USER}, @code{CLASS},
-@code{NAME}, @code{ATOM}, and @code{INTEGER}.  (These are symbols with
-upper-case names in accord with X Windows conventions.)
-The default for @var{data-type} is @code{STRING}.
-
-@item
-The X server has a set of numbered @dfn{cut buffers} which can store text
-or other data being moved between applications.  Use
-@code{x-get-cut-buffer} to get the contents of a cut buffer; specify the
-cut buffer number as argument.  Use @code{x-set-cut-buffer} with
-argument @var{string} to store a new string into the first cut buffer
-(moving the other values down through the series of cut buffers,
-kill-ring-style).
-
-Cut buffers are considered obsolete, but Emacs supports them for the
-sake of X clients that still use them.
-
-@item
-You can close the connection with the X server with the function
-@code{x-close-current-connection}.  This takes no arguments.
-
-Then you can connect to a different X server with
-@code{x-open-connection}.  The first argument, @var{display}, is the
-name of the display to connect to.
-
-The optional second argument @var{xrm-string} is a string of resource
-names and values, in the same format used in the @file{.Xresources}
-file.  The values you specify override the resource values recorded in
-the X server itself.  Here's an example of what this string might look
-like:
-
-@example
-"*BorderWidth: 3\n*InternalBorder: 2\n"
-@end example
-
-@item
-A series of new functions give you information about the X server and
-the screen you are using.
-
-@table @code
-@item x-display-screens
-The number of screens associated with the current display.
-
-@item x-server-version
-The version numbers of the X server in use.
-
-@item x-server-vendor
-The vendor supporting the X server in use.
-
-@item x-display-pixel-height
-The height of this X screen in pixels.
-
-@item x-display-mm-height
-The height of this X screen in millimeters.
-
-@item x-display-pixel-width
-The width of this X screen in pixels.
-
-@item x-display-mm-width
-The width of this X screen in millimeters.
-
-@item x-display-backing-store
-The backing store capability of this screen.  Values can be the symbols
-@code{always}, @code{when-mapped}, or @code{not-useful}.
-
-@item x-display-save-under
-Non-@code{nil} if this X screen supports the SaveUnder feature.
-
-@item x-display-planes
-The number of planes this display supports.
-
-@item x-display-visual-class
-The visual class for this X screen.  The value is one of the symbols
-@code{static-gray}, @code{gray-scale}, @code{static-color},
-@code{pseudo-color}, @code{true-color}, and @code{direct-color}.
-
-@item x-display-color-p
-@code{t} if the X screen in use is a color screen.
-
-@item x-display-color-cells
-The number of color cells this X screen supports.
-@end table
-
-There is also a variable @code{x-no-window-manager}, whose value is
-@code{t} if no X window manager is in use.
-
-@item
-The function @code{x-synchronize} enables or disables an X Windows
-debugging mode: synchronous communication.  It takes one argument,
-non-@code{nil} to enable the mode and @code{nil} to disable.
-
-In synchronous mode, Emacs waits for a response to each X protocol
-command before doing anything else.  This means that errors are reported
-right away, and you can directly find the erroneous command.
-Synchronous mode is not the default because it is much slower.
-
-@item
-The function @code{x-get-resource} retrieves a resource value from the X
-Windows defaults database.  Its three arguments are @var{attribute},
-@var{name} and @var{class}.  It searches using a key of the form
-@samp{@var{instance}.@var{attribute}}, with class @samp{Emacs}, where
-@var{instance} is the name under which Emacs was invoked.
-
-The optional arguments @var{component} and @var{subclass} add to the key
-and the class, respectively.  You must specify both of them or neither.
-If you specify them, the key is
-@samp{@var{instance}.@var{component}.@var{attribute}}, and the class is
-@samp{Emacs.@var{subclass}}.
-
-@item
-@code{x-display-color-p} returns @code{t} if you are using an X server
-with a color display, and @code{nil} otherwise.
-
-@c ??? Name being changed from x-defined-color.
-@code{x-color-defined-p} takes as argument a string describing a color; it
-returns @code{t} if the display supports that color.  (If the color is
-@code{"black"} or @code{"white"} then even black-and-white displays
-support it.)
-
-@item
-@code{x-popup-menu} has been generalized.  It now accepts a keymap as
-the @var{menu} argument.  Then the menu items are the prompt strings of
-individual key bindings, and the item values are the keys which have
-those bindings.
-
-You can also supply a list of keymaps as the first argument; then each
-keymap makes one menu pane (but keymaps that don't provide any menu
-items don't appear in the menu at all).
-
-@code{x-popup-menu} also accepts a mouse button event as the
-@var{position} argument.  Then it displays the menu at the location at
-which the event took place.  This is convenient for mouse-invoked
-commands that pop up menus.
-
-@ignore
-@item
-x-pointer-shape, x-nontext-pointer-shape, x-mode-pointer-shape.
-@end ignore
-
-@item
-You can use the function @code{x-rebind-key} to change the sequence of
-characters generated by the X server for one of the keyboard keys.
-
-The first two arguments, @var{keycode} and @var{shift-mask}, should be
-numbers representing the keyboard code and shift mask respectively.
-They specify what key to change.
-
-The third argument, @var{newstring}, is the new definition of the key.
-It is a sequence of characters that the key should produce as input.
-
-The shift mask value is a combination of bits according to this table:
-
-@table @asis
-@item 8
-Control
-@item 4
-Meta
-@item 2
-Shift
-@item 1
-Shift Lock
-@end table
-
-If you specify @code{nil} for @var{shift-mask}, then the key specified
-by @var{keycode} is redefined for all possible shift combinations.
-
-For the possible values of @var{keycode} and their meanings, see the
-file @file{/usr/lib/Xkeymap.txt}.  Keep in mind that the codes in that
-file are in octal!
-
-@ignore @c Presumably this is already fixed
-NOTE: due to an X bug, this function will not take effect unless the
-user has a @file{~/.Xkeymap} file.  (See the documentation for the
-@code{keycomp} program.)  This problem will be fixed in X version 11.
-@end ignore
-
-The related function @code{x-rebind-keys} redefines a single keyboard
-key, specifying the behavior for each of the 16 shift masks
-independently.  The first argument is @var{keycode}, as in
-@code{x-rebind-key}.  The second argument @var{strings} is a list of 16
-elements, one for each possible shift mask value; each element says how
-to redefine the key @var{keycode} with the corresponding shift mask
-value.  If an element is a string, it is the new definition.  If an
-element is @code{nil}, the definition does not change for that shift
-mask.
-
-@item
-The function @code{x-parse-geometry} parses a string specifying window
-size and position in the usual X format.  It returns an alist describing
-which parameters were specified, and the values that were given for
-them.
-
-The elements of the alist look like @code{(@var{parameter} .
-@var{value})}.  The possible @var{parameter} values are @code{left},
-@code{top}, @code{width}, and @code{height}.
-@end itemize
-
-@section New Window Features
-
-@itemize @bullet
-@item
-The new function @code{window-at} tells you which window contains a
-given horizontal and vertical position on a specified frame.  Call it
-with three arguments, like this:
-
-@example
-(window-at @var{x} @var{column} @var{frame})
-@end example
-
-The function returns the window which contains that cursor position in
-the frame @var{frame}.  If you omit @var{frame}, the selected frame is
-used.
-
-@item
-The function @code{coordinates-in-window-p} takes two arguments and
-checks whether a particular frame position falls within a particular
-window.
-
-@example
-(coordinates-in-window-p @var{coordinates} @var{window})
-@end example
-
-The argument @var{coordinates} is a cons cell of this form:
-
-@example
-(@var{x} . @var{y})
-@end example
-
-@noindent
-The two coordinates are measured in characters, and count from the top
-left corner of the screen or frame.
-
-The value of the function tells you what part of the window the position
-is in.  The possible values are:
-
-@table @code
-@item (@var{relx} . @var{rely})
-The coordinates are inside @var{window}.  The numbers @var{relx} and
-@var{rely} are equivalent window-relative coordinates, counting from 0
-at the top left corner of the window.
-
-@item mode-line
-The coordinates are in the mode line of @var{window}.
-
-@item vertical-split
-The coordinates are in the vertical line between @var{window} and its
-neighbor to the right.
-
-@item nil
-The coordinates are not in any sense within @var{window}.
-@end table
-
-You need not specify a frame when you call
-@code{coordinates-in-window-p}, because it assumes you mean the frame
-which window @var{window} is on.
-
-@item
-The function @code{minibuffer-window} now accepts a frame as argument
-and returns the minibuffer window used for that frame.  If you don't
-specify a frame, the currently selected frame is used.  The minibuffer
-window may be on the frame in question, but if that frame has no
-minibuffer of its own, it uses the minibuffer window of some other
-frame, and @code{minibuffer-window} returns that window.
-
-@item
-Use @code{window-live-p} to test whether a window is still alive (that
-is, not deleted).
-
-@item
-Use @code{window-minibuffer-p} to determine whether a given window is a
-minibuffer or not.  It no longer works to do this by comparing the
-window with the result of @code{(minibuffer-window)}, because there can
-be more than one minibuffer window at a time (if you have multiple
-frames).
-
-@item
-If you set the variable @code{pop-up-frames} non-@code{nil}, then the
-functions to show something ``in another window'' actually create a new
-frame for the new window.  Thus, you will tend to have a frame for each
-window, and you can easily have a frame for each buffer.
-
-The value of the variable @code{pop-up-frame-function} controls how new
-frames are made.  The value should be a function which takes no
-arguments and returns a frame.  The default value is a function which
-creates a frame using parameters from @code{pop-up-frame-alist}.
-
-@item
-@code{display-buffer} is the basic primitive for finding a way to show a
-buffer on the screen.  You can customize its behavior by storing a
-function in the variable @code{display-buffer-function}.  If this
-variable is non-@code{nil}, then @code{display-buffer} calls it to do
-the work.  Your function should accept two arguments, as follows:
-
-@table @var
-@item buffer
-The buffer to be displayed.
-
-@item flag
-A flag which, if non-@code{nil}, means you should find another window to
-display @var{buffer} in, even if it is already visible in the selected
-window.
-@end table
-
-The function you supply will be used by commands such as
-@code{switch-to-buffer-other-window} and @code{find-file-other-window}
-as well as for your own calls to @code{display-buffer}.
-
-@item
-@code{delete-window} now gives all of the deleted window's screen space
-to a single neighboring window.  Likewise, @code{enlarge-window} takes
-space from only one neighboring window until that window disappears;
-only then does it take from another window.
-
-@item
-@code{next-window} and @code{previous-window} accept another argument,
-@var{all-frames}.
-
-These functions now take three optional arguments: @var{window},
-@var{minibuf} and @var{all-frames}.  @var{window} is the window to start
-from (@code{nil} means use the selected window).  @var{minibuf} says
-whether to include the minibuffer in the windows to cycle through:
-@code{t} means yes, @code{nil} means yes if it is active, and anything
-else means no.
-
-Normally, these functions cycle through all the windows in the
-selected frame, plus the minibuffer used by the selected frame even if
-it lies in some other frame.
-
-If @var{all-frames} is @code{t}, then these functions cycle through
-all the windows in all the frames that currently exist.  If
-@var{all-frames} is neither @code{t} nor @code{nil}, then they limit
-themselves strictly to the windows in the selected frame, excluding the
-minibuffer in use if it lies in some other frame.
-
-@item
-The functions @code{get-lru-window} and @code{get-largest-window} now
-take an optional argument @var{all-frames}.  If it is non-@code{nil},
-the functions consider all windows on all frames.  Otherwise, they
-consider just the windows on the selected frame.
-
-Likewise, @code{get-buffer-window} takes an optional second argument
-@var{all-frames}.
-
-@item
-The variable @code{other-window-scroll-buffer} specifies which buffer
-@code{scroll-other-window} should scroll.
-
-@item
-You can now mark a window as ``dedicated'' to its buffer.
-Then Emacs will not try to use that window for any other buffer
-unless you explicitly request it.
-
-Use the new function @code{set-window-dedicated-p} to set the dedication
-flag of a window @var{window} to the value @var{flag}.  If @var{flag} is
-@code{t}, this makes the window dedicated.  If @var{flag} is
-@code{nil}, this makes the window non-dedicated.
-
-Use @code{window-dedicated-p} to examine the dedication flag of a
-specified window.
-
-@item
-The new function @code{walk-windows} cycles through all visible
-windows, calling @code{proc} once for each window with the window as
-its sole argument.
-
-The optional second argument @var{minibuf} says whether to include minibuffer
-windows.  A value of @code{t} means count the minibuffer window even if
-not active.  A value of @code{nil} means count it only if active.  Any
-other value means not to count the minibuffer even if it is active.
-
-If the optional third argument @var{all-frames} is @code{t}, that means
-include all windows in all frames.  If @var{all-frames} is @code{nil},
-it means to cycle within the selected frame, but include the minibuffer
-window (if @var{minibuf} says so) that that frame uses, even if it is on
-another frame.  If @var{all-frames} is neither @code{nil} nor @code{t},
-@code{walk-windows} sticks strictly to the selected frame.
-
-@item
-The function @code{window-end} is a counterpart to @code{window-start}:
-it returns the buffer position of the end of the display in a given
-window (or the selected window).
-
-@item
-The function @code{window-configuration-p} returns non-@code{nil} when
-given an object that is a window configuration (such as is returned by
-@code{current-window-configuration}).
-@end itemize
-
-@section Display Features
-
-@itemize @bullet
-@item
-@code{baud-rate} is now a variable rather than a function.  This is so
-you can set it to reflect the effective speed of your terminal, when the
-system doesn't accurately know the speed.
-
-@item
-You can now remove any echo area message and make the minibuffer
-visible.  To do this, call @code{message} with @code{nil} as the only
-argument.  This clears any existing message, and lets the current
-minibuffer contents show through.  Previously, there was no reliable way
-to make sure that the minibuffer contents were visible.
-
-@item
-The variable @code{temp-buffer-show-hook} has been renamed
-@code{temp-buffer-show-function}, because its value is a single function
-(of one argument), not a normal hook.
-
-@item
-The new function @code{force-mode-line-update} causes redisplay
-of the current buffer's mode line.
-@end itemize
-
-@section Display Tables
-
-@cindex display table
-You can use the @dfn{display table} feature to control how all 256
-possible character codes display on the screen.  This is useful for
-displaying European languages that have letters not in the ASCII
-character set.
-
-The display table maps each character code into a sequence of
-@dfn{glyphs}, each glyph being an image that takes up one character
-position on the screen.  You can also define how to display each glyph
-on your terminal, using the @dfn{glyph table}.
-
-@subsection Display Tables Proper
-
-Use @code{make-display-table} to create a display table.  The table
-initially has @code{nil} in all elements.
-
-A display table is actually an array of 261 elements.  The first 256
-elements of a display table control how to display each possible text
-character.  The value should be @code{nil} or a vector (which is a
-sequence of glyphs; see below).  @code{nil} as an element means to
-display that character following the usual display conventions.
-
-The remaining five elements of a display table serve special purposes
-(@code{nil} means use the default stated below):
-
-@table @asis
-@item 256
-The glyph for the end of a truncated screen line (the default for this
-is @samp{\}).
-@item 257
-The glyph for the end of a continued line (the default is @samp{$}).
-@item 258
-The glyph for the indicating an octal character code (the default is
-@samp{\}).
-@item 259
-The glyph for indicating a control characters (the default is @samp{^}).
-@item 260
-The vector of glyphs for indicating the presence of invisible lines (the
-default is @samp{...}).
-@end table
-
-Each buffer typically has its own display table.  The display table for
-the current buffer is stored in @code{buffer-display-table}.  (This
-variable automatically becomes local if you set it.)  If this variable
-is @code{nil}, the value of @code{standard-display-table} is used in
-that buffer.
-
-Each window can have its own display table, which overrides the display
-table of the buffer it is showing.
-
-If neither the selected window nor the current buffer has a display
-table, and if @code{standard-display-table} is @code{nil}, then Emacs
-uses the usual display conventions:
-
-@itemize @bullet
-@item
-Character codes 32 through 127 map to glyph codes 32 through 127.
-@item
-Codes 0 through 31 map to sequences of two glyphs, where the first glyph
-is the ASCII code for @samp{^}.
-@item
-Character codes 128 through 255 map to sequences of four glyphs, where
-the first glyph is the ASCII code for @samp{\}, and the others represent
-digits.
-@end itemize
-
-The usual display conventions are also used for any character whose
-entry in the active display table is @code{nil}.  This means that when
-you set up a display table, you need not specify explicitly what to do
-with each character, only the characters for which you want unusual
-behavior.
-
-@subsection Glyphs
-
-@cindex glyph
-A glyph stands for an image that takes up a single character position on
-the screen.  A glyph is represented in Lisp as an integer.
-
-@cindex glyph table
-The meaning of each integer, as a glyph, is defined by the glyph table,
-which is the value of the variable @code{glyph-table}.  It should be a
-vector; the @var{g}th element defines glyph code @var{g}.  The possible
-definitions of a glyph code are:
-
-@table @var
-@item integer
-Define this glyph code as an alias for code @var{integer}.
-This is used with X Windows to specify a face code.
-
-@item string
-Send the characters in @var{string} to the terminal to output this
-glyph.  This alternative is available only for character terminals, not
-with X.
-
-@item @code{nil}
-This glyph is simple.  On an ordinary terminal, the glyph code mod 256
-is the character to output.  With X, the glyph code mod 256 is character
-to output, and the glyph code divided by 256 specifies the @dfn{face
-code} to use while outputting it.
-@end table
-
-Any glyph code beyond the length of the glyph table is automatically simple.
-
-If @code{glyph-table} is @code{nil}, then all possible glyph codes are
-simple.
-
-A @dfn{face} is a named combination of a font and a pair of colors
-(foreground and background).  A glyph code can specify a face id number
-to use for displaying that glyph.
-
-@subsection ISO Latin 1
-
-If you have a terminal that can handle the entire ISO Latin 1 character
-set, you can arrange to use that character set as follows:
-
-@example
-(standard-display-european 1)
-@end example
-
-If you are editing buffers written in the ISO Latin 1 character set and
-your terminal doesn't handle anything but ASCII, you can load the file
-@code{iso-ascii} to set up a display table which makes the other ISO
-characters display as sequences of ASCII characters.  For example, the
-character ``o with umlaut'' displays as @samp{@{"o@}}.
-
-Some European countries have terminals that don't support ISO Latin 1
-but do support the special characters for that country's language.  You
-can define a display table to work one language using such terminals.
-For an example, see @file{lisp/iso-swed.el}, which handles certain
-Swedish terminals.
-
-You can load the appropriate display table for your terminal
-automatically by writing a terminal-specific Lisp file for the terminal
-type.
-
-@section Overlays
-@cindex overlays
-
-You can use @dfn{overlays} to alter the appearance of a buffer's text on
-the screen.  An overlay is an object which belongs to a particular
-buffer, and has a specified beginning and end.  It also has properties
-which you can examine and set; these affect the display of the text
-within the overlay.
-
-@subsection Overlay Properties
-
-Overlay properties are like text properties in some respects, but the
-differences are more important than the similarities.  Text properties
-are considered a part of the text; overlays are specifically considered
-not to be part of the text.  Thus, copying text between various buffers
-and strings preserves text properties, but does not try to preserve
-overlays.  Changing a buffer's text properties marks the buffer as
-modified, while moving an overlay or changing its properties does not.
-
-@table @code
-@item face
-@kindex face
-This property specifies a face for displaying the text within the overlay.
-
-@item priority
-@kindex priority
-This property's value (which should be a nonnegative number) determines
-the priority of the overlay.  The priority matters when two or more
-overlays cover the same character and both specify a face for display;
-the one whose @code{priority} value is larger takes priority over the
-other, and its face attributes override the face attributes of the lower
-priority overlay.
-
-Currently, all overlays take priority over text properties.  Please
-avoid using negative priority values, as we have not yet decided just
-what they should mean.
-
-@item window
-@kindex window
-If the @code{window} property is non-@code{nil}, then the overlay
-applies only on that window.
-@end table
-
-@subsection Overlay Functions
-
-Use the functions @code{overlay-get} and @code{overlay-put}
-to access and set the properties of an overlay.
-They take arguments like @code{get} and @code{put}, except
-that the first argument is an overlay rather than a symbol.
-
-To create an overlay, call @code{(make-overlay @var{start} @var{end})}.
-You can specify the buffer as the third argument if you wish.
-To delete one, use @code{delete-overlay}.
-
-Use @code{overlay-start}, @code{overlay-end} and @code{overlay-buffer}
-to examine the location and range of an overlay.  Use @code{move-overlay}
-to change them; its arguments are @var{overlay}, @var{start}, @var{end}
-and (optionally) the buffer.
-
-There are two functions to search for overlays: @code{overlays-at} and
-@code{next-overlay-change}.  @code{overlays-at} returns a list of all
-the overlays containing a particular position.
-@code{(next-overlay-change @var{pos})} returns the position of the next
-overlay beginning or end following @var{pos}.
-
-@section Faces
-
-A @dfn{face} is a named collection of graphical attributes: font,
-foreground color, background color and optional underlining.  Faces
-control the display of text on the screen.
-
-Each face has its own @dfn{face id number} which distinguishes faces at
-low levels within Emacs.  However, for most purposes, you can refer to
-faces in Lisp programs by their names.
-
-Each face name is meaningful for all frames, and by default it has the
-same meaning in all frames.  But you can arrange to give a particular
-face name a special meaning in one frame if you wish.
-
-@subsection Choosing a Face for Display
-
-Here are all the ways to specify which face to use for display of text:
-
-@itemize @bullet
-@item
-With defaults.  Each frame has a @dfn{default face}, whose id number is
-zero, which is used for all text that doesn't somehow specify another
-face.
-
-@item
-With text properties.  A character may have a @code{face} property; if so,
-it's displayed with that face.  If the character has a @code{mouse-face}
-property, that is used instead of the @code{face} property when the mouse
-is ``near enough'' to the character.
-
-@item
-With overlays.  An overlay may have @code{face} and @code{mouse-face}
-properties too; they apply to all the text covered by the overlay.
-
-@item
-With special glyphs.  Each glyph can specify a particular face id
-number.
-@end itemize
-
-  If these various sources together specify more than one face for a
-particular character, Emacs merges the attributes of the various faces
-specified.  The attributes of the faces of special glyphs come first;
-then come attributes of faces from overlays, followed by those from text
-properties, and last the default face.
-
-  When multiple overlays cover one character, an overlay with higher
-priority overrides those with lower priority.
-
-  If an attribute such as the font or a color is not specified in any of
-the above ways, the frame's own font or color is used.
-
-  @xref{Face Functions,, Face Functions, elisp, The Emacs Lisp Reference
-Manual}, for functions to create and change faces.
-
-@section New Input Event Formats
-
-Mouse clicks, mouse movements and function keys no longer appear in the
-input stream as characters; instead, other kinds of Lisp objects
-represent them as input.
-
-@itemize @bullet
-@item
-An ordinary input character event consists of a @dfn{basic code} between
-0 and 255, plus any or all of these @dfn{modifier bits}:
-
-@table @asis
-@item meta
-The 2**23 bit in the character code indicates a character
-typed with the meta key held down.
-
-@item control
-The 2**22 bit in the character code indicates a non-@sc{ASCII}
-control character.
-
-@sc{ASCII} control characters such as @kbd{C-a} have special basic
-codes of their own, so Emacs needs no special bit to indicate them.
-Thus, the code for @kbd{C-a} is just 1.
-
-But if you type a control combination not in @sc{ASCII}, such as
-@kbd{%} with the control key, the numeric value you get is the code
-for @kbd{%} plus 2**22 (assuming the terminal supports non-@sc{ASCII}
-control characters).
-
-@item shift
-The 2**21 bit in the character code indicates an @sc{ASCII} control
-character typed with the shift key held down.
-
-For letters, the basic code indicates upper versus lower case; for
-digits and punctuation, the shift key selects an entirely different
-character with a different basic code.  In order to keep within
-the @sc{ASCII} character set whenever possible, Emacs avoids using
-the 2**21 bit for those characters.
-
-However, @sc{ASCII} provides no way to distinguish @kbd{C-A} from
-@kbd{C-a}, so Emacs uses the 2**21 bit in @kbd{C-A} and not in
-@kbd{C-a}.
-
-@item hyper
-The 2**20 bit in the character code indicates a character
-typed with the hyper key held down.
-
-@item super
-The 2**19 bit in the character code indicates a character
-typed with the super key held down.
-
-@item alt
-The 2**18 bit in the character code indicates a character typed with
-the alt key held down.  (On some terminals, the key labeled @key{ALT}
-is actually the meta key.)
-@end table
-
-In the future, Emacs may support a larger range of basic codes.  We may
-also move the modifier bits to larger bit numbers.  Therefore, you
-should avoid mentioning specific bit numbers in your program.  Instead,
-the way to test the modifier bits of a character is with the function
-@code{event-modifiers} (see below).
-
-@item
-Function keys are represented as symbols.  The symbol's name is
-the function key's label.  For example, pressing a key labeled @key{F1}
-places the symbol @code{f1} in the input stream.
-
-There are a few exceptions to the symbol naming convention:
-
-@table @asis
-@item @code{kp-add}, @code{kp-decimal}, @code{kp-divide}, @dots{}
-Keypad keys (to the right of the regular keyboard).
-@item @code{kp-0}, @code{kp-1}, @dots{}
-Keypad keys with digits.
-@item @code{kp-f1}, @code{kp-f2}, @code{kp-f3}, @code{kp-f4}
-Keypad PF keys.
-@item @code{left}, @code{up}, @code{right}, @code{down}
-Cursor arrow keys
-@end table
-
-You can use the modifier keys @key{CTRL}, @key{META}, @key{HYPER},
-@key{SUPER}, @key{ALT} and @key{SHIFT} with function keys.  The way
-to represent them is with prefixes in the symbol name:
-
-@table @samp
-@item A-
-The alt modifier.
-@item C-
-The control modifier.
-@item H-
-The hyper modifier.
-@item M-
-The meta modifier.
-@item s-
-The super modifier.
-@item S-
-The shift modifier.
-@end table
-
-Thus, the symbol for the key @key{F3} with @key{META} held down is
-@kbd{M-@key{F3}}.  When you use more than one prefix, we recommend you
-write them in alphabetical order (though the order does not matter in
-arguments to the key-binding lookup and modification functions).
-
-@item
-Mouse events are represented as lists.
-
-If you press a mouse button and release it at the same location, this
-generates a ``click'' event.  Mouse click events have this form:
-
-@example
-(@var{button-symbol}
- (@var{window} (@var{column} . @var{row})
-  @var{buffer-pos} @var{timestamp}))
-@end example
-
-Here is what the elements normally mean:
-
-@table @var
-@item button-symbol
-indicates which mouse button was used.  It is one of the symbols
-@code{mouse-1}, @code{mouse-2}, @dots{}, where the buttons are normally
-numbered left to right.
-
-You can also use prefixes @samp{A-}, @samp{C-}, @samp{H-}, @samp{M-},
-@samp{S-} and @samp{s-} for modifiers alt, control, hyper, meta, shift
-and super, just as you would with function keys.
-
-@item window
-is the window in which the click occurred.
-
-@item column
-@itemx row
-are the column and row of the click, relative to the top left corner of
-@var{window}, which is @code{(0 . 0)}.
-
-@item buffer-pos
-is the buffer position of the character clicked on.
-
-@item timestamp
-is the time at which the event occurred, in milliseconds.  (Since this
-value wraps around the entire range of Emacs Lisp integers in about five
-hours, it is useful only for relating the times of nearby events.)
-@end table
-
-The meanings of @var{buffer-pos}, @var{row} and @var{column} are
-somewhat different when the event location is in a special part of the
-screen, such as the mode line or a scroll bar.
-
-If the position is in the window's scroll bar, then @var{buffer-pos} is
-the symbol @code{vertical-scroll-bar}, and the pair @code{(@var{column}
-. @var{row})} is replaced with a pair @code{(@var{portion}
-. @var{whole})}, where @var{portion} is the distance of the click from
-the top or left end of the scroll bar, and @var{whole} is the length of
-the entire scroll bar.
-
-If the position is on a mode line or the vertical line separating
-@var{window} from its neighbor to the right, then @var{buffer-pos} is
-the symbol @code{mode-line} or @code{vertical-line}.  In this case
-@var{row} and @var{column} do not have meaningful data.
-
-@item
-Releasing a mouse button above a different character position
-generates a ``drag'' event, which looks like this:
-
-@example
-(@var{button-symbol}
- (@var{window1} (@var{column1} . @var{row1})
-  @var{buffer-pos1} @var{timestamp1})
- (@var{window2} (@var{column2} . @var{row2})
-  @var{buffer-pos2} @var{timestamp2}))
-@end example
-
-The name of @var{button-symbol} contains the prefix @samp{drag-}.  The
-second and third elements of the event give the starting and ending
-position of the drag.
-
-The @samp{drag-} prefix follows the modifier key prefixes such as
-@samp{C-} and @samp{M-}.
-
-If @code{read-key-sequence} receives a drag event which has no key
-binding, and the corresponding click event does have a binding, it
-changes the drag event into a click event at the drag's starting
-position.  This means that you don't have to distinguish between click
-and drag events unless you want to.
-
-@item
-Click and drag events happen when you release a mouse button.  Another
-kind of event happens when you press a button.  It looks just like a
-click event, except that the name of @var{button-symbol} contains the
-prefix @samp{down-}.  The @samp{down-} prefix follows the modifier key
-prefixes such as @samp{C-} and @samp{M-}.
-
-The function @code{read-key-sequence}, and the Emacs command loop,
-ignore any down events that don't have command bindings.  This means
-that you need not worry about defining down events unless you want them
-to do something.  The usual reason to define a down event is so that you
-can track mouse motion until the button is released.
-
-@item
-For example, if the user presses and releases the left mouse button over
-the same location, Emacs generates a sequence of events like this:
-
-@smallexample
-(down-mouse-1 (#<window 18 on NEWS> 2613 (0 . 38) -864320))
-(mouse-1      (#<window 18 on NEWS> 2613 (0 . 38) -864180))
-@end smallexample
-
-Or, while holding the control key down, the user might hold down the
-second mouse button, and drag the mouse from one line to the next.
-That produces two events, as shown here:
-
-@smallexample
-(C-down-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219))
-(C-drag-mouse-2 (#<window 18 on NEWS> 3440 (0 . 27) -731219)
-                (#<window 18 on NEWS> 3510 (0 . 28) -729648))
-@end smallexample
-
-Or, while holding down the meta and shift keys, the user might press
-the second mouse button on the window's mode line, and then drag the
-mouse into another window.  That produces an event like this:
-
-@smallexample
-(M-S-down-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844))
-(M-S-drag-mouse-2 (#<window 18 on NEWS> mode-line (33 . 31) -457844)
-                  (#<window 20 on carlton-sanskrit.tex> 161 (33 . 3)
-                   -453816))
-@end smallexample
-
-@item
-A key sequence that starts with a mouse click is read using the keymaps
-of the buffer in the window clicked on, not the current buffer.
-
-This does not imply that clicking in a window selects that window or its
-buffer.  The execution of the command begins with no change in the
-selected window or current buffer.  However, the command can switch
-windows or buffers if programmed to do so.
-
-@item
-Mouse motion events are represented by lists.  During the execution of
-the body of a @code{track-mouse} form, moving the mouse generates events
-that look like this:
-
-@example
-(mouse-movement (@var{window} (@var{column} . @var{row})
-                 @var{buffer-pos} @var{timestamp}))
-@end example
-
-The second element of the list describes the current position of the
-mouse, just as in a mouse click event.
-
-Outside of @code{track-mouse} forms, Emacs does not generate events for
-mere motion of the mouse, and these events do not appear.
-
-@item
-Focus shifts between frames are represented by lists.
-
-When the mouse shifts temporary input focus from one frame to another,
-Emacs generates an event like this:
-
-@example
-(switch-frame @var{new-frame})
-@end example
-
-@noindent
-where @var{new-frame} is the frame switched to.
-
-In X windows, most window managers are set up so that just moving the
-mouse into a window is enough to set the focus there.  As far as the
-user is concerned, Emacs behaves consistently with this.  However, there is
-no need for the Lisp program to know about the focus change until some
-other kind of input arrives.  So Emacs generates the focus event only
-when the user actually types a keyboard key or presses a mouse button in
-the new frame; just moving the mouse between frames does not generate a
-focus event.
-
-The global key map usually binds this event to the
-@code{internal-select-frame} function, so that characters typed at a
-frame apply to that frame's selected window.
-
-If the user switches frames in the middle of a key sequence, then Emacs
-delays the @code{switch-frame} event until the key sequence is over.
-For example, suppose @kbd{C-c C-a} is a key sequence in the current
-buffer's keymaps.  If the user types @kbd{C-c}, moves the mouse to
-another frame, and then types @kbd{C-a}, @code{read-key-sequence}
-returns the sequence @code{"\C-c\C-a"}, and the next call to
-@code{read-event} or @code{read-key-sequence} will return the
-@code{switch-frame} event.
-@end itemize
-
-@section Working with Input Events
-
-@itemize @bullet
-@item
-Functions which work with key sequences now handle non-character
-events.  Functions like @code{define-key}, @code{global-set-key}, and
-@code{local-set-key} used to accept strings representing key sequences;
-now, since events may be arbitrary lisp objects, they also accept
-vectors.  The function @code{read-key-sequence} may return a string or a
-vector, depending on whether or not the sequence read contains only
-characters.
-
-List events may be represented by the symbols at their head; to bind
-clicks of the left mouse button, you need only present the symbol
-@code{mouse-1}, not an entire mouse click event.  If you do put an event
-which is a list in a key sequence, only the event's head symbol is used
-in key lookups.
-
-For example, to globally bind the left mouse button to the function
-@code{mouse-set-point}, you could evaluate this:
-
-@example
-(global-set-key [mouse-1] 'mouse-set-point)
-@end example
-
-To bind the sequence @kbd{C-c @key{F1}} to the command @code{tex-view}
-in @code{tex-mode-map}, you could evaluate this:
-
-@example
-(define-key tex-mode-map [?\C-c f1] 'tex-view)
-@end example
-
-To find the binding for the function key labeled @key{NEXT} in
-@code{minibuffer-local-map}, you could evaluate this:
-
-@example
-(lookup-key minibuffer-local-map [next])
-     @result{} next-history-element
-@end example
-
-If you call the function @code{read-key-sequence} and then press
-@kbd{C-x C-@key{F5}}, here is how it behaves:
-
-@example
-(read-key-sequence "Press `C-x C-F5': ")
-     @result{} [24 C-f5]
-@end example
-
-Note that @samp{24} is the character @kbd{C-x}.
-
-@item
-The documentation functions (@code{single-key-description},
-@code{key-description}, etc.) now handle the new event types.  Wherever
-a string of keyboard input characters was acceptable in previous
-versions of Emacs, a vector of events should now work.
-
-@item
-Special parts of a window can have their own bindings for mouse events.
-
-When mouse events occur in special parts of a window, such as a mode
-line or a scroll bar, the event itself shows nothing special---only the
-symbol that would normally represent that mouse button and modifier
-keys.  The information about the screen region is kept in other parts
-of the event list.  But @code{read-key-sequence} translates this
-information into imaginary prefix keys, all of which are symbols:
-@code{mode-line}, @code{vertical-line}, and
-@code{vertical-scroll-bar}.
-
-For example, if you call @code{read-key-sequence} and then click the
-mouse on the window's mode line, this is what happens:
-
-@smallexample
-(read-key-sequence "Click on the mode line: ")
-     @result{} [mode-line (mouse-1 (#<window 6 on NEWS> mode-line
-                              (40 . 63) 5959987))]
-@end smallexample
-
-You can define meanings for mouse clicks in special window regions by
-defining key sequences using these imaginary prefix keys.  For example,
-here is how to bind the third mouse button on a window's mode line
-delete the window:
-
-@example
-(global-set-key [mode-line mouse-3] 'mouse-delete-window)
-@end example
-
-Here's how to bind the middle button (modified by @key{META}) on the
-vertical line at the right of a window to scroll the window to the
-left.
-
-@example
-(global-set-key [vertical-line M-mouse-2] 'scroll-left)
-@end example
-
-@item
-Decomposing an event symbol.
-
-Each symbol used to identify a function key or mouse button has a
-property named @code{event-symbol-elements}, which is a list containing
-an unmodified version of the symbol, followed by modifiers the symbol
-name contains.  The modifiers are symbols; they include @code{shift},
-@code{control}, and @code{meta}.  In addition, a mouse event symbol has
-one of @code{click}, @code{drag}, and @code{down}.  For example:
-
-@example
-(get 'f5 'event-symbol-elements)
-     @result{} (f5)
-(get 'C-f5 'event-symbol-elements)
-     @result{} (f5 control)
-(get 'M-S-f5 'event-symbol-elements)
-     @result{} (f5 meta shift)
-(get 'mouse-1 'event-symbol-elements)
-     @result{} (mouse-1 click)
-(get 'down-mouse-1 'event-symbol-elements)
-     @result{} (mouse-1 down)
-@end example
-
-Note that the @code{event-symbol-elements} property for a mouse click
-explicitly contains @code{click}, but the event symbol name itself does
-not contain @samp{click}.
-
-@item
-Use @code{read-event} to read input if you want to accept any kind of
-event.  The old function @code{read-char} now discards events other than
-keyboard characters.
-
-@item
-@code{last-command-char} and @code{last-input-char} can now hold any
-kind of event.
-
-@item
-The new variable @code{unread-command-events} is much like
-@code{unread-command-char}.  Its value is a list of events of any type,
-to be processed as command input in order of appearance in the list.
-
-@item
-The function @code{this-command-keys} may return a string or a vector,
-depending on whether or not the sequence read contains only characters.
-You may need to upgrade code which uses this function.
-
-The function @code{recent-keys} now returns a vector of events.
-You may need to upgrade code which uses this function.
-
-@item
-A keyboard macro's definition can now be either a string or a vector.
-All that really matters is what elements it has.  If the elements are
-all characters, then the macro can be a string; otherwise, it has to be
-a vector.
-
-@item
-The variable @code{last-event-frame} records which frame the last input
-event was directed to.  Usually this is the frame that was selected when
-the event was generated, but if that frame has redirected input focus to
-another frame, @code{last-event-frame} is the frame to which the event
-was redirected.
-
-@item
-The interactive specification now allows a new code letter @samp{e} to
-simplify commands bound to events which are lists.  This code supplies
-as an argument the complete event object.
-
-You can use @samp{e} more than once in a single command's interactive
-specification.  If the key sequence which invoked the command has
-@var{n} events with parameters, the @var{n}th @samp{e} provides the
-@var{n}th parameterized event.  Events which are not lists, such as
-function keys and ASCII keystrokes, do not count where @samp{e} is
-concerned.
-
-@item
-You can extract the starting and ending position values from a mouse
-button or motion event using the two functions @code{event-start} and
-@code{event-end}.  These two functions return different values for drag
-and motion events; for click and button-down events, they both return
-the position of the event.
-
-@item
-The position, a returned by @code{event-start} and @code{event-end}, is
-a list of this form:
-
-@example
-(@var{window} @var{buffer-position} (@var{col} . @var{row}) @var{timestamp})
-@end example
-
-You can extract parts of this list with the functions
-@code{posn-window}, @code{posn-point}, @code{posn-col-row}, and
-@code{posn-timestamp}.
-
-@item
-The function @code{scroll-bar-scale} is useful for computing where to
-scroll to in response to a mouse button event from a scroll bar.  It
-takes two arguments, @var{ratio} and @var{total}, and in effect
-multiplies them.  We say ``in effect'' because @var{ratio} is not a
-number; rather a pair @code{(@var{num} . @var{denom})}.
-
-Here's the usual way to use @code{scroll-bar-scale}:
-
-@example
-(scroll-bar-scale (posn-col-row (event-start event))
-                  (buffer-size))
-@end example
-@end itemize
-
-@section Putting Keyboard Events in Strings
-
-  In most of the places where strings are used, we conceptualize the
-string as containing text characters---the same kind of characters found
-in buffers or files.  Occasionally Lisp programs use strings which
-conceptually contain keyboard characters; for example, they may be key
-sequences or keyboard macro definitions.  There are special rules for
-how to put keyboard characters into a string, because they are not
-limited to the range of 0 to 255 as text characters are.
-
-  A keyboard character typed using the @key{META} key is called a
-@dfn{meta character}.  The numeric code for such an event includes the
-2**23 bit; it does not even come close to fitting in a string.  However,
-earlier Emacs versions used a different representation for these
-characters, which gave them codes in the range of 128 to 255.  That did
-fit in a string, and many Lisp programs contain string constants that
-use @samp{\M-} to express meta characters, especially as the argument to
-@code{define-key} and similar functions.
-
-  We provide backward compatibility to run those programs with special
-rules for how to put a keyboard character event in a string.  Here are
-the rules:
-
-@itemize @bullet
-@item
-If the keyboard event value is in the range of 0 to 127, it can go in the
-string unchanged.
-
-@item
-The meta variants of those events, with codes in the range of 2**23 to
-2**23+127, can also go in the string, but you must change their numeric
-values.  You must set the 2**7 bit instead of the 2**23 bit, resulting
-in a value between 128 and 255.
-
-@item
-Other keyboard character events cannot fit in a string.  This includes
-keyboard events in the range of 128 to 255.
-@end itemize
-
-  Functions such as @code{read-key-sequence} that can construct strings
-containing events follow these rules.
-
-  When you use the read syntax @samp{\M-} in a string, it produces a
-code in the range of 128 to 255---the same code that you get if you
-modify the corresponding keyboard event to put it in the string.  Thus,
-meta events in strings work consistently regardless of how they get into
-the strings.
-
-  New programs can avoid dealing with these rules by using vectors
-instead of strings for key sequences when there is any possibility that
-these issues might arise.
-
-  The reason we changed the representation of meta characters as
-keyboard events is to make room for basic character codes beyond 127,
-and support meta variants of such larger character codes.
-
-@section Menus
-
-You can now define menus conveniently as keymaps.  Menus are normally
-used with the mouse, but they can work with the keyboard also.
-
-@subsection Defining Menus
-
-A keymap is suitable for menu use if it has an @dfn{overall prompt
-string}, which is a string that appears as an element of the keymap.  It
-should describes the purpose of the menu.  The easiest way to construct
-a keymap with a prompt string is to specify the string as an argument
-when you run @code{make-keymap} or @code{make-sparse-keymap}.
-
-The individual bindings in the menu keymap should also have prompt
-strings; these strings are the items in the menu.  A binding with a
-prompt string looks like this:
-
-@example
-(@var{char} @var{string} . @var{real-binding})
-@end example
-
-As far as @code{define-key} is concerned, the string is part of the
-character's binding---the binding looks like this:
-
-@example
-(@var{string} . @var{real-binding}).
-@end example
-
-However, only @var{real-binding} is used for executing the key.
-
-You can also supply a second string, called the help string, as follows:
-
-@example
-(@var{char} @var{string} @var{help-string} . @var{real-binding})
-@end example
-
-Currently Emacs does not actually use @var{help-string}; it knows only
-how to ignore @var{help-string} in order to extract @var{real-binding}.
-In the future we hope to make @var{help-string} serve as longer
-documentation for the menu item, available on request.
-
-The prompt string for a binding should be short---one or two words.  Its
-meaning should describe the command it corresponds to.
-
-If @var{real-binding} is @code{nil}, then @var{string} appears in the
-menu but cannot be selected.
-
-If @var{real-binding} is a symbol, and has a non-@code{nil}
-@code{menu-enable} property, that property is an expression which
-controls whether the menu item is enabled.  Every time the keymap is
-used to display a menu, Emacs evaluates the expression, and it enables
-the menu item only if the expression's value is non-@code{nil}.  When a
-menu item is disabled, it is displayed in a ``fuzzy'' fashion, and
-cannot be selected with the mouse.
-
-@subsection Menus and the Mouse
-
-The way to make a menu keymap produce a menu is to make it the
-definition of a prefix key.
-
-When the prefix key ends with a mouse event, Emacs handles the menu
-keymap by popping up a visible menu that you can select from with the
-mouse.  When you click on a menu item, the event generated is whatever
-character or symbol has the binding which brought about that menu item.
-
-A single keymap can appear as multiple panes, if you explicitly
-arrange for this.  The way to do this is to make a keymap for each
-pane, then create a binding for each of those maps in the main keymap
-of the menu.  Give each of these bindings a prompt string that starts
-with @samp{@@}.  The rest of the prompt string becomes the name of the
-pane.  See the file @file{lisp/mouse.el} for an example of this.  Any
-ordinary bindings with prompt strings are grouped into one pane, which
-appears along with the other panes explicitly created for the
-submaps.
-
-You can also get multiple panes from separate keymaps.  The full
-definition of a prefix key always comes from merging the definitions
-supplied by the various active keymaps (minor modes, local, and
-global).  When more than one of these keymaps is a menu, each of them
-makes a separate pane or panes.
-
-@subsection Menus and the Keyboard
-
-When a prefix key ending with a keyboard event (a character or function
-key) has a definition that is a menu keymap, you can use the keyboard
-to choose a menu item.
-
-Emacs displays the menu alternatives in the echo area.  If they don't
-all fit at once, type @key{SPC} to see the next line of alternatives.
-If you keep typing @key{SPC}, you eventually get to the end of the menu
-and then cycle around to the beginning again.
-
-When you have found the alternative you want, type the corresponding
-character---the one whose binding is that alternative.
-
-In a menu intended for keyboard use, each menu item must clearly
-indicate what character to type.  The best convention to use is to make
-the character the first letter of the menu item prompt string.  That is
-something users will understand without being told.
-
-@subsection The Menu Bar
-
-  Under X Windows, each frame can have a @dfn{menu bar}---a permanently
-displayed menu stretching horizontally across the top of the frame.  The
-items of the menu bar are the subcommands of the fake ``function key''
-@code{menu-bar}, as defined by all the active keymaps.
-
-  To add an item to the menu bar, invent a fake ``function key'' of your
-own (let's call it @var{key}), and make a binding for the key sequence
-@code{[menu-bar @var{key}]}.  Most often, the binding is a menu keymap,
-so that pressing a button on the menu bar item leads to another menu.
-
-  In order for a frame to display a menu bar, its @code{menu-bar-lines}
-property must be greater than zero.  Emacs uses just one line for the
-menu bar itself; if you specify more than one line, the other lines
-serve to separate the menu bar from the windows in the frame.  We
-recommend you try one or two as the @code{menu-bar-lines} value.
-
-@section Keymaps
-
-@itemize @bullet
-@item
-The representation of keymaps has changed to support the new event
-types.  All keymaps now have the form @code{(keymap @var{element}
-@var{element} @dots{})}.  Each @var{element} takes one of the following
-forms:
-
-@table @asis
-@item @var{prompt-string}
-A string as an element of the keymap marks the keymap as a menu, and
-serves as the overall prompt string for it.
-
-@item @code{(@var{key} . @var{binding})}
-A cons cell binds @var{key} to @var{definition}.  Here @var{key} may be
-any sort of event head---a character, a function key symbol, or a mouse
-button symbol.
-
-@item @var{vector}
-A vector of 128 elements binds all the ASCII characters; the @var{n}th
-element holds the binding for character number @var{n}.
-
-@item @code{(t . @var{binding})}
-A cons cell whose @sc{car} is @code{t} is a default binding; anything
-not bound by previous keymap elements is given @var{binding} as its
-binding.
-
-Default bindings are important because they allow a keymap to bind all
-possible events without having to enumerate all the possible function
-keys and mouse clicks, with all possible modifier prefixes.
-
-The function @code{lookup-key} (and likewise other functions for
-examining a key binding) normally report only explicit bindings of the
-specified key sequence; if there is none, they return @code{nil}, even
-if there is a default binding that would apply to that key sequence if
-it were actually typed in.  However, these functions now take an
-optional argument @var{accept-defaults} which, if non-@code{nil}, says
-to consider default bindings.
-
-Note that if a vector in the keymap binds an ASCII character to
-@code{nil} (thus making it ``unbound''), the default binding does not
-apply to the character.  Think of the vector element as an explicit
-binding of @code{nil}.
-
-Note also that if the keymap for a minor or major mode contains a
-default binding, it completely masks out any lower-priority keymaps.
-@end table
-
-@item
-A keymap can now inherit from another keymap.  To do this, make the
-latter keymap the ``tail'' of the new one.  Such a keymap looks like
-this:
-
-@example
-(keymap @var{bindings}@dots{} . @var{other-keymap})
-@end example
-
-The effect is that this keymap inherits all the bindings of
-@var{other-keymap}, but can add to them or override them with
-@var{bindings}.  Subsequent changes in the bindings of
-@var{other-keymap} @emph{do} affect this keymap.
-
-For example, 
-
-@example
-(setq my-mode-map (cons 'keymap text-mode-map))
-@end example
-
-@noindent
-makes a keymap that by default inherits all the bindings of Text
-mode---whatever they may be at the time a key is looked up.  Any
-bindings made explicitly in @code{my-mode-map} override the bindings
-inherited from Text mode, however.
-
-@item
-Minor modes can now have local keymaps.  Thus, a key can act a special
-way when a minor mode is in effect, and then revert to the major mode or
-global definition when the minor mode is no longer in effect.  The
-precedence of keymaps is now: minor modes (in no particular order), then
-major mode, and lastly the global map.
-
-The new @code{current-minor-mode-maps} function returns a list of all
-the keymaps of currently enabled minor modes, in the other that they
-apply.
-
-To set up a keymap for a minor mode, add an element to the alist
-@code{minor-mode-map-alist}.  Its elements look like this:
-
-@example
-(@var{symbol} . @var{keymap})
-@end example
-
-The keymap @var{keymap} is active whenever @var{symbol} has a
-non-@code{nil} value.  Use for @var{symbol} the variable which indicates
-whether the minor mode is enabled.
-
-When more than one minor mode keymap is active, their order of
-precedence is the order of @code{minor-mode-map-alist}.  But you should
-design minor modes so that they don't interfere with each other, and if
-you do this properly, the order will not matter.
-
-The function @code{minor-mode-key-binding} returns a list of all the
-active minor mode bindings of @var{key}.  More precisely, it returns an
-alist of pairs @code{(@var{modename} . @var{binding})}, where
-@var{modename} is the variable which enables the minor mode, and
-@var{binding} is @var{key}'s definition in that mode.  If @var{key} has
-no minor-mode bindings, the value is @code{nil}.
-
-If the first binding is a non-prefix, all subsequent bindings from other
-minor modes are omitted, since they would be completely shadowed.
-Similarly, the list omits non-prefix bindings that follow prefix
-bindings.
-
-@item
-The new function @code{copy-keymap} copies a keymap, producing a new
-keymap with the same key bindings in it.  If the keymap contains other
-keymaps directly, these subkeymaps are copied recursively.
-
-If you want to, you can define a prefix key with a binding that is a
-symbol whose function definition is another keymap.  In this case,
-@code{copy-keymap} does not look past the symbol; it doesn't copy the
-keymap inside the symbol.
-
-@item
-@code{substitute-key-definition} now accepts an optional fourth
-argument, which is a keymap to use as a template.
-
-@example
-(substitute-key-definition olddef newdef keymap oldmap)
-@end example
-
-@noindent
-finds all characters defined in @var{oldmap} as @var{olddef},
-and defines them in @var{keymap} as @var{newdef}.
-
-In addition, this function now operates recursively on the keymaps that
-define prefix keys within @var{keymap} and @var{oldmap}.
-@end itemize
-
-@section Minibuffer Features
-
-The minibuffer input functions @code{read-from-minibuffer} and
-@code{completing-read} have new features.
-
-@subsection Minibuffer History
-
-A new optional argument @var{hist} specifies which history list to use.
-If you specify a variable (a symbol), that variable is the history
-list.  If you specify a cons cell @code{(@var{variable}
-. @var{startpos})}, then @var{variable} is the history list variable,
-and @var{startpos} specifies the initial history position (an integer,
-counting from zero which specifies the most recent element of the
-history).
-
-If you specify @var{startpos}, then you should also specify that element
-of the history as @var{initial-input}, for consistency.
-
-If you don't specify @var{hist}, then the default history list
-@code{minibuffer-history} is used.  Other standard history lists that
-you can use when appropriate include @code{query-replace-history},
-@code{command-history}, and @code{file-name-history}.
-
-The value of the history list variable is a list of strings, most recent
-first.  You should set a history list variable to @code{nil} before
-using it for the first time.
-
-@code{read-from-minibuffer} and @code{completing-read} add new elements
-to the history list automatically, and provide commands to allow the
-user to reuse items on the list.  The only thing your program needs to
-do to use a history list is to initialize it and to pass its name to the
-input functions when you wish.  But it is safe to modify the list by
-hand when the minibuffer input functions are not using it.
-
-@subsection Other Minibuffer Features
-
-The @var{initial} argument to @code{read-from-minibuffer} and other
-minibuffer input functions can now be a cons cell @code{(@var{string}
-. @var{position})}.  This means to start off with @var{string} in the
-minibuffer, but put the cursor @var{position} characters from the
-beginning, rather than at the end.
-
-In @code{read-no-blanks-input}, the @var{initial} argument is now
-optional; if it is omitted, the initial input string is the empty
-string.
-
-@section New Features for Defining Commands
-
-@itemize @bullet
-@item
-If the interactive specification begins with @samp{@@}, this means to
-select the window under the mouse.  This selection takes place before
-doing anything else with the command.
-
-You can use both @samp{@@} and @samp{*} together in one command; they
-are processed in order of appearance.
-
-@item
-Prompts in an interactive specification can incorporate the values of
-the preceding arguments.  Emacs replaces @samp{%}-sequences (as used
-with the @code{format} function) in the prompt with the interactive
-arguments that have been read so far.  For example, a command with this
-interactive specification
-
-@example
-(interactive "sReplace: \nsReplace %s with: ")
-@end example
-
-@noindent
-prompts for the first argument with @samp{Replace: }, and then prompts
-for the second argument with @samp{Replace @var{foo} with: }, where
-@var{foo} is the string read as the first argument.
-
-@item
-If a command name has a property @code{enable-recursive-minibuffers}
-which is non-@code{nil}, then the command can use the minibuffer to read
-arguments even if it is invoked from the minibuffer.  The minibuffer
-command @code{next-matching-history-element} (normally bound to
-@kbd{M-s} in the minibuffer) uses this feature.
-@end itemize
-
-@section New Features for Reading Input
-
-@itemize @bullet
-@item
-The function @code{set-input-mode} now takes four arguments.  The last
-argument is optional.  Their names are @var{interrupt}, @var{flow},
-@var{meta} and @var{quit}.
-
-The argument @var{interrupt} says whether to use interrupt-driven
-input.  Non-@code{nil} means yes, and @code{nil} means no (use CBREAK
-mode).
-
-The argument @var{flow} says whether to enable terminal flow control.
-Non-@code{nil} means yes.
-
-The argument @var{meta} controls support for input character codes above
-127.  If @var{meta} is @code{t}, Emacs converts characters with the 8th
-bit set into Meta characters.  If @var{meta} is @code{nil}, Emacs
-disregards the 8th bit; this is necessary when the terminal uses it as a
-parity bit.  If @var{meta} is neither @code{t} nor @code{nil}, Emacs
-uses all 8 bits of input unchanged.  This is good for terminals using
-European 8-bit character sets.
-
-If @var{quit} non-@code{nil}, it is the character to use for quitting.
-(Normally this is @kbd{C-g}.)
-
-@item
-The variable @code{meta-flag} has been deleted; use
-@code{set-input-mode} to enable or disable support for a @key{META}
-key.  This change was made because @code{set-input-mode} can send the
-terminal the appropriate commands to enable or disable operation of the
-@key{META} key.
-
-@item
-The new variable @code{extra-keyboard-modifiers} lets Lisp programs
-``press'' the modifier keys on the keyboard.
-The value is a bit mask:
-
-@table @asis
-@item 1
-The @key{SHIFT} key.
-@item 2
-The @key{LOCK} key.
-@item 4
-The @key{CTL} key.
-@item 8
-The @key{META} key.
-@end table
-
-When you use X windows, the program can press any of the modifier keys
-in this way.  Otherwise, only the @key{CTL} and @key{META} keys can be
-virtually pressed.
-
-@item
-You can use the new function @code{keyboard-translate} to set up 
-@code{keyboard-translate-table} conveniently.
-
-@item
-Y-or-n questions using the @code{y-or-n-p} function now accept @kbd{C-]}
-(usually mapped to @code{abort-recursive-edit}) as well as @kbd{C-g} to
-quit.
-
-@item
-The variable @code{num-input-keys} is the total number of key sequences 
-that the user has typed during this Emacs session.
-
-@item
-A new Lisp variable, @code{function-key-map}, holds a keymap which
-describes the character sequences sent by function keys on an ordinary
-character terminal.  This uses the same keymap data structure that is
-used to hold bindings of key sequences, but it has a different meaning:
-it specifies translations to make while reading a key sequence.
-
-If @code{function-key-map} ``binds'' a key sequence @var{k} to a vector
-@var{v}, then when @var{k} appears as a subsequence @emph{anywhere} in a
-key sequence, it is replaced with @var{v}.
-
-For example, VT100 terminals send @kbd{@key{ESC} O P} when the ``keypad''
-PF1 key is pressed.  Thus, on a VT100, @code{function-key-map} should
-``bind'' that sequence to @code{[pf1]}.  This specifies translation of
-@kbd{@key{ESC} O P} into @key{PF1} anywhere in a key sequence.
-
-Thus, typing @kbd{C-c @key{PF1}} sends the character sequence @kbd{C-c
-@key{ESC} O P}, but @code{read-key-sequence} translates this back into
-@kbd{C-c @key{PF1}}, which it returns as the vector @code{[?\C-c PF1]}.
-
-Entries in @code{function-key-map} are ignored if they conflict with
-bindings made in the minor mode, local, or global keymaps.
-
-The value of @code{function-key-map} is usually set up automatically
-according to the terminal's Terminfo or Termcap entry, and the
-terminal-specific Lisp files.  Emacs comes with a number of
-terminal-specific files for many common terminals; their main purpose is
-to make entries in @code{function-key-map} beyond those that can be
-deduced from Termcap and Terminfo.
-
-@item
-The variable @code{key-translation-map} works like @code{function-key-map}
-except for two things:
-
-@itemize @bullet
-@item
-@code{key-translation-map} goes to work after @code{function-key-map} is
-finished; it receives the results of translation by
-@code{function-key-map}.
-
-@item
-@code{key-translation-map} overrides actual key bindings.
-@end itemize
-
-The intent of @code{key-translation-map} is for users to map one
-character set to another, including ordinary characters normally bound
-to @code{self-insert-command}.
-@end itemize
-
-@section New Syntax Table Features
-
-@itemize @bullet
-@item
-You can use two new functions to move across characters in certain
-syntax classes.
-
-@code{skip-syntax-forward} moves point forward across characters whose
-syntax classes are mentioned in its first argument, a string.  It stops
-when it encounters the end of the buffer, or position @var{lim} (the
-optional second argument), or a character it is not supposed to skip.
-The function @code{skip-syntax-backward} is similar but moves backward.
-
-@item
-The new function @code{forward-comment} moves point by comments.  It
-takes one argument, @var{count}; it moves point forward across
-@var{count} comments (backward, if @var{count} is negative).  If it
-finds anything other than a comment or whitespace, it stops, leaving
-point at the far side of the last comment found.  It also stops after
-satisfying @var{count}.
-
-@item
-The new variable @code{words-include-escapes} affects the behavior of
-@code{forward-word} and everything that uses it.  If it is
-non-@code{nil}, then characters in the ``escape'' and ``character
-quote'' syntax classes count as part of words.
-
-@item
-There are two new syntax flags for use in syntax tables.
-
-@itemize -
-@item
-The prefix flag.
-
-The @samp{p} flag identifies additional ``prefix characters'' in Lisp
-syntax.  You can set this flag with @code{modify-syntax-entry} by
-including the letter @samp{p} in the syntax specification.
-
-These characters are treated as whitespace when they appear between
-expressions.  When they appear within an expression, they are handled
-according to their usual syntax codes.
-
-The function @code{backward-prefix-chars} moves back over these
-characters, as well as over characters whose primary syntax class is
-prefix (@samp{'}).
-
-@item
-The @samp{b} comment style flag.
-
-Emacs can now supports two comment styles simultaneously.  (This is for
-the sake of C++.)  More specifically, it can recognize two different
-comment-start sequences.  Both must share the same first character; only
-the second character may differ.  Mark the second character of the
-@samp{b}-style comment start sequence with the @samp{b} flag.  You can
-set this flag with @code{modify-syntax-entry} by including the letter
-@samp{b} in the syntax specification.
-
-The two styles of comment can have different comment-end sequences.  A
-comment-end sequence (one or two characters) applies to the @samp{b}
-style if its first character has the @samp{b} flag set; otherwise, it
-applies to the @samp{a} style.
-
-The appropriate comment syntax settings for C++ are as follows:
-
-@table @asis
-@item @samp{/}
-@samp{124b}
-@item @samp{*}
-@samp{23}
-@item newline
-@samp{>b}
-@end table
-
-Thus @samp{/*} is a comment-start sequence for @samp{a} style, @samp{//}
-is a comment-start sequence for @samp{b} style, @samp{*/} is a
-comment-end sequence for @samp{a} style, and newline is a comment-end
-sequence for @samp{b} style.
-@end itemize
-@end itemize
-
-@section The Case Table
-
-You can customize case conversion using the new case table feature.  A
-case table is a collection of strings that specifies the mapping between
-upper case and lower case letters.  Each buffer has its own case table.
-You need a case table if you are using a language which has letters that
-are not standard ASCII letters.
-
-A case table is a list of this form:
-
-@example
-(@var{downcase} @var{upcase} @var{canonicalize} @var{equivalences})
-@end example
-
-@noindent
-where each element is either @code{nil} or a string of length 256.  The
-element @var{downcase} says how to map each character to its lower-case
-equivalent.  The element @var{upcase} maps each character to its
-upper-case equivalent.  If lower and upper case characters are in 1-1
-correspondence, use @code{nil} for @var{upcase}; then Emacs deduces the
-upcase table from @var{downcase}.
-
-For some languages, upper and lower case letters are not in 1-1
-correspondence.  There may be two different lower case letters with the
-same upper case equivalent.  In these cases, you need to specify the
-maps for both directions.
-
-The element @var{canonicalize} maps each character to a canonical
-equivalent; any two characters that are related by case-conversion have
-the same canonical equivalent character.
-
-The element @var{equivalences} is a map that cyclicly permutes each
-equivalence class (of characters with the same canonical equivalent).
-
-You can provide @code{nil} for both @var{canonicalize} and
-@var{equivalences}, in which case both are deduced from @var{downcase}
-and @var{upcase}.
-
-Here are the functions for working with case tables:
-
-@code{case-table-p} is a predicate that says whether a Lisp object is a
-valid case table.
-
-@code{set-standard-case-table} takes one argument and makes that
-argument the case table for new buffers created subsequently.
-@code{standard-case-table} returns the current value of the new buffer
-case table.
-
-@code{current-case-table} returns the case table of the current buffer.
-@code{set-case-table} sets the current buffer's case table to the
-argument.
-
-@code{set-case-syntax-pair} is a convenient function for specifying a
-pair of letters, upper case and lower case.  Call it with two arguments,
-the upper case letter and the lower case letter.  It modifies the
-standard case table and a few syntax tables that are predefined in
-Emacs.  This function is intended as a subroutine for packages that
-define non-ASCII character sets.
-
-Load the library @file{iso-syntax} to set up the syntax and case table for
-the 256 bit ISO Latin 1 character set.
-
-@section New Features for Dealing with Buffers
-
-@itemize @bullet
-@item
-The new function @code{buffer-modified-tick} returns a buffer's
-modification-count that ticks every time the buffer is modified.  It
-takes one optional argument, which is the buffer you want to examine.
-If the argument is @code{nil} (or omitted), the current buffer is used.
-
-@item
-@code{buffer-disable-undo} is a new name for the function
-formerly known as @code{buffer-flush-undo}.  This turns off recording
-of undo information in the buffer given as argument.
-
-@item
-The new function @code{generate-new-buffer-name} chooses a name that
-would be unique for a new buffer---but does not create the buffer.  Give
-it one argument, a starting name.  It produces a name not in use for a
-buffer by appending a number inside of @samp{<@dots{}>}.
-
-@item
-The function @code{rename-buffer} now takes an optional second argument
-which tells it that if the specified new name corresponds to an existing
-buffer, it should use @code{generate-new-buffer-name} to modify the name
-to be unique, rather than signaling an error.
-
-@code{rename-buffer} now returns the name to which the buffer was
-renamed.
-
-@item
-The function @code{list-buffers} now looks at the local variable
-@code{list-buffers-directory} in each non-file-visiting buffer, and
-shows its value where the file would normally go.  Dired sets this
-variable in each Dired buffer, so the buffer list now shows which
-directory each Dired buffer is editing.
-
-@item
-The function @code{other-buffer} now takes an optional second argument
-@var{visible-ok} which, if non-@code{nil}, indicates that buffers
-currently being displayed in windows may be returned even if there are
-other buffers not visible.  Normally, @code{other-buffer} returns a
-currently visible buffer only as a last resort, if there are no suitable
-invisible buffers.
-
-@item
-The hook @code{kill-buffer-hook} now runs whenever a buffer is killed.
-@end itemize
-
-@section Local Variables Features
-
-@itemize @bullet
-@item
-If a local variable name has a non-@code{nil} @code{permanent-local}
-property, then @code{kill-all-local-variables} does not kill it.  Such
-local variables are ``permanent''---they remain unchanged even if you
-select a different major mode.
-
-Permanent locals are useful when they have to do with where the file
-came from or how to save it, rather than with how to edit the contents.
-
-@item
-The function @code{make-local-variable} now never changes the value of the variable
-that it makes local.  If the variable had no value before, it still has
-no value after becoming local.
-
-@item
-The new function @code{default-boundp} tells you whether a variable has
-a default value (as opposed to being unbound in its default value).  If
-@code{(default-boundp 'foo)} returns @code{nil}, then
-@code{(default-value 'foo)} would get an error.
-
-@code{default-boundp} is to @code{default-value} as @code{boundp} is to
-@code{symbol-value}.
-
-@item
-The special forms @code{defconst} and @code{defvar}, when the variable
-is local in the current buffer, now set the variable's default value
-rather than its local value.
-@end itemize
-
-@section New Features for Subprocesses
-
-@itemize @bullet
-@item
-@code{call-process} and @code{call-process-region} now return a value
-that indicates how the synchronous subprocess terminated.  It is either
-a number, which is the exit status of a process, or a signal name
-represented as a string.
-
-@item
-@code{process-status} now returns @code{open} and @code{closed} as the
-status values for network connections.
-
-@item
-The standard asynchronous subprocess features work on VMS now,
-and the special VMS asynchronous subprocess functions have been deleted.
-
-@item
-You can use the transaction queue feature for more convenient
-communication with subprocesses using transactions.
-
-Call @code{tq-create} to create a transaction queue communicating with a
-specified process.  Then you can call @code{tq-enqueue} to send a
-transaction.  @code{tq-enqueue} takes these five arguments:
-
-@example
-(tq-enqueue @var{tq} @var{question} @var{regexp} @var{closure} @var{fn})
-@end example
-
-@var{tq} is the queue to use.  (Specifying the queue has the effect of
-specifying the process to talk to.)  The argument @var{question} is the
-outgoing message which starts the transaction.  The argument @var{fn} is
-the function to call when the corresponding answer comes back; it is
-called with two arguments: @var{closure}, and the answer received.
-
-The argument @var{regexp} is a regular expression to match the entire
-answer; that's how @code{tq-enqueue} tells where the answer ends.
-
-Call @code{tq-close} to shut down a transaction queue and terminate its
-subprocess.
-
-@item 
-The function @code{signal-process} sends a signal to process @var{pid},
-which need not be a child of Emacs.  The second argument @var{signal}
-specifies which signal to send; it should be an integer.
-@end itemize
-
-@section New Features for Dealing with Times And Time Delays
-
-@itemize @bullet
-@item
-The new function @code{current-time} returns the system's time value as
-a list of three integers: @code{(@var{high} @var{low} @var{microsec})}.
-The integers @var{high} and @var{low} combine to give the number of
-seconds since 0:00 January 1, 1970, which is @var{high} * 2**16 +
-@var{low}.
-
-@var{microsec} gives the microseconds since the start of the current
-second (or 0 for systems that return time only on the resolution of a
-second).
-
-@item
-The function @code{current-time-string} accepts an optional argument
-@var{time-value}.  If given, this specifies a time to format instead of
-the current time.  The argument should be a cons cell containing two
-integers, or a list whose first two elements are integers.  Thus, you
-can use times obtained from @code{current-time} (see above) and from
-@code{file-attributes}.
-
-@item
-You can now find out the user's time zone using @code{current-time-zone}.
-
-The value has the form @code{(@var{OFFSET} @var{name})}.  Here
-@var{offset} is an integer giving the number of seconds ahead of UTC
-(east of Greenwich).  A negative value means west of Greenwich.  The
-second element, @var{name} is a string giving the name of the time
-zone.  Both elements change when daylight savings time begins or ends;
-if the user has specified a time zone that does not use a seasonal time
-adjustment, then the value is constant through time.
-
-If the operating system doesn't supply all the information necessary to
-compute the value, both elements of the list are @code{nil}.
-
-The optional argument @var{time-value}, if given, specifies a time to
-analyze instead of the current time.  The argument should be a cons cell
-containing two integers, or a list whose first two elements are
-integers.  Thus, you can use times obtained from @code{current-time} and
-from @code{file-attributes}.
-
-@item
-@code{sit-for}, @code{sleep-for} now let you specify the time period in
-milliseconds as well as in seconds.  The first argument gives the number
-of seconds, as before, and the optional second argument gives additional
-milliseconds.  The time periods specified by these two arguments are
-added together.
-
-Not all systems support this; you get an error if you specify nonzero
-milliseconds and it isn't supported.
-
-@code{sit-for} also accepts an optional third argument @var{nodisp}.  If
-this is non-@code{nil}, @code{sit-for} does not redisplay.  It still
-waits for the specified time or until input is available.
-
-@item
-@code{accept-process-output} now accepts a timeout specified by optional
-second and third arguments.  The second argument specifies the number of
-seconds, while the third specifies the number of milliseconds.  The time
-periods specified by these two arguments are added together.
-
-Not all systems support this; you get an error if you specify nonzero
-milliseconds and it isn't supported.
-
-The function returns @code{nil} if the timeout expired before output
-arrived, or non-@code{nil} if it did get some output.
-
-@item
-You can set up a timer to call a function at a specified future time.
-To do so, call @code{run-at-time}, like this:
-
-@example
-(run-at-time @var{time} @var{repeat} @var{function} @var{args}@dots{})
-@end example
-
-Here, @var{time} is a string saying when to call the function.  The
-argument @var{function} is the function to call later, and @var{args}
-are the arguments to give it when it is called.
-
-The argument @var{repeat} specifies how often to repeat the call.  If
-@var{repeat} is @code{nil}, there are no repetitions; @var{function} is
-called just once, at @var{time}.  If @var{repeat} is an integer, it
-specifies a repetition period measured in seconds.
-
-Absolute times may be specified in a wide variety of formats; The form
-@samp{@var{hour}:@var{min}:@var{sec} @var{timezone}
-@var{month}/@var{day}/@var{year}}, where all fields are numbers, works;
-the format that @code{current-time-string} returns is also allowed.
-
-To specify a relative time, use numbers followed by units.
-For example:
-
-@table @samp
-@item 1 min
-denotes 1 minute from now.
-@item 1 min 5 sec
-denotes 65 seconds from now.
-@item 1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
-denotes exactly 103 months, 123 days, and 10862 seconds from now.
-@end table
-
-If @var{time} is an integer, that specifies a relative time measured in
-seconds.
-@end itemize
-
-To cancel the requested future action, pass the value that @code{run-at-time}
-returned to the function @code{cancel-timer}.
-
-@section Profiling Lisp Programs
-
-You can now make execution-time profiles of Emacs Lisp programs using
-the @file{profile} library.  See the file @file{profile.el} for
-instructions; if you have written a Lisp program big enough to be worth
-profiling, you can surely understand them.
-
-@section New Features for Lisp Debuggers
-
-@itemize @bullet
-@item
-You can now specify which kinds of errors should invoke the Lisp
-debugger by setting the variable @code{debug-on-error} to a list of error
-conditions.  For example, if you set it to the list @code{(void-variable)},
-then only errors about a variable that has no value invoke the
-debugger.
-
-@item
-The variable @code{command-debug-status} is used by Lisp debuggers.  It
-records the debugging status of current interactive command.  Each time
-a command is called interactively, this variable is bound to
-@code{nil}.  The debugger can set this variable to leave information for
-future debugger invocations during the same command.
-
-The advantage of this variable over some other variable in the debugger
-itself is that the data will not be visible for any other command
-invocation.
-
-@item
-The function @code{backtrace-frame} is intended for use in Lisp
-debuggers.  It returns information about what a frame on the Lisp call
-stack is doing.  You specify one argument, which is the number of stack
-frames to count up from the current execution point.
-
-If that stack frame has not evaluated the arguments yet (or is a special
-form), the value is @code{(nil @var{function} @var{arg-forms}@dots{})}.
-
-If that stack frame has evaluated its arguments and called its function
-already, the value is @code{(t @var{function}
-@var{arg-values}@dots{})}.
-
-In the return value, @var{function} is whatever was supplied as @sc{car}
-of evaluated list, or a @code{lambda} expression in the case of a macro
-call.  If the function has a @code{&rest} argument, that is represented
-as the tail of the list @var{arg-values}.
-
-If the argument is out of range, @code{backtrace-frame} returns
-@code{nil}.
-@end itemize
-
-@ignore
-
-@item
-@code{kill-ring-save} now gives visual feedback to indicate the region
-of text being added to the kill ring.  If the opposite end of the
-region is visible in the current window, the cursor blinks there.
-Otherwise, some text from the other end of the region is displayed in
-the message area.
-@end ignore
-
-@section Memory Allocation Changes
-
-The list that @code{garbage-collect} returns now has one additional
-element.  This is a cons cell containing two numbers.  It gives
-information about the number of used and free floating point numbers,
-much as the first element gives such information about the number of
-used and free cons cells.
-
-The new function @code{memory-limit} returns an indication of the last
-address allocated by Emacs.  More precisely, it returns that address
-divided by 1024.  You can use this to get a general idea of how your
-actions affect the memory usage.
-
-@section Hook Changes
-
-@itemize @bullet
-@item
-Expanding an abbrev first runs the new hook
-@code{pre-abbrev-expand-hook}.
-
-@item
-The editor command loop runs the normal hook @code{pre-command-hook}
-before each command, and runs @code{post-command-hook} after each
-command.
-
-@item
-Auto-saving runs the new hook @code{auto-save-hook} before actually
-starting to save any files.
-
-@item
-The new variable @code{revert-buffer-insert-file-contents-function}
-holds a function that @code{revert-buffer} now uses to read in the
-contents of the reverted buffer---instead of calling
-@code{insert-file-contents}.
-
-@item
-The variable @code{lisp-indent-hook} has been renamed to
-@code{lisp-indent-function}.
-
-@item
-The variable @code{auto-fill-hook} has been renamed to
-@code{auto-fill-function}.
-
-@item
-The variable @code{blink-paren-hook} has been renamed to
-@code{blink-paren-function}.
-
-@item
-The variable @code{temp-buffer-show-hook} has been renamed to
-@code{temp-buffer-show-function}.
-
-@item
-The variable @code{suspend-hook} is now a normal hook.
-It used to be a special kind of hook; its value had to be a single
-function, and if the function returned a non-@code{nil} value,
-then suspension was inhibited.
-
-@item
-The new function @code{add-hook} provides a handy way to add a function
-to a hook variable.  For example,
-
-@example
-(add-hook 'text-mode-hook 'my-text-hook-function)
-@end example
-
-@noindent
-arranges to call @code{my-text-hook-function}
-when entering Text mode or related modes.
-
-@code{add-hook} takes an optional third argument which says to add the
-new hook function at the end of the list (normally, it goes at the
-beginning).
-@end itemize
-
-@bye
Binary file etc/sperber.xpm.Z has changed
Binary file etc/sperberm.xpm.Z has changed
Binary file etc/thiessel.xpm.Z has changed
Binary file etc/thiesselm.xpm.Z has changed
--- a/etc/ulimit.hack	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-#!/bin/sh
-#
-# ulimit.hack: Create an intermediate program for use in
-# between kernel initialization and init startup.
-# This is needed on a 3b system if the standard CDLIMIT is
-# so small that the dumped Emacs file cannot be written.
-# This program causes everyone to get a bigger CDLIMIT value
-# so that the dumped Emacs can be written out.
-#
-# Users of V.3.1 and later should not use this; see etc/MACHINES
-# and reconfig your kernel's CDLIMIT parameter instead.
-#
-# Caveat: Heaven help you if you screw this up.  This puts
-# a new program in as /etc/init, which then execs the real init.
-#
-cat > ulimit.init.c << \EOF
-main(argc, argv)
-int argc;
-char *argv[];
-{
-	ulimit(2, 262144L);	/* "2" is the "set" command. */
-	/* 262,144 allows for 128Mb files to be written. */
-	/* If that value isn't suitable, roll your own.  */
-	execv("/etc/real.init", argv);
-}
-EOF
-#
-# Compile it and put it in place of the usual init program.
-#
-cc ulimit.init.c -o ulimit.init
-mv /etc/init /etc/real.init
-mv ulimit.init /etc/ulimit.init
-ln /etc/ulimit.init /etc/init
-mv ulimit.init.c /etc/ulimit.init.c	# to keep src for this hack nearby.
-chmod 0754 /etc/init
-exit 0
-#
-# Upon system reboot, all processes will inherit the new large ulimit.
--- a/lisp/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -1,5 +1,58 @@
+Fri Apr 11 11:50:14 1997  Oscar Figueiredo  <Oscar.Figueiredo@di.epfl.ch>
+
+	* tm/tm-vm.el: tm-vm/use-original-url-button:
+	  - Default is now t (principle of least surprise).
+	(tm-vm/build-preview-buffer):
+	  - Bind vm-message-pointer in Preview-buffer.
+	  - X-Face was not displayed for a certain set of enabling variables.
+	Calls to (vm-xemacs-p) were removed.
+
+Sat Apr 12 05:27:56 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* modes/list-mode.el (list-mode-item-mouse-selected): Sometimes
+	event-closest-point returns nil.
+
+	* comint/telnet.el (telnet-check-software-type-initialize):
+	Restore 19.14 initialization of telnet-prompt-pattern for Unix.
+	(rsh): Allow a way to get back old password-less behavior.
+
+	* edebug/edebug.el (edebug-read-and-maybe-wrap-form): Protect
+	against pathological recursive calls.
+
+	* prim/loadup.el: add cus-start as dumped package.
+
+	* packages/vc.el (vc-directory): Dired requires a list not a
+	string of space separated names.
+
+	* utils/live-icon.el (live-icon-colour-name-from-face): `face' may 
+	be a list of faces since it is generated by `extent-face'.
+
+Fri Apr 11 21:12:57 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* packages/ispell.el: Don't attempt creation of the menubar unless 
+	XEmacs has been compiled with menubars.
+
+	* prim/simple.el (yank-pop): mark-marker needs optional force
+	parameter to activate the region (suggested by Jamie Zawinski).
+
+Fri Apr 11 17:47:26 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* packages/apropos.el (apropos): Add support for faces, widgets,
+	and user options.
+	(apropos-print): Ditto.
+
+Fri Apr 11 01:23:45 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* prim/loadup.el (running-xemacs): Declare.  This variable is the
+	new canonical way of determining whether you're running under
+	XEmacs.
+
 Thu Apr 10 13:23:14 1997  Steven L Baur  <steve@altair.xemacs.org>
 
+	* packages/font-lock.el (font-lock-apply-highlight): Remove
+	support for back to back font hack (and restore correct
+	fontification of `int a, b, c;').  Patch from Anders Lindgren.
+
 	* prim/about.el (about-xemacs-xref): Forgot to link David Moore's
 	picture (oops).
 
--- a/lisp/calendar/appt.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/calendar/appt.el	Mon Aug 13 09:26:39 2007 +0200
@@ -715,10 +715,10 @@
     ;; we're about to redefine it...
        (fset 'old-display-time-filter (symbol-function old-fn))
        (fset old-fn
-	     '(lambda (&rest args)  ;; ...here's the revised definition
-		"Revised version of the original function: this version calls a hook."
-		(apply 'old-display-time-filter args)
-		(run-hooks 'display-time-hook)))))
+	     (lambda (&rest args)  ;; ...here's the revised definition
+	       "Revised version of the original function: this version calls a hook."
+	       (apply 'old-display-time-filter args)
+	       (run-hooks 'display-time-hook)))))
    (setq display-time-hook-installed t)
    (if (fboundp 'add-hook)
        (add-hook 'display-time-hook 'appt-check)
--- a/lisp/comint/telnet.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/comint/telnet.el	Mon Aug 13 09:26:39 2007 +0200
@@ -53,6 +53,10 @@
 
 (require 'comint)
 
+(defgroup telnet nil
+  "Telnet/rsh stuff"
+  :group 'comint)
+
 (defvar telnet-new-line "\r")
 (defvar telnet-mode-map nil)
 (defvar telnet-default-prompt-pattern "^[^#$%>\n]*[#$%>] *")
@@ -70,8 +74,14 @@
 while looking for the initial password.")
 ;; (make-variable-buffer-local 'telnet-count)
 
-(defvar telnet-program "telnet"
-  "Program to run to open a telnet connection.")
+(defcustom telnet-program "telnet"
+  "*Program to run to open a telnet connection."
+  :group 'telnet)
+
+(defcustom rsh-eat-password-string nil
+  "Non-nil means rsh will look for a string matching a password prompt."
+  :type 'boolean
+  :group 'telnet)
 
 (defvar telnet-initial-count -75
   "Initial value of `telnet-count'.  Should be set to the negative of the
@@ -119,7 +129,7 @@
   "Tries to put correct initializations in.  Needs work."
   (let ((case-fold-search t))
     (cond ((string-match "unix" string)
-	   (setq telnet-prompt-pattern comint-prompt-regexp)
+	   (setq telnet-prompt-pattern shell-prompt-pattern)
 	   (setq telnet-new-line "\n"))
 	  ((string-match "tops-20" string) ;;maybe add telnet-replace-c-g
 	   (setq telnet-prompt-pattern  "[@>] *"))
@@ -305,7 +315,9 @@
     ;;
     ;; I disagree with the above.  -sb
     ;;
-    (set-process-filter (get-process name) 'telnet-initial-filter)
+    (set-process-filter (get-process name) (if rsh-eat-password-string
+					       'telnet-initial-filter
+					     'telnet-filter))
     ;; (set-process-filter (get-process name) 'telnet-filter)
     ;; run last so that hooks can change things.
     (telnet-mode)))
--- a/lisp/custom/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -1,3 +1,131 @@
+Sat Apr 12 18:31:22 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.84 released.
+
+Sat Apr 12 15:08:31 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (abbrev-mode, alloc, undo, modeline, fill,
+	editing-basics, display, execute, installation, dired, limits,
+	debug, minibuffer, keyboard, mouse, menu, auto-save,
+	processes-basics, windows): New customization groups.
+
+	* Version 1.83 released.
+
+Sat Apr 12 10:44:15 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-start.el: New file.
+
+	* cus-face.el (custom-face-font-size): Don't assume integral
+	number.  Patch by Steven L Baur <steve@miranova.com>.
+
+	* cus-edit.el (custom-menu-create): Don't allow optional `NAME'.
+	(customize-menu-create): Do allow optional name.
+
+	* widget.texi (atoms): Documented `character' widget.
+
+	* custom.el (custom-set-variables): Add warning for old format. 
+
+Fri Apr 11 21:23:33 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.82 released.
+
+Fri Apr 11 18:27:02 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-variable-set): Use `set-default' instead of
+	`set'. 
+	(custom-variable-save): Ditto.
+	(custom-variable-reset-saved): Ditto.
+	(custom-variable-reset-factory): Ditto.
+
+	* Version 1.81 released.
+
+	* custom.el: Added missing autoloads.
+
+Fri Apr 11 18:13:12 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.80 released.
+
+Fri Apr 11 18:06:28 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (customize-face-other-window): Added autoload cookie.
+
+	* Version 1.79 released.
+
+Fri Apr 11 15:27:25 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (customize-face-other-window): New function.
+
+	* wid-browse.el (widget-browse-mode-customize-menu): New menu.
+	(widget-browse-mode): Add it.
+	(widget-browse-mode-map): Bind `q'.
+
+	* wid-browse.el (widget-browse-other-window): New function.
+	* widget.el (widget-browse-other-window): Autoload.
+
+	* cus-edit.el (customize-menu-create): New function.
+	(custom-mode-customize-menu): Use it.
+
+	* Version 1.78 released.
+
+Fri Apr 11 11:12:41 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-make-dependencies): Deleted function.
+
+	* Makefile (cus-load.el): Removed target.
+
+	* cus-edit.el (customize-face): Sort faces.
+
+Thu Apr 10 22:20:20 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* Version 1.77 released.
+
+Thu Apr 10 19:44:07 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-buffer-create-internal): Move to bob + 1.
+
+	* Version 1.76 released.
+
+Thu Apr 10 16:55:28 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-faces): New group.
+	(custom-magic-alist): Added.
+	(custom-variable-sample-face): Added.
+	(custom-variable-button-face): Added.
+	(custom-face-tag-face): Added.
+	(custom-group-tag-faces): Added.
+	(custom-group-tag-face): Added.
+	(customize): Removed from faces group.
+
+	* cus-edit.el (custom-load-recursion): New variable.
+	(custom-load-symbol): Use it.
+	(custom-mode-customize-menu): New menu.
+	(custom-mode): Use it.
+	Code moved to te end of the file.
+
+	* Version 1.75 released.
+
+Thu Apr 10 09:50:25 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+	* cus-edit.el (custom-buffer-create-internal): Split out from
+	`custom-buffer-create'. 
+	(custom-buffer-create-other-window): New function.
+
+	* cus-edit.el (custom-guess-name-alist): Renamed from
+	`custom-guess-type-alist'.
+	(custom-guess-doc-alist): New option.
+	(custom-guess-type): Use them.
+
+	* cus-edit.el (custom-menu-create): Add autoload cookie.
+
+	* cus-face.el (set-face-stipple): Removed Kyle Jones code.
+
+	* cus-face.el (face-doc-string): Changed property name to
+	`face-documentation'. 
+	(set-face-doc-string): Ditto.
+
+	* cus-edit.el (custom-variable-type): Don't guess type of
+	variables defined with `defcustom'.
+
 Wed Apr 09 21:11:14 1997  Per Abrahamsen  <abraham@dina.kvl.dk>
 
 	* Version 1.74 released.
@@ -20,7 +148,7 @@
 	Remove XEmacs support.
 	(custom-help-menu): Move here from `custom.el'.
 	Remove XEmacs support.
-	(custom-menu-create): Work even if custom-menu-nesting is
+	(custom-menu-create): Work even if `custom-menu-nesting' is
 	unbound. 
 	(custom-menu-nesting): Don't define for XEmacs.
 
--- a/lisp/custom/cus-edit.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/cus-edit.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -206,9 +206,90 @@
   :link '(url-link :tag "Development Page" 
 		   "http://www.dina.kvl.dk/~abraham/custom/")
   :prefix "custom-"
-  :group 'help
+  :group 'help)
+
+(defgroup custom-faces nil
+  "Faces used by customize."
+  :group 'customize
   :group 'faces)
 
+(defgroup abbrev-mode nil
+  "Word abbreviations mode."
+  :group 'abbrev)
+
+(defgroup alloc nil
+  "Storage allocation and gc for GNU Emacs Lisp interpreter."
+  :tag "Storage Allocation"
+  :group 'internal)
+
+(defgroup undo nil
+  "Undoing changes in buffers."
+  :group 'editing)
+
+(defgroup modeline nil
+  "Content of the modeline."
+  :group 'environment)
+
+(defgroup fill nil
+  "Indenting and filling text."
+  :group 'editing)
+
+(defgroup editing-basics nil
+  "Most basic editing facilities."
+  :group 'editing)
+
+(defgroup display nil
+  "How characters are displayed in buffers."
+  :group 'environment)
+
+(defgroup execute nil
+  "Executing external commands."
+  :group 'processes)
+
+(defgroup installation nil
+  "The Emacs installation."
+  :group 'environment)
+
+(defgroup dired nil
+  "Directory editing."
+  :group 'environment)
+
+(defgroup limits nil
+  "Internal Emacs limits."
+  :group 'internal)
+
+(defgroup debug nil
+  "Debugging Emacs itself."
+  :group 'development)
+
+(defgroup minibuffer nil
+  "Controling the behaviour of the minibuffer."
+  :group 'environment)
+
+(defgroup keyboard nil
+  "Input from the keyboard."
+  :group 'environment)
+
+(defgroup mouse nil
+  "Input from the mouse."
+  :group 'environment)
+
+(defgroup menu nil
+  "Input from the menus."
+  :group 'environment)
+
+(defgroup auto-save nil
+  "Preventing accidential loss of data."
+  :group 'data)
+
+(defgroup processes-basics nil
+  "Basic stuff dealing with processes."
+  :group 'processes)
+
+(defgroup windows nil
+  "Windows within a frame."
+  :group 'processes)
+
 ;;; Utilities.
 
 (defun custom-quote (sexp)
@@ -240,6 +321,23 @@
 	(nreverse (cons (substring regexp start) all)))
     regexp))
 
+(defun custom-variable-prompt ()
+  ;; Code stolen from `help.el'.
+  "Prompt for a variable, defaulting to the variable at point.
+Return a list suitable for use in `interactive'."
+   (let ((v (variable-at-point))
+	 (enable-recursive-minibuffers t)
+	 val)
+     (setq val (completing-read 
+		(if v
+		    (format "Customize variable (default %s): " v)
+		  "Customize variable: ")
+		obarray 'boundp t))
+     (list (if (equal val "")
+	       v (intern val)))))
+
+;;; Unlispify.
+
 (defvar custom-prefix-list nil
   "List of prefixes that should be ignored by `custom-unlispify'")
 
@@ -298,7 +396,9 @@
 	    (concat (symbol-name symbol) "-"))
 	prefixes))
 
-(defcustom custom-guess-type-alist
+;;; Guess.
+
+(defcustom custom-guess-name-alist
   '(("-p\\'" boolean)
     ("-hook\\'" hook)
     ("-face\\'" face)
@@ -316,79 +416,53 @@
 
 This is used for guessing the type of variables not declared with
 customize."
-  :type '(repeat (group regexp sexp))
+  :type '(repeat (group (regexp :tag "Match") (sexp :tag "Type")))
+  :group 'customize)
+
+(defcustom custom-guess-doc-alist
+  '(("\\`\\*?Non-nil " boolean))
+  "Alist of (MATCH TYPE).
+
+MATCH should be a regexp matching a documentation string, and TYPE
+should be a widget suitable for editing the value of a variable with
+that documentation string.  The TYPE of the first entry where MATCH
+matches the name of the symbol will be used.
+
+This is used for guessing the type of variables not declared with
+customize."
+  :type '(repeat (group (regexp :tag "Match") (sexp :tag "Type")))
   :group 'customize)
 
 (defun custom-guess-type (symbol)
   "Guess a widget suitable for editing the value of SYMBOL.
-This is done by matching SYMBOL with `custom-guess-type-alist'."
+This is done by matching SYMBOL with `custom-guess-name-alist' and 
+if that fails, the doc string with `custom-guess-doc-alist'."
   (let ((name (symbol-name symbol))
-	(alist custom-guess-type-alist)
+	(names custom-guess-name-alist)
 	current found)
-    (while alist
-      (setq current (car alist)
-	    alist (cdr alist))
+    (while names
+      (setq current (car names)
+	    names (cdr names))
       (when (string-match (nth 0 current) name)
 	(setq found (nth 1 current)
-	      alist nil)))
+	      names nil)))
+    (unless found
+      (let ((doc (documentation-property symbol 'variable-documentation))
+	    (docs custom-guess-doc-alist))
+	(when doc 
+	  (while docs
+	    (setq current (car docs)
+		  docs (cdr docs))
+	    (when (string-match (nth 0 current) doc)
+	      (setq found (nth 1 current)
+		    docs nil))))))
     found))
 
-;;; The Custom Mode.
+;;; Custom Mode Commands.
 
 (defvar custom-options nil
   "Customization widgets in the current buffer.")
 
-(defvar custom-mode-map nil
-  "Keymap for `custom-mode'.")
-  
-(unless custom-mode-map
-  (setq custom-mode-map (make-sparse-keymap))
-  (set-keymap-parent custom-mode-map widget-keymap)
-  (define-key custom-mode-map "q" 'bury-buffer))
-
-(easy-menu-define custom-mode-menu 
-    custom-mode-map
-  "Menu used in customization buffers."
-    '("Custom"
-      ["Set" custom-set t]
-      ["Save" custom-save t]
-      ["Reset to Current" custom-reset-current t]
-      ["Reset to Saved" custom-reset-saved t]
-      ["Reset to Factory Settings" custom-reset-factory t]
-      ["Info" (Info-goto-node "(custom)The Customization Buffer") t]))
-
-(defcustom custom-mode-hook nil
-  "Hook called when entering custom-mode."
-  :type 'hook
-  :group 'customize)
-
-(defun custom-mode ()
-  "Major mode for editing customization buffers.
-
-The following commands are available:
-
-\\[widget-forward]		Move to next button or editable field.
-\\[widget-backward]		Move to previous button or editable field.
-\\[widget-button-click]		Activate button under the mouse pointer.
-\\[widget-button-press]		Activate button under point.
-\\[custom-set]			Set all modifications.
-\\[custom-save]		Make all modifications default.
-\\[custom-reset-current]        Reset all modified options. 
-\\[custom-reset-saved]		Reset all modified or set options.
-\\[custom-reset-factory]	Reset all options.
-
-Entry to this mode calls the value of `custom-mode-hook'
-if that value is non-nil."
-  (kill-all-local-variables)
-  (setq major-mode 'custom-mode
-	mode-name "Custom")
-  (use-local-map custom-mode-map)
-  (easy-menu-add custom-mode-menu)
-  (make-local-variable 'custom-options)
-  (run-hooks 'custom-mode-hook))
-
-;;; Custom Mode Commands.
-
 (defun custom-set ()
   "Set changes in all modified options."
   (interactive)
@@ -473,21 +547,17 @@
 ;;;###autoload
 (defun customize-variable (symbol)
   "Customize SYMBOL, which must be a variable."
-  (interactive
-   ;; Code stolen from `help.el'.
-   (let ((v (variable-at-point))
-	 (enable-recursive-minibuffers t)
-	 val)
-     (setq val (completing-read 
-		(if v
-		    (format "Customize variable (default %s): " v)
-		  "Customize variable: ")
-		obarray 'boundp t))
-     (list (if (equal val "")
-	       v (intern val)))))
+  (interactive (custom-variable-prompt))
   (custom-buffer-create (list (list symbol 'custom-variable))))
 
 ;;;###autoload
+(defun customize-variable-other-window (symbol)
+  "Customize SYMBOL, which must be a variable.
+Show the buffer in another window, but don't select it."
+  (interactive (custom-variable-prompt))
+  (custom-buffer-create-other-window (list (list symbol 'custom-variable))))
+
+;;;###autoload
 (defun customize-face (&optional symbol)
   "Customize SYMBOL, which should be a face name or nil.
 If SYMBOL is nil, customize all faces."
@@ -498,7 +568,10 @@
 	(message "Looking for faces...")
 	(mapcar (lambda (symbol)
 		  (setq found (cons (list symbol 'custom-face) found)))
-		(face-list))
+		(nreverse (mapcar 'intern 
+				  (sort (mapcar 'symbol-name (face-list))
+					'string<))))
+			
 	(custom-buffer-create found))
     (if (stringp symbol)
 	(setq symbol (intern symbol)))
@@ -507,6 +580,19 @@
     (custom-buffer-create (list (list symbol 'custom-face)))))
 
 ;;;###autoload
+(defun customize-face-other-window (&optional symbol)
+  "Show customization buffer for FACE in other window."
+  (interactive (list (completing-read "Customize face: " 
+				      obarray 'custom-facep)))
+  (if (or (null symbol) (and (stringp symbol) (zerop (length symbol))))
+      ()
+    (if (stringp symbol)
+	(setq symbol (intern symbol)))
+    (unless (symbolp symbol)
+      (error "Should be a symbol %S" symbol))
+    (custom-buffer-create-other-window (list (list symbol 'custom-face)))))
+
+;;;###autoload
 (defun customize-customized ()
   "Customize all already customized user options."
   (interactive)
@@ -554,9 +640,24 @@
 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
 SYMBOL is a customization option, and WIDGET is a widget for editing
 that option."
-  (message "Creating customization buffer...")
   (kill-buffer (get-buffer-create "*Customization*"))
   (switch-to-buffer (get-buffer-create "*Customization*"))
+  (custom-buffer-create-internal options))
+
+(defun custom-buffer-create-other-window (options)
+  "Create a buffer containing OPTIONS.
+OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
+SYMBOL is a customization option, and WIDGET is a widget for editing
+that option."
+  (kill-buffer (get-buffer-create "*Customization*"))
+  (let ((window (selected-window)))
+    (switch-to-buffer-other-window (get-buffer-create "*Customization*"))
+    (custom-buffer-create-internal options)
+    (select-window window)))
+  
+
+(defun custom-buffer-create-internal (options)
+  (message "Creating customization buffer...")
   (custom-mode)
   (widget-insert "This is a customization buffer.
 Push RET or click mouse-2 on the word ")
@@ -634,6 +735,7 @@
   (message "Creating customization setup...")
   (widget-setup)
   (goto-char (point-min))
+  (forward-char)			;Kludge: bob is writable in XEmacs.
   (message "Creating customization buffer...done"))
 
 ;;; Modification of Basic Widgets.
@@ -796,7 +898,8 @@
 				     (string :tag "Magic")
 				     face
 				     (string :tag "Description"))))
-  :group 'customize)
+  :group 'customize
+  :group 'custom-faces)
 
 (defcustom custom-magic-show 'long
   "Show long description of the state of each customization option."
@@ -999,22 +1102,27 @@
 	  (t
 	   (funcall show widget value)))))
 
+(defvar custom-load-recursion nil
+  "Hack to avoid recursive dependencies.")
+
 (defun custom-load-symbol (symbol)
   "Load all dependencies for SYMBOL."
-  (let ((loads (get symbol 'custom-loads))
-	load)
-    (while loads
-      (setq load (car loads)
-	    loads (cdr loads))
-      (cond ((symbolp load)
-	     (condition-case nil
-		 (require load)
-	       (error nil)))
-	    ((assoc load load-history))
-	    (t
-	     (condition-case nil
-		 (load-library load)
-	       (error nil)))))))
+  (unless custom-load-recursion
+    (let ((custom-load-recursion t) 
+	  (loads (get symbol 'custom-loads))
+	  load)
+      (while loads
+	(setq load (car loads)
+	      loads (cdr loads))
+	(cond ((symbolp load)
+	       (condition-case nil
+		   (require load)
+		 (error nil)))
+	      ((assoc load load-history))
+	      (t
+	       (condition-case nil
+		   (load-library load)
+		 (error nil))))))))
 
 (defun custom-load-widget (widget)
   "Load all dependencies for WIDGET."
@@ -1024,11 +1132,11 @@
 
 (defface custom-variable-sample-face '((t (:underline t)))
   "Face used for unpushable variable tags."
-  :group 'customize)
+  :group 'custom-faces)
 
 (defface custom-variable-button-face '((t (:underline t :bold t)))
   "Face used for pushable variable tags."
-  :group 'customize)
+  :group 'custom-faces)
 
 (define-widget 'custom-variable 'custom
   "Customize variable."
@@ -1051,7 +1159,8 @@
 If SYMBOL has a `custom-type' property, use that.  
 Otherwise, look up symbol in `custom-guess-type-alist'."
   (let* ((type (or (get symbol 'custom-type)
-		   (custom-guess-type symbol)
+		   (and (not (get symbol 'factory-value))
+			(custom-guess-type symbol))
 		   'sexp))
 	 (options (get symbol 'custom-options))
 	 (tmp (if (listp type)
@@ -1213,10 +1322,10 @@
 	   (goto-char (widget-get val :from))
 	   (error "%s" (widget-get val :error)))
 	  ((eq form 'lisp)
-	   (set symbol (eval (setq val (widget-value child))))
+	   (set-default symbol (eval (setq val (widget-value child))))
 	   (put symbol 'customized-value (list val)))
 	  (t
-	   (set symbol (setq val (widget-value child)))
+	   (set-default symbol (setq val (widget-value child)))
 	   (put symbol 'customized-value (list (custom-quote val)))))
     (custom-variable-state-set widget)
     (custom-redraw-magic widget)))
@@ -1235,12 +1344,12 @@
 	   (error "%s" (widget-get val :error)))
 	  ((eq form 'lisp)
 	   (put symbol 'saved-value (list (widget-value child)))
-	   (set symbol (eval (widget-value child))))
+	   (set-default symbol (eval (widget-value child))))
 	  (t
 	   (put symbol
 		'saved-value (list (custom-quote (widget-value
 						  child))))
-	   (set symbol (widget-value child))))
+	   (set-default symbol (widget-value child))))
     (put symbol 'customized-value nil)
     (custom-save-all)
     (custom-variable-state-set widget)
@@ -1251,7 +1360,7 @@
   (let ((symbol (widget-value widget)))
     (if (get symbol 'saved-value)
 	(condition-case nil
-	    (set symbol (eval (car (get symbol 'saved-value))))
+	    (set-default symbol (eval (car (get symbol 'saved-value))))
 	  (error nil))
       (error "No saved value for %s" symbol))
     (put symbol 'customized-value nil)
@@ -1262,7 +1371,7 @@
   "Restore the factory setting for the variable being edited by WIDGET."
   (let ((symbol (widget-value widget)))
     (if (get symbol 'factory-value)
-	(set symbol (eval (car (get symbol 'factory-value))))
+	(set-default symbol (eval (car (get symbol 'factory-value))))
       (error "No factory default for %S" symbol))
     (put symbol 'customized-value nil)
     (when (get symbol 'saved-value)
@@ -1362,7 +1471,7 @@
 
 (defface custom-face-tag-face '((t (:underline t)))
   "Face used for face tags."
-  :group 'customize)
+  :group 'custom-faces)
 
 (define-widget 'custom-face 'custom
   "Customize face."
@@ -1664,7 +1773,7 @@
 and so forth.  The remaining group tags are shown with
 `custom-group-tag-face'."
   :type '(repeat face)
-  :group 'customize)
+  :group 'custom-faces)
 
 (defface custom-group-tag-face-1 '((((class color)
 				     (background dark))
@@ -1683,7 +1792,7 @@
 				  (:foreground "blue" :underline t))
 				 (t (:underline t)))
   "Face used for low level group tags."
-  :group 'customize)
+  :group 'custom-faces)
 
 (define-widget 'custom-group 'custom
   "Customize group."
@@ -2004,16 +2113,12 @@
       (custom-menu-create symbol))))
 
 ;;;###autoload
-(defun custom-menu-create (symbol &optional name)
+(defun custom-menu-create (symbol)
   "Create menu for customization group SYMBOL.
-If optional NAME is given, use that as the name of the menu. 
-Otherwise make up a name from SYMBOL.
 The menu is in a format applicable to `easy-menu-define'."
-  (unless name
-    (setq name (custom-unlispify-menu-entry symbol)))
-  (let ((item (vector name
-		      `(custom-buffer-create '((,symbol custom-group)))
-		      t)))
+  (let* ((item (vector (custom-unlispify-menu-entry symbol)
+		       `(custom-buffer-create '((,symbol custom-group)))
+		       t)))
     (if (and (or (not (boundp 'custom-menu-nesting))
 		 (>= custom-menu-nesting 0))
 	     (< (length (get symbol 'custom-group)) widget-menu-max-size))
@@ -2031,46 +2136,78 @@
 		      (get symbol 'custom-group))))
       item)))
 
-;;; Dependencies.
+;;;###autoload
+(defun customize-menu-create (symbol &optional name)
+  "Return a customize menu for customization group SYMBOL.
+If optional NAME is given, use that as the name of the menu. 
+Otherwise the menu will be named `Customize'.
+The format is suitable for use with `easy-menu-define'."
+  (unless name
+    (setq name "Customize"))
+  (if (string-match "XEmacs" emacs-version)
+      ;; We can delay it under XEmacs.
+      `(,name
+	:filter (lambda (&rest junk)
+		  (cdr (custom-menu-create ',symbol))))
+    ;; But we must create it now under Emacs.
+    (cons name (cdr (custom-menu-create symbol)))))
+
+;;; The Custom Mode.
+
+(defvar custom-mode-map nil
+  "Keymap for `custom-mode'.")
+  
+(unless custom-mode-map
+  (setq custom-mode-map (make-sparse-keymap))
+  (set-keymap-parent custom-mode-map widget-keymap)
+  (define-key custom-mode-map "q" 'bury-buffer))
+
+(easy-menu-define custom-mode-customize-menu 
+    custom-mode-map
+  "Menu used in customization buffers."
+  (customize-menu-create 'customize))
 
-;;;###autoload
-(defun custom-make-dependencies ()
-  "Batch function to extract custom dependencies from .el files.
-Usage: emacs -batch *.el -f custom-make-dependencies > deps.el"
-  (let ((buffers (buffer-list)))
-    (while buffers
-      (set-buffer (car buffers))
-      (setq buffers (cdr buffers))
-      (let ((file (buffer-file-name)))
-	(when (and file (string-match "\\`\\(.*\\)\\.el\\'" file))
-	  (goto-char (point-min))
-	  (condition-case nil
-	      (let ((name (file-name-nondirectory (match-string 1 file))))
-		(while t
-		  (let ((expr (read (current-buffer))))
-		    (when (and (listp expr)
-			       (memq (car expr) '(defcustom defface defgroup)))
-		      (eval expr)
-		      (put (nth 1 expr) 'custom-where name)))))
-	    (error nil))))))
-  (mapatoms (lambda (symbol)
-	      (let ((members (get symbol 'custom-group))
-		    item where found)
-		(when members
-		  (princ "(put '")
-		  (princ symbol)
-		  (princ " 'custom-loads '(")
-		  (while members
-		    (setq item (car (car members))
-			  members (cdr members)
-			  where (get item 'custom-where))
-		    (unless (or (null where)
-				(member where found))
-		      (when found
-			(princ " "))
-		      (prin1 where)
-		      (push where found)))
-		  (princ "))\n"))))))
+(easy-menu-define custom-mode-menu 
+    custom-mode-map
+  "Menu used in customization buffers."
+  `("Custom"
+    ["Set" custom-set t]
+    ["Save" custom-save t]
+    ["Reset to Current" custom-reset-current t]
+    ["Reset to Saved" custom-reset-saved t]
+    ["Reset to Factory Settings" custom-reset-factory t]
+    ["Info" (Info-goto-node "(custom)The Customization Buffer") t]))
+
+(defcustom custom-mode-hook nil
+  "Hook called when entering custom-mode."
+  :type 'hook
+  :group 'customize)
+
+(defun custom-mode ()
+  "Major mode for editing customization buffers.
+
+The following commands are available:
+
+Move to next button or editable field.     \\[widget-forward]
+Move to previous button or editable field. \\[widget-backward]
+Activate button under the mouse pointer.   \\[widget-button-click]
+Activate button under point.		   \\[widget-button-press]
+Set all modifications.			   \\[custom-set]
+Make all modifications default.		   \\[custom-save]
+Reset all modified options. 		   \\[custom-reset-current]
+Reset all modified or set options.	   \\[custom-reset-saved]
+Reset all options.			   \\[custom-reset-factory]
+
+Entry to this mode calls the value of `custom-mode-hook'
+if that value is non-nil."
+  (kill-all-local-variables)
+  (setq major-mode 'custom-mode
+	mode-name "Custom")
+  (use-local-map custom-mode-map)
+  (easy-menu-add custom-mode-customize-menu)
+  (easy-menu-add custom-mode-menu)
+  (make-local-variable 'custom-options)
+  (run-hooks 'custom-mode-hook))
 
 ;;; The End.
 
--- a/lisp/custom/cus-face.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/cus-face.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -39,7 +39,7 @@
 
 (eval-and-compile
   (unless (fboundp 'frame-property)
-    ;; XEmacs function missing in Emacs 19.34.
+    ;; XEmacs function missing in Emacs.
     (defun frame-property (frame property &optional default)
       "Return FRAME's value for property PROPERTY."
       (or (cdr (assq property (frame-parameters frame)))
@@ -49,44 +49,13 @@
     ;; XEmacs function missing in Emacs.
     (defun face-doc-string (face)
       "Get the documentation string for FACE."
-      (get face 'face-doc-string)))
+      (get face 'face-documentation)))
 
   (unless (fboundp 'set-face-doc-string)
     ;; XEmacs function missing in Emacs.
     (defun set-face-doc-string (face string)
       "Set the documentation string for FACE to STRING."
-      (put face 'face-doc-string string)))
-
-  (when (and (not (fboundp 'set-face-stipple))
-	     (fboundp 'set-face-background-pixmap))
-    ;; Emacs function missing in XEmacs 19.15.
-    (defun set-face-stipple (face pixmap &optional frame)
-      ;; Written by Kyle Jones.
-      "Change the stipple pixmap of face FACE to PIXMAP.
-PIXMAP should be a string, the name of a file of pixmap data.
-The directories listed in the `x-bitmap-file-path' variable are searched.
-
-Alternatively, PIXMAP may be a list of the form (WIDTH HEIGHT DATA)
-where WIDTH and HEIGHT are the size in pixels,
-and DATA is a string, containing the raw bits of the bitmap.  
-
-If the optional FRAME argument is provided, change only
-in that frame; otherwise change each frame."
-      (while (not (find-face face))
-	(setq face (signal 'wrong-type-argument (list 'facep face))))
-      (while (cond ((stringp pixmap)
-		    (unless (file-readable-p pixmap)
-		      (setq pixmap (vector 'xbm ':file pixmap)))
-		    nil)
-		   ((and (consp pixmap) (= (length pixmap) 3))
-		    (setq pixmap (vector 'xbm ':data pixmap))
-		    nil)
-		   (t t))
-	(setq pixmap (signal 'wrong-type-argument
-			     (list 'stipple-pixmap-p pixmap))))
-      (while (and frame (not (framep frame)))
-	(setq frame (signal 'wrong-type-argument (list 'framep frame))))
-      (set-face-background-pixmap face pixmap frame))))
+      (put face 'face-documentation string))))
 
 (unless (fboundp 'x-color-values)
   ;; Emacs function missing in XEmacs 19.14.
@@ -410,7 +379,7 @@
     "Return the size of the font of FACE as a string."
     (let* ((font (apply 'custom-face-font-name face args))
 	   (fontobj (font-create-object font)))
-      (format "%d" (font-size fontobj))))
+      (format "%s" (font-size fontobj))))
 
   (defun custom-set-face-font-family (face family &rest args)
     "Set the font of FACE to FAMILY."
@@ -540,6 +509,7 @@
 		(initialize-face-resources symbol frame))))
 	  (face-list)))
 
+;;;###autoload
 (defun custom-initialize-frame (&optional frame)
   "Initialize local faces for FRAME if necessary.
 If FRAME is missing or nil, the first member of (frame-list) is used."
--- a/lisp/custom/custom.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/custom.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, faces
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -23,24 +23,29 @@
 
 (define-widget-keywords :prefix :tag :load :link :options :type :group)
 
-(defvar custom-define-hook nil
-  "Hook called after defining each customize option.")
-
-;; These autoloads should be deleted when the file is added to Emacs
-
+;; These autoloads should be deleted eventually. 
 (unless (fboundp 'load-gc)
   ;; From cus-edit.el
   (autoload 'customize "cus-edit" nil t)
   (autoload 'customize-variable "cus-edit" nil t)
+  (autoload 'customize-variable-other-window "cus-edit" nil t)
   (autoload 'customize-face "cus-edit" nil t)
+  (autoload 'customize-face-other-window "cus-edit" nil t)
   (autoload 'customize-apropos "cus-edit" nil t)
   (autoload 'customize-customized "cus-edit" nil t)
   (autoload 'custom-buffer-create "cus-edit")
   (autoload 'custom-make-dependencies "cus-edit")
+  (autoload 'custom-menu-create "cus-edit")
+  (autoload 'customize-menu-create "cus-edit")
+  
   ;; From cus-face.el
   (autoload 'custom-declare-face "cus-face")
   (autoload 'custom-set-faces "cus-face"))
 
+(defvar custom-define-hook nil
+  ;; Customize information for this option is in `cus-edit.el'.
+  "Hook called after defining each customize option.")
+
 ;;; The `defcustom' Macro.
 
 (defun custom-declare-variable (symbol value doc &rest args)
@@ -295,6 +300,9 @@
 		   (set-default symbol (eval value))))
 	    (setq args (cdr args)))
 	;; Old format, a plist of SYMBOL VALUE pairs.
+	(message "Warning: old format `custom-set-variables'")
+	(ding)
+	(sit-for 2)
 	(let ((symbol (nth 0 args))
 	      (value (nth 1 args)))
 	  (put symbol 'saved-value (list value)))
--- a/lisp/custom/wid-browse.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/wid-browse.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: extensions
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -29,7 +29,13 @@
   
 (unless widget-browse-mode-map
   (setq widget-browse-mode-map (make-sparse-keymap))
-  (set-keymap-parent widget-browse-mode-map widget-keymap))
+  (set-keymap-parent widget-browse-mode-map widget-keymap)
+  (define-key widget-browse-mode-map "q" 'bury-buffer))
+
+(easy-menu-define widget-browse-mode-customize-menu 
+    widget-browse-mode-map
+  "Menu used in widget browser buffers."
+  (customize-menu-create 'widgets))
 
 (easy-menu-define widget-browse-mode-menu 
     widget-browse-mode-map
@@ -59,6 +65,7 @@
   (setq major-mode 'widget-browse-mode
 	mode-name "Widget")
   (use-local-map widget-browse-mode-map)
+  (easy-menu-add widget-browse-mode-customize-menu)
   (easy-menu-add widget-browse-mode-menu)
   (run-hooks 'widget-browse-mode-hook))
 
@@ -82,6 +89,7 @@
 
 (defvar widget-browse-history nil)
 
+;;;###autoload
 (defun widget-browse (widget)
   "Create a widget browser for WIDGET."
   (interactive (list (completing-read "Widget: " 
@@ -106,11 +114,11 @@
   (widget-browse-mode)
   
   ;; Quick way to get out.
-  (widget-create 'push-button
-		 :action (lambda (widget &optional event)
-			   (bury-buffer))
-		 "Quit")
-  (widget-insert "\n")
+;;  (widget-create 'push-button
+;;		 :action (lambda (widget &optional event)
+;;			   (bury-buffer))
+;;		 "Quit")
+;;  (widget-insert "\n")
 
   ;; Top text indicating whether it is a class or object browser.
   (if (listp widget)
@@ -145,6 +153,18 @@
   (widget-setup)
   (goto-char (point-min)))
 
+;;;###autoload
+(defun widget-browse-other-window (&optional widget)
+  "Show widget browser for WIDGET in other window."
+  (interactive)
+  (let ((window (selected-window)))
+    (switch-to-buffer-other-window "*Browse Widget*")
+    (if widget
+	(widget-browse widget)
+      (call-interactively 'widget-browse))
+    (select-window window)))
+
+
 ;;; The `widget-browse' Widget.
 
 (define-widget 'widget-browse 'push-button
--- a/lisp/custom/wid-edit.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/wid-edit.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: extensions
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
--- a/lisp/custom/widget-example.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/widget-example.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 (require 'widget)
--- a/lisp/custom/widget.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/custom/widget.el	Mon Aug 13 09:26:39 2007 +0200
@@ -4,7 +4,7 @@
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Keywords: help, extensions, faces, hypermedia
-;; Version: 1.74
+;; Version: 1.84
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
 
 ;;; Commentary:
@@ -50,6 +50,7 @@
   (autoload 'widget-create "wid-edit")
   (autoload 'widget-insert "wid-edit")
   (autoload 'widget-browse "wid-browse" nil t)
+  (autoload 'widget-browse-other-window "wid-browse" nil t)
   (autoload 'widget-browse-at "wid-browse" nil t))
 
 (defun define-widget (name class doc &rest args)
--- a/lisp/edebug/edebug.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/edebug/edebug.el	Mon Aug 13 09:26:39 2007 +0200
@@ -29,7 +29,7 @@
 ;; LCD Archive Entry:
 ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu
 ;; |A source level debugger for Emacs Lisp.
-;; |$Date: 1997/03/08 23:25:52 $|$Revision: 1.3 $|~/modes/edebug.el|
+;; |$Date: 1997/04/13 03:13:54 $|$Revision: 1.4 $|~/modes/edebug.el|
 
 ;; This minor mode allows programmers to step through Emacs Lisp
 ;; source code while executing functions.  You can also set
@@ -87,7 +87,7 @@
 ;;; Code:
 
 (defconst edebug-version
-  (let ((raw-version "$Revision: 1.3 $"))
+  (let ((raw-version "$Revision: 1.4 $"))
     (substring raw-version (string-match "[0-9.]*" raw-version)
 	       (match-end 0))))
      
@@ -1105,8 +1105,9 @@
   ;; Here we just catch any no-match not caught below and signal an error.
 
   ;; Run the setup hook.
-  (run-hooks 'edebug-setup-hook)
-  (setq edebug-setup-hook nil)
+  (let ((temp-hook edebug-setup-hook))
+    (setq edebug-setup-hook nil)
+    (run-hooks 'temp-hook))
 
   (let (result
 	edebug-top-window-data
--- a/lisp/emulators/crisp.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/emulators/crisp.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;; @(#) crisp.el -- CRiSP/Brief Emacs emulator
 
 ;; Author: Gary D. Foster <Gary.Foster@corp.sun.com>
-;; $Revision: 1.2 $
+;; $Revision: 1.3 $
 ;; Keywords: emulations brief crisp
 
 ;; This file is part of GNU Emacs.
@@ -21,8 +21,6 @@
 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
-;; CRiSP is a registered trademark of Foxtrot Systems Ltd.
-
 ;;; Commentary:
 
 ;; Keybindings and minor functions to duplicate the functionality and
@@ -55,42 +53,45 @@
 ;; local variables
 
 (defvar crisp-mode-map (copy-keymap (current-global-map))
-  "Local keymap for CRiSP mode.
+  "Local keymap for CRiSP emulation mode.
 All the bindings are done here instead of globally to try and be
 nice to the world.")
 
 (defvar crisp-mode-modeline-string " *CRiSP*"
-  "String to display in the modeline when CRiSP mode is enabled.")
+  "String to display in the modeline when CRiSP emulation mode is enabled.")
 
 (defvar crisp-mode-original-keymap (copy-keymap (current-global-map))
-  "The original keymap before CRiSP mode remaps anything.
-This keymap is restored when CRiSP mode is disabled.")
+  "The original keymap before CRiSP emulation mode remaps anything.
+This keymap is restored when CRiSP emulation mode is disabled.")
 
 (defvar crisp-mode-enabled 'nil
-  "Track status of CRiSP mode.
+  "Track status of CRiSP emulation mode.
 A value of nil means CRiSP mode is not enabled.  A value of t
 indicates CRiSP mode is enabled.")
 
 (defvar crisp-override-meta-x 't
-  "Controls overriding the normal Emacs M-x key binding.
-The normal binding for M-x is `execute-extended-command', however
-the normal CRiSP keybinding for M-x is to exit the editor, while
-the F10 key is used to execute extended commands.  If you don't
-want M-x to dump you out of emacs, set this to nil before loading
-the package.")
+  "Controls overriding the normal Emacs M-x key binding in the CRiSP emulator.
+Normally the CRiSP emulator rebinds M-x to save-buffers-exit-emacs
+and provides the usual M-x functionality on the F10 key.
+
+If this variable is nil when you start the CRiSP emulator, it
+does not alter the binding of M-x.")
 
 (defvar crisp-load-scroll-lock 't
-  "Controls loading of the Scroll Lock minor mode package.
-Default behavior is to load the scroll lock minor mode
-package when CRiSP mode is enabled.  Set to nil prior
-to loading this package to prevent it.")
+  "Controls loading of the Scroll Lock in the CRiSP emulator.
+Its Default behavior is to load and enable the Scroll Lock minor mode
+package when enabling the CRiSP emulator.
+
+If this variable is nil when you start the CRiSP emulator, it
+does not load Scroll Lock.")
 
 (defvar crisp-load-hook nil
-  "Hooks to run after CRiSP mode is enabled.")
+  "Hooks to run after loadint the CRiSP emulator package.")
 
-(defvar crisp-mode-running-xemacs (string-match "XEmacs\\Lucid" emacs-version))
+(defvar crisp-version "crisp.el release 1.1/$Revision: 1.3 $"
+  "The release number and RCS version for the CRiSP emulator.")
 
-(if crisp-mode-running-xemacs
+(if (string-match "XEmacs\\Lucid" emacs-version)
     (add-minor-mode 'crisp-mode-enabled crisp-mode-modeline-string)
   (or (assq 'crisp-mode-enabled minor-mode-alist)
       (setq minor-mode-alist
@@ -141,12 +142,23 @@
 (define-key crisp-mode-map [(meta g)]       'goto-line)
 (define-key crisp-mode-map [(meta h)]       'help)
 (define-key crisp-mode-map [(meta i)]       'overwrite-mode)
+(define-key crisp-mode-map [(meta j)]       'bookmark-jump)
 (define-key crisp-mode-map [(meta u)]       'advertised-undo)
 (define-key crisp-mode-map [(f14)]          'advertised-undo)
 (define-key crisp-mode-map [(meta w)]       'save-buffer)
 (if
  (eq crisp-override-meta-x 't)
-  (define-key crisp-mode-map [(meta x)]       'save-buffers-kill-emacs))
+  (define-key crisp-mode-map [(meta x)]     'save-buffers-kill-emacs))
+(define-key crisp-mode-map [(meta ?0)]      (lambda () (interactive) (bookmark-set "0")))
+(define-key crisp-mode-map [(meta ?1)]      (lambda () (interactive) (bookmark-set "1")))
+(define-key crisp-mode-map [(meta ?2)]      (lambda () (interactive) (bookmark-set "2")))
+(define-key crisp-mode-map [(meta ?3)]      (lambda () (interactive) (bookmark-set "3")))
+(define-key crisp-mode-map [(meta ?4)]      (lambda () (interactive) (bookmark-set "4")))
+(define-key crisp-mode-map [(meta ?5)]      (lambda () (interactive) (bookmark-set "5")))
+(define-key crisp-mode-map [(meta ?6)]      (lambda () (interactive) (bookmark-set "6")))
+(define-key crisp-mode-map [(meta ?7)]      (lambda () (interactive) (bookmark-set "7")))
+(define-key crisp-mode-map [(meta ?8)]      (lambda () (interactive) (bookmark-set "8")))
+(define-key crisp-mode-map [(meta ?9)]      (lambda () (interactive) (bookmark-set "9")))
 
 (define-key crisp-mode-map [(shift right)]  'fkey-forward-word)
 (define-key crisp-mode-map [(shift left)]   'fkey-backward-word)
@@ -159,10 +171,10 @@
 (define-key crisp-mode-map [(end)] 'crisp-end)
 
 (defun crisp-home ()
-  "Home the point according to CRiSP conventions.
-First call to this moves point to beginning of the line.  Second
-consecutive call moves point to beginning of the screen.  Third
-consecutive call moves the point to the beginning of the buffer."
+  "\"Home\" the point, the way CRiSP would do it.
+The first use moves point to beginning of the line.  Second
+consecutive use moves point to beginning of the screen.  Third
+consecutive use moves point to the beginning of the buffer."
   (interactive nil)
   (cond
     ((and (eq last-command 'crisp-home) (eq last-last-command 'crisp-home))
@@ -174,10 +186,10 @@
   (setq last-last-command last-command))
 
 (defun crisp-end ()
-  "End the point according to CRiSP conventions.
-First call to this moves point to end of the line.  Second
-consecutive call moves point to the end of the screen.  Third
-consecutive call moves point to the end of the buffer."
+  "\"End\" the point, the way CRiSP would do it.
+The first use moves point to end of the line.  Second
+consecutive use moves point to the end of the screen.  Third
+consecutive use moves point to the end of the buffer."
   (interactive nil)
   (cond
     ((and (eq last-command 'crisp-end) (eq last-last-command 'crisp-end))
@@ -192,7 +204,7 @@
 ;; Now enable the mode
 
 (defun crisp-mode ()
-  "Toggle CRiSP minor mode."
+  "Toggle CRiSP emulation minor mode."
   (interactive nil)
   (setq crisp-mode-enabled (not crisp-mode-enabled))
   (cond
--- a/lisp/games/xmine.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/games/xmine.el	Mon Aug 13 09:26:39 2007 +0200
@@ -2,7 +2,7 @@
 
 ;; Author:     Jens Lautenbacher <jens@lemming0.lem.uni-karlsruhe.de>
 ;; Keywords:   games
-;; Version:    1.4
+;; Version:    1.7
 
 ;; This file is part of XEmacs.
 
@@ -44,7 +44,7 @@
 ;;
 ;;; First of all we'll define the needed varibles.
 
-(defconst xmine-version-number "1.4" "XEmacs Mine version number.")
+(defconst xmine-version-number "1.7" "XEmacs Mine version number.")
 (defconst xmine-version (format "XEmacs Mine v%s by Jens Lautenbacher © 1997"
 			       xmine-version-number)
   "Full XEmacs Mine version number.")
@@ -341,7 +341,9 @@
 	    (progn
 	      (xmine-unhide-sound)
 	      (xmine-field-repaint ext)
-	      (if (xmine-game-solved-p) (xmine-end-game)))))))
+	      (if (and (xmine-game-solved-p)
+		       (not (xmine-mine-button-p ext)))
+		       (xmine-end-game)))))))
 
 (defun xmine-action2 (ext)
   "This unhides all hidden neighbours of a button.
--- a/lisp/gnus/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -1,3 +1,42 @@
+Sat Apr 12 23:28:30 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.45 is released.
+
+Sat Apr 12 02:00:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-sum.el (gnus-summary-update-article-line): Insert the
+	subject. 
+
+	* gnus-msg.el (gnus-post-news): Use it.
+
+	* message.el (message-wide-reply): Accept ignore-reply-to.
+
+	* gnus-sum.el (gnus-thread-loop-p): Don't recurse; use a stack.
+
+	* message.el (message-generate-headers): Don't insert incomlete
+	Senders in mail-only messages.
+	(message-check-news-header-syntax): Check subject first.
+
+Sat Apr 12 01:42:42 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+	* gnus.el: Gnus v5.4.44 is released.
+
+Sat Apr 12 01:10:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* nnweb.el (nnweb-request-scan): Init nnweb-hashtb.
+
+Thu Apr 10 20:05:13 1997  Sudish Joseph  <sj@eng.mindspring.net>
+
+	* gnus-art.el (gnus-article-delete-invisible-text): Do an entire
+ 	region instead a single char in each pass.  It's faster and
+ 	doesn't confuse ps-print.
+	(gnus-article-delete-text-of-type): Ditto.
+
+Sat Apr 12 00:35:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+	* gnus-sum.el (gnus-adjust-marked-articles): Wouldn't remove
+	`expire' marks.
+
 Thu Apr 10 22:07:46 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
 	* gnus.el: Gnus v5.4.43 is released.
--- a/lisp/gnus/gnus-art.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/gnus-art.el	Mon Aug 13 09:26:39 2007 +0200
@@ -567,16 +567,20 @@
 (defun gnus-article-delete-text-of-type (type)
   "Delete text of TYPE in the current buffer."
   (save-excursion
-    (let ((b (point-min)))
-      (while (setq b (text-property-any b (point-max) 'article-type type))
-	(delete-region b (incf b))))))
+    (let ((e (point-min))
+	  b)
+      (while (setq b (text-property-any e (point-max) 'article-type type))
+	(setq e (text-property-not-all b (point-max) 'article-type type))
+	(delete-region b e)))))
 
 (defun gnus-article-delete-invisible-text ()
   "Delete all invisible text in the current buffer."
   (save-excursion
-    (let ((b (point-min)))
-      (while (setq b (text-property-any b (point-max) 'invisible t))
-	(delete-region b (incf b))))))
+    (let ((e (point-min))
+	  b)
+      (while (setq b (text-property-any e (point-max) 'invisible t))
+	(setq e (text-property-not-all b (point-max) 'invisible t))
+	(delete-region b e)))))
 
 (defun gnus-article-text-type-exists-p (type)
   "Say whether any text of type TYPE exists in the buffer."
--- a/lisp/gnus/gnus-msg.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/gnus-msg.el	Mon Aug 13 09:26:39 2007 +0200
@@ -415,7 +415,9 @@
 		  (push (list 'gnus-inews-add-to-address pgroup)
 			message-send-actions)))
 	    (set-buffer gnus-article-copy)
-	    (message-wide-reply to-address)))
+	    (message-wide-reply to-address
+				(gnus-group-find-parameter
+				 gnus-newsgroup-name 'broken-reply-to))))
 	(when yank
 	  (gnus-inews-yank-articles yank))))))
 
--- a/lisp/gnus/gnus-sum.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/gnus-sum.el	Mon Aug 13 09:26:39 2007 +0200
@@ -2759,26 +2759,29 @@
 
 (defun gnus-thread-loop-p (root thread)
   "Say whether ROOT is in THREAD."
-  (let ((th (cdr thread)))
-    (while (and th
-		(not (eq (caar th) root)))
-      (pop th))
-    (if th
-	;; We have found a loop.
-	(let (ref-dep)
-	  (setcdr thread (delq (car th) (cdr thread)))
-	  (if (boundp (setq ref-dep (intern "none"
-					    gnus-newsgroup-dependencies)))
-	      (setcdr (symbol-value ref-dep)
-		      (nconc (cdr (symbol-value ref-dep))
-			     (list (car th))))
-	    (set ref-dep (list nil (car th))))
-	  1)
-      ;; Recurse down into the sub-threads and look for loops.
-      (apply '+
-	     (mapcar
-	      (lambda (thread) (gnus-thread-loop-p root thread))
-	      (cdr thread))))))
+  (let ((stack (list thread))
+	(infloop 0)
+	th)
+    (while (setq thread (pop stack))
+      (setq th (cdr thread))
+      (while (and th
+		  (not (eq (caar th) root)))
+	(pop th))
+      (if th
+	  ;; We have found a loop.
+	  (let (ref-dep)
+	    (setcdr thread (delq (car th) (cdr thread)))
+	    (if (boundp (setq ref-dep (intern "none"
+					      gnus-newsgroup-dependencies)))
+		(setcdr (symbol-value ref-dep)
+			(nconc (cdr (symbol-value ref-dep))
+			       (list (car th))))
+	      (set ref-dep (list nil (car th))))
+	    (setq infloop 1
+		  stack nil))
+	;; Push all the subthreads onto the stack.
+	(push (cdr thread) stack)))
+    infloop))
 
 (defun gnus-make-threads ()
   "Go through the dependency hashtb and find the roots.	 Return all threads."
@@ -2950,10 +2953,10 @@
 		    article
 		    (gnus-data-list t)))))
 	      ;; Error on the side of excessive subjects.
-	      (error (mail-header-subject header)))
+	      (error ""))
 	    (mail-header-subject header))
-	   (mail-header-subject header)
-	 "")
+	   ""
+	 (mail-header-subject header))
        nil (cdr (assq article gnus-newsgroup-scored))
        (memq article gnus-newsgroup-processable))
       (when length
@@ -3817,7 +3820,7 @@
       ;; All articles have to be subsets of the active articles.
       (cond
        ;; Adjust "simple" lists.
-       ((memq mark '(tick dormant expirable reply save))
+       ((memq mark '(tick dormant expire reply save))
 	(while articles
 	  (when (or (< (setq article (pop articles)) min) (> article max))
 	    (set var (delq article (symbol-value var))))))
@@ -4867,7 +4870,7 @@
       (run-hooks 'gnus-exit-group-hook)
       (gnus-summary-update-info))
     (gnus-close-group group)
-    ;; Make sure where I was, and go to next newsgroup.
+    ;; Make sure where we were, and go to next newsgroup.
     (set-buffer gnus-group-buffer)
     (unless quit-config
       (gnus-group-jump-to-group group))
--- a/lisp/gnus/gnus.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/gnus.el	Mon Aug 13 09:26:39 2007 +0200
@@ -226,7 +226,7 @@
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "5.4.43"
+(defconst gnus-version-number "5.4.45"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- a/lisp/gnus/md5.el	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,409 +0,0 @@
-;;; md5.el -- MD5 Message Digest Algorithm
-;;; Gareth Rees <gdr11@cl.cam.ac.uk>
-
-;; LCD Archive Entry:
-;; md5|Gareth Rees|gdr11@cl.cam.ac.uk|
-;; MD5 cryptographic message digest algorithm|
-;; 13-Nov-95|1.0|~/misc/md5.el.Z|
-
-;;; Details: ------------------------------------------------------------------
-
-;; This is a direct translation into Emacs LISP of the reference C
-;; implementation of the MD5 Message-Digest Algorithm written by RSA
-;; Data Security, Inc.
-;; 
-;; The algorithm takes a message (that is, a string of bytes) and
-;; computes a 16-byte checksum or "digest" for the message.  This digest
-;; is supposed to be cryptographically strong in the sense that if you
-;; are given a 16-byte digest D, then there is no easier way to
-;; construct a message whose digest is D than to exhaustively search the
-;; space of messages.  However, the robustness of the algorithm has not
-;; been proven, and a similar algorithm (MD4) was shown to be unsound,
-;; so treat with caution!
-;; 
-;; The C algorithm uses 32-bit integers; because GNU Emacs
-;; implementations provide 28-bit integers (with 24-bit integers on
-;; versions prior to 19.29), the code represents a 32-bit integer as the
-;; cons of two 16-bit integers.  The most significant word is stored in
-;; the car and the least significant in the cdr.  The algorithm requires
-;; at least 17 bits of integer representation in order to represent the
-;; carry from a 16-bit addition.
-
-;;; Usage: --------------------------------------------------------------------
-
-;; To compute the MD5 Message Digest for a message M (represented as a
-;; string or as a vector of bytes), call
-;; 
-;;   (md5-encode M)
-;; 
-;; which returns the message digest as a vector of 16 bytes.  If you
-;; need to supply the message in pieces M1, M2, ... Mn, then call
-;; 
-;;   (md5-init)
-;;   (md5-update M1)
-;;   (md5-update M2)
-;;   ...
-;;   (md5-update Mn)
-;;   (md5-final)
-
-;;; Copyright and licence: ----------------------------------------------------
-
-;; Copyright (C) 1995 by Gareth Rees
-;; Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
-;; 
-;; md5.el is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by the
-;; Free Software Foundation; either version 2, or (at your option) any
-;; later version.
-;; 
-;; md5.el is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-;; for more details.
-;; 
-;; The original copyright notice is given below, as required by the
-;; licence for the original code.  This code is distributed under *both*
-;; RSA's original licence and the GNU General Public Licence.  (There
-;; should be no problems, as the former is more liberal than the
-;; latter).
-
-;;; Original copyright notice: ------------------------------------------------
-
-;; Copyright (C) 1990, RSA Data Security, Inc. All rights reserved.
-;;
-;; License to copy and use this software is granted provided that it is
-;; identified as the "RSA Data Security, Inc. MD5 Message- Digest
-;; Algorithm" in all material mentioning or referencing this software or
-;; this function.
-;;
-;; License is also granted to make and use derivative works provided
-;; that such works are identified as "derived from the RSA Data
-;; Security, Inc. MD5 Message-Digest Algorithm" in all material
-;; mentioning or referencing the derived work.
-;;
-;; RSA Data Security, Inc. makes no representations concerning either
-;; the merchantability of this software or the suitability of this
-;; software for any particular purpose.  It is provided "as is" without
-;; express or implied warranty of any kind.
-;;
-;; These notices must be retained in any copies of any part of this
-;; documentation and/or software.
-
-;;; Code: ---------------------------------------------------------------------
-
-(defvar md5-program "md5"
-  "*Program that reads a message on its standard input and writes an
-MD5 digest on its output.")
-
-(defvar md5-maximum-internal-length 4096
-  "*The maximum size of a piece of data that should use the MD5 routines
-written in lisp.  If a message exceeds this, it will be run through an
-external filter for processing.  Also see the `md5-program' variable.
-This variable has no effect if you call the md5-init|update|final
-functions - only used by the `md5' function's simpler interface.")
-
-(defvar md5-bits (make-vector 4 0)
-  "Number of bits handled, modulo 2^64.
-Represented as four 16-bit numbers, least significant first.")
-(defvar md5-buffer (make-vector 4 '(0 . 0))
-  "Scratch buffer (four 32-bit integers).")
-(defvar md5-input (make-vector 64 0)
-  "Input buffer (64 bytes).")
-
-(defun md5-unhex (x)
-  (if (> x ?9)
-      (if (>= x ?a)
-	  (+ 10 (- x ?a))
-	(+ 10 (- x ?A)))
-    (- x ?0)))
-
-(defun md5-encode (message)
-  "Encodes MESSAGE using the MD5 message digest algorithm.
-MESSAGE must be a string or an array of bytes.
-Returns a vector of 16 bytes containing the message digest."
-  (if (<= (length message) md5-maximum-internal-length)
-      (progn
-	(md5-init)
-	(md5-update message)
-	(md5-final))
-    (save-excursion
-      (set-buffer (get-buffer-create " *md5-work*"))
-      (erase-buffer)
-      (insert message)
-      (call-process-region (point-min) (point-max)
-			   (or shell-file-name "/bin/sh")
-			   t (current-buffer) nil
-			   "-c" md5-program)
-      ;; MD5 digest is 32 chars long
-      ;; mddriver adds a newline to make neaten output for tty
-      ;; viewing, make sure we leave it behind.
-      (let ((data (buffer-substring (point-min) (+ (point-min) 32)))
-	    (vec (make-vector 16 0))
-	    (ctr 0))
-	(while (< ctr 16)
-	  (aset vec ctr (+ (* 16 (md5-unhex (aref data (* ctr 2))))
-			   (md5-unhex (aref data (1+ (* ctr 2))))))
-	  (setq ctr (1+ ctr)))))))
-
-(defsubst md5-add (x y)
-  "Return 32-bit sum of 32-bit integers X and Y."
-  (let ((m (+ (car x) (car y)))
-        (l (+ (cdr x) (cdr y))))
-    (cons (logand 65535 (+ m (lsh l -16))) (logand l 65535))))
-
-;; FF, GG, HH and II are basic MD5 functions, providing transformations
-;; for rounds 1, 2, 3 and 4 respectively.  Each function follows this
-;; pattern of computation (where ROTATE(x,y) means rotate 32-bit value x
-;; by y bits to the left):
-;; 
-;;   FF(a,b,c,d,x,s,ac) = ROTATE(a + F(b,c,d) + x + ac,s) + b
-;; 
-;; so we use the macro `md5-make-step' to construct each one.  The
-;; helper functions F, G, H and I operate on 16-bit numbers; the full
-;; operation splits its inputs, operates on the halves separately and
-;; then puts the results together.
-
-(defsubst md5-F (x y z) (logior (logand x y) (logand (lognot x) z)))
-(defsubst md5-G (x y z) (logior (logand x z) (logand y (lognot z))))
-(defsubst md5-H (x y z) (logxor x y z))
-(defsubst md5-I (x y z) (logxor y (logior x (logand 65535 (lognot z)))))
-
-(defmacro md5-make-step (name func)
-  (`
-   (defun (, name) (a b c d x s ac)
-     (let*
-         ((m1 (+ (car a) ((, func) (car b) (car c) (car d)) (car x) (car ac)))
-          (l1 (+ (cdr a) ((, func) (cdr b) (cdr c) (cdr d)) (cdr x) (cdr ac)))
-          (m2 (logand 65535 (+ m1 (lsh l1 -16))))
-          (l2 (logand 65535 l1))
-          (m3 (logand 65535 (if (> s 15)
-                                (+ (lsh m2 (- s 32)) (lsh l2 (- s 16)))
-                              (+ (lsh m2 s) (lsh l2 (- s 16))))))
-          (l3 (logand 65535 (if (> s 15)
-                                (+ (lsh l2 (- s 32)) (lsh m2 (- s 16)))
-                              (+ (lsh l2 s) (lsh m2 (- s 16)))))))
-       (md5-add (cons m3 l3) b)))))
-
-(md5-make-step md5-FF md5-F)
-(md5-make-step md5-GG md5-G)
-(md5-make-step md5-HH md5-H)
-(md5-make-step md5-II md5-I)
-
-(defun md5-init ()
-  "Initialise the state of the message-digest routines."
-  (aset md5-bits 0 0)
-  (aset md5-bits 1 0)
-  (aset md5-bits 2 0)
-  (aset md5-bits 3 0)
-  (aset md5-buffer 0 '(26437 .  8961))
-  (aset md5-buffer 1 '(61389 . 43913))
-  (aset md5-buffer 2 '(39098 . 56574))
-  (aset md5-buffer 3 '( 4146 . 21622)))
-
-(defun md5-update (string)
-  "Update the current MD5 state with STRING (an array of bytes)."
-  (let ((len (length string))
-        (i 0)
-        (j 0))
-    (while (< i len)
-      ;; Compute number of bytes modulo 64
-      (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-      ;; Store this byte (truncating to 8 bits to be sure)
-      (aset md5-input j (logand 255 (aref string i)))
-
-      ;; Update number of bits by 8 (modulo 2^64)
-      (let ((c 8) (k 0))
-        (while (and (> c 0) (< k 4))
-          (let ((b (aref md5-bits k)))
-            (aset md5-bits k (logand 65535 (+ b c)))
-            (setq c (if (> b (- 65535 c)) 1 0)
-                  k (1+ k)))))
-
-      ;; Increment number of bytes processed
-      (setq i (1+ i))
-
-      ;; When 64 bytes accumulated, pack them into sixteen 32-bit
-      ;; integers in the array `in' and then tranform them.
-      (if (= j 63)
-          (let ((in (make-vector 16 (cons 0 0)))
-                (k 0)
-                (kk 0))
-            (while (< k 16)
-              (aset in k (md5-pack md5-input kk))
-              (setq k (+ k 1) kk (+ kk 4)))
-            (md5-transform in))))))
-
-(defun md5-pack (array i)
-  "Pack the four bytes at ARRAY reference I to I+3 into a 32-bit integer."
-  (cons (+ (lsh (aref array (+ i 3)) 8) (aref array (+ i 2)))
-        (+ (lsh (aref array (+ i 1)) 8) (aref array (+ i 0)))))
-
-(defun md5-byte (array n b)
-  "Unpack byte B (0 to 3) from Nth member of ARRAY of 32-bit integers."
-  (let ((e (aref array n)))
-    (cond ((eq b 0) (logand 255 (cdr e)))
-          ((eq b 1) (lsh (cdr e) -8))
-          ((eq b 2) (logand 255 (car e)))
-          ((eq b 3) (lsh (car e) -8)))))
-
-(defun md5-final ()
-  (let ((in (make-vector 16 (cons 0 0)))
-        (j 0)
-        (digest (make-vector 16 0))
-        (padding))
-
-    ;; Save the number of bits in the message
-    (aset in 14 (cons (aref md5-bits 1) (aref md5-bits 0)))
-    (aset in 15 (cons (aref md5-bits 3) (aref md5-bits 2)))
-
-    ;; Compute number of bytes modulo 64
-    (setq j (% (/ (aref md5-bits 0) 8) 64))
-
-    ;; Pad out computation to 56 bytes modulo 64
-    (setq padding (make-vector (if (< j 56) (- 56 j) (- 120 j)) 0))
-    (aset padding 0 128)
-    (md5-update padding)
-
-    ;; Append length in bits and transform
-    (let ((k 0) (kk 0))
-      (while (< k 14)
-        (aset in k (md5-pack md5-input kk))
-        (setq k (+ k 1) kk (+ kk 4))))
-    (md5-transform in)
-
-    ;; Store the results in the digest
-    (let ((k 0) (kk 0))
-      (while (< k 4)
-        (aset digest (+ kk 0) (md5-byte md5-buffer k 0))
-        (aset digest (+ kk 1) (md5-byte md5-buffer k 1))
-        (aset digest (+ kk 2) (md5-byte md5-buffer k 2))
-        (aset digest (+ kk 3) (md5-byte md5-buffer k 3))
-        (setq k (+ k 1) kk (+ kk 4))))
-
-    ;; Return digest
-    digest))
-
-;; It says in the RSA source, "Note that if the Mysterious Constants are
-;; arranged backwards in little-endian order and decrypted with the DES
-;; they produce OCCULT MESSAGES!"  Security through obscurity?
-
-(defun md5-transform (in)
-  "Basic MD5 step. Transform md5-buffer based on array IN."
-  (let ((a (aref md5-buffer 0))
-        (b (aref md5-buffer 1))
-        (c (aref md5-buffer 2))
-        (d (aref md5-buffer 3)))
-    (setq
-     a (md5-FF a b c d (aref in  0)  7 '(55146 . 42104))
-     d (md5-FF d a b c (aref in  1) 12 '(59591 . 46934))
-     c (md5-FF c d a b (aref in  2) 17 '( 9248 . 28891))
-     b (md5-FF b c d a (aref in  3) 22 '(49597 . 52974))
-     a (md5-FF a b c d (aref in  4)  7 '(62844 .  4015))
-     d (md5-FF d a b c (aref in  5) 12 '(18311 . 50730))
-     c (md5-FF c d a b (aref in  6) 17 '(43056 . 17939))
-     b (md5-FF b c d a (aref in  7) 22 '(64838 . 38145))
-     a (md5-FF a b c d (aref in  8)  7 '(27008 . 39128))
-     d (md5-FF d a b c (aref in  9) 12 '(35652 . 63407))
-     c (md5-FF c d a b (aref in 10) 17 '(65535 . 23473))
-     b (md5-FF b c d a (aref in 11) 22 '(35164 . 55230))
-     a (md5-FF a b c d (aref in 12)  7 '(27536 .  4386))
-     d (md5-FF d a b c (aref in 13) 12 '(64920 . 29075))
-     c (md5-FF c d a b (aref in 14) 17 '(42617 . 17294))
-     b (md5-FF b c d a (aref in 15) 22 '(18868 .  2081))
-     a (md5-GG a b c d (aref in  1)  5 '(63006 .  9570))
-     d (md5-GG d a b c (aref in  6)  9 '(49216 . 45888))
-     c (md5-GG c d a b (aref in 11) 14 '( 9822 . 23121))
-     b (md5-GG b c d a (aref in  0) 20 '(59830 . 51114))
-     a (md5-GG a b c d (aref in  5)  5 '(54831 .  4189))
-     d (md5-GG d a b c (aref in 10)  9 '(  580 .  5203))
-     c (md5-GG c d a b (aref in 15) 14 '(55457 . 59009))
-     b (md5-GG b c d a (aref in  4) 20 '(59347 . 64456))
-     a (md5-GG a b c d (aref in  9)  5 '( 8673 . 52710))
-     d (md5-GG d a b c (aref in 14)  9 '(49975 .  2006))
-     c (md5-GG c d a b (aref in  3) 14 '(62677 .  3463))
-     b (md5-GG b c d a (aref in  8) 20 '(17754 .  5357))
-     a (md5-GG a b c d (aref in 13)  5 '(43491 . 59653))
-     d (md5-GG d a b c (aref in  2)  9 '(64751 . 41976))
-     c (md5-GG c d a b (aref in  7) 14 '(26479 .   729))
-     b (md5-GG b c d a (aref in 12) 20 '(36138 . 19594))
-     a (md5-HH a b c d (aref in  5)  4 '(65530 . 14658))
-     d (md5-HH d a b c (aref in  8) 11 '(34673 . 63105))
-     c (md5-HH c d a b (aref in 11) 16 '(28061 . 24866))
-     b (md5-HH b c d a (aref in 14) 23 '(64997 . 14348))
-     a (md5-HH a b c d (aref in  1)  4 '(42174 . 59972))
-     d (md5-HH d a b c (aref in  4) 11 '(19422 . 53161))
-     c (md5-HH c d a b (aref in  7) 16 '(63163 . 19296))
-     b (md5-HH b c d a (aref in 10) 23 '(48831 . 48240))
-     a (md5-HH a b c d (aref in 13)  4 '(10395 . 32454))
-     d (md5-HH d a b c (aref in  0) 11 '(60065 . 10234))
-     c (md5-HH c d a b (aref in  3) 16 '(54511 . 12421))
-     b (md5-HH b c d a (aref in  6) 23 '( 1160 .  7429))
-     a (md5-HH a b c d (aref in  9)  4 '(55764 . 53305))
-     d (md5-HH d a b c (aref in 12) 11 '(59099 . 39397))
-     c (md5-HH c d a b (aref in 15) 16 '( 8098 . 31992))
-     b (md5-HH b c d a (aref in  2) 23 '(50348 . 22117))
-     a (md5-II a b c d (aref in  0)  6 '(62505 .  8772))
-     d (md5-II d a b c (aref in  7) 10 '(17194 . 65431))
-     c (md5-II c d a b (aref in 14) 15 '(43924 .  9127))
-     b (md5-II b c d a (aref in  5) 21 '(64659 . 41017))
-     a (md5-II a b c d (aref in 12)  6 '(25947 . 22979))
-     d (md5-II d a b c (aref in  3) 10 '(36620 . 52370))
-     c (md5-II c d a b (aref in 10) 15 '(65519 . 62589))
-     b (md5-II b c d a (aref in  1) 21 '(34180 . 24017))
-     a (md5-II a b c d (aref in  8)  6 '(28584 . 32335))
-     d (md5-II d a b c (aref in 15) 10 '(65068 . 59104))
-     c (md5-II c d a b (aref in  6) 15 '(41729 . 17172))
-     b (md5-II b c d a (aref in 13) 21 '(19976 .  4513))
-     a (md5-II a b c d (aref in  4)  6 '(63315 . 32386))
-     d (md5-II d a b c (aref in 11) 10 '(48442 . 62005))
-     c (md5-II c d a b (aref in  2) 15 '(10967 . 53947))
-     b (md5-II b c d a (aref in  9) 21 '(60294 . 54161)))
-
-     (aset md5-buffer 0 (md5-add (aref md5-buffer 0) a))
-     (aset md5-buffer 1 (md5-add (aref md5-buffer 1) b))
-     (aset md5-buffer 2 (md5-add (aref md5-buffer 2) c))
-     (aset md5-buffer 3 (md5-add (aref md5-buffer 3) d))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Here begins the merger with the XEmacs API and the md5.el from the URL
-;;; package.  Courtesy wmperry@spry.com
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun md5 (object &optional start end)
-  "Return the MD5 (a secure message digest algorithm) of an object.
-OBJECT is either a string or a buffer.
-Optional arguments START and END denote buffer positions for computing the
-hash of a portion of OBJECT."
- (let ((buffer nil))
-    (unwind-protect
-	(save-excursion
-	  (setq buffer (generate-new-buffer " *md5-work*"))
-	  (set-buffer buffer)
-	  (cond
-	   ((bufferp object)
-	    (insert-buffer-substring object start end))
-	   ((stringp object)
-	    (insert (if (or start end)
-			(substring object start end)
-		      object)))
-	   (t nil))
-	  (prog1
-	      (if (<= (point-max) md5-maximum-internal-length)
-		  (mapconcat
-		   (function (lambda (node) (format "%02x" node)))
-		   (md5-encode (buffer-string))
-		   "")
-		(call-process-region (point-min) (point-max)
-				     (or shell-file-name "/bin/sh")
-				     t buffer nil
-				     "-c" md5-program)
-		;; MD5 digest is 32 chars long
-		;; mddriver adds a newline to make neaten output for tty
-		;; viewing, make sure we leave it behind.
-		(buffer-substring (point-min) (+ (point-min) 32)))
-	    (kill-buffer buffer)))
-      (and buffer (kill-buffer buffer) nil))))
-
-(provide 'md5)
-
-;;; md5.el ends here ----------------------------------------------------------
--- a/lisp/gnus/message.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/message.el	Mon Aug 13 09:26:39 2007 +0200
@@ -2032,6 +2032,16 @@
 
 (defun message-check-news-header-syntax ()
   (and
+   ;; Check the Subject header.
+   (message-check 'subject
+     (let* ((case-fold-search t)
+	    (subject (message-fetch-field "subject")))
+       (or
+	(and subject
+	     (not (string-match "\\`[ \t]*\\'" subject)))
+	(ignore
+	 (message
+	  "The subject field is empty or missing.  Posting is denied.")))))
    ;; Check for commands in Subject.
    (message-check 'subject-cmsg
      (if (string-match "^cmsg " (message-fetch-field "subject"))
@@ -2105,16 +2115,6 @@
 	   (y-or-n-p
 	    (format "The Message-ID looks strange: \"%s\".  Really post? "
 		    message-id)))))
-   ;; Check the Subject header.
-   (message-check 'subject
-     (let* ((case-fold-search t)
-	    (subject (message-fetch-field "subject")))
-       (or
-	(and subject
-	     (not (string-match "\\`[ \t]*\\'" subject)))
-	(ignore
-	 (message
-	  "The subject field is empty or missing.  Posting is denied.")))))
    ;; Check the Newsgroups & Followup-To headers.
    (message-check 'existing-newsgroups
      (let* ((case-fold-search t)
@@ -2708,7 +2708,9 @@
 	    (beginning-of-line)
 	    (insert "Original-")
 	    (beginning-of-line))
-	  (insert "Sender: " secure-sender "\n"))))))
+	  (when (or (message-news-p)
+		    (string-match "^[^@]@.+\\..+" secure-sender))
+	    (insert "Sender: " secure-sender "\n")))))))
 
 (defun message-insert-courtesy-copy ()
   "Insert a courtesy message in mail copies of combined messages."
@@ -3072,10 +3074,10 @@
      cur)))
 
 ;;;###autoload
-(defun message-wide-reply (&optional to-address)
+(defun message-wide-reply (&optional to-address ignore-reply-to)
   "Make a \"wide\" reply to the message in the current buffer."
   (interactive)
-  (message-reply to-address t))
+  (message-reply to-address t ignore-reply-to))
 
 ;;;###autoload
 (defun message-followup (&optional to-newsgroups)
--- a/lisp/gnus/nnweb.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/gnus/nnweb.el	Mon Aug 13 09:26:39 2007 +0200
@@ -102,6 +102,7 @@
 
 (deffoo nnweb-request-scan (&optional group server)
   (nnweb-possibly-change-server group server)
+  (setq nnweb-hashtb (gnus-make-hashtable 4095))
   (funcall (nnweb-definition 'map))
   (unless nnweb-ephemeral-p
     (nnweb-write-active)
@@ -211,8 +212,6 @@
     (nnheader-temp-write nil
       (nnheader-insert-file-contents (nnweb-overview-file group))
       (goto-char (point-min))
-      (setq nnweb-hashtb (gnus-make-hashtable
-			  (count-lines (point-min) (point-max))))
       (let (header)
 	(while (not (eobp))
 	  (setq header (nnheader-parse-nov))
--- a/lisp/modes/list-mode.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/modes/list-mode.el	Mon Aug 13 09:26:39 2007 +0200
@@ -158,12 +158,15 @@
 
 (defun list-mode-item-mouse-selected (event)
   (interactive "e")
-  ;; #### sometimes event-closest-point returns nil.
+  ;; Sometimes event-closest-point returns nil.
+  ;; So beep instead of bombing.
   (let ((point (event-closest-point event)))
-    (list-mode-item-selected-1 (extent-at point
-					  (event-buffer event)
-					  'list-mode-item nil 'at)
-			       event)))
+    (if point
+	(list-mode-item-selected-1 (extent-at point
+					      (event-buffer event)
+					      'list-mode-item nil 'at)
+				   event)
+      (ding))))
 
 (defun add-list-mode-item (start end &optional buffer activate-callback
 				 user-data)
--- a/lisp/modes/make-mode.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/modes/make-mode.el	Mon Aug 13 09:26:39 2007 +0200
@@ -254,20 +254,15 @@
 ;  Bogus FSFmacs crap.
 (defface makefile-space-face
   '((((class color))
-     (:background "hotpink"))		; uhm
-    (((class grayscale)
-      (background light))
-     (:background "black"))
-    (((class grayscale)
-      (background black))
-     (:background "white"))
-    (((class mono)
-      (background light))
-     (:background "white"))
-    (((class mono)
-      (background dark))
-     (:background "black")))
-  "Face to use for highlighting leading spaces in Font-Lock mode."
+     (:background "hotpink"))		; Yeah!
+    ;; Everything else, just choose the most visible background
+    ;; color.  We don't care about foreground, since it is only used
+    ;; for whitespace.
+    (((background light))
+      (:background "black"))
+    (((background dark))
+      (:background "white")))
+  "Face to use for highlighting leading Makefile spaces in Font-Lock mode."
   :group 'makefile-mode)
 
 ;Older version of same.
--- a/lisp/modes/outl-mouse.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/modes/outl-mouse.el	Mon Aug 13 09:26:39 2007 +0200
@@ -69,20 +69,38 @@
 ;;
 ;; User definable variables.
 ;;
-(defvar outline-mac-style nil
-  "*If t then outline glyphs will be right and down arrows.")
 
-(defvar outline-glyphs-on-left nil
-  "*The position of outline glyphs on a line.")
+(defgroup outl-mouse nil
+  "Outline mouse mode commands for Emacs"
+  :prefix "outline-"
+  :group 'outlines
+  :group 'mouse)
+
+
+(defcustom outline-mac-style nil
+  "*If t then outline glyphs will be right and down arrows."
+  :type 'boolean
+  :group 'outl-mouse)
 
-(defvar outline-glyph-colour "Gray75"
-  "*The colour of outlining arrows.")
+(defcustom outline-glyphs-on-left nil
+  "*The position of outline glyphs on a line."
+  :type 'boolean
+  :group 'outl-mouse)
+
+(defcustom outline-glyph-colour "Gray75"
+  "*The colour of outlining arrows."
+  :type 'color
+  :group 'outl-mouse)
 
-(defvar outline-glyph-shade-colour "Gray40"
-  "*The shadow colour of outlining arrows.")
+(defcustom outline-glyph-shade-colour "Gray40"
+  "*The shadow colour of outlining arrows."
+  :type 'color
+  :group 'outl-mouse)
 
-(defvar outline-glyph-lit-colour "Gray90"
-  "*The lit colour of outlining arrows.")
+(defcustom outline-glyph-lit-colour "Gray90"
+  "*The lit colour of outlining arrows."
+  :type 'color
+  :group 'outl-mouse)
 
 (defvar outline-fold-in-function 'outline-fold-in
   "Function to call for folding in. 
@@ -94,18 +112,24 @@
 The function should take an annotation argument.")
 (make-variable-buffer-local 'outline-fold-out-function)
 
-(defvar outline-sync-with-func-menu nil
+(defcustom outline-sync-with-func-menu nil
   "*If t then outline glyphs are permanently added by func-menu scans.
 If outline-minor-mode is  turned off then  turing it back on will have
 no  effect. Instead the  buffer  should be rescanned from the function
-menu.")
+menu."
+  :type 'boolean
+  :group 'outl-mouse)
 
-(defvar outline-move-point-after-click t
-  "*If t then point is moved to the current heading when clicked.")
+(defcustom outline-move-point-after-click t
+  "*If t then point is moved to the current heading when clicked."
+  :type 'boolean
+  :group 'outl-mouse)
 
-(defvar outline-scanning-message "Adding glyphs... (%3d%%)"
+(defcustom outline-scanning-message "Adding glyphs... (%3d%%)"
   "*Progress message during the scanning of the buffer.
-Set this to nil to inhibit progress messages.")
+Set this to nil to inhibit progress messages."
+  :type 'string
+  :group 'outl-mouse)
 
 ;;
 ;; No user definable variables beyond this point.
--- a/lisp/packages/apropos.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/apropos.el	Mon Aug 13 09:26:39 2007 +0200
@@ -210,6 +210,7 @@
 			       (lambda (symbol)
 				 (or (fboundp symbol)
 				     (boundp symbol)
+				     (find-face symbol)
 				     (symbol-plist symbol))))))
   (apropos-print
    (or do-all apropos-do-all)
@@ -240,7 +241,18 @@
 		    (if (setq doc (symbol-plist symbol))
 			(if (eq (/ (length doc) 2) 1)
 			    (format "1 property (%s)" (car doc))
-			  (concat (/ (length doc) 2) " properties")))))
+			  (concat (/ (length doc) 2) " properties")))
+		    (if (get symbol 'widget-type)
+			(if (setq doc (documentation-property
+				       symbol 'widget-documentation t))
+			    (substring doc 0
+				       (string-match "\n" doc))
+			  "(not documented)"))
+		    (if (find-face symbol)
+			(if (setq doc (face-doc-string symbol))
+			    (substring doc 0
+				       (string-match "\n" doc))
+			  "(not documented)"))))
 	 (setq p (cdr p)))))
    nil))
 
@@ -559,8 +571,13 @@
 				   "Macro"
 				 "Function"))
 			     do-keys)
-	  (apropos-print-doc 'describe-variable 2
-			     "Variable" do-keys)
+	  (if (get symbol 'custom-type)
+	      (apropos-print-doc 'customize-variable-other-window 2
+				 "User Option" do-keys)
+	    (apropos-print-doc 'describe-variable 2
+			       "Variable" do-keys))
+	  (apropos-print-doc 'customize-face-other-window 5 "Face" do-keys)
+	  (apropos-print-doc 'widget-browse-other-window 4 "Widget" do-keys)
 	  (apropos-print-doc 'apropos-describe-plist 3
 			     "Plist" nil)))))
   (prog1 apropos-accumulator
--- a/lisp/packages/cu-edit-faces.el	Mon Aug 13 09:26:04 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-;;; edit-faces.el -- interactive face editing mode
-
-;; Copyright (C) 1997 Jens Lautenbacher
-;; 
-;; This file is part of XEmacs.
-;; 
-;; XEmacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-;; 
-;; XEmacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;; 
-;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; Synched up with: Not in FSF.
-
-;;; Just another TTPC (Totally Trivial Piece of Code (TM)). All the
-;;; needed functionality for editing faces is already in custom.el. So
-;;; why don't use it, you may ask. OK, here I am...
-
-(require 'custom)
-(require 'cl)
-
-;;;###autoload
-(defun cu-edit-faces ()
-  (interactive)
-  (let (tmp-list elem)
-    (put 'available-faces 'custom-group nil)
-    (setq tmp-list (sort (face-list)
- 			'(lambda (one two)
- 			   (if (string< (symbol-name one)
- 					(symbol-name two)) t
- 			     nil))))
-    (while (setq elem (pop tmp-list))
-      (custom-add-to-group 'available-faces elem 'custom-face))
-    (message "Please stand by while generating list of faces...")
-	   (customize 'available-faces)))
-
-(provide 'cu-edit-faces)
-
-;;; cu-edit-faces.el ends here.
--- a/lisp/packages/font-lock.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/font-lock.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1101,8 +1101,6 @@
   (let* ((match (nth 0 highlight))
 	 (start (match-beginning match)) (end (match-end match))
 	 (override (nth 2 highlight)))
-    (and end
-	 (goto-char end)) ;; tlp00 hack to allow for back to back fonts
     (let ((newface (nth 1 highlight)))
       (or (symbolp newface)
 	  (setq newface (eval newface)))
--- a/lisp/packages/ispell.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/ispell.el	Mon Aug 13 09:26:39 2007 +0200
@@ -658,7 +658,9 @@
 ;;; XEmacs version 19
 (if (and (string-lessp "19" emacs-version)
 	 (string-match "Lucid" emacs-version)
-	 (not (and (boundp 'infodock-version) infodock-version)))
+	 (not (and (boundp 'infodock-version) infodock-version))
+	 (featurep 'menubar)
+	 (or current-menubar default-menubar))
     (let ((dicts (cons (cons "default" nil) ispell-dictionary-alist))
 	  (current-menubar (or current-menubar default-menubar))
 	  (menu
--- a/lisp/packages/paren.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/paren.el	Mon Aug 13 09:26:39 2007 +0200
@@ -54,19 +54,30 @@
 
 ;;; Code:
 
-(defvar paren-message-offscreen t
-  "*Display message if matching open paren is offscreen.")
+(defgroup paren nil
+  "Highlight (un)matching parens and whole expressions"
+  :group 'matching)
+
 
-(defvar paren-ding-unmatched nil
+(defcustom paren-message-offscreen t
+  "*Display message if matching open paren is offscreen."
+  :type 'boolean
+  :group 'paren)
+
+(defcustom paren-ding-unmatched nil
   "*Make noise if the cursor is at an unmatched paren.
 
 If T, then typing or passing over an unmatched paren will ring the bell
 using the `paren' sound.  If NIL, then the bell will not ring even if an
 unmatched paren is typed.  If neither T or NIL, then the bell will not ring
-when the cursor moves over unmatched parens but will ring if one is typed.")
+when the cursor moves over unmatched parens but will ring if one is typed."
+  :type '(choice (const :tag "off" nil)
+		 (const :tag "on" t)
+		 (const :tag "other" other))
+  :group 'paren)
 
 ;;;###autoload
-(defvar paren-mode nil
+(defcustom paren-mode nil
   "*Sets the style of parenthesis highlighting.
 Valid values are nil, `blink-paren', `paren', and `sexp'.
   nil		no parenthesis highlighting.
@@ -78,7 +89,10 @@
 		and shell quoting.
 
 This variable is global by default, but you can make it buffer-local and
-highlight parentheses differently in different major modes.")
+highlight parentheses differently in different major modes."
+  :type '(radio (const nil) (const blink-paren) (const paren)
+		(const sexp) (const nested))
+  :group 'paren)
 
 (make-face 'paren-match)
 (or (face-differs-from-default-p 'paren-match)
--- a/lisp/packages/ps-print.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/ps-print.el	Mon Aug 13 09:26:39 2007 +0200
@@ -727,11 +727,58 @@
 
 ;;; Interface to the command system
 
-(defvar ps-lpr-command lpr-command
-  "*The shell command for printing a PostScript file.")
-
-(defvar ps-lpr-switches lpr-switches
-  "*A list of extra switches to pass to `ps-lpr-command'.")
+(defgroup ps-print nil
+  "Postscript generator for Emacs 19"
+  :prefix "ps-"
+  :group 'wp)
+
+(defgroup ps-print-horizontal nil
+  "Horizontal page layout"
+  :prefix "ps-"
+  :tag "Horizontal"
+  :group 'ps-print)
+
+(defgroup ps-print-vertical nil
+  "Vertical page layout"
+  :prefix "ps-"
+  :tag "Vertical"
+  :group 'ps-print)
+
+(defgroup ps-print-header nil
+  "Headers layout"
+  :prefix "ps-"
+  :tag "Header"
+  :group 'ps-print)
+
+(defgroup ps-print-font nil
+  "Fonts customization"
+  :prefix "ps-"
+  :tag "Font"
+  :group 'ps-print)
+
+(defgroup ps-print-color nil
+  "Color customization"
+  :prefix "ps-"
+  :tag "Color"
+  :group 'ps-print)
+
+(defgroup ps-print-face nil
+  "Faces customization"
+  :prefix "ps-"
+  :tag "PS Faces"
+  :group 'ps-print
+  :group 'faces)
+
+
+(defcustom ps-lpr-command lpr-command
+  "*The shell command for printing a PostScript file."
+  :type 'string
+  :group 'ps-print)
+
+(defcustom ps-lpr-switches lpr-switches
+  "*A list of extra switches to pass to `ps-lpr-command'."
+  :type '(repeat string)
+  :group 'ps-print)
 
 ;;; Page layout
 
@@ -753,7 +800,7 @@
 ;; B4         10.125 inch x 14.33  inch
 ;; B5          7.16  inch x 10.125 inch
 
-(defvar ps-page-dimensions-database
+(defcustom ps-page-dimensions-database
   (list (list 'a4    (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54))
 	(list 'a3    (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54))
 	(list 'letter       (* 72  8.5)   (* 72 11.0))
@@ -767,19 +814,34 @@
 	(list 'b4           (* 72 10.125) (* 72 14.33))
 	(list 'b5           (* 72  7.16)  (* 72 10.125)))
   "*List associating a symbolic paper type to its width and height.
-see `ps-paper-type'.")
+see `ps-paper-type'."
+  :type '(repeat (list :tag "Paper Type"
+		       (symbol :tag "Name")
+		       (number :tag "Width")
+		       (number :tag "Height")))
+  :group 'ps-print)
 
 ;;;###autoload
-(defvar ps-paper-type 'letter
+(defcustom ps-paper-type 'letter
   "*Specifies the size of paper to format for.
 Should be one of the paper types defined in `ps-page-dimensions-database', for
-example `letter', `legal' or `a4'.")
-
-(defvar ps-landscape-mode 'nil
-  "*Non-nil means print in landscape mode.")
-
-(defvar ps-number-of-columns (if ps-landscape-mode 2 1)
-  "*Specifies the number of columns")
+example `letter', `legal' or `a4'."
+  :type '(symbol :validate (lambda (wid)
+			     (if (assq (widget-value wid) ps-page-dimensions-database)
+				 nil
+			       (widget-put wid :error "Unknown paper size")
+			       wid)))
+  :group 'ps-print)
+
+(defcustom ps-landscape-mode 'nil
+  "*Non-nil means print in landscape mode."
+  :type 'boolean
+  :group 'ps-print)
+
+(defcustom ps-number-of-columns (if ps-landscape-mode 2 1)
+  "*Specifies the number of columns"
+  :type 'integer
+  :group 'ps-print)
 
 ;;; Horizontal layout
 
@@ -789,14 +851,20 @@
 ;;  |    |      |    |      |    |      |    |
 ;;  ------------------------------------------
 
-(defvar ps-left-margin   (/ (* 72  2.0) 2.54) ;   2 cm
-  "*Left margin in points (1/72 inch).")
-
-(defvar ps-right-margin  (/ (* 72  2.0) 2.54) ;   2 cm
-  "*Right margin in points (1/72 inch).")
-
-(defvar ps-inter-column  (/ (* 72  2.0) 2.54) ;   2 cm
-  "*Horizontal space between columns in points (1/72 inch).")
+(defcustom ps-left-margin   (/ (* 72  2.0) 2.54) ;   2 cm
+  "*Left margin in points (1/72 inch)."
+  :type 'number
+  :group 'ps-print-horizontal)
+
+(defcustom ps-right-margin  (/ (* 72  2.0) 2.54) ;   2 cm
+  "*Right margin in points (1/72 inch)."
+  :type 'number
+  :group 'ps-print-horizontal)
+
+(defcustom ps-inter-column  (/ (* 72  2.0) 2.54) ;   2 cm
+  "*Horizontal space between columns in points (1/72 inch)."
+  :type 'number
+  :group 'ps-print-horizontal)
 
 ;;; Vertical layout
 
@@ -812,52 +880,70 @@
 ;; | bm     |
 ;; |--------|
 
-(defvar ps-bottom-margin (/ (* 72  1.5) 2.54) ; 1.5 cm
-  "*Bottom margin in points (1/72 inch).")
-
-(defvar ps-top-margin    (/ (* 72  1.5) 2.54) ; 1.5 cm
-  "*Top margin in points (1/72 inch).")
-
-(defvar ps-header-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
-  "*Vertical space in points (1/72 inch) between the main text and the header.")
-
-(defvar ps-header-line-pad 0.15
+(defcustom ps-bottom-margin (/ (* 72  1.5) 2.54) ; 1.5 cm
+  "*Bottom margin in points (1/72 inch)."
+  :type 'number
+  :group 'ps-print-vertical)
+
+(defcustom ps-top-margin    (/ (* 72  1.5) 2.54) ; 1.5 cm
+  "*Top margin in points (1/72 inch)."
+  :type 'number
+  :group 'ps-print-vertical)
+
+(defcustom ps-header-offset (/ (* 72  1.0) 2.54) ; 1.0 cm
+  "*Vertical space in points (1/72 inch) between the main text and the header."
+  :type 'number
+  :group 'ps-print-vertical)
+
+(defcustom ps-header-line-pad 0.15
   "*Portion of a header title line height to insert between the header frame
-and the text it contains, both in the vertical and horizontal directions.")
+and the text it contains, both in the vertical and horizontal directions."
+  :type 'number
+  :group 'ps-print-vertical)
 
 ;;; Header setup
 
-(defvar ps-print-header t
+(defcustom ps-print-header t
   "*Non-nil means print a header at the top of each page.
 By default, the header displays the buffer name, page number, and, if
 the buffer is visiting a file, the file's directory.  Headers are
 customizable by changing variables `ps-header-left' and
-`ps-header-right'.")
-
-(defvar ps-print-header-frame t
-  "*Non-nil means draw a gaudy frame around the header.")
-
-(defvar ps-header-lines 2
-  "*Number of lines to display in page header, when generating Postscript.")
+`ps-header-right'."
+  :type 'boolean
+  :group 'ps-print-header)
+
+(defcustom ps-print-header-frame t
+  "*Non-nil means draw a gaudy frame around the header."
+  :type 'boolean
+  :group 'ps-print-header)
+
+(defcustom ps-header-lines 2
+  "*Number of lines to display in page header, when generating Postscript."
+  :type 'integer
+  :group 'ps-print-header)
 (make-variable-buffer-local 'ps-header-lines)
 
-(defvar ps-show-n-of-n t
+(defcustom ps-show-n-of-n t
   "*Non-nil means show page numbers as N/M, meaning page N of M.
 Note: page numbers are displayed as part of headers, see variable
-`ps-print-headers'.")
-
-(defvar ps-spool-duplex nil		; Not many people have duplex
+`ps-print-headers'."
+  :type 'boolean
+  :group 'ps-print-header)
+
+(defcustom ps-spool-duplex nil		; Not many people have duplex
 					; printers, so default to nil.
   "*Non-nil indicates spooling is for a two-sided printer.
 For a duplex printer, the `ps-spool-*' commands will insert blank pages
 as needed between print jobs so that the next buffer printed will
 start on the right page.  Also, if headers are turned on, the headers
 will be reversed on duplex printers so that the page numbers fall to
-the left on even-numbered pages.")
+the left on even-numbered pages."
+  :type 'boolean
+  :group 'ps-print-header)
 
 ;;; Fonts
 
-(defvar ps-font-info-database
+(defcustom ps-font-info-database
   '((Courier				; the family key
      "Courier" "Courier-Bold" "Courier-Oblique" "Courier-BoldOblique"
      10.0 10.55 6.0     6.0)
@@ -918,47 +1004,76 @@
   to get the line
 	`3 cm 20 cm moveto  10 /Helvetica ReportFontInfo  showpage'
 - add the values to `ps-font-info-database'.
-You can get all the fonts of YOUR printer using `ReportAllFontInfo'.")
-
-(defvar ps-font-family 'Courier
-  "Font family name for ordinary text, when generating Postscript.")
-
-(defvar ps-font-size   (if ps-landscape-mode 7 8.5)
-  "Font size, in points, for ordinary text, when generating Postscript.")
-
-(defvar ps-header-font-family      'Helvetica
-  "Font family name for text in the header, when generating Postscript.")
-
-(defvar ps-header-font-size       (if ps-landscape-mode 10 12)
-  "Font size, in points, for text in the header, when generating Postscript.")
-
-(defvar ps-header-title-font-size (if ps-landscape-mode 12 14)
+You can get all the fonts of YOUR printer using `ReportAllFontInfo'."
+  :type '(repeat (list :tag "Font Definition"
+		       (symbol :tag "Font")
+		       (string :tag "Name")
+		       (string :tag "Bold")
+		       (string :tag "Italic")
+		       (string :tag "Bold-Italic")
+		       (number :tag "Reference Size")
+		       (number :tag "Line Height")
+		       (number :tag "Space Width")
+		       (number :tag "Average Character Width")))
+  :group 'ps-print-font)
+
+(defcustom ps-font-family 'Courier
+  "Font family name for ordinary text, when generating Postscript."
+  :type 'symbol
+  :group 'ps-print-font)
+
+(defcustom ps-font-size   (if ps-landscape-mode 7 8.5)
+  "Font size, in points, for ordinary text, when generating Postscript."
+  :type 'number
+  :group 'ps-print-font)
+
+(defcustom ps-header-font-family      'Helvetica
+  "Font family name for text in the header, when generating Postscript."
+  :type 'symbol
+  :group 'ps-print-font)
+
+(defcustom ps-header-font-size       (if ps-landscape-mode 10 12)
+  "Font size, in points, for text in the header, when generating Postscript."
+  :type 'number
+  :group 'ps-print-font)
+
+(defcustom ps-header-title-font-size (if ps-landscape-mode 12 14)
   "Font size, in points, for the top line of text in the header,
-when generating Postscript.")
+when generating Postscript."
+  :type 'number
+  :group 'ps-print-font)
 
 ;;; Colors
 
 ;;;###autoload
 ;;; The 19.33 fsf version includes a test on pixel components instead
 ;;;  of color-instance-rgb-components
-(defvar ps-print-color-p (or (fboundp 'x-color-values)	; fsf
+(defcustom ps-print-color-p (or (fboundp 'x-color-values)	; fsf
 			     (fboundp 'color-instance-rgb-components))
 					; xemacs
 ; Printing color requires x-color-values.
-  "*If non-nil, print the buffer's text in color.")
-
-(defvar ps-default-fg '(0.0 0.0 0.0)
-  "*RGB values of the default foreground color.  Defaults to black.")
-
-(defvar ps-default-bg '(1.0 1.0 1.0)
-  "*RGB values of the default background color.  Defaults to white.")
-
-(defvar ps-auto-font-detect t
+  "*If non-nil, print the buffer's text in color."
+  :type 'boolean
+  :group 'ps-print-color)
+
+(defcustom ps-default-fg '(0.0 0.0 0.0)
+  "*RGB values of the default foreground color.  Defaults to black."
+  :type '(list (number :tag "Red") (number :tag "Green") (number :tag "Blue"))
+  :group 'ps-print-color)
+
+(defcustom ps-default-bg '(1.0 1.0 1.0)
+  "*RGB values of the default background color.  Defaults to white."
+  :type '(list (number :tag "Red") (number :tag "Green") (number :tag "Blue"))
+  :group 'ps-print-color)
+
+(defcustom ps-auto-font-detect t
   "*Non-nil means automatically detect bold/italic face attributes.
 nil means rely solely on the lists `ps-bold-faces', `ps-italic-faces',
-and `ps-underlined-faces'.")
-
-(defvar ps-bold-faces
+and `ps-underlined-faces'."
+  :type 'boolean
+  :group 'ps-print-font)
+
+(defcustom ps-bold-faces
   (unless ps-print-color-p
     '(font-lock-function-name-face
       font-lock-builtin-face
@@ -966,27 +1081,33 @@
       font-lock-keyword-face
       font-lock-warning-face))
   "*A list of the \(non-bold\) faces that should be printed in bold font.
-This applies to generating Postscript.")
-
-(defvar ps-italic-faces
+This applies to generating Postscript."
+  :type '(repeat face)
+  :group 'ps-print-face)
+
+(defcustom ps-italic-faces
   (unless ps-print-color-p
     '(font-lock-variable-name-face
       font-lock-string-face
       font-lock-comment-face
       font-lock-warning-face))
   "*A list of the \(non-italic\) faces that should be printed in italic font.
-This applies to generating Postscript.")
-
-(defvar ps-underlined-faces
+This applies to generating Postscript."
+  :type '(repeat face)
+  :group 'ps-print-face)
+
+(defcustom ps-underlined-faces
   (unless ps-print-color-p
     '(font-lock-function-name-face
       font-lock-type-face
       font-lock-reference-face
       font-lock-warning-face))
   "*A list of the \(non-underlined\) faces that should be printed underlined.
-This applies to generating Postscript.")
-
-(defvar ps-left-header
+This applies to generating Postscript."
+  :type '(repeat face)
+  :group 'ps-print-face)
+
+(defcustom ps-left-header
   (list 'ps-get-buffer-name 'ps-header-dirpart)
   "*The items to display (each on a line) on the left part of the page header.
 This applies to generating Postscript.
@@ -1002,27 +1123,33 @@
 return a string to be inserted into the array.  For symbols with bound
 values, the value should be a string to be inserted into the array.
 In either case, function or variable, the string value has PostScript
-string delimiters added to it.")
+string delimiters added to it."
+  :type '(repeat (choice string symbol))
+  :group ps-print-header)
 (make-variable-buffer-local 'ps-left-header)
 
-(defvar ps-right-header
+(defcustom ps-right-header
   (list "/pagenumberstring load" 'time-stamp-mon-dd-yyyy 'time-stamp-hh:mm:ss)
   "*The items to display (each on a line) on the right part of the page header.
 This applies to generating Postscript.
 
 See the variable `ps-left-header' for a description of the format of
-this variable.")
+this variable."
+  :type '(repeat (choice string symbol))
+  :group ps-print-header)
 (make-variable-buffer-local 'ps-right-header)
 
-(defvar ps-razzle-dazzle t
-  "*Non-nil means report progress while formatting buffer.")
+(defcustom ps-razzle-dazzle t
+  "*Non-nil means report progress while formatting buffer."
+  :type 'boolean
+  :group 'ps-print)
 
 (defvar ps-adobe-tag "%!PS-Adobe-3.0\n"
   "*Contains the header line identifying the output as PostScript.
 By default, `ps-adobe-tag' contains the standard identifier.  Some
 printers require slightly different versions of this line.")
 
-(defvar ps-build-face-reference t
+(defcustom ps-build-face-reference t
   "*Non-nil means build the reference face lists.
 
 Ps-print sets this value to nil after it builds its internal reference
@@ -1032,15 +1159,19 @@
 
 You should set this value back to t after you change the attributes of
 any face, or create new faces.  Most users shouldn't have to worry
-about its setting, though.")
-
-(defvar ps-always-build-face-reference nil
+about its setting, though."
+  :type 'boolean
+  :group 'ps-print-face)
+
+(defcustom ps-always-build-face-reference nil
   "*Non-nil means always rebuild the reference face lists.
 
 If this variable is non-nil, ps-print will rebuild its internal
 reference lists of bold and italic faces *every* time one of the
 -with-faces commands is called.  Most users shouldn't need to set this
-variable.")
+variable."
+  :type 'boolean
+  :group 'ps-print-face)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; User commands
--- a/lisp/packages/vc.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/packages/vc.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1160,8 +1160,8 @@
 	  (vc-file-tree-walk subfunction)
 	(vc-dir-all-files subfunction)))
     (save-excursion
-      (dired (make-string-stringlist (cons dir (nreverse filelist)))
-     	     dired-listing-switches) 
+      (dired (cons dir (nreverse filelist))
+     	     dired-listing-switches)
       (rename-buffer (generate-new-buffer-name "VC-DIRED"))
       (setq dired-buf (current-buffer))
       (setq nonempty (not (zerop (buffer-size)))))
--- a/lisp/prim/about.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/about.el	Mon Aug 13 09:26:39 2007 +0200
@@ -80,7 +80,7 @@
   (view-mode nil 'kill-buffer)		;; assume the new view-less
   (let* ((buffer-read-only nil)
          (emacs-short-version (concat emacs-major-version "." emacs-minor-version))
-         (emacs-about-version (format "version %s; February 1997" emacs-short-version))
+         (emacs-about-version (format "version %s; April 1997" emacs-short-version))
 	 (indent-tabs-mode t)
 	 )
     (erase-buffer)
@@ -304,6 +304,8 @@
 	  ('jareth "About Jareth Hein")
 	  ('morioka "About MORIOKA Tomohiko")
 	  ('dmoore "About David Moore")
+	  ('thiessel "About Marcus Thiessel")
+	  ('sperber "About Michael Sperber")
 	  ('others "About Everyone")
 	  ('features "New XEmacs Features")
 	  ('history "XEmacs History")
@@ -859,6 +861,40 @@
 	  (insert " to go back to the previous page.\n")
 	  )
 
+	 ((eq xref 'thiessel)
+	  (about-face "Marcus Thiessel" 'bold)
+	  (insert " <thiessel@rhrk.uni-kl.de>
+
+	On May 1, 1996 he started working at University of Kaiserslautern in
+	the field of computer aided analog circuit design. His
+	responsibilities include the development and design of a CAD-Tool for
+	analog integrated circuits with special emphasis on distributed
+	software concepts.
+
+	When all the daily hacking is done he tries to take care of XEmacs
+	website at <http://www.xemacs.org>.")
+
+	  (insert "\n\n\tClick ")
+	  (about-xref "here" prev-page "Return to previous page")
+	  (insert " to go back to the previous page.\n")
+	  )
+
+	 ((eq xref 'sperber)
+	  (about-face "Michael Sperber [Mr. Preprocessor]" 'bold)
+	  (insert " <sperber@informatik.uni-tuebingen.de>
+
+	Mike ported EFS to XEmacs 20 and integrated EFS into XEmacs.  He's
+	also responsible for the ports of facemenu.el and enriched.el.  When
+	Mike isn't busy putting together patches for free software he has just
+	installed or changing his hairstyle, he does research in modern
+	programming languages and their implementation, and hopes that one day
+	XEmacs will speak Scheme.")
+
+	  (insert "\n\n\tClick ")
+	  (about-xref "here" prev-page "Return to previous page")
+	  (insert " to go back to the previous page.\n")
+	  )
+
 	 ((eq xref 'others)
 	  (insert "Click ")
 	  (about-xref "here" 'about "Return to previous page")
@@ -969,6 +1005,26 @@
 	XEmacs, Gnus and bbdb, of course.)  He can be found at
 	`druidmuck.egbt.org 4201' at various hours of the day.
 
+	") (about-xref "Marcus Thiessel" 'thiessel "Find out more about Marcus Thiessel") (insert " <thiessel@rhrk.uni-kl.de>
+
+	On May 1, 1996 he started working at University of Kaiserslautern in
+	the field of computer aided analog circuit design. His
+	responsibilities include the development and design of a CAD-Tool for
+	analog integrated circuits with special emphasis on distributed
+	software concepts.
+
+	When all the daily hacking is done he tries to take care of XEmacs
+	website at <http://www.xemacs.org>.
+
+	") (about-xref "Michael Sperber" 'sperber "Find out more about Michael Sperber") (insert " <sperber@informatik.uni-tuebingen.de>
+
+	Mike ported EFS to XEmacs 20 and integrated EFS into XEmacs.  He's
+	also responsible for the ports of facemenu.el and enriched.el.  When
+	Mike isn't busy putting together patches for free software he has just
+	installed or changing his hairstyle, he does research in modern
+	programming languages and their implementation, and hopes that one day
+	XEmacs will speak Scheme.
+
 	Darrell Kindred <Darrell.Kindred@cmu.edu>
 	Unofficial maintainer of the xemacs-beta list of extant bugs
 	and contributor of an extraordinary number of important bug
@@ -1202,13 +1258,11 @@
 	  Murata Shuuichirou <mrt@mickey.ai.kyutech.ac.jp>
 	  Dinesh Somasekhar <somasekh@ecn.purdue.edu>
 	  Jeffrey Sparkes <jsparkes@bnr.ca>
-	  Michael Sperber <sperber@informatik.uni-tuebingen.de>
 	  Manoj Srivastava <srivasta@pilgrim.umass.edu>
 	  Francois Staes <frans@kiwi.uia.ac.be>
 	  Anders Stenman <stenman@isy.liu.se>
 	  Jason Stewart <jasons@cs.unm.edu>
 	  Rick Tait <rickt@gnu.ai.mit.edu>
-	  Marcus Thiessel <thiessel@rhrk.uni-kl.de>
 	  James Thompson <thompson@wg2.waii.com>
 	  Raymond L. Toy <toy@rtp.ericsson.se>
 	  Remek Trzaska <remek@npac.syr.edu>
--- a/lisp/prim/auto-autoloads.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/auto-autoloads.el	Mon Aug 13 09:26:39 2007 +0200
@@ -999,7 +999,7 @@
 
 ;;;***
 
-;;;### (autoloads (custom-make-dependencies custom-menu-create custom-save-all custom-buffer-create customize-apropos customize-customized customize-face customize-variable customize) "cus-edit" "custom/cus-edit.el")
+;;;### (autoloads (customize-menu-create custom-menu-create custom-save-all custom-buffer-create customize-apropos customize-customized customize-face-other-window customize-face customize-variable-other-window customize-variable customize) "cus-edit" "custom/cus-edit.el")
 
 (autoload 'customize "cus-edit" "\
 Customize SYMBOL, which must be a customization group." t nil)
@@ -1007,10 +1007,17 @@
 (autoload 'customize-variable "cus-edit" "\
 Customize SYMBOL, which must be a variable." t nil)
 
+(autoload 'customize-variable-other-window "cus-edit" "\
+Customize SYMBOL, which must be a variable.
+Show the buffer in another window, but don't select it." t nil)
+
 (autoload 'customize-face "cus-edit" "\
 Customize SYMBOL, which should be a face name or nil.
 If SYMBOL is nil, customize all faces." t nil)
 
+(autoload 'customize-face-other-window "cus-edit" "\
+Show customization buffer for FACE in other window." t nil)
+
 (autoload 'customize-customized "cus-edit" "\
 Customize all already customized user options." t nil)
 
@@ -1030,21 +1037,25 @@
 
 (autoload 'custom-menu-create "cus-edit" "\
 Create menu for customization group SYMBOL.
+The menu is in a format applicable to `easy-menu-define'." nil nil)
+
+(autoload 'customize-menu-create "cus-edit" "\
+Return a customize menu for customization group SYMBOL.
 If optional NAME is given, use that as the name of the menu. 
-Otherwise make up a name from SYMBOL.
-The menu is in a format applicable to `easy-menu-define'." nil nil)
-
-(autoload 'custom-make-dependencies "cus-edit" "\
-Batch function to extract custom dependencies from .el files.
-Usage: emacs -batch *.el -f custom-make-dependencies > deps.el" nil nil)
-
-;;;***
-
-;;;### (autoloads (custom-set-faces custom-declare-face) "cus-face" "custom/cus-face.el")
+Otherwise the menu will be named `Customize'.
+The format is suitable for use with `easy-menu-define'." nil nil)
+
+;;;***
+
+;;;### (autoloads (custom-set-faces custom-initialize-frame custom-declare-face) "cus-face" "custom/cus-face.el")
 
 (autoload 'custom-declare-face "cus-face" "\
 Like `defface', but FACE is evaluated as a normal argument." nil nil)
 
+(autoload 'custom-initialize-frame "cus-face" "\
+Initialize local faces for FRAME if necessary.
+If FRAME is missing or nil, the first member of (frame-list) is used." nil nil)
+
 (autoload 'custom-set-faces "cus-face" "\
 Initialize faces according to user preferences.
 The arguments should be a list where each entry has the form:
@@ -1058,11 +1069,17 @@
 
 ;;;***
 
-;;;### (autoloads (widget-browse-at) "wid-browse" "custom/wid-browse.el")
+;;;### (autoloads (widget-browse-other-window widget-browse widget-browse-at) "wid-browse" "custom/wid-browse.el")
 
 (autoload 'widget-browse-at "wid-browse" "\
 Browse the widget under point." t nil)
 
+(autoload 'widget-browse "wid-browse" "\
+Create a widget browser for WIDGET." t nil)
+
+(autoload 'widget-browse-other-window "wid-browse" "\
+Show widget browser for WIDGET in other window." t nil)
+
 ;;;***
 
 ;;;### (autoloads (widget-delete widget-create widget-apply) "wid-edit" "custom/wid-edit.el")
@@ -3905,7 +3922,7 @@
 ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el")
 
 (autoload 'ksh-mode "ksh-mode" "\
-ksh-mode $Revision: 1.20 $ - Major mode for editing (Bourne, Korn or Bourne again)
+ksh-mode $Revision: 1.21 $ - Major mode for editing (Bourne, Korn or Bourne again)
 shell scripts.
 Special key bindings and commands:
 \\{ksh-mode-map}
@@ -5259,7 +5276,7 @@
 
 (autoload 'vhdl-mode "vhdl-mode" "\
 Major mode for editing VHDL code.
-vhdl-mode $Revision: 1.20 $
+vhdl-mode $Revision: 1.21 $
 To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a
 vhdl-mode buffer.  This automatically sets up a mail buffer with version
 information already added.  You just need to add a description of the
@@ -6044,12 +6061,6 @@
 
 ;;;***
 
-;;;### (autoloads (cu-edit-faces) "cu-edit-faces" "packages/cu-edit-faces.el")
-
-(autoload 'cu-edit-faces "cu-edit-faces" nil t nil)
-
-;;;***
-
 ;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "packages/dabbrev.el")
 
 (define-key global-map [(meta /)] 'dabbrev-expand)
@@ -7312,19 +7323,7 @@
 
 ;;;### (autoloads (blink-paren paren-set-mode) "paren" "packages/paren.el")
 
-(defvar paren-mode nil "\
-*Sets the style of parenthesis highlighting.
-Valid values are nil, `blink-paren', `paren', and `sexp'.
-  nil		no parenthesis highlighting.
-  blink-paren	causes the matching paren to blink.
-  paren		causes the matching paren to be highlighted but not to blink.
-  sexp		whole expression enclosed by the local paren at its mate.
-  nested	(not yet implemented) use variable shading to see the
-		nesting of an expression.  Also groks regular expressions
-		and shell quoting.
-
-This variable is global by default, but you can make it buffer-local and
-highlight parentheses differently in different major modes.")
+(defcustom paren-mode nil "*Sets the style of parenthesis highlighting.\nValid values are nil, `blink-paren', `paren', and `sexp'.\n  nil		no parenthesis highlighting.\n  blink-paren	causes the matching paren to blink.\n  paren		causes the matching paren to be highlighted but not to blink.\n  sexp		whole expression enclosed by the local paren at its mate.\n  nested	(not yet implemented) use variable shading to see the\n		nesting of an expression.  Also groks regular expressions\n		and shell quoting.\n\nThis variable is global by default, but you can make it buffer-local and\nhighlight parentheses differently in different major modes." :type '(radio (const nil) (const blink-paren) (const paren) (const sexp) (const nested)) :group 'paren)
 
 (autoload 'paren-set-mode "paren" "\
 Cycles through possible values for `paren-mode', force off with negative arg.
@@ -7360,13 +7359,9 @@
 
 ;;;### (autoloads (ps-setup ps-nb-pages-region ps-nb-pages-buffer ps-line-lengths ps-despool ps-spool-region-with-faces ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces ps-print-buffer) "ps-print" "packages/ps-print.el")
 
-(defvar ps-paper-type 'letter "\
-*Specifies the size of paper to format for.
-Should be one of the paper types defined in `ps-page-dimensions-database', for
-example `letter', `legal' or `a4'.")
-
-(defvar ps-print-color-p (or (fboundp 'x-color-values) (fboundp 'color-instance-rgb-components)) "\
-*If non-nil, print the buffer's text in color.")
+(defcustom ps-paper-type 'letter "*Specifies the size of paper to format for.\nShould be one of the paper types defined in `ps-page-dimensions-database', for\nexample `letter', `legal' or `a4'." :type '(symbol :validate (lambda (wid) (if (assq (widget-value wid) ps-page-dimensions-database) nil (widget-put wid :error "Unknown paper size") wid))) :group 'ps-print)
+
+(defcustom ps-print-color-p (or (fboundp 'x-color-values) (fboundp 'color-instance-rgb-components)) "*If non-nil, print the buffer's text in color." :type 'boolean :group 'ps-print-color)
 
 (autoload 'ps-print-buffer "ps-print" "\
 Generate and print a PostScript image of the buffer.
@@ -8372,12 +8367,14 @@
 console of a machine with native sound support or running a NetAudio
 server and XEmacs has the necessary sound support compiled in.
 
-The sound file must be in the Sun/NeXT U-LAW format." t nil)
+The sound file must be in the Sun/NeXT U-LAW format, except on Linux,
+where .wav files are also supported by the sound card drivers." t nil)
 
 (autoload 'load-default-sounds "sound" "\
-Load and install some sound files as beep-types.
-This only works if you're on display 0 of a Sun SparcStation, SGI machine,
-or HP9000s700, or running a NetAudio server." t nil)
+Load and install some sound files as beep-types, using
+`load-sound-file'.  This only works if you're on display 0 of the
+console of a machine with native sound support or running a NetAudio
+server and XEmacs has the necessary sound support compiled in." t nil)
 
 ;;;***
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/prim/cus-start.el	Mon Aug 13 09:26:39 2007 +0200
@@ -0,0 +1,136 @@
+;;; cus-start.el --- define customization properties of builtins.
+;;
+;; Copyright (C) 1997 Free Software Foundation, Inc.
+;;
+;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
+;; Keywords: internal
+
+;;; Commentary:
+;;
+;; Must be run before the user has changed the value of any options!
+
+;;; Code:
+
+(require 'custom)
+
+(defun custom-start-quote (sexp)
+  ;; This is copied from `cus-edit.el'.
+  "Quote SEXP iff it is not self quoting."
+  (if (or (memq sexp '(t nil))
+	  (and (symbolp sexp)
+	       (eq (aref (symbol-name sexp) 0) ?:))
+	  (and (listp sexp)
+	       (memq (car sexp) '(lambda)))
+	  (stringp sexp)
+	  (numberp sexp)
+	  (and (fboundp 'characterp)
+	       (characterp sexp)))
+      sexp
+    (list 'quote sexp)))
+
+;; The file names below are unreliable, as they are from Emacs 19.34.
+(let ((all '(;; abbrev.c 
+	     (abbrev-all-caps abbrev-mode boolean)
+	     (pre-abbrev-expand-hook abbrev-mode hook)
+	     ;; alloc.c
+	     (gc-cons-threshold alloc integer)
+	     ;; buffer.c
+	     (modeline-format modeline sexp) ;Hard to do right.
+	     (default-major-mode internal function)
+	     (case-fold-search matching boolean)
+	     (fill-column fill integer)
+	     (left-margin fill integer)
+	     (tab-width editing-basics integer)
+	     (ctl-arrow display boolean)
+	     (truncate-lines display boolean)
+	     (selective-display display 
+				(choice (const :tag "off" nil)
+					(integer :tag "space"
+						 :format "%v"
+						 1)
+					(const :tag "on" t)))
+	     (selective-display-ellipses display boolean)
+	     ;; callproc.c
+	     (shell-file-name execute file)
+	     (exec-path execute
+			(repeat (choice (const :tag "default" nil)
+					(file :format "%v"))))
+	     ;; dired.c
+	     (completion-ignored-extensions dired 
+					    (repeat (string :format "%v")))
+	     ;; dispnew.el
+	     (visible-bell display boolean)
+	     (no-redraw-on-reenter display boolean)
+	     ;; eval.c
+	     (max-specpdl-size limits integer)
+	     (max-lisp-eval-depth limits integer)
+	     (stack-trace-on-error debug
+				   (choice (const :tag "off")
+					   (repeat :menu-tag "When"
+						   :value (nil)
+						   (symbol :format "%v"))
+					   (const :tag "always" t)))
+	     (debug-on-error debug 
+			     (choice (const :tag "off")
+				     (repeat :menu-tag "When"
+					     :value (nil)
+					     (symbol :format "%v"))
+				     (const :tag "always" t)))
+	     (debug-on-quit debug choice)
+	     ;; frame.c
+	     (default-frame-plist frames
+	       (repeat (cons :format "%v"
+			     (symbol :tag "Parameter")
+			     (sexp :tag "Value"))))
+	     ;; indent.c
+	     (indent-tabs-mode fill boolean)
+	     ;; keyboard.c
+	     (meta-prefix-char keyboard character)
+	     (auto-save-interval auto-save integer)
+	     (echo-keystrokes minibuffer boolean)
+	     (help-char keyboard character)
+	     ;; lread.c
+	     (load-path environment 
+			(repeat (choice :tag "Directory"
+					(const :tag "default" nil)
+					(directory :format "%v"))))
+	     ;; process.c
+	     (delete-exited-processes proces-basics boolean)
+	     ;; syntax.c
+	     (parse-sexp-ignore-comments editing-basics boolean)
+	     (words-include-escapes editing-basics boolean)
+	     ;; window.c
+	     (temp-buffer-show-function windows function)
+	     (next-screen-context-lines windows boolean)
+	     (window-min-height windows integer)
+	     (window-min-width windows integer)
+	     ;; xdisp.c
+	     (scroll-step windows integer)
+	     (truncate-partial-width-windows display boolean)
+	     ;; xfns.c
+	     (x-bitmap-file-path installation
+				 (repeat (directory :format "%v")))))
+      this symbol group type)
+  (while all 
+    (setq this (car all)
+	  all (cdr all)
+	  symbol (nth 0 this)
+	  group (nth 1 this)
+	  type (nth 2 this))
+    (if (not (boundp symbol))
+	;; This is loaded so early, there is no message
+	(if (fboundp 'message)
+	    ;; If variables are removed from C code, give an error here!
+	    (message "Intrinsic `%S' not bound" symbol))
+      ;; This is called before any user can have changed the value.
+      (put symbol 'factory-value 
+	   (list (custom-start-quote (default-value symbol))))
+      ;; Add it to the right group.
+      (custom-add-to-group group symbol 'custom-variable)
+      ;; Set the type.
+      (put symbol 'custom-type type))))
+
+;; This is to prevent it from being reloaded by `cus-load.el'.
+(provide 'cus-start)
+
+;;; cus-start.el ends here.
--- a/lisp/prim/custom-load.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/custom-load.el	Mon Aug 13 09:26:39 2007 +0200
@@ -7,16 +7,22 @@
 (put 'gnus-score-expire 'custom-loads '("gnus-kill" "gnus-score"))
 (put 'gnus-score-kill 'custom-loads '("gnus-kill"))
 (put 'bookmark 'custom-loads '("bookmark"))
+(put 'url 'custom-loads '("url-gw" "url-irc" "url-vars" "url"))
+(put 'custom-faces 'custom-loads '("cus-edit"))
+(put 'abbrev-mode 'custom-loads '())
+(put 'execute 'custom-loads '())
 (put 'gnus-message 'custom-loads '("message"))
-(put 'mouse 'custom-loads '("mouse"))
+(put 'mouse 'custom-loads '("mouse" "outl-mouse" "id-select"))
 (put 'mail-abbrevs 'custom-loads '("mail-abbrevs"))
 (put 'gnus-summary-sort 'custom-loads '("gnus-sum"))
 (put 'nnmail-procmail 'custom-loads '("nnmail"))
 (put 'tex 'custom-loads '("texnfo-tex"))
 (put 'ssl 'custom-loads '("ssl"))
 (put 'tcl 'custom-loads '("tcl"))
+(put 'limits 'custom-loads '())
+(put 'telnet 'custom-loads '("telnet"))
 (put 'widgets 'custom-loads '("wid-browse" "wid-edit"))
-(put 'minibuffer 'custom-loads '("minibuf"))
+(put 'minibuffer 'custom-loads '("minibuf" "detached-minibuf"))
 (put 'environment 'custom-loads '("minibuf" "modeline" "x-toolbar" "cus-edit" "dired-faces"))
 (put 'gnus-article-buttons 'custom-loads '("gnus-art"))
 (put 'gnus-extract-archive 'custom-loads '("gnus-uu"))
@@ -37,28 +43,33 @@
 (put 'ispell 'custom-loads '("ispell"))
 (put 'mail 'custom-loads '("gnus" "message" "mail-abbrevs" "supercite" "highlight-headers"))
 (put 'gnus-summary-exit 'custom-loads '("gnus-sum"))
+(put 'ps-print-face 'custom-loads '("ps-print"))
 (put 'gnus-article-saving 'custom-loads '("gnus-art"))
 (put 'gnus-extract-view 'custom-loads '("gnus-sum" "gnus-uu"))
 (put 'crypt 'custom-loads '("crypt"))
-(put 'comint 'custom-loads '("comint-xemacs"))
+(put 'comint 'custom-loads '("comint-xemacs" "telnet"))
 (put 'gnus-group-listing 'custom-loads '("gnus-group"))
 (put 'man 'custom-loads '("man"))
 (put 'gnus-summary 'custom-loads '("gnus-sum" "gnus"))
 (put 'message-headers 'custom-loads '("message"))
+(put 'ps-print-header 'custom-loads '("ps-print"))
 (put 'docs 'custom-loads '("texinfo" "makeinfo"))
 (put 'lisp-indent 'custom-loads '("cl-indent"))
 (put 'tools 'custom-loads '("make-mode" "add-log" "diff"))
 (put 'cc-comment 'custom-loads '("cc-mode"))
+(put 'url-cookie 'custom-loads '("url-cookie" "url-vars"))
 (put 'editing-basics 'custom-loads '("simple"))
 (put 'gnus-group-select 'custom-loads '("gnus-sum"))
 (put 'display-time-balloon 'custom-loads '("time"))
+(put 'internal 'custom-loads '("cus-edit"))
 (put 'dabbrev 'custom-loads '("dabbrev"))
 (put 'help-appearance 'custom-loads '("help"))
 (put 'display-time 'custom-loads '("time"))
-(put 'hypermedia 'custom-loads '("wid-edit" "w3-cus"))
+(put 'hypermedia 'custom-loads '("wid-edit" "url-vars" "w3-cus"))
 (put 'w3-advanced 'custom-loads '("w3-cus"))
 (put 'lisp 'custom-loads '("cl-indent" "elp"))
 (put 'jka-compr 'custom-loads '("jka-compr"))
+(put 'proces-basics 'custom-loads '())
 (put 'diff 'custom-loads '("diff"))
 (put 'sh-script 'custom-loads '("sh-script"))
 (put 'w3-menus 'custom-loads '("w3-cus" "w3-menu"))
@@ -72,25 +83,35 @@
 (put 'gnus-nocem 'custom-loads '("gnus-nocem"))
 (put 'gnus-threading 'custom-loads '("gnus-sum"))
 (put 'applications 'custom-loads '("cus-edit" "time"))
+(put 'outlines 'custom-loads '("outl-mouse"))
 (put 'paren-matching 'custom-loads '("simple"))
 (put 'gnus-summary-maneuvering 'custom-loads '("gnus-sum"))
 (put 'gnus-extract 'custom-loads '("gnus" "gnus-uu"))
 (put 'help 'custom-loads '("help" "cus-edit" "info" "man"))
 (put 'supercite 'custom-loads '("supercite"))
 (put 'nnmail-split 'custom-loads '("nnmail"))
+(put 'keyboard 'custom-loads '())
 (put 'minubuffer 'custom-loads '("minibuf"))
+(put 'installation 'custom-loads '())
+(put 'url-gateway 'custom-loads '("url-gw"))
 (put 'gnus-article-various 'custom-loads '("gnus-art" "gnus-sum"))
 (put 'message-sending 'custom-loads '("message"))
 (put 'w3-files 'custom-loads '("w3-cus"))
 (put 'widget-browse 'custom-loads '("wid-browse"))
 (put 'data 'custom-loads '("auto-save" "crypt" "jka-compr"))
 (put 'gnus-article 'custom-loads '("gnus-art" "gnus-cite"))
+(put 'ps-print 'custom-loads '("ps-print"))
 (put 'cc-indent 'custom-loads '("cc-mode"))
 (put 'compression 'custom-loads '("jka-compr"))
 (put 'comm 'custom-loads '("ssl"))
 (put 'gnus 'custom-loads '("gnus-art" "gnus-async" "gnus-cache" "gnus-demon" "gnus-dup" "gnus-eform" "gnus-uu" "gnus-win" "gnus-xmas" "gnus" "nnmail"))
+(put 'ps-print-font 'custom-loads '("ps-print"))
+(put 'id-select 'custom-loads '("id-select"))
 (put 'gnus-xmas 'custom-loads '("gnus-xmas"))
+(put 'outl-mouse 'custom-loads '("outl-mouse"))
 (put 'gnus-treading 'custom-loads '("gnus-sum"))
+(put 'url-cache 'custom-loads '("url-cache" "url-vars"))
+(put 'frames 'custom-loads '("detached-minibuf"))
 (put 'psgml-html 'custom-loads '("psgml-html"))
 (put 'nnmail 'custom-loads '("nnmail"))
 (put 'gnus-article-hiding 'custom-loads '("gnus-art" "gnus-sum"))
@@ -101,8 +122,9 @@
 (put 'gnus-summary-visual 'custom-loads '("gnus-sum" "gnus"))
 (put 'w3-images 'custom-loads '("w3-cus"))
 (put 'gnus-group-various 'custom-loads '("gnus-group"))
-(put 'abbrev 'custom-loads '("dabbrev"))
+(put 'abbrev 'custom-loads '("cus-edit" "dabbrev"))
 (put 'nnmail-retrieve 'custom-loads '("nnmail"))
+(put 'url-history 'custom-loads '("url-vars"))
 (put 'message-interface 'custom-loads '("message"))
 (put 'gnus-group 'custom-loads '("gnus-topic" "gnus"))
 (put 'programming 'custom-loads '("cus-edit" "compile"))
@@ -111,6 +133,7 @@
 (put 'compilation 'custom-loads '("compile"))
 (put 'dired 'custom-loads '("dired-faces"))
 (put 'gnus-duplicate 'custom-loads '("gnus-dup"))
+(put 'url-hairy 'custom-loads '("url-vars"))
 (put 'sgml 'custom-loads '("psgml-html" "psgml"))
 (put 'gnus-score-adapt 'custom-loads '("gnus-score"))
 (put 'makeinfo 'custom-loads '("makeinfo"))
@@ -118,9 +141,11 @@
 (put 'cc-auto 'custom-loads '("cc-mode"))
 (put 'nnmail-files 'custom-loads '("nnmail"))
 (put 'gnus-asynchronous 'custom-loads '("gnus-async"))
+(put 'url-mime 'custom-loads '("url-vars"))
 (put 'gnus-visual 'custom-loads '("earcon" "gnus-art" "gnus-picon" "gnus" "smiley"))
 (put 'message-forwarding 'custom-loads '("message"))
 (put 'killing 'custom-loads '("simple"))
+(put 'paren 'custom-loads '("paren"))
 (put 'message-news 'custom-loads '("message"))
 (put 'vrml-mode 'custom-loads '("vrml-mode"))
 (put 'vrml 'custom-loads '("vrml-mode"))
@@ -135,17 +160,23 @@
 (put 'development 'custom-loads '("cus-edit"))
 (put 'tempo 'custom-loads '("tempo"))
 (put 'gnuserv 'custom-loads '("gnuserv"))
+(put 'ps-print-horizontal 'custom-loads '("ps-print"))
 (put 'gnus-windows 'custom-loads '("gnus-win"))
+(put 'detached-minibuf 'custom-loads '("detached-minibuf"))
 (put 'message-mail 'custom-loads '("message"))
+(put 'windows 'custom-loads '())
 (put 'message-various 'custom-loads '("message"))
 (put 'gnus-group-levels 'custom-loads '("gnus-group"))
 (put 'languages 'custom-loads '("cus-edit" "sh-script" "tcl" "vrml-mode" "psgml"))
 (put 'gnus-summary-format 'custom-loads '("gnus-sum"))
 (put 'gnus-score-decay 'custom-loads '("gnus-score"))
+(put 'fill 'custom-loads '())
 (put 'gnus-extract-post 'custom-loads '("gnus-uu"))
+(put 'debug 'custom-loads '())
 (put 'supercite-hooks 'custom-loads '("supercite"))
+(put 'display 'custom-loads '())
 (put 'texinfo-tex 'custom-loads '("texnfo-tex"))
-(put 'faces 'custom-loads '("cus-edit" "wid-edit" "gnus" "message" "highlight-headers"))
+(put 'faces 'custom-loads '("cus-edit" "wid-edit" "gnus" "message" "ps-print" "highlight-headers"))
 (put 'passwd 'custom-loads '("passwd"))
 (put 'gnus-various 'custom-loads '("gnus-sum"))
 (put 'cc-syntax 'custom-loads '("cc-mode"))
@@ -153,17 +184,20 @@
 (put 'supercite-frames 'custom-loads '("supercite"))
 (put 'gnus-article-highlight 'custom-loads '("gnus-art"))
 (put 'emacs 'custom-loads '("cus-edit"))
-(put 'processes 'custom-loads '("comint-xemacs" "executable" "gnuserv" "ispell" "passwd"))
+(put 'processes 'custom-loads '("comint-xemacs" "cus-edit" "executable" "gnuserv" "ispell" "passwd"))
 (put 'news 'custom-loads '("gnus" "message" "supercite" "highlight-headers"))
 (put 'w3-hooks 'custom-loads '("w3-cus"))
 (put 'executable 'custom-loads '("executable"))
 (put 'highlight-headers 'custom-loads '("highlight-headers"))
 (put 'message-insertion 'custom-loads '("message"))
 (put 'psgml-insert 'custom-loads '("psgml"))
-(put 'wp 'custom-loads '("cus-edit"))
+(put 'wp 'custom-loads '("cus-edit" "ps-print"))
 (put 'message-faces 'custom-loads '("message"))
 (put 'w3 'custom-loads '("w3-cus" "w3-script"))
 (put 'sh 'custom-loads '("sh-script"))
+(put 'ps-print-vertical 'custom-loads '("ps-print"))
+(put 'url-file 'custom-loads '("url-cache" "url-vars"))
+(put 'alloc 'custom-loads '())
 (put 'isearch 'custom-loads '("isearch-mode"))
 (put 'gnus-score-files 'custom-loads '("gnus-score"))
 (put 'modeline 'custom-loads '("modeline"))
@@ -175,9 +209,12 @@
 (put 'w3-parsing 'custom-loads '("w3-cus"))
 (put 'message-buffers 'custom-loads '("message"))
 (put 'editing 'custom-loads '("simple" "cus-edit" "filladapt"))
-(put 'matching 'custom-loads '("simple" "isearch-mode" "bookmark"))
+(put 'matching 'custom-loads '("simple" "isearch-mode" "bookmark" "paren"))
 (put 'gnus-article-mime 'custom-loads '("gnus-art" "gnus-sum"))
+(put 'i18n 'custom-loads '("url-vars"))
+(put 'ps-print-color 'custom-loads '("ps-print"))
 (put 'info 'custom-loads '("info"))
 (put 'w3-scripting 'custom-loads '("w3-script"))
 (put 'unix 'custom-loads '("sh-script"))
+(put 't 'custom-loads '("ps-print"))
 (put 'c 'custom-loads '("cc-mode"))
--- a/lisp/prim/loadup.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/loadup.el	Mon Aug 13 09:26:39 2007 +0200
@@ -38,6 +38,8 @@
     (error "loadup.el already loaded!"))
 
 (define-function 'defalias 'define-function)
+(defvar running-xemacs t
+  "non-nil when the current emacsen is XEmacs.")
 
 (call-with-condition-handler
       ;; This is awfully damn early to be getting an error, right?
@@ -78,6 +80,7 @@
      (load-gc "cl")
      (load-gc "widget")
      (load-gc "custom") ; Before the world so everything can be customized
+     (load-gc "cus-start") ; for customization of builtin variables
      (load-gc "cmdloop")
      (or (fboundp 'recursive-edit) (load-gc "cmdloop1"))
      (load-gc "keymap")
--- a/lisp/prim/simple.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/simple.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1229,7 +1229,7 @@
 	;; It is cleaner to avoid activation, even though the command
 	;; loop would deactivate the mark because we inserted text.
 	(goto-char (prog1 (mark t)
-		     (set-marker (mark-marker) (point) (current-buffer))))))
+		     (set-marker (mark-marker t) (point) (current-buffer))))))
   nil)
 
 
--- a/lisp/prim/sound.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/prim/sound.el	Mon Aug 13 09:26:39 2007 +0200
@@ -35,7 +35,8 @@
 console of a machine with native sound support or running a NetAudio
 server and XEmacs has the necessary sound support compiled in.
 
-The sound file must be in the Sun/NeXT U-LAW format."
+The sound file must be in the Sun/NeXT U-LAW format, except on Linux,
+where .wav files are also supported by the sound card drivers."
   (interactive "fSound file name: \n\
 SSymbol to name this sound: \n\
 nVolume (0 for default): ")
@@ -65,9 +66,10 @@
 
 ;;;###autoload
 (defun load-default-sounds ()
-  "Load and install some sound files as beep-types.
-This only works if you're on display 0 of a Sun SparcStation, SGI machine,
-or HP9000s700, or running a NetAudio server."
+  "Load and install some sound files as beep-types, using
+`load-sound-file'.  This only works if you're on display 0 of the
+console of a machine with native sound support or running a NetAudio
+server and XEmacs has the necessary sound support compiled in."
   (interactive)
   ;; #### - this should do NOTHING if the sounds can't be played.  
   (message "Loading sounds...")
--- a/lisp/tm/tm-vm.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/tm/tm-vm.el	Mon Aug 13 09:26:39 2007 +0200
@@ -9,7 +9,7 @@
 ;;         Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
 ;; Created: 1994/10/29
-;; Version: $Revision: 1.3 $
+;; Version: $Revision: 1.4 $
 ;; Keywords: mail, MIME, multimedia, multilingual, encoded-word
 
 ;; This file is part of tm (Tools for MIME).
@@ -60,7 +60,7 @@
 (defvar tm-vm/attach-to-popup-menus t
   "*If t append MIME specific commands to VM's popup menus.")
 
-(defvar tm-vm/use-original-url-button nil
+(defvar tm-vm/use-original-url-button t
   "*If it is t, use original URL button instead of tm's.")
 
 (defvar tm-vm/automatic-mime-preview (or (and (boundp 'vm-display-using-mime)
@@ -103,7 +103,7 @@
 ;;; @@ System/Information variables
 
 (defconst tm-vm/RCS-ID
-  "$Id: tm-vm.el,v 1.3 1997/03/22 06:02:46 steve Exp $")
+  "$Id: tm-vm.el,v 1.4 1997/04/13 03:14:15 steve Exp $")
 (defconst tm-vm/version (get-version-string tm-vm/RCS-ID))
 
 ; Ensure vm-menu-mail-menu gets properly defined *before* tm-vm/vm-emulation-map
@@ -425,10 +425,12 @@
 	(narrow-to-region (point)
 			  (vm-end-of (car vm-message-pointer)))
     
-	(let ((ml vm-message-list))
+	(let ((ml vm-message-list)
+	      (mp vm-message-pointer))
 	  (mime/viewer-mode nil nil nil nil nil nil)
 	  (setq vm-mail-buffer mime::preview/article-buffer)
-	  (setq vm-message-list ml))
+	  (setq vm-message-list ml
+		vm-message-pointer mp))
 	;; Install VM toolbar for MIME-Preview buffer if not installed
 	(tm-vm/check-for-toolbar)
 	(if tm-vm/use-vm-bindings
@@ -442,14 +444,23 @@
 
 	;; Highlight message (and display XFace if supported)
 	(if (or vm-highlighted-header-regexp
-		(and (vm-xemacs-p) vm-use-lucid-highlighting))
+		(and running-xemacs vm-use-lucid-highlighting))
 	    (vm-highlight-headers))
-	;; Energize URLs and buttons
+	;; Display XFaces with VM internal support if appropriate
+	(if (and vm-display-xfaces
+		 running-xemacs
+		 (vm-multiple-frames-possible-p)
+		 (featurep 'xface))
+	    (let ((highlight-headers-hack-x-face-p t)
+		  (highlight-headers-regexp nil)
+		  (highlight-headers-citation-regexp nil)
+		  (highlight-headers-citation-header-regexp nil))
+	      (highlight-headers (point-min) (point-max) t)))
+        ;; Energize URLs and buttons
 	(if (and tm-vm/use-original-url-button
 		 vm-use-menus (vm-menu-support-possible-p))
-	    (progn
-	      (vm-energize-urls)
-	      (vm-energize-headers)))
+	    (progn (vm-energize-headers)
+		   (vm-energize-urls)))
 	(run-hooks 'tm-vm/build-mime-preview-buffer-hook)
 	))))
 
--- a/lisp/utils/detached-minibuf.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/utils/detached-minibuf.el	Mon Aug 13 09:26:39 2007 +0200
@@ -35,17 +35,34 @@
 ;;
 ;; Variable definitions
 
-(defvar add-minibuf-options t
+(defgroup detached-minibuf nil
+  "Support a detached minibuffer in XEmacs"
+  :group 'minibuffer
+  :prefix "minibuf-frame-"
+  :group 'frames)
+
+
+(defcustom add-minibuf-options t
   "*If nil, prevent minibuffer options from being added to the Options menu.\
-This must be set before detached-minibuf is loaded.")
-(defvar minibuf-frame-height 1
-  "*The height in lines of the minibuffer frame created by make-detached-minibuf")
-(defvar minibuf-frame-width (frame-width (selected-frame))
-  "*The width in chars of the minibuffer frame created by make-detached-minibuf")
-(defvar minibuf-frame-pos-y -2
-  "*The y position of the minibuffer frame as created by make-detached-minibuf")
-(defvar minibuf-frame-pos-x -2
-  "*The x position of the minibuffer frame as created by make-detached-minibuf")
+This must be set before detached-minibuf is loaded."
+  :type 'boolean
+  :group 'detached-minibuf)
+(defcustom minibuf-frame-height 1
+  "*The height in lines of the minibuffer frame created by make-detached-minibuf"
+  :type 'integer
+  :group 'detached-minibuf)
+(defcustom minibuf-frame-width (frame-width (selected-frame))
+  "*The width in chars of the minibuffer frame created by make-detached-minibuf"
+  :type 'integer
+  :group 'detached-minibuf)
+(defcustom minibuf-frame-pos-y -2
+  "*The y position of the minibuffer frame as created by make-detached-minibuf"
+  :type 'integer
+  :group 'detached-minibuf)
+(defcustom minibuf-frame-pos-x -2
+  "*The x position of the minibuffer frame as created by make-detached-minibuf"
+  :type 'integer
+  :group 'detached-minibuf)
 
 ;;
 ;; Add minibuffer options to the Options menu
--- a/lisp/utils/highlight-headers.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/utils/highlight-headers.el	Mon Aug 13 09:26:39 2007 +0200
@@ -120,7 +120,7 @@
 
 (defvar highlight-headers-convert-quietly nil
   "*Non-nil inhibits the message that is normally displayed when external
-filters are used to convert an X-Face header.  This has no affect if
+filters are used to convert an X-Face header.  This has no effect if
 XEmacs is compiled with internal support for x-faces.")
 
 (defvar highlight-headers-invert-x-face-data nil 
--- a/lisp/utils/id-select.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/utils/id-select.el	Mon Aug 13 09:26:39 2007 +0200
@@ -164,23 +164,36 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defvar id-select-brace-modes
+(defgroup id-select nil
+  "Select larger and larger syntax-driven regions in a buffer"
+  :group 'mouse)
+
+
+(defcustom id-select-brace-modes
   '(c++-mode c-mode java-mode objc-mode perl-mode tcl-mode)
-  "*List of language major modes which define things with brace delimiters.")
+  "*List of language major modes which define things with brace delimiters."
+  :type '(repeat (symbol :tag "Mode" symbol))
+  :group 'id-select)
 
-(defvar id-select-markup-modes
+(defcustom id-select-markup-modes
   '(html-mode sgml-mode)
-  "*List of markup language modes that use SGML-style <tag> </tag> pairs.")
+  "*List of markup language modes that use SGML-style <tag> </tag> pairs."
+  :type '(repeat (symbol :tag "Mode"))
+  :group 'id-select)
 
-(defvar id-select-text-modes
+(defcustom id-select-text-modes
   '(fundamental-mode kotl-mode indented-text-mode Info-mode outline-mode text-mode)
-  "*List of textual modes where paragraphs may be outdented or indented.")
+  "*List of textual modes where paragraphs may be outdented or indented."
+  :type '(repeat (symbol :tag "Mode"))
+  :group 'id-select)
 
-(defvar id-select-indent-modes
+(defcustom id-select-indent-modes
   (append '(asm-mode csh-mode eiffel-mode ksh-mode miranda-mode python-mode
 	    pascal-mode sather-mode)
 	  id-select-text-modes)
-  "*List of language major modes which use mostly indentation to define syntactic structure.")
+  "*List of language major modes which use mostly indentation to define syntactic structure."
+  :type '(repeat (symbol :tag "Mode"))
+  :group 'id-select)
 
 (defvar id-select-indent-non-end-regexp-alist
   '((csh-mode    "\\(\\|then\\|elsif\\|else\\)[ \t]*$")
@@ -214,14 +227,20 @@
     )
   "List of (major-mode . terminator-line-regexp) elements used to include a final line when marking indented code.")
 
-(defvar id-select-char-p t
-  "*If t, return single character boundaries when all else fails.")
+(defcustom id-select-char-p t
+  "*If t, return single character boundaries when all else fails."
+  :type 'boolean
+  :group 'id-select)
 
-(defvar id-select-display-type t
-  "*If t, display the thing selected with each mouse click.")
+(defcustom id-select-display-type t
+  "*If t, display the thing selected with each mouse click."
+  :type 'boolean
+  :group 'id-select)
 
-(defvar id-select-whitespace t
-  "*If t, groups of whitespace are considered as things.")
+(defcustom id-select-whitespace t
+  "*If t, groups of whitespace are considered as things."
+  :type 'boolean
+  :group 'id-select)
 
 (if (string-match "XEmacs" emacs-version)
     (add-hook 'mouse-track-click-hook 'id-select-double-click-hook)
@@ -1229,7 +1248,7 @@
 (defvar id-select-old-region (cons 'nil 'nil)
   "Cons cell that contains a region (<beginning> . <end>).")
 
-(defvar id-select-syntax-alist
+(defcustom id-select-syntax-alist
   '((?w  id-select-word)
     (?_  id-select-symbol)
     (?\" id-select-string)
@@ -1243,7 +1262,9 @@
   "*List of pairs of the form (SYNTAX-CHAR FUNCTION) used by the function `id-select-syntactical-region'.
 Each FUNCTION takes a single position argument and returns a region
 (start . end) delineating the boundaries of the thing at that position.
-Ordering of entries is largely irrelevant to any code that uses this list.")
+Ordering of entries is largely irrelevant to any code that uses this list."
+  :type '(repeat (list (sexp :tag "Syntax-Char" function)))
+  :group 'id-select)
 
 
 (provide 'id-select)
--- a/lisp/utils/live-icon.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/utils/live-icon.el	Mon Aug 13 09:26:39 2007 +0200
@@ -37,9 +37,10 @@
 	   (or (> emacs-major-version 19)
 	       (and (= emacs-major-version 19)
 		    (>= emacs-minor-version 12))))
-      (let ((colour (if bg-p
-			(face-background face)
-		      (face-foreground face))))
+      (let* ((face (if (consp face) (car face) face))
+	     (colour (if bg-p
+			 (face-background face)
+		       (face-foreground face))))
 	(if (consp colour)
 	    (setq colour (cdr (car colour))))
 	(if (color-instance-p colour)
--- a/lisp/version.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/version.el	Mon Aug 13 09:26:39 2007 +0200
@@ -25,7 +25,7 @@
 (defconst emacs-version "20.1"
   "Version numbers of this version of Emacs.")
 
-(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta14)")))
+(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta15)")))
 
 (defconst emacs-major-version
   (progn (or (string-match "^[0-9]+" emacs-version)
--- a/lisp/w3/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -2,8 +2,28 @@
 
 * Makefile (xemacs-w3): Special target for XEmacs Build.
 
+Fri Apr 11 07:39:26 1997  William M. Perry  <wmperry@aventail.com>
+
+* Synch'd up with Widget 1.78
+
+* w3-display.el (w3-get-face-info): Don't look for face attributes on tags
+  unless w3-user-colors-take-precedence is nil
+  (w3-display-node): Don't honor face attributes on <body> tag unless
+  w3-user-colors-take-precedence is nil
+
+* url-vars.el: Modified a few customizations to make them prettier
+
+* url-cache.el (url-cache-creation-function): Modified customization
+
+Fri Apr 11 07:03:20 1997  Hrvoje Niksic <hniksic@srce.hr>
+
+* url-cache.el, url-gw.el, url-cookie.el, url-irc.el, url-vars.el, url.el:
+  All URL related variables are now customizable.
+
 Wed Apr  9 16:46:52 1997  William M. Perry  <wmperry@aventail.com>
 
+* Emacs/W3 3.0.81 released
+
 * w3-xemac.el (w3-text-pixel-width): And a XEmacs specific version of it.
 
 * w3-e19.el (w3-text-pixel-width): New function to return the pixel width
--- a/lisp/w3/url-cache.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url-cache.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; url-cache.el --- Uniform Resource Locator retrieval tool
 ;; Author: wmperry
-;; Created: 1997/04/03 21:04:08
-;; Version: 1.11
+;; Created: 1997/04/11 14:39:32
+;; Version: 1.12
 ;; Keywords: comm, data, processes, hypermedia
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -27,8 +27,10 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (require 'md5)
 
-(defvar url-cache-directory "~/.w3/cache/"
-  "*The directory where cache files should be stored.")
+(defcustom url-cache-directory "~/.w3/cache/"
+  "*The directory where cache files should be stored."
+  :type 'directory
+  :group 'url-file)
 
 ;; Cache manager
 (defun url-cache-file-writable-p (file)
@@ -57,9 +59,11 @@
 	(or (make-directory (file-name-directory file) t) t)
       (error nil)))))
 
-(defvar url-cache-ignored-protocols
+(defcustom url-cache-ignored-protocols
   '("www" "about" "https" "mailto")
-  "*A list of protocols that we should never cache.")
+  "*A list of protocols that we should never cache."
+  :type '(repeat (string :tag "Protocol"))
+  :group 'url-cache)
 
 (defun url-cache-cachable-p (obj)
   ;; return t iff the current buffer is cachable
@@ -221,8 +225,14 @@
 				(mapconcat 'identity host-components "/")
 				url-cache-directory))))))
 
-(defvar url-cache-creation-function 'url-cache-create-filename-using-md5
-  "*What function to use to create a cached filename.")
+(defcustom url-cache-creation-function 'url-cache-create-filename-using-md5
+  "*What function to use to create a cached filename."
+  :type '(choice (const :tag "MD5 of filename (low collision rate)"
+			:value url-cache-create-filename-using-md5)
+		 (const :tag "Human readable filenames (higher collision rate)"
+			:value url-cache-create-filename-human-readable)
+		 (function :tag "Other"))
+  :group 'url-cache)
 
 (defun url-cache-create-filename (url)
   (funcall url-cache-creation-function url))
--- a/lisp/w3/url-cookie.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url-cookie.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; url-cookie.el --- Netscape Cookie support
 ;; Author: wmperry
-;; Created: 1997/03/26 00:06:01
-;; Version: 1.15
+;; Created: 1997/04/11 14:41:18
+;; Version: 1.16
 ;; Keywords: comm, data, processes, hypermedia
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -268,11 +268,15 @@
   "A regular expression of top-level domains that only require two matching
 '.'s in the domain name in order to set a cookie.")
 
-(defvar url-cookie-trusted-urls nil
-  "*A list of regular expressions matching URLs to always accept cookies from.")
+(defcustom url-cookie-trusted-urls nil
+  "*A list of regular expressions matching URLs to always accept cookies from."
+  :type '(repeat regexp)
+  :group 'url-cookie)
 
-(defvar url-cookie-untrusted-urls nil
-  "*A list of regular expressions matching URLs to never accept cookies from.")
+(defcustom url-cookie-untrusted-urls nil
+  "*A list of regular expressions matching URLs to never accept cookies from."
+  :type '(repeat regexp)
+  :group 'url-cookie)
 
 (defun url-cookie-host-can-set-p (host domain)
   (let ((numdots 0)
--- a/lisp/w3/url-gw.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url-gw.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; url-gw.el --- Gateway munging for URL loading
 ;; Author: wmperry
-;; Created: 1997/03/27 21:29:24
-;; Version: 1.8
+;; Created: 1997/04/11 14:39:18
+;; Version: 1.9
 ;; Keywords: comm, data, processes
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -26,50 +26,80 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (require 'cl)
 
-(defvar url-gateway-local-host-regexp nil
-  "*A regular expression specifying local hostnames/machines.")
+(defgroup url-gateway nil
+  "URL gateway variables"
+  :group 'url)
 
-(defvar url-gateway-prompt-pattern
+(defcustom url-gateway-local-host-regexp nil
+  "*A regular expression specifying local hostnames/machines."
+  :type '(choice (const nil) regexp)
+  :group 'url-gateway)
+
+(defcustom url-gateway-prompt-pattern
   "^[^#$%>;]*[#$%>;] *" ;; "bash\\|\$ *\r?$\\|> *\r?"
-  "*A regular expression matching a shell prompt.")
+  "*A regular expression matching a shell prompt."
+  :type 'regexp
+  :group 'url-gateway)
 
-(defvar url-gateway-rlogin-host nil
-  "*What hostname to actually rlog into before doing a telnet.")
+(defcustom url-gateway-rlogin-host nil
+  "*What hostname to actually rlog into before doing a telnet."
+  :type '(choice (const nil) string)
+  :group 'url-gateway)
 
-(defvar url-gateway-rlogin-user-name nil
-  "*Username to log into the remote machine with when using rlogin.")
+(defcustom url-gateway-rlogin-user-name nil
+  "*Username to log into the remote machine with when using rlogin."
+  :type '(choice (const nil) string)
+  :group 'url-gateway)
 
-(defvar url-gateway-rlogin-parameters '("telnet" "-8")
+(defcustom url-gateway-rlogin-parameters '("telnet" "-8")
   "*Parameters to `url-open-rlogin'.
-This list will be used as the parameter list given to rsh.")
+This list will be used as the parameter list given to rsh."
+  :type '(repeat string)
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-host nil
-  "*What hostname to actually login to before doing a telnet.")
+(defcustom url-gateway-telnet-host nil
+  "*What hostname to actually login to before doing a telnet."
+  :type '(choice (const nil) string)
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-parameters '("exec" "telnet" "-8")
+(defcustom url-gateway-telnet-parameters '("exec" "telnet" "-8")
   "*Parameters to `url-open-telnet'.
-This list will be executed as a command after logging in via telnet.")
+This list will be executed as a command after logging in via telnet."
+  :type '(repeat string)
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-login-prompt "^\r*.?login:"
-  "*Prompt that tells us we should send our username when loggin in w/telnet.")
+(defcustom url-gateway-telnet-login-prompt "^\r*.?login:"
+  "*Prompt that tells us we should send our username when loggin in w/telnet."
+  :type 'regexp
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-password-prompt "^\r*.?password:"
-  "*Prompt that tells us we should send our password when loggin in w/telnet.")
+(defcustom url-gateway-telnet-password-prompt "^\r*.?password:"
+  "*Prompt that tells us we should send our password when loggin in w/telnet."
+  :type 'regexp
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-user-name nil
-  "User name to log in via telnet with.")
+(defcustom url-gateway-telnet-user-name nil
+  "User name to log in via telnet with."
+  :type '(choice (const nil) string)
+  :group 'url-gateway)
 
-(defvar url-gateway-telnet-password nil
-  "Password to use to log in via telnet with.")
+(defcustom url-gateway-telnet-password nil
+  "Password to use to log in via telnet with."
+  :type '(choice (const nil) string)
+  :group 'url-gateway)
 
-(defvar url-gateway-broken-resolution nil
+(defcustom url-gateway-broken-resolution nil
   "*Whether to use nslookup to resolve hostnames.
 This should be used when your version of Emacs cannot correctly use DNS,
 but your machine can.  This usually happens if you are running a statically
-linked Emacs under SunOS 4.x")
+linked Emacs under SunOS 4.x"
+  :type 'boolean
+  :group 'url-gateway)
 
-(defvar url-gateway-nslookup-program "nslookup"
-  "*If non-NIL then a string naming nslookup program." )
+(defcustom url-gateway-nslookup-program "nslookup"
+  "*If non-NIL then a string naming nslookup program."
+  :type '(choice (const :tag "None" :value nil) string)
+  :group 'url-gateway)
 
 ;; Stolen from ange-ftp
 ;;;###autoload
--- a/lisp/w3/url-irc.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url-irc.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; url-irc.el --- IRC URL interface
 ;; Author: wmperry
-;; Created: 1997/01/10 00:13:05
-;; Version: 1.5
+;; Created: 1997/04/11 14:40:56
+;; Version: 1.6
 ;; Keywords: comm, data, processes
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -29,14 +29,17 @@
 (require 'url-vars)
 (require 'url-parse)
 
-(defvar url-irc-function 'url-irc-zenirc
+(defcustom url-irc-function 'url-irc-zenirc
   "*Function to actually open an IRC connection.
 Should be a function that takes several argument:
     HOST - the hostname of the IRC server to contact
     PORT - the port number of the IRC server to contact
  CHANNEL - What channel on the server to visit right away (can be nil)
     USER - What username to use
-PASSWORD - What password to use")
+PASSWORD - What password to use"
+  :type '(choice (const :tag "ZEN IRC" :value 'url-irc-zenirc)
+		 (function :tag "Other"))
+  :group 'url)
 
 (defun url-irc-zenirc (host port channel user password)
   (let ((zenirc-buffer-name (if (and user host port)
--- a/lisp/w3/url-vars.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url-vars.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; url-vars.el --- Variables for Uniform Resource Locator tool
 ;; Author: wmperry
-;; Created: 1997/04/10 21:18:12
-;; Version: 1.50
+;; Created: 1997/04/11 14:49:23
+;; Version: 1.52
 ;; Keywords: comm, data, processes, hypermedia
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -26,12 +26,61 @@
 ;;; Boston, MA 02111-1307, USA.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defconst url-version (let ((x "p3.0.81"))
+(eval-and-compile
+  (condition-case ()
+      (require 'custom)
+    (error nil))
+  (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
+      nil ;; We've got what we needed
+    ;; We have the old custom-library, hack around it!
+    (defmacro defgroup (&rest args)
+      nil)
+    (defmacro defcustom (var value doc &rest args) 
+      (` (defvar (, var) (, value) (, doc))))))
+
+(defconst url-version (let ((x "p3.0.82"))
 			(if (string-match "State: \\([^ \t\n]+\\)" x)
 			    (substring x (match-beginning 1) (match-end 1))
 			  x))
   "Version # of URL package.")
 
+(defgroup url nil
+  "Uniform Resource Locator tool"
+  :group 'hypermedia)
+
+(defgroup url-file nil
+  "URL storage"
+  :prefix "url-"
+  :group 'url)
+
+(defgroup url-cache nil
+  "URL cache"
+  :prefix "url-"
+  :prefix "url-cache-"
+  :group 'url)
+
+(defgroup url-history nil
+  "History variables in the URL package"
+  :prefix "url-"
+  :group 'url)
+
+(defgroup url-cookie nil
+  "URL cookies"
+  :prefix "url-"
+  :prefix "url-cookie-"
+  :group 'url)
+
+(defgroup url-mime nil
+  "MIME options of URL"
+  :prefix "url-"
+  :group 'url)
+
+(defgroup url-hairy nil
+  "Hairy options of URL"
+  :prefix "url-"
+  :group 'url)
+
+
 (defvar url-current-can-be-cached t
   "*Whether the current URL can be cached.")
 
@@ -68,48 +117,69 @@
 
 (defvar url-cookie-storage nil         "Where cookies are stored.")
 (defvar url-cookie-secure-storage nil  "Where secure cookies are stored.")
-(defvar url-cookie-file nil            "*Where cookies are stored on disk.")
+(defcustom url-cookie-file nil            "*Where cookies are stored on disk."
+  :type '(choice (const :tag "Default" :value nil) file)
+  :group 'url-file
+  :group 'url-cookie)
 
-(defvar url-default-retrieval-proc 'url-default-callback
-  "*The default action to take when an asynchronous retrieval completes.")
+(defcustom url-default-retrieval-proc 'url-default-callback
+  "*The default action to take when an asynchronous retrieval completes."
+  :type 'function
+  :group 'url-hairy)
 
-(defvar url-honor-refresh-requests t
+(defcustom url-honor-refresh-requests t
   "*Whether to do automatic page reloads at the request of the document
 author or the server via the `Refresh' header in an HTTP/1.0 response.
 If nil, no refresh requests will be honored.
 If t, all refresh requests will be honored.
-If non-nil and not t, the user will be asked for each refresh request.")
-
-(defvar url-inhibit-mime-parsing nil
-  "Whether to parse out (and delete) the MIME headers from a message.")
+If non-nil and not t, the user will be asked for each refresh request."
+  :type '(choice (const :tag "off" nil)
+		 (const :tag "on" t)
+		 (const :tag "ask" 'ask))
+  :group 'url-hairy)
 
-(defvar url-automatic-caching nil
+(defcustom url-inhibit-mime-parsing nil
+  "Whether to parse out (and delete) the MIME headers from a message."
+  :type 'boolean
+  :group 'url-mime)
+
+(defcustom url-automatic-caching nil
   "*If non-nil, all documents will be automatically cached to the local
-disk.")
+disk."
+  :type 'boolean
+  :group 'url-cache)
 
-(defvar url-cache-expired
+(defcustom url-cache-expired
   (function (lambda (t1 t2) (>= (- (car t2) (car t1)) 5)))
   "*A function (`funcall'able) that takes two times as its arguments, and
 returns non-nil if the second time is 'too old' when compared to the first
-time.")
+time."
+  :type 'function
+  :group 'url-cache)
 
 (defvar url-bug-address "wmperry@cs.indiana.edu"
   "Where to send bug reports.")
 
-(defvar url-cookie-confirmation nil
-  "*If non-nil, confirmation by the user is required to accept HTTP cookies.")
+(defcustom url-cookie-confirmation nil
+  "*If non-nil, confirmation by the user is required to accept HTTP cookies."
+  :type 'boolean
+  :group 'url-cookie)
 
-(defvar url-personal-mail-address nil
+(defcustom url-personal-mail-address nil
   "*Your full email address.
 This is what is sent to HTTP/1.0 servers as the FROM field in an HTTP/1.0
-request.")
+request."
+  :type '(choice (const nil) string)
+  :group 'url)
 
-(defvar url-directory-index-file "index.html"
-  "*The filename to look for when indexing a directory.  If this file
-exists, and is readable, then it will be viewed instead of
-automatically creating the directory listing.")
+(defcustom url-directory-index-file "index.html"
+  "*The filename to look for when indexing a directory.
+If this file exists, and is readable, then it will be viewed instead of
+using `dired' to view the directory."
+  :type 'string
+  :group 'url-file)
 
-(defvar url-privacy-level '(email)
+(defcustom url-privacy-level '(email)
   "*How private you want your requests to be.
 HTTP/1.0 has header fields for various information about the user, including
 operating system information, email addresses, the last page you visited, etc.
@@ -132,65 +202,100 @@
 
 Samples:
 
-(setq url-privacy-level 'high)
-(setq url-privacy-level '(email lastloc))    ;; equivalent to 'high
-(setq url-privacy-level '(os))
+ (setq url-privacy-level 'high)
+ (setq url-privacy-level '(email lastloc))    ;; equivalent to 'high
+ (setq url-privacy-level '(os))
 
 ::NOTE::
 This variable controls several other variables and is _NOT_ automatically
 updated.  Call the function `url-setup-privacy-info' after modifying this
-variable.
-")
+variable."
+  :type '(choice (const :tag "None (you believe in the basic goodness of humanity)"
+			:value none)
+		 (const :tag "Low (do not reveal last location)"
+			:value low)
+		 (const :tag "High (no email address or last location)"
+			:value high)
+		 (const :tag "Paranoid (reveal nothing!)"
+			:value paranoid)
+		 (checklist :tag "Custom"
+			    (const :tag "Email address" :value email)
+			    (const :tag "Operating system" :value os)
+			    (const :tag "Last location" :value lastloc)
+			    (const :tag "Browser identification" :value agent)
+			    (const :tag "No cookies" :value cookie)))
+  :group 'url)
 
 (defvar url-history-list nil "List of urls visited this session.")
 
 (defvar url-inhibit-uncompression nil "Do not do decompression if non-nil.")
 
-(defvar url-keep-history nil
-  "*Controls whether to keep a list of all the URLS being visited.  If
-non-nil, url will keep track of all the URLS visited.
+(defcustom url-keep-history nil
+  "*Controls whether to keep a list of all the URLS being visited.
+If non-nil, url will keep track of all the URLS visited.
 If eq to `t', then the list is saved to disk at the end of each emacs
-session.")
+session."
+  :type 'boolean
+  :group 'url-history)
 
-(defvar url-uncompressor-alist '((".z"  . "x-gzip")
-				 (".gz" . "x-gzip")
-				 (".uue" . "x-uuencoded")
-				 (".hqx" . "x-hqx")
-				 (".Z"  . "x-compress"))
+(defcustom url-uncompressor-alist '((".z"  . "x-gzip")
+				    (".gz" . "x-gzip")
+				    (".uue" . "x-uuencoded")
+				    (".hqx" . "x-hqx")
+				    (".Z"  . "x-compress"))
   "*An assoc list of file extensions and the appropriate
-content-transfer-encodings for each.")
+content-transfer-encodings for each."
+  :type '(repeat (cons (string :tag "Extension") (string :tag "Encoding")))
+  :group 'url-mime)
 
-(defvar url-mail-command 'url-mail
-  "*This function will be called whenever url needs to send mail.  It should
-enter a mail-mode-like buffer in the current window.
+(defcustom url-mail-command 'url-mail
+  "*This function will be called whenever url needs to send mail.
+It should enter a mail-mode-like buffer in the current window.
 The commands mail-to and mail-subject should still work in this
-buffer, and it should use mail-header-separator if possible.")
+buffer, and it should use mail-header-separator if possible."
+  :type 'function
+  :group 'url)
 
-(defvar url-proxy-services nil
+(defcustom url-proxy-services nil
   "*An assoc list of access types and servers that gateway them.
 Looks like ((\"http\" . \"hostname:portnumber\") ....)  This is set up
-from the ACCESS_proxy environment variables in url-do-setup.")
+from the ACCESS_proxy environment variables in url-do-setup."
+  :type '(repeat (cons (string :tag "Protocol")
+		       (string :tag "Proxy"
+			       :validate widget-field-validate
+			       :valid-regexp "^[a-z.0-9-:]+$")))
+  :group 'url)
 
-(defvar url-global-history-file nil
+(defcustom url-global-history-file nil
   "*The global history file used by both Mosaic/X and the url package.
 This file contains a list of all the URLs you have visited.  This file
-is parsed at startup and used to provide URL completion.")
+is parsed at startup and used to provide URL completion."
+  :type '(choice (const :tag "Default" :value nil) file)
+  :group 'url-history)
 
-(defvar url-global-history-save-interval 3600
+(defcustom url-global-history-save-interval 3600
   "*The number of seconds between automatic saves of the history list.
 Default is 1 hour.  Note that if you change this variable after `url-do-setup'
-has been run, you need to run the `url-setup-save-timer' function manually.")
+has been run, you need to run the `url-setup-save-timer' function manually."
+  :type 'integer
+  :group 'url-history)
 
 (defvar url-global-history-timer nil)
 
-(defvar url-passwd-entry-func nil
+(defcustom url-passwd-entry-func nil
   "*This is a symbol indicating which function to call to read in a
 password.  It will be set up depending on whether you are running EFS
 or ange-ftp at startup if it is nil.  This function should accept the
 prompt string as its first argument, and the default value as its
-second argument.")
+second argument."
+  :type '(choice (const :tag "Guess" :value nil)
+		 (const :tag "Use Ange-FTP" :value ange-ftp-read-passwd)
+		 (const :tag "Use EFS"      :value efs-read-passwd)
+		 (const :tag "Use Password Package" :value read-passwd)
+		 (function :tag "Other"))
+  :group 'url-hairy)
 
-(defvar url-gopher-labels
+(defcustom url-gopher-labels
   '(("0" . "(TXT)")
     ("1" . "(DIR)")
     ("2" . "(CSO)")
@@ -211,9 +316,12 @@
 used when necessary, or it could disrupt formatting of the document
 later on.  It is also a good idea to make sure all the strings are the
 same length after entity references are removed, on a strictly
-stylistic level.")
+stylistic level."
+  :type '(repeat (cons (string :tag "Type")
+		       (string :tag "Description")))
+  :group 'url-hairy)
 
-(defvar url-gopher-icons
+(defcustom url-gopher-icons
   '(
     ("0" . "&text.document;")
     ("1" . "&folder;")
@@ -230,11 +338,18 @@
     ("I" . "&image;")
     ("s" . "&audio;"))
   "*An assoc list of gopher types and the graphic entity references to
-show when possible.")
+show when possible."
+  :type '(repeat (cons (string :tag "Type")
+		       (string :tag "Icon")))
+  :group 'url-hairy)
 
-(defvar url-standalone-mode nil "*Rely solely on the cache?")
-(defvar url-multiple-p t
-  "*If non-nil, multiple queries are possible through ` *URL-<i>*' buffers")
+(defcustom url-standalone-mode nil "*Rely solely on the cache?"
+  :type 'boolean
+  :group 'url-cache)
+(defcustom url-multiple-p t
+  "*If non-nil, multiple queries are possible through ` *URL-<i>*' buffers"
+  :type 'boolean
+  :group 'url-hairy)
 (defvar url-default-working-buffer " *URL*" " The default buffer to do all of the processing in.")
 (defvar url-working-buffer url-default-working-buffer
   "The buffer to do all of the processing in.
@@ -256,20 +371,26 @@
 						"0123456789'()+_,-./=?"))
   "Characters allowable in a MIME multipart separator.")
 
-(defvar url-bad-port-list
+(defcustom url-bad-port-list
   '("25" "119" "19")
   "*List of ports to warn the user about connecting to.  Defaults to just
 the mail, chargen, and NNTP ports so you cannot be tricked into sending
-fake mail or forging messages by a malicious HTML document.")
+fake mail or forging messages by a malicious HTML document."
+  :type '(repeat (string :tag "Port"))
+  :group 'url-hairy)
 
-(defvar url-be-anal-about-file-attributes nil
+(defcustom url-be-anal-about-file-attributes nil
   "*Whether to use HTTP/1.0 to figure out file attributes
-or just guess based on file extension, etc.")
+or just guess based on file extension, etc."
+  :type 'boolean
+  :group 'url-mime)
 
-(defvar url-be-asynchronous nil
+(defcustom url-be-asynchronous nil
   "*Controls whether document retrievals over HTTP should be done in
 the background.  This allows you to keep working in other windows
-while large downloads occur.")
+while large downloads occur."
+  :type 'boolean
+  :group 'url)
 (make-variable-buffer-local 'url-be-asynchronous)
 
 (defvar url-request-data nil "Any data to send with the next request.")
@@ -284,9 +405,12 @@
   "*String to send to the server in the Accept-encoding: field in HTTP/1.0
 requests.  This is created automatically from mm-content-transfer-encodings.")
 
-(defvar url-mime-language-string "*"
+(defcustom url-mime-language-string "*"
   "*String to send to the server in the Accept-language: field in
-HTTP/1.0 requests.")
+HTTP/1.0 requests."
+  :type 'string
+  :group 'url-mime
+  :group 'i18n)
 
 (defvar url-mime-accept-string nil
   "String to send to the server in the Accept: field in HTTP/1.0 requests.
@@ -309,28 +433,36 @@
 (defvar url-system-type nil "What type of system we are on.")
 (defvar url-os-type nil "What OS we are on.")
 
-(defvar url-max-password-attempts 5
+(defcustom url-max-password-attempts 5
   "*Maximum number of times a password will be prompted for when a
-protected document is denied by the server.")
+protected document is denied by the server."
+  :type 'integer
+  :group 'url)
 
-(defvar url-temporary-directory (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
+(defcustom url-temporary-directory (or (getenv "TMPDIR") "/tmp")
+  "*Where temporary files go."
+  :type 'directory
+  :group 'url-file)
 
-(defvar url-show-status t
+(defcustom url-show-status t
   "*Whether to show a running total of bytes transferred.  Can cause a
 large hit if using a remote X display over a slow link, or a terminal
-with a slow modem.")
+with a slow modem."
+  :type 'boolean
+  :group 'url)
 
 (defvar url-using-proxy nil
   "Either nil or the fully qualified proxy URL in use, e.g.
 http://www.domain.com/")
 
-(defvar url-news-server nil
+(defcustom url-news-server nil
   "*The default news server to get newsgroups/articles from if no server
 is specified in the URL.  Defaults to the environment variable NNTPSERVER
-or \"news\" if NNTPSERVER is undefined.")
+or \"news\" if NNTPSERVER is undefined."
+  :type '(choice (const :tag "None" :value nil) string)
+  :group 'url)
 
-(defvar url-gopher-to-mime
+(defcustom url-gopher-to-mime
   '((?0 . "text/plain")			; It's a file
     (?1 . "www/gopher")			; Gopher directory
     (?2 . "www/gopher-cso-search")	; CSO search
@@ -345,14 +477,18 @@
     (?h . "text/html")			; HTML source
     (?s . "audio/basic")		; Sound file
     )
-  "*An assoc list of gopher types and their corresponding MIME types.")
+  "*An assoc list of gopher types and their corresponding MIME types."
+  :type '(repeat (cons sexp string))
+  :group 'url-hairy)
 
-(defvar url-use-hypertext-gopher t
+(defcustom url-use-hypertext-gopher t
   "*Controls how gopher documents are retrieved.
 If non-nil, the gopher pages will be converted into HTML and parsed
 just like any other page.  If nil, the requests will be passed off to
 the gopher.el package by Scott Snyder.  Using the gopher.el package
-will lose the gopher+ support, and inlined searching.")
+will lose the gopher+ support, and inlined searching."
+  :type 'boolean
+  :group 'url)
 
 (defvar url-global-history-hash-table nil
   "Hash table for global history completion.")
@@ -361,13 +497,17 @@
   "^\\([-a-zA-Z0-9+.]+:\\)"
   "A regular expression that will match an absolute URL.")
 
-(defvar url-confirmation-func 'y-or-n-p
+(defcustom url-confirmation-func 'y-or-n-p
   "*What function to use for asking yes or no functions.  Possible
 values are 'yes-or-no-p or 'y-or-n-p, or any function that takes a
 single argument (the prompt), and returns t only if a positive answer
-is gotten.")
+is gotten."
+  :type '(choice (const :tag "Short (y or n)" :value y-or-n-p)
+		 (const :tag "Long (yes or no)" :value yes-or-no-p)
+		 (function :tag "Other"))
+  :group 'url-hairy)
 
-(defvar url-gateway-method 'native
+(defcustom url-gateway-method 'native
   "*The type of gateway support to use.
 Should be a symbol specifying how we are to get a connection off of the
 local machine.
@@ -381,7 +521,14 @@
                    This simply does a (require 'tcp), then sets
                    url-gateway-method to be 'native.
 'native		:: Use the native open-network-stream in emacs
-")
+"
+  :type '(radio (const :tag "Telnet to gateway host" :value telnet)
+		(const :tag "Rlogin to gateway host" :value rlogin)
+		(const :tag "Use SOCKS proxy" :value socks)
+		(const :tag "Use SSL for all connections" :value ssl)
+		(const :tag "Use the `tcp' package" :value tcp)
+		(const :tag "Direct connection" :value native))
+  :group 'url-hairy)
 
 (defvar url-running-xemacs (string-match "XEmacs" emacs-version)
   "*Got XEmacs?")
--- a/lisp/w3/url.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/url.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,13 +1,13 @@
 ;;; url.el --- Uniform Resource Locator retrieval tool
 ;; Author: wmperry
-;; Created: 1997/04/09 23:49:33
-;; Version: 1.73
+;; Created: 1997/04/11 14:41:10
+;; Version: 1.74
 ;; Keywords: comm, data, processes, hypermedia
 
 ;;; LCD Archive Entry:
 ;;; url|William M. Perry|wmperry@cs.indiana.edu|
 ;;; Functions for retrieving/manipulating URLs|
-;;; 1997/04/09 23:49:33|1.73|Location Undetermined
+;;; 1997/04/11 14:41:10|1.74|Location Undetermined
 ;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1797,12 +1797,16 @@
     (set-buffer nntp-server-buffer)
     (buffer-string)))
 
-(defvar url-external-retrieval-program "www"
-  "*Name of the external executable to run to retrieve URLs.")
+(defcustom url-external-retrieval-program "www"
+  "*Name of the external executable to run to retrieve URLs."
+  :type 'string
+  :group 'url)
 
-(defvar url-external-retrieval-args '("-source")
+(defcustom url-external-retrieval-args '("-source")
   "*A list of arguments to pass to `url-external-retrieval-program' to
-retrieve a URL by its HTML source.")
+retrieve a URL by its HTML source."
+  :type '(repeat string)
+  :group 'url)
 
 (defun url-retrieve-externally (url &optional no-cache)
   (let ((url-working-buffer (if (and url-multiple-p
--- a/lisp/w3/w3-display.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/w3-display.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; w3-display.el --- display engine v99999
 ;; Author: wmperry
-;; Created: 1997/04/07 17:01:38
-;; Version: 1.172
+;; Created: 1997/04/11 14:42:46
+;; Version: 1.173
 ;; Keywords: faces, help, hypermedia
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -79,8 +79,9 @@
   (defmacro w3-get-face-info (info &optional other)
     (let ((var (intern (format "w3-face-%s" info))))
       (` (push (w3-get-style-info (quote (, info)) node
-				  (or (cdr-safe (assq (quote (, other))
-						      (nth 1 node)))
+				  (or (and (not w3-user-colors-take-precedence)
+					   (cdr-safe (assq (quote (, other))
+							   (nth 1 node))))
 				      (car (, var))))
 	       (, var)))))
 
@@ -1892,12 +1893,16 @@
 	       (if alink
 		   (setq sheet (format "%sa:active { color: %s }\n" sheet
 				       (w3-fix-color alink))))
-	       (if (/= (length sheet) 0)
+	       (if (and (not w3-user-colors-take-precedence)
+			(/= (length sheet) 0))
 		   (w3-handle-style (list 'data sheet
 					  'notation "text/css")))
-	       (if (and (w3-get-attribute 'text) (not fore))
-		   (setf (car w3-face-color) (w3-fix-color
-					      (w3-get-attribute 'text))))
+	       (if (and (not w3-user-colors-take-precedence)
+			(w3-get-attribute 'text)
+			(not fore))
+		   (progn
+		     (setq fore (w3-fix-color (w3-get-attribute 'text)))
+		     (setf (car w3-face-color) fore)))
 	       (if (not font-running-xemacs)
 		   (setq w3-display-background-properties (cons fore back))
 		 (if fore
--- a/lisp/w3/w3-vars.el	Mon Aug 13 09:26:04 2007 +0200
+++ b/lisp/w3/w3-vars.el	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 ;;; w3-vars.el,v --- All variable definitions for emacs-w3
 ;; Author: wmperry
-;; Created: 1997/04/10 21:18:12
-;; Version: 1.123
+;; Created: 1997/04/11 14:49:22
+;; Version: 1.124
 ;; Keywords: comm, help, hypermedia
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -33,7 +33,7 @@
 (require 'w3-cus)			; Grab everything that is customized
 
 (defconst w3-version-number
-  (let ((x "p3.0.81"))
+  (let ((x "p3.0.82"))
     (if (string-match "State:[ \t\n]+.\\([^ \t\n]+\\)" x)
 	(setq x (substring x (match-beginning 1) (match-end 1)))
       (setq x (substring x 1)))
@@ -41,7 +41,7 @@
      (function (lambda (x) (if (= x ?-) "." (char-to-string x)))) x ""))
   "Version # of w3-mode.")
 
-(defconst w3-version-date (let ((x "1997/04/10 21:18:12"))
+(defconst w3-version-date (let ((x "1997/04/11 14:49:22"))
 			    (if (string-match "Date: \\([^ \t\n]+\\)" x)
 				(substring x (match-beginning 1) (match-end 1))
 			      x))
--- a/man/custom.texi	Mon Aug 13 09:26:04 2007 +0200
+++ b/man/custom.texi	Mon Aug 13 09:26:39 2007 +0200
@@ -13,7 +13,7 @@
 @comment  node-name,  next,  previous,  up
 @top The Customization Library
 
-Version: 1.74
+Version: 1.84
 
 @menu
 * Introduction::                
@@ -611,10 +611,10 @@
 @var{load} should be either a library file name, or a feature name.
 @end defun
 
-@defun custom-menu-create symbol &optional name
+@defun customize-menu-create symbol &optional name
 Create menu for customization group @var{symbol}.
 If optional @var{name} is given, use that as the name of the menu. 
-Otherwise make up a name from @var{symbol}.
+Otherwise the menu will be named `Customize'.
 The menu is in a format applicable to @code{easy-menu-define}.
 @end defun
 
@@ -685,6 +685,10 @@
 @item
 Empty customization groups should start open (harder than it looks).
 
+@item
+Make it possible to include a comment/remark/annotation when saving an
+option.
+
 @end itemize
 
 @contents
--- a/man/gnus.texi	Mon Aug 13 09:26:04 2007 +0200
+++ b/man/gnus.texi	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4.43 Manual
+@settitle Gnus 5.4.45 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -287,7 +287,7 @@
 @tex
 
 @titlepage
-@title Gnus 5.4.43 Manual
+@title Gnus 5.4.45 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -323,7 +323,7 @@
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Gnus 5.4.43.
+This manual corresponds to Gnus 5.4.45.
 
 @end ifinfo
 
@@ -13082,6 +13082,22 @@
 function.  If this is too slow and you don't care for verification
 (which may be dangerous), you can set this variable to @code{nil}.
 
+If you want signed NoCeM messages to be verified and unsigned messages
+not to be verified (but used anyway), you could do something like:
+
+@lisp
+(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
+
+(defun my-gnus-mc-verify ()
+  (not (eq 'forged
+           (ignore-errors
+             (if (mc-verify)
+                 t
+               'forged)))))
+@end lisp
+
+This might be dangerous, though.
+
 @item gnus-nocem-directory
 @vindex gnus-nocem-directory
 This is where Gnus will store its NoCeM cache files.  The default is
--- a/man/message.texi	Mon Aug 13 09:26:04 2007 +0200
+++ b/man/message.texi	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 5.4.43 Manual
+@settitle Message 5.4.45 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -39,7 +39,7 @@
 @tex
 
 @titlepage
-@title Message 5.4.43 Manual
+@title Message 5.4.45 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -79,7 +79,7 @@
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 5.4.43.  Message is distributed with
+This manual corresponds to Message 5.4.45.  Message is distributed with
 the Gnus distribution bearing the same version number as this manual
 has. 
 
--- a/man/tm/tm-vm-en.texi	Mon Aug 13 09:26:04 2007 +0200
+++ b/man/tm/tm-vm-en.texi	Mon Aug 13 09:26:39 2007 +0200
@@ -5,7 +5,7 @@
 @c %**end of header
 
 @ifinfo
-This file documents tm-vm.el v7.79.
+This file documents tm-vm.el v8.11
 
 tm-vm is part of the TM Package.
 
@@ -26,7 +26,7 @@
 @titlepage
 @title tm-vm Manual (English Version)
 @author by Oscar Figueiredo
-@code{$Id: tm-vm-en.texi,v 1.3 1997/01/11 20:14:34 steve Exp $}
+@code{$Id: tm-vm-en.texi,v 1.4 1997/04/13 03:14:26 steve Exp $}
 @page
 
 tm-vm is part of the TM Package.
@@ -48,15 +48,15 @@
 you read and write multimedia mail on the Internet using the MIME
 standard.
 
-This document applies to release 7.79 of tm-vm.el
+This document applies to release 8.11 of tm-vm.el
 @end ifinfo
 
 @menu
-* Overview::                    Reading and writing MIME mail in VM
-* Install::                     Installation procedure
-* Usage::                       Detailed usage of tm-vm                  
-* Customization::               How to customize tm-vm behavior.
-* News::                  	Recent modifications      
+* Overview::                    
+* Install::                     
+* Usage::                       
+* Customization::               
+* News::                        
 * Copyright::                   
 * Variable Index::              
 * Concept Index::               
@@ -72,10 +72,12 @@
 tm-vm is an interface between TM (@pxref{Top,TM,,tm-en,TM Manual}.) and the VM
 mail user agent (@pxref{Top,VM,,vm,VM Manual}.).
 
-In its current version VM does not provide functionality to support the
-MIME standard. tm-vm integrates the TM package into VM so as to give you
-a powerful MIME support in your usual mail environment for both mail
-reading and composing.
+Until recently VM did not support the MIME standard. Kyle Jones has
+begun to implement it in VM 6.0 however TM provides a much more complete
+support of MIME than the one currently offered in VM 6. tm-vm integrates
+the TM package into VM so as to give you a powerful MIME support in your
+usual mail environment for both mail reading and composing. tm-vm adds
+MIME features to VM 5 and replaces the native features offered by VM 6.
 
 @section Mail Reading Features
 
@@ -85,10 +87,20 @@
 tm-vm detects MIME messages when you try to view them and, if automatic
 MIME previewing is enabled (the default), then it automatically parses
 the message and displays a "beautified" version under the MIME Viewer.
+Note that the word @emph{previewing} has two different meanings for VM and
+TM. In VM, it means view the first lines of a message only, as defined by
+the variable @code{vm-preview-lines}, to avoid confusion we call this
+@emph{message previewing}. In TM, previewing means parsing the contents
+of a message according to the rules of the MIME standard and display a
+corresponding view of it. We call that more specifically @emph{MIME
+previewing}. 
 
 The MIME Viewer offers all the functionality to view/extract the MIME
 components (attachments) of the message. It also displays images inline
-in XEmacs. @xref{tm-view,,MIME Viewer tm-view,tm-en,TM Manual}.
+in XEmacs. @xref{Top,MIME Viewer,MIME Viewer,tm-view-en,TM View
+Manual}. Note however that for a better VM integration, tm-vm
+overrides the standard bindings of the MIME-Viewer and makes them
+available with a @key{C-c} prefix.
 
 @section Mail Composing Features
 
@@ -107,7 +119,8 @@
 Enclose message sections as PGP encrypted
 @end itemize
 
-and much more. For details, @pxref{tm-edit,,MIME Editor,tm-en,TM Manual}.
+and much more. For details, @pxref{Top,MIME Editor,MIME
+Editor,tm-edit-en,TM Edit Manual}.
 
 When you reply to a message citing the original and tm-vm is active,
 tm-vm will insert the contents of the MIME-Preview buffer in the reply
@@ -126,7 +139,7 @@
 VM is part of XEmacs distributions and so if you're running XEmacs you
 don't need to install it.  If you're running Emacs, you will need to
 install VM. The official VM distribution site is
-@file{ftp://ftp.uu.net/networking/mail/vm/}.
+@file{ftp://ftp.uu.net/networking/mail/vm/}. 
 
 If you're reading this manual then there is a pretty good chance you
 already have a recent version of tm. The official tm distribution site
@@ -162,10 +175,10 @@
 
 
 @menu
-* Reading MIME mail::       Commands for MIME previewing    
-* Composing MIME mail::     Writing/Replying to/Forwarding MIME messages
-* Printing::                Printing MIME messages
-* Using BBDB::              BBDB integration
+* Reading MIME mail::           Commands for MIME previewing    
+* Composing MIME mail::         Writing/Replying to/Forwarding MIME messages
+* Printing::                    Printing MIME messages
+* Using BBDB::                  BBDB integration
 @end menu
 
 
@@ -199,11 +212,13 @@
 message. It is generally what you want to see as it is more readable.
 @end itemize
 
-There are two different buffers due to the current VM implementation
-that makes TM/VM integration difficult. However, we try hard to make the
-MIME Preview buffer act as if it were the real VM message buffer by
-making all bindings act the same in the Preview buffer as in the folder
-buffer.
+There are two different buffers due to the VM 5 implementation that
+makes TM/VM integration difficult. However, we try hard to make the MIME
+Preview buffer act as if it were the real VM message buffer by making
+all bindings act the same in the Preview buffer as in the folder
+buffer. In this version of tm-vm, most of the usual VM bindings are made
+available transparently in the MIME Preview buffer, others will be in
+the future, contact the maintainer for more information.
 
 
 @code{tm-vm/toggle-preview-mode} (bound to @kbd{M-t}) lets you toggle
@@ -213,16 +228,16 @@
 @node Composing MIME mail, Printing, Reading MIME mail, Usage
 @section Composing MIME mail
 
-Regardless of the current preview mode, tm-vm activates the mime-editor
-mode each time you compose a mail message (new message, reply or
-forward).  @xref{tm-edit,,MIME Editor,tm-en,TM Manual}, for details on
-mime-editor mode.
+Regardless of the current MIME preview mode (automatic or on-demand),
+tm-vm activates the mime-editor mode each time you compose a mail
+message (new message, reply or forward).  @xref{Top,MIME Editor,MIME
+Editor,tm-edit-en,TM Edit Manual}, for details on mime-editor mode.
 
 When you reply to a message, tm-vm will insert the contents of the
 @strong{decoded} message if there exists a MIME Preview buffer. This is
 generally what you want for quoted-printable text, for instance. Inline
 images are removed from the reply. If for some reason you want the
-@strong{raw} message to be inserted instead of the decoded one you have
+@strong{raw} message to be inserted instead of the decoded one, you have
 to kill the MIME Preview buffer first. You do this with
 @code{kill-buffer} (bound to @kbd{C-x k}) in the MIME Preview
 buffer. You can also toggle automatic preview off, if it was on, with
@@ -250,6 +265,7 @@
 VM/tm-vm. You must ensure, however, that tm-vm is loaded @strong{after}
 BBDB has installed its hooks. Therefore be sure to respect the following
 sequence in your initialization file:
+
 @lisp
 (bbdb-insinuate-vm)
 (require 'tm-vm)
@@ -279,10 +295,22 @@
 @code{t}.
 @end defopt
 
-@defopt tm-vm/use-xemacs-popup-menu
-If this is non-@code{nil} and you're running XEmacs, tm-vm will install a
-menu of MIME commands as a mode popup (@key{Button 3}) in message
-composition buffers. Default @code{t}.
+@defopt tm-vm/use-vm-bindings
+If non-@code{nil} tm-vm will use usual VM bindings in MIME-Preview
+buffers and make TM bindings available with a prefix. Otherwise usual TM
+bindings are used without prefix (this was the default in versions of
+tm-vm older than 8.0). Default @code{t}.
+@end defopt
+
+@defopt tm-vm/attach-to-popup-menus
+If this is non-@code{nil}, tm-vm will append a menu of MIME commands to
+the VM standard mode popup (@key{Button 3}). Default @code{t}. Untested
+in Emacs.
+@end defopt
+
+@defopt tm-vm/use-original-url-button
+If this is non-@code{nil}, tm-vm will use VM to energize URL's contained
+in the message body as weel as message headers. Default @code{t}.
 @end defopt
 
 @defopt tm-vm/use-ps-print
@@ -291,6 +319,12 @@
 non-MULE Emacses.
 @end defopt
 
+@defvar tm-vm/build-mime-preview-buffer-hook
+tm-vm runs the hooks in this list each time it builds a MIME-Preview
+buffer for a message. You can attach your own hook functions using
+@code{add-hook}.
+@end defvar
+
 @defvar tm-vm/select-message-hook
 tm-vm runs the hooks in this list after selecting a message. You can
 attach your own hook functions using @code{add-hook}.
@@ -325,7 +359,44 @@
 @node News, Copyright, Customization, Top
 @chapter News
 
-This section documents the changes in the latest releases of tm-vm.
+This section documents the user-visible changes in the latest releases
+of tm-vm. For more technical details see the ChangeLog.
+
+@section 8.5 to 8.11
+
+@itemize @bullet
+@item
+Bug fixes
+@item
+Compatible with successive VM 6 versions (tested up to VM 6.24).
+@item
+Improved overall VM integration.
+@item
+New hook variable @code{tm-vm/build-mime-preview-buffer-hook}.
+@end itemize
+
+@section 8.4
+
+@itemize @bullet
+@item
+Bug fixes in Emacs menus.
+@end itemize
+
+@section 8.0 to 8.3
+@itemize @bullet
+@item
+Most usual VM bindings are available in MIME-Preview buffers (motion
+commands, summary generation). Usual TM bindings are prefixed with
+@key{C-c} now. See the variable @code{tm-vm/use-vm-bindings}.
+@item
+VM menu bar and toolbar are accessible from MIME-Preview buffers
+@item
+MIME-Preview buffers support header toggling
+@item
+VM message previewing is correctly supported
+@item
+Bug fixes
+@end itemize
 
 @section 7.79
 
@@ -396,7 +467,7 @@
 @ifinfo
 @chapter Copyright
 
-This file documents tm-vm 7.76, an interface between tm and the VM mail
+This file documents tm-vm 8.11, an interface between tm and the VM mail
 user agent.
 
 Copyright 1996 Tomohiko Morioka, Oscar Figueiredo
--- a/man/widget.texi	Mon Aug 13 09:26:04 2007 +0200
+++ b/man/widget.texi	Mon Aug 13 09:26:39 2007 +0200
@@ -1,7 +1,5 @@
 \input texinfo.tex
 
-@c $Id: widget.texi,v 1.12 1997/04/10 05:56:22 steve Exp $
-
 @c %**start of header
 @setfilename widget
 @settitle The Emacs Widget Library
@@ -15,7 +13,7 @@
 @comment  node-name,  next,  previous,  up
 @top The Emacs Widget Library
 
-Version: 1.74
+Version: 1.84
 
 @menu
 * Introduction::                
@@ -1052,13 +1050,17 @@
 property and must be an expression of the same type as the widget.
 I.e. the string widget can only be initialized with a string.
 
-All the atom widgets take the same keyword arguments as the @code{editable-field}
-widget.
+All the atom widgets take the same keyword arguments as the
+@code{editable-field} widget.
 
 @deffn Widget string
 Allows you to edit a string in an editable field.
 @end deffn
 
+@deffn Widget character
+Allows you to enter a character in an editable field.
+@end deffn
+
 @deffn Widget file
 Allows you to edit a file name in an editable field.  You you activate
 the tag button, you can edit the file name in the mini-buffer with
--- a/src/ChangeLog	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/ChangeLog	Mon Aug 13 09:26:39 2007 +0200
@@ -1,3 +1,52 @@
+Sat Apr 12 05:57:51 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* Makefile.in.in (lisp): Dump cus-start.elc with XEmacs.
+
+	* event-Xt.c (x_to_emacs_keysym): Allow for dead keys.  (Patch
+	from Joachim Schnitter).
+
+	* Makefile.in.in: Allow native sound for BSD/I.
+
+	* linuxplay.c: Rename global sndbuf to linuxplay_sndbuf.
+	Make sndbuf, mix_fd, audio_vol, audio_fd, audio_dev non-static to
+	avoid dump time lossage.
+	(sndcnv8U_2mono): Rename global sndbuf to linuxplay_sndbuf.
+	(sndcnv8S_2mono): Ditto.
+	(sndcnv2monounsigned): Ditto.
+	(sndcnv2unsigned): Ditto.
+	(sndcnvULaw_2mono): Ditto.
+	(sndcnv16_2monoLE): Ditto.
+	(sndcnv16_2monoBE): Ditto.
+	(sndcnv2byteLE): Ditto.
+	(sndcnv2byteBE): Ditto.
+	(sndcnv2monobyteLE): Ditto.
+	(sndcnv2monobyteBE): Ditto.
+	(linux_play_data_or_file): Ditto.
+	(linux_play_data_or_file): Ditto.
+	(linux_play_data_or_file): Ditto.
+
+Sat Apr 12 01:59:14 1997  Kyle Jones  <kyle_jones@WonderWorks.COM>
+
+	* glyphs-x.c, glyphs.c, glyphs.h: Added domain parameter to all
+ 	  image *_instantiate functions so that the domsin is available to
+ 	  specifier lookups in the various instantiator functions.  Passed
+	  domain argument to extract_xpm_color_names for the
+	  Fspecifier_instance call.
+
+Fri Apr 11 20:02:40 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* glyphs-x.c (extract_xpm_color_names): Add checking to handle
+	case for when XEmacs is in initialization.
+
+	* events.c (Fevent_type): Remove handling for dead_event.
+	(Fevent_properties): Remove handling for dead_event.
+
+Thu Apr 10 20:41:53 1997  David Moore  <dmoore@ucsd.edu>
+
+	* ntproc.c (sys_spawnve): Clean up GC protection.
+
+	* fileio.c (Ffile_executable_p): Clean up GC protection.
+
 Thu Apr 10 12:48:49 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* glyphs.c: Undo duplicate declaration of display_table.
--- a/src/Makefile.in.in	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/Makefile.in.in	Mon Aug 13 09:26:39 2007 +0200
@@ -321,11 +321,11 @@
 #     define SOUND_CFLAGS	+e -I/usr/audio/examples 
 #   endif /* USE_GCC */
 #   define SOUND_OBJS		hpplay.o
-# elif defined (LINUX) || defined(__FreeBSD__)
+# elif defined (LINUX) || defined(__FreeBSD__) || defined (__bsdi__)
 #   define SOUND_CFLAGS
 #   define SOUND_OBJS		linuxplay.o
 # else
-  ERROR!!  HAVE\_NATIVE\_SOUND can only be defined on Solaris, SunOS, SGI, hp9000s800, or Linux
+  ERROR!!  HAVE\_NATIVE\_SOUND can only be defined on Solaris, SunOS, SGI, hp9000s800, or FreeBSD, BSD/I, Linux
 # endif /* OS */
 #else /* !HAVE_NATIVE_SOUND */
 # define SOUND_CFLAGS
@@ -1222,8 +1222,8 @@
         ${lispdir}bytecomp/bytecomp-runtime.elc FLOAT_LISP \
         ${lispdir}prim/itimer.elc ${lispdir}prim/itimer-autosave.elc \
 	${lispdir}ediff/ediff-hook.elc \
-	${lispdir}custom/widget.elc \
-	${lispdir}custom/custom.elc ${lispdir}prim/custom-load.elc \
+	${lispdir}custom/widget.elc ${lispdir}custom/custom.elc \
+	${lispdir}prim/custom-load.elc ${lispdir}prim/cus-start.elc \
 	${lispdir}packages/fontl-hooks.elc SCROLLBAR_LISP \
 	${lispdir}prim/buffer.elc MENUBAR_LISP \
 	${lispdir}packages/buff-menu.elc DIALOG_LISP MULE_LISP NOMULE_LISP \
--- a/src/event-Xt.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/event-Xt.c	Mon Aug 13 09:26:39 2007 +0200
@@ -755,7 +755,8 @@
 	 force anyone to remember them.
 	 The case of the other character sets is significant, however.
 	 */
-      if ((((unsigned int) keysym) & (~0xFF)) == ((unsigned int) 0xFF00))
+      if ((((unsigned int) keysym) & (~0xFF)) == ((unsigned int) 0xFF00) ||
+	  (((unsigned int) keysym) & (~0xFF)) == ((unsigned int) 0xFE00))
 	{
 	  char buf [255];
 	  char *s1, *s2;
--- a/src/events.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/events.c	Mon Aug 13 09:26:39 2007 +0200
@@ -1097,7 +1097,6 @@
 timeout		A timeout has expired.
 eval		This causes a specified action to occur when dispatched.
 magic		Some window-system-specific event has occurred.
-dead		The event has been deallocated.
 empty		The event has been allocated but not assigned.
 
 */
@@ -1137,9 +1136,6 @@
     case empty_event:
       return Qempty;
 
-    case dead_event:
-      return Qdead;
-
     default:
       abort ();
       return Qnil;
@@ -1850,7 +1846,6 @@
 
     case magic_eval_event:
     case magic_event:
-    case dead_event:
     case empty_event:
       break;
 
--- a/src/fileio.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/fileio.c	Mon Aug 13 09:26:39 2007 +0200
@@ -2480,7 +2480,7 @@
        (filename))
 
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   Lisp_Object handler;
   struct gcpro gcpro1;
@@ -2506,16 +2506,14 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   Lisp_Object handler;
   int desc;
   struct gcpro gcpro1;
   
-  GCPRO1 (filename);
   CHECK_STRING (filename);
   abspath = Fexpand_file_name (filename, Qnil);
-  UNGCPRO;
 
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */
@@ -2539,7 +2537,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath, dir;
   Lisp_Object handler;
   struct stat statbuf;
@@ -2584,7 +2582,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
 #ifdef S_IFLNK
   char *buf;
   int bufsize;
@@ -2636,7 +2634,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   struct stat st;
   Lisp_Object handler;
@@ -2670,7 +2668,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object handler;
 
   /* If the file name has special constructs in it,
@@ -2692,7 +2690,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   struct stat st;
   Lisp_Object handler;
@@ -2720,7 +2718,7 @@
 */
        (filename))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   struct stat st;
   Lisp_Object handler;
@@ -2755,7 +2753,7 @@
 */
        (filename, mode))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath;
   Lisp_Object handler;
   struct gcpro gcpro1;
@@ -2833,7 +2831,7 @@
 */
        (file1, file2))
 {
-  /* This function can call lisp */
+  /* This function can GC.  GC checked 1997.04.10. */
   Lisp_Object abspath1, abspath2;
   struct stat st;
   int mtime1;
--- a/src/glyphs-x.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/glyphs-x.c	Mon Aug 13 09:26:39 2007 +0200
@@ -110,7 +110,8 @@
 				     Lisp_Object instantiator,
 				     Lisp_Object pointer_fg,
 				     Lisp_Object pointer_bg,
-				     int dest_mask);
+				     int dest_mask,
+				     Lisp_Object domain);
 
 #include "bitmaps.h"
 
@@ -1034,7 +1035,7 @@
 static void
 xbm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		 int dest_mask)
+		 int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   CONST char *gcc_go_home;
@@ -1270,7 +1271,7 @@
 static void
 jpeg_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		  Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		  int dest_mask)
+		  int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
@@ -1747,7 +1748,7 @@
 static void
 gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		 int dest_mask)
+		 int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
@@ -2032,7 +2033,7 @@
 static void
 png_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		 int dest_mask)
+		 int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
   Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii);
@@ -2326,7 +2327,7 @@
 static void
 tiff_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		  Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		  int dest_mask)
+		  int dest_mask, Lisp_Object domain)
 {
   abort ();
 }
@@ -2556,6 +2557,7 @@
 
 static XpmColorSymbol *
 extract_xpm_color_names (XpmAttributes *xpmattrs, Lisp_Object device,
+			 Lisp_Object domain,
 			 Lisp_Object color_symbol_alist)
 {
   /* This function can GC */
@@ -2588,10 +2590,8 @@
 	    (value, device, encode_error_behavior_flag (ERROR_ME_NOT));
       else
         {
-	  Lisp_Object frame = DEVICE_SELECTED_FRAME(XDEVICE(device));
-	  Lisp_Object window = FRAME_SELECTED_WINDOW(XFRAME(frame));
           assert (COLOR_SPECIFIERP (value));
-          value = Fspecifier_instance (value, window, Qnil, Qnil);
+          value = Fspecifier_instance (value, domain, Qnil, Qnil);
         }
       if (NILP (value))
         continue;
@@ -2640,7 +2640,7 @@
 static void
 xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		 int dest_mask)
+		 int dest_mask, Lisp_Object domain)
 {
   /* This function can GC */
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
@@ -2701,7 +2701,7 @@
       xpmattrs.valuemask |= XpmCloseness;
     }
   
-  color_symbols = extract_xpm_color_names (&xpmattrs, device,
+  color_symbols = extract_xpm_color_names (&xpmattrs, device, domain,
 					   color_symbol_alist);
 
   result = XpmCreatePixmapFromBuffer (dpy,
@@ -3052,7 +3052,7 @@
 static void
 xface_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		   Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		   int dest_mask)
+		   int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   int i, stattis;
@@ -3220,7 +3220,7 @@
 				  Lisp_Object instantiator,
 				  Lisp_Object pointer_fg,
 				  Lisp_Object pointer_bg,
-				  int dest_mask)
+				  int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   struct gcpro gcpro1, gcpro2, gcpro3;
@@ -3248,10 +3248,10 @@
 
   if (is_cursor_font)
     cursor_font_instantiate (image_instance, result, pointer_fg,
-			     pointer_bg, dest_mask);
+			     pointer_bg, dest_mask, domain);
   else
     string_instantiate (image_instance, result, pointer_fg,
-			pointer_bg, dest_mask);
+			pointer_bg, dest_mask, domain);
 
   UNGCPRO;
 }
@@ -3317,7 +3317,7 @@
 static void
 font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		  Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		  int dest_mask)
+		  int dest_mask, Lisp_Object domain)
 {
   /* This function can GC */
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
@@ -3415,7 +3415,7 @@
 static void
 cursor_font_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 			 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-			 int dest_mask)
+			 int dest_mask, Lisp_Object domain)
 {
   /* This function can GC */
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
--- a/src/glyphs.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/glyphs.c	Mon Aug 13 09:26:39 2007 +0200
@@ -482,7 +482,8 @@
 }
 
 static Lisp_Object
-instantiate_image_instantiator (Lisp_Object device, Lisp_Object instantiator,
+instantiate_image_instantiator (Lisp_Object device, Lisp_Object domain,
+				Lisp_Object instantiator,
 				Lisp_Object pointer_fg, Lisp_Object pointer_bg,
 				int dest_mask)
 {
@@ -502,7 +503,7 @@
 	("Don't know how to instantiate this image instantiator?",
 	 instantiator);
     IIFORMAT_METH (meths, instantiate, (ii, instantiator, pointer_fg,
-					pointer_bg, dest_mask));
+					pointer_bg, dest_mask, domain));
   }
   UNGCPRO;
 
@@ -985,7 +986,8 @@
   if (VECTORP (data)
 	   && EQ (vector_data (XVECTOR (data))[0], Qinherit))
     signal_simple_error ("inheritance not allowed here", data);
-  ii = instantiate_image_instantiator (device, data, Qnil, Qnil, dest_mask);
+  ii = instantiate_image_instantiator (device, device, data,
+				       Qnil, Qnil, dest_mask);
   RETURN_UNGCPRO (ii);
 }
 
@@ -1330,7 +1332,7 @@
 static void
 nothing_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		     Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		     int dest_mask)
+		     int dest_mask, Lisp_Object domain)
 {
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
 
@@ -1372,7 +1374,7 @@
 static void
 inherit_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		     Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		     int dest_mask)
+		     int dest_mask, Lisp_Object domain)
 {
   /* handled specially in image_instantiate */
   abort ();
@@ -1399,7 +1401,7 @@
 void
 string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 		    Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-		    int dest_mask)
+		    int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
@@ -1435,7 +1437,7 @@
 formatted_string_instantiate (Lisp_Object image_instance,
 			      Lisp_Object instantiator,
 			      Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-			      int dest_mask)
+			      int dest_mask, Lisp_Object domain)
 {
   Lisp_Object data = find_keyword_in_vector (instantiator, Q_data);
   struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
@@ -1599,6 +1601,7 @@
 	  record_unwind_protect (image_instantiate_cache_result,
 				 locative);
 	  instance = instantiate_image_instantiator (device,
+						     domain,
 						     instantiator,
 						     pointer_fg, pointer_bg,
 						     dest_mask);
--- a/src/glyphs.h	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/glyphs.h	Mon Aug 13 09:26:39 2007 +0200
@@ -95,7 +95,8 @@
 			      Lisp_Object instantiator,
 			      Lisp_Object pointer_fg,
 			      Lisp_Object pointer_bg,
-			      int dest_mask);
+			      int dest_mask,
+			      Lisp_Object domain);
 };
 
 struct ii_keyword_entry
@@ -496,7 +497,7 @@
 Lisp_Object alist_to_tagged_vector (Lisp_Object tag, Lisp_Object alist);
 void string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 			 Lisp_Object pointer_fg, Lisp_Object pointer_bg,
-			 int dest_mask);
+			 int dest_mask, Lisp_Object domain);
 Lisp_Object allocate_glyph (enum glyph_type type,
 			    void (*after_change) (Lisp_Object glyph,
 						  Lisp_Object property,
--- a/src/linuxplay.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/linuxplay.c	Mon Aug 13 09:26:39 2007 +0200
@@ -63,6 +63,8 @@
 #include <fcntl.h>
 #ifdef __FreeBSD__
 #  include <machine/soundcard.h>
+#elif defined(__bsdi__)
+#  include <sys/soundcard.h>
 #else
 #  include <linux/soundcard.h>
 #endif
@@ -119,12 +121,12 @@
 
 /* Use a global buffer as scratch-pad for possible conversions of the
    sampling format */
-static unsigned char sndbuf[SNDBUFSZ];
+unsigned char linuxplay_sndbuf[SNDBUFSZ];
 
-static int           mix_fd    = -1;
-static int           audio_vol = -1;
-static int           audio_fd  = -1;
-static char         *audio_dev = "";
+int           mix_fd    = -1;
+int           audio_vol = -1;
+int           audio_fd  = -1;
+char         *audio_dev = "";
 
 typedef enum {fmtIllegal,fmtRaw,fmtVoc,fmtWave,fmtSunAudio} fmtType;
 
@@ -421,7 +423,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--)
     *dest++ = (unsigned char)(((int)*((unsigned char *)src)++ +
 			       (int)*((unsigned char *)src)++) / 2);
@@ -442,7 +444,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--)
     *dest++ = (unsigned char)(((int)*((signed char *)src)++ +
 			       (int)*((signed char *)src)++) / 2);
@@ -463,7 +465,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--)
     *dest++ = (unsigned char)(((int)*((signed char *)src)++ +
 			       (int)*((signed char *)src)++) / 2) ^ 0x80;
@@ -484,7 +486,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--)
     *dest++ = *((unsigned char *)src)++ ^ 0x80;
   *data   = src;
@@ -563,7 +565,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--)
     /* it is not possible to directly interpolate between two ulaw encoded
        data bytes, thus we need to convert to linear format first and later
@@ -589,7 +591,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   for (count /= 2; count--; ) {
     i = ((int)(((unsigned char *)src)[0]) +
         256*(int)(((unsigned char *)src)[1]) +
@@ -617,7 +619,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   for (count /= 2; count--; ) {
     i = ((int)(((unsigned char *)src)[1]) +
         256*(int)(((unsigned char *)src)[0]) +
@@ -643,7 +645,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--) {
     *dest++ = (unsigned char)(((signed char *)src)[1] ^ (signed char)0x80);
     ((char *)src) += 2; }
@@ -664,7 +666,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--) {
     *dest++ = (unsigned char)(((signed char *)src)[0] ^ (signed char)0x80);
     ((char *)src) += 2; }
@@ -686,7 +688,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--) {
     *dest++ = (unsigned char)(((int)((signed char *)src)[1] +
 			       (int)((signed char *)src)[3]) / 2 ^ 0x80);
@@ -709,7 +711,7 @@
   rc      = count;
   src     = *data;
   *outbuf =
-  dest    = sndbuf;
+  dest    = linuxplay_sndbuf;
   while (count--) {
     *dest++ = (unsigned char)(((int)((signed char *)src)[0] +
 			       (int)((signed char *)src)[2]) / 2 ^ 0x80);
@@ -962,10 +964,10 @@
   if (!data || length < HEADERSZ)
     if (fd < 0) return;
     else {
-      length = read(fd,sndbuf,SNDBUFSZ);
+      length = read(fd,linuxplay_sndbuf,SNDBUFSZ);
       if (length < HEADERSZ)
 	return;
-      data   = sndbuf;
+      data   = linuxplay_sndbuf;
       length = SNDBUFSZ; }
 
   ffmt = analyze_format(data,&fmt,&speed,&tracks,&parsesndfile);
@@ -1017,7 +1019,7 @@
 	  warn(buf);
 	  goto END_OF_PLAY; } }
     if (fd >= 0) {
-      if ((rrtn = read(fd,sndbuf,SNDBUFSZ)) < 0) {
+      if ((rrtn = read(fd,linuxplay_sndbuf,SNDBUFSZ)) < 0) {
 	perror("read"); goto END_OF_PLAY; } }
     else
       break;
--- a/src/ntproc.c	Mon Aug 13 09:26:04 2007 +0200
+++ b/src/ntproc.c	Mon Aug 13 09:26:39 2007 +0200
@@ -586,7 +586,8 @@
   int pid;
   child_process *cp;
   int is_dos_binary;
-  
+  struct gcpro gcpro1;
+    
   /* We don't care about the other modes */
   if (mode != _P_NOWAIT)
     {
@@ -596,22 +597,22 @@
 
   /* Handle executable names without an executable suffix.  */
   program = make_string (cmdname, strlen (cmdname));
+  GCPRO1 (program);
   if (NILP (Ffile_executable_p (program)))
     {
-      struct gcpro gcpro1;
-      
       full = Qnil;
-      GCPRO1 (program);
       locate_file (Vexec_path, program, EXEC_SUFFIXES, &full, 1);
-      UNGCPRO;
       if (NILP (full))
 	{
+	  UNGCPRO;
 	  errno = EINVAL;
 	  return -1;
 	}
       cmdname = XSTRING (full)->_data;
       argv[0] = cmdname;
     }
+  UNGCPRO;
+
 
   /* make sure cmdname is in DOS format */
   strcpy (cmdname = alloca (strlen (cmdname) + 1), argv[0]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auc-tex-test	Mon Aug 13 09:26:39 2007 +0200
@@ -0,0 +1,21 @@
+Per Abrahamsen <abraham@dina.kvl.dk> writes:
+
+	xemacs -q
+	
+	(require 'tex-site) RET 
+	
+	C-x C-f test.tex RET
+	
+	==> I now get the AUC TeX menus.
+	
+	C-c C-e RET RET german
+	
+	"
+	
+	==> Inserts ``
+	
+	C-c C-n "
+	
+	==> Inserts "
+
+This means it find AUC TeX correctly, as well as the style files.