changeset 83279:2006100ee57e

Merged from miles@gnu.org--gnu-2005 (patch 204-213) Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-204 Clean up gdb-ui breakpoint faces * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-205 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-206 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-207 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-208 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-209 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-210 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-211 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-212 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-213 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-319
author Karoly Lorentey <lorentey@elte.hu>
date Sun, 27 Mar 2005 17:29:43 +0000
parents b2bde606bcf7 (current diff) 47b31fabc07f (diff)
children 0a18b9f190e2
files lisp/ChangeLog lisp/files.el lisp/international/mule-cmds.el lisp/progmodes/gdb-ui.el lisp/progmodes/idlw-shell.el lisp/progmodes/idlwave.el lisp/progmodes/vhdl-mode.el lisp/term/xterm.el lisp/vc-cvs.el lispref/ChangeLog lispref/calendar.texi man/ChangeLog man/frames.texi src/alloc.c src/coding.c src/lisp.h src/minibuf.c src/process.c src/w32term.c src/w32term.h src/xdisp.c src/xmenu.c
diffstat 128 files changed, 4346 insertions(+), 3699 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Wed Mar 23 13:35:08 2005 +0000
+++ b/etc/NEWS	Sun Mar 27 17:29:43 2005 +0000
@@ -107,6 +107,12 @@
 
 * Changes in Emacs 22.1
 
+** Languange environment and various default coding systems are setup
+more correctly according to the current locale name.  If the locale
+name doesn't specify a charset, the default is what glibc defines.
+This change may result in using the different coding systems as
+default in some locale (e.g. vi_VN).
+
 +++
 ** The commands copy-file, rename-file, make-symbolic-link and
 add-name-to-file, when given a directory as the "new name" argument,
@@ -146,6 +152,7 @@
 ** Control characters and escape glyphs are now shown in the new
 escape-glyph face.
 
++++
 ** Non-breaking space and hyphens are now prefixed with an escape
 character, unless the new user variable `show-nonbreak-escape' is set
 to nil.
@@ -222,6 +229,7 @@
 +++
 ** line-move-ignore-invisible now defaults to t.
 
++++
 ** In Outline mode, hide-body no longer hides lines at the top
 of the file that precede the first header line.
 
@@ -238,6 +246,7 @@
 ** `apply-macro-to-region-lines' now operates on all lines that begin
 in the region, rather than on all complete lines in the region.
 
+---
 ** global-whitespace-mode is a new alias for whitespace-global-mode.
 
 +++
@@ -288,6 +297,7 @@
 ** Commands winner-redo and winner-undo, from winner.el, are now bound to
 C-c <left> and C-c <right>, respectively.  This is an incompatible change.
 
+---
 ** Help commands `describe-function' and `describe-key' now show function
 arguments in lowercase italics on displays that support it.  To change the
 default, customize face `help-argument-name' or redefine the function
@@ -315,9 +325,11 @@
 `kill-region' if read-only are involved: it copies the text to the
 kill-ring, but does not delete it.
 
++++
 ** You can now use next-error (C-x `) and previous-error to advance to
 the next/previous matching line found by M-x occur.
 
++++
 ** Telnet now prompts you for a port number with C-u M-x telnet.
 
 +++
@@ -366,6 +378,7 @@
 that auto reverting works for Dired buffers (although this may not
 work properly on all operating systems) and for the Buffer Menu.
 
++++
 ** If the new user option `auto-revert-check-vc-info' is non-nil, Auto
 Revert mode reliably updates version control info (such as the version
 control number in the mode line), in all version controlled buffers in
@@ -405,6 +418,7 @@
 compilation processes without affecting the environment that all
 subprocesses inherit.
 
++++
 ** Grep has been decoupled from compilation mode setup.
 
 ---
@@ -465,6 +479,7 @@
 ** M-x compare-windows now can automatically skip non-matching text to
 resync points in both windows.
 
+---
 ** New command `strokes-global-set-stroke-string'.
 This is like `strokes-global-set-stroke', but it allows you to bind
 the stroke directly to a string to insert.  This is convenient for
@@ -472,10 +487,12 @@
 
 ** Gnus package
 
+---
 *** Gnus now includes Sieve and PGG
 Sieve is a library for managing Sieve scripts.  PGG is a library to handle
 PGP/MIME.
 
+---
 *** There are many news features, bug fixes and improvements.
 See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
 
@@ -495,6 +512,7 @@
 *** The desktop package can be customized to restore only some buffers immediately,
 remaining buffers are restored lazily (when Emacs is idle).
 
++++
 *** New commands:
   - desktop-revert reverts to the last loaded desktop.
   - desktop-change-dir kills current desktop and loads a new.
@@ -503,6 +521,7 @@
   - desktop-lazy-complete runs the desktop load to completion.
   - desktop-lazy-abort aborts lazy loading of the desktop.
 
+---
 *** New customizable variables:
   - desktop-save. Determins whether the desktop should be saved when it is
     killed.
@@ -520,6 +539,7 @@
 +++
 *** New command line option --no-desktop
 
+---
 *** New hooks:
   - desktop-after-read-hook run after a desktop is loaded.
   - desktop-no-desktop-file-hook run when no desktop file is found.
@@ -533,6 +553,7 @@
 and `save-place-skip-check-regexp' allow further fine-tuning of this
 feature.
 
++++
 ** You can have several Emacs servers on the same machine.
 
 	% emacs --eval '(setq server-name "foo")' -f server-start &
@@ -571,18 +592,21 @@
 arrow bitmaps in right fringe.  To show just the angle bitmaps in the
 left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)).
 
++++
 ** New command `display-local-help' displays any local help at point
 in the echo area.  It is bound to `C-h .'.  It normally displays the
 same string that would be displayed on mouse-over using the
 `help-echo' property, but, in certain cases, it can display a more
 keyboard oriented alternative.
 
++++
 ** New user option `help-at-pt-display-when-idle' allows to
 automatically show the help provided by `display-local-help' on
 point-over, after suitable idle time.  The amount of idle time is
 determined by the user option `help-at-pt-timer-delay' and defaults
 to one second.  This feature is turned off by default.
 
+---
 ** New commands `scan-buf-next-region' and `scan-buf-previous-region'
 move to the start of the next (previous, respectively) region with
 non-nil help-echo property and display any help found there in the
@@ -606,7 +630,7 @@
 now reads arguments for the function interactively if it is
 an interactively callable function.
 
-
+---
 ** sql changes.
 
 *** The variable `sql-product' controls the highlightng of different
@@ -678,6 +702,7 @@
 appropriate sql-interactive-mode wrapper for the current setting of
 `sql-product'.
 
+---
 ** M-x view-file and commands that use it now avoid interfering
 with special modes such as Tar mode.
 
@@ -689,6 +714,7 @@
 be present for an item to match.  Regular expression matching is still
 available.
 
++++
 *** The new option `apropos-sort-by-scores' causes the matching items
 to be sorted according to their score.  The score for an item is a
 number calculated to indicate how well the item matches the words or
@@ -701,6 +727,7 @@
 since there are situations where one or the other will shut down
 the operating system or your X server.
 
+---
 ** New minor mode, Visible mode, toggles invisibility in the current buffer.
 When enabled, it makes all invisible text visible.  When disabled, it
 restores the previous value of `buffer-invisibility-spec'.
@@ -709,6 +736,7 @@
 ** New command `kill-whole-line' kills an entire line at once.
 By default, it is bound to C-S-<backspace>.
 
+---
 ** New commands to operate on pairs of open and close characters:
 `insert-pair', `delete-pair', `raise-sexp'.
 
@@ -745,6 +773,7 @@
 +++
 ** Dired-x:
 
++++
 *** Omitting files is now a minor mode, dired-omit-mode. The mode toggling
 command is bound to M-o. A new command dired-mark-omitted, bound to M-O,
 marks omitted files. The variable dired-omit-files-p is obsoleted, use the
@@ -891,6 +920,7 @@
 horizontally or vertically, a saved window configuration is restored,
 or when the frame is resized.
 
++++
 ** New functions frame-current-scroll-bars and window-current-scroll-bars.
 
 These functions return the current locations of the vertical and
@@ -913,6 +943,7 @@
 +++
 ** `undo-only' does an undo which does not redo any previous undo.
 
+---
 ** `uniquify-strip-common-suffix' tells uniquify to prefer
 `file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'.
 
@@ -927,6 +958,7 @@
 ** GUD mode has its own tool bar for controlling execution of the inferior
 and other common debugger commands.
 
+---
 ** recentf changes.
 
 The recent file list is now automatically cleanup when recentf mode is
@@ -959,6 +991,7 @@
 ---
 ** partial-completion-mode now does partial completion on directory names.
 
+---
 ** skeleton.el now supports using - to mark the skeleton-point without
    interregion interaction.  @ has reverted to only setting
    skeleton-positions and no longer sets skeleton-point.  Skeletons
@@ -1011,6 +1044,7 @@
 ** The new command `revert-buffer-with-coding-system' (C-x RET r)
 revisits the current file using a coding system that you specify.
 
++++
 ** The new command `recode-file-name' changes the encoding of the name
 of a file.
 
@@ -1133,6 +1167,7 @@
 when possible.  The latter are more space-efficient.  This is
 controlled by user option utf-fragment-on-decoding.
 
++++
 ** The new command `set-file-name-coding-system' (C-x RET F) sets
 coding system for encoding and decoding file names.  A new menu item
 (Options->Mule->Set Coding Systems->For File Name) invokes this
@@ -1228,9 +1263,11 @@
 command-line options to feed to TeX, and `tex-start-commands' which should hold
 TeX commands to use at startup.
 
+---
 *** verbatim environments are now highlighted in courier by font-lock
 and super/sub-scripts are made into super/sub-scripts.
 
++++
 *** New major mode doctex-mode for *.dtx files.
 
 +++
@@ -1241,6 +1278,7 @@
 be selected only when it is active).  The default is nil, so that this
 feature is not enabled.
 
++++
 ** On X, when the window manager requires that you click on a frame to
 select it (give it focus), the selected window and cursor position
 normally changes according to the mouse click position.  If you set
@@ -1262,10 +1300,12 @@
 buffers to search by their filename.  Internally, Occur mode has been
 rewritten, and now uses font-lock, among other changes.
 
++++
 ** The default values of paragraph-start and indent-line-function have
 been changed to reflect those used in Text mode rather than those used
 in Indented-Text mode.
 
+---
 ** New user option `query-replace-skip-read-only': when non-nil,
 `query-replace' and related functions simply ignore
 a match if part of it has a read-only property.
@@ -1296,6 +1336,7 @@
 mouse, so that highlighting disappears when you press a key.  You can
 also disable mouse highlighting.
 
++++
 ** You can now customize if selecting a region by dragging the mouse
 shall not copy the selected text to the kill-ring by setting the new
 variable mouse-drag-copy-region to nil.
@@ -1715,6 +1756,7 @@
 prompts for a year and a week number, and moves to the first
 day of that ISO week.
 
+---
 ** The new variable `calendar-minimum-window-height' affects the
 window generated by the function `generate-calendar-window'.
 
@@ -1724,6 +1766,7 @@
 rather than all. This makes customization of variables such as
 `christian-holidays' simpler.
 
+---
 ** The function `simple-diary-display' now by default sets a header line.
 This can be controlled through the variables `diary-header-line-flag'
 and `diary-header-line-format'.
@@ -1744,6 +1787,7 @@
 
 ** VC Changes
 
++++
 *** The key C-x C-q no longer checks files in or out, it only changes
 the read-only state of the buffer (toggle-read-only).  We made this
 change because we held a poll and found that many users were unhappy
@@ -2357,6 +2401,7 @@
 "checkout", "update" or "commit".  That means using cvs diff options
 -rBASE -rHEAD.
 
+---
 ** New variable `hs-set-up-overlay' allows customization of the overlay
 used to effect hiding for hideshow minor mode.  Integration with isearch
 handles the overlay property `display' specially, preserving it during
@@ -2368,6 +2413,7 @@
 
 * New modes and packages in Emacs 22.1
 
++++
 ** The new package conf-mode.el handles thousands of configuration files, with
 varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
 var : value, var value or keyword var value) and sections ([section] or
@@ -2375,8 +2421,6 @@
 .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
 recognized.
 
-** The new package password.el provide a password cache and expiring mechanism.
-
 ** The new package dns-mode.el add syntax highlight of DNS master files.
 The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used
 to increment the SOA serial.
@@ -2394,6 +2438,7 @@
 ** The thumbs.el package allows you to preview image files as thumbnails
 and can be invoked from a Dired buffer.
 
++++
 ** The new python.el package is used to edit Python and Jython programs.
 
 ** The URL package (which had been part of W3) is now part of Emacs.
@@ -2609,6 +2654,7 @@
 ** New package benchmark.el contains simple support for convenient
 timing measurements of code (including the garbage collection component).
 
+---
 ** The new Lisp library fringe.el controls the appearance of fringes.
 
 ** `cfengine-mode' is a major mode for editing GNU Cfengine
@@ -2659,6 +2705,7 @@
 ** The function symbol-file tells you which file defined
 a certain function or variable.
 
++++
 ** Lisp code can now test if a given buffer position is inside a
 clickable link with the new function `mouse-on-link-p'.  This is the
 function used by the new `mouse-1-click-follows-link' functionality.
@@ -2739,6 +2786,7 @@
 the up-event that was discarded in case the last key sequence read for a
 previous 'k' or 'K' argument was a down-event; otherwise nil is used.
 
++++
 ** Function `translate-region' accepts also a char-table as TABLE
 argument.
 
@@ -2755,6 +2803,7 @@
 been renamed to `disabled-command-function'.  The variable
 `disabled-command-hook' has been kept as an obsolete alias.
 
++++
 ** Function `compute-motion' now calculates the usable window
 width if the WIDTH argument is nil.  If the TOPOS argument is nil,
 the usable window height and width is used.
@@ -2763,6 +2812,7 @@
 ** `visited-file-modtime' and `calendar-time-from-absolute' now return
 a list of two integers, instead of a cons.
 
++++
 ** If a command sets transient-mark-mode to `only', that
 enables Transient Mark mode for the following command only.
 During that following command, the value of transient-mark-mode
@@ -2972,9 +3022,9 @@
 previously created bitmap, or restore a built-in bitmap.
 
 *** New function 'set-fringe-bitmap-face' can now be used to set a
-specific face to be used for a specific fringe bitmap.  Normally,
-this should be a face derived from the `fringe' face, specifying
-the foreground color as the desired color of the bitmap.
+specific face to be used for a specific fringe bitmap.  The face is
+automatically merged with the `fringe' face, so normally, the face
+should only specify the foreground color of the bitmap.
 
 *** There are new display properties, left-fringe and right-fringe,
 that can be used to show a specific bitmap in the left or right fringe
@@ -2983,7 +3033,8 @@
 Format is 'display '(left-fringe BITMAP [FACE]), where BITMAP is a
 symbol identifying a fringe bitmap, either built-in or defined with
 `define-fringe-bitmap', and FACE is an optional face name to be used
-for displaying the bitmap.
+for displaying the bitmap instead of the default `fringe' face.
+When specified, FACE is automatically merged with the `fringe' face.
 
 *** New function `fringe-bitmaps-at-pos' returns the current fringe
 bitmaps in the display line at a given buffer position.
@@ -3023,6 +3074,7 @@
 `format' are now documented.  Some flags that were accepted but not
 implemented (such as "*") are no longer accepted.
 
++++
 ** New function `macroexpand-all' expands all macros in a form.
 It is similar to the Common-Lisp function of the same name.
 One difference is that it guarantees to return the original argument
@@ -3049,6 +3101,7 @@
 string.  The old behavior is available if you call
 `insert-for-yank-1' instead.
 
++++
 ** New function `get-char-property-and-overlay' accepts the same
 arguments as `get-char-property' and returns a cons whose car is the
 return value of `get-char-property' called with those arguments and
@@ -3591,7 +3644,7 @@
 ** The new variable `read-file-name-function' can be used by lisp code
 to override the internal read-file-name function.
 
-
++++
 ** The new variable `read-file-name-completion-ignore-case' specifies
 whether completion ignores case when reading a file name with the
 `read-file-name' function.
@@ -3843,6 +3896,7 @@
 specification language, which can be used to do this test for faces
 defined with defface.
 
+---
 ** The function face-differs-from-default-p now truly checks whether the
 given face displays differently from the default face or not (previously
 it did only a very cursory check).
@@ -3856,6 +3910,7 @@
 ** New functions face-attribute-relative-p and merge-face-attribute
 help with handling relative face attributes.
 
++++
 ** The priority of faces in an :inherit attribute face-list is reversed.
 If a face contains an :inherit attribute with a list of faces, earlier
 faces in the list override later faces in the list; in previous releases
@@ -4374,6 +4429,7 @@
 *** The TCL package tcl-mode.el was replaced by tcl.el.
 This was actually done in Emacs-21.1, and was not documented.
 
++++
 *** The new package button.el implements simple and fast `clickable buttons'
 in emacs buffers.  `buttons' are much lighter-weight than the `widgets'
 implemented by widget.el, and can be used by lisp code that doesn't
--- a/leim/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/leim/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,7 +1,12 @@
-2005-03-18  handa  <handa@m17n.org>
+2005-03-26  Kenichi Handa  <handa@m17n.org>
+
+	* quail/latin-ltx.el ("TeX"): Enable quail-completion by typing
+	TAB.
+
+2005-03-18  Kenichi Handa  <handa@m17n.org>
 
 	* quail/thai.el (quail-thai-update-translation): Delete it.
-	(thai-generate-quail-map): Generate is simple map.
+	(thai-generate-quail-map): Generate a simpler map.
 	("thai-kesmanee"): Don't use quail-thai-update-translation.
 	(thai-generate-quail-map): Likewise.
 
--- a/leim/quail/latin-ltx.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/leim/quail/latin-ltx.el	Sun Mar 27 17:29:43 2005 +0000
@@ -39,7 +39,8 @@
  \\'a -> á  \\`{a} -> à
  \\pi -> π  \\int -> ∫  ^1 -> ¹"
 
- nil t t nil nil nil nil nil nil nil t)
+ '(("\t" . quail-completion))
+ t t nil nil nil nil nil nil nil t)
 
 (quail-define-rules
  ("!`" ?¡)
--- a/lisp/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,249 @@
+2005-03-26  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* term.el (term-move-columns): Fix face after extending a line.
+	(term-insert-spaces): Likewise.
+	(term-reset-terminal): Fix off by one error.
+
+2005-03-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* international/mule.el (auto-coding-alist): Add .xpi files.
+
+	* files.el (auto-mode-alist): Add .xpi files.
+
+2005-03-26  Jure Cuhalev  <gandalf@owca.info>  (tiny change)
+
+	* textmodes/ispell.el (ispell-dictionary-alist-6): Add slovenian.
+
+2005-03-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* term/bobcat.el: Don't use keyswap.el, since it is now obsolete.
+
+2005-03-26  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* calendar/cal-menu.el (top level): Delete local C-down-mouse-3
+	binding.  Suggested by Stephan Stahl <stahl@eos.franken.de>.
+
+	* calendar/cal-move.el (calendar-beginning-of-year): Move the
+	cursor to Jan 1 when needed.
+	(calendar-end-of-year): Fix -/+ typo.
+	Reported by Chong Yidong <cyd@stupidchicken.com>.
+
+2005-03-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/flymake.el (flymake-mode): Add autoload cookie.
+
+	* emacs-lisp/debug.el (debugger-record-expression): Add a missing
+	format to `message'.  Inspired by Deepak Goel <deego@gnufans.org>.
+
+2005-03-25  Richard M. Stallman  <rms@gnu.org>
+
+	* filesets.el (filesets-init): Add autoload.
+
+	* mail/mailalias.el (mail-directory): Doc fix.
+
+2005-03-25  Frederik Fouvry  <fouvry@CoLi.Uni-SB.DE>
+
+	* mail/mailalias.el (mail-directory-process): Do nothing if
+	mail-directory-process is an atom.
+	(mail-get-names): Ignore mail-directory-names if it is an atom.
+	(mail-directory-process defvar): Doc fix.
+	(mail-names): Doc fix.
+
+2005-03-25  Johan Bockg,Ae(Brd  <bojohan+mail@dd.chalmers.se>  (tiny change)
+
+	* textmodes/flyspell.el (mail-mode-flyspell-verify): Fix regexp syntax.
+
+2005-03-26  Kenichi Handa  <handa@m17n.org>
+
+	* international/mule-util.el (detect-coding-with-priority):
+	Call update-coding-systems-internal before detect-coding-region.
+
+2005-03-26  Nick Roberts  <nickrob@snap.net.nz>
+
+	* progmodes/gdb-ui.el (gdb-breakpoints-mode-map)
+	(gdb-frames-mode-map): Add follow-link property.
+
+2005-03-25  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calcalg2.el (calc-solve-for): Use "Variable(s)" to prompt
+	for variables.
+
+2005-03-25  Juri Linkov  <juri@jurta.org>
+
+	* image-mode.el: Optimize image filename extension regexps in
+	autoload cookies.  Associate .x[bp]m with `image-mode-maybe'
+	in `auto-mode-alist'.
+	(image-mode): Add `image-toggle-display-text' to local hook
+	`change-major-mode-hook'.  Display the image as an image by
+	default.  Set `cursor-type' and `truncate-lines' if the image
+	is already displayed.  Take into account the current mode (image
+	or text) in message.
+	(image-minor-mode): New minor mode.
+	(image-mode-maybe, image-toggle-display-text): New functions.
+	(image-toggle-display): Use called-interactively-p.
+	Let-bind `inhibit-read-only' to t.
+
+	* image-mode.el (image-minor-mode): Set `cursor-type' and
+	`truncate-lines' if the image is already displayed.  Add turning
+	image-minor-mode off to `change-major-mode-hook'.  Add message.
+	Call `image-toggle-display-text' after turning image-minor-mode off.
+
+2005-03-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* international/mule-cmds.el (set-locale-environment): For Mac OS X's
+	Terminal.app, use utf-8.
+	(set-display-table-and-terminal-coding-system): Add coding-system arg.
+	(set-locale-environment): Use it.
+
+	* term/xterm.el: Undo last change, better done in mule-cmds.el.
+
+	* emacs-lisp/rx.el (rx-constituents): Add symbol-start and symbol-end.
+
+	* progmodes/python.el (python-close-block-statement-p)
+	(python-outdent-p, python-current-defun): Use symbol-end.
+
+2005-03-25  Karl Chen  <quarl@cs.berkeley.edu>  (tiny change)
+
+	* files.el (save-some-buffers): Doc fix.
+
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* complete.el, thumbs.el: Replace `legal' with `valid'.
+	* calendar/calendar.el: Replace `legal' with `valid'.
+	* emacs-lisp/advice.el: Replace `legal' with `valid'.
+	* mail/supercite.el: Replace `legal' with `valid'.
+	* progmodes/cperl-mode.el, progmodes/idlw-shell.el,
+	progmodes/idlwave.el, progmodes/vhdl-mode.el: Replace `legal' with
+	`valid'.
+	* textmodes/reftex-vars.el, textmodes/reftex.el: Replace `legal'
+	with `valid'.
+
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* calc/calc-forms.el, calc/calc-sel: Replace `illegal' with `invalid'.
+	* midnight.el, vc-cvs.el: Replace `illegal' with `invalid'.
+	* emacs-lisp/cl-macs.el: Replace `illegal' with `invalid'.
+	* emulation/vip.el: Replace `illegal' with `invalid'.
+	* eshell/esh-io.el, eshell/esh-var.el: Replace `illegal' with `invalid'.
+	* mail/supercite.el: Replace `illegal' with `invalid'.
+	* progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
+	progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-iso.el,
+	progmodes/ebnf-yac.el, progmodes/ebnf2ps.el, progmodes/idlwave.el,
+	progmodes/sh-script.el, progmodes/xscheme.el: Replace `illegal' with
+	`invalid'.
+	* textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el,
+	textmodes/reftex-index.el, textmodes/reftex-parse.el,
+	textmodes/reftex-ref.el, textmodes/reftex-vars.el,
+	textmodes/reftex.el, textmodes/org.el: Replace `illegal' with `invalid'.
+
+2005-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/flymake.el (flymake-get-file-name-mode-and-masks)
+	(flymake-find-buildfile, flymake-find-possible-master-files)
+	(flymake-check-include, flymake-parse-line): Replace loops over the
+	length of lists, by loops over lists, to remove silly O(n,A2(B) behavior.
+
+	* progmodes/flymake.el (flymake-ensure-ends-with-slash): Remove.
+	Substitute file-name-as-directory in the rest of the file.
+	(flymake-get-common-file-prefix): Rewrite, using compare-strings.
+	(flymake-replace-region): Remove unused arg `buffer'.
+	(flymake-check-patch-master-file-buffer): Update calls to it.
+	(flymake-add-err-info): Remove unused var `count'.
+	(flymake-mode): Use define-minor-mode.
+
+	* progmodes/flymake.el: Use with-current-buffer.
+	(flymake-float-time, flymake-get-temp-dir, flymake-line-end-position)
+	flymake-replace-regexp-in-string, flymake-line-beginning-position)
+	(flymake-popup-menu, flymake-current-row, flymake-selected-frame):
+	Avoid testing for `xemacs'.
+	(flymake-nop): Move.
+	(flymake-region-has-flymake-overlays): Return the computed value.
+	(flymake-reformat-err-line-patterns-from-compile-el): Use dolist.
+	Remove unused var `endline'.
+	(flymake-get-line-count): Remove unused function.
+	(flymake-display-err-menu-for-current-line): Unused var move-mouse-pos.
+
+	* emulation/vi.el:
+	* generic.el:
+	* hilit-chg.el (global-highlight-changes):
+	* hi-lock.el (hi-lock-mode):
+	* follow.el: find-file-hooks -> find-file-hook.
+
+	* comint.el (comint-insert-input): Obey mouse-yank-at-point.
+
+2005-03-24  Juri Linkov  <juri@jurta.org>
+
+	* dired.el (dired-mode-map): Add menu item "Compare directories"
+	for dired-compare-directories.
+
+	* dired-aux.el (dired-compare-directories): Add autoload cookie.
+	Doc fix.  Replace `read-file-name' with `read-directory-name'.
+
+2005-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* term/xterm.el: If running in Terminal.app set coding-system to utf-8.
+
+2005-03-24  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-embed.el (calc-embedded-mode-change):  Save all
+	relevant mode settings in calc-embedded-original-modes when modes
+	are permanently changed.
+
+2005-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* autoinsert.el: find-file-hooks -> find-file-hook.
+
+2005-03-24  Lute Kamstra  <lute@gnu.org>
+
+	* generic.el (generic-font-lock-defaults): Make it obsolete.
+	(generic-font-lock-keywords): New variable to replace
+	generic-font-lock-defaults.
+	(generic-mode-set-font-lock): Delete it.
+	(generic-mode-internal): Don't call generic-mode-set-font-lock.
+	(generic-bracket-support): Add docstring.
+
+	* generic-x.el: Rename generic-font-lock-defaults to
+	generic-font-lock-keywords throughout.
+	(mailagent-rules-setup-function): Delete it.
+	(mailagent-rules-generic-mode): Use anonymous function instead.
+	(show-tabs-generic-mode-font-lock-defaults-1)
+	(show-tabs-generic-mode-font-lock-defaults-2): Make them constants.
+	Quote faces.
+	(show-tabs-tab-face, show-tabs-space-face): Specify background,
+	not foreground.
+
+	* emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression):
+	Recognize define-generic-mode.
+
+2005-03-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* icomplete.el (icomplete-simple-completing-p): Don't turn on icomplete
+	if there's no completion table.
+
+2005-03-23  Miles Bader  <miles@gnu.org>
+
+	* progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
+	Remove tty-specific variants, as they're no longer needed.
+
+2005-03-23  Lute Kamstra  <lute@gnu.org>
+
+	* generic-x.el: Code cleanup: make args constant whenever possible.
+	(installshield-statement-keyword-list)
+	(installshield-system-functions-list)
+	(installshield-system-variables-list, installshield-types-list)
+	(installshield-funarg-constants-list): Make them constants.
+
+	* generic.el (generic-make-keywords-list): Add autoload cookie.
+
+	* calendar/time-date.el: Add comment on time value formats.
+	Don't require parse-time.
+	(with-decoded-time-value): New macro.
+	(encode-time-value): New function.
+	(time-to-seconds, time-less-p, time-subtract, time-add): Use them.
+	(days-to-time): Return a valid time value when arg is huge.
+	(time-since): Use time-subtract.
+	(time-to-number-of-days): Use time-to-seconds.
+
 2005-03-23  David Ponce  <david@dponce.com>
 
 	* recentf.el: (recentf-keep): New option.
@@ -9,8 +255,8 @@
 	(recentf-include-p): More robust.
 	(recentf-keep-p): New function.
 	(recentf-remove-if-non-kept): Rename from
-	`recentf-remove-if-non-readable'. Use `recentf-keep-p'. All
-	callers updated.
+	`recentf-remove-if-non-readable'. Use `recentf-keep-p'.
+	All callers updated.
 	(recentf-menu-items-for-commands): Fix help string.
 	(recentf-track-closed-file): Update. Doc fix.
 	(recentf-cleanup): Update. Count removed files. Doc fix.
--- a/lisp/autoinsert.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/autoinsert.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; autoinsert.el --- automatic mode-dependent insertion of text into new files
 
-;; Copyright (C) 1985, 86, 87, 94, 95, 98, 2000, 03 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1994, 1995, 1998, 2000, 2003, 2005
+;;           Free Software Foundation, Inc.
 
 ;; Author: Charlie Martin <crm@cs.duke.edu>
 ;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org>
@@ -33,7 +34,7 @@
 ;;  auto-mode-alist.
 ;;
 ;;  To use:
-;;     (add-hook 'find-file-hooks 'auto-insert)
+;;     (add-hook 'find-file-hook 'auto-insert)
 ;;     setq auto-insert-directory to an appropriate slash-terminated value
 ;;
 ;;  You can also customize the variable `auto-insert-mode' to load the
@@ -67,7 +68,7 @@
 `auto-insert-alist'.  When the insertion is marked as unmodified, you can
 save it with  \\[write-file] RET.
 This variable is used when the function `auto-insert' is called, e.g.
-when you do (add-hook 'find-file-hooks 'auto-insert).
+when you do (add-hook 'find-file-hook 'auto-insert).
 With \\[auto-insert], this is always treated as if it were t."
   :type '(choice (const :tag "Insert if possible" t)
                  (const :tag "Do nothing" nil)
@@ -326,10 +327,10 @@
 insert a template for the file depending on the mode of the buffer."
   :global t :group 'auto-insert
   (if auto-insert-mode
-      (add-hook 'find-file-hooks 'auto-insert)
-    (remove-hook 'find-file-hooks 'auto-insert)))
+      (add-hook 'find-file-hook 'auto-insert)
+    (remove-hook 'find-file-hook 'auto-insert)))
 
 (provide 'autoinsert)
 
-;;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909
+;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909
 ;;; autoinsert.el ends here
--- a/lisp/calc/calc-embed.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calc/calc-embed.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1257,26 +1257,8 @@
 		       calc-embedded-close-mode))))
 	      (setq vars (cdr vars)
 		    values (cdr values))))))
-    (when (and vars calc-embedded-original-modes (eq calc-mode-save-mode 'save))
-      (cond ((equal vars '(the-language))
-             (setcar calc-embedded-original-modes
-                     (cons calc-language calc-language-option)))
-            ((equal vars '(the-display-just))
-             (let* ((modes (cdr calc-embedded-original-modes))
-                    (just (assq 'calc-display-just modes))
-                    (origin (assq 'calc-display-origin modes)))
-               (if just
-                   (setcdr just calc-display-just))
-               (if origin
-                   (setcdr origin calc-display-origin))))
-            (t
-             (let ((modes (cdr calc-embedded-original-modes)))
-               (while vars
-                 (let* ((var (car vars))
-                        (cell (assq var modes)))
-                   (if cell
-                       (setcdr cell (symbol-value var))))
-                 (setq vars (cdr vars)))))))))
+    (when (and vars (eq calc-mode-save-mode 'save))
+      (calc-embedded-save-original-modes))))
 
 (defun calc-embedded-var-change (var &optional buf)
   (if (symbolp var)
--- a/lisp/calc/calc-forms.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calc/calc-forms.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; calc-forms.el --- data format conversion functions for Calc
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004, 2005
+;; Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -1434,7 +1435,7 @@
 (defun calcFunc-badd (a b)
   (if (eq (car-safe b) 'date)
       (if (eq (car-safe a) 'date)
-	  (math-reject-arg nil "*Illegal combination in date arithmetic")
+	  (math-reject-arg nil "*Invalid combination in date arithmetic")
 	(calcFunc-badd b a))
     (if (eq (car-safe a) 'date)
 	(if (Math-realp b)
@@ -1452,7 +1453,7 @@
 		(if hours
 		    (setq b (math-div b (cdr hours))))
 		(calcFunc-badd a b))
-	    (math-reject-arg nil "*Illegal combination in date arithmetic")))
+	    (math-reject-arg nil "*Invalid combination in date arithmetic")))
       (math-reject-arg a 'datep))))
 
 (defun calcFunc-holiday (a)
--- a/lisp/calc/calc-sel.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calc/calc-sel.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; calc-sel.el --- data selection functions for Calc
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005
+;; Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -490,7 +491,7 @@
 	       (mapcar 'calc-replace-sub-formula-rec (cdr expr))))))
 
 (defun calc-sel-error ()
-  (error "Illegal operation on sub-formulas"))
+  (error "Invalid operation on sub-formulas"))
 
 (defun calc-replace-selections (n vals m)
   (if (calc-top-selected n m)
--- a/lisp/calc/calcalg2.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calc/calcalg2.el	Sun Mar 27 17:29:43 2005 +0000
@@ -149,7 +149,7 @@
 					   (and step (list step)))))))
 
 (defun calc-solve-for (var)
-  (interactive "sVariable to solve for: ")
+  (interactive "sVariable(s) to solve for: ")
   (calc-slow-wrapper
    (let ((func (if (calc-is-inverse)
 		   (if (calc-is-hyperbolic) 'calcFunc-ffinv 'calcFunc-finv)
--- a/lisp/calendar/cal-menu.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calendar/cal-menu.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; cal-menu.el --- calendar functions for menu bar and popup menu support
 
-;; Copyright (C) 1994, 1995, 2001, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
 ;;	Lara Rios <lrios@coewl.cen.uiuc.edu>
@@ -52,7 +52,6 @@
 
 (defvar calendar-mouse-3-map (make-sparse-keymap "Calendar"))
 (define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map)
-(define-key calendar-mode-map [C-down-mouse-3] calendar-mouse-3-map)
 
 (define-key calendar-mode-map [menu-bar moon]
   (cons "Moon" (make-sparse-keymap "Moon")))
--- a/lisp/calendar/cal-move.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calendar/cal-move.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,8 +1,9 @@
 ;;; cal-move.el --- calendar functions for movement in the calendar
 
-;; Copyright (C) 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2005  Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: calendar
 
@@ -269,7 +270,8 @@
       (if (and (= arg 1)
                (calendar-date-is-visible-p jan-first))
           (calendar-cursor-to-visible-date jan-first)
-        (calendar-other-month 1 (- year (1- arg))))))
+        (calendar-other-month 1 (- year (1- arg)))
+        (calendar-cursor-to-visible-date (list 1 1 displayed-year)))))
   (run-hooks 'calendar-move-hook))
 
 (defun calendar-end-of-year (arg)
@@ -287,7 +289,7 @@
       (if (and (= arg 1)
                (calendar-date-is-visible-p dec-31))
           (calendar-cursor-to-visible-date dec-31)
-        (calendar-other-month 12 (- year (1- arg)))
+        (calendar-other-month 12 (+ year (1- arg)))
         (calendar-cursor-to-visible-date (list 12 31 displayed-year)))))
   (run-hooks 'calendar-move-hook))
 
--- a/lisp/calendar/calendar.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calendar/calendar.el	Sun Mar 27 17:29:43 2005 +0000
@@ -2884,20 +2884,20 @@
   (redraw-calendar))
 
 (defun calendar-date-is-visible-p (date)
-  "Return t if DATE is legal and is visible in the calendar window."
+  "Return t if DATE is valid and is visible in the calendar window."
   (let ((gap (calendar-interval
               displayed-month displayed-year
               (extract-calendar-month date) (extract-calendar-year date))))
     (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap))))
 
 (defun calendar-date-is-legal-p (date)
-  "Return t if DATE is a legal date."
+  "Return t if DATE is a valid date."
   (let ((month (extract-calendar-month date))
         (day (extract-calendar-day date))
         (year (extract-calendar-year date)))
     (and (<= 1 month) (<= month 12)
          (<= 1 day) (<= day (calendar-last-day-of-month month year))
-         ;; BC dates left as non-legal, to suppress errors from
+         ;; BC dates left as non-valid, to suppress errors from
          ;; complex holiday algorithms not suitable for years BC.
          ;; Note there are side effects on calendar navigation.
          (<= 1 year))))
--- a/lisp/calendar/time-date.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/calendar/time-date.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 ;;; time-date.el --- date and time handling functions
-;; Copyright (C) 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;	Masanobu Umeda <umerin@mse.kyutech.ac.jp>
@@ -24,9 +24,71 @@
 
 ;;; Commentary:
 
+;; Time values come in three formats.  The oldest format is a cons
+;; cell of the form (HIGH . LOW).  This format is obsolete, but still
+;; supported.  The two other formats are the lists (HIGH LOW) and
+;; (HIGH LOW MICRO).  The first two formats specify HIGH * 2^16 + LOW
+;; seconds; the third format specifies HIGH * 2^16 + LOW + MICRO /
+;; 1000000 seconds.  We should have 0 <= MICRO < 1000000 and 0 <= LOW
+;; < 2^16.  If the time value represents a point in time, then HIGH is
+;; nonnegative.  If the time value is a time difference, then HIGH can
+;; be negative as well.  The macro `with-decoded-time-value' and the
+;; function `encode-time-value' make it easier to deal with these
+;; three formats.  See `time-subtract' for an example of how to use
+;; them.
+
 ;;; Code:
 
-(require 'parse-time)
+(defmacro with-decoded-time-value (varlist &rest body)
+  "Decode a time value and bind it according to VARLIST, then eval BODY.
+
+The value of the last form in BODY is returned.
+
+Each element of the list VARLIST is a list of the form
+\(HIGH-SYMBOL LOW-SYMBOL MICRO-SYMBOL [TYPE-SYMBOL] TIME-VALUE).
+The time value TIME-VALUE is decoded and the result it bound to
+the symbols HIGH-SYMBOL, LOW-SYMBOL and MICRO-SYMBOL.
+
+The optional TYPE-SYMBOL is bound to the type of the time value.
+Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH
+LOW), and type 3 is the list (HIGH LOW MICRO)."
+  (declare (indent 1)
+	   (debug ((&rest (symbolp symbolp symbolp &or [symbolp form] form))
+		   body)))
+  (if varlist
+      (let* ((elt (pop varlist))
+	     (high (pop elt))
+	     (low (pop elt))
+	     (micro (pop elt))
+	     (type (unless (eq (length elt) 1)
+		     (pop elt)))
+	     (time-value (car elt))
+	     (gensym (make-symbol "time")))
+	`(let* ,(append `((,gensym ,time-value)
+			  (,high (pop ,gensym))
+			  ,low ,micro)
+			(when type `(,type)))
+	   (if (consp ,gensym)
+	       (progn
+		 (setq ,low (pop ,gensym))
+		 (if ,gensym
+		     ,(append `(setq ,micro (car ,gensym))
+			      (when type `(,type 2)))
+		   ,(append `(setq ,micro 0)
+			    (when type `(,type 1)))))
+	     ,(append `(setq ,low ,gensym ,micro 0)
+		      (when type `(,type 0))))
+	   (with-decoded-time-value ,varlist ,@body)))
+    `(progn ,@body)))
+
+(defun encode-time-value (high low micro type)
+  "Encode HIGH, LOW, and MICRO into a time value of type TYPE.
+Type 0 is the cons cell (HIGH . LOW), type 1 is the list (HIGH LOW),
+and type 3 is the list (HIGH LOW MICRO)."
+  (cond
+   ((eq type 0) (cons high low))
+   ((eq type 1) (list high low))
+   ((eq type 2) (list high low micro))))
 
 (autoload 'timezone-make-date-arpa-standard "timezone")
 
@@ -49,33 +111,37 @@
 (defun time-to-seconds (time)
   "Convert time value TIME to a floating point number.
 You can use `float-time' instead."
-  (+ (* (car time) 65536.0)
-     (cadr time)
-     (/ (or (nth 2 time) 0) 1000000.0)))
+  (with-decoded-time-value ((high low micro time))
+    (+ (* 1.0 high #x10000)
+       low
+       (/ micro 1000000.0))))
 
 ;;;###autoload
 (defun seconds-to-time (seconds)
   "Convert SECONDS (a floating point number) to a time value."
-  (list (floor seconds 65536)
-	(floor (mod seconds 65536))
+  (list (floor seconds #x10000)
+	(floor (mod seconds #x10000))
 	(floor (* (- seconds (ffloor seconds)) 1000000))))
 
 ;;;###autoload
 (defun time-less-p (t1 t2)
   "Say whether time value T1 is less than time value T2."
-  (or (< (car t1) (car t2))
-      (and (= (car t1) (car t2))
-	   (< (nth 1 t1) (nth 1 t2)))))
+  (with-decoded-time-value ((high1 low1 micro1 t1)
+			    (high2 low2 micro2 t2))
+    (or (< high1 high2)
+	(and (= high1 high2)
+	     (or (< low1 low2)
+		 (and (= low1 low2)
+		      (< micro1 micro2)))))))
 
 ;;;###autoload
 (defun days-to-time (days)
   "Convert DAYS into a time value."
   (let* ((seconds (* 1.0 days 60 60 24))
-	 (rest (expt 2 16))
-	 (ms (condition-case nil (floor (/ seconds rest))
-	       (range-error (expt 2 16)))))
-    (list ms (condition-case nil (round (- seconds (* ms rest)))
-	       (range-error (expt 2 16))))))
+	 (high (condition-case nil (floor (/ seconds #x10000))
+		 (range-error most-positive-fixnum))))
+    (list high (condition-case nil (floor (- seconds (* 1.0 high #x10000)))
+		 (range-error #xffff)))))
 
 ;;;###autoload
 (defun time-since (time)
@@ -84,11 +150,7 @@
   (when (stringp time)
     ;; Convert date strings to internal time.
     (setq time (date-to-time time)))
-  (let* ((current (current-time))
-	 (rest (when (< (nth 1 current) (nth 1 time))
-		 (expt 2 16))))
-    (list (- (+ (car current) (if rest -1 0)) (car time))
-	  (- (+ (or rest 0) (nth 1 current)) (nth 1 time)))))
+  (time-subtract (current-time) time))
 
 ;;;###autoload
 (defalias 'subtract-time 'time-subtract)
@@ -97,37 +159,36 @@
 (defun time-subtract (t1 t2)
   "Subtract two time values.
 Return the difference in the format of a time value."
-  (let ((borrow (< (cadr t1) (cadr t2))))
-    (list (- (car t1) (car t2) (if borrow 1 0))
-	  (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
+  (with-decoded-time-value ((high low micro type t1)
+			    (high2 low2 micro2 type2 t2))
+    (setq high (- high high2)
+	  low (- low low2)
+	  micro (- micro micro2)
+	  type (max type type2))
+    (when (< micro 0)
+      (setq low (1- low)
+	    micro (+ micro 1000000)))
+    (when (< low 0)
+      (setq high (1- high)
+	    low (+ low #x10000)))
+    (encode-time-value high low micro type)))
 
 ;;;###autoload
 (defun time-add (t1 t2)
   "Add two time values.  One should represent a time difference."
-  (let ((high (car t1))
-	(low (if (consp (cdr t1)) (nth 1 t1) (cdr t1)))
-	(micro (if (numberp (car-safe (cdr-safe (cdr t1))))
-		   (nth 2 t1)
-		 0))
-	(high2 (car t2))
-	(low2 (if (consp (cdr t2)) (nth 1 t2) (cdr t2)))
-	(micro2 (if (numberp (car-safe (cdr-safe (cdr t2))))
-		    (nth 2 t2)
-		  0)))
-    ;; Add
-    (setq micro (+ micro micro2))
-    (setq low (+ low low2))
-    (setq high (+ high high2))
-
-    ;; Normalize
-    ;; `/' rounds towards zero while `mod' returns a positive number,
-    ;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))).
-    (setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0)))
-    (setq micro (mod micro 1000000))
-    (setq high (+ high (/ low 65536) (if (< low 0) -1 0)))
-    (setq low (logand low 65535))
-
-    (list high low micro)))
+  (with-decoded-time-value ((high low micro type t1)
+			    (high2 low2 micro2 type2 t2))
+    (setq high (+ high high2)
+	  low (+ low low2)
+	  micro (+ micro micro2)
+	  type (max type type2))
+    (when (>= micro 1000000)
+      (setq low (1+ low)
+	    micro (- micro 1000000)))
+    (when (>= low #x10000)
+      (setq high (1+ high)
+	    low (- low #x10000)))
+    (encode-time-value high low micro type)))
 
 ;;;###autoload
 (defun date-to-day (date)
@@ -180,7 +241,7 @@
 (defun time-to-number-of-days (time)
   "Return the number of days represented by TIME.
 The number of days will be returned as a floating point number."
-  (/ (+ (* 1.0 65536 (car time)) (cadr time)) (* 60 60 24)))
+  (/ (time-to-seconds time) (* 60 60 24)))
 
 ;;;###autoload
 (defun safe-date-to-time (date)
--- a/lisp/comint.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/comint.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,7 +1,7 @@
 ;;; comint.el --- general command interpreter in a window stuff
 
 ;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-;;   2000, 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <shivers@cs.cmu.edu>
 ;;	Simon Marshall <simon@gnu.org>
@@ -791,14 +791,16 @@
   ;; This doesn't use "e" because it is supposed to work
   ;; for events without parameters.
   (interactive (list last-input-event))
-  (if event (mouse-set-point event))
   (let ((pos (point)))
-    (if (not (eq (get-char-property pos 'field) 'input))
+    (if event (mouse-set-point event))
+    (if (not (eq (get-char-property (point) 'field) 'input))
 	;; No input at POS, fall back to the global definition.
 	(let* ((keys (this-command-keys))
 	       (last-key (and (vectorp keys) (aref keys (1- (length keys)))))
 	       (fun (and last-key (lookup-key global-map (vector last-key)))))
+	  (goto-char pos)
 	  (and fun (call-interactively fun)))
+      (setq pos (point))
       ;; There's previous input at POS, insert it at the end of the buffer.
       (goto-char (point-max))
       ;; First delete any old unsent input at the end
--- a/lisp/complete.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/complete.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; complete.el --- partial completion mechanism plus other goodies
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003
+;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003, 2005
 ;;  Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
@@ -118,7 +118,7 @@
 If `]' is in this string, it must come first.
 If `^' is in this string, it must not come first.
 If `-' is in this string, it must come first or right after `]'.
-In other words, if S is this string, then `[S]' must be a legal Emacs regular
+In other words, if S is this string, then `[S]' must be a valid Emacs regular
 expression (not containing character ranges like `a-z')."
   :type 'string
   :group 'partial-completion)
--- a/lisp/dired-aux.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/dired-aux.el	Sun Mar 27 17:29:43 2005 +0000
@@ -91,13 +91,14 @@
       nil))
   (diff-backup (dired-get-filename) switches))
 
+;;;###autoload
 (defun dired-compare-directories (dir2 predicate)
   "Mark files with different file attributes in two dired buffers.
 Compare file attributes of files in the current directory
 with file attributes in directory DIR2 using PREDICATE on pairs of files
 with the same name.  Mark files for which PREDICATE returns non-nil.
 Mark files with different names if PREDICATE is nil (or interactively
-when the user enters empty input at the predicate prompt).
+with empty input at the predicate prompt).
 
 PREDICATE is a Lisp expression that can refer to the following variables:
 
@@ -117,9 +118,10 @@
     (not (and (= (nth 2 fa1) (nth 2 fa2))   - mark files with different UID
               (= (nth 3 fa1) (nth 3 fa2))))   and GID."
   (interactive
-   (list (read-file-name (format "Compare %s with: "
-				 (dired-current-directory))
-			 (dired-dwim-target-directory))
+   (list (read-directory-name (format "Compare %s with: "
+				      (dired-current-directory))
+			      (dired-dwim-target-directory)
+			      (dired-dwim-target-directory))
          (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil")))
   (let* ((dir1 (dired-current-directory))
          (file-alist1 (dired-files-attributes dir1))
--- a/lisp/dired.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/dired.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1251,6 +1251,9 @@
     (define-key map [menu-bar immediate dashes]
       '("--"))
 
+    (define-key map [menu-bar immediate compare-directories]
+      '(menu-item "Compare directories" dired-compare-directories
+		  :help "Mark files with different attributes in two dired buffers"))
     (define-key map [menu-bar immediate backup-diff]
       '(menu-item "Compare with Backup" dired-backup-diff
 		  :help "Diff file at cursor with its latest backup"))
--- a/lisp/emacs-lisp/advice.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emacs-lisp/advice.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; advice.el --- an overloading mechanism for Emacs Lisp functions
 
-;; Copyright (C) 1993,1994,2000,01,2004  Free Software Foundation, Inc.
+;; Copyright (C) 1993,1994,2000,01,2004,2005  Free Software Foundation, Inc.
 
 ;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
 ;; Maintainer: FSF
@@ -2173,7 +2173,7 @@
 ;; ============================================
 ;; The advice-info of an advised function contains its `origname' which is
 ;; a symbol that is fbound to the original definition available at the first
-;; proper activation of the function after a legal re/definition.  If the
+;; proper activation of the function after a valid re/definition.  If the
 ;; original was defined via fcell indirection then `origname' will be defined
 ;; just so.  Hence, to get hold of the actual original definition of a function
 ;; we need to use `ad-real-orig-definition'.
@@ -2238,7 +2238,7 @@
 	  ad-advice-classes))
 
 (defun ad-read-advice-class (function &optional prompt default)
-  "Read a legal advice class with completion from the minibuffer.
+  "Read a valid advice class with completion from the minibuffer.
 An optional PROMPT will be used to prompt for the class.  DEFAULT will
 be returned on empty input (defaults to the first non-empty advice
 class of FUNCTION)."
@@ -2312,7 +2312,7 @@
 (defun ad-find-some-advice (function class name)
   "Find the first of FUNCTION's advices in CLASS matching NAME.
 NAME can be a symbol or a regular expression matching part of an advice name.
-If CLASS is `any' all legal advice classes will be checked."
+If CLASS is `any' all valid advice classes will be checked."
   (if (ad-is-advised function)
       (let (found-advice)
 	(ad-dolist (advice-class ad-advice-classes)
@@ -2332,7 +2332,7 @@
   "Set enable FLAG of FUNCTION's advices in CLASS matching NAME.
 If NAME is a string rather than a symbol then it's interpreted as a regular
 expression and all advices whose name contain a match for it will be
-affected.  If CLASS is `any' advices in all legal advice classes will be
+affected.  If CLASS is `any' advices in all valid advice classes will be
 considered.  The number of changed advices will be returned (or nil if
 FUNCTION was not advised)."
   (if (ad-is-advised function)
@@ -2369,7 +2369,7 @@
 
 (defun ad-enable-regexp-internal (regexp class flag)
   "Set enable FLAGs of all CLASS advices whose name contains a REGEXP match.
-If CLASS is `any' all legal advice classes are considered.  The number of
+If CLASS is `any' all valid advice classes are considered.  The number of
 affected advices will be returned."
   (let ((matched-advices 0))
     (ad-do-advised-functions (advised-function)
@@ -3755,7 +3755,7 @@
       (error nil))))
 
 
-;; Completion alist of legal `defadvice' flags
+;; Completion alist of valid `defadvice' flags
 (defvar ad-defadvice-flags
   '(("protect") ("disable") ("activate")
     ("compile") ("preactivate") ("freeze")))
--- a/lisp/emacs-lisp/cl-macs.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emacs-lisp/cl-macs.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*-
 
-;; Copyright (C) 1993, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Dave Gillespie <daveg@synaptics.com>
 ;; Version: 2.02
@@ -2219,7 +2219,7 @@
       (if type
 	  (progn
 	    (or (memq type '(vector list))
-		(error "Illegal :type specifier: %s" type))
+		(error "Invalid :type specifier: %s" type))
 	    (if named (setq tag name)))
 	(setq type 'vector named 'true)))
     (or named (setq descs (delq (assq 'cl-tag-slot descs) descs)))
--- a/lisp/emacs-lisp/debug.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emacs-lisp/debug.el	Sun Mar 27 17:29:43 2005 +0000
@@ -584,10 +584,9 @@
     (terpri))
 
   (with-current-buffer (get-buffer debugger-record-buffer)
-    (save-excursion
-      (forward-line -1)
-      (message
-       (buffer-substring (point) (progn (end-of-line) (point)))))))
+    (message "%s" 
+	     (buffer-substring (line-beginning-position 0)
+			       (line-end-position 0)))))
 
 (put 'debugger-mode 'mode-class 'special)
 
--- a/lisp/emacs-lisp/lisp-mode.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el	Sun Mar 27 17:29:43 2005 +0000
@@ -91,6 +91,7 @@
 			      '("defun" "defun*" "defsubst" "defmacro"
 				"defadvice" "define-skeleton"
 				"define-minor-mode" "define-derived-mode"
+				"define-generic-mode"
 				"define-compiler-macro" "define-modify-macro"
 				"defsetf" "define-setf-expander"
 				"define-method-combination"
--- a/lisp/emacs-lisp/rx.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emacs-lisp/rx.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; rx.el --- sexp notation for regular expressions
 
-;; Copyright (C) 2001, 03, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: FSF
@@ -169,6 +169,8 @@
     (eow		. word-end)	; SRE
     (word-boundary	. "\\b")
     (not-word-boundary	. "\\B")	; sregex
+    (symbol-start       . "\\_<")
+    (symbol-end         . "\\_>")
     (syntax		. (rx-syntax 1 1))
     (not-syntax		. (rx-not-syntax 1 1)) ; sregex
     (category		. (rx-category 1 1 rx-check-category))
@@ -969,5 +971,5 @@
 
 (provide 'rx)
 
-;;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b
+;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b
 ;;; rx.el ends here
--- a/lisp/emulation/vi.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emulation/vi.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,7 +1,7 @@
 ;;; vi.el --- major mode for emulating "vi" editor under GNU Emacs
 
-; This file is in the public domain because the authors distributed it
-; without a copyright notice before the US signed the Bern Convention.
+;; This file is in the public domain because the authors distributed it
+;; without a copyright notice before the US signed the Bern Convention.
 
 ;; This file is part of GNU Emacs.
 
@@ -11,32 +11,32 @@
 
 ;;; Commentary:
 
-; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring)
-; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu)
-; Last revision: 01/07/87 Wed (for GNU Emacs 18.33)
+;; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring)
+;; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu)
+;; Last revision: 01/07/87 Wed (for GNU Emacs 18.33)
 
-; INSTALLATION PROCEDURE:
-; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of
-;    the single ESC used in real "vi", so I can access other ESC prefixed emacs
-;    commands while I'm in "vi"), say, by putting the following line in your
-;    ".emacs" file:
-;    (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode
-; 2) If you wish you can define "find-file-hooks" to enter "vi" automatically
-;    after a file is loaded into the buffer. For example, I defined it as:
-;    (setq find-file-hooks (list
-;                            (function (lambda ()
-;                                (if (not (or (eq major-mode 'Info-mode)
-;	                                      (eq major-mode 'vi-mode)))
-;                                    (vi-mode))))))
-; 3) In your .emacs file you can define the command "vi-mode" to be "autoload"
-;    or you can execute the "load" command to load "vi" directly.
-; 4) Read the comments for command "vi-mode" before you start using it.
-;
-; COULD DO
-; 1). A general 'define-operator' function to replace current hack
-; 2). In operator handling, should allow other point moving Emacs commands
-;     (such as ESC <, ESC >) to be used as arguments.
-;
+;; INSTALLATION PROCEDURE:
+;; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of
+;;    the single ESC used in real "vi", so I can access other ESC prefixed emacs
+;;    commands while I'm in "vi"), say, by putting the following line in your
+;;    ".emacs" file:
+;;    (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode
+;; 2) If you wish you can define "find-file-hook" to enter "vi" automatically
+;;    after a file is loaded into the buffer. For example, I defined it as:
+;;    (setq find-file-hook (list
+;;                           (function (lambda ()
+;;                               (if (not (or (eq major-mode 'Info-mode)
+;; 	                                     (eq major-mode 'vi-mode)))
+;;                                   (vi-mode))))))
+;; 3) In your .emacs file you can define the command "vi-mode" to be "autoload"
+;;    or you can execute the "load" command to load "vi" directly.
+;; 4) Read the comments for command "vi-mode" before you start using it.
+
+;; COULD DO
+;; 1). A general 'define-operator' function to replace current hack
+;; 2). In operator handling, should allow other point moving Emacs commands
+;;     (such as ESC <, ESC >) to be used as arguments.
+
 ;;; Code:
 
 (defvar vi-mode-old-major-mode)
@@ -1487,5 +1487,5 @@
 
 (provide 'vi)
 
-;;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3
+;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3
 ;;; vi.el ends here
--- a/lisp/emulation/vip.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/emulation/vip.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; vip.el --- a VI Package for GNU Emacs
 
-;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998
+;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998, 2005
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Masahiko Sato <ms@sail.stanford.edu>
@@ -2253,7 +2253,7 @@
 	   (setq ex-token-type "end-mark")
 	   (setq ex-token "goto"))
 	  (t
-	   (error "illegal token")))))
+	   (error "invalid token")))))
 
 (defun vip-ex (&optional string)
   "ex commands within VIP."
@@ -2478,7 +2478,7 @@
 	  (setq ex-flag t)
 	  (forward-char 1)))
     (if (not (looking-at "[\n|]"))
-	(error "Illegal extra characters"))))
+	(error "Invalid extra characters"))))
 
 (defun vip-get-ex-count ()
   (setq ex-variant nil
@@ -2503,7 +2503,7 @@
 	  (setq ex-flag t)
 	  (forward-char 1)))
     (if (not (looking-at "[\n|]"))
-	(error "Illegal extra characters"))))
+	(error "Invalid extra characters"))))
 
 (defun vip-get-ex-file ()
   "get a file name and set ex-variant, ex-append and ex-offset if found"
--- a/lisp/eshell/esh-io.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/eshell/esh-io.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; esh-io.el --- I/O management
 
-;; Copyright (C) 1999, 2000 Free Software Foundation
+;; Copyright (C) 1999, 2000, 2005 Free Software Foundation
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -377,7 +377,7 @@
     target)
 
    (t
-    (error "Illegal redirection target: %s"
+    (error "Invalid redirection target: %s"
 	   (eshell-stringify target)))))
 
 (eval-when-compile
--- a/lisp/eshell/esh-var.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/eshell/esh-var.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; esh-var.el --- handling of variables
 
-;; Copyright (C) 1999, 2000 Free Software Foundation
+;; Copyright (C) 1999, 2000, 2005 Free Software Foundation
 
 ;; Author: John Wiegley <johnw@gnu.org>
 
@@ -568,7 +568,7 @@
 			(split-string value separator)))))
       (cond
        ((< (length refs) 0)
-	(error "Illegal array variable index: %s"
+	(error "Invalid array variable index: %s"
 	       (eshell-stringify refs)))
        ((= (length refs) 1)
 	(setq value (eshell-index-value value (car refs))))
--- a/lisp/files.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/files.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1777,8 +1777,8 @@
      ("\\.tar\\'" . tar-mode)
      ;; The list of archive file extensions should be in sync with
      ;; `auto-coding-alist' with `no-conversion' coding system.
-     ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . archive-mode)
-     ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . archive-mode)
+     ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode)
+     ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode)
      ("\\.sx[dmicw]\\'" . archive-mode)	; OpenOffice.org
      ;; Mailer puts message to be edited in
      ;; /tmp/Re.... or Message
@@ -3422,7 +3422,7 @@
   "Save some modified file-visiting buffers.  Asks user about each one.
 You can answer `y' to save, `n' not to save, `C-r' to look at the
 buffer in question with `view-buffer' before deciding or `d' to
-view the differences using `diff-buffer-to-file'.
+view the differences using `diff-buffer-with-file'.
 
 Optional argument (the prefix) non-nil means save all with no questions.
 Optional second argument PRED determines which buffers are considered:
--- a/lisp/filesets.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/filesets.el	Sun Mar 27 17:29:43 2005 +0000
@@ -2496,6 +2496,7 @@
 (defun filesets-exit ()
   (filesets-menu-cache-file-save-maybe))
 
+;;;###autoload
 (defun filesets-init ()
   "Filesets initialization.
 Set up hooks, load the cache file -- if existing -- and build the menu."
--- a/lisp/follow.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/follow.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; follow.el --- synchronize windows showing the same buffer
 
-;; Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1999, 2001, 2005
+;;           Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren <andersl@andersl.com>
 ;; Maintainer: Anders Lindgren <andersl@andersl.com>
@@ -708,7 +709,7 @@
 ;; This will start follow-mode whenever a new file is loaded, if
 ;; the variable `follow-auto' is non-nil.
 
-(add-hook 'find-file-hooks 'follow-find-file-hook t)
+(add-hook 'find-file-hook 'follow-find-file-hook t)
 
 (defun follow-find-file-hook ()
   "Find-file hook for Follow Mode.  See the variable `follow-auto'."
@@ -2347,5 +2348,5 @@
 ;; | save it".             -- Douglas Adams, "Last Chance to See"           |
 ;; \------------------------------------------------------------------------/
 
-;;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0
+;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0
 ;;; follow.el ends here
--- a/lisp/generic-x.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/generic-x.el	Sun Mar 27 17:29:43 2005 +0000
@@ -124,30 +124,30 @@
 
 (and generic-define-mswindows-modes
      (setq generic-extras-enable-list
-	   (append (list 'bat-generic-mode
-			 'ini-generic-mode
-			 'inf-generic-mode
-			 'rc-generic-mode
-			 'reg-generic-mode
-			 'rul-generic-mode
-			 'hosts-generic-mode
-			 'apache-conf-generic-mode
-			 'apache-log-generic-mode)
+	   (append '(bat-generic-mode
+		     ini-generic-mode
+		     inf-generic-mode
+		     rc-generic-mode
+		     reg-generic-mode
+		     rul-generic-mode
+		     hosts-generic-mode
+		     apache-conf-generic-mode
+		     apache-log-generic-mode)
 		   generic-extras-enable-list)))
 
 (and generic-define-unix-modes
      (setq generic-extras-enable-list
-	   (append (list 'apache-conf-generic-mode
-			 'apache-log-generic-mode
-			 'samba-generic-mode
-			 'hosts-generic-mode
-			 'fvwm-generic-mode
-			 'x-resource-generic-mode
-			 'alias-generic-mode
-			 'inetd-conf-generic-mode
-			 'etc-services-generic-mode
-			 'etc-passwd-generic-mode
-			 'etc-fstab-generic-mode)
+	   (append '(apache-conf-generic-mode
+		     apache-log-generic-mode
+		     samba-generic-mode
+		     hosts-generic-mode
+		     fvwm-generic-mode
+		     x-resource-generic-mode
+		     alias-generic-mode
+		     inetd-conf-generic-mode
+		     etc-services-generic-mode
+		     etc-passwd-generic-mode
+		     etc-fstab-generic-mode)
 		   generic-extras-enable-list)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -158,11 +158,11 @@
 (when (memq 'apache-conf-generic-mode generic-extras-enable-list)
 
 (define-generic-mode apache-conf-generic-mode
-  (list ?#)
+  '(?#)
   nil
-  '(("^\\s-*\\(<.*>\\)"       1 'font-lock-constant-face)
-    ("^\\s-*\\(\\sw+\\)\\s-"  1 'font-lock-variable-name-face))
-  (list "srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
+  '(("^\\s-*\\(<.*>\\)"      1 font-lock-constant-face)
+    ("^\\s-*\\(\\sw+\\)\\s-" 1 font-lock-variable-name-face))
+  '("srm\\.conf\\'" "httpd\\.conf\\'" "access\\.conf\\'")
   (list
    (function
     (lambda ()
@@ -181,7 +181,7 @@
   '(("^\\([-a-zA-z0-9.]+\\) - [-A-Za-z]+ \\(\\[.*\\]\\)"
      (1 font-lock-constant-face)
      (2 font-lock-variable-name-face)))
-  (list "access_log\\'")
+  '("access_log\\'")
   nil
   "Mode for Apache log files"))
 
@@ -189,14 +189,14 @@
 (when (memq 'samba-generic-mode generic-extras-enable-list)
 
 (define-generic-mode samba-generic-mode
-  (list ?\; ?#)
+  '(?\; ?#)
   nil
-  '(("^\\(\\[.*\\]\\)"   1 'font-lock-constant-face)
+  '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)
     ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)"
-     (1 'font-lock-variable-name-face)
-     (2 'font-lock-type-face)))
-  (list "smb\\.conf\\'")
-  (list 'generic-bracket-support)
+     (1 font-lock-variable-name-face)
+     (2 font-lock-type-face)))
+  '("smb\\.conf\\'")
+  '(generic-bracket-support)
   "Generic mode for Samba configuration files."))
 
 ;;; Fvwm
@@ -205,23 +205,22 @@
 (when (memq 'fvwm-generic-mode generic-extras-enable-list)
 
 (define-generic-mode fvwm-generic-mode
-  (list ?#)
-  (list
-   "AddToMenu"
-   "AddToFunc"
-   "ButtonStyle"
-   "EndFunction"
-   "EndPopup"
-   "Function"
-   "IconPath"
-   "Key"
-   "ModulePath"
-   "Mouse"
-   "PixmapPath"
-   "Popup"
-   "Style")
+  '(?#)
+  '("AddToMenu"
+    "AddToFunc"
+    "ButtonStyle"
+    "EndFunction"
+    "EndPopup"
+    "Function"
+    "IconPath"
+    "Key"
+    "ModulePath"
+    "Mouse"
+    "PixmapPath"
+    "Popup"
+    "Style")
   nil
-  (list "\\.fvwmrc\\'" "\\.fvwm2rc\\'")
+  '("\\.fvwmrc\\'" "\\.fvwm2rc\\'")
   nil
   "Generic mode for FVWM configuration files."))
 
@@ -231,10 +230,10 @@
 (when (memq 'x-resource-generic-mode generic-extras-enable-list)
 
 (define-generic-mode x-resource-generic-mode
-  (list ?!)
+  '(?!)
   nil
-  '(("^\\([^:\n]+:\\)" 1 'font-lock-variable-name-face))
-  (list "\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
+  '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face))
+  '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
   nil
   "Generic mode for X Resource configuration files."))
 
@@ -242,10 +241,10 @@
 (when (memq 'hosts-generic-mode generic-extras-enable-list)
 
 (define-generic-mode hosts-generic-mode
-  (list ?#)
-  (list "localhost")
-  '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face))
-  (list "[hH][oO][sS][tT][sS]\\'")
+  '(?#)
+  '("localhost")
+  '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face))
+  '("[hH][oO][sS][tT][sS]\\'")
   nil
   "Generic mode for HOSTS files."))
 
@@ -253,11 +252,11 @@
 (when (memq 'inf-generic-mode generic-extras-enable-list)
 
 (define-generic-mode inf-generic-mode
-  (list ?\;)
+  '(?\;)
   nil
-  '(("^\\(\\[.*\\]\\)"   1 'font-lock-constant-face))
-  (list "\\.[iI][nN][fF]\\'")
-  (list 'generic-bracket-support)
+  '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face))
+  '("\\.[iI][nN][fF]\\'")
+  '(generic-bracket-support)
   "Generic mode for MS-Windows INF files."))
 
 ;;; Windows INI files
@@ -265,13 +264,13 @@
 (when (memq 'ini-generic-mode generic-extras-enable-list)
 
 (define-generic-mode ini-generic-mode
-  (list ?\;)
+  '(?\;)
   nil
-  '(("^\\(\\[.*\\]\\)"   1 'font-lock-constant-face)
+  '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)
     ("^\\([^=\n\r]*\\)=\\([^\n\r]*\\)$"
      (1 font-lock-function-name-face)
      (2 font-lock-variable-name-face)))
-  (list "\\.[iI][nN][iI]\\'")
+  '("\\.[iI][nN][iI]\\'")
   (list
    (function
     (lambda ()
@@ -287,8 +286,8 @@
 (define-generic-mode reg-generic-mode
   '(?\;)
   '("key" "classes_root" "REGEDIT" "REGEDIT4")
-  '(("\\(\\[.*]\\)"     1 'font-lock-constant-face)
-    ("^\\([^\n\r]*\\)\\s-*="  1 'font-lock-variable-name-face))
+  '(("\\(\\[.*]\\)"          1 font-lock-constant-face)
+    ("^\\([^\n\r]*\\)\\s-*=" 1 font-lock-variable-name-face))
   '("\\.[rR][eE][gG]\\'")
   (list
    (function
@@ -303,77 +302,72 @@
 (define-generic-mode bat-generic-mode
   nil
   nil
-  (list
-   ;; Make this one first in the list, otherwise comments will
-   ;; be over-written by other variables
-   (list "^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 'font-lock-comment-face t)
-   (list "^[ \t]*\\(::.*\\)"		        1 'font-lock-comment-face t)
-   (list
-    "^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)"
-    '(1 font-lock-builtin-face)
-    '(2 font-lock-constant-face t t))
-   ;; Any text (except ON/OFF) following ECHO is a string.
-   (list
-    "^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)"
-    '(1 font-lock-builtin-face)
-    '(3 font-lock-constant-face t t)
-    '(5 font-lock-string-face t t))
-   ;; These keywords appear as the first word on a line.  (Actually, they
-   ;; can also appear after "if ..." or "for ..." clause, but since they
-   ;; are frequently used in simple text, we punt.)
-   ;; In `generic-bat-mode-setup-function' we make the keywords
-   ;; case-insensitive
-   (generic-make-keywords-list
-    (list
-     "for"
-     "if")
-    'font-lock-keyword-face "^[@ \t]*")
-   ;; These keywords can be anywhere on a line
-   ;; In `generic-bat-mode-setup-function' we make the keywords
-   ;; case-insensitive
-   (generic-make-keywords-list
+  (eval-when-compile
     (list
-     "do"
-     "exist"
-     "errorlevel"
-     "goto"
-     "not")
-    'font-lock-keyword-face)
-   ;; These are built-in commands.  Only frequently-used ones are listed.
-   (generic-make-keywords-list
-    (list
-     "CALL"	    "call"	 "Call"
-     "CD"	    "cd"	 "Cd"
-     "CLS"	    "cls"	 "Cls"
-     "COPY"	    "copy"	 "Copy"
-     "DEL"	    "del"	 "Del"
-     "ECHO"	    "echo"	 "Echo"
-     "MD"	    "md"	 "Md"
-     "PATH"	    "path"	 "Path"
-     "PAUSE"	    "pause"	 "Pause"
-     "PROMPT"	    "prompt"	 "Prompt"
-     "RD"	    "rd"	 "Rd"
-     "REN"	    "ren"	 "Ren"
-     "SET"	    "set"	 "Set"
-     "START"	    "start"	 "Start"
-     "SHIFT"	    "shift"	 "Shift")
-    'font-lock-builtin-face "[ \t|\n]")
-   (list "^[ \t]*\\(:\\sw+\\)"         1 'font-lock-function-name-face t)
-   (list "\\(%\\sw+%\\)"		 1 'font-lock-variable-name-face t)
-   (list "\\(%[0-9]\\)"		 1 'font-lock-variable-name-face t)
-   (list "\\(/[^/ \"\t\n]+\\)"	 1 'font-lock-type-face)
-   (list "[\t ]+\\([+-][^\t\n\" ]+\\)" 1 'font-lock-type-face)
-   (list "[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
-	 '(1 font-lock-keyword-face)
-	 '(2 font-lock-function-name-face nil t))
-   (list "[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?"
-	 '(1 font-lock-builtin-face)
-	 '(2 font-lock-variable-name-face t t)))
-  (list
-   "\\.[bB][aA][tT]\\'"
-   "\\`[cC][oO][nN][fF][iI][gG]\\."
-   "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\." )
-  (list 'generic-bat-mode-setup-function)
+     ;; Make this one first in the list, otherwise comments will
+     ;; be over-written by other variables
+     '("^[@ \t]*\\([rR][eE][mM][^\n\r]*\\)" 1 font-lock-comment-face t)
+     '("^[ \t]*\\(::.*\\)"                  1 font-lock-comment-face t)
+     '("^[@ \t]*\\([bB][rR][eE][aA][kK]\\|[vV][eE][rR][iI][fF][yY]\\)[ \t]+\\([oO]\\([nN]\\|[fF][fF]\\)\\)"
+       (1 font-lock-builtin-face)
+       (2 font-lock-constant-face t t))
+     ;; Any text (except ON/OFF) following ECHO is a string.
+     '("^[@ \t]*\\([eE][cC][hH][oO]\\)[ \t]+\\(\\([oO]\\([nN]\\|[fF][fF]\\)\\)\\|\\([^>|\r\n]+\\)\\)"
+       (1 font-lock-builtin-face)
+       (3 font-lock-constant-face t t)
+       (5 font-lock-string-face t t))
+     ;; These keywords appear as the first word on a line.  (Actually, they
+     ;; can also appear after "if ..." or "for ..." clause, but since they
+     ;; are frequently used in simple text, we punt.)
+     ;; In `generic-bat-mode-setup-function' we make the keywords
+     ;; case-insensitive
+     (generic-make-keywords-list
+      '("for"
+	"if")
+      font-lock-keyword-face "^[@ \t]*")
+     ;; These keywords can be anywhere on a line
+     ;; In `generic-bat-mode-setup-function' we make the keywords
+     ;; case-insensitive
+     (generic-make-keywords-list
+      '("do"
+	"exist"
+	"errorlevel"
+	"goto"
+	"not")
+      font-lock-keyword-face)
+     ;; These are built-in commands.  Only frequently-used ones are listed.
+     (generic-make-keywords-list
+      '("CALL"	    "call"	 "Call"
+	"CD"	    "cd"	 "Cd"
+	"CLS"	    "cls"	 "Cls"
+	"COPY"	    "copy"	 "Copy"
+	"DEL"	    "del"	 "Del"
+	"ECHO"	    "echo"	 "Echo"
+	"MD"	    "md"	 "Md"
+	"PATH"	    "path"	 "Path"
+	"PAUSE"	    "pause"	 "Pause"
+	"PROMPT"	    "prompt"	 "Prompt"
+	"RD"	    "rd"	 "Rd"
+	"REN"	    "ren"	 "Ren"
+	"SET"	    "set"	 "Set"
+	"START"	    "start"	 "Start"
+	"SHIFT"	    "shift"	 "Shift")
+      font-lock-builtin-face "[ \t|\n]")
+     '("^[ \t]*\\(:\\sw+\\)"         1 font-lock-function-name-face t)
+     '("\\(%\\sw+%\\)"               1 font-lock-variable-name-face t)
+     '("\\(%[0-9]\\)"                1 font-lock-variable-name-face t)
+     '("\\(/[^/ \"\t\n]+\\)"         1 font-lock-type-face)
+     '("[\t ]+\\([+-][^\t\n\" ]+\\)" 1 font-lock-type-face)
+     '("[ \t\n|]\\<\\([gG][oO][tT][oO]\\)\\>[ \t]*\\(\\sw+\\)?"
+       (1 font-lock-keyword-face)
+       (2 font-lock-function-name-face nil t))
+     '("[ \t\n|]\\<\\([sS][eE][tT]\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*=?"
+       (1 font-lock-builtin-face)
+       (2 font-lock-variable-name-face t t))))
+  '("\\.[bB][aA][tT]\\'"
+    "\\`[cC][oO][nN][fF][iI][gG]\\."
+    "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.")
+  '(generic-bat-mode-setup-function)
   "Generic mode for MS-Windows BAT files.")
 
 (defvar bat-generic-mode-syntax-table nil
@@ -416,50 +410,49 @@
 ;; Make underscores count as words
 (unless bat-generic-mode-syntax-table
   (setq bat-generic-mode-syntax-table (make-syntax-table))
-  (modify-syntax-entry ?_  "w"  bat-generic-mode-syntax-table))
+  (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table))
 
-;; bat-generic-mode doesn't use the comment functionality of generic-mode
-;; because it has a three-letter comment-string, so we do it
-;; here manually instead
+;; bat-generic-mode doesn't use the comment functionality of
+;; define-generic-mode because it has a three-letter comment-string,
+;; so we do it here manually instead
 (defun generic-bat-mode-setup-function ()
-  (make-local-variable	     'parse-sexp-ignore-comments)
-  (make-local-variable	     'comment-start)
-  (make-local-variable	     'comment-start-skip)
-  (make-local-variable	     'comment-end)
-  (setq imenu-generic-expression  '((nil "^:\\(\\sw+\\)" 1))
+  (make-local-variable 'parse-sexp-ignore-comments)
+  (make-local-variable 'comment-start)
+  (make-local-variable 'comment-start-skip)
+  (make-local-variable 'comment-end)
+  (setq imenu-generic-expression '((nil "^:\\(\\sw+\\)" 1))
 	parse-sexp-ignore-comments t
-	comment-end                ""
-	comment-start		     "REM "
-	comment-start-skip	     "[Rr][Ee][Mm] *")
-  (set-syntax-table	      bat-generic-mode-syntax-table)
+	comment-end ""
+	comment-start "REM "
+	comment-start-skip "[Rr][Ee][Mm] *")
+  (set-syntax-table bat-generic-mode-syntax-table)
   ;; Make keywords case-insensitive
-  (setq font-lock-defaults (list 'generic-font-lock-defaults nil t))
+  (setq font-lock-defaults '(generic-font-lock-keywords nil t))
   (use-local-map bat-generic-mode-keymap)))
 
 ;;; Mailagent
-;; Mailagent is a Unix mail filtering program. Anyone wanna do a generic mode
-;; for procmail?
+;; Mailagent is a Unix mail filtering program.  Anyone wanna do a
+;; generic mode for procmail?
 (when (memq 'mailagent-rules-generic-mode generic-extras-enable-list)
 
 (define-generic-mode mailagent-rules-generic-mode
-  (list ?#)
-  (list "SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
-  '(("^\\(\\sw+\\)\\s-*="         1 'font-lock-variable-name-face)
-    ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 'font-lock-constant-face))
-  (list "\\.rules\\'")
-  (list 'mailagent-rules-setup-function)
-  "Mode for Mailagent rules files.")
-
-(defun mailagent-rules-setup-function ()
-  (make-local-variable 'imenu-generic-expression)
-  (setq imenu-generic-expression
-	'((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))
+  '(?#)
+  '("SAVE" "DELETE" "PIPE" "ANNOTATE" "REJECT")
+  '(("^\\(\\sw+\\)\\s-*="         1 font-lock-variable-name-face)
+    ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face))
+  '("\\.rules\\'")
+  (list
+   (function
+    (lambda ()
+      (setq imenu-generic-expression
+	    '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))))
+  "Mode for Mailagent rules files."))
 
 ;; Solaris/Sys V prototype files
 (when (memq 'prototype-generic-mode generic-extras-enable-list)
 
 (define-generic-mode prototype-generic-mode
-  (list ?#)
+  '(?#)
   nil
   '(("^\\([0-9]\\)?\\s-*\\([a-z]\\)\\s-+\\([A-Za-z_]+\\)\\s-+\\([^\n\r]*\\)$"
      (2 font-lock-constant-face)
@@ -474,7 +467,7 @@
     ("^\\(!\\s-*\\sw+\\)=\\([^\n\r]*\\)$"
      (1 font-lock-keyword-face)
      (2 font-lock-variable-name-face)))
-  (list "prototype\\'")
+  '("prototype\\'")
   nil
   "Mode for Sys V prototype files."))
 
@@ -482,86 +475,84 @@
 (when (memq 'pkginfo-generic-mode generic-extras-enable-list)
 
 (define-generic-mode pkginfo-generic-mode
-  (list ?#)
+  '(?#)
   nil
   '(("^\\([A-Za-z_]+\\)=\\([^\n\r]*\\)$"
      (1 font-lock-keyword-face)
      (2 font-lock-variable-name-face)))
-  (list "pkginfo\\'")
+  '("pkginfo\\'")
   nil
   "Mode for Sys V pkginfo files."))
 
 ;; Javascript mode
 ;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU]
 (define-generic-mode javascript-generic-mode
-  (list "//" '("/*" . "*/"))
-  (list
-   "break"
-   "case"
-   "continue"
-   "default"
-   "delete"
-   "do"
-   "else"
-   "export"
-   "for"
-   "function"
-   "if"
-   "import"
-   "in"
-   "new"
-   "return"
-   "switch"
-   "this"
-   "typeof"
-   "var"
-   "void"
-   "while"
-   "with"
-   ;; words reserved for ECMA extensions below
-   "catch"
-   "class"
-   "const"
-   "debugger"
-   "enum"
-   "extends"
-   "finally"
-   "super"
-   "throw"
-   "try"
-   ;; Java Keywords reserved by JavaScript
-   "abstract"
-   "boolean"
-   "byte"
-   "char"
-   "double"
-   "false"
-   "final"
-   "float"
-   "goto"
-   "implements"
-   "instanceof"
-   "int"
-   "interface"
-   "long"
-   "native"
-   "null"
-   "package"
-   "private"
-   "protected"
-   "public"
-   "short"
-   "static"
-   "synchronized"
-   "throws"
-   "transient"
-   "true")
-  (list
-   (list "^\\s-*function\\s-+\\([A-Za-z0-9_]+\\)"
-	 '(1 font-lock-function-name-face))
-   (list "^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)"
-	 '(1 font-lock-variable-name-face)))
-  (list "\\.js\\'")
+  '("//" ("/*" . "*/"))
+  '("break"
+    "case"
+    "continue"
+    "default"
+    "delete"
+    "do"
+    "else"
+    "export"
+    "for"
+    "function"
+    "if"
+    "import"
+    "in"
+    "new"
+    "return"
+    "switch"
+    "this"
+    "typeof"
+    "var"
+    "void"
+    "while"
+    "with"
+    ;; words reserved for ECMA extensions below
+    "catch"
+    "class"
+    "const"
+    "debugger"
+    "enum"
+    "extends"
+    "finally"
+    "super"
+    "throw"
+    "try"
+    ;; Java Keywords reserved by JavaScript
+    "abstract"
+    "boolean"
+    "byte"
+    "char"
+    "double"
+    "false"
+    "final"
+    "float"
+    "goto"
+    "implements"
+    "instanceof"
+    "int"
+    "interface"
+    "long"
+    "native"
+    "null"
+    "package"
+    "private"
+    "protected"
+    "public"
+    "short"
+    "static"
+    "synchronized"
+    "throws"
+    "transient"
+    "true")
+  '(("^\\s-*function\\s-+\\([A-Za-z0-9_]+\\)"
+     (1 font-lock-function-name-face))
+    ("^\\s-*var\\s-+\\([A-Za-z0-9_]+\\)"
+     (1 font-lock-variable-name-face)))
+  '("\\.js\\'")
   (list
    (function
     (lambda ()
@@ -572,48 +563,45 @@
 
 ;; VRML files
 (define-generic-mode vrml-generic-mode
-  (list ?#)
-  (list
-   "DEF"
-   "NULL"
-   "USE"
-   "Viewpoint"
-   "ambientIntensity"
-   "appearance"
-   "children"
-   "color"
-   "coord"
-   "coordIndex"
-   "creaseAngle"
-   "diffuseColor"
-   "emissiveColor"
-   "fieldOfView"
-   "geometry"
-   "info"
-   "material"
-   "normal"
-   "orientation"
-   "position"
-   "shininess"
-   "specularColor"
-   "texCoord"
-   "texture"
-   "textureTransform"
-   "title"
-   "transparency"
-   "type")
-  (list
-   (list "USE\\s-+\\([-A-Za-z0-9_]+\\)"
-	 '(1 font-lock-constant-face))
-   (list "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
-	 '(1 font-lock-type-face)
-	 '(2 font-lock-constant-face))
-   (list "^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
-	 '(1 font-lock-function-name-face))
-   (list
-    "^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
-    '(2 font-lock-variable-name-face)))
-  (list "\\.wrl\\'")
+  '(?#)
+  '("DEF"
+    "NULL"
+    "USE"
+    "Viewpoint"
+    "ambientIntensity"
+    "appearance"
+    "children"
+    "color"
+    "coord"
+    "coordIndex"
+    "creaseAngle"
+    "diffuseColor"
+    "emissiveColor"
+    "fieldOfView"
+    "geometry"
+    "info"
+    "material"
+    "normal"
+    "orientation"
+    "position"
+    "shininess"
+    "specularColor"
+    "texCoord"
+    "texture"
+    "textureTransform"
+    "title"
+    "transparency"
+    "type")
+  '(("USE\\s-+\\([-A-Za-z0-9_]+\\)"
+     (1 font-lock-constant-face))
+    ("DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
+     (1 font-lock-type-face)
+     (2 font-lock-constant-face))
+    ("^\\s-*\\([-A-Za-z0-9_]+\\)\\s-*{"
+     (1 font-lock-function-name-face))
+    ("^\\s-*\\(geometry\\|appearance\\|material\\)\\s-+\\([-A-Za-z0-9_]+\\)"
+     (2 font-lock-variable-name-face)))
+  '("\\.wrl\\'")
   (list
    (function
     (lambda ()
@@ -626,45 +614,45 @@
 
 ;; Java Manifests
 (define-generic-mode java-manifest-generic-mode
-  (list ?#)
-  (list
-   "Name"
-   "Digest-Algorithms"
-   "Manifest-Version"
-   "Required-Version"
-   "Signature-Version"
-   "Magic"
-   "Java-Bean"
-   "Depends-On")
+  '(?#)
+  '("Name"
+    "Digest-Algorithms"
+    "Manifest-Version"
+    "Required-Version"
+    "Signature-Version"
+    "Magic"
+    "Java-Bean"
+    "Depends-On")
   '(("^Name:\\s-+\\([^\n\r]*\\)$"
      (1 font-lock-variable-name-face))
     ("^\\(Manifest\\|Required\\|Signature\\)-Version:\\s-+\\([^\n\r]*\\)$"
      (2 font-lock-constant-face)))
-  (list "[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
+  '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
   nil
   "Mode for Java Manifest files")
 
 ;; Java properties files
 (define-generic-mode java-properties-generic-mode
-  (list ?! ?#)
+  '(?! ?#)
   nil
-  (let ((java-properties-key
-	 "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)")
-	(java-properties-value
-	 "\\([^\r\n]*\\)"))
-    ;; Property and value can be separated in a number of different ways:
-    ;;   * whitespace
-    ;;   * an equal sign
-    ;;   * a colon
-    (mapcar
-     (function
-      (lambda (elt)
-	(list
-	 (concat "^" java-properties-key elt java-properties-value "$")
-	 '(1 font-lock-constant-face)
-	 '(4 font-lock-variable-name-face))))
-     ;; These are the separators
-     (list ":\\s-*" "\\s-+" "\\s-*=\\s-*")))
+  (eval-when-compile
+    (let ((java-properties-key
+	   "\\(\\([-A-Za-z0-9_\\./]\\|\\(\\\\[ =:]\\)\\)+\\)")
+	  (java-properties-value
+	   "\\([^\r\n]*\\)"))
+      ;; Property and value can be separated in a number of different ways:
+      ;;   * whitespace
+      ;;   * an equal sign
+      ;;   * a colon
+      (mapcar
+       (function
+	(lambda (elt)
+	  (list
+	   (concat "^" java-properties-key elt java-properties-value "$")
+	   '(1 font-lock-constant-face)
+	   '(4 font-lock-variable-name-face))))
+       ;; These are the separators
+       '(":\\s-*" "\\s-+" "\\s-*=\\s-*"))))
   nil
   (list
    (function
@@ -677,13 +665,13 @@
 (when (memq 'alias-generic-mode generic-extras-enable-list)
 
 (define-generic-mode alias-generic-mode
-  (list ?#)
-  (list "alias" "unalias")
+  '(?#)
+  '("alias" "unalias")
   '(("^alias\\s-+\\([-A-Za-z0-9_]+\\)\\s-+"
      (1 font-lock-variable-name-face))
     ("^unalias\\s-+\\([-A-Za-z0-9_]+\\)\\s-*$"
      (1 font-lock-variable-name-face)))
-  (list "alias\\'")
+  '("alias\\'")
   (list
    (function
     (lambda ()
@@ -696,8 +684,8 @@
 (when (memq 'rc-generic-mode generic-extras-enable-list)
 
 (define-generic-mode rc-generic-mode
-  ;; (list ?\/)
-  (list "//")
+  ;; '(?\/)
+  '("//")
   '("ACCELERATORS"
     "AUTO3STATE"
     "AUTOCHECKBOX"
@@ -753,589 +741,585 @@
   ;; the choice of what tokens go where is somewhat arbitrary,
   ;; as is the choice of which value tokens are included, as
   ;; the choice of face for each token group
-  (list
-   (eval-when-compile
+  (eval-when-compile
+    (list
      (generic-make-keywords-list
-      (list
-       "FILEFLAGSMASK"
-       "FILEFLAGS"
-       "FILEOS"
-       "FILESUBTYPE"
-       "FILETYPE"
-       "FILEVERSION"
-       "PRODUCTVERSION")
-      'font-lock-type-face))
-   (eval-when-compile
+      '("FILEFLAGSMASK"
+	"FILEFLAGS"
+	"FILEOS"
+	"FILESUBTYPE"
+	"FILETYPE"
+	"FILEVERSION"
+	"PRODUCTVERSION")
+      font-lock-type-face)
      (generic-make-keywords-list
-      (list
-       "BEGIN"
-       "BLOCK"
-       "END"
-       "VALUE")
-      'font-lock-function-name-face))
-   '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
-   '("^#[ \t]*define[ \t]+\\(\\sw+\\)("       1 font-lock-function-name-face)
-   '("^#[ \t]*\\(elif\\|if\\)\\>"
-     ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
-      (1 font-lock-constant-face) (2 font-lock-variable-name-face nil t)))
-   '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
-     (1 font-lock-constant-face) (2 font-lock-variable-name-face nil t)))
-  (list "\\.[rR][cC]$")
-  nil
-  "Generic mode for MS-Windows Resource files."))
+      '("BEGIN"
+	"BLOCK"
+	"END"
+	"VALUE")
+      font-lock-function-name-face)
+     '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
+     '("^#[ \t]*define[ \t]+\\(\\sw+\\)("       1 font-lock-function-name-face)
+     '("^#[ \t]*\\(elif\\|if\\)\\>"
+       ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil
+	(1 font-lock-constant-face)
+	(2 font-lock-variable-name-face nil t)))
+     '("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
+       (1 font-lock-constant-face)
+       (2 font-lock-variable-name-face nil t))))
+    '("\\.[rR][cC]$")
+    nil
+    "Generic mode for MS-Windows Resource files."))
 
 ;; InstallShield RUL files
 ;; Contributed by  Alfred.Correira@Pervasive.Com
 ;; Bugfixes by "Rolf Sandau" <Rolf.Sandau@marconi.com>
 (when (memq 'rul-generic-mode generic-extras-enable-list)
 
+(eval-when-compile
+
 ;;; build the regexp strings using regexp-opt
-(defvar installshield-statement-keyword-list
-  (list
-   "abort"
-   "begin"
-   "call"
-   "case"
-   "declare"
-   "default"
-   "downto"
-   "elseif"
-   "else"
-   "endfor"
-   "endif"
-   "endswitch"
-   "endwhile"
-   "end"
-   "exit"
-   "external"
-   "for"
-   "function"
-   ;; "goto" -- handled elsewhere
-   "if"
-   "program"
-   "prototype"
-   "repeat"
-   "return"
-   "step"
-   "switch"
-   "then"
-   "to"
-   "typedef"
-   "until"
-   "void"
-   "while")
+(defconst installshield-statement-keyword-list
+  '("abort"
+    "begin"
+    "call"
+    "case"
+    "declare"
+    "default"
+    "downto"
+    "elseif"
+    "else"
+    "endfor"
+    "endif"
+    "endswitch"
+    "endwhile"
+    "end"
+    "exit"
+    "external"
+    "for"
+    "function"
+    ;; "goto" -- handled elsewhere
+    "if"
+    "program"
+    "prototype"
+    "repeat"
+    "return"
+    "step"
+    "switch"
+    "then"
+    "to"
+    "typedef"
+    "until"
+    "void"
+    "while")
   "Statement keywords used in InstallShield 3 and 5.")
 
-(defvar installshield-system-functions-list
-  (list
-   "AddFolderIcon"
-   "AddProfString"
-   "AddressString"
-   "AppCommand"
-   "AskDestPath"
-   "AskOptions"
-   "AskPath"
-   "AskText"
-   "AskYesNo"
-   "BatchDeleteEx"
-   "BatchFileLoad"
-   "BatchFileSave"
-   "BatchFind"
-   "BatchGetFileName"
-   "BatchMoveEx"
-   "BatchSetFileName"
-   "ChangeDirectory"
-   "CloseFile"
-   "CmdGetHwndDlg"
-   "ComponentAddItem"			; differs between IS3 and IS5
-   "ComponentCompareSizeRequired"	; IS5 only
-   "ComponentDialog"
-   "ComponentError"			; IS5 only
-   "ComponentFileEnum"			; IS5 only
-   "ComponentFileInfo"			; IS5 only
-   "ComponentFilterLanguage"		; IS5 only
-   "ComponentFilterOS"			; IS5 only
-   "ComponentGetData"			; IS5 only
-   "ComponentGetItemInfo"		; IS3 only
-   "ComponentGetItemSize"		; differs between IS3 and IS5
-   "ComponentIsItemSelected"		; differs between IS3 and IS5
-   "ComponentListItems"
-   "ComponentMoveData"			; IS5 only
-   "ComponentSelectItem"		; differs between IS3 and IS5
-   "ComponentSetData"			; IS5 only
-   "ComponentSetItemInfo"		; IS3 only
-   "ComponentSetTarget"			; IS5 only
-   "ComponentSetupTypeEnum"		; IS5 only
-   "ComponentSetupTypeGetData"		; IS5 only
-   "ComponentSetupTypeSet"		; IS5 only
-   "ComponentTotalSize"
-   "ComponentValidate"			; IS5 only
-   "CompressAdd"			; IS3 only
-   "CompressDel"			; IS3 only
-   "CompressEnum"			; IS3 only
-   "CompressGet"			; IS3 only
-   "CompressInfo"			; IS3 only
-   "CopyFile"
-   "CreateDir"
-   "CreateFile"
-   "CreateProgramFolder"
-   "DeinstallSetReference"		; IS5 only
-   "DeinstallStart"
-   "Delay"
-   "DeleteDir"
-   "DeleteFile"
-   "DialogSetInfo"
-   "Disable"
-   "DoInstall"
-   "Do"
-   "Enable"
-   "EnterDisk"
-   "ExistsDir"
-   "ExistsDisk"
-   "ExitProgMan"
-   "EzBatchAddPath"
-   "EzBatchAddString"
-   "EzBatchReplace"
-   "EzConfigAddDriver"
-   "EzConfigAddString"
-   "EzConfigGetValue"
-   "EzConfigSetValue"
-   "EzDefineDialog"
-   "FileCompare"
-   "FileDeleteLine"
-   "FileGrep"
-   "FileInsertLine"
-   "FileSetBeginDefine"			; IS3 only
-   "FileSetEndDefine"			; IS3 only
-   "FileSetPerformEz"			; IS3 only
-   "FileSetPerform"			; IS3 only
-   "FileSetReset"			; IS3 only
-   "FileSetRoot"			; IS3 only
-   "FindAllDirs"
-   "FindAllFiles"
-   "FindFile"
-   "FindWindow"
-   "GetDiskSpace"
-   "GetDisk"
-   "GetEnvVar"
-   "GetExtents"
-   "GetFileInfo"
-   "GetLine"
-   "GetProfInt"
-   "GetProfString"
-   "GetSystemInfo"
-   "GetValidDrivesList"
-   "GetVersion"
-   "GetWindowHandle"
-   "InstallationInfo"
-   "Is"
-   "LaunchApp"
-   "LaunchAppAndWait"
-   "ListAddItem"
-   "ListAddString"
-   "ListCount"
-   "ListCreate"
-   "ListDestroy"
-   "ListFindItem"
-   "ListFindString"
-   "ListGetFirstItem"
-   "ListGetFirstString"
-   "ListGetNextItem"
-   "ListGetNextString"
-   "ListReadFromFile"
-   "ListSetCurrentItem"
-   "ListSetNextItem"
-   "ListSetNextString"
-   "ListSetIndex"
-   "ListWriteToFile"
-   "LongPathToQuote"
-   "LongPathToShortPath"
-   "MessageBox"
-   "NumToStr"
-   "OpenFileMode"
-   "OpenFile"
-   "ParsePath"
-   "PathAdd"
-   "PathDelete"
-   "PathFind"
-   "PathGet"
-   "PathMove"
-   "PathSet"
-   "Path"
-   "PlaceBitmap"
-   "PlaceWindow"
-   "PlayMMedia"				; IS5 only
-   "ProgDefGroupType"
-   "RegDBCreateKeyEx"
-   "RegDBDeleteValue"
-   "RegDBGetItem"
-   "RegDBKeyExist"
-   "RegDBSetItem"
-   "RegDBGetKeyValueEx"
-   "RegDBSetKeyValueEx"
-   "RegDBSetDefaultRoot"
-   "RenameFile"
-   "ReplaceFolderIcon"
-   "ReplaceProfString"
-   "SdAskDestPath"
-   "SdAskOptions"
-   "SdAskOptionsList"
-   "SdBitmap"
-   "SdCloseDlg"
-   "SdComponentAdvCheckSpace"
-   "SdComponentAdvInit"
-   "SdComponentAdvUpdateSpace"
-   "SdComponentDialog"
-   "SdComponentDialog2"
-   "SdComponentDialogAdv"
-   "SdComponentDialogEx"
-   "SdComponentDlgCheckSpace"
-   "SdComponentMult"
-   "SdConfirmNewDir"
-   "SdConfirmRegistration"
-   "SdDiskSpace"
-   "SdDisplayTopics"
-   "SdDoStdButton"
-   "SdEnablement"
-   "SdError"
-   "SdFinish"
-   "SdFinishInit32"
-   "SdFinishReboot"
-   "SdGeneralInit"
-   "SdGetItemName"
-   "SdGetTextExtent"
-   "SdGetUserCompanyInfo"
-   "SdInit"
-   "SdIsShellExplorer"
-   "SdIsStdButton"
-   "SdLicense"
-   "SdMakeName"
-   "SdOptionInit"
-   "SdOptionSetState"
-   "SdOptionsButtons"
-   "SdOptionsButtonsInit"
-   "SdPlugInProductName"
-   "SdProductName"
-   "SdRegEnableButton"
-   "SdRegExEnableButton"
-   "SdRegisterUser"
-   "SdRegisterUserEx"
-   "SdRemoveEndSpace"
-   "SdSelectFolder"
-   "SdSetSequentialItems"
-   "SdSetStatic"
-   "SdSetupTypeEx"			; IS5 only
-   "SdSetupType"
-   "SdShowAnyDialog"
-   "SdShowDlgEdit1"
-   "SdShowDlgEdit2"
-   "SdShowDlgEdit3"
-   "SdShowFileMods"
-   "SdShowInfoList"
-   "SdShowMsg"
-   "SdStartCopy"
-   "SdUnInit"
-   "SdUpdateComponentSelection"
-   "SdWelcome"
-   "SendMessage"
-   "SetColor"
-   "SetFont"
-   "SetDialogTitle"
-   "SetDisplayEffect"			; IS5 only
-   "SetFileInfo"
-   "SetForegroundWindow"
-   "SetStatusWindow"
-   "SetTitle"
-   "SetupType"
-   "ShowProgramFolder"
-   "Split"				; IS3 only
-   "SprintfBox"
-   "Sprintf"
-   "StatusUpdate"
-   "StrCompare"
-   "StrFind"
-   "StrGetTokens"
-   "StrLength"
-   "StrRemoveLastSlash"
-   "StrToLower"
-   "StrToNum"
-   "StrToUpper"
-   "StrSub"
-   "VarRestore"
-   "VarSave"
-   "VerCompare"
-   "VerGetFileVersion"
-   "WaitOnDialog"
-   "Welcome"
-   "WriteLine"
-   "WriteProfString"
-   "XCopyFile")
+(defconst installshield-system-functions-list
+  '("AddFolderIcon"
+    "AddProfString"
+    "AddressString"
+    "AppCommand"
+    "AskDestPath"
+    "AskOptions"
+    "AskPath"
+    "AskText"
+    "AskYesNo"
+    "BatchDeleteEx"
+    "BatchFileLoad"
+    "BatchFileSave"
+    "BatchFind"
+    "BatchGetFileName"
+    "BatchMoveEx"
+    "BatchSetFileName"
+    "ChangeDirectory"
+    "CloseFile"
+    "CmdGetHwndDlg"
+    "ComponentAddItem"			; differs between IS3 and IS5
+    "ComponentCompareSizeRequired"	; IS5 only
+    "ComponentDialog"
+    "ComponentError"			; IS5 only
+    "ComponentFileEnum"			; IS5 only
+    "ComponentFileInfo"			; IS5 only
+    "ComponentFilterLanguage"		; IS5 only
+    "ComponentFilterOS"			; IS5 only
+    "ComponentGetData"			; IS5 only
+    "ComponentGetItemInfo"		; IS3 only
+    "ComponentGetItemSize"		; differs between IS3 and IS5
+    "ComponentIsItemSelected"		; differs between IS3 and IS5
+    "ComponentListItems"
+    "ComponentMoveData"			; IS5 only
+    "ComponentSelectItem"		; differs between IS3 and IS5
+    "ComponentSetData"			; IS5 only
+    "ComponentSetItemInfo"		; IS3 only
+    "ComponentSetTarget"		; IS5 only
+    "ComponentSetupTypeEnum"		; IS5 only
+    "ComponentSetupTypeGetData"		; IS5 only
+    "ComponentSetupTypeSet"		; IS5 only
+    "ComponentTotalSize"
+    "ComponentValidate"			; IS5 only
+    "CompressAdd"			; IS3 only
+    "CompressDel"			; IS3 only
+    "CompressEnum"			; IS3 only
+    "CompressGet"			; IS3 only
+    "CompressInfo"			; IS3 only
+    "CopyFile"
+    "CreateDir"
+    "CreateFile"
+    "CreateProgramFolder"
+    "DeinstallSetReference"		; IS5 only
+    "DeinstallStart"
+    "Delay"
+    "DeleteDir"
+    "DeleteFile"
+    "DialogSetInfo"
+    "Disable"
+    "DoInstall"
+    "Do"
+    "Enable"
+    "EnterDisk"
+    "ExistsDir"
+    "ExistsDisk"
+    "ExitProgMan"
+    "EzBatchAddPath"
+    "EzBatchAddString"
+    "EzBatchReplace"
+    "EzConfigAddDriver"
+    "EzConfigAddString"
+    "EzConfigGetValue"
+    "EzConfigSetValue"
+    "EzDefineDialog"
+    "FileCompare"
+    "FileDeleteLine"
+    "FileGrep"
+    "FileInsertLine"
+    "FileSetBeginDefine"		; IS3 only
+    "FileSetEndDefine"			; IS3 only
+    "FileSetPerformEz"			; IS3 only
+    "FileSetPerform"			; IS3 only
+    "FileSetReset"			; IS3 only
+    "FileSetRoot"			; IS3 only
+    "FindAllDirs"
+    "FindAllFiles"
+    "FindFile"
+    "FindWindow"
+    "GetDiskSpace"
+    "GetDisk"
+    "GetEnvVar"
+    "GetExtents"
+    "GetFileInfo"
+    "GetLine"
+    "GetProfInt"
+    "GetProfString"
+    "GetSystemInfo"
+    "GetValidDrivesList"
+    "GetVersion"
+    "GetWindowHandle"
+    "InstallationInfo"
+    "Is"
+    "LaunchApp"
+    "LaunchAppAndWait"
+    "ListAddItem"
+    "ListAddString"
+    "ListCount"
+    "ListCreate"
+    "ListDestroy"
+    "ListFindItem"
+    "ListFindString"
+    "ListGetFirstItem"
+    "ListGetFirstString"
+    "ListGetNextItem"
+    "ListGetNextString"
+    "ListReadFromFile"
+    "ListSetCurrentItem"
+    "ListSetNextItem"
+    "ListSetNextString"
+    "ListSetIndex"
+    "ListWriteToFile"
+    "LongPathToQuote"
+    "LongPathToShortPath"
+    "MessageBox"
+    "NumToStr"
+    "OpenFileMode"
+    "OpenFile"
+    "ParsePath"
+    "PathAdd"
+    "PathDelete"
+    "PathFind"
+    "PathGet"
+    "PathMove"
+    "PathSet"
+    "Path"
+    "PlaceBitmap"
+    "PlaceWindow"
+    "PlayMMedia"			; IS5 only
+    "ProgDefGroupType"
+    "RegDBCreateKeyEx"
+    "RegDBDeleteValue"
+    "RegDBGetItem"
+    "RegDBKeyExist"
+    "RegDBSetItem"
+    "RegDBGetKeyValueEx"
+    "RegDBSetKeyValueEx"
+    "RegDBSetDefaultRoot"
+    "RenameFile"
+    "ReplaceFolderIcon"
+    "ReplaceProfString"
+    "SdAskDestPath"
+    "SdAskOptions"
+    "SdAskOptionsList"
+    "SdBitmap"
+    "SdCloseDlg"
+    "SdComponentAdvCheckSpace"
+    "SdComponentAdvInit"
+    "SdComponentAdvUpdateSpace"
+    "SdComponentDialog"
+    "SdComponentDialog2"
+    "SdComponentDialogAdv"
+    "SdComponentDialogEx"
+    "SdComponentDlgCheckSpace"
+    "SdComponentMult"
+    "SdConfirmNewDir"
+    "SdConfirmRegistration"
+    "SdDiskSpace"
+    "SdDisplayTopics"
+    "SdDoStdButton"
+    "SdEnablement"
+    "SdError"
+    "SdFinish"
+    "SdFinishInit32"
+    "SdFinishReboot"
+    "SdGeneralInit"
+    "SdGetItemName"
+    "SdGetTextExtent"
+    "SdGetUserCompanyInfo"
+    "SdInit"
+    "SdIsShellExplorer"
+    "SdIsStdButton"
+    "SdLicense"
+    "SdMakeName"
+    "SdOptionInit"
+    "SdOptionSetState"
+    "SdOptionsButtons"
+    "SdOptionsButtonsInit"
+    "SdPlugInProductName"
+    "SdProductName"
+    "SdRegEnableButton"
+    "SdRegExEnableButton"
+    "SdRegisterUser"
+    "SdRegisterUserEx"
+    "SdRemoveEndSpace"
+    "SdSelectFolder"
+    "SdSetSequentialItems"
+    "SdSetStatic"
+    "SdSetupTypeEx"			; IS5 only
+    "SdSetupType"
+    "SdShowAnyDialog"
+    "SdShowDlgEdit1"
+    "SdShowDlgEdit2"
+    "SdShowDlgEdit3"
+    "SdShowFileMods"
+    "SdShowInfoList"
+    "SdShowMsg"
+    "SdStartCopy"
+    "SdUnInit"
+    "SdUpdateComponentSelection"
+    "SdWelcome"
+    "SendMessage"
+    "SetColor"
+    "SetFont"
+    "SetDialogTitle"
+    "SetDisplayEffect"			; IS5 only
+    "SetFileInfo"
+    "SetForegroundWindow"
+    "SetStatusWindow"
+    "SetTitle"
+    "SetupType"
+    "ShowProgramFolder"
+    "Split"				; IS3 only
+    "SprintfBox"
+    "Sprintf"
+    "StatusUpdate"
+    "StrCompare"
+    "StrFind"
+    "StrGetTokens"
+    "StrLength"
+    "StrRemoveLastSlash"
+    "StrToLower"
+    "StrToNum"
+    "StrToUpper"
+    "StrSub"
+    "VarRestore"
+    "VarSave"
+    "VerCompare"
+    "VerGetFileVersion"
+    "WaitOnDialog"
+    "Welcome"
+    "WriteLine"
+    "WriteProfString"
+    "XCopyFile")
   "System functions defined in InstallShield 3 and 5.")
 
-(defvar installshield-system-variables-list
-  (list
-   "BATCH_INSTALL"
-   "CMDLINE"
-   "COMMONFILES"
-   "CORECOMPONENTHANDLING"
-   "DIALOGCACHE"
-   "ERRORFILENAME"
-   "FOLDER_DESKTOP"
-   "FOLDER_PROGRAMS"
-   "FOLDER_STARTMENU"
-   "FOLDER_STARTUP"
-   "INFOFILENAME"
-   "ISRES"
-   "ISUSER"
-   "ISVERSION"
-   "MEDIA"
-   "MODE"
-   "PROGRAMFILES"
-   "SELECTED_LANGUAGE"
-   "SRCDIR"
-   "SRCDISK"
-   "SUPPORTDIR"
-   "TARGETDIR"
-   "TARGETDISK"
-   "UNINST"
-   "WINDIR"
-   "WINDISK"
-   "WINMAJOR"
-   "WINSYSDIR"
-   "WINSYSDISK")
+(defconst installshield-system-variables-list
+  '("BATCH_INSTALL"
+    "CMDLINE"
+    "COMMONFILES"
+    "CORECOMPONENTHANDLING"
+    "DIALOGCACHE"
+    "ERRORFILENAME"
+    "FOLDER_DESKTOP"
+    "FOLDER_PROGRAMS"
+    "FOLDER_STARTMENU"
+    "FOLDER_STARTUP"
+    "INFOFILENAME"
+    "ISRES"
+    "ISUSER"
+    "ISVERSION"
+    "MEDIA"
+    "MODE"
+    "PROGRAMFILES"
+    "SELECTED_LANGUAGE"
+    "SRCDIR"
+    "SRCDISK"
+    "SUPPORTDIR"
+    "TARGETDIR"
+    "TARGETDISK"
+    "UNINST"
+    "WINDIR"
+    "WINDISK"
+    "WINMAJOR"
+    "WINSYSDIR"
+    "WINSYSDISK")
   "System variables used in InstallShield 3 and 5.")
 
-(defvar installshield-types-list
-  (list
-   "BOOL"
-   "BYREF"
-   "CHAR"
-   "HIWORD"
-   "HWND"
-   "INT"
-   "LIST"
-   "LONG"
-   "LOWORD"
-   "LPSTR"
-   "NUMBER"
-   "NUMBERLIST"
-   "POINTER"
-   "QUAD"
-   "RGB"
-   "SHORT"
-   "STRINGLIST"
-   "STRING")
+(defconst installshield-types-list
+  '("BOOL"
+    "BYREF"
+    "CHAR"
+    "HIWORD"
+    "HWND"
+    "INT"
+    "LIST"
+    "LONG"
+    "LOWORD"
+    "LPSTR"
+    "NUMBER"
+    "NUMBERLIST"
+    "POINTER"
+    "QUAD"
+    "RGB"
+    "SHORT"
+    "STRINGLIST"
+    "STRING")
   "Type keywords used in InstallShield 3 and 5.")
 
 ;;; some might want to skip highlighting these to improve performance
-(defvar installshield-funarg-constants-list
-  (list
-   "AFTER"
-   "APPEND"
-   "ALLCONTENTS"
-   "BACKBUTTON"
-   "BACKGROUNDCAPTION"
-   "BACKGROUND"
-   "BACK"
-   "BASEMEMORY"
-   "BEFORE"
-   "BIOS"
-   "BITMAPICON"
-   "BK_BLUE"
-   "BK_GREEN"
-   "BK_RED"
-   "BLUE"
-   "BOOTUPDRIVE"
-   "CANCEL"
-   "CDROM_DRIVE"
-   "CDROM"
-   "CHECKBOX95"
-   "CHECKBOX"
-   "CHECKLINE"
-   "CHECKMARK"
-   "COLORS"
-   "COMMANDEX"
-   "COMMAND"
-   "COMP_NORMAL"
-   "COMP_UPDATE_DATE"
-   "COMP_UPDATE_SAME"
-   "COMP_UPDATE_VERSION"
-   "COMPACT"
-   "CONTINUE"
-   "CPU"
-   "CUSTOM"
-   "DATE"
-   "DEFWINDOWMODE"
-   "DIR_WRITEABLE"
-   "DIRECTORY"
-   "DISABLE"
-   "DISK_TOTALSPACE"
-   "DISK"
-   "DLG_OPTIONS"
-   "DLG_PATH"
-   "DLG_TEXT"
-   "DLG_ASK_YESNO"
-   "DLG_ENTER_DISK"
-   "DLG_ERR"
-   "DLG_INFO_ALTIMAGE"
-   "DLG_INFO_CHECKSELECTION"
-   "DLG_INFO_KUNITS"
-   "DLG_INFO_USEDECIMAL"
-   "DLG_MSG_INFORMATION"
-   "DLG_MSG_SEVERE"
-   "DLG_MSG_WARNING"
-   "DLG_STATUS"
-   "DLG_WARNING"
-   "DLG_USER_CAPTION"
-   "DRIVE"
-   "ENABLE"
-   "END_OF_FILE"
-   "END_OF_LIST"
-   "ENVSPACE"
-   "EQUALS"
-   "EXCLUDE_SUBDIR"
-   "EXCLUSIVE"
-   "EXISTS"
-   "EXIT"
-   "EXTENDED_MEMORY"
-   "EXTENSION_ONLY"
-   "FAILIFEXISTS"
-   "FALSE"
-   "FEEDBACK_FULL"
-   "FILE_ATTR_ARCHIVED"
-   "FILE_ATTR_DIRECTORY"
-   "FILE_ATTR_HIDDEN"
-   "FILE_ATTR_NORMAL"
-   "FILE_ATTR_READONLY"
-   "FILE_ATTR_SYSTEM"
-   "FILE_ATTRIBUTE"
-   "FILE_DATE"
-   "FILE_LINE_LENGTH"
-   "FILE_MODE_APPEND"
-   "FILE_MODE_BINARYREADONLY"
-   "FILE_MODE_BINARY"
-   "FILE_MODE_NORMAL"
-   "FILE_NO_VERSION"
-   "FILE_NOT_FOUND"
-   "FILE_SIZE"
-   "FILE_TIME"
-   "FILENAME_ONLY"
-   "FILENAME"
-   "FIXED_DRIVE"
-   "FOLDER_DESKTOP"
-   "FOLDER_PROGRAMS"
-   "FOLDER_STARTMENU"
-   "FOLDER_STARTUP"
-   "FREEENVSPACE"
-   "FULLWINDOWMODE"
-   "FULL"
-   "FONT_TITLE"
-   "GREATER_THAN"
-   "GREEN"
-   "HKEY_CLASSES_ROOT"
-   "HKEY_CURRENT_USER"
-   "HKEY_LOCAL_MACHINE"
-   "HKEY_USERS"
-   "HOURGLASS"
-   "INCLUDE_SUBDIR"
-   "INDVFILESTATUS"
-   "INFORMATION"
-   "IS_WINDOWSNT"
-   "IS_WINDOWS95"
-   "IS_WINDOWS"
-   "IS_WIN32S"
-   "ISTYPE"
-   "LANGUAGE_DRV"
-   "LANGUAGE"
-   "LESS_THAN"
-   "LIST_NULL"
-   "LISTFIRST"
-   "LISTNEXT"
-   "LOCKEDFILE"
-   "LOGGING"
-   "LOWER_LEFT"
-   "LOWER_RIGHT"
-   "MAGENTA"
-   "MOUSE_DRV"
-   "MOUSE"
-   "NETWORK_DRV"
-   "NETWORK"
-   "NEXT"
-   "NONEXCLUSIVE"
-   "NORMALMODE"
-   "NOSET"
-   "NOTEXISTS"
-   "NOWAIT"
-   "NO"
-   "OFF"
-   "ONLYDIR"
-   "ON"
-   "OSMAJOR"
-   "OSMINOR"
-   "OS"
-   "OTHER_FAILURE"
-   "PARALLEL"
-   "PARTIAL"
-   "PATH_EXISTS"
-   "PATH"
-   "RED"
-   "REGDB_APPPATH_DEFAULT"
-   "REGDB_APPPATH"
-   "REGDB_BINARY"
-   "REGDB_ERR_CONNECTIONEXISTS"
-   "REGDB_ERR_CORRUPTEDREGSITRY"
-   "REGDB_ERR_INITIALIZATION"
-   "REGDB_ERR_INVALIDHANDLE"
-   "REGDB_ERR_INVALIDNAME"
-   "REGDB_NUMBER"
-   "REGDB_STRING_EXPAND"
-   "REGDB_STRING_MULTI"
-   "REGDB_STRING"
-   "REGDB_UNINSTALL_NAME"
-   "REMOTE_DRIVE"
-   "REMOVALE_DRIVE"
-   "REPLACE_ITEM"
-   "REPLACE"
-   "RESET"
-   "RESTART"
-   "ROOT"
-   "SELFREGISTER"
-   "SERIAL"
-   "SET"
-   "SEVERE"
-   "SHAREDFILE"
-   "SHARE"
-   "SILENTMODE"
-   "SRCTARGETDIR"
-   "STATUSBAR"
-   "STATUSDLG"
-   "STATUSOLD"
-   "STATUS"
-   "STYLE_NORMAL"
-   "SW_MAXIMIZE"
-   "SW_MINIMIZE"
-   "SW_RESTORE"
-   "SW_SHOW"
-   "SYS_BOOTMACHINE"
-   "TIME"
-   "TRUE"
-   "TYPICAL"
-   "UPPER_LEFT"
-   "UPPER_RIGHT"
-   "VALID_PATH"
-   "VERSION"
-   "VIDEO"
-   "VOLUMELABEL"
-   "YELLOW"
-   "YES"
-   "WAIT"
-   "WARNING"
-   "WINMAJOR"
-   "WINMINOR"
-   "WIN32SINSTALLED"
-   "WIN32SMAJOR"
-   "WIN32SMINOR")
-  "Function argument constants used in InstallShield 3 and 5.")
+(defconst installshield-funarg-constants-list
+  '("AFTER"
+    "APPEND"
+    "ALLCONTENTS"
+    "BACKBUTTON"
+    "BACKGROUNDCAPTION"
+    "BACKGROUND"
+    "BACK"
+    "BASEMEMORY"
+    "BEFORE"
+    "BIOS"
+    "BITMAPICON"
+    "BK_BLUE"
+    "BK_GREEN"
+    "BK_RED"
+    "BLUE"
+    "BOOTUPDRIVE"
+    "CANCEL"
+    "CDROM_DRIVE"
+    "CDROM"
+    "CHECKBOX95"
+    "CHECKBOX"
+    "CHECKLINE"
+    "CHECKMARK"
+    "COLORS"
+    "COMMANDEX"
+    "COMMAND"
+    "COMP_NORMAL"
+    "COMP_UPDATE_DATE"
+    "COMP_UPDATE_SAME"
+    "COMP_UPDATE_VERSION"
+    "COMPACT"
+    "CONTINUE"
+    "CPU"
+    "CUSTOM"
+    "DATE"
+    "DEFWINDOWMODE"
+    "DIR_WRITEABLE"
+    "DIRECTORY"
+    "DISABLE"
+    "DISK_TOTALSPACE"
+    "DISK"
+    "DLG_OPTIONS"
+    "DLG_PATH"
+    "DLG_TEXT"
+    "DLG_ASK_YESNO"
+    "DLG_ENTER_DISK"
+    "DLG_ERR"
+    "DLG_INFO_ALTIMAGE"
+    "DLG_INFO_CHECKSELECTION"
+    "DLG_INFO_KUNITS"
+    "DLG_INFO_USEDECIMAL"
+    "DLG_MSG_INFORMATION"
+    "DLG_MSG_SEVERE"
+    "DLG_MSG_WARNING"
+    "DLG_STATUS"
+    "DLG_WARNING"
+    "DLG_USER_CAPTION"
+    "DRIVE"
+    "ENABLE"
+    "END_OF_FILE"
+    "END_OF_LIST"
+    "ENVSPACE"
+    "EQUALS"
+    "EXCLUDE_SUBDIR"
+    "EXCLUSIVE"
+    "EXISTS"
+    "EXIT"
+    "EXTENDED_MEMORY"
+    "EXTENSION_ONLY"
+    "FAILIFEXISTS"
+    "FALSE"
+    "FEEDBACK_FULL"
+    "FILE_ATTR_ARCHIVED"
+    "FILE_ATTR_DIRECTORY"
+    "FILE_ATTR_HIDDEN"
+    "FILE_ATTR_NORMAL"
+    "FILE_ATTR_READONLY"
+    "FILE_ATTR_SYSTEM"
+    "FILE_ATTRIBUTE"
+    "FILE_DATE"
+    "FILE_LINE_LENGTH"
+    "FILE_MODE_APPEND"
+    "FILE_MODE_BINARYREADONLY"
+    "FILE_MODE_BINARY"
+    "FILE_MODE_NORMAL"
+    "FILE_NO_VERSION"
+    "FILE_NOT_FOUND"
+    "FILE_SIZE"
+    "FILE_TIME"
+    "FILENAME_ONLY"
+    "FILENAME"
+    "FIXED_DRIVE"
+    "FOLDER_DESKTOP"
+    "FOLDER_PROGRAMS"
+    "FOLDER_STARTMENU"
+    "FOLDER_STARTUP"
+    "FREEENVSPACE"
+    "FULLWINDOWMODE"
+    "FULL"
+    "FONT_TITLE"
+    "GREATER_THAN"
+    "GREEN"
+    "HKEY_CLASSES_ROOT"
+    "HKEY_CURRENT_USER"
+    "HKEY_LOCAL_MACHINE"
+    "HKEY_USERS"
+    "HOURGLASS"
+    "INCLUDE_SUBDIR"
+    "INDVFILESTATUS"
+    "INFORMATION"
+    "IS_WINDOWSNT"
+    "IS_WINDOWS95"
+    "IS_WINDOWS"
+    "IS_WIN32S"
+    "ISTYPE"
+    "LANGUAGE_DRV"
+    "LANGUAGE"
+    "LESS_THAN"
+    "LIST_NULL"
+    "LISTFIRST"
+    "LISTNEXT"
+    "LOCKEDFILE"
+    "LOGGING"
+    "LOWER_LEFT"
+    "LOWER_RIGHT"
+    "MAGENTA"
+    "MOUSE_DRV"
+    "MOUSE"
+    "NETWORK_DRV"
+    "NETWORK"
+    "NEXT"
+    "NONEXCLUSIVE"
+    "NORMALMODE"
+    "NOSET"
+    "NOTEXISTS"
+    "NOWAIT"
+    "NO"
+    "OFF"
+    "ONLYDIR"
+    "ON"
+    "OSMAJOR"
+    "OSMINOR"
+    "OS"
+    "OTHER_FAILURE"
+    "PARALLEL"
+    "PARTIAL"
+    "PATH_EXISTS"
+    "PATH"
+    "RED"
+    "REGDB_APPPATH_DEFAULT"
+    "REGDB_APPPATH"
+    "REGDB_BINARY"
+    "REGDB_ERR_CONNECTIONEXISTS"
+    "REGDB_ERR_CORRUPTEDREGSITRY"
+    "REGDB_ERR_INITIALIZATION"
+    "REGDB_ERR_INVALIDHANDLE"
+    "REGDB_ERR_INVALIDNAME"
+    "REGDB_NUMBER"
+    "REGDB_STRING_EXPAND"
+    "REGDB_STRING_MULTI"
+    "REGDB_STRING"
+    "REGDB_UNINSTALL_NAME"
+    "REMOTE_DRIVE"
+    "REMOVALE_DRIVE"
+    "REPLACE_ITEM"
+    "REPLACE"
+    "RESET"
+    "RESTART"
+    "ROOT"
+    "SELFREGISTER"
+    "SERIAL"
+    "SET"
+    "SEVERE"
+    "SHAREDFILE"
+    "SHARE"
+    "SILENTMODE"
+    "SRCTARGETDIR"
+    "STATUSBAR"
+    "STATUSDLG"
+    "STATUSOLD"
+    "STATUS"
+    "STYLE_NORMAL"
+    "SW_MAXIMIZE"
+    "SW_MINIMIZE"
+    "SW_RESTORE"
+    "SW_SHOW"
+    "SYS_BOOTMACHINE"
+    "TIME"
+    "TRUE"
+    "TYPICAL"
+    "UPPER_LEFT"
+    "UPPER_RIGHT"
+    "VALID_PATH"
+    "VERSION"
+    "VIDEO"
+    "VOLUMELABEL"
+    "YELLOW"
+    "YES"
+    "WAIT"
+    "WARNING"
+    "WINMAJOR"
+    "WINMINOR"
+    "WIN32SINSTALLED"
+    "WIN32SMAJOR"
+    "WIN32SMINOR")
+  "Function argument constants used in InstallShield 3 and 5."))
 
 (defvar rul-generic-mode-syntax-table nil
   "Syntax table to use in rul-generic-mode buffers.")
@@ -1343,18 +1327,18 @@
 (setq rul-generic-mode-syntax-table
       (make-syntax-table c++-mode-syntax-table))
 
-(modify-syntax-entry ?\r "> b"   rul-generic-mode-syntax-table)
-(modify-syntax-entry ?\n "> b"   rul-generic-mode-syntax-table)
+(modify-syntax-entry ?\r "> b" rul-generic-mode-syntax-table)
+(modify-syntax-entry ?\n "> b" rul-generic-mode-syntax-table)
 
 (modify-syntax-entry ?/  ". 124b" rul-generic-mode-syntax-table)
 (modify-syntax-entry ?*  ". 23"   rul-generic-mode-syntax-table)
 
 ;; here manually instead
 (defun generic-rul-mode-setup-function ()
-  (make-local-variable	     'parse-sexp-ignore-comments)
-  (make-local-variable	     'comment-start)
-  (make-local-variable	     'comment-start-skip)
-  (make-local-variable	     'comment-end)
+  (make-local-variable 'parse-sexp-ignore-comments)
+  (make-local-variable 'comment-start)
+  (make-local-variable 'comment-start-skip)
+  (make-local-variable 'comment-end)
   (setq imenu-generic-expression
 	'((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1))
 	parse-sexp-ignore-comments t
@@ -1364,46 +1348,47 @@
 ;;; 	comment-start	     "//"
 ;;;	comment-start-skip	     ""
 	)
-  ;;     (set-syntax-table	      rul-generic-mode-syntax-table)
+  ;; (set-syntax-table rul-generic-mode-syntax-table)
   (setq font-lock-syntax-table rul-generic-mode-syntax-table))
 
 ;; moved mode-definition behind defun-definition to be warning-free - 15.11.02/RSan
 (define-generic-mode rul-generic-mode
   ;; Using "/*" and "*/" doesn't seem to be working right
-  (list "//" '("/*" . "*/" ))
-  installshield-statement-keyword-list
-  (list
-   ;; preprocessor constructs
-   '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
-     1 font-lock-string-face)
-   '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
-     (1 font-lock-reference-face)
-     (2 font-lock-variable-name-face nil t))
-   ;; indirect string constants
-   '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face)
-   ;; gotos
-   '("[ \t]*\\(\\sw+:\\)" 1 font-lock-reference-face)
-   '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
-     (1 font-lock-keyword-face)
-     (2 font-lock-reference-face nil t))
-   ;; system variables
-   (generic-make-keywords-list
-    installshield-system-variables-list
-    'font-lock-variable-name-face "[^_]" "[^_]")
-   ;; system functions
-   (generic-make-keywords-list
-    installshield-system-functions-list
-    'font-lock-function-name-face "[^_]" "[^_]")
-   ;; type keywords
-   (generic-make-keywords-list
-    installshield-types-list
-    'font-lock-type-face "[^_]" "[^_]")
-   ;; function argument constants
-   (generic-make-keywords-list
-    installshield-funarg-constants-list
-    'font-lock-variable-name-face "[^_]" "[^_]")) ; is this face the best choice?
-  (list "\\.[rR][uU][lL]$")
-  (list 'generic-rul-mode-setup-function)
+  '("//" ("/*" . "*/" ))
+  (eval-when-compile installshield-statement-keyword-list)
+  (eval-when-compile
+    (list
+     ;; preprocessor constructs
+     '("#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)"
+       1 font-lock-string-face)
+     '("#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"
+       (1 font-lock-reference-face)
+       (2 font-lock-variable-name-face nil t))
+     ;; indirect string constants
+     '("\\(@[A-Za-z][A-Za-z0-9_]+\\)" 1 font-lock-builtin-face)
+     ;; gotos
+     '("[ \t]*\\(\\sw+:\\)"           1 font-lock-reference-face)
+     '("\\<\\(goto\\)\\>[ \t]*\\(\\sw+\\)?"
+       (1 font-lock-keyword-face)
+       (2 font-lock-reference-face nil t))
+     ;; system variables
+     (generic-make-keywords-list
+      installshield-system-variables-list
+      font-lock-variable-name-face "[^_]" "[^_]")
+     ;; system functions
+     (generic-make-keywords-list
+      installshield-system-functions-list
+      font-lock-function-name-face "[^_]" "[^_]")
+     ;; type keywords
+     (generic-make-keywords-list
+      installshield-types-list
+      font-lock-type-face "[^_]" "[^_]")
+     ;; function argument constants
+     (generic-make-keywords-list
+      installshield-funarg-constants-list
+      font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice?
+  '("\\.[rR][uU][lL]$")
+  '(generic-rul-mode-setup-function)
   "Generic mode for InstallShield RUL files.")
 
 (define-skeleton rul-if
@@ -1432,24 +1417,25 @@
 
 ;; Additions by ACorreir@pervasive-sw.com (Alfred Correira)
 (define-generic-mode mailrc-generic-mode
-  (list ?#)
-  (list
-   "alias"
-   "else"
-   "endif"
-   "group"
-   "if"
-   "ignore"
-   "set"
-   "source"
-   "unset")
+  '(?#)
+  '("alias"
+    "else"
+    "endif"
+    "group"
+    "if"
+    "ignore"
+    "set"
+    "source"
+    "unset")
   '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
-     (2 font-lock-constant-face) (3 font-lock-variable-name-face))
+     (2 font-lock-constant-face)
+     (3 font-lock-variable-name-face))
     ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
-     (2 font-lock-constant-face) (3 font-lock-variable-name-face))
+     (2 font-lock-constant-face)
+     (3 font-lock-variable-name-face))
     ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
      (2 font-lock-variable-name-face)))
-  (list "\\.mailrc\\'")
+  '("\\.mailrc\\'")
   nil
   "Mode for mailrc files.")
 
@@ -1457,17 +1443,15 @@
 (when (memq 'inetd-conf-generic-mode generic-extras-enable-list)
 
 (define-generic-mode inetd-conf-generic-mode
-  (list ?#)
-  (list
-   "stream"
-   "dgram"
-   "tcp"
-   "udp"
-   "wait"
-   "nowait"
-   "internal")
-  '(("^\\([-A-Za-z0-9_]+\\)"
-     1 'font-lock-type-face))
+  '(?#)
+  '("stream"
+    "dgram"
+    "tcp"
+    "udp"
+    "wait"
+    "nowait"
+    "internal")
+  '(("^\\([-A-Za-z0-9_]+\\)" 1 font-lock-type-face))
   '("/etc/inetd.conf\\'")
   (list
    (function
@@ -1479,14 +1463,13 @@
 (when (memq 'etc-services-generic-mode generic-extras-enable-list)
 
 (define-generic-mode etc-services-generic-mode
-  (list ?#)
-  (list
-   "tcp"
-   "udp"
-   "ddp")
+  '(?#)
+  '("tcp"
+    "udp"
+    "ddp")
   '(("^\\([-A-Za-z0-9_]+\\)\\s-+\\([0-9]+\\)/"
-     (1 'font-lock-type-face)
-     (2 'font-lock-variable-name-face)))
+     (1 font-lock-type-face)
+     (2 font-lock-variable-name-face)))
   '("/etc/services\\'")
   (list
    (function
@@ -1499,35 +1482,36 @@
 
 (define-generic-mode etc-passwd-generic-mode
   nil              ;; No comment characters
-  (list "root")    ;; Only one keyword
-  (list
-   (list
-    (concat
-     "^"
-     ;; User name -- Never blank!
-     "\\([^:]+\\)"
-     ":"
-     ;; Password, UID and GID
-     (mapconcat
-      'identity
-      (make-list 3 "\\([^:]+\\)")
-      ":")
-     ":"
-     ;; GECOS/Name -- might be blank
-     "\\([^:]*\\)"
-     ":"
-     ;; Home directory and shell
-     "\\([^:]+\\)"
-     ":?"
-     "\\([^:]*\\)"
-     "$")
-    '(1 'font-lock-type-face)
-    '(5 'font-lock-variable-name-face)
-    '(6 'font-lock-constant-face)
-    '(7 'font-lock-warning-face))
-   '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$"
-     (1 'font-lock-type-face)
-     (4 'font-lock-variable-name-face)))
+  '("root")        ;; Only one keyword
+  (eval-when-compile
+    (list
+     (list
+      (concat
+       "^"
+       ;; User name -- Never blank!
+       "\\([^:]+\\)"
+       ":"
+       ;; Password, UID and GID
+       (mapconcat
+	'identity
+	(make-list 3 "\\([^:]+\\)")
+	":")
+       ":"
+       ;; GECOS/Name -- might be blank
+       "\\([^:]*\\)"
+       ":"
+       ;; Home directory and shell
+       "\\([^:]+\\)"
+       ":?"
+       "\\([^:]*\\)"
+       "$")
+      '(1 font-lock-type-face)
+      '(5 font-lock-variable-name-face)
+      '(6 font-lock-constant-face)
+      '(7 font-lock-warning-face))
+     '("^\\([^:]+\\):\\([^:]*\\):\\([0-9]+\\):\\(.*\\)$"
+       (1 font-lock-type-face)
+       (4 font-lock-variable-name-face))))
   '("/etc/passwd\\'" "/etc/group\\'")
   (list
    (function
@@ -1539,46 +1523,45 @@
 (when (memq 'etc-fstab-generic-mode generic-extras-enable-list)
 
 (define-generic-mode etc-fstab-generic-mode
-  (list ?#)
-  (list
-   "adfs"
-   "affs"
-   "autofs"
-   "coda"
-   "coherent"
-   "cramfs"
-   "devpts"
-   "efs"
-   "ext2"
-   "ext3"
-   "hfs"
-   "hpfs"
-   "iso9660"
-   "jfs"
-   "minix"
-   "msdos"
-   "ncpfs"
-   "nfs"
-   "ntfs"
-   "proc"
-   "qnx4"
-   "reiserfs"
-   "romfs"
-   "smbfs"
-   "sysv"
-   "tmpfs"
-   "udf"
-   "ufs"
-   "umsdos"
-   "vfat"
-   "xenix"
-   "xfs"
-   "swap"
-   "auto"
-   "ignore")
+  '(?#)
+  '("adfs"
+    "affs"
+    "autofs"
+    "coda"
+    "coherent"
+    "cramfs"
+    "devpts"
+    "efs"
+    "ext2"
+    "ext3"
+    "hfs"
+    "hpfs"
+    "iso9660"
+    "jfs"
+    "minix"
+    "msdos"
+    "ncpfs"
+    "nfs"
+    "ntfs"
+    "proc"
+    "qnx4"
+    "reiserfs"
+    "romfs"
+    "smbfs"
+    "sysv"
+    "tmpfs"
+    "udf"
+    "ufs"
+    "umsdos"
+    "vfat"
+    "xenix"
+    "xfs"
+    "swap"
+    "auto"
+    "ignore")
   '(("^\\([/-A-Za-z0-9_]+\\)\\s-+\\([/-A-Za-z0-9_]+\\)"
-     (1 'font-lock-type-face)
-     (2 'font-lock-variable-name-face)))
+     (1 font-lock-type-face)
+     (2 font-lock-variable-name-face)))
   '("/etc/[v]*fstab\\'")
   (list
    (function
@@ -1587,42 +1570,44 @@
 	    '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1))))))))
 
 ;; From Jacques Duthen <jacques.duthen@sncf.fr>
-(defvar show-tabs-generic-mode-font-lock-defaults-1
-  '( ;; trailing spaces must come before...
+(eval-when-compile
+
+(defconst show-tabs-generic-mode-font-lock-defaults-1
+  '(;; trailing spaces must come before...
     ("[ \t]+$" . 'show-tabs-space-face)
     ;; ...embedded tabs
     ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face))))
 
-(defvar show-tabs-generic-mode-font-lock-defaults-2
-  '( ;; trailing spaces must come before...
+(defconst show-tabs-generic-mode-font-lock-defaults-2
+  '(;; trailing spaces must come before...
     ("[ \t]+$" . 'show-tabs-space-face)
     ;; ...tabs
-    ("\t+" . 'show-tabs-tab-face)))
+    ("\t+" . 'show-tabs-tab-face))))
 
 (defface show-tabs-tab-face
-  '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
-    (((class grayscale) (background dark))  (:foreground "DimGray"   :weight bold))
-    (((class color)     (background light)) (:foreground "red"))
-    (((class color)     (background dark))  (:foreground "red"))
+  '((((class grayscale) (background light)) (:background "DimGray"   :weight bold))
+    (((class grayscale) (background dark))  (:background "LightGray" :weight bold))
+    (((class color)     (background light)) (:background "red"))
+    (((class color)     (background dark))  (:background "red"))
     (t (:weight bold)))
   "Font Lock mode face used to highlight TABs."
   :group 'show-tabs)
 
 (defface show-tabs-space-face
-  '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold))
-    (((class grayscale) (background dark))  (:foreground "DimGray"   :weight bold))
-    (((class color)     (background light)) (:foreground "yellow"))
-    (((class color)     (background dark))  (:foreground "yellow"))
+  '((((class grayscale) (background light)) (:background "DimGray"   :weight bold))
+    (((class grayscale) (background dark))  (:background "LightGray" :weight bold))
+    (((class color)     (background light)) (:background "yellow"))
+    (((class color)     (background dark))  (:background "yellow"))
     (t (:weight bold)))
   "Font Lock mode face used to highlight spaces."
   :group 'show-tabs)
 
 (define-generic-mode show-tabs-generic-mode
-  () ;; no comment char
-  () ;; no keywords
-  show-tabs-generic-mode-font-lock-defaults-1
-  () ;; no auto-mode-alist
-  ;; (list 'show-tabs-generic-mode-hook-fun)
+  nil ;; no comment char
+  nil ;; no keywords
+  (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1)
+  nil ;; no auto-mode-alist
+  ;; '(show-tabs-generic-mode-hook-fun)
   nil
   "Generic mode to show tabs and trailing spaces")
 
@@ -1632,31 +1617,29 @@
 
 (define-generic-mode named-boot-generic-mode
   ;; List of comment characters
-  (list ?\;)
+  '(?\;)
   ;; List of keywords
-  (list "cache" "primary" "secondary" "forwarders" "limit" "options"
-	"directory" "check-names")
+  '("cache" "primary" "secondary" "forwarders" "limit" "options"
+    "directory" "check-names")
   ;; List of additional font-lock-expressions
-  (list
-   (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face)
-   (list "^directory\\s-+\\(.*\\)" 1 'font-lock-variable-name-face)
-   (list "^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)"
-	 (list 2 'font-lock-variable-name-face)
-	 (list 3 'font-lock-constant-face)))
+  '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)
+    ("^directory\\s-+\\(.*\\)"              1 font-lock-variable-name-face)
+    ("^\\(primary\\|cache\\)\\s-+\\([.A-Za-z]+\\)\\s-+\\(.*\\)"
+     (2 font-lock-variable-name-face)
+     (3 font-lock-constant-face)))
   ;; List of additional automode-alist expressions
-  (list "/etc/named.boot\\'")
+  '("/etc/named.boot\\'")
   ;; List of set up functions to call
   nil)
 
 (define-generic-mode named-database-generic-mode
   ;; List of comment characters
-  (list ?\;)
+  '(?\;)
   ;; List of keywords
-  (list "IN" "NS" "CNAME" "SOA" "PTR" "MX" "A")
+  '("IN" "NS" "CNAME" "SOA" "PTR" "MX" "A")
   ;; List of additional font-lock-expressions
-  (list
-   (list "\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 'font-lock-constant-face)
-   (list "^\\([.A-Za-z0-9]+\\)" 1 'font-lock-variable-name-face))
+  '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)
+    ("^\\([.A-Za-z0-9]+\\)"                 1 font-lock-variable-name-face))
   ;; List of additional automode-alist expressions
   nil
   ;; List of set up functions to call
@@ -1672,13 +1655,13 @@
 
 (define-generic-mode resolve-conf-generic-mode
   ;; List of comment characters
-  (list ?#)
+  '(?#)
   ;; List of keywords
-  (list "nameserver" "domain" "search" "sortlist" "options")
+  '("nameserver" "domain" "search" "sortlist" "options")
   ;; List of additional font-lock-expressions
   nil
   ;; List of additional automode-alist expressions
-  (list "/etc/resolv[e]?.conf\\'")
+  '("/etc/resolv[e]?.conf\\'")
   ;; List of set up functions to call
   nil)
 
@@ -1688,130 +1671,125 @@
 
 (define-generic-mode spice-generic-mode
   nil
-  (list
-   "and"
-   "cccs"
-   "ccvs"
-   "delay"
-   "nand"
-   "nor"
-   "npwl"
-   "or"
-   "par"
-   "ppwl"
-   "pwl"
-   "vccap"
-   "vccs"
-   "vcr"
-   "vcvs")
-  '(
-    ("^\\s-*\\([*].*\\)"                1 'font-lock-comment-face)
-    (" \\(\\$ .*\\)$"                   1 'font-lock-comment-face)
-    ("^\\(\\$ .*\\)$"                   1 'font-lock-comment-face)
-    ("\\([*].*\\)"                      1 'font-lock-comment-face)
-    ("^\\([+]\\)"                       1 'font-lock-string-face)
-    ("^\\s-*\\([.]\\w+\\>\\)"           1 'font-lock-keyword-face)
-    ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face)
-    ("\\('[^']+'\\)"                    1 'font-lock-string-face)
-    ("\\(\"[^\"]+\"\\)"                 1 'font-lock-string-face))
-  (list "\\.[sS][pP]\\'"
-	"\\.[sS][pP][iI]\\'"
-	"\\.[sS][pP][iI][cC][eE]\\'"
-	"\\.[iI][nN][cC]\\'")
+  '("and"
+    "cccs"
+    "ccvs"
+    "delay"
+    "nand"
+    "nor"
+    "npwl"
+    "or"
+    "par"
+    "ppwl"
+    "pwl"
+    "vccap"
+    "vccs"
+    "vcr"
+    "vcvs")
+  '(("^\\s-*\\([*].*\\)"                1 font-lock-comment-face)
+    (" \\(\\$ .*\\)$"                   1 font-lock-comment-face)
+    ("^\\(\\$ .*\\)$"                   1 font-lock-comment-face)
+    ("\\([*].*\\)"                      1 font-lock-comment-face)
+    ("^\\([+]\\)"                       1 font-lock-string-face)
+    ("^\\s-*\\([.]\\w+\\>\\)"           1 font-lock-keyword-face)
+    ("\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face)
+    ("\\('[^']+'\\)"                    1 font-lock-string-face)
+    ("\\(\"[^\"]+\"\\)"                 1 font-lock-string-face))
+  '("\\.[sS][pP]\\'"
+    "\\.[sS][pP][iI]\\'"
+    "\\.[sS][pP][iI][cC][eE]\\'"
+    "\\.[iI][nN][cC]\\'")
   (list
    'generic-bracket-support
    ;; Make keywords case-insensitive
    (function
     (lambda()
-      (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)))))
+      (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
   "Generic mode for SPICE circuit netlist files.")
 
 (define-generic-mode ibis-generic-mode
-  (list ?|)
+  '(?|)
   nil
-  '(
-    ("[[]\\([^]]*\\)[]]"          1 'font-lock-keyword-face)
-    ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face))
-  (list "\\.[iI][bB][sS]\\'")
-  (list 'generic-bracket-support)
+  '(("[[]\\([^]]*\\)[]]"          1 font-lock-keyword-face)
+    ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face))
+  '("\\.[iI][bB][sS]\\'")
+  '(generic-bracket-support)
   "Generic mode for IBIS circuit netlist files.")
 
 (define-generic-mode astap-generic-mode
   nil
-  (list
-   "analyze"
-   "description"
-   "elements"
-   "execution"
-   "features"
-   "functions"
-   "ground"
-   "model"
-   "outputs"
-   "print"
-   "run"
-   "controls"
-   "table")
-  '(("^\\s-*\\([*].*\\)"      1 'font-lock-comment-face)
-    (";\\s-*\\([*].*\\)"      1 'font-lock-comment-face)
-    ("^\\s-*\\([.]\\w+\\>\\)" 1 'font-lock-keyword-face)
-    ("\\('[^']+'\\)"          1 'font-lock-string-face)
-    ("\\(\"[^\"]+\"\\)"       1 'font-lock-string-face)
-    ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 'font-lock-variable-name-face))
-  (list "\\.[aA][pP]\\'"
-	"\\.[aA][sS][xX]\\'"
-	"\\.[aA][sS][tT][aA][pP]\\'"
-	"\\.[pP][sS][pP]\\'"
-	"\\.[dD][eE][cC][kK]\\'"
-	"\\.[gG][oO][dD][aA][tT][aA]")
+  '("analyze"
+    "description"
+    "elements"
+    "execution"
+    "features"
+    "functions"
+    "ground"
+    "model"
+    "outputs"
+    "print"
+    "run"
+    "controls"
+    "table")
+  '(("^\\s-*\\([*].*\\)"      1 font-lock-comment-face)
+    (";\\s-*\\([*].*\\)"      1 font-lock-comment-face)
+    ("^\\s-*\\([.]\\w+\\>\\)" 1 font-lock-keyword-face)
+    ("\\('[^']+'\\)"          1 font-lock-string-face)
+    ("\\(\"[^\"]+\"\\)"       1 font-lock-string-face)
+    ("[(,]\\s-*\\(\\([.]\\|_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face))
+  '("\\.[aA][pP]\\'"
+    "\\.[aA][sS][xX]\\'"
+    "\\.[aA][sS][tT][aA][pP]\\'"
+    "\\.[pP][sS][pP]\\'"
+    "\\.[dD][eE][cC][kK]\\'"
+    "\\.[gG][oO][dD][aA][tT][aA]")
   (list
    'generic-bracket-support
    ;; Make keywords case-insensitive
    (function
     (lambda()
-      (setq font-lock-defaults (list 'generic-font-lock-defaults nil t)))))
+      (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
   "Generic mode for ASTAP circuit netlist files.")
 
 (define-generic-mode etc-modules-conf-generic-mode
   ;; List of comment characters
-  (list ?#)
+  '(?#)
   ;; List of keywords
-  (list
-   "above"
-   "alias"
-   "below"
-   "define"
-   "depfile"
-   "else"
-   "elseif"
-   "endif"
-   "if"
-   "include"
-   "insmod_opt"
-   "install"
-   "keep"
-   "options"
-   "path"
-   "generic_stringfile"
-   "pcimapfile"
-   "isapnpmapfile"
-   "usbmapfile"
-   "parportmapfile"
-   "ieee1394mapfile"
-   "pnpbiosmapfile"
-   "probe"
-   "probeall"
-   "prune"
-   "post-install"
-   "post-remove"
-   "pre-install"
-   "pre-remove"
-   "remove"
-   "persistdir")
+  '("above"
+    "alias"
+    "below"
+    "define"
+    "depfile"
+    "else"
+    "elseif"
+    "endif"
+    "if"
+    "include"
+    "insmod_opt"
+    "install"
+    "keep"
+    "options"
+    "path"
+    "generic_stringfile"
+    "pcimapfile"
+    "isapnpmapfile"
+    "usbmapfile"
+    "parportmapfile"
+    "ieee1394mapfile"
+    "pnpbiosmapfile"
+    "probe"
+    "probeall"
+    "prune"
+    "post-install"
+    "post-remove"
+    "pre-install"
+    "pre-remove"
+    "remove"
+    "persistdir")
   ;; List of additional font-lock-expressions
   nil
   ;; List of additional automode-alist expressions
-  (list "/etc/modules.conf" "/etc/conf.modules")
+  '("/etc/modules.conf" "/etc/conf.modules")
   ;; List of set up functions to call
   nil)
 
--- a/lisp/generic.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/generic.el	Sun Mar 27 17:29:43 2005 +0000
@@ -125,9 +125,11 @@
 ;; Internal Variables
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defvar generic-font-lock-defaults nil
-  "Global defaults for font-lock in a generic mode.")
-(make-variable-buffer-local 'generic-font-lock-defaults)
+(defvar generic-font-lock-keywords nil
+  "Keywords for `font-lock-defaults' in a generic mode.")
+(make-variable-buffer-local 'generic-font-lock-keywords)
+(defvaralias 'generic-font-lock-defaults 'generic-font-lock-keywords)
+(make-obsolete-variable 'generic-font-lock-defaults 'generic-font-lock-keywords "22.1")
 
 ;;;###autoload
 (defvar generic-mode-list nil
@@ -253,13 +255,15 @@
 
     (generic-mode-set-comments comments)
 
-    ;; Font-lock functionality
-    ;; Font-lock-defaults are always set even if there are no keywords
+    ;; Font-lock functionality.
+    ;; Font-lock-defaults is always set even if there are no keywords
     ;; or font-lock expressions, so comments can be highlighted.
-    (setq generic-font-lock-defaults nil)
-    (generic-mode-set-font-lock  keywords font-lock-list)
-    (make-local-variable 'font-lock-defaults)
-    (setq font-lock-defaults (list 'generic-font-lock-defaults nil))
+    (setq generic-font-lock-keywords
+	  (append
+	   (when keywords
+	     (list (generic-make-keywords-list keywords font-lock-keyword-face)))
+	   font-lock-list))
+    (setq font-lock-defaults '(generic-font-lock-keywords nil))
 
     ;; Call a list of functions
     (mapcar 'funcall funs)
@@ -348,16 +352,8 @@
 			   st))
     (set-syntax-table st)))
 
-(defun generic-mode-set-font-lock (keywords font-lock-expressions)
-  "Set up font-lock functionality for generic mode."
-  (setq generic-font-lock-defaults
-	(append
-	 (when keywords
-	   (list (generic-make-keywords-list keywords font-lock-keyword-face)))
-	 font-lock-expressions)))
-
-;; Support for [KEYWORD] constructs found in INF, INI and Samba files
 (defun generic-bracket-support ()
+  "Imenu support for [KEYWORD] constructs found in INF, INI and Samba files."
   (setq imenu-generic-expression
 	'((nil "^\\[\\(.*\\)\\]" 1))
         imenu-case-fold-search t))
@@ -405,8 +401,9 @@
 	      (ini-generic-mode)))))
 
 (and generic-use-find-file-hook
-    (add-hook 'find-file-hooks 'generic-mode-find-file-hook))
+    (add-hook 'find-file-hook 'generic-mode-find-file-hook))
 
+;;;###autoload
 (defun generic-make-keywords-list (keywords-list face &optional prefix suffix)
   "Return a regular expression matching the specified KEYWORDS-LIST.
 The regexp is highlighted with FACE."
--- a/lisp/gnus/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/gnus/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,7 @@
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* nnmaildir.el: Replace `illegal' with `invalid'.
+
 2005-03-22  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* gnus-start.el (gnus-display-time-event-handler):
--- a/lisp/gnus/ChangeLog.2	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/gnus/ChangeLog.2	Sun Mar 27 17:29:43 2005 +0000
@@ -2916,7 +2916,7 @@
 	* spam-report.el (spam-report-gmane): gnus-summary-article-number
 	is not necessary, just use the function parameter
 
-2003-04-29  Karl Pflysterer  <sigurd@12move.de>
+2003-04-29  Karl Pfl,Ad(Bsterer  <sigurd@12move.de>
 
 	* spam-stat.el (spam-stat-save): No longer font-locks the file
 	when saving
--- a/lisp/gnus/nnmaildir.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/gnus/nnmaildir.el	Sun Mar 27 17:29:43 2005 +0000
@@ -978,7 +978,7 @@
 	(throw 'return nil))
       (when (save-match-data (string-match "[\0/\t]" gname))
 	(setf (nnmaildir--srv-error nnmaildir--cur-server)
-	      (concat "Illegal characters (null, tab, or /) in group name: "
+	      (concat "Invalid characters (null, tab, or /) in group name: "
 		      gname))
 	(throw 'return nil))
       (setq groups (nnmaildir--srv-groups nnmaildir--cur-server))
@@ -1023,7 +1023,7 @@
 	(throw 'return nil))
       (when (save-match-data (string-match "[\0/\t]" new-name))
 	(setf (nnmaildir--srv-error nnmaildir--cur-server)
-	      (concat "Illegal characters (null, tab, or /) in group name: "
+	      (concat "Invalid characters (null, tab, or /) in group name: "
 		      new-name))
 	(throw 'return nil))
       (if (string-equal gname new-name) (throw 'return t))
--- a/lisp/hi-lock.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/hi-lock.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; hi-lock.el --- minor mode for interactive automatic highlighting
 
-;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2005  Free Software Foundation, Inc.
 
 ;; Author: David M. Koppelman, koppel@ee.lsu.edu
 ;; Keywords: faces, minor-mode, matching, display
@@ -292,7 +292,7 @@
             (> (prefix-numeric-value arg) 0)))
     ;; Turned on.
     (when (and (not hi-lock-mode-prev) hi-lock-mode)
-      (add-hook 'find-file-hooks 'hi-lock-find-file-hook)
+      (add-hook 'find-file-hook 'hi-lock-find-file-hook)
       (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)
       (when (eq nil font-lock-defaults)
 	(setq font-lock-defaults '(nil)))
@@ -313,7 +313,7 @@
                   hi-lock-file-patterns nil)
             (when font-lock-mode (hi-lock-refontify)))))
       (define-key-after menu-bar-edit-menu [hi-lock] nil)
-      (remove-hook 'find-file-hooks 'hi-lock-find-file-hook)
+      (remove-hook 'find-file-hook 'hi-lock-find-file-hook)
       (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook))))
 
 
@@ -568,5 +568,5 @@
 
 (provide 'hi-lock)
 
-;;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066
+;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066
 ;;; hi-lock.el ends here
--- a/lisp/hilit-chg.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/hilit-chg.el	Sun Mar 27 17:29:43 2005 +0000
@@ -993,12 +993,12 @@
 
 ;; Global Highlight Changes mode is modeled after Global Font-lock mode.
 ;; Three hooks are used to gain control.  When Global Changes Mode is
-;; enabled, `find-file-hooks' and `change-major-mode-hook' are set.
-;; `find-file-hooks' is called when visiting a file, the new mode is
+;; enabled, `find-file-hook' and `change-major-mode-hook' are set.
+;; `find-file-hook' is called when visiting a file, the new mode is
 ;; known at this time.
 ;; `change-major-mode-hook' is called when a buffer is changing mode.
 ;; This could be because of finding a file in which case
-;; `find-file-hooks' has already been called and has done its work.
+;; `find-file-hook' has already been called and has done its work.
 ;; However, it also catches the case where a new mode is being set by
 ;; the user.  However, it is called from `kill-all-variables' and at
 ;; this time the mode is the old mode, which is not what we want.
@@ -1080,18 +1080,18 @@
 	(setq global-highlight-changes t)
 	(message "Turning ON Global Highlight Changes mode in %s state"
 		 highlight-changes-global-initial-state)
-	(add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
-	(add-hook 'find-file-hooks 'hilit-chg-check-global)
+	;; FIXME: Not sure what this was intended to do.  --Stef
+	;; (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
+	(add-hook 'find-file-hook 'hilit-chg-check-global)
 	(if highlight-changes-global-changes-existing-buffers
 	    (hilit-chg-update-all-buffers
 	     highlight-changes-global-initial-state)))
 
     (message "Turning OFF global Highlight Changes mode")
-    (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
-    (remove-hook 'find-file-hooks 'hilit-chg-check-global)
-    (remove-hook 'post-command-hook
-		 'hilit-chg-post-command-hook)
-    (remove-hook 'find-file-hooks 'hilit-chg-check-global)
+    ;; FIXME: Not sure what this was intended to do.  --Stef
+    ;; (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
+    (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
+    (remove-hook 'find-file-hook 'hilit-chg-check-global)
     (if highlight-changes-global-changes-existing-buffers
 	(hilit-chg-update-all-buffers nil))))
 
--- a/lisp/icomplete.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/icomplete.el	Sun Mar 27 17:29:43 2005 +0000
@@ -183,6 +183,7 @@
 
   (and (window-minibuffer-p (selected-window))
        (not executing-kbd-macro)
+       minibuffer-completion-table
        ;; (or minibuffer-completing-file-name
        (not (functionp minibuffer-completion-table)))) ;; )
 
--- a/lisp/image-mode.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/image-mode.el	Sun Mar 27 17:29:43 2005 +0000
@@ -36,18 +36,12 @@
 
 (require 'image)
 
-;;;###autoload (push '("\\.jpg\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.jpeg\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.tiff\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.tif\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.xbm\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.xpm\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.pbm\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.pgm\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.ppm\\'" . image-mode) auto-mode-alist)
-;;;###autoload (push '("\\.pnm\\'" . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.jpe?g\\'"    . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.png\\'"      . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.gif\\'"      . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.tiff?\\'"    . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
+;;;###autoload (push '("\\.x[bp]m\\'"   . image-mode-maybe) auto-mode-alist)
 
 (defvar image-mode-map
   (let ((map (make-sparse-keymap)))
@@ -65,9 +59,64 @@
   (setq mode-name "Image")
   (setq major-mode 'image-mode)
   (use-local-map image-mode-map)
+  (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
+  (if (not (get-text-property (point-min) 'display))
+      (image-toggle-display)
+    ;; Set next vars when image is already displayed but local
+    ;; variables were cleared by kill-all-local-variables
+    (setq cursor-type nil truncate-lines t))
   (run-mode-hooks 'image-mode-hook)
-  (message (substitute-command-keys
-	    "Type \\[image-toggle-display] to view the image as an image.")))
+  (message (concat (substitute-command-keys
+		    "Type \\[image-toggle-display] to view the image as ")
+		   (if (get-text-property (point-min) 'display)
+		       "text" "an image") ".")))
+
+;;;###autoload
+(define-minor-mode image-minor-mode
+  "Toggle Image minor mode.
+With arg, turn Image minor mode on if arg is positive, off otherwise.
+See the command `image-mode' for more information on this mode."
+  nil " Image" image-mode-map
+  :group 'image
+  :version "22.1"
+  (if (not image-minor-mode)
+      (image-toggle-display-text)
+    (if (get-text-property (point-min) 'display)
+	(setq cursor-type nil truncate-lines t))
+    (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)
+    (message (concat (substitute-command-keys
+		      "Type \\[image-toggle-display] to view the image as ")
+		     (if (get-text-property (point-min) 'display)
+			 "text" "an image") "."))))
+
+;;;###autoload
+(defun image-mode-maybe ()
+  "Set major or minor mode for image files.
+Set Image major mode only when there are no other major modes
+associated with a filename in `auto-mode-alist'.  When an image
+filename matches another major mode in `auto-mode-alist' then
+set that major mode and Image minor mode.
+
+See commands `image-mode' and `image-minor-mode' for more
+information on these modes."
+  (interactive)
+  (let* ((mode-alist
+	  (delq nil (mapcar
+		     (lambda (elt)
+		       (unless (memq (or (car-safe (cdr elt)) (cdr elt))
+				     '(image-mode image-mode-maybe))
+			 elt))
+		     auto-mode-alist))))
+    (if (assoc-default buffer-file-name mode-alist 'string-match)
+	(let ((auto-mode-alist mode-alist))
+	  (set-auto-mode)
+	  (image-minor-mode t))
+      (image-mode))))
+
+(defun image-toggle-display-text ()
+  "Showing the text of the image file."
+  (if (get-text-property (point-min) 'display)
+      (image-toggle-display)))
 
 (defun image-toggle-display ()
   "Start or stop displaying an image file as the actual image.
@@ -84,7 +133,8 @@
 	(set-buffer-modified-p modified)
 	(kill-local-variable 'cursor-type)
 	(kill-local-variable 'truncate-lines)
-	(message "Repeat this command to go back to displaying the image"))
+	(if (called-interactively-p)
+	    (message "Repeat this command to go back to displaying the image")))
     ;; Turn the image data into a real image, but only if the whole file
     ;; was inserted
     (let* ((data
@@ -100,6 +150,7 @@
 		      ;; read-only when we're visiting the file (as
 		      ;; opposed to just inserting it).
 		      read-only t front-sticky (read-only)))
+	   (inhibit-read-only t)
 	   (buffer-undo-list t)
 	   (modified (buffer-modified-p)))
       (add-text-properties (point-min) (point-max) props)
@@ -110,7 +161,8 @@
       ;; This just makes the arrow displayed in the right fringe
       ;; area look correct when the image is wider than the window.
       (setq truncate-lines t)
-      (message "Repeat this command to go back to displaying the file as text"))))
+      (if (called-interactively-p)
+	  (message "Repeat this command to go back to displaying the file as text")))))
 
 (provide 'image-mode)
 
--- a/lisp/international/mule-cmds.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/international/mule-cmds.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1734,7 +1734,7 @@
 
 (reset-language-environment)
 
-(defun set-display-table-and-terminal-coding-system (language-name)
+(defun set-display-table-and-terminal-coding-system (language-name &optional coding-system)
   "Set up the display table and terminal coding system for LANGUAGE-NAME."
   (let ((coding (get-language-info language-name 'unibyte-display)))
     (if coding
@@ -1748,7 +1748,7 @@
 	(dotimes (i 128)
 	  (aset standard-display-table (+ i 128) nil))))
     (or (eq window-system 'pc)
-	(set-terminal-coding-system coding))))
+	(set-terminal-coding-system (or coding-system coding)))))
 
 (defun set-language-environment (language-name)
   "Set up multi-lingual environment for using LANGUAGE-NAME.
@@ -2446,7 +2446,8 @@
 	  ;; we are using single-byte characters,
 	  ;; so the display table and terminal coding system are irrelevant.
 	  (when default-enable-multibyte-characters
-	    (set-display-table-and-terminal-coding-system language-name))
+	    (set-display-table-and-terminal-coding-system
+	     language-name coding-system))
 
 	  ;; Set the `keyboard-coding-system' if appropriate (tty
 	  ;; only).  At least X and MS Windows can generate
@@ -2476,9 +2477,16 @@
 	  (set-keyboard-coding-system code-page-coding)
 	  (set-terminal-coding-system code-page-coding))))
 
-    ;; On Darwin, file names are always encoded in utf-8, no matter the locale.
     (when (eq system-type 'darwin)
-      (setq default-file-name-coding-system 'utf-8))
+      ;; On Darwin, file names are always encoded in utf-8, no matter
+      ;; the locale.
+      (setq default-file-name-coding-system 'utf-8)
+      ;; Mac OS X's Terminal.app by default uses utf-8 regardless of
+      ;; the locale.
+      (when (and (null window-system)
+		 (equal (getenv "TERM_PROGRAM") "Apple_Terminal"))
+	(set-terminal-coding-system 'utf-8)
+	(set-keyboard-coding-system 'utf-8)))
 
     ;; Default to A4 paper if we're not in a C, POSIX or US locale.
     ;; (See comments in Flocale_info.)
--- a/lisp/international/mule-util.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/international/mule-util.el	Sun Mar 27 17:29:43 2005 +0000
@@ -327,6 +327,7 @@
 	 (mapc (function (lambda (x) (set (car x) (cdr x))))
 	       prio-list)
 	 (set-coding-priority (mapcar #'car prio-list))
+	 (update-coding-systems-internal)
 	 (detect-coding-region ,from ,to))
      ;; We must restore the internal database.
      (set-coding-priority coding-category-list)
--- a/lisp/international/mule.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/international/mule.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1542,8 +1542,8 @@
 ;;; FILE I/O
 
 (defcustom auto-coding-alist
-  '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . no-conversion)
-    ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . no-conversion)
+  '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . no-conversion)
+    ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion)
     ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion)
     ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion)
     ("/#[^/]+#\\'" . emacs-mule))
--- a/lisp/mail/mailalias.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mail/mailalias.el	Sun Mar 27 17:29:43 2005 +0000
@@ -111,9 +111,10 @@
 This value is used when the value of `mail-directory-function'
 is `mail-directory-process'.  The value should be a list
 of the form (COMMAND ARG ...), where each of the list elements
-is evaluated.  When `mail-directory-requery' is non-nil, during
-evaluation of these elements, the variable `pattern' contains
-the partial input being completed.
+is evaluated.  COMMAND should evaluate to a string.  When
+`mail-directory-requery' is non-nil, during evaluation of these
+elements, the variable `pattern' contains the partial input being
+completed.  `pattern' is nil when `mail-directory-requery' is nil.
 
 The value might look like this:
 
@@ -149,7 +150,7 @@
   "Alist of local users, aliases and directory entries as available.
 Elements have the form (MAILNAME) or (MAILNAME . FULLNAME).
 If the value means t, it means the real value should be calculated
-for the next use.  this is used in `mail-complete'.")
+for the next use.  This is used in `mail-complete'.")
 
 (defvar mail-local-names t
   "Alist of local users.
@@ -469,7 +470,9 @@
 				     mail-aliases))
 				(if (consp mail-local-names)
 				    mail-local-names)
-				(or directory mail-directory-names))
+				(or directory 
+				    (when (consp mail-directory-names)
+				      mail-directory-names)))
 			(lambda (a b)
 			  ;; should cache downcased strings
 			  (string< (downcase (car a))
@@ -478,8 +481,10 @@
 
 
 (defun mail-directory (pattern)
-  "Call directory to get names matching PATTERN or all if nil.
-Calls `mail-directory-function' and applies `mail-directory-parser' to output."
+  "Use mail-directory facility to get user names matching PATTERN.
+If PATTERN is nil, get all the defined user names.
+This function calls `mail-directory-function' to query the directory,
+then uses `mail-directory-parser' to parse the output it returns."
   (save-excursion
     (message "Querying directory...")
     (set-buffer (generate-new-buffer " *mail-directory*"))
@@ -509,8 +514,9 @@
 (defun mail-directory-process (pattern)
   "Run a shell command to output names in directory.
 See `mail-directory-process'."
-  (apply 'call-process (eval (car mail-directory-process)) nil t nil
-	 (mapcar 'eval (cdr mail-directory-process))))
+  (when (consp mail-directory-process)
+    (apply 'call-process (eval (car mail-directory-process)) nil t nil
+	   (mapcar 'eval (cdr mail-directory-process)))))
 
 ;; This should handle a dialog.  Currently expects port to spit out names.
 (defun mail-directory-stream (pattern)
--- a/lisp/mail/supercite.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mail/supercite.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; supercite.el --- minor mode for citing mail and news replies
 
-;; Copyright (C) 1993, 1997, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1997, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
 ;; Maintainer:    FSF
@@ -243,7 +243,7 @@
 
 (defcustom sc-cite-region-limit t
   "*This variable controls automatic citation of yanked text.
-Legal values are:
+Valid values are:
 
 non-nil   -- cite the entire region, regardless of its size
 nil       -- do not cite the region at all
@@ -347,7 +347,7 @@
 
 (defcustom sc-nuke-mail-headers 'all
   "*Controls mail header nuking.
-Used in conjunction with `sc-nuke-mail-header-list'.  Legal values are:
+Used in conjunction with `sc-nuke-mail-header-list'.  Valid values are:
 
 `all'       -- nuke all mail headers
 `none'      -- don't nuke any mail headers
@@ -796,7 +796,7 @@
 	    nonentry-func '(sc-mail-nuke-header-line)))
      ;; we never get far enough to interpret a frame if s-n-m-h == 'none
      ((eq sc-nuke-mail-headers 'none))
-     (t (error "Illegal value for sc-nuke-mail-headers: %s"
+     (t (error "Invalid value for sc-nuke-mail-headers: %s"
 	       sc-nuke-mail-headers))
      )					; end-cond
     (append
--- a/lisp/mh-e/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mh-e/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,11 @@
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* mh-e.el, mh-identity.el, mh-mime.el: Replace `legal' with `valid'.
+
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* mh-e.el: Replace `illegal' with `invalid'.
+
 2004-09-07  Stefan  <monnier@iro.umontreal.ca>
 
 	* mh-inc.el (mh-inc-spool-list): Correctly declare the external var.
--- a/lisp/mh-e/mh-e.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mh-e/mh-e.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,7 +1,7 @@
 ;;; mh-e.el --- GNU Emacs interface to the MH mail system
 
 ;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93, 94, 95, 97, 1999,
-;;  2000, 01, 02, 03, 2004 Free Software Foundation, Inc.
+;;  2000, 01, 02, 03, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -1526,7 +1526,7 @@
 ways.
 
 If you provide the prefix argument (\\[universal-argument]) to these commands,
-then you will be prompted for the message range. This can be any legal MH
+then you will be prompted for the message range. This can be any valid MH
 range which can include messages, sequences, and the abbreviations (described
 in the mh(1) man page):
 
@@ -2146,7 +2146,7 @@
 (defun mh-greaterp (msg1 msg2)
   "Return the greater of two message indicators MSG1 and MSG2.
 Strings are \"smaller\" than numbers.
-Legal values are things like \"cur\", \"last\", 1, and 1820."
+Valid values are things like \"cur\", \"last\", 1, and 1820."
   (if (numberp msg1)
       (if (numberp msg2)
           (> msg1 msg2)
@@ -2158,7 +2158,7 @@
 (defun mh-lessp (msg1 msg2)
   "Return the lesser of two message indicators MSG1 and MSG2.
 Strings are \"smaller\" than numbers.
-Legal values are things like \"cur\", \"last\", 1, and 1820."
+Valid values are things like \"cur\", \"last\", 1, and 1820."
   (not (mh-greaterp msg1 msg2)))
 
 
@@ -2306,7 +2306,7 @@
 (defun mh-define-sequence (seq msgs)
   "Define the SEQ to contain the list of MSGS.
 Do not mark pseudo-sequences or empty sequences.
-Signals an error if SEQ is an illegal name."
+Signals an error if SEQ is an invalid name."
   (if (and msgs
            (mh-valid-seq-p seq)
            (not (mh-folder-name-p seq)))
--- a/lisp/mh-e/mh-identity.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mh-e/mh-identity.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; mh-identity.el --- Multiple identify support for MH-E.
 
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Peter S. Galbraith <psg@debian.org>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -122,7 +122,7 @@
   "Return the handler for a FIELD or nil if none set.
 The field name is downcased. If the FIELD begins with the character
 `:', then it must have a special handler defined in
-`mh-identity-handlers', else return an error since it is not a legal
+`mh-identity-handlers', else return an error since it is not a valid
 message header."
   (or (cdr (assoc (downcase field) mh-identity-handlers))
       (and (eq (aref field 0) ?:)
--- a/lisp/mh-e/mh-mime.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/mh-e/mh-mime.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; mh-mime.el --- MH-E support for composing MIME messages
 
-;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Bill Wohler <wohler@newt.com>
 ;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -197,7 +198,7 @@
     ("text/richtext") ("text/x-vcard") ("text/xml")
 
     ("video/mpeg") ("video/quicktime"))
-  "Legal MIME content types.
+  "Valid MIME content types.
 See documentation for \\[mh-edit-mhn].")
 
 ;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One:
@@ -224,7 +225,7 @@
     ("tftp")            ; RFC2046 Trivial File Transfer Protocol
     ("url")             ; RFC2017 URL scheme MIME access-type Protocol
     ("wais"))           ; RFC1738 Wide Area Information Servers
-  "Legal MIME access-type values.")
+  "Valid MIME access-type values.")
 
 ;;;###mh-autoload
 (defun mh-mhn-compose-insertion (filename type description attributes)
--- a/lisp/midnight.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/midnight.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; midnight.el --- run something every midnight, e.g., kill old buffers
 
-;;; Copyright (C) 1998, 2004 Free Software Foundation, Inc.
+;;; Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Sam Steingold <sds@usa.net>
 ;; Maintainer: Sam Steingold <sds@usa.net>
@@ -215,7 +215,7 @@
 Sets the first argument SYMB (which must be symbol `midnight-delay')
 to its second argument TM."
   (assert (eq symb 'midnight-delay) t
-          "Illegal argument to `midnight-delay-set': `%s'")
+          "Invalid argument to `midnight-delay-set': `%s'")
   (set symb tm)
   (when (timerp midnight-timer) (cancel-timer midnight-timer))
   (setq midnight-timer
--- a/lisp/progmodes/cperl-mode.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/cperl-mode.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; cperl-mode.el --- Perl code editing commands for Emacs
 
-;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004
+;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004,2005
 ;;     Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich and Bob Olson
@@ -713,7 +713,7 @@
 
 The main trick (to make $ a \"backslash\") makes constructions like
 ${aaa} look like unbalanced braces.  The only trick I can think of is
-to insert it as $ {aaa} (legal in perl5, not in perl4).
+to insert it as $ {aaa} (valid in perl5, not in perl4).
 
 Similar problems arise in regexps, when /(\\s|$)/ should be rewritten
 as /($|\\s)/.  Note that such a transposition is not always possible.
--- a/lisp/progmodes/ebnf-abn.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-abn.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF)
 
-;; Copyright (C) 2004 Free Sofware Foundation, Inc.
+;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -518,7 +518,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; end of rule
        ((eq token 'end-of-rule)
 	'end-of-rule)
@@ -600,7 +600,7 @@
 	((= (following-char) ?\n)
 	 t)
 	(t
-	 (error "Illegal character"))
+	 (error "Invalid character"))
 	))
 
 
--- a/lisp/progmodes/ebnf-bnf.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-bnf.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-bnf.el --- parser for EBNF
 
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 ;; Free Sofware Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -461,7 +461,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; default
        ((eq token 'default)
 	(forward-char)
@@ -470,7 +470,7 @@
 	    (prog1
 		(ebnf-bnf-lex)
 	      (setq ebnf-default-p t))
-	  (error "Illegal `default' element")))
+	  (error "Invalid `default' element")))
        ;; integer
        ((eq token 'integer)
 	(setq ebnf-bnf-lex (ebnf-buffer-substring "0-9"))
@@ -550,7 +550,7 @@
 	 (forward-char)
 	 t)
 	(t
-	 (error "Illegal character"))
+	 (error "Invalid character"))
 	))
 
 
--- a/lisp/progmodes/ebnf-dtd.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-dtd.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML)
 
-;; Copyright (C) 2004 Free Sofware Foundation, Inc.
+;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -1181,7 +1181,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; beginning of declaration:
        ;; <?name, <!ATTLIST, <!DOCTYPE, <!ELEMENT, <!ENTITY, <!NOTATION
        ((eq token 'less-than)
@@ -1322,7 +1322,7 @@
 	 (forward-char 3)
 	 t)
 	(t
-	 (error "Illegal character"))
+	 (error "Invalid character"))
 	))
 
 
--- a/lisp/progmodes/ebnf-ebx.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-ebx.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX)
 
-;; Copyright (C) 2004 Free Sofware Foundation, Inc.
+;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -453,7 +453,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; end of rule
        ((eq token 'end-of-rule)
 	'end-of-rule)
--- a/lisp/progmodes/ebnf-iso.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-iso.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-iso.el --- parser for ISO EBNF
 
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 ;; Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -112,7 +112,7 @@
 ;;
 ;; ISO EBNF accepts the characters given by <character> production above,
 ;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED
-;; (^L), any other characters are illegal.  But ebnf2ps accepts also the
+;; (^L), any other characters are invalid.  But ebnf2ps accepts also the
 ;; european 8-bit accentuated characters (from \240 to \377) and underscore
 ;; (_).
 ;;
@@ -427,7 +427,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; integer
        ((eq token 'integer)
 	(setq ebnf-iso-lex (ebnf-buffer-substring "0-9"))
@@ -527,7 +527,7 @@
 	       (forward-char)
 	       (setq pair (1+ pair))))
 	    (t
-	     (error "Illegal character"))
+	     (error "Invalid character"))
 	    ))))
 
 
--- a/lisp/progmodes/ebnf-yac.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf-yac.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf-yac.el --- parser for Yacc/Bison
 
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 ;; Free Sofware Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -346,7 +346,7 @@
 	'end-of-input)
        ;; error
        ((eq token 'error)
-	(error "Illegal character"))
+	(error "Invalid character"))
        ;; "string"
        ((eq token 'string)
 	(setq ebnf-yac-lex (ebnf-get-string))
@@ -425,7 +425,7 @@
        ((= (following-char) ?\')
 	(ebnf-string " -&(-~" ?\' "character"))
        (t
-	(error "Illegal character"))
+	(error "Invalid character"))
        )))
   (ebnf-yac-skip-spaces))
 
@@ -476,7 +476,7 @@
 	       (forward-char)
 	       (setq not-end nil)))
 	    (t
-	     (error "Illegal character"))
+	     (error "Invalid character"))
 	    ))))
 
 
--- a/lisp/progmodes/ebnf2ps.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/ebnf2ps.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript
 
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
 ;; Free Software Foundation, Inc.
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -5499,7 +5499,7 @@
      ;;(skip-chars-forward (concat chars "\240-\377") ebnf-limit)
      (skip-chars-forward (concat chars ebnf-8-bit-chars) ebnf-limit)
      (if (or (eobp) (/= (following-char) eos-char))
-	 (error "Illegal %s: missing `%c'" kind eos-char)
+	 (error "Invalid %s: missing `%c'" kind eos-char)
        (forward-char)
        (1- (point))))))
 
--- a/lisp/progmodes/flymake.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/flymake.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; flymake.el -- a universal on-the-fly syntax checker
 
-;; Copyright (C) 2003 Free Software Foundation
+;; Copyright (C) 2003, 2005  Free Software Foundation
 
 ;; Author:  Pavel Kobiakov <pk_at_work@yahoo.com>
 ;; Maintainer: Pavel Kobiakov <pk_at_work@yahoo.com>
@@ -49,17 +49,17 @@
       (if test (make-hash-table :test test) (make-hash-table))
     (makehash test)))
 
-(defun flymake-float-time ()
-  (if (featurep 'xemacs)
-      (let ((tm (current-time)))
-	(multiple-value-bind (s0 s1 s2) (current-time)
-			     (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2))))
-    (float-time)))
+(defalias 'flymake-float-time
+  (if (fboundp 'float-time)
+      'float-time
+    (lambda ()
+      (multiple-value-bind (s0 s1 s2) (current-time)
+	(+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2))))))
 
 (defsubst flymake-replace-regexp-in-string (regexp rep str)
-  (if (featurep 'xemacs)
-      (replace-in-string str regexp rep)
-    (replace-regexp-in-string regexp rep str)))
+  (if (fboundp 'replace-regexp-in-string)
+      (replace-regexp-in-string regexp rep str)
+    (replace-in-string str regexp rep)))
 
 (defun flymake-split-string (str pattern)
   "Split, then remove first and/or last in case it's empty."
@@ -71,22 +71,22 @@
     splitted))
 
 (defsubst flymake-get-temp-dir ()
-  (if (featurep 'xemacs)
+  (if (fboundp 'temp-directory)
       (temp-directory)
     temporary-file-directory))
 
-(defun flymake-line-beginning-position ()
-  (save-excursion
-    (beginning-of-line)
-    (point)))
+(defalias 'flymake-line-beginning-position
+  (if (fboundp 'line-beginning-position)
+      'line-beginning-position
+    (lambda (&optional arg) (save-excursion (beginning-of-line arg) (point)))))
 
-(defun flymake-line-end-position ()
-  (save-excursion
-    (end-of-line)
-    (point)))
+(defalias 'flymake-line-end-position
+  (if (fboundp 'line-end-position)
+      'line-end-position
+    (lambda (&optional arg) (save-excursion (end-of-line arg) (point)))))
 
 (defun flymake-popup-menu (pos menu-data)
-  (if (featurep 'xemacs)
+  (if (and (fboundp 'popup-menu) (fboundp 'make-event))
       (let* ((x-pos       (nth 0 (nth 0 pos)))
 	     (y-pos       (nth 1 (nth 0 pos)))
 	     (fake-event-props  '(button 1 x 1 y 1)))
@@ -104,9 +104,9 @@
 				menu-items))
     (list menu-title (cons "" menu-commands))))
 
-(defun flymake-nop ())
+(if (featurep 'xemacs) (progn
 
-(if (featurep 'xemacs) (progn
+(defun flymake-nop ())
 
 (defun flymake-make-xemacs-menu (menu-data)
   (let* ((menu-title     (nth 0 menu-data))
@@ -134,19 +134,19 @@
 
 (defun flymake-current-row ()
   "Return current row number in current frame."
-  (if (featurep 'xemacs)
-      (count-lines (window-start) (point))
-    (+ (car (cdr (window-edges))) (count-lines (window-start) (point)))))
+  (if (fboundp 'window-edges)
+      (+ (car (cdr (window-edges))) (count-lines (window-start) (point)))
+    (count-lines (window-start) (point))))
 
 (defun flymake-selected-frame ()
-  (if (featurep 'xemacs)
-      (selected-window)
-    (selected-frame)))
+  (if (fboundp 'window-edges)
+      (selected-frame)
+    (selected-window)))
 
 ;;;; ]]
 
 (defcustom flymake-log-level -1
-  "Logging level, only messages with level > flymake-log-level will not be logged
+  "Logging level, only messages with level lower or equal will be logged.
 -1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG"
   :group 'flymake
   :type 'integer)
@@ -170,7 +170,7 @@
     tmp))
 
 (defun flymake-set-at (list pos val)
-  "Set VAL at position POS in LIST"
+  "Set VAL at position POS in LIST."
   (let ((tmp (copy-sequence list)))	; (???)
     (setcar (nthcdr pos tmp) val)
     tmp))
@@ -199,8 +199,7 @@
 
   (if (eq buffer (current-buffer))
       (symbol-value var-name)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (symbol-value var-name))))
 
 (defun flymake-set-buffer-var (buffer var-name var-value)
@@ -210,8 +209,7 @@
 
   (if (eq buffer (current-buffer))
       (set var-name var-value)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (set var-name var-value))))
 
 (defvar flymake-buffer-data (flymake-makehash)
@@ -231,7 +229,7 @@
 (defun flymake-set-buffer-value (buffer name value)
   (puthash name value (flymake-get-buffer-data buffer)))
 
-(defvar flymake-output-residual nil "")
+(defvar flymake-output-residual nil)
 
 (make-variable-buffer-local 'flymake-output-residual)
 
@@ -253,31 +251,30 @@
     (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name)
     (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name)
     (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name)
-					;                                            (".+\\.cpp$" 1)
-					;                                            (".+\\.java$" 3)
-					;                                            (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$")
-					;                                                ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
-					;                                            (".+\\.idl$" 1)
-					;                                            (".+\\.odl$" 1)
-					;                                            (".+[0-9]+\\.tex$" 2 (".+\\.tex$")
-					;                                                ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 ))
-					;                                            (".+\\.tex$" 1)
+    ;; (".+\\.cpp$" 1)
+    ;; (".+\\.java$" 3)
+    ;; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$")
+    ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
+    ;; (".+\\.idl$" 1)
+    ;; (".+\\.odl$" 1)
+    ;; (".+[0-9]+\\.tex$" 2 (".+\\.tex$")
+    ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 ))
+    ;; (".+\\.tex$" 1)
     )
   "*Files syntax checking is allowed for."
   :group 'flymake
   :type '(repeat (string symbol symbol symbol)))
 
 (defun flymake-get-file-name-mode-and-masks (file-name)
-  "Return the corresponding entry from 'flymake-allowed-file-name-masks'."
+  "Return the corresponding entry from `flymake-allowed-file-name-masks'."
   (unless (stringp file-name)
     (error "Invalid file-name"))
-  (let ((count           (length flymake-allowed-file-name-masks))
-	(idx             0)
+  (let ((fnm flymake-allowed-file-name-masks)
 	(mode-and-masks  nil))
-    (while (and (not mode-and-masks) (< idx count))
-      (if (string-match (nth 0 (nth idx flymake-allowed-file-name-masks)) file-name)
-	  (setq mode-and-masks (cdr (nth idx flymake-allowed-file-name-masks))))
-      (setq idx (1+ idx)))
+    (while (and (not mode-and-masks) fnm)
+      (if (string-match (car (car fnm)) file-name)
+	  (setq mode-and-masks (cdr (car fnm))))
+      (setq fnm (cdr fnm)))
     (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks))
     mode-and-masks))
 
@@ -289,8 +286,8 @@
 (defun flymake-get-init-function (file-name)
   "Return init function to be used for the file."
   (let* ((init-f  (nth 0 (flymake-get-file-name-mode-and-masks file-name))))
-					;(flymake-log 0 "calling %s" init-f)
-					;(funcall init-f (current-buffer))
+    ;;(flymake-log 0 "calling %s" init-f)
+    ;;(funcall init-f (current-buffer))
     init-f))
 
 (defun flymake-get-cleanup-function (file-name)
@@ -325,15 +322,13 @@
 	(flymake-get-buildfile-from-cache source-dir-name))
     (let* ((buildfile-dir          nil)
 	   (buildfile              nil)
-	   (dir-count              (length dirs))
-	   (dir-idx                0)
 	   (found                  nil))
-      (while (and (not found) (< dir-idx dir-count))
-	(setq buildfile-dir (concat source-dir-name (nth dir-idx dirs)))
+      (while (and (not found) dirs)
+	(setq buildfile-dir (concat source-dir-name (car dirs)))
 	(setq buildfile (concat buildfile-dir "/" buildfile-name))
 	(when (file-exists-p buildfile)
 	  (setq found t))
-	(setq dir-idx (1+ dir-idx)))
+	(setq dirs (cdr dirs)))
       (if found
 	  (progn
 	    (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name)
@@ -359,39 +354,23 @@
   (equal (flymake-fix-file-name file-name-one)
 	 (flymake-fix-file-name file-name-two)))
 
-(defun flymake-ensure-ends-with-slash (filename)
-  ;; Should this really be file-name-as-directory?
-  (if (not (= (elt filename (1- (length filename))) (string-to-char "/")))
-      (concat filename "/")
-    filename))
-
 (defun flymake-get-common-file-prefix (string-one string-two)
   "Return common prefix for two file names STRING-ONE and STRING-TWO."
-  (when (and string-one string-two)
-    (let* ((slash-pos-one  -1)
-	   (slash-pos-two  -1)
-	   (done           nil)
-	   (prefix         nil))
-      (setq string-one (flymake-ensure-ends-with-slash string-one))
-      (setq string-two (flymake-ensure-ends-with-slash string-two))
-      (while (not done)
-	(setq slash-pos-one (string-match "/" string-one (1+ slash-pos-one)))
-	(setq slash-pos-two (string-match "/" string-two (1+ slash-pos-two)))
-	(if (and slash-pos-one slash-pos-two
-		 (= slash-pos-one slash-pos-two)
-		 (string= (substring string-one 0 slash-pos-one) (substring string-two 0 slash-pos-two)))
-	    (progn
-	      (setq prefix (substring string-one 0 (1+ slash-pos-one))))
-	  (setq done t)))
-      prefix)))
+  (setq string-one (file-name-as-directory string-one))
+  (setq string-two (file-name-as-directory string-two))
+  (let ((n (compare-strings string-one nil nil string-two nil nil)))
+    (if (eq n t) string-one
+      (setq n (abs (1+ n)))
+      (file-name-directory (substring string-one 0 n)))))
 
 (defun flymake-build-relative-filename (from-dir to-dir)
   "Return rel: FROM-DIR/rel == TO-DIR."
+  ;; FIXME: Why not use `file-relative-name'?
   (if (not (equal (elt from-dir 0) (elt to-dir 0)))
       (error "First chars in file names %s, %s must be equal (same drive)"
 	     from-dir to-dir)
-    (let* ((from (flymake-ensure-ends-with-slash (flymake-fix-file-name from-dir)))
-	   (to   (flymake-ensure-ends-with-slash (flymake-fix-file-name to-dir)))
+    (let* ((from (file-name-as-directory (flymake-fix-file-name from-dir)))
+	   (to   (file-name-as-directory (flymake-fix-file-name to-dir)))
 	   (prefix      (flymake-get-common-file-prefix from to))
 	   (from-suffix (substring from (length prefix)))
 	   (up-count    (length (flymake-split-string from-suffix "[/]")))
@@ -413,7 +392,7 @@
       (or rel "./"))))
 
 (defcustom flymake-master-file-dirs '("." "./src" "./UnitTest")
-  "Dirs where to llok for master files."
+  "Dirs where to look for master files."
   :group 'flymake
   :type '(repeat (string)))
 
@@ -426,35 +405,33 @@
 (defvar flymake-included-file-name)
 
 (defun flymake-find-possible-master-files (file-name master-file-dirs masks)
-  "Find (by name and location) all posible master files.
-Mater files are .cpp and .c for and .h. Files are searched for
+  "Find (by name and location) all possible master files.
+Master files are .cpp and .c for and .h. Files are searched for
 starting from the .h directory and max max-level parent dirs.
 File contents are not checked."
-  (let* ((dir-idx    0)
-	 (dir-count  (length master-file-dirs))
+  (let* ((dirs master-file-dirs)
 	 (files  nil)
-	 (done   nil)
-	 (masks-count (length masks)))
+	 (done   nil))
 
-    (while (and (not done) (< dir-idx dir-count))
-      (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) "/" (nth dir-idx master-file-dirs)))
-	     (masks-idx 0))
-	(while (and (file-exists-p dir) (not done) (< masks-idx masks-count))
-	  (let* ((mask        (nth masks-idx masks))
-		 (dir-files   (directory-files dir t mask))
-		 (file-count  (length dir-files))
-		 (file-idx    0))
+    (while (and (not done) dirs)
+      (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name))
+			  "/" (car dirs)))
+	     (masks masks))
+	(while (and (file-exists-p dir) (not done) masks)
+	  (let* ((mask        (car masks))
+		 (dir-files   (directory-files dir t mask)))
 
-	    (flymake-log 3 "dir %s, %d file(s) for mask %s" dir file-count mask)
-	    (while (and (not done) (< file-idx file-count))
-	      (when (not (file-directory-p (nth file-idx dir-files)))
-		(setq files (cons (nth file-idx dir-files) files))
+	    (flymake-log 3 "dir %s, %d file(s) for mask %s"
+			 dir (length dir-files) mask)
+	    (while (and (not done) dir-files)
+	      (when (not (file-directory-p (car dir-files)))
+		(setq files (cons (car dir-files) files))
 		(when (>= (length files) flymake-master-file-count-limit)
 		  (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit)
 		  (setq done t)))
-	      (setq file-idx (1+ file-idx))))
-	  (setq masks-idx (1+ masks-idx))))
-      (setq dir-idx (1+ dir-idx)))
+	      (setq dir-files (cdr dir-files))))
+	  (setq masks (cdr masks))))
+      (setq dirs (cdr dirs)))
     (when files
       (let ((flymake-included-file-name (file-name-nondirectory file-name)))
 	(setq files (sort files 'flymake-master-file-compare))))
@@ -512,32 +489,32 @@
 		  (when (flymake-check-include source-file-name inc-path inc-name include-dirs)
 		    (setq found t)
 		    ;;  replace-match is not used here as it fails in
-		    ;; xemacs with 'last match not a buffer' error as
+		    ;; XEmacs with 'last match not a buffer' error as
 		    ;; check-includes calls replace-in-string
-		    (flymake-replace-region (current-buffer) match-beg match-end
+		    (flymake-replace-region match-beg match-end
 					    (file-name-nondirectory patched-source-file-name))))
 		(forward-line 1)))
 	    (when found
 	      (flymake-save-buffer-in-file (current-buffer) patched-master-file-name)))
-					;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer))
+	;;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer))
 	(kill-buffer master-file-temp-buffer)))
-					;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found)
+    ;;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found)
     (when found
       (flymake-log 2 "found master file %s" master-file-name))
     found))
 
-(defun flymake-replace-region (buffer beg end rep)
+(defun flymake-replace-region (beg end rep)
   "Replace text in BUFFER in region (BEG END) with REP."
   (save-excursion
-    (delete-region beg end)
-    (goto-char beg)
-    (insert rep)))
+    (goto-char end)
+    ;; Insert before deleting, so as to better preserve markers's positions.
+    (insert rep)
+    (delete-region beg end)))
 
 (defun flymake-read-file-to-temp-buffer (file-name)
   "Insert contents of FILE-NAME into newly created temp buffer."
   (let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name))))))
-    (save-excursion
-      (set-buffer temp-buffer)
+    (with-current-buffer temp-buffer
       (insert-file-contents file-name))
     temp-buffer))
 
@@ -545,8 +522,7 @@
   "Copy contents of BUFFER into newly created temp buffer."
   (let ((contents     nil)
 	(temp-buffer  nil))
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (setq contents (buffer-string))
 
       (setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer)))))
@@ -559,18 +535,17 @@
 Return t if it can be found via include path using INC-PATH and INC-NAME."
   (if (file-name-absolute-p inc-path)
       (flymake-same-files source-file-name (concat inc-path "/" inc-name))
-    (let* ((count      (length include-dirs))
-	   (idx        0)
-	   (file-name  nil)
+    (let* ((file-name  nil)
 	   (found      nil))
-      (while (and (not found) (< idx count))
-	(setq file-name (concat (file-name-directory source-file-name) "/" (nth idx include-dirs)))
+      (while (and (not found) include-dirs)
+	(setq file-name (concat (file-name-directory source-file-name)
+				"/" (car include-dirs)))
 	(if (> (length inc-path) 0)
 	    (setq file-name (concat file-name "/" inc-path)))
 	(setq file-name (concat file-name "/" inc-name))
 	(when (flymake-same-files source-file-name file-name)
 	  (setq found t))
-	(setq idx (1+ idx)))
+	(setq include-dirs (cdr include-dirs)))
       found)))
 
 (defun flymake-find-buffer-for-file (file-name)
@@ -617,9 +592,8 @@
 (defun flymake-save-buffer-in-file (buffer file-name)
   (or buffer
       (error "Invalid buffer"))
-  (save-excursion
+  (with-current-buffer buffer
     (save-restriction
-      (set-buffer buffer)
       (widen)
       (make-directory (file-name-directory file-name) 1)
       (write-region (point-min) (point-max) file-name nil 566)))
@@ -664,8 +638,7 @@
 	      (delete-process process)
 
 	      (when source-buffer
-		(save-excursion
-		  (set-buffer source-buffer)
+		(with-current-buffer source-buffer
 
 		  (flymake-parse-residual source-buffer)
 		  (flymake-post-syntax-check source-buffer exit-status command)
@@ -705,8 +678,7 @@
 
 (defun flymake-parse-output-and-residual (source-buffer output)
   "Split OUTPUT into lines, merge in residual if necessary."
-  (save-excursion
-    (set-buffer source-buffer)
+  (with-current-buffer source-buffer
     (let* ((buffer-residual     (flymake-get-buffer-output-residual source-buffer))
 	   (total-output        (if buffer-residual (concat buffer-residual output) output))
 	   (lines-and-residual  (flymake-split-output total-output))
@@ -720,8 +692,7 @@
 
 (defun flymake-parse-residual (source-buffer)
   "Parse residual if it's non empty."
-  (save-excursion
-    (set-buffer source-buffer)
+  (with-current-buffer source-buffer
     (when (flymake-get-buffer-output-residual source-buffer)
       (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines
 						      (flymake-get-buffer-new-err-info source-buffer)
@@ -845,8 +816,7 @@
 
 (defun flymake-highlight-err-lines (buffer err-info-list)
   "Highlight error lines in BUFFER using info from ERR-INFO-LIST."
-  (save-excursion
-    (set-buffer buffer)
+  (with-current-buffer buffer
     (let* ((idx    0)
 	   (count  (length err-info-list)))
       (while (< idx count)
@@ -866,19 +836,18 @@
       (overlay-put ov 'help-echo      tooltip-text)
       (overlay-put ov 'flymake-overlay  t)
       (overlay-put ov 'priority 100)
-					;+(flymake-log 3 "created overlay %s" ov)
+      ;;+(flymake-log 3 "created overlay %s" ov)
       ov)
     (flymake-log 3 "created an overlay at (%d-%d)" beg end)))
 
 (defun flymake-delete-own-overlays (buffer)
   "Delete all flymake overlays in BUFFER."
-  (save-excursion
-    (set-buffer buffer)
+  (with-current-buffer buffer
     (let ((ov (overlays-in (point-min) (point-max))))
       (while (consp ov)
 	(when (flymake-overlay-p (car ov))
 	  (delete-overlay (car ov))
-					;+(flymake-log 3 "deleted overlay %s" ov)
+	  ;;+(flymake-log 3 "deleted overlay %s" ov)
 	  )
 	(setq ov (cdr ov))))))
 
@@ -890,11 +859,12 @@
     (while (consp ov)
       (when (flymake-overlay-p (car ov))
 	(setq has-flymake-overlays t))
-      (setq ov (cdr ov)))))
+      (setq ov (cdr ov)))
+    has-flymake-overlays))
 
 (defface flymake-errline-face
-					;+   '((((class color)) (:foreground "OrangeRed" :bold t :underline t))
-					;+   '((((class color)) (:underline "OrangeRed"))
+  ;;+   '((((class color)) (:foreground "OrangeRed" :bold t :underline t))
+  ;;+   '((((class color)) (:underline "OrangeRed"))
   '((((class color)) (:background "LightPink"))
     (t (:bold t)))
   "Face used for marking error lines."
@@ -970,7 +940,8 @@
 
 (defun flymake-split-output (output)
   "Split OUTPUT into lines.
-Return last one as residual if it does not end with newline char. Returns ((lines) residual)."
+Return last one as residual if it does not end with newline char.
+Returns ((LINES) RESIDUAL)."
   (when (and output (> (length output) 0))
     (let* ((lines (flymake-split-string output "[\n\r]+"))
 	   (complete (equal "\n" (char-to-string (aref output (1- (length output))))))
@@ -984,21 +955,18 @@
   "Grab error line patterns from ORIGINAL-LIST in compile.el format.
 Convert it to flymake internal format."
   (let* ((converted-list '()))
-    (mapcar
-     (lambda (item)
-       (setq item (cdr item))
-       (let ((regexp (nth 0 item))
-	     (file (nth 1 item))
-	     (line (nth 2 item))
-	     (col (nth 3 item))
-	     end-line)
-	 (if (consp file)	(setq file (car file)))
-	 (if (consp line)	(setq end-line (cdr line) line (car line)))
-	 (if (consp col)	(setq col (car col)))
-
-	 (when (not (functionp line))
-	   (setq converted-list (cons (list regexp file line col) converted-list)))))
-     original-list)
+    (dolist (item original-list)
+      (setq item (cdr item))
+      (let ((regexp (nth 0 item))
+	    (file (nth 1 item))
+	    (line (nth 2 item))
+	    (col (nth 3 item)))
+	(if (consp file)	(setq file (car file)))
+	(if (consp line)	(setq line (car line)))
+	(if (consp col)	(setq col (car col)))
+	
+	(when (not (functionp line))
+	  (setq converted-list (cons (list regexp file line col) converted-list)))))
     converted-list))
 
 (eval-when-compile
@@ -1007,40 +975,43 @@
 (defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text
   (append
    '(
-					; MS Visual C++ 6.0
+     ;; MS Visual C++ 6.0
      ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
-					; jikes
+     ;; jikes
      ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
-					; MS midl
+     ;; MS midl
      ("midl[ ]*:[ ]*\\(command line error .*\\)"
       nil nil nil 1)
-					; MS C#
+     ;; MS C#
      ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: \\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
       1 3 nil 4)
-					; perl
+     ;; perl
      ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)
-					; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1)
-					; ant/javac
+     ;; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1)
+     ;; ant/javac
      (" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)"
       2 4 nil 5))
    ;; compilation-error-regexp-alist)
    (flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist))
-  "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx). Use flymake-reformat-err-line-patterns-from-compile-el to add patterns from compile.el")
+  "Patterns for matching error/warning lines.
+\(REGEXP FILE-IDX LINE-IDX ERR-TEXT-IDX).
+Use `flymake-reformat-err-line-patterns-from-compile-el' to add patterns
+from compile.el")
 
-					;(defcustom flymake-err-line-patterns
-					;  '(
-					;    ; MS Visual C++ 6.0
-					;    ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
-					;       1 3 4)
-					;   ; jikes
-					;   ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)"
-					;       1 3 4))
-					;    "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)"
-					;   :group 'flymake
-					;   :type '(repeat (string number number number))
-					;)
+;;(defcustom flymake-err-line-patterns
+;;  '(
+;;    ; MS Visual C++ 6.0
+;;    ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
+;;       1 3 4)
+;;   ; jikes
+;;   ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)"
+;;       1 3 4))
+;;    "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)"
+;;   :group 'flymake
+;;   :type '(repeat (string number number number))
+;;)
 
 (defun flymake-parse-line (line)
   "Parse LINE to see if it is an error of warning.
@@ -1049,18 +1020,17 @@
 	(line-no 0)
 	(err-type "e")
 	(err-text nil)
-	(count (length flymake-err-line-patterns))
-	(idx   0)
+	(patterns flymake-err-line-patterns)
 	(matched nil))
-    (while (and (< idx count) (not matched))
-      (when (string-match (car (nth idx flymake-err-line-patterns)) line)
-	(let* ((file-idx (nth 1 (nth idx flymake-err-line-patterns)))
-	       (line-idx (nth 2 (nth idx flymake-err-line-patterns))))
+    (while (and patterns (not matched))
+      (when (string-match (car (car patterns)) line)
+	(let* ((file-idx (nth 1 (car patterns)))
+	       (line-idx (nth 2 (car patterns))))
 
 	  (setq raw-file-name (if file-idx (match-string file-idx line) nil))
 	  (setq line-no       (if line-idx (string-to-int (match-string line-idx line)) 0))
-	  (setq err-text      (if (> (length (nth idx flymake-err-line-patterns)) 4)
-				  (match-string (nth 4 (nth idx flymake-err-line-patterns)) line)
+	  (setq err-text      (if (> (length (car patterns)) 4)
+				  (match-string (nth 4 (car patterns)) line)
 				(flymake-patch-err-text (substring line (match-end 0)))))
 	  (or err-text (setq err-text "<no error text>"))
 	  (if (and err-text (string-match "^[wW]arning" err-text))
@@ -1069,7 +1039,7 @@
 	  (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx
 		       raw-file-name line-no err-text)
 	  (setq matched t)))
-      (setq idx (1+ idx)))
+      (setq patterns (cdr patterns)))
     (if matched
 	(flymake-ler-make-ler raw-file-name line-no err-type err-text)
       ())))
@@ -1110,8 +1080,7 @@
 
 (defun flymake-add-err-info (err-info-list line-err-info)
   "Add error info (file line type text) to err info list preserving sort order."
-  (let* ((count               (length err-info-list))
-	 (line-no             (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info)))
+  (let* ((line-no             (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info)))
 	 (info-and-pos        (flymake-find-err-info err-info-list line-no))
 	 (exists              (car info-and-pos))
 	 (pos                 (nth 1 info-and-pos))
@@ -1133,7 +1102,7 @@
   (if (flymake-get-project-include-dirs-from-cache basedir)
       (progn
 	(flymake-get-project-include-dirs-from-cache basedir))
-					;else
+    ;;else
     (let* ((command-line  (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars"))
 	   (output        (shell-command-to-string command-line))
 	   (lines         (flymake-split-string output "\n"))
@@ -1206,9 +1175,8 @@
 (defun flymake-get-program-dir (buffer)
   "Get dir to start program in."
   (unless (bufferp buffer)
-    (error "Invlid buffer"))
-  (save-excursion
-    (set-buffer buffer)
+    (error "Invalid buffer"))
+  (with-current-buffer buffer
     default-directory))
 
 (defun flymake-safe-delete-file (file-name)
@@ -1233,8 +1201,7 @@
   "Start syntax checking for buffer BUFFER."
   (unless (bufferp buffer)
     (error "Expected a buffer"))
-  (save-excursion
-    (set-buffer buffer)
+  (with-current-buffer buffer
     (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer))
     (when (and (not (flymake-get-buffer-is-running buffer))
 	       (flymake-can-syntax-check-file (buffer-file-name buffer)))
@@ -1317,7 +1284,7 @@
   (call-interactively 'compile))
 
 (defvar flymake-is-running nil
-  "If t, flymake syntax check process is running for the current buffer")
+  "If t, flymake syntax check process is running for the current buffer.")
 
 (make-variable-buffer-local 'flymake-is-running)
 
@@ -1361,7 +1328,7 @@
   (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time))
 
 (defvar flymake-check-was-interrupted nil
-  "t if syntax check was killed by flymake-compile")
+  "Non-nil if syntax check was killed by `flymake-compile'.")
 
 (make-variable-buffer-local 'flymake-check-was-interrupted)
 
@@ -1378,10 +1345,9 @@
 
 (defun flymake-on-timer-event (buffer)
   "Start a syntax check for buffer BUFFER if necessary."
-					;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time))
+  ;;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time))
   (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer)))
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (when (and (flymake-get-buffer-last-change-time buffer)
 		 (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer))))
 	(flymake-set-buffer-last-change-time buffer nil)
@@ -1400,18 +1366,9 @@
 	(end  (if (= (point) (point-max)) (point) (1+ (point)))))
     (count-lines beg end)))
 
-(defun flymake-get-line-count (buffer)
-  "Return number of lines in buffer BUFFER."
-  (unless (bufferp buffer)
-    (error "Invalid buffer"))
-  (save-excursion
-    (set-buffer buffer)
-    (count-lines (point-min) (point-max))))
-
 (defun flymake-count-lines (buffer)
   "Return number of lines in buffer BUFFER."
-  (save-excursion
-    (set-buffer buffer)
+  (with-current-buffer buffer
     (count-lines (point-min) (point-max))))
 
 (defun flymake-get-point-pixel-pos ()
@@ -1438,7 +1395,6 @@
 	 (menu-data           (flymake-make-err-menu-data line-no line-err-info-list))
 	 (choice              nil)
 	 (mouse-pos           (flymake-get-point-pixel-pos))
-	 (moved-mouse-pos     (list (car mouse-pos) (+ 10 (car (cdr mouse-pos)))))
 	 (menu-pos            (list (flymake-get-point-pixel-pos) (selected-window))))
     (if menu-data
 	(progn
@@ -1474,7 +1430,7 @@
       nil)))
 
 (defun flymake-goto-file-and-line (file line)
-  "Try to get buffer for file and goto line line in it"
+  "Try to get buffer for FILE and goto line LINE in it."
   (if (not (file-exists-p file))
       (flymake-log 1 "file %s does not exists" file)
     (progn
@@ -1482,12 +1438,7 @@
       (goto-line line))))
 
 ;; flymake minor mode declarations
-(defvar flymake-mode nil)
-
-(make-variable-buffer-local 'flymake-mode)
-
-(defvar flymake-mode-line nil
-  "")
+(defvar flymake-mode-line nil)
 
 (make-variable-buffer-local 'flymake-mode-line)
 
@@ -1520,8 +1471,7 @@
 (defun flymake-report-status (buffer e-w &optional status)
   "Show status in mode line."
   (when (bufferp buffer)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (when e-w
 	(flymake-set-buffer-mode-line-e-w buffer e-w)
 	)
@@ -1548,30 +1498,22 @@
   (when flymake-gui-warnings-enabled
     (flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning))
     )
-  (save-excursion
-    (set-buffer buffer)
+  (with-current-buffer buffer
     (flymake-mode 0)
     (flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s"
 		 (buffer-name buffer) status warning)))
 
-(defun flymake-mode (&optional arg)
-  "Toggle flymake mode on/off."
-  (interactive)
-  (let ((old-flymake-mode flymake-mode)
-	(turn-on nil))
-
-    (setq turn-on
-	  (if (null arg)
-	      (not flymake-mode)
-					;else
-	    (> (prefix-numeric-value arg) 0)))
-
-    (if turn-on
-	(if (flymake-can-syntax-check-file (buffer-file-name))
-	    (flymake-mode-on)
-	  (flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name)))
-      (flymake-mode-off))
-    (force-mode-line-update)))
+;;;###autoload
+(define-minor-mode flymake-mode
+  "Minor mode to do on-the-fly syntax checking.
+When called interactively, toggles the minor mode.
+With arg, turn Flymake mode on if and only if arg is positive."
+  :lighter flymake-mode-line
+  (if flymake-mode
+      (if (flymake-can-syntax-check-file (buffer-file-name))
+	  (flymake-mode-on)
+	(flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name)))
+    (flymake-mode-off)))
 
 (defcustom flymake-start-syntax-check-on-find-file t
   "Start syntax check on find file."
@@ -1579,10 +1521,6 @@
   :type 'boolean)
 
 ;;;###autoload
-(unless (assq 'flymake-mode minor-mode-alist)
-  (setq minor-mode-alist (cons '(flymake-mode flymake-mode-line) minor-mode-alist)))
-
-;;;###autoload
 (defun flymake-mode-on ()
   "Turn flymake mode on."
   (when (not flymake-mode)
@@ -1590,7 +1528,7 @@
     (setq after-change-functions (cons 'flymake-after-change-function after-change-functions))
     (add-hook 'after-save-hook 'flymake-after-save-hook)
     (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook)
-					;+(add-hook 'find-file-hooks 'flymake-find-file-hook)
+    ;;+(add-hook 'find-file-hook 'flymake-find-file-hook)
 
     (flymake-report-status (current-buffer) "" "")
 
@@ -1608,7 +1546,7 @@
     (setq after-change-functions (delq 'flymake-after-change-function  after-change-functions))
     (remove-hook 'after-save-hook (function flymake-after-save-hook) t)
     (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t)
-					;+(remove-hook 'find-file-hooks (function flymake-find-file-hook) t)
+    ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t)
 
     (flymake-delete-own-overlays (current-buffer))
 
@@ -1627,8 +1565,8 @@
   :type 'boolean)
 
 (defun flymake-after-change-function (start stop len)
-  "Start syntax check for current buffer if it isn't already running"
-					;+(flymake-log 0 "setting change time to %s" (flymake-float-time))
+  "Start syntax check for current buffer if it isn't already running."
+  ;;+(flymake-log 0 "setting change time to %s" (flymake-float-time))
   (let((new-text (buffer-substring start stop)))
     (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
       (flymake-log 3 "starting syntax check as new-line has been seen")
@@ -1647,10 +1585,10 @@
     (flymake-set-buffer-timer (current-buffer) nil)))
 
 (defun flymake-find-file-hook ()
-					;+(when flymake-start-syntax-check-on-find-file
-					;+    (flymake-log 3 "starting syntax check on file open")
-					;+    (flymake-start-syntax-check-for-current-buffer)
-					;+)
+  ;;+(when flymake-start-syntax-check-on-find-file
+  ;;+    (flymake-log 3 "starting syntax check on file open")
+  ;;+    (flymake-start-syntax-check-for-current-buffer)
+  ;;+)
   (when (and (not (local-variable-p 'flymake-mode (current-buffer)))
 	     (flymake-can-syntax-check-file (buffer-file-name (current-buffer))))
     (flymake-mode)
@@ -1691,12 +1629,12 @@
     (forward-char)))
 
 (defun flymake-goto-line (line-no)
-  "goto-line, then skip whitespace"
+  "Go to line LINE-NO, then skip whitespace."
   (goto-line line-no)
   (flymake-skip-whitespace))
 
 (defun flymake-goto-next-error ()
-  "go to next error in err ring"
+  "Go to next error in err ring."
   (interactive)
   (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no))))
     (when (not line-no)
@@ -1707,7 +1645,7 @@
       (flymake-log 1 "no errors in current buffer"))))
 
 (defun flymake-goto-prev-error ()
-  "go to prev error in err ring"
+  "Go to prev error in err ring."
   (interactive)
   (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no))))
     (when (not line-no)
@@ -1741,9 +1679,9 @@
 
   (let* ((dir       (file-name-directory file-name))
 	 (slash-pos (string-match "/" dir))
-	 (temp-dir  (concat (flymake-ensure-ends-with-slash (flymake-get-temp-dir)) (substring dir (1+ slash-pos)))))
+	 (temp-dir  (concat (file-name-as-directory (flymake-get-temp-dir)) (substring dir (1+ slash-pos)))))
 
-    (file-truename (concat (flymake-ensure-ends-with-slash temp-dir)
+    (file-truename (concat (file-name-as-directory temp-dir)
 			   (file-name-nondirectory file-name)))))
 
 (defun flymake-strrchr (str ch)
@@ -1756,14 +1694,14 @@
     pos))
 
 (defun flymake-delete-temp-directory (dir-name)
-  "attempt to delete temp dir created by flymake-create-temp-with-folder-structure, do not fail on error."
+  "Attempt to delete temp dir created by `flymake-create-temp-with-folder-structure', do not fail on error."
   (let* ((temp-dir    (flymake-get-temp-dir))
 	 (suffix      (substring dir-name (1+ (length temp-dir))))
 	 (slash-pos   nil))
 
     (while (> (length suffix) 0)
-					;+(flymake-log 0 "suffix=%s" suffix)
-      (flymake-safe-delete-directory (file-truename (concat (flymake-ensure-ends-with-slash temp-dir) suffix)))
+      ;;+(flymake-log 0 "suffix=%s" suffix)
+      (flymake-safe-delete-directory (file-truename (concat (file-name-as-directory temp-dir) suffix)))
       (setq slash-pos (flymake-strrchr suffix (string-to-char "/")))
       (if slash-pos
 	  (setq suffix (substring suffix 0 slash-pos))
@@ -1786,8 +1724,8 @@
     (flymake-set-buffer-last-change-time buffer nil)))
 
 (defun flymake-get-real-file-name (buffer file-name-from-err-msg)
-  "Translate file name from error message to `real' file name.
-Return full-name. Names are real, not patched."
+  "Translate file name from error message to \"real\" file name.
+Return full-name.  Names are real, not patched."
   (let* ((real-name              nil)
 	 (source-file-name       (buffer-file-name buffer))
 	 (master-file-name       (flymake-get-buffer-value buffer "master-file-name"))
@@ -1805,7 +1743,7 @@
       (setq file-name-from-err-msg source-file-name))
 
     (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files))
-					; if real-name is nil, than file name from err msg is none of the files we've patched
+    ;; if real-name is nil, than file name from err msg is none of the files we've patched
     (if (not real-name)
 	(setq real-name (flymake-get-full-nonpatched-file-name file-name-from-err-msg base-dirs)))
     (if (not real-name)
@@ -1825,7 +1763,7 @@
 	(let* ((this-dir        (nth (1- base-dirs-count) base-dirs))
 	       (this-file       (nth 0 (nth (1- file-count) files)))
 	       (this-real-name  (nth 1 (nth (1- file-count) files))))
-					;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg)
+	  ;;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg)
 	  (when (and this-dir this-file (flymake-same-files
 					 (flymake-get-absolute-file-name-basedir file-name-from-err-msg this-dir)
 					 this-file))
@@ -1941,7 +1879,7 @@
   (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline))
 
 (defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list)
-  "create make command line for a source file checked via master file compilation"
+  "Create make command line for a source file checked via master file compilation."
   (let* ((make-args nil)
 	 (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy
 				 buffer get-incl-dirs-f 'flymake-create-temp-inplace
@@ -1971,7 +1909,7 @@
   (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline))
 
 (defun flymake-simple-java-cleanup (buffer)
-  "cleanup after flymake-simple-make-java-init -- delete temp file and dirs"
+  "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs."
   (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name")))
     (flymake-safe-delete-file temp-source-file-name)
     (when temp-source-file-name
@@ -1979,15 +1917,17 @@
 
 ;;;; perl-specific init-cleanup routines
 (defun flymake-perl-init (buffer)
-  (let* ((temp-file   (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace))
-	 (local-file  (concat (flymake-build-relative-filename (file-name-directory (buffer-file-name (current-buffer)))
-							   (file-name-directory temp-file))
+  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
+		       buffer 'flymake-create-temp-inplace))
+	 (local-file  (concat (flymake-build-relative-filename
+			       (file-name-directory buffer-file-name)
+			       (file-name-directory temp-file))
 			      (file-name-nondirectory temp-file))))
     (list "perl" (list "-wc " local-file))))
 
 ;;;; tex-specific init-cleanup routines
 (defun flymake-get-tex-args (file-name)
-					;(list "latex" (list "-c-style-errors" file-name))
+  ;;(list "latex" (list "-c-style-errors" file-name))
   (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name)))
 
 (defun flymake-simple-tex-init (buffer)
@@ -2005,10 +1945,10 @@
   '("."))
 
 ;;;; xml-specific init-cleanup routines
-(defun flymake-xml-init(buffer)
+(defun flymake-xml-init (buffer)
   (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace))))
 
 (provide 'flymake)
 
-;;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd
+;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd
 ;;; flymake.el ends here
--- a/lisp/progmodes/gdb-ui.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/gdb-ui.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1161,12 +1161,9 @@
        "\x3c\x7e\xff\xff\xff\xff\x7e\x3c"))
 
 (defface breakpoint-enabled
-  '((((type tty))
-     :weight bold
-     :foreground "red")
-    (t
-     :weight bold
-     :foreground "red"))
+  '((t
+     :foreground "red"
+     :weight bold))
   "Face for enabled breakpoint icon in fringe."
   :group 'gud)
 ;; compatibility alias for old name
@@ -1176,14 +1173,8 @@
   ;; We use different values of grey for different background types,
   ;; so that on low-color displays it will end up as something visible
   ;; if it has to be approximated.
-  '((((type tty)  (background dark))
-     :foreground "grey60")
-    (((type tty) (background light))
-     :foreground "grey40")
-    (((background dark))
-     :foreground "grey60")
-    (((background light))
-     :foreground "grey40"))
+  '((((background dark))  :foreground "grey60")
+    (((background light)) :foreground "grey40"))
   "Face for disabled breakpoint icon in fringe."
   :group 'gud)
 ;; compatibility alias for old name
@@ -1308,10 +1299,10 @@
 (defvar gdb-breakpoints-mode-map
   (let ((map (make-sparse-keymap))
 	(menu (make-sparse-keymap "Breakpoints")))
-    (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint))
+    (define-key menu [quit] '("Quit"   . kill-this-buffer))
+    (define-key menu [goto] '("Goto"   . gdb-goto-breakpoint))
     (define-key menu [delete] '("Delete" . gdb-delete-breakpoint))
-    (define-key menu [goto] '("Goto"   . gdb-goto-breakpoint))
-
+    (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint))
     (suppress-keymap map)
     (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu))
     (define-key map " " 'gdb-toggle-breakpoint)
@@ -1319,6 +1310,7 @@
     (define-key map "q" 'kill-this-buffer)
     (define-key map "\r" 'gdb-goto-breakpoint)
     (define-key map [mouse-2] 'gdb-goto-breakpoint)
+    (define-key map [follow-link] 'mouse-face)
     map))
 
 (defun gdb-breakpoints-mode ()
@@ -1444,6 +1436,7 @@
     (define-key map "q" 'kill-this-buffer)
     (define-key map "\r" 'gdb-frames-select)
     (define-key map [mouse-2] 'gdb-frames-select)
+    (define-key map [follow-link] 'mouse-face)
     map))
 
 (defun gdb-frames-mode ()
--- a/lisp/progmodes/idlw-shell.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/idlw-shell.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 ;; idlw-shell.el --- run IDL as an inferior process of Emacs.
-;; Copyright (c) 1999,2000,2001,2002,2003,2004 Free Software Foundation
+;; Copyright (c) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation
 
 ;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
 ;;          Carsten Dominik <dominik@astro.uva.nl>
@@ -437,7 +437,7 @@
 
 (defcustom idlwave-shell-mark-stop-line t
   "*Non-nil means, mark the source code line where IDL is currently stopped.
-Value decides about the method which is used to mark the line.  Legal values
+Value decides about the method which is used to mark the line.  Valid values
 are:
 
 nil       Do not mark the line
@@ -494,7 +494,7 @@
 
 (defcustom idlwave-shell-mark-breakpoints t
   "*Non-nil means, mark breakpoints in the source files.
-Legal values are:
+Valid values are:
 nil        Do not mark breakpoints.
 'face      Highlight line with `idlwave-shell-breakpoint-face'.
 'glyph     Red dot at the beginning of line.  If the display does not
--- a/lisp/progmodes/idlwave.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/idlwave.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;; idlwave.el --- IDL editing mode for GNU Emacs
-;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation
+;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+;;  Free Software Foundation
 
 ;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
@@ -584,7 +585,7 @@
 (defcustom idlwave-completion-show-classes 1
   "*Number of classes to show when completing object methods and keywords.
 When completing methods or keywords for an object with unknown class,
-the *Completions* buffer will show the legal classes for each completion
+the *Completions* buffer will show the valid classes for each completion
 like this:
 
 MyMethod <Class1,Class2,Class3>
@@ -5337,7 +5338,7 @@
 
 (defun idlwave-complete (&optional arg module class)
   "Complete a function, procedure or keyword name at point.
-This function is smart and figures out what can be legally completed
+This function is smart and figures out what can be completed
 at this point.
 - At the beginning of a statement it completes procedure names.
 - In the middle of a statement it completes function names.
@@ -5587,7 +5588,7 @@
 		      (symbolp what)
 		      (assoc (symbol-name what) what-list))
 		 what)
-		(t (error "Illegal WHAT"))))
+		(t (error "Invalid WHAT"))))
 	 (nil-list '(nil nil nil nil))
 	 (class-list (list nil nil (or class t) nil)))
 
@@ -5656,7 +5657,7 @@
      ((eq what 'class)
       (list nil-list nil-list 'class nil-list nil))
      
-     (t (error "Illegal value for WHAT")))))
+     (t (error "Invalid value for WHAT")))))
 
 (defun idlwave-completing-read (&rest args)
   ;; Completing read, case insensitive
@@ -7728,7 +7729,7 @@
     keywords))
 
 (defun idlwave-expand-keyword (keyword module)
-  "Expand KEYWORD to one of the legal keyword parameters of MODULE.
+  "Expand KEYWORD to one of the valid keyword parameters of MODULE.
 KEYWORD may be an exact match or an abbreviation of a keyword.
 If the match is exact, KEYWORD itself is returned, even if there may be other
 keywords of which KEYWORD is an abbreviation.  This is necessary because some
--- a/lisp/progmodes/python.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/python.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; python.el --- silly walks for Python
 
-;; Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Dave Love <fx@gnu.org>
 ;; Maintainer: FSF
@@ -336,14 +336,14 @@
     (unless bos (python-beginning-of-statement))
     (back-to-indentation)
     (looking-at (rx (and (or "return" "raise" "break" "continue" "pass")
-			 word-end)))))
+			 symbol-end)))))
 
 (defun python-outdent-p ()
   "Return non-nil if current line should outdent a level."
   (save-excursion
     (back-to-indentation)
-    (and (looking-at (rx (and (or (and (or "else" "finally") word-end)
-				  (and (or "except" "elif") word-end
+    (and (looking-at (rx (and (or (and (or "else" "finally") symbol-end)
+				  (and (or "except" "elif") symbol-end
 				       (1+ (not (any ?:)))))
 			      (optional space) ":" (optional space)
 			      (or (syntax comment-start) line-end))))
@@ -355,8 +355,8 @@
 	 ;; Fixme: check this
 	 (not (looking-at (rx (and (or (and (or "if" "elif" "except"
 						"for" "while")
-					    word-end (1+ (not (any ?:))))
-				       (and "try" word-end))
+					    symbol-end (1+ (not (any ?:))))
+				       (and "try" symbol-end))
 				   (optional space) ":" (optional space)
 				   (or (syntax comment-start) line-end)))))
 	 (progn (end-of-line)
@@ -1562,7 +1562,8 @@
 	(beginning-of-defun)
 	(if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space)
 				 (group (1+ (or word (syntax symbol))))
-				 word-end)))
+				 ;; Greediness makes this unnecessary?  --Stef
+				 symbol-end)))
 	    (push (match-string 1) accum)))
       (if accum (mapconcat 'identity accum ".")))))
 
@@ -1702,9 +1703,9 @@
        '(python-font-lock-keywords nil nil ((?_ . "w")) nil
 				   (font-lock-syntactic-keywords
 				    . python-font-lock-syntactic-keywords)
-;;; This probably isn't worth it.
-;;; 				   (font-lock-syntactic-face-function
-;;; 				    . python-font-lock-syntactic-face-function)
+				   ;; This probably isn't worth it.
+				   ;; (font-lock-syntactic-face-function
+				   ;;  . python-font-lock-syntactic-face-function)
 				   ))
   (set (make-local-variable 'parse-sexp-lookup-properties) t)
   (set (make-local-variable 'comment-start) "# ")
--- a/lisp/progmodes/sh-script.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/sh-script.el	Sun Mar 27 17:29:43 2005 +0000
@@ -2388,7 +2388,7 @@
 (defun sh-var-value (var &optional ignore-error)
   "Return the value of variable VAR, interpreting symbols.
 It can also return t or nil.
-If an illegal value is found, throw an error unless Optional argument
+If an invalid value is found, throw an error unless Optional argument
 IGNORE-ERROR is non-nil."
   (let ((val (symbol-value var)))
     (cond
--- a/lisp/progmodes/vhdl-mode.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/vhdl-mode.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; vhdl-mode.el --- major mode for editing VHDL code
 
-;; Copyright (C) 1992-2003 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2003, 2005 Free Software Foundation, Inc.
 
 ;; Authors:     Reto Zimmermann <reto@gnu.org>
 ;;              Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
@@ -5065,7 +5065,7 @@
 
 (defun vhdl-read-offset (langelem)
   "Read new offset value for LANGELEM from minibuffer.
-Return a legal value only."
+Return a valid value only."
   (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist))))
 	(errmsg "Offset must be int, func, var, or one of +, -, ++, --: ")
 	(prompt "Offset: ")
--- a/lisp/progmodes/xscheme.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/progmodes/xscheme.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; xscheme.el --- run MIT Scheme under Emacs
 
-;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: languages, lisp
@@ -408,7 +409,7 @@
 
 Commands:
 \\{scheme-debugger-mode-map}"
-  (error "Illegal entry to scheme-debugger-mode"))
+  (error "Invalid entry to scheme-debugger-mode"))
 
 (defun scheme-debugger-mode-initialize ()
   (use-local-map scheme-debugger-mode-map)
--- a/lisp/term.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/term.el	Sun Mar 27 17:29:43 2005 +0000
@@ -2573,7 +2573,16 @@
 
 (defun term-move-columns (delta)
   (setq term-current-column (max 0 (+ (term-current-column) delta)))
-  (move-to-column term-current-column t))
+  (let (point-at-eol)
+    (save-excursion
+      (end-of-line)
+      (setq point-at-eol (point)))
+    (move-to-column term-current-column t)
+    ;; If move-to-column extends the current line it will use the face
+    ;; from the last character on the line, set the face for the chars
+    ;; to default.
+    (when (> (point) point-at-eol)
+      (put-text-property point-at-eol (point) 'face 'default))))
 
 ;; Insert COUNT copies of CHAR in the default face.
 (defun term-insert-char (char count)
@@ -3028,7 +3037,7 @@
 ;;; default one. 
 (defun term-reset-terminal ()
   (erase-buffer)
-  (setq term-current-row 1)
+  (setq term-current-row 0)
   (setq term-current-column 1)
   (setq term-insert-mode nil)
   (setq term-current-face nil)
@@ -3037,7 +3046,7 @@
   (setq term-ansi-current-reverse 0)
   (setq term-ansi-current-color 0)
   (setq term-ansi-current-invisible 0)
-  (setq term-ansi-face-already-done 1)
+  (setq term-ansi-face-already-done 0)
   (setq term-ansi-current-bg-color 0))
 
 ;;; New function to deal with ansi colorized output, as you can see you can
@@ -3685,12 +3694,20 @@
 ;;; at teh end of this screen line to make room.
 
 (defun term-insert-spaces (count)
-  (let ((save-point (point)) (save-eol))
+  (let ((save-point (point)) (save-eol) (point-at-eol))
     (term-vertical-motion 1)
     (if (bolp)
 	(backward-char))
     (setq save-eol (point))
+    (save-excursion
+      (end-of-line)
+      (setq point-at-eol (point)))
     (move-to-column (+ (term-start-line-column) (- term-width count)) t)
+    ;; If move-to-column extends the current line it will use the face
+    ;; from the last character on the line, set the face for the chars
+    ;; to default.
+    (when (> (point) (point-at-eol))
+      (put-text-property point-at-eol (point) 'face 'default))
     (if (> save-eol (point))
 	(delete-region (point) save-eol))
     (goto-char save-point)
--- a/lisp/term/bobcat.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/term/bobcat.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;; -*- no-byte-compile: t -*-
 ;;; HP terminals usually encourage using ^H as the rubout character
-(load "term/keyswap" nil t)
+(keyboard-translate ?\177 ?\^h)
+(keyboard-translate ?\^h ?\177)
 
 ;;; arch-tag: 754e4520-0a3e-4e6e-8ca5-9481b1f85cf7
 ;;; bobcat.el ends here
--- a/lisp/term/xterm.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/term/xterm.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; xterm.el --- define function key sequences and standard colors for xterm
 
-;; Copyright (C) 1995, 2002, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2002, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: FSF
 ;; Keywords: terminals
--- a/lisp/textmodes/flyspell.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/flyspell.el	Sun Mar 27 17:29:43 2005 +0000
@@ -282,7 +282,7 @@
 	  (t
 	   (save-excursion
 	     (beginning-of-line)
-	     (not (looking-at "[>}|]\\To:")))))))
+	     (not (looking-at "[>}|]\\|To:")))))))
 
 ;*--- texinfo mode ----------------------------------------------------*/
 (put 'texinfo-mode 'flyspell-mode-predicate 'texinfo-mode-flyspell-verify)
--- a/lisp/textmodes/ispell.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/ispell.el	Sun Mar 27 17:29:43 2005 +0000
@@ -645,6 +645,10 @@
     "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
     "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
     "" nil ("-B") nil iso-8859-2)
+   ("slovenian"				; Slovenian
+    "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
+    "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
+    "" nil ("-B" "-d" "slovenian") nil iso-8859-2)
    ("svenska"				; Swedish mode
     "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]"
     "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]"
--- a/lisp/textmodes/org.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/org.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;; org.el --- Outline-based notes management and organizer 
 ;; Carstens outline-mode for keeping track of everything.
-;; Copyright (c) 2003, 2004 Free Software Foundation
+;; Copyright (c) 2003, 2004, 2005 Free Software Foundation
 
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar
@@ -2380,7 +2380,7 @@
         (setq new (1- current)))
        ((eq action 'down)
         (setq new (1+ current)))
-       (t (error "Illegal ection")))
+       (t (error "Invalid action")))
       (setq new (min (max ?A (upcase new)) org-lowest-priority))
       (setq news (format "%c" new))
       (if have
@@ -5902,13 +5902,13 @@
                     (string-to-int (match-string 1 form))
                   n0)
               x (nth n fields))
-        (unless x (error "Illegal field specifier \"%s\""
+        (unless x (error "Invalid field specifier \"%s\""
                          (match-string 0 form)))
         (if (equal (string-to-number x) 0) (setq x "0"))
         (setq form (replace-match x t t form)))
       (setq ev (calc-eval (list form) 'num))
       (if (listp ev)
-          (error "Illegal expression: %s (%s at %d)" form (nth 1 ev) (car ev)))
+          (error "Invalid expression: %s (%s at %d)" form (nth 1 ev) (car ev)))
       (org-table-blank-field)
       (if fmt
           (insert (format fmt (string-to-number ev)))
--- a/lisp/textmodes/refbib.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/refbib.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; refbib.el --- convert refer-style references to ones usable by Latex bib
 
-;; Copyright (C) 1989 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 2005 Free Software Foundation, Inc.
 
 ;; Author: Henry Kautz <kautz@research.att.com>
 ;; Keywords: bib, tex
@@ -35,7 +35,7 @@
 ;; 9/88, created H.Kautz
 ;; modified 1/19/89, allow books with editor but no author;
 ;;                   added %O ordering field;
-;;                   appended illegal multiple fields, instead of
+;;                   appended invalid multiple fields, instead of
 ;;                     discarding;
 ;;                   added rule, a tech report whose %R number
 ;;                     contains "ISBN" is really a book
@@ -292,7 +292,7 @@
 	    (setq val item)
 	    (if unique
 	       (progn
-		  (r2b-warning "*Illegal multiple field %s %s" field item)
+		  (r2b-warning "*Invalid multiple field %s %s" field item)
 		  (setq val (concat val "\n" item))
 		  )
 	       (setq val (concat val "\n\t\tand " item))
--- a/lisp/textmodes/refer.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/refer.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; refer.el --- look up references in bibliography files
 
-;; Copyright (C) 1992, 1996, 2001, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1996, 2001, 2004, 2005 Free Software Foundation, Inc.
 
 ;; Author: Ashwin Ram <ashwin@cc.gatech.edu>
 ;; Maintainer: Gernot Heiser <gernot@acm.org>
@@ -388,7 +388,7 @@
                       (eq refer-bib-directory 'bibinputs)))
              (refer-expand-files refer-bib-files dir-list))
             ((listp refer-bib-files) refer-bib-files)
-            (t (error "Illegal value for refer-bib-files: %s"
+            (t (error "Invalid value for refer-bib-files: %s"
                       refer-bib-files)))))
     (if (or (eq refer-bib-directory 'texinputs)
             (eq refer-bib-directory 'bibinputs))
--- a/lisp/textmodes/reftex-cite.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex-cite.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex-cite.el --- creating citations with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -982,7 +983,7 @@
 
   (if (and reftex-comment-citations
            (string-match "%l" reftex-cite-comment-format))
-      (error "reftex-cite-comment-format contains illegal %%l"))
+      (error "reftex-cite-comment-format contains invalid %%l"))
 
   (while (string-match
           "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)"
--- a/lisp/textmodes/reftex-index.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex-index.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex-index.el --- index support with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -928,7 +929,7 @@
            (error "Not changed"))
           ((string= npart "")
            (if dont-allow-empty
-               (error "Illegal value")
+               (error "Invalid value")
              (setf (nth n analyze) npart)))
           (t (setf (nth n analyze) (concat initial npart))))
     (setq new (apply 'concat analyze))
@@ -1385,7 +1386,7 @@
                                (file-regular-p reftex-index-phrases-restrict-file))
                           (list reftex-index-phrases-restrict-file))
                          ((stringp reftex-index-phrases-restrict-file)
-                          (error "Illegal restriction file %s"
+                          (error "Invalid restriction file %s"
                                  reftex-index-phrases-restrict-file))
                          (t reftex-index-phrases-files)))
                   (as-words reftex-index-phrases-search-whole-words))
--- a/lisp/textmodes/reftex-parse.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex-parse.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex-parse.el --- parser functions for RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -544,7 +545,7 @@
            (funcall parse env)
          (error (format "HOOK ERROR: %s" (cdr error-var))))))
     (t
-     "ILLEGAL VALUE OF PARSE"))))
+     "INVALID VALUE OF PARSE"))))
 
 (defun reftex-where-am-I ()
   ;; Return the docstruct entry above point.  Actually returns a cons
--- a/lisp/textmodes/reftex-ref.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex-ref.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex-ref.el --- code to create labels and references with RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -172,7 +173,7 @@
                        (nth 2 (reftex-label-info " " nil nil t))))
         ;; Catch the cases where the is actually no context available.
         (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default)
-                (string-match "ILLEGAL VALUE OF PARSE" default)
+                (string-match "INVALID VALUE OF PARSE" default)
                 (string-match "SECTION HEADING NOT FOUND" default)
                 (string-match "HOOK ERROR" default)
                 (string-match "^[ \t]*$" default))
@@ -217,7 +218,7 @@
 
              ;; Test if label contains strange characters
              ((string-match reftex-label-illegal-re label)
-              (message "Label \"%s\" contains illegal characters" label)
+              (message "Label \"%s\" contains invalid characters" label)
               (ding)
               (sit-for 2))
 
--- a/lisp/textmodes/reftex-vars.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex-vars.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex-vars.el --- configuration variables for RefTeX
-;; Copyright (c) 1997, 1998, 1999, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -747,7 +748,7 @@
 
 If DERIVE is t, RefTeX will try to derive a sensible label from context.
 A section label for example will be derived from the section heading.
-The conversion of the context to a legal label is governed by the
+The conversion of the context to a valid label is governed by the
 specifications given in `reftex-derive-label-parameters'.
 If RefTeX fails to derive a label, it will prompt the user.
 If DERIVE is nil, the label generated will consist of the prefix and a
@@ -790,7 +791,7 @@
                         (string :tag "selected label types" ""))))
 
 (defcustom reftex-string-to-label-function 'reftex-string-to-label
-  "Function to turn an arbitrary string into a legal label.
+  "Function to turn an arbitrary string into a valid label.
 RefTeX's default function uses the variable `reftex-derive-label-parameters'."
   :group 'reftex-making-and-inserting-labels
   :type 'symbol)
@@ -798,7 +799,7 @@
 (defcustom reftex-translate-to-ascii-function 'reftex-latin1-to-ascii
   "Filter function which will process a context string before it is used
 to derive a label from it.  The intended application is to convert ISO or
-Mule characters into something legal in labels.  The default function
+Mule characters into something valid in labels.  The default function
 removes the accents from Latin-1 characters.  X-Symbol (>=2.6) sets this
 variable to the much more general `x-symbol-translate-to-ascii'."
   :group 'reftex-making-and-inserting-labels
@@ -811,8 +812,8 @@
 
 NWORDS      Number of words to use.
 MAXCHAR     Maximum number of characters in a label string.
-ILLEGAL     nil: Throw away any words containing characters illegal in labels.
-            t:   Throw away only the illegal characters, not the whole word.
+INVALID     nil: Throw away any words containing characters invalid in labels.
+            t:   Throw away only the invalid characters, not the whole word.
 ABBREV      nil: Never abbreviate words.
             t:   Always abbreviate words (see `reftex-abbrev-parameters').
             not t and not nil: Abbreviate words if necessary to shorten
@@ -823,7 +824,7 @@
   :group 'reftex-making-and-inserting-labels
   :type  '(list (integer :tag "Number of words            "  3)
                 (integer :tag "Maximum label length       " 20)
-                (choice  :tag "Illegal characters in words"
+                (choice  :tag "Invalid characters in words"
                          (const :tag "throw away entire word" nil)
                          (const :tag "throw away single chars" t))
                 (choice  :tag "Abbreviate words           "
@@ -837,7 +838,7 @@
                 (option (boolean :tag "Downcase words          "))))
 
 (defcustom reftex-label-illegal-re "[^-a-zA-Z0-9_+=:;,.]"
-  "Regexp matching characters not legal in labels."
+  "Regexp matching characters not valid in labels."
   :group 'reftex-making-and-inserting-labels
   :type '(regexp :tag "Regular Expression"))
 
@@ -1226,7 +1227,7 @@
 
 The final entry may also be a symbol if this entry has a association
 in the variable `reftex-index-macros-builtin' to specify the main
-indexing package you are using.  Legal values are currently
+indexing package you are using.  Valid values are currently
 default         The LaTeX default - unnecessary to specify this one
 multind         The multind.sty package
 index           The index.sty package
@@ -1281,7 +1282,7 @@
 When working with multiple indexes, RefTeX queries for an index tag when
 creating index entries or displaying a specific index.  This variable controls
 the default offered for these queries.  The default can be selected with RET
-during selection or completion.  Legal values of this variable are:
+during selection or completion.  Valid values of this variable are:
 
 nil       Do not provide a default index
 \"tag\"     The default index tag given as a string, e.g. \"idx\".
@@ -1526,9 +1527,9 @@
 
 TYPE:       File type like \"bib\" or \"tex\".
 DEF-EXT:    The default extension for that file type, like \".tex\" or \".bib\".
-OTHER-EXT:  Any number of other legal extensions for this file type.
+OTHER-EXT:  Any number of other valid extensions for this file type.
 
-When a files is searched and it does not have any of the legal extensions,
+When a files is searched and it does not have any of the valid extensions,
 we try the default extension first, and then the naked file name.
 
 If you are using AUCTeX, you also need to add new extensions to
--- a/lisp/textmodes/reftex.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/textmodes/reftex.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 ;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
-;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
 ;; Version: 4.26
@@ -1416,7 +1417,7 @@
            ((= key ?\C-i)
             (setq prefix (completing-read "Prefix: " xr-alist nil t))
             (- len (length (memq (assoc prefix xr-alist) xr-alist))))
-           (t (error "Illegal document selection [%c]" key)))))))))
+           (t (error "Invalid document selection [%c]" key)))))))))
 
 ;;; =========================================================================
 ;;;
@@ -1424,7 +1425,7 @@
 
 (defun reftex-locate-file (file type master-dir &optional die)
   "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE.
-If the file does not have any of the legal extensions for TYPE,
+If the file does not have any of the valid extensions for TYPE,
 try first the default extension and only then the naked file name.
 When DIE is non-nil, throw an error if file not found."
   (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
@@ -2167,17 +2168,17 @@
   (reftex-convert-string string "[-~ \t\n\r,;]" nil t t
                          5 40 nil 1 " " (nth 5 reftex-derive-label-parameters)))
 
-(defun reftex-convert-string (string split-re illegal-re dot keep-fp
-                                     nwords maxchar illegal abbrev sep
+(defun reftex-convert-string (string split-re invalid-re dot keep-fp
+                                     nwords maxchar invalid abbrev sep
                                      ignore-words &optional downcase)
   "Convert a string (a sentence) to something shorter.
 SPLIT-RE     is the regular expression used to split the string into words.
-ILLEGAL-RE   matches characters which are illegal in the final string.
+INVALID-RE   matches characters which are invalid in the final string.
 DOT          t means add dots to abbreviated words.
 KEEP-FP      t means to keep a final punctuation when applicable.
 NWORDS       Number of words to use.
 MAXCHAR      Maximum number of characters in the final string.
-ILLEGAL      nil: Throw away any words containing stuff matched with ILLEGAL-RE.
+INVALID      nil: Throw away any words containing stuff matched with INVALID-RE.
              t:   Throw away only the matched part, not the whole word.
 ABBREV       nil: Never abbreviate words.
              t:   Always abbreviate words (see `reftex-abbrev-parameters').
@@ -2187,7 +2188,7 @@
 IGNORE-WORDS List of words which should be removed from the string."
 
   (let* ((words0 (split-string string (or split-re "[ \t\n\r]")))
-         (reftex-label-illegal-re (or illegal-re "\000"))
+         (reftex-label-illegal-re (or invalid-re "\000"))
          (abbrev-re (concat
                      "\\`\\("
                      (make-string (nth 0 reftex-abbrev-parameters) ?.)
@@ -2203,7 +2204,7 @@
       (cond
        ((member (downcase word) ignore-words))
        ((string-match reftex-label-illegal-re word)
-        (when illegal
+        (when invalid
           (while (string-match reftex-label-illegal-re word)
             (setq word (replace-match "" nil nil word)))
           (push word words)))
--- a/lisp/thumbs.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/thumbs.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 ;;; thumbs.el --- Thumbnails previewer for images files
 
-;; Copyright 2004 Free Software Foundation, Inc
+;; Copyright 2004, 2005 Free Software Foundation, Inc
 
 ;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
 ;; Keywords: Multimedia
@@ -630,7 +630,7 @@
 
 (defun thumbs-modify-image (action &optional arg)
   "Call convert to do ACTION on image with argument ARG.
-ACTION and ARG should be legal convert command."
+ACTION and ARG should be a valid convert command."
   (interactive "sAction: \nsValue: ")
   ;; cleaning of old temp file
   (mapc 'delete-file
--- a/lisp/vc-cvs.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/lisp/vc-cvs.el	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,7 @@
 ;;; vc-cvs.el --- non-resident support for CVS version-control
 
-;; Copyright (C) 1995,98,99,2000,2001,02,2003  Free Software Foundation, Inc.
+;; Copyright (C) 1995,98,99,2000,2001,02,2003, 2005
+;;  Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Andre Spiegel <spiegel@gnu.org>
@@ -745,7 +746,7 @@
 The default METHOD for a CVS root of the form
   [USER@]HOSTNAME:/path/to/repository
 is `ext'.
-For an empty string, nil is returned (illegal CVS root)."
+For an empty string, nil is returned (invalid CVS root)."
   ;; Split CVS root into colon separated fields (0-4).
   ;; The `x:' makes sure, that leading colons are not lost;
   ;; `HOST:/PATH' is then different from `:METHOD:/PATH'.
--- a/lispref/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,43 @@
+2005-03-26  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* calendar.texi: Delete file (and move contents to emacs-xtra.texi
+	in the Emacs Manual).
+	* Makefile.in (srcs): Remove calendar.texi.
+	* makefile.w32-in (srcs): Remove calendar.texi.
+	* display.texi (Display): Change name of next node.
+	* os.texi (System In): Change name of previous node.
+	* elisp.texi (Top): Remove Calendar references.
+	* vol1.texi (Top): Remove Calendar references.
+	* vol2.texi (Top): Remove Calendar references.
+
+2005-03-25  Richard M. Stallman  <rms@gnu.org>
+
+	* display.texi (Standard Faces, Fringe Bitmaps, Customizing Bitmaps):
+	Cleanup previous change.
+
+2005-03-25  Chong Yidong  <cyd@stupidchicken.com>
+
+	* display.texi (Face Attributes): Faces earlier in an :inherit
+	list take precedence.
+	(Scroll Bars): Fix description of vertical-scroll-bars.
+	Document frame-current-scroll-bars and window-current-scroll-bars.
+
+	* markers.texi (The Mark): Document temporary Transient Mark mode.
+
+	* minibuf.texi (Reading File Names): Document
+	read-file-name-completion-ignore-case.
+
+	* positions.texi (Screen Lines): Document nil for width argument
+	to compute-motion.
+
+2005-03-23  Kim F. Storm  <storm@cua.dk>
+
+	* display.texi (Standard Faces): Other faces used in the fringe
+	implicitly inherits from the fringe face.
+	(Fringe Bitmaps): FACE in right-fringe and left-fringe display
+	properties implicitly inherits from fringe face.
+	(Customizing Bitmaps): Likewise for set-fringe-bitmap-face.
+
 2005-03-20  Chong Yidong  <cyd@stupidchicken.com>
 
 	* display.texi (Invisible Text): State default value of
--- a/lispref/Makefile.in	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/Makefile.in	Sun Mar 27 17:29:43 2005 +0000
@@ -46,7 +46,6 @@
   $(srcdir)/back.texi \
   $(srcdir)/backups.texi \
   $(srcdir)/buffers.texi \
-  $(srcdir)/calendar.texi \
   $(srcdir)/commands.texi \
   $(srcdir)/compile.texi \
   $(srcdir)/control.texi \
--- a/lispref/calendar.texi	Wed Mar 23 13:35:08 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,996 +0,0 @@
-@c -*-texinfo-*-
-@c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998 Free Software Foundation, Inc.
-@c See the file elisp.texi for copying conditions.
-@node Calendar, System Interface, Display, Top
-@chapter Customizing the Calendar and Diary
-
-  There are many customizations that you can use to make the calendar and
-diary suit your personal tastes.
-
-@menu
-* Calendar Customizing::   Defaults you can set.
-* Holiday Customizing::    Defining your own holidays.
-* Date Display Format::    Changing the format.
-* Time Display Format::    Changing the format.
-* Daylight Savings::       Changing the default.
-* Diary Customizing::      Defaults you can set.
-* Hebrew/Islamic Entries:: How to obtain them.
-* Fancy Diary Display::    Enhancing the diary display, sorting entries,
-                             using included diary files.
-* Sexp Diary Entries::     Fancy things you can do.
-* Appt Customizing::	   Customizing appointment reminders.
-@end menu
-
-@node Calendar Customizing
-@section Customizing the Calendar
-@vindex view-diary-entries-initially
-
-  If you set the variable @code{view-diary-entries-initially} to
-@code{t}, calling up the calendar automatically displays the diary
-entries for the current date as well.  The diary dates appear only if
-the current date is visible.  If you add both of the following lines to
-your init file:@refill
-
-@example
-(setq view-diary-entries-initially t)
-(calendar)
-@end example
-
-@noindent
-this displays both the calendar and diary windows whenever you start Emacs.
-
-@vindex view-calendar-holidays-initially
-  Similarly, if you set the variable
-@code{view-calendar-holidays-initially} to @code{t}, entering the
-calendar automatically displays a list of holidays for the current
-three-month period.  The holiday list appears in a separate
-window.
-
-@vindex mark-diary-entries-in-calendar
-  You can set the variable @code{mark-diary-entries-in-calendar} to
-@code{t} in order to mark any dates with diary entries.  This takes
-effect whenever the calendar window contents are recomputed.  There are
-two ways of marking these dates: by changing the face (@pxref{Faces}),
-or by placing a plus sign (@samp{+}) beside the date.
-
-@vindex mark-holidays-in-calendar
-  Similarly, setting the variable @code{mark-holidays-in-calendar} to
-@code{t} marks holiday dates, either with a change of face or with an
-asterisk (@samp{*}).
-
-@vindex calendar-holiday-marker
-@vindex diary-entry-marker
-  The variable @code{calendar-holiday-marker} specifies how to mark a
-date as being a holiday.  Its value may be a single-character string
-to insert next to the date, or a face name to use for displaying the
-date.  Likewise, the variable @code{diary-entry-marker} specifies how
-to mark a date that has diary entries.  The calendar creates faces
-named @code{holiday-face} and @code{diary-face} for these purposes;
-those symbols are the default values of these variables.
-
-@vindex calendar-load-hook
-  The variable @code{calendar-load-hook} is a normal hook run when the
-calendar package is first loaded (before actually starting to display
-the calendar).
-
-@vindex initial-calendar-window-hook
-  Starting the calendar runs the normal hook
-@code{initial-calendar-window-hook}.  Recomputation of the calendar
-display does not run this hook.  But if you leave the calendar with the
-@kbd{q} command and reenter it, the hook runs again.@refill
-
-@vindex today-visible-calendar-hook
-  The variable @code{today-visible-calendar-hook} is a normal hook run
-after the calendar buffer has been prepared with the calendar when the
-current date is visible in the window.  One use of this hook is to
-replace today's date with asterisks; to do that, use the hook function
-@code{calendar-star-date}.
-
-@findex calendar-star-date
-@example
-(add-hook 'today-visible-calendar-hook 'calendar-star-date)
-@end example
-
-@noindent
-Another standard hook function marks the current date, either by
-changing its face or by adding an asterisk.  Here's how to use it:
-
-@findex calendar-mark-today
-@example
-(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
-@end example
-
-@noindent
-@vindex calendar-today-marker
-The variable @code{calendar-today-marker} specifies how to mark
-today's date.  Its value should be a single-character string to insert
-next to the date or a face name to use for displaying the date.  A
-face named @code{calendar-today-face} is provided for this purpose;
-that symbol is the default for this variable.
-
-@vindex today-invisible-calendar-hook
-@noindent
-  A similar normal hook, @code{today-invisible-calendar-hook} is run if
-the current date is @emph{not} visible in the window.
-
-@vindex calendar-move-hook
-  Each of the calendar cursor motion commands runs the hook
-@code{calendar-move-hook} after it moves the cursor.
-
-@node Holiday Customizing
-@section Customizing the Holidays
-
-@vindex calendar-holidays
-@vindex christian-holidays
-@vindex hebrew-holidays
-@vindex islamic-holidays
-  Emacs knows about holidays defined by entries on one of several lists.
-You can customize these lists of holidays to your own needs, adding or
-deleting holidays.  The lists of holidays that Emacs uses are for
-general holidays (@code{general-holidays}), local holidays
-(@code{local-holidays}), Christian holidays (@code{christian-holidays}),
-Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim)
-holidays (@code{islamic-holidays}), and other holidays
-(@code{other-holidays}).
-
-@vindex general-holidays
-  The general holidays are, by default, holidays common throughout the
-United States.  To eliminate these holidays, set @code{general-holidays}
-to @code{nil}.
-
-@vindex local-holidays
-  There are no default local holidays (but sites may supply some).  You
-can set the variable @code{local-holidays} to any list of holidays, as
-described below.
-
-@vindex all-christian-calendar-holidays
-@vindex all-hebrew-calendar-holidays
-@vindex all-islamic-calendar-holidays
-  By default, Emacs does not include all the holidays of the religions
-that it knows, only those commonly found in secular calendars.  For a
-more extensive collection of religious holidays, you can set any (or
-all) of the variables @code{all-christian-calendar-holidays},
-@code{all-hebrew-calendar-holidays}, or
-@code{all-islamic-calendar-holidays} to @code{t}.  If you want to
-eliminate the religious holidays, set any or all of the corresponding
-variables @code{christian-holidays}, @code{hebrew-holidays}, and
-@code{islamic-holidays} to @code{nil}.@refill
-
-@vindex other-holidays
-  You can set the variable @code{other-holidays} to any list of
-holidays.  This list, normally empty, is intended for individual use.
-
-@cindex holiday forms
-  Each of the lists (@code{general-holidays}, @code{local-holidays},
-@code{christian-holidays}, @code{hebrew-holidays},
-@code{islamic-holidays}, and @code{other-holidays}) is a list of
-@dfn{holiday forms}, each holiday form describing a holiday (or
-sometimes a list of holidays).
-
-  Here is a table of the possible kinds of holiday form.  Day numbers
-and month numbers count starting from 1, but ``dayname'' numbers
-count Sunday as 0.  The element @var{string} is always the
-name of the holiday, as a string.
-
-@table @code
-@item (holiday-fixed @var{month} @var{day} @var{string})
-A fixed date on the Gregorian calendar.
-
-@item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
-The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
-(@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
-from the end of the month.
-
-@item (holiday-hebrew @var{month} @var{day} @var{string})
-A fixed date on the Hebrew calendar.
-
-@item (holiday-islamic @var{month} @var{day} @var{string})
-A fixed date on the Islamic calendar.
-
-@item (holiday-julian @var{month} @var{day} @var{string})
-A fixed date on the Julian calendar.
-
-@item (holiday-sexp @var{sexp} @var{string})
-A date calculated by the Lisp expression @var{sexp}.  The expression
-should use the variable @code{year} to compute and return the date of a
-holiday, or @code{nil} if the holiday doesn't happen this year.  The
-value of @var{sexp} must represent the date as a list of the form
-@code{(@var{month} @var{day} @var{year})}.
-
-@item (if @var{condition} @var{holiday-form})
-A holiday that happens only if @var{condition} is true.
-
-@item (@var{function} @r{[}@var{args}@r{]})
-A list of dates calculated by the function @var{function}, called with
-arguments @var{args}.
-@end table
-
-  For example, suppose you want to add Bastille Day, celebrated in
-France on July 14.  You can do this as follows:
-
-@smallexample
-(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
-@end smallexample
-
-@noindent
-The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
-fourteenth day of the seventh month (July).
-
-  Many holidays occur on a specific day of the week, at a specific time
-of month.  Here is a holiday form describing Hurricane Supplication Day,
-celebrated in the Virgin Islands on the fourth Monday in August:
-
-@smallexample
-(holiday-float 8 1 4 "Hurricane Supplication Day")
-@end smallexample
-
-@noindent
-Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
-Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
-the month (1 specifies the first occurrence, 2 the second occurrence,
-@minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
-so on).
-
-  You can specify holidays that occur on fixed days of the Hebrew,
-Islamic, and Julian calendars too.  For example,
-
-@smallexample
-(setq other-holidays
-      '((holiday-hebrew 10 2 "Last day of Hanukkah")
-        (holiday-islamic 3 12 "Mohammed's Birthday")
-        (holiday-julian 4 2 "Jefferson's Birthday")))
-@end smallexample
-
-@noindent
-adds the last day of Hanukkah (since the Hebrew months are numbered with
-1 starting from Nisan), the Islamic feast celebrating Mohammed's
-birthday (since the Islamic months are numbered from 1 starting with
-Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
-Julian calendar.
-
-  To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
-@code{holiday-sexp} form.  For example, American presidential elections
-occur on the first Tuesday after the first Monday in November of years
-divisible by 4:
-
-@smallexample
-(holiday-sexp '(if (= 0 (% year 4))
-                   (calendar-gregorian-from-absolute
-                    (1+ (calendar-dayname-on-or-before
-                          1 (+ 6 (calendar-absolute-from-gregorian
-                                  (list 11 1 year)))))))
-              "US Presidential Election")
-@end smallexample
-
-@noindent
-or
-
-@smallexample
-(if (= 0 (% displayed-year 4))
-    (fixed 11
-           (extract-calendar-day
-             (calendar-gregorian-from-absolute
-               (1+ (calendar-dayname-on-or-before
-                     1 (+ 6 (calendar-absolute-from-gregorian
-                              (list 11 1 displayed-year)))))))
-           "US Presidential Election"))
-@end smallexample
-
-  Some holidays just don't fit into any of these forms because special
-calculations are involved in their determination.  In such cases you
-must write a Lisp function to do the calculation.  To include eclipses,
-for example, add @code{(eclipses)} to @code{other-holidays}
-and write an Emacs Lisp function @code{eclipses} that returns a
-(possibly empty) list of the relevant Gregorian dates among the range
-visible in the calendar window, with descriptive strings, like this:
-
-@smallexample
-(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
-@end smallexample
-
-@node Date Display Format
-@section Date Display Format
-@vindex calendar-date-display-form
-
-  You can customize the manner of displaying dates in the diary, in mode
-lines, and in messages by setting @code{calendar-date-display-form}.
-This variable holds a list of expressions that can involve the variables
-@code{month}, @code{day}, and @code{year}, which are all numbers in
-string form, and @code{monthname} and @code{dayname}, which are both
-alphabetic strings.  In the American style, the default value of this
-list is as follows:
-
-@smallexample
-((if dayname (concat dayname ", ")) monthname " " day ", " year)
-@end smallexample
-
-@noindent
-while in the European style this value is the default:
-
-@smallexample
-((if dayname (concat dayname ", ")) day " " monthname " " year)
-@end smallexample
-
-@noindent
-The ISO standard date representation is this:
-
-@smallexample
-(year "-" month "-" day)
-@end smallexample
-
-@noindent
-This specifies a typical American format:
-
-@smallexample
-(month "/" day "/" (substring year -2))
-@end smallexample
-
-@node Time Display Format
-@section Time Display Format
-@vindex calendar-time-display-form
-
-  The calendar and diary by default display times of day in the
-conventional American style with the hours from 1 through 12, minutes,
-and either @samp{am} or @samp{pm}.  If you prefer the European style,
-also known in the US as military, in which the hours go from 00 to 23,
-you can alter the variable @code{calendar-time-display-form}.  This
-variable is a list of expressions that can involve the variables
-@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
-numbers in string form, and @code{am-pm} and @code{time-zone}, which are
-both alphabetic strings.  The default value of
-@code{calendar-time-display-form} is as follows:
-
-@smallexample
-(12-hours ":" minutes am-pm
-          (if time-zone " (") time-zone (if time-zone ")"))
-@end smallexample
-
-@noindent
-Here is a value that provides European style times:
-
-@smallexample
-(24-hours ":" minutes
-          (if time-zone " (") time-zone (if time-zone ")"))
-@end smallexample
-
-@node Daylight Savings
-@section Daylight Savings Time
-@cindex daylight savings time
-
-  Emacs understands the difference between standard time and daylight
-savings time---the times given for sunrise, sunset, solstices,
-equinoxes, and the phases of the moon take that into account.  The rules
-for daylight savings time vary from place to place and have also varied
-historically from year to year.  To do the job properly, Emacs needs to
-know which rules to use.
-
-  Some operating systems keep track of the rules that apply to the place
-where you are; on these systems, Emacs gets the information it needs
-from the system automatically.  If some or all of this information is
-missing, Emacs fills in the gaps with the rules currently used in
-Cambridge, Massachusetts, which is the center of GNU's world.
-
-
-@vindex calendar-daylight-savings-starts
-@vindex calendar-daylight-savings-ends
-  If the default choice of rules is not appropriate for your location,
-you can tell Emacs the rules to use by setting the variables
-@code{calendar-daylight-savings-starts} and
-@code{calendar-daylight-savings-ends}.  Their values should be Lisp
-expressions that refer to the variable @code{year}, and evaluate to the
-Gregorian date on which daylight savings time starts or (respectively)
-ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
-The values should be @code{nil} if your area does not use daylight
-savings time.
-
-  Emacs uses these expressions to determine the start and end dates of
-daylight savings time as holidays and for correcting times of day in the
-solar and lunar calculations.
-
-  The values for Cambridge, Massachusetts are as follows:
-
-@example
-@group
-(calendar-nth-named-day 1 0 4 year)
-(calendar-nth-named-day -1 0 10 year)
-@end group
-@end example
-
-@noindent
-i.e., the first 0th day (Sunday) of the fourth month (April) in
-the year specified by @code{year}, and the last Sunday of the tenth month
-(October) of that year.  If daylight savings time were
-changed to start on October 1, you would set
-@code{calendar-daylight-savings-starts} to this:
-
-@example
-(list 10 1 year)
-@end example
-
-  For a more complex example, suppose daylight savings time begins on
-the first of Nisan on the Hebrew calendar.  You should set
-@code{calendar-daylight-savings-starts} to this value:
-
-@example
-(calendar-gregorian-from-absolute
-  (calendar-absolute-from-hebrew
-    (list 1 1 (+ year 3760))))
-@end example
-
-@noindent
-because Nisan is the first month in the Hebrew calendar and the Hebrew
-year differs from the Gregorian year by 3760 at Nisan.
-
-  If there is no daylight savings time at your location, or if you want
-all times in standard time, set @code{calendar-daylight-savings-starts}
-and @code{calendar-daylight-savings-ends} to @code{nil}.
-
-@vindex calendar-daylight-time-offset
-  The variable @code{calendar-daylight-time-offset} specifies the
-difference between daylight savings time and standard time, measured in
-minutes.  The value for Cambridge is 60.
-
-@vindex calendar-daylight-savings-starts-time
-@vindex calendar-daylight-savings-ends-time
-  The variable @code{calendar-daylight-savings-starts-time} and the
-variable @code{calendar-daylight-savings-ends-time} specify the number
-of minutes after midnight local time when the transition to and from
-daylight savings time should occur.  For Cambridge, both variables'
-values are 120.
-
-@node Diary Customizing
-@section Customizing the Diary
-
-@vindex holidays-in-diary-buffer
-  Ordinarily, the mode line of the diary buffer window indicates any
-holidays that fall on the date of the diary entries.  The process of
-checking for holidays can take several seconds, so including holiday
-information delays the display of the diary buffer noticeably.  If you'd
-prefer to have a faster display of the diary buffer but without the
-holiday information, set the variable @code{holidays-in-diary-buffer} to
-@code{nil}.@refill
-
-@vindex number-of-diary-entries
-  The variable @code{number-of-diary-entries} controls the number of
-days of diary entries to be displayed at one time.  It affects the
-initial display when @code{view-diary-entries-initially} is @code{t}, as
-well as the command @kbd{M-x diary}.  For example, the default value is
-1, which says to display only the current day's diary entries.  If the
-value is 2, both the current day's and the next day's entries are
-displayed.  The value can also be a vector of seven elements: for
-example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
-appear on Sunday, the current date's and the next day's diary entries
-appear Monday through Thursday, Friday through Monday's entries appear
-on Friday, while on Saturday only that day's entries appear.
-
-@vindex print-diary-entries-hook
-@findex print-diary-entries
-  The variable @code{print-diary-entries-hook} is a normal hook run
-after preparation of a temporary buffer containing just the diary
-entries currently visible in the diary buffer.  (The other, irrelevant
-diary entries are really absent from the temporary buffer; in the diary
-buffer, they are merely hidden.)  The default value of this hook does
-the printing with the command @code{lpr-buffer}.  If you want to use a
-different command to do the printing, just change the value of this
-hook.  Other uses might include, for example, rearranging the lines into
-order by day and time.
-
-@vindex diary-date-forms
-  You can customize the form of dates in your diary file, if neither the
-standard American nor European styles suits your needs, by setting the
-variable @code{diary-date-forms}.  This variable is a list of patterns
-for recognizing a date.  Each date pattern is a list whose elements may
-be regular expressions (@pxref{Regular Expressions}) or the symbols
-@code{month}, @code{day}, @code{year}, @code{monthname}, and
-@code{dayname}.  All these elements serve as patterns that match certain
-kinds of text in the diary file.  In order for the date pattern, as a
-whole, to match, all of its elements must match consecutively.
-
-  A regular expression in a date pattern matches in its usual fashion,
-using the standard syntax table altered so that @samp{*} is a word
-constituent.
-
-  The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
-and @code{dayname} match the month number, day number, year number,
-month name, and day name of the date being considered.  The symbols that
-match numbers allow leading zeros; those that match names allow
-three-letter abbreviations and capitalization.  All the symbols can
-match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
-month'', and so on, it should match regardless of the date being
-considered.
-
-  The default value of @code{diary-date-forms} in the American style is
-this:
-
-@example
-((month "/" day "[^/0-9]")
- (month "/" day "/" year "[^0-9]")
- (monthname " *" day "[^,0-9]")
- (monthname " *" day ", *" year "[^0-9]")
- (dayname "\\W"))
-@end example
-
-  The date patterns in the list must be @emph{mutually exclusive} and
-must not match any portion of the diary entry itself, just the date and
-one character of whitespace.  If, to be mutually exclusive, the pattern
-must match a portion of the diary entry text---beyond the whitespace
-that ends the date---then the first element of the date pattern
-@emph{must} be @code{backup}.  This causes the date recognizer to back
-up to the beginning of the current word of the diary entry, after
-finishing the match.  Even if you use @code{backup}, the date pattern
-must absolutely not match more than a portion of the first word of the
-diary entry.  The default value of @code{diary-date-forms} in the
-European style is this list:
-
-@example
-((day "/" month "[^/0-9]")
- (day "/" month "/" year "[^0-9]")
- (backup day " *" monthname "\\W+\\<[^*0-9]")
- (day " *" monthname " *" year "[^0-9]")
- (dayname "\\W"))
-@end example
-
-@noindent
-Notice the use of @code{backup} in the third pattern, because it needs
-to match part of a word beyond the date itself to distinguish it from
-the fourth pattern.
-
-@node Hebrew/Islamic Entries
-@section Hebrew- and Islamic-Date Diary Entries
-
-  Your diary file can have entries based on Hebrew or Islamic dates, as
-well as entries based on the world-standard Gregorian calendar.
-However, because recognition of such entries is time-consuming and most
-people don't use them, you must explicitly enable their use.  If you
-want the diary to recognize Hebrew-date diary entries, for example,
-you must do this:
-
-@vindex nongregorian-diary-listing-hook
-@vindex nongregorian-diary-marking-hook
-@findex list-hebrew-diary-entries
-@findex mark-hebrew-diary-entries
-@smallexample
-(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
-(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
-@end smallexample
-
-@noindent
-If you want Islamic-date entries, do this:
-
-@findex list-islamic-diary-entries
-@findex mark-islamic-diary-entries
-@smallexample
-(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
-(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
-@end smallexample
-
-  Hebrew- and Islamic-date diary entries have the same formats as
-Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
-date and @samp{I} precedes an Islamic date.  Moreover, because the
-Hebrew and Islamic month names are not uniquely specified by the first
-three letters, you may not abbreviate them.  For example, a diary entry
-for the Hebrew date Heshvan 25 could look like this:
-
-@smallexample
-HHeshvan 25 Happy Hebrew birthday!
-@end smallexample
-
-@noindent
-and would appear in the diary for any date that corresponds to Heshvan 25
-on the Hebrew calendar.  And here is an Islamic-date diary entry that matches
-Dhu al-Qada 25:
-
-@smallexample
-IDhu al-Qada 25 Happy Islamic birthday!
-@end smallexample
-
-  As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
-are nonmarking if they are preceded with an ampersand (@samp{&}).
-
-  Here is a table of commands used in the calendar to create diary entries
-that match the selected date and other dates that are similar in the Hebrew
-or Islamic calendar:
-
-@table @kbd
-@item i h d
-Add a diary entry for the Hebrew date corresponding to the selected date
-(@code{insert-hebrew-diary-entry}).
-@item i h m
-Add a diary entry for the day of the Hebrew month corresponding to the
-selected date (@code{insert-monthly-hebrew-diary-entry}).  This diary
-entry matches any date that has the same Hebrew day-within-month as the
-selected date.
-@item i h y
-Add a diary entry for the day of the Hebrew year corresponding to the
-selected date (@code{insert-yearly-hebrew-diary-entry}).  This diary
-entry matches any date which has the same Hebrew month and day-within-month
-as the selected date.
-@item i i d
-Add a diary entry for the Islamic date corresponding to the selected date
-(@code{insert-islamic-diary-entry}).
-@item i i m
-Add a diary entry for the day of the Islamic month corresponding to the
-selected date (@code{insert-monthly-islamic-diary-entry}).
-@item i i y
-Add a diary entry for the day of the Islamic year corresponding to the
-selected date (@code{insert-yearly-islamic-diary-entry}).
-@end table
-
-@findex insert-hebrew-diary-entry
-@findex insert-monthly-hebrew-diary-entry
-@findex insert-yearly-hebrew-diary-entry
-@findex insert-islamic-diary-entry
-@findex insert-monthly-islamic-diary-entry
-@findex insert-yearly-islamic-diary-entry
-  These commands work much like the corresponding commands for ordinary
-diary entries: they apply to the date that point is on in the calendar
-window, and what they do is insert just the date portion of a diary entry
-at the end of your diary file.  You must then insert the rest of the
-diary entry.
-
-@node Fancy Diary Display
-@section Fancy Diary Display
-@vindex diary-display-hook
-@findex simple-diary-display
-
-  Diary display works by preparing the diary buffer and then running the
-hook @code{diary-display-hook}.  The default value of this hook
-(@code{simple-diary-display}) hides the irrelevant diary entries and
-then displays the buffer.  However, if you specify the hook as follows,
-
-@cindex diary buffer
-@findex fancy-diary-display
-@example
-(add-hook 'diary-display-hook 'fancy-diary-display)
-@end example
-
-@noindent
-this enables fancy diary display.  It displays diary entries and
-holidays by copying them into a special buffer that exists only for the
-sake of display.  Copying to a separate buffer provides an opportunity
-to change the displayed text to make it prettier---for example, to sort
-the entries by the dates they apply to.
-
-  As with simple diary display, you can print a hard copy of the buffer
-with @code{print-diary-entries}.  To print a hard copy of a day-by-day
-diary for a week, position point on Sunday of that week, type
-@kbd{7 d}, and then do @kbd{M-x print-diary-entries}.  As usual, the
-inclusion of the holidays slows down the display slightly; you can speed
-things up by setting the variable @code{holidays-in-diary-buffer} to
-@code{nil}.
-
-@vindex diary-list-include-blanks
-  Ordinarily, the fancy diary buffer does not show days for which there are
-no diary entries, even if that day is a holiday.  If you want such days to be
-shown in the fancy diary buffer, set the variable
-@code{diary-list-include-blanks} to @code{t}.@refill
-
-@cindex sorting diary entries
-  If you use the fancy diary display, you can use the normal hook
-@code{list-diary-entries-hook} to sort each day's diary entries by their
-time of day.  Here's how:
-
-@findex sort-diary-entries
-@example
-(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
-@end example
-
-@noindent
-For each day, this sorts diary entries that begin with a recognizable
-time of day according to their times.  Diary entries without times come
-first within each day.
-
-  Fancy diary display also has the ability to process included diary
-files.  This permits a group of people to share a diary file for events
-that apply to all of them.  Lines in the diary file of this form:
-
-@smallexample
-#include "@var{filename}"
-@end smallexample
-
-@noindent
-includes the diary entries from the file @var{filename} in the fancy
-diary buffer.  The include mechanism is recursive, so that included files
-can include other files, and so on; you must be careful not to have a
-cycle of inclusions, of course.  Here is how to enable the include
-facility:
-
-@vindex list-diary-entries-hook
-@vindex mark-diary-entries-hook
-@findex include-other-diary-files
-@findex mark-included-diary-files
-@smallexample
-(add-hook 'list-diary-entries-hook 'include-other-diary-files)
-(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
-@end smallexample
-
-The include mechanism works only with the fancy diary display, because
-ordinary diary display shows the entries directly from your diary file.
-
-@node Sexp Diary Entries
-@section Sexp Entries and the Fancy Diary Display
-@cindex sexp diary entries
-
-  Sexp diary entries allow you to do more than just have complicated
-conditions under which a diary entry applies.  If you use the fancy
-diary display, sexp entries can generate the text of the entry depending
-on the date itself.  For example, an anniversary diary entry can insert
-the number of years since the anniversary date into the text of the
-diary entry.  Thus the @samp{%d} in this dairy entry:
-
-@findex diary-anniversary
-@smallexample
-%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
-@end smallexample
-
-@noindent
-gets replaced by the age, so on October 31, 1990 the entry appears in
-the fancy diary buffer like this:
-
-@smallexample
-Arthur's birthday (42 years old)
-@end smallexample
-
-@noindent
-If the diary file instead contains this entry:
-
-@smallexample
-%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
-@end smallexample
-
-@noindent
-the entry in the fancy diary buffer for October 31, 1990 appears like this:
-
-@smallexample
-Arthur's 42nd birthday
-@end smallexample
-
-  Similarly, cyclic diary entries can interpolate the number of repetitions
-that have occurred:
-
-@findex diary-cyclic
-@smallexample
-%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
-@end smallexample
-
-@noindent
-looks like this:
-
-@smallexample
-Renew medication (5th time)
-@end smallexample
-
-@noindent
-in the fancy diary display on September 8, 1990.
-
-  There is an early reminder diary sexp that includes its entry in the
-diary not only on the date of occurrence, but also on earlier dates.
-For example, if you want a reminder a week before your anniversary, you
-can use
-
-@findex diary-remind
-@smallexample
-%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
-@end smallexample
-
-@noindent
-and the fancy diary will show
-@smallexample
-Ed's anniversary
-@end smallexample
-@noindent
-both on December 15 and on December 22.
-
-@findex diary-date
-  The function @code{diary-date} applies to dates described by a month,
-day, year combination, each of which can be an integer, a list of
-integers, or @code{t}. The value @code{t} means all values.  For
-example,
-
-@smallexample
-%%(diary-date '(10 11 12) 22 t) Rake leaves
-@end smallexample
-
-@noindent
-causes the fancy diary to show
-
-@smallexample
-Rake leaves
-@end smallexample
-
-@noindent
-on October 22, November 22, and December 22 of every year.
-
-@findex diary-float
-  The function @code{diary-float} allows you to describe diary entries
-that apply to dates like the third Friday of November, or the last
-Tuesday in April.  The parameters are the @var{month}, @var{dayname},
-and an index @var{n}. The entry appears on the @var{n}th @var{dayname}
-of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and
-so on.  If @var{n} is negative it counts backward from the end of
-@var{month}.  The value of @var{month} can be a list of months, a single
-month, or @code{t} to specify all months.  You can also use an optional
-parameter @var{day} to specify the @var{n}th @var{dayname} of
-@var{month} on or after/before @var{day}; the value of @var{day} defaults
-to 1 if @var{n} is positive and to the last day of @var{month} if
-@var{n} is negative.  For example,
-
-@smallexample
-%%(diary-float t 1 -1) Pay rent
-@end smallexample
-
-@noindent
-causes the fancy diary to show
-
-@smallexample
-Pay rent
-@end smallexample
-
-@noindent
-on the last Monday of every month.
-
-  The generality of sexp diary entries lets you specify any diary
-entry that you can describe algorithmically.  A sexp diary entry
-contains an expression that computes whether the entry applies to any
-given date.  If its value is non-@code{nil}, the entry applies to that
-date; otherwise, it does not.  The expression can use the variable
-@code{date} to find the date being considered; its value is a list
-(@var{month} @var{day} @var{year}) that refers to the Gregorian
-calendar.
-
-  The sexp diary entry applies to a date when the expression's value
-is non-@code{nil}, but some values have more specific meanings.  If
-the value is a string, that string is a description of the event which
-occurs on that date.  The value can also have the form
-@code{(@var{mark} . @var{string})}; then @var{mark} specifies how to
-mark the date in the calendar, and @var{string} is the description of
-the event.  If @var{mark} is a single-character string, that character
-appears next to the date in the calendar.  If @var{mark} is a face
-name, the date is displayed in that face.  If @var{mark} is
-@code{nil}, that specifies no particular highlighting for the date.
-
-  Suppose you get paid on the 21st of the month if it is a weekday, and
-on the Friday before if the 21st is on a weekend.  Here is how to write
-a sexp diary entry that matches those dates:
-
-@smallexample
-&%%(let ((dayname (calendar-day-of-week date))
-         (day (car (cdr date))))
-      (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
-          (and (memq day '(19 20)) (= dayname 5)))
-         ) Pay check deposited
-@end smallexample
-
-  The following sexp diary entries take advantage of the ability (in the fancy
-diary display) to concoct diary entries whose text varies based on the date:
-
-@findex diary-sunrise-sunset
-@findex diary-phases-of-moon
-@findex diary-day-of-year
-@findex diary-iso-date
-@findex diary-julian-date
-@findex diary-astro-day-number
-@findex diary-hebrew-date
-@findex diary-islamic-date
-@findex diary-french-date
-@findex diary-mayan-date
-@table @code
-@item %%(diary-sunrise-sunset)
-Make a diary entry for the local times of today's sunrise and sunset.
-@item %%(diary-phases-of-moon)
-Make a diary entry for the phases (quarters) of the moon.
-@item %%(diary-day-of-year)
-Make a diary entry with today's day number in the current year and the number
-of days remaining in the current year.
-@item %%(diary-iso-date)
-Make a diary entry with today's equivalent ISO commercial date.
-@item %%(diary-julian-date)
-Make a diary entry with today's equivalent date on the Julian calendar.
-@item %%(diary-astro-day-number)
-Make a diary entry with today's equivalent astronomical (Julian) day number.
-@item %%(diary-hebrew-date)
-Make a diary entry with today's equivalent date on the Hebrew calendar.
-@item %%(diary-islamic-date)
-Make a diary entry with today's equivalent date on the Islamic calendar.
-@item %%(diary-french-date)
-Make a diary entry with today's equivalent date on the French Revolutionary
-calendar.
-@item %%(diary-mayan-date)
-Make a diary entry with today's equivalent date on the Mayan calendar.
-@end table
-
-@noindent
-Thus including the diary entry
-
-@example
-&%%(diary-hebrew-date)
-@end example
-
-@noindent
-causes every day's diary display to contain the equivalent date on the
-Hebrew calendar, if you are using the fancy diary display.  (With simple
-diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
-diary for any date, but does nothing particularly useful.)
-
-  These functions can be used to construct sexp diary entries based on
-the Hebrew calendar in certain standard ways:
-
-@cindex rosh hodesh
-@findex diary-rosh-hodesh
-@cindex parasha, weekly
-@findex diary-parasha
-@cindex candle lighting times
-@findex diary-sabbath-candles
-@cindex omer count
-@findex diary-omer
-@cindex yahrzeits
-@findex diary-yahrzeit
-@table @code
-@item %%(diary-rosh-hodesh)
-Make a diary entry that tells the occurrence and ritual announcement of each
-new Hebrew month.
-@item %%(diary-parasha)
-Make a Saturday diary entry that tells the weekly synagogue scripture reading.
-@item %%(diary-sabbath-candles)
-Make a Friday diary entry that tells the @emph{local time} of Sabbath
-candle lighting.
-@item %%(diary-omer)
-Make a diary entry that gives the omer count, when appropriate.
-@item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
-Make a diary entry marking the anniversary of a date of death.  The date
-is the @emph{Gregorian} (civil) date of death.  The diary entry appears
-on the proper Hebrew calendar anniversary and on the day before.  (In
-the European style, the order of the parameters is changed to @var{day},
-@var{month}, @var{year}.)
-@end table
-
-  All the functions documented above take an optional argument
-@var{mark} which specifies how to mark the date in the calendar display.
-If one of these functions decides that it applies to a certain date,
-it returns a value that contains @var{mark}.
-
-@node Appt Customizing
-@section Customizing Appointment Reminders
-
-  You can specify exactly how Emacs reminds you of an appointment, and
-how far in advance it begins doing so, by setting these variables:
-
-@vindex appt-message-warning-time
-@vindex appt-audible
-@vindex appt-visible
-@vindex appt-display-mode-line
-@vindex appt-msg-window
-@vindex appt-display-duration
-@vindex appt-disp-window-function
-@vindex appt-delete-window-function
-@table @code
-@item appt-message-warning-time
-The time in minutes before an appointment that the reminder begins.  The
-default is 12 minutes.
-@item appt-audible
-If this is non-@code{nil}, Emacs rings the
-terminal bell for appointment reminders.  The default is @code{t}.
-@item appt-visible
-If this is non-@code{nil}, Emacs displays the appointment
-message in the echo area.  The default is @code{t}.
-@item appt-display-mode-line
-If this is non-@code{nil}, Emacs displays the number of minutes
-to the appointment on the mode line.  The default is @code{t}.
-@item appt-msg-window
-If this is non-@code{nil}, Emacs displays the appointment
-message in another window.  The default is @code{t}.
-@item appt-disp-window-function
-This variable holds a function to use to create the other window
-for the appointment message.
-@item appt-delete-window-function
-This variable holds a function to use to get rid of the appointment
-message window, when its time is up.
-@item appt-display-duration
-The number of seconds to display an appointment message.  The default
-is 10 seconds.
-@end table
-
-@ignore
-   arch-tag: 8e50c766-4703-4888-a421-af15244cca7e
-@end ignore
--- a/lispref/display.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/display.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -4,7 +4,7 @@
 @c   2002, 2005  Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/display
-@node Display, Calendar, Processes, Top
+@node Display, System Interface, Processes, Top
 @chapter Emacs Display
 
   This chapter describes a number of features related to the display
@@ -1695,8 +1695,10 @@
 
 @item fringe
 @kindex fringe @r{(face name)}
-This face controls the default colors of window fringes, the thin areas on
-either side that are used to display continuation and truncation glyphs.
+This face controls the default colors of window fringes, the thin
+areas on either side that are used to display continuation and
+truncation glyphs.  Other faces used to display bitmaps in the fringe
+are implicitly merged with this face.
 
 @item minibuffer-prompt
 @kindex minibuffer-prompt @r{(face name)}
@@ -2006,6 +2008,8 @@
 The name of a face from which to inherit attributes, or a list of face
 names.  Attributes from inherited faces are merged into the face like an
 underlying face would be, with higher priority than underlying faces.
+If a list of faces is used, attributes from faces earlier in the list
+override those from later faces.
 
 @item :box
 Whether or not a box should be drawn around characters, its color, the
@@ -2831,9 +2835,12 @@
 of the characters that appears in it.  Use a display specification of
 the form @code{(left-fringe @var{bitmap} [@var{face}])} or
 @code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display
-Property}).  Here, @var{bitmap} is a symbol identifying the bitmap
-you want, and @var{face} (which is optional) is the name of the face
-whose colors should be used for displaying the bitmap.
+Property}).  Here, @var{bitmap} is a symbol identifying the bitmap you
+want, and @var{face} (which is optional) is the name of the face whose
+colors should be used for displaying the bitmap, instead of the
+default @code{fringe} face.  @var{face} is automatically merged with
+the @code{fringe} face, so normally @var{face} need only specify the
+foreground color for the bitmap.
 
   These are the symbols identify the standard fringe bitmaps.
 Evaluate @code{(require 'fringe)} to define them.  Fringe bitmap
@@ -2923,8 +2930,8 @@
 If @var{face} is @code{nil}, it selects the @code{fringe} face.  The
 bitmap's face controls the color to draw it in.
 
-The face you use here should be derived from @code{fringe}, and should
-specify only the foreground color.
+@var{face} is merged with the @code{fringe} face, so normally
+@var{face} should specify only the foreground color.
 @end defun
 
 @node Overlay Arrow
@@ -2986,11 +2993,21 @@
 @section Scroll Bars
 
 Normally the frame parameter @code{vertical-scroll-bars} controls
-whether the windows in the frame have vertical scroll bars.  A
-non-@code{nil} parameter value means they do.  The frame parameter
+whether the windows in the frame have vertical scroll bars, and
+whether they are on the left or right.  The frame parameter
 @code{scroll-bar-width} specifies how wide they are (@code{nil}
 meaning the default).  @xref{Window Frame Parameters}.
 
+@defun frame-current-scroll-bars &optional frame
+This function reports the scroll bar type settings for frame
+@var{frame}.  The value is a cons cell
+@code{(@var{vertical-type} .@: @var{horizontal-type})}, where
+@var{vertical-type} is either @code{left}, @code{right}, or @code{nil}
+(which means no scroll bar.)  @var{horizontal-type} is meant to
+specify the horizontal scroll bar type, but since they are not
+implemented, it is always @code{nil}.
+@end defun
+
 @vindex vertical-scroll-bar
   You can enable or disable scroll bars for a particular buffer,
 by setting the variable @code{vertical-scroll-bar}.  This variable
@@ -3045,6 +3062,16 @@
 the left, and @code{right} to put a scroll bar on the right.
 @end defvar
 
+@defun window-current-scroll-bars &optional window
+This function reports the scroll bar type for window @var{window}.
+If @var{window} is omitted or @code{nil}, the selected window is used.
+The value is a cons cell
+@code{(@var{vertical-type} .@: @var{horizontal-type})}.  Unlike
+@code{window-scroll-bars}, this reports the scroll bar type actually
+used, once frame defaults and @code{scroll-bar-mode} are taken into
+account.
+@end defun
+
 @defvar scroll-bar-width
 This variable, always local in all buffers, specifies the width of the
 buffer's scroll bars, measured in pixels.  A value of @code{nil} means
--- a/lispref/elisp.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/elisp.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -152,7 +152,6 @@
 
 * Processes::               Running and communicating with subprocesses.
 * Display::	            Features for controlling the screen display.
-* Calendar::		    Customizing the calendar and diary.
 * System Interface::        Getting the user id, system type, environment
                               variables, and other such things.
 
@@ -973,7 +972,6 @@
 @include processes.texi
 
 @include display.texi
-@include calendar.texi
 @include os.texi
 
 @c MOVE to Emacs Manual:  include misc-modes.texi
--- a/lispref/makefile.w32-in	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/makefile.w32-in	Sun Mar 27 17:29:43 2005 +0000
@@ -48,7 +48,6 @@
   $(srcdir)/back.texi \
   $(srcdir)/backups.texi \
   $(srcdir)/buffers.texi \
-  $(srcdir)/calendar.texi \
   $(srcdir)/commands.texi \
   $(srcdir)/compile.texi \
   $(srcdir)/control.texi \
--- a/lispref/markers.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/markers.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -554,6 +554,12 @@
 every buffer-modifying primitive sets @code{deactivate-mark}.  The
 consequence of this is that commands that modify the buffer normally
 make the mark inactive.
+
+Lisp programs can set @code{transient-mark-mode} to @code{only} to
+enable Transient Mark mode for the following command only.  During
+that following command, the value of transient-mark-mode is
+@code{identity}.  If it is still @code{identity} at the end of the
+command, it changes to nil.
 @end defopt
 
 @defopt mark-even-if-inactive
--- a/lispref/minibuf.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/minibuf.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1296,6 +1296,11 @@
 doing its usual work.
 @end defvar
 
+@defvar read-file-name-completion-ignore-case
+If this variable is non-@code{nil}, @code{read-file-name} ignores case
+when performing completion.
+@end defvar
+
 @defun read-directory-name prompt &optional directory default existing initial
 This function is like @code{read-file-name} but allows only directory
 names as completion possibilities.
--- a/lispref/os.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/os.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -4,7 +4,7 @@
 @c   Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/os
-@node System Interface, Antinews, Calendar, Top
+@node System Interface, Antinews, Display, Top
 @chapter Operating System Interface
 
   This chapter is about starting and getting out of Emacs, access to
--- a/lispref/positions.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/positions.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -581,9 +581,9 @@
 the form @code{(@var{hpos} . @var{vpos})}.
 
 The argument @var{width} is the number of columns available to display
-text; this affects handling of continuation lines.  Use the value
-returned by @code{window-width} for the window of your choice;
-normally, use @code{(window-width @var{window})}.
+text; this affects handling of continuation lines.  @code{nil} means
+the actual number of usable text columns in the window, which is
+equivalent to the value returned by @code{(window-width window)}.
 
 The argument @var{offsets} is either @code{nil} or a cons cell of the
 form @code{(@var{hscroll} . @var{tab-offset})}.  Here @var{hscroll} is
--- a/lispref/vol1.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/vol1.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -258,7 +258,6 @@
                               variables, and other such things.
 * Display::	            Parameters controlling screen usage.
                               The bell.  Waiting for input.
-* Calendar::		    Customizing the calendar and diary.
 
 Appendices
 
@@ -989,7 +988,6 @@
 @c include processes.texi
 @c include os.texi
 @c include display.texi
-@c include calendar.texi
 
 @c MOVE to Emacs Manual:  include misc-modes.texi
 
--- a/lispref/vol2.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/lispref/vol2.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -259,7 +259,6 @@
                               variables, and other such things.
 * Display::	            Parameters controlling screen usage.
                               The bell.  Waiting for input.
-* Calendar::		    Customizing the calendar and diary.
 
 Appendices
 
@@ -990,7 +989,6 @@
 @include processes.texi
 @include os.texi
 @include display.texi
-@include calendar.texi
 
 @c MOVE to Emacs Manual:  include misc-modes.texi
 
--- a/man/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,154 @@
+2005-03-26  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* emacs-xtra.texi (Advanced Calendar/Diary Usage): New section;
+	move here from Emacs Lisp Reference Manual.
+	* calendar.texi (Calendar/Diary, Diary Commands)
+	(Special Diary Entries, Importing Diary): Change some xrefs to
+	point to emacs-xtra rather than elisp.
+
+	* emacs-xtra.texi (Calendar Customizing): Move
+	view-diary-entries-initially, view-calendar-holidays-initially,
+	mark-diary-entries-in-calendar, mark-holidays-in-calendar to main
+	Emacs Manual.
+	(Appt Customizing): Merge entire section into main Emacs Manual.
+	* calendar.texi (Holidays): Move view-calendar-holidays-initially,
+	mark-holidays-in-calendar here from emacs-xtra.
+	(Displaying the Diary): Move view-diary-entries-initially,
+	mark-diary-entries-in-calendar here from emacs-xtra.
+	(Appointments): Move appt-display-mode-line,
+	appt-display-duration, appt-disp-window-function,
+	appt-delete-window-function here from emacs-xtra.
+
+	* calendar.texi: Update and reformat copyright.
+	Change all @xrefs to the non-printing emacs-xtra to @inforefs.
+	(Calendar/Diary): Menu now only on Mouse-3, not C-Mouse-3.
+	(Diary): Refer to `diary-file' rather than ~/diary.
+	(Diary Commands): Rename node to "Displaying the Diary".
+	* emacs.texi (Top): Rename "Diary Commands" section.
+	* misc.texi (Hardcopy): Rename "Diary Commands" xref.
+
+2005-03-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* misc.texi (Emacs Server): Fix the command for setting
+	server-name.  Add an xref to Invoking emacsclient.
+
+	* help.texi (Help Summary): Clarify when "C-h ." will do something
+	nontrivial.
+	(Apropos): Add cindex entry for apropos-sort-by-scores.
+
+	* display.texi (Text Display): Add index entries for how no-break
+	characters are displayed.
+
+2005-03-26  Stephan Stahl  <stahl@eos.franken.de>  (tiny change)
+
+	* dired-x.texi (Multiple Dired Directories): default-directory was
+	renamed to dired-default-directory.
+
+2005-03-26  Eli Zaretskii  <eliz@gnu.org>
+
+	* files.texi (Visiting): Fix cross-references introduced with the
+	last change.
+
+	* xresources.texi (GTK resources): Fix last change. 
+
+2005-03-26  Jay Belanger  <belanger@truman.edu>
+
+	* calc.texi (Simplifying Formulas, Rewrite Rules): Change
+	description of top and bottom of fraction.
+	(Modulo Forms): Move description of how to create modulo forms to
+	earlier in the section.
+	(Fraction Mode): Suggest using : to get a fraction by dividing.
+	(Basic Arithmetic): Adjust placement of command name.
+	(Truncating the Stack): Emphasize that "hidden" entries are still
+	visible.
+	(Installation): Move discussion of printing manual to "About This
+	Manual".
+	(About This Manual): Mention how to print the manual.
+	(Reporting Bugs): Remove first person.
+	(Building Vectors): Add algebraic version of append.
+	(Manipulating Vectors): Fix algebraic version of calc-reverse-vector.
+	(Grouping Digits): Fix typo.
+
+2005-03-25  Chong Yidong  <cyd@stupidchicken.com>
+
+	* xresources.texi (X Resources): GTK options documented too.
+	(Resources): Clarify meaning of program name.
+	(Table of Resources): Add visualClass.
+	(GTK resources): Rewrite.
+	(GTK widget names, GTK Names in Emacs, GTK styles): Cleanups.
+
+	* display.texi (Text Display): Mention non-breaking spaces.
+
+	* files.texi (Reverting): Document auto-revert-check-vc-info.
+
+	* frames.texi (Mouse Commands): Document
+	x-mouse-click-focus-ignore-position and mouse-drag-copy-region.
+
+	* help.texi (Help Summary): Add `C-h .'.
+	(Apropos): Apropos accepts a list of search terms.
+	Document apropos-sort-by-scores.
+	(Help Echo): Document display-local-help.
+
+	* misc.texi (Emacs Server): Document server-name.
+	(Invoking emacsclient): Document -s option for server names.
+
+	* text.texi (Outline Visibility): Introduce "current heading
+	line" (commands can be called with point on a body line).
+	Re-order table to follow the sequence of discussion.
+	hide-body won't hide lines before first header line.
+	(TeX Mode): Add DocTeX mode.
+
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi: Replace
+	`legal' with `valid'.
+
+2005-03-25  Werner Lemberg  <wl@gnu.org>
+
+	* calc.texi, reftex.texi: Replace `illegal' with `invalid'.
+
+2005-03-24  Jay Belanger  <belanger@truman.edu>
+
+	* calc.texi (General Mode Commands)
+	(Mode Settings in Embedded Mode): Added some explanation of
+	recording mode settings.
+
+2005-03-24  Richard M. Stallman  <rms@gnu.org>
+
+	* mule.texi (Single-Byte Character Support): Delete mention
+	of iso-acc.el and iso-transl.el.
+
+	* calc.texi: Remove praise of non-free software.
+
+	* idlwave.texi: Don't say where to get IDL or its non-free manual.
+	(Installation): Node deleted.
+
+2005-03-23  Lute Kamstra  <lute@gnu.org>
+
+	* search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch.
+
+2005-03-23  Richard M. Stallman  <rms@gnu.org>
+
+	* url.texi (HTTP language/coding): Improve last change.
+
+	* search.texi: Delete explicit node pointers.
+	(Incremental Search): New menu.
+	(Basic Isearch, Repeat Isearch, Error in Isearch)
+	(Non-Ascii Isearch, Isearch Yank, Highlight Isearch, Isearch Scroll)
+	(Slow Isearch): New subnodes.
+	(Configuring Scrolling): Node deleted.
+	(Search Case): Doc default-case-fold-search.
+	(Regexp Replace): Move replace-regexp doc here.
+
+	* rmail.texi (Movemail): Put commas inside closequotes.
+
+	* picture.texi (Insert in Picture): Document C-c arrow combos.
+	(Basic Picture): Clarify erasure.
+
+	* display.texi (Font Lock): Put commas inside closequotes.
+
+	* cmdargs.texi (General Variables): Put commas inside closequotes.
+
 2005-03-23  Nick Roberts  <nickrob@snap.net.nz>
 
 	* building.texi (Stack Buffer): Mention reverse contrast for
--- a/man/calc.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/calc.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -83,7 +83,7 @@
 @copying
 This file documents Calc, the GNU Emacs calculator.
 
-Copyright (C) 1990, 1991, 2001, 2002 Free Software Foundation, Inc.
+Copyright (C) 1990, 1991, 2001, 2002, 2005 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -111,14 +111,15 @@
 @center GNU Emacs Calc Version 2.02g
 @c [volume]
 @sp 1
-@center January 2002
+@center March 2005
 @sp 5
 @center Dave Gillespie
 @center daveg@@synaptics.com
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1990, 1991, 2001, 2002 Free Software Foundation, Inc.
+Copyright @copyright{} 1990, 1991, 2001, 2002, 2005
+Free Software Foundation, Inc.
 @insertcopying
 @end titlepage
 
@@ -476,10 +477,9 @@
 use Calc only as a traditional desk calculator, all you really need to
 read is the ``Getting Started'' chapter of this manual and possibly the
 first few sections of the tutorial.  As you become more comfortable with
-the program you can learn its additional features.  In terms of efficiency,
-scope and depth, Calc cannot replace a powerful tool like Mathematica.
-But Calc has the advantages of convenience, portability, and availability
-of the source code.  And, of course, it's free!
+the program you can learn its additional features.  Calc does not
+have the scope and depth of a fully-functional symbolic math package,
+but Calc has the advantages of convenience, portability, and freedom.
 
 @node About This Manual, Notations Used in This Manual, What is Calc, Getting Started
 @section About This Manual
@@ -546,8 +546,35 @@
 function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v},
 respectively.  @xref{Help Commands}.
 
-Printed copies of this manual are also available from the Free Software
-Foundation.
+The Calc manual can be printed, but because the manual is so large, you
+should only make a printed copy if you really need it.  To print the
+manual, you will need the @TeX{} typesetting program (this is a free
+program by Donald Knuth at Stanford University) as well as the
+@file{texindex} program and @file{texinfo.tex} file, both of which can
+be obtained from the FSF as part of the @code{texinfo} package.
+To print the Calc manual in one huge tome, you will need the
+source code to this manual, @file{calc.texi}, available as part of the
+Emacs source.  Once you have this file, type @kbd{texi2dvi calc.texi}.
+Alternatively, change to the @file{man} subdirectory of the Emacs
+source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
+get some ``overfull box'' warnings while @TeX{} runs.)
+The result will be a device-independent output file called
+@file{calc.dvi}, which you must print in whatever way is right
+for your system.  On many systems, the command is
+
+@example
+lpr -d calc.dvi
+@end example
+
+@noindent
+or
+
+@example
+dvips calc.dvi
+@end example
+
+@c Printed copies of this manual are also available from the Free Software
+@c Foundation.
 
 @node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started
 @section Notations Used in This Manual
@@ -1365,13 +1392,13 @@
 
 Around this time, my friend Rick Koshi showed me his nifty new HP-28
 calculator.  It allowed the user to manipulate formulas as well as
-numerical quantities, and it could also operate on matrices.  I decided
-that these would be good for Calc to have, too.  And once things had
-gone this far, I figured I might as well take a look at serious algebra
-systems like Mathematica, Macsyma, and Maple for further ideas.  Since
-these systems did far more than I could ever hope to implement, I decided
-to focus on rewrite rules and other programming features so that users
-could implement what they needed for themselves.
+numerical quantities, and it could also operate on matrices.  I
+decided that these would be good for Calc to have, too.  And once
+things had gone this far, I figured I might as well take a look at
+serious algebra systems for further ideas.  Since these systems did
+far more than I could ever hope to implement, I decided to focus on
+rewrite rules and other programming features so that users could
+implement what they needed for themselves.
 
 Rick complained that matrices were hard to read, so I put in code to
 format them in a 2D style.  Once these routines were in place, Big mode
@@ -1412,16 +1439,14 @@
 Among the books used in the development of Calc were Knuth's @emph{Art
 of Computer Programming} (especially volume II, @emph{Seminumerical
 Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky,
-and Vetterling; Bevington's @emph{Data Reduction and Error Analysis for
-the Physical Sciences}; @emph{Concrete Mathematics} by Graham, Knuth,
-and Patashnik; Steele's @emph{Common Lisp, the Language}; the @emph{CRC
-Standard Math Tables} (William H. Beyer, ed.); and Abramowitz and
-Stegun's venerable @emph{Handbook of Mathematical Functions}.  I
-consulted the user's manuals for the HP-28 and HP-48 calculators, as
-well as for the programs Mathematica, SMP, Macsyma, Maple, MathCAD,
-Gnuplot, and others.  Also, of course, Calc could not have been written
-without the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil
-Lewis and Dan LaLiberte.
+and Vetterling; Bevington's @emph{Data Reduction and Error Analysis
+for the Physical Sciences}; @emph{Concrete Mathematics} by Graham,
+Knuth, and Patashnik; Steele's @emph{Common Lisp, the Language}; the
+@emph{CRC Standard Math Tables} (William H. Beyer, ed.); and
+Abramowitz and Stegun's venerable @emph{Handbook of Mathematical
+Functions}.  Also, of course, Calc could not have been written without
+the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil Lewis and
+Dan LaLiberte.
 
 Final thanks go to Richard Stallman, without whose fine implementations
 of the Emacs editor, language, and environment, Calc would have been
@@ -1503,8 +1528,8 @@
 
 @ifinfo
 You may wish to print out a copy of the Calc Summary and keep notes on
-it as you learn Calc.  @xref{Installation}, to see how to make a printed
-summary.  @xref{Summary}.
+it as you learn Calc.  @xref{About This Manual}, to see how to make a
+printed summary.  @xref{Summary}.
 @end ifinfo
 @iftex
 The Calc Summary at the end of the reference manual includes some blank
@@ -5601,8 +5626,8 @@
 
 (@bullet{}) @strong{Exercise 1.}  Type @kbd{m s} to get Symbolic
 mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}.
-Using a rewrite rule, simplify this formula by multiplying both
-sides by the conjugate @w{@samp{1 - sqrt(2)}}.  The result will have
+Using a rewrite rule, simplify this formula by multiplying the top and
+bottom by the conjugate @w{@samp{1 - sqrt(2)}}.  The result will have
 to be expanded by the distributive law; do this with another
 rewrite.  @xref{Rewrites Answer 1, 1}. (@bullet{})
 
@@ -11294,6 +11319,21 @@
 In many applications @expr{a} and @expr{M} will be
 integers but this is not required.
 
+@ignore
+@mindex M
+@end ignore
+@kindex M (modulo forms)
+@ignore
+@mindex mod
+@end ignore
+@tindex mod (operator)
+To create a modulo form during numeric entry, press the shift-@kbd{M}
+key to enter the word @samp{mod}.  As a special convenience, pressing
+shift-@kbd{M} a second time automatically enters the value of @expr{M}
+that was most recently used before.  During algebraic entry, either
+type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}).
+Once again, pressing this a second time enters the current modulo.
+
 Modulo forms are not to be confused with the modulo operator @samp{%}.
 The expression @samp{27 % 10} means to compute 27 modulo 10 to produce
 the result 7.  Further computations treat this 7 as just a regular integer.
@@ -11326,24 +11366,6 @@
 modulo @expr{M}, this is not a useful definition from the
 number-theoretical point of view.)
 
-@ignore
-@mindex M
-@end ignore
-@kindex M (modulo forms)
-@ignore
-@mindex mod
-@end ignore
-@tindex mod (operator)
-To create a modulo form during numeric entry, press the shift-@kbd{M}
-key to enter the word @samp{mod}.  As a special convenience, pressing
-shift-@kbd{M} a second time automatically enters the value of @expr{M}
-that was most recently used before.  During algebraic entry, either
-type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}).
-Once again, pressing this a second time enters the current modulo.
-
-You can also use @kbd{v p} and @kbd{%} to modify modulo forms.
-@xref{Building Vectors}.  @xref{Basic Arithmetic}.
-
 It is possible to mix HMS forms and modulo forms.  For example, an
 HMS form modulo 24 could be used to manipulate clock times; an HMS
 form modulo 360 would be suitable for angles.  Making the modulo @expr{M}
@@ -11356,6 +11378,9 @@
 enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus
 to each of the coefficients:  @samp{(1 mod 5) x + (2 mod 5)}.
 
+You can use @kbd{v p} and @kbd{%} to modify modulo forms.
+@xref{Packing and Unpacking}.  @xref{Basic Arithmetic}.
+
 @ignore
 @starindex
 @end ignore
@@ -12262,9 +12287,13 @@
 @kindex m R
 @pindex calc-mode-record-mode
 The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to
-record the new mode settings (as if by pressing @kbd{m m}) every
-time a mode setting changes.  If Embedded mode is enabled, other
-options are available; @pxref{Mode Settings in Embedded Mode}.
+record all the mode settings (as if by pressing @kbd{m m}) every
+time a mode setting changes.  If the modes are saved this way, then this
+``automatic mode recording'' mode is also saved.
+Type @kbd{m R} again to disable this method of recording the mode
+settings.  To turn it off permanently, the @kbd{m m} command will also be
+necessary.   (If Embedded mode is enabled, other options for recording
+the modes are available; @pxref{Mode Settings in Embedded Mode}.)
 
 @kindex m F
 @pindex calc-settings-file-name
@@ -12485,8 +12514,10 @@
 Division of two integers normally yields a floating-point number if the
 result cannot be expressed as an integer.  In some cases you would
 rather get an exact fractional answer.  One way to accomplish this is
-to multiply fractions instead:  @kbd{6 @key{RET} 1:4 *} produces @expr{3:2}
-even though @kbd{6 @key{RET} 4 /} produces @expr{1.5}.
+to use the @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command, which
+divides the two integers on the top of the stack to produce a fraction:
+@kbd{6 @key{RET} 4 :} produces @expr{3:2} even though 
+@kbd{6 @key{RET} 4 /} produces @expr{1.5}.
 
 @kindex m f
 @pindex calc-frac-mode
@@ -13291,7 +13322,7 @@
 separated by commas.
 
 The @kbd{d g} command toggles grouping on and off.
-With a numerix prefix of 0, this command displays the current state of
+With a numeric prefix of 0, this command displays the current state of
 the grouping flag; with an argument of minus one it disables grouping;
 with a positive argument @expr{N} it enables grouping on every @expr{N}
 digits.  For floating-point numbers, grouping normally occurs only
@@ -13797,11 +13828,12 @@
 line that marks the top-of-stack up or down in the Calculator buffer.
 The number right above that line is considered to the be at the top of
 the stack.  Any numbers below that line are ``hidden'' from all stack
-operations.  This is similar to the Emacs ``narrowing'' feature, except
-that the values below the @samp{.} are @emph{visible}, just temporarily
-frozen.  This feature allows you to keep several independent calculations
-running at once in different parts of the stack, or to apply a certain
-command to an element buried deep in the stack.
+operations (although still visible to the user).  This is similar to the
+Emacs ``narrowing'' feature, except that the values below the @samp{.}
+are @emph{visible}, just temporarily frozen.  This feature allows you to
+keep several independent calculations running at once in different parts
+of the stack, or to apply a certain command to an element buried deep in
+the stack.
 
 Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor
 is on.  Thus, this line and all those below it become hidden.  To un-hide
@@ -13940,7 +13972,7 @@
 the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that
 @code{atan} was equivalent to Calc's built-in @code{arctan} function,
 and would have written the formula back with notations (like implicit
-multiplication) which would not have been legal for a C program.
+multiplication) which would not have been valid for a C program.
 
 As another example, suppose you are maintaining a C program and a La@TeX{}
 document, each of which needs a copy of the same formula.  You can grab the
@@ -14641,8 +14673,7 @@
 @pindex calc-mathematica-language
 @cindex Mathematica language
 The @kbd{d M} (@code{calc-mathematica-language}) command selects the
-conventions of Mathematica, a powerful and popular mathematical tool
-from Wolfram Research, Inc.  Notable differences in Mathematica mode
+conventions of Mathematica.  Notable differences in Mathematica mode
 are that the names of built-in functions are capitalized, and function
 calls use square brackets instead of parentheses.  Thus the Calc
 formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in
@@ -14665,8 +14696,7 @@
 @pindex calc-maple-language
 @cindex Maple language
 The @kbd{d W} (@code{calc-maple-language}) command selects the
-conventions of Maple, another mathematical tool from the University
-of Waterloo.
+conventions of Maple.
 
 Maple's language is much like C.  Underscores are allowed in symbol
 names; square brackets are used for subscripts; explicit @samp{*}s for
@@ -15472,7 +15502,7 @@
 This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}.
 
 The token @kbd{#} has a predefined meaning in Calc's formula parser;
-it is not legal to use @samp{"#"} in a syntax rule.  However, longer
+it is not valid to use @samp{"#"} in a syntax rule.  However, longer
 tokens that include the @samp{#} character are allowed.  Also, while
 @samp{"$"} and @samp{"\""} are allowed as tokens, their presence in
 the syntax table will prevent those characters from working in their
@@ -16038,7 +16068,7 @@
 performing the desired operation, and pushing the result back onto the
 stack.  If the operation cannot be performed, the result pushed is a
 formula instead of a number, such as @samp{2/0} (because division by zero
-is illegal) or @samp{sqrt(x)} (because the argument @samp{x} is a formula).
+is invalid) or @samp{sqrt(x)} (because the argument @samp{x} is a formula).
 
 Most of the commands described here can be invoked by a single keystroke.
 Some of the more obscure ones are two-letter sequences beginning with
@@ -16242,7 +16272,7 @@
 @kindex :
 @pindex calc-fdiv
 @tindex fdiv
-The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula]
+The @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command
 divides the two integers on the top of the stack to produce a fractional
 result.  This is a convenient shorthand for enabling Fraction mode (with
 @kbd{m f}) temporarily and using @samp{/}.  Note that during numeric entry
@@ -17965,14 +17995,6 @@
 function returns the amount the book value decreased in the specified
 period.
 
-The Calc financial function names were borrowed mostly from Microsoft
-Excel and Borland's Quattro.  The @code{ratel} function corresponds to
-@samp{@@CGR} in Borland's Reflex.  The @code{nper} and @code{nperl}
-functions correspond to @samp{@@TERM} and @samp{@@CTERM} in Quattro,
-respectively.  Beware that the Calc functions may take their arguments
-in a different order than the corresponding functions in your favorite
-spreadsheet.
-
 @node Binary Functions, , Financial Functions, Arithmetic
 @section Binary Number Functions
 
@@ -19536,7 +19558,7 @@
 is a vector of objects to be packed (re-packed, really) according
 to that mode.  For example, @samp{pack([3, -4], [a,b,c,d,e,f])}
 yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}.  The function is
-left in symbolic form if the packing mode is illegal, or if the
+left in symbolic form if the packing mode is invalid, or if the
 number of data items does not match the number of items required
 by the mode.
 
@@ -19630,7 +19652,7 @@
 @mindex @null
 @end ignore
 @tindex |
-The @kbd{|} (@code{calc-concat}) command ``concatenates'' two vectors
+The @kbd{|} (@code{calc-concat}) [@code{vconcat}] command ``concatenates'' two vectors
 into one.  For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack
 will contain the single vector @samp{[1, 2, 3, 4]}.  If the arguments
 are matrices, the rows of the first matrix are concatenated with the
@@ -20031,7 +20053,7 @@
 @kindex v v
 @pindex calc-reverse-vector
 @tindex rev
-The @kbd{v v} (@code{calc-reverse-vector}) [@code{vec}] command reverses
+The @kbd{v v} (@code{calc-reverse-vector}) [@code{rev}] command reverses
 a vector end-for-end.  Given a matrix, it reverses the order of the rows.
 (To reverse the columns instead, just use @kbd{v t v v v t}.  The same
 principle can be used to apply other vector commands to the columns of
@@ -22680,7 +22702,7 @@
 Quotients are simplified by comparing all terms in the numerator
 with all terms in the denominator for possible cancellation using
 the distributive law.  For example, @expr{a x^2 b / c x^3 d} will
-cancel @expr{x^2} from both sides to get @expr{a b / c x d}.
+cancel @expr{x^2} from the top and bottom to get @expr{a b / c x d}.
 (The terms in the denominator will then be rearranged to @expr{c d x}
 as described above.)  If there is any common integer or fractional
 factor in the numerator and denominator, it is cancelled out;
@@ -23434,7 +23456,7 @@
 with respect to the same integration variable.''  If Calc is unable
 to integrate @code{u}, the integration that invoked @code{IntegRules}
 also fails.  Thus integrating @samp{twice(f(x))} fails, returning the
-unevaluated integral @samp{integ(twice(f(x)), x)}.  It is still legal
+unevaluated integral @samp{integ(twice(f(x)), x)}.  It is still valid
 to call @code{integ} with two or more arguments, however; in this case,
 if @code{u} is not integrable, @code{twice} itself will still be
 integrated:  If the above rule is changed to @samp{... := twice(integ(u,x))},
@@ -25281,7 +25303,7 @@
 described above) but the formula includes vectors subscripted by
 expressions that involve the iteration variable, Calc narrows
 the limits to include only the range of integers which result in
-legal subscripts for the vector.  For example, the sum
+valid subscripts for the vector.  For example, the sum
 @samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}.
 
 The limits of a sum do not need to be integers.  For example,
@@ -25291,7 +25313,7 @@
 after simplification as if by @kbd{a s}, evaluate to an integer.
 
 If the number of iterations according to the above formula does
-not come out to an integer, the sum is illegal and will be left
+not come out to an integer, the sum is invalid and will be left
 in symbolic form.  However, closed forms are still supplied, and
 you are on your honor not to misuse the resulting formulas by
 substituting mismatched bounds into them.  For example,
@@ -28746,7 +28768,7 @@
 @kindex g A
 @pindex calc-graph-add-3d
 The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve
-to the graph.  It is not legal to intermix 2D and 3D curves in a
+to the graph.  It is not valid to intermix 2D and 3D curves in a
 single graph.  This command takes three arguments, ``x'', ``y'',
 and ``z'', from the stack.  With a positive prefix @expr{n}, it
 takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n}
@@ -30451,8 +30473,8 @@
 @noindent
 The mode settings can be changed while Calc is in embedded mode, but
 will revert to their original values when embedded mode is ended
-(except for the modes changed while the mode-setting mode was
-@code{Save}). 
+(except for the modes saved when the mode-recording mode is
+@code{Save}; see below).
 
 Embedded mode has a rather complicated mechanism for handling mode
 settings in Embedded formulas.  It is possible to put annotations
@@ -30511,7 +30533,7 @@
 the third is the value in the form of a Lisp symbol, number,
 or list.  Annotations with unrecognizable text in the first or
 second parts are ignored.  The third part is not checked to make
-sure the value is of a legal type or range; if you write an
+sure the value is of a valid type or range; if you write an
 annotation by hand, be sure to give a proper value or results
 will be unpredictable.  Mode-setting annotations are case-sensitive.
 
@@ -30572,10 +30594,11 @@
 We would have to go down to the other formula and press @kbd{M-# u}
 on it in order to get it to notice the new annotation.
 
-Two more mode-recording modes selectable by @kbd{m R} are @code{Save}
-(which works even outside of Embedded mode), in which mode settings
-are recorded permanently in your Calc init file (the file given by the
-variable @code{calc-settings-file}, typically @file{~/.calc.el})
+Two more mode-recording modes selectable by @kbd{m R} are available
+which are also available outside of Embedded mode.  
+(@pxref{General Mode Commands}.) They are @code{Save},  in which mode
+settings are recorded permanently in your Calc init file (the file given
+by the variable @code{calc-settings-file}, typically @file{~/.calc.el})
 rather than by annotating the current document, and no-recording
 mode (where there is no symbol like @code{Save} or @code{Local} in
 the mode line), in which mode-changing commands do not leave any
@@ -31799,7 +31822,7 @@
 @code{calc-normalize}, and hand them to your function according to the
 function's argument list.  Your function may include @code{&optional} and
 @code{&rest} parameters, so long as calling the function with @var{num}
-parameters is legal.
+parameters is valid.
 
 Your function must return either a number or a formula in a form
 acceptable to Calc, or a list of such numbers or formulas.  These value(s)
@@ -32829,7 +32852,7 @@
 stack elements.  It can be given a third ``selection-mode'' argument
 which selects other behaviors.  If it is the symbol @code{t}, then
 a selection in any of the requested stack elements produces an
-``illegal operation on selections'' error.  If it is the symbol @code{full},
+``invalid operation on selections'' error.  If it is the symbol @code{full},
 the whole stack entry is always returned regardless of selections.
 If it is the symbol @code{sel}, the selected portion is always returned,
 or @code{nil} if there is no selection.  (This mode ignores the @kbd{j e}
@@ -34610,48 +34633,6 @@
 
 @end example
 @end ifinfo
-@appendixsec Printed Documentation
-
-@noindent
-Because the Calc manual is so large, you should only make a printed
-copy if you really need it.  To print the manual, you will need the
-@TeX{} typesetting program (this is a free program by Donald Knuth
-at Stanford University) as well as the @file{texindex} program and
-@file{texinfo.tex} file, both of which can be obtained from the FSF
-as part of the @code{texinfo} package.
-
-To print the Calc manual in one huge 470 page tome, you will need the
-source code to this manual, @file{calc.texi}, available as part of the
-Emacs source.  Once you have this file, type @kbd{texi2dvi calc.texi}.
-Alternatively, change to the @file{man} subdirectory of the Emacs
-source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
-get some ``overfull box'' warnings while @TeX{} runs.)
-
-The result will be a device-independent output file called
-@file{calc.dvi}, which you must print in whatever way is right
-for your system.  On many systems, the command is
-
-@example
-lpr -d calc.dvi
-@end example
-
-@noindent
-or
-
-@example
-dvips calc.dvi
-@end example
-
-@c the bumpoddpages macro was deleted
-@ignore
-@cindex Marginal notes, adjusting
-Marginal notes for each function and key sequence normally alternate
-between the left and right sides of the page, which is correct if the
-manual is going to be bound as double-sided pages.  Near the top of
-the file @file{calc.texi} you will find alternate definitions of
-the @code{\bumpoddpages} macro that put the marginal notes always on
-the same side, best if you plan to be binding single-sided pages.
-@end ignore
 
 @appendixsec Settings File
 
@@ -34703,15 +34684,6 @@
 @end example
 
 @noindent
-(In the following text, ``I'' refers to the original Calc author, Dave
-Gillespie).
-
-While I cannot guarantee that I will have time to work on your bug,
-I do try to fix bugs quickly whenever I can.
-
-The latest version of Calc is available from Savannah, in the Emacs
-CVS tree.  See @uref{http://savannah.gnu.org/projects/emacs}.
-
 There is an automatic command @kbd{M-x report-calc-bug} which helps
 you to report bugs.  This command prompts you for a brief subject
 line, then leaves you in a mail editing buffer.  Type @kbd{C-c C-c} to
@@ -34719,18 +34691,18 @@
 reporting a Calc bug; this command sends mail to the maintainer's
 regular mailbox.
 
-If you have suggestions for additional features for Calc, I would
-love to hear them.  Some have dared to suggest that Calc is already
-top-heavy with features; I really don't see what they're talking
-about, so, if you have ideas, send them right in.  (I may even have
-time to implement them!)
+If you have suggestions for additional features for Calc, please send
+them.  Some have dared to suggest that Calc is already top-heavy with
+features; this obviously cannot be the case, so if you have ideas, send
+them right in.
 
 At the front of the source file, @file{calc.el}, is a list of ideas for
-future work which I have not had time to do.  If any enthusiastic souls
-wish to take it upon themselves to work on these, I would be delighted.
-Please let me know if you plan to contribute to Calc so I can coordinate
-your efforts with mine and those of others.  I will do my best to help
-you in whatever way I can.
+future work.  If any enthusiastic souls wish to take it upon themselves
+to work on these, please send a message (using @kbd{M-x report-calc-bug})
+so any efforts can be coordinated.
+
+The latest version of Calc is available from Savannah, in the Emacs
+CVS tree.  See @uref{http://savannah.gnu.org/projects/emacs}.
 
 @c [summary]
 @node Summary, Key Index, Reporting Bugs, Top
--- a/man/calendar.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/calendar.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,6 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985,86,87,93,94,95,1997,2000,2001 Free Software Foundation, Inc.
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001,
+@c               2005  Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Calendar/Diary, Gnus, Dired, Top
 @chapter The Calendar and the Diary
@@ -19,11 +20,13 @@
 Calendar mode.
 
   @kbd{Mouse-2} in the calendar brings up a menu of operations on a
-particular date; @kbd{C-Mouse-3} brings up a menu of commonly used
+particular date; @kbd{Mouse-3} brings up a menu of commonly used
 calendar features that are independent of any particular date.  To exit
-the calendar, type @kbd{q}.  @xref{Calendar, Customizing the Calendar
-and Diary,, elisp, The Emacs Lisp Reference Manual}, for customization
-information about the calendar and diary.
+the calendar, type @kbd{q}.
+
+The basic features of the Calendar/Diary are described here.
+@inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information
+about more specialized features.
 
 @menu
 * Calendar Motion::     Moving through the calendar; selecting a date.
@@ -423,24 +426,32 @@
 
 @kindex h @r{(Calendar mode)}
 @findex calendar-cursor-holidays
+@vindex view-calendar-holidays-initially
   To see if any holidays fall on a given date, position point on that
 date in the calendar window and use the @kbd{h} command.  Alternatively,
 click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays}
 from the menu that appears.  Either way, this displays the holidays for
 that date, in the echo area if they fit there, otherwise in a separate
-window.
+window.  If the variable @code{view-calendar-holidays-initially} is
+non-@code{nil}, holidays are displayed when the calendar is created.
 
 @kindex x @r{(Calendar mode)}
 @findex mark-calendar-holidays
 @kindex u @r{(Calendar mode)}
 @findex calendar-unmark
+@vindex mark-holidays-in-calendar
   To view the distribution of holidays for all the dates shown in the
 calendar, use the @kbd{x} command.  This displays the dates that are
 holidays in a different face (or places a @samp{*} after these dates, if
-display with multiple faces is not available).  The command applies both
-to the currently visible months and to other months that subsequently
-become visible by scrolling.  To turn marking off and erase the current
-marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}).
+display with multiple faces is not available).  @inforef{Calendar
+Customizing, calendar-holiday-marker, emacs-xtra}.  The command applies
+both to the currently visible months and to other months that
+subsequently become visible by scrolling.  To turn marking off and erase
+the current marks, type @kbd{u}, which also erases any diary marks
+(@pxref{Diary}).  If the variable @code{mark-holidays-in-calendar} is
+non-@code{nil}, holidays are marked in the calendar when it is created
+(or recomputed).
+
 
 @kindex a @r{(Calendar mode)}
 @findex list-calendar-holidays
@@ -924,9 +935,9 @@
 events for today, for the immediate future, or for any specified
 date.
 
-  By default, Emacs uses @file{~/diary} as the diary file.  This is the
-same file that the @code{calendar} utility uses.  A sample
-@file{~/diary} file is:
+  The name of the diary file is specified by the variable
+@code{diary-file}; @file{~/diary} is the default.  A sample diary file
+is:
 
 @example
 12/22/1988  Twentieth wedding anniversary!!
@@ -951,18 +962,18 @@
 entries.
 
 @menu
-* Diary Commands::         Viewing diary entries and associated calendar dates.
+* Displaying the Diary::   Viewing diary entries and associated calendar dates.
 * Format of Diary File::   Entering events in your diary.
 * Date Formats::	   Various ways you can specify dates.
 * Adding to Diary::	   Commands to create diary entries.
 * Special Diary Entries::  Anniversaries, blocks of dates, cyclic entries, etc.
 @end menu
 
-@node Diary Commands
-@subsection Commands Displaying Diary Entries
+@node Displaying the Diary
+@subsection Displaying the Diary
 
-  Once you have created a @file{~/diary} file, you can use the calendar
-to view it.  You can also view today's events outside of Calendar mode.
+  Once you have created a diary file, you can use the calendar to view
+it.  You can also view today's events outside of Calendar mode.
 
 @table @kbd
 @item d
@@ -987,13 +998,16 @@
 
 @kindex d @r{(Calendar mode)}
 @findex view-diary-entries
+@vindex view-diary-entries-initially
   Displaying the diary entries with @kbd{d} shows in a separate window
 the diary entries for the selected date in the calendar.  The mode line
 of the new window shows the date of the diary entries and any holidays
 that fall on that date.  If you specify a numeric argument with @kbd{d},
 it shows all the diary entries for that many successive days.  Thus,
 @kbd{2 d} displays all the entries for the selected date and for the
-following day.
+following day.  If the variable @code{view-diary-entries-initially} is
+non-@code{nil}, the diary entries for the current date are displayed
+when the calendar is created (provided the current date is visible).
 
   Another way to display the diary entries for a date is to click
 @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from
@@ -1001,14 +1015,18 @@
 
 @kindex m @r{(Calendar mode)}
 @findex mark-diary-entries
+@vindex mark-diary-entries-in-calendar
   To get a broader view of which days are mentioned in the diary, use
-the @kbd{m} command.  This displays the dates that have diary entries
-in a different face (or places a @samp{+} after these dates, if
-display with multiple faces is not available).  The command applies both
-to the currently visible months and to other months that subsequently
-become visible by scrolling.  To turn marking off and erase the current
-marks, type @kbd{u}, which also turns off holiday marks
-(@pxref{Holidays}).
+the @kbd{m} command.  This displays the dates that have diary entries in
+a different face (or places a @samp{+} after these dates, if display
+with multiple faces is not available).  @inforef{Calendar Customizing,
+diary-entry-marker, emacs-xtra}.  The command applies both to the
+currently visible months and to other months that subsequently become
+visible by scrolling.  To turn marking off and erase the current marks,
+type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}).  If
+the variable @code{mark-diary-entries-in-calendar} is non-@code{nil},
+diary dates are marked in the calendar when it is created (or
+recomputed).
 
 @kindex s @r{(Calendar mode)}
 @findex show-all-diary-entries
@@ -1029,8 +1047,7 @@
   The command @kbd{M-x diary} displays the diary entries for the current
 date, independently of the calendar display, and optionally for the next
 few days as well; the variable @code{number-of-diary-entries} specifies
-how many days to include.  @xref{Calendar, Customizing the Calendar
-and Diary,, elisp, The Emacs Lisp Reference Manual}.
+how many days to include.  @inforef{Diary Customizing,, emacs-xtra}.
 
   If you put @code{(diary)} in your @file{.emacs} file, this
 automatically displays a window with the day's diary entries, when you
@@ -1335,8 +1352,7 @@
 specifying the name of a face or a single-character string to use when
 marking the entry in the calendar.  Most generally, sexp diary entries
 can perform arbitrary computations to determine when they apply.
-@xref{Sexp Diary Entries,, Sexp Diary Entries, elisp, The Emacs Lisp
-Reference Manual}.
+@inforef{Sexp Diary Entries,, emacs-xtra}.
 
 @node Appointments
 @section Appointments
@@ -1344,16 +1360,30 @@
 
 @vindex appt-display-format
 @vindex appt-audible
+@vindex appt-display-mode-line
   If you have a diary entry for an appointment, and that diary entry
 begins with a recognizable time of day, Emacs can warn you several
 minutes beforehand that that appointment is pending.  Emacs alerts you
 to the appointment by displaying a message in your chosen format, as
-specified by the variable @code{appt-display-format}.  If the value
-of @code{appt-audible} is non-@code{nil}, an audible reminder is also given.
+specified by the variable @code{appt-display-format}.  If the value of
+@code{appt-audible} is non-@code{nil}, an audible reminder is also
+given.  In addition, if @code{appt-display-mode-line} is non-@code{nil},
+Emacs displays the number of minutes to the appointment on the mode
+line.
+
+@vindex appt-display-duration
+@vindex appt-disp-window-function
+@vindex appt-delete-window-function
+  If @code{appt-display-format} has the value @code{window}, then the
+variable @code{appt-display-duration} controls how long the reminder
+window is visible for; and the variables
+@code{appt-disp-window-function} and @code{appt-delete-window-function}
+give the names of functions used to create and destroy the window,
+respectively.
 
 @findex appt-activate
   To enable appointment notification, call the function
-@code{appt-activate} with a positive argument. This sets up an
+@code{appt-activate} with a positive argument.  This sets up an
 appointment list for today from the diary file, giving all diary entries
 found with recognizable times of day, and reminds you just before each
 of them. Calling @code{appt-activate} with a negative argument disables
@@ -1370,7 +1400,7 @@
 @vindex appt-message-warning-time
 @noindent
 Then on Mondays, you will be reminded at around 9:20am about your coffee
-break and at around 11:50am about lunch. How many minutes in advance you
+break and at around 11:50am about lunch.  How many minutes in advance you
 are first warned is determined by the value of
 @code{appt-message-warning-time}.
 
@@ -1441,8 +1471,8 @@
 
 @noindent
 You can use an @code{#include} directive to add the import file contents
-to the main diary file, if these are distinct.  @xref{Fancy Diary
-Display,,, elisp, The Emacs Lisp Reference Manual}.
+to the main diary file, if these are distinct.  @inforef{Fancy Diary
+Display,, emacs-xtra}.
 
 @findex icalendar-export-file, icalendar-export-region
   Use @code{icalendar-export-file} to interactively export an entire
--- a/man/cl.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/cl.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -5,7 +5,7 @@
 @copying
 This file documents the GNU Emacs Common Lisp emulation package.
 
-Copyright (C) 1993, 2002 Free Software Foundation, Inc.
+Copyright (C) 1993, 2002, 2005 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -991,7 +991,7 @@
 @var{form}.
 
 The following Lisp forms will work as generalized variables, and
-so may legally appear in the @var{place} argument of @code{setf}:
+so may appear in the @var{place} argument of @code{setf}:
 
 @itemize @bullet
 @item
@@ -1073,7 +1073,7 @@
 
 @item
 A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])},
-where @var{subplace} is itself a legal generalized variable whose
+where @var{subplace} is itself a valid generalized variable whose
 current value is a string, and where the value stored is also a
 string.  The new string is spliced into the specified part of the
 destination string.  For example:
@@ -2379,7 +2379,7 @@
 
 The @code{by} value is always positive, even for downward-counting
 loops.  Some sort of @code{from} value is required for downward
-loops; @samp{for x downto 5} is not a legal loop clause all by
+loops; @samp{for x downto 5} is not a valid loop clause all by
 itself.
 
 @item for @var{var} in @var{list} by @var{function}
@@ -2481,7 +2481,7 @@
 Due to a minor implementation restriction, it will not work to have
 more than one @code{for} clause iterating over symbols, hash tables,
 keymaps, overlays, or intervals in a given @code{loop}.  Fortunately,
-it would rarely if ever be useful to do so.  It @emph{is} legal to mix
+it would rarely if ever be useful to do so.  It @emph{is} valid to mix
 one of these types of clauses with other clauses like @code{for ... to}
 or @code{while}.
 
@@ -2727,7 +2727,7 @@
 explicit mechanism, such as @code{finally return}, to return
 the accumulated result.
 
-It is legal for several accumulation clauses of the same type to
+It is valid for several accumulation clauses of the same type to
 accumulate into the same place.  From Steele:
 
 @example
@@ -3248,8 +3248,8 @@
 (get sym prop)  @equiv{}  (getf (symbol-plist sym) prop)
 @end example
 
-It is legal to use @code{getf} as a @code{setf} place, in which case
-its @var{place} argument must itself be a legal @code{setf} place.
+It is valid to use @code{getf} as a @code{setf} place, in which case
+its @var{place} argument must itself be a valid @code{setf} place.
 The @var{default} argument, if any, is ignored in this context.
 The effect is to change (via @code{setcar}) the value cell in the
 list that corresponds to @var{property}, or to cons a new property-value
@@ -3535,7 +3535,7 @@
 integer; each different integer seed will result in a completely
 different sequence of random numbers.
 
-It is legal to print a @code{random-state} object to a buffer or
+It is valid to print a @code{random-state} object to a buffer or
 file and later read it back with @code{read}.  If a program wishes
 to use a sequence of pseudo-random numbers which can be reproduced
 later for debugging, it can call @code{(make-random-state t)} to
@@ -4575,7 +4575,7 @@
 do not appear in the argument list are initialized based on the
 @var{default-value} in their slot descriptor.  Also, @code{&optional}
 and @code{&key} arguments which don't specify defaults take their
-defaults from the slot descriptor.  It is legal to include arguments
+defaults from the slot descriptor.  It is valid to include arguments
 which don't correspond to slot names; these are useful if they are
 referred to in the defaults for optional, keyword, or @code{&aux}
 arguments which @emph{do} correspond to slots.
--- a/man/cmdargs.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/cmdargs.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -457,7 +457,7 @@
 variable @code{doc-directory}.
 @item EMACSLOADPATH
 A colon-separated list of directories@footnote{
-Here and below, whenever we say ``colon-separated list of directories'',
+Here and below, whenever we say ``colon-separated list of directories,''
 it pertains to Unix and GNU/Linux systems.  On MS-DOS and MS-Windows,
 the directories are separated by semi-colons instead, since DOS/Windows
 file names might include a colon after a drive letter.}
--- a/man/dired-x.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/dired-x.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1004,10 +1004,11 @@
 Lisp expression to evaluate.  A resulting value of @code{nil} is ignored
 in favor of @code{default-directory}.
 
-@item default-directory
-@findex default-directory
-Function with usage like variable @code{default-directory}, but knows about the
-special cases in variable @code{default-directory-alist}.
+@item dired-default-directory
+@findex dired-default-directory
+Use this function like you would use the variable
+@code{default-directory}, except that @code{dired-default-directory}
+also consults the variable @code{default-directory-alist}.
 @end table
 
 @node Find File At Point, Miscellaneous Commands, Multiple Dired Directories, Top
--- a/man/display.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/display.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -326,7 +326,7 @@
 portion of a buffer.  As you scroll through the buffer, each portion
 that becomes visible is fontified as soon as it is displayed.  The
 parts of the buffer that are not displayed are fontified
-``stealthily'', in the background, i.e.@: when Emacs is idle.  You can
+``stealthily,'' in the background, i.e.@: when Emacs is idle.  You can
 control this background fontification, also called @dfn{Just-In-Time}
 (or @dfn{JIT}) Lock, by customizing variables in the customization
 group @samp{jit-lock}.  @xref{Specific Customization}.
@@ -913,6 +913,17 @@
 them), otherwise as escape sequences.  @xref{Single-Byte Character
 Support}.
 
+@vindex show-nonbreak-escape
+@cindex no-break space, display
+@cindex no-break hyphen, display
+  Some character sets define ``no-break'' versions of the space
+and hyphen characters, which are used where a line should not be
+broken.  Emacs displays these with an escape character in order to
+distinguish them from ordinary spaces and hyphens.  For example, a
+non-breaking space is displayed as @samp{\ }.  You can turn off this
+behavior by setting the variable @code{show-nonbreak-escape} to
+@code{nil}.
+
 @node Cursor Display
 @section Displaying the Cursor
 
--- a/man/emacs-xtra.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/emacs-xtra.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -10,7 +10,7 @@
 @copying
 This manual describes specialized features of Emacs.
 
-Copyright (C) 2004
+Copyright (C) 2004, 2005
 Free Software Foundation, Inc.
 
 @quotation
@@ -59,6 +59,7 @@
 * Introduction::                  What documentation belongs here?
 * Autorevert::                    Auto Reverting non-file buffers.
 * Subdir switches::               Subdirectory switches in Dired.
+* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization.
 * Index::
 @end menu
 
@@ -307,6 +308,922 @@
 all subdirectories with the buffer's default switches using
 @kbd{M-x dired-reset-subdir-switches}.  This also reverts the Dired buffer.
 
+
+@c Moved here from the Emacs Lisp Reference Manual, 2005-03-26.
+@node Advanced Calendar/Diary Usage
+@chapter Customizing the Calendar and Diary
+
+  There are many customizations that you can use to make the calendar and
+diary suit your personal tastes.
+
+@menu
+* Calendar Customizing::   Defaults you can set.
+* Holiday Customizing::    Defining your own holidays.
+* Date Display Format::    Changing the format.
+* Time Display Format::    Changing the format.
+* Daylight Savings::       Changing the default.
+* Diary Customizing::      Defaults you can set.
+* Hebrew/Islamic Entries:: How to obtain them.
+* Fancy Diary Display::    Enhancing the diary display, sorting entries,
+                             using included diary files.
+* Sexp Diary Entries::     Fancy things you can do.
+@end menu
+
+@node Calendar Customizing
+@section Customizing the Calendar
+@vindex calendar-holiday-marker
+@vindex diary-entry-marker
+  The variable @code{calendar-holiday-marker} specifies how to mark a
+date as being a holiday.  Its value may be a single-character string
+to insert next to the date, or a face name to use for displaying the
+date.  Likewise, the variable @code{diary-entry-marker} specifies how
+to mark a date that has diary entries.  The calendar creates faces
+named @code{holiday-face} and @code{diary-face} for these purposes;
+those symbols are the default values of these variables.
+
+@vindex calendar-load-hook
+  The variable @code{calendar-load-hook} is a normal hook run when the
+calendar package is first loaded (before actually starting to display
+the calendar).
+
+@vindex initial-calendar-window-hook
+  Starting the calendar runs the normal hook
+@code{initial-calendar-window-hook}.  Recomputation of the calendar
+display does not run this hook.  But if you leave the calendar with the
+@kbd{q} command and reenter it, the hook runs again.@refill
+
+@vindex today-visible-calendar-hook
+  The variable @code{today-visible-calendar-hook} is a normal hook run
+after the calendar buffer has been prepared with the calendar when the
+current date is visible in the window.  One use of this hook is to
+replace today's date with asterisks; to do that, use the hook function
+@code{calendar-star-date}.
+
+@findex calendar-star-date
+@example
+(add-hook 'today-visible-calendar-hook 'calendar-star-date)
+@end example
+
+@noindent
+Another standard hook function marks the current date, either by
+changing its face or by adding an asterisk.  Here's how to use it:
+
+@findex calendar-mark-today
+@example
+(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
+@end example
+
+@noindent
+@vindex calendar-today-marker
+The variable @code{calendar-today-marker} specifies how to mark
+today's date.  Its value should be a single-character string to insert
+next to the date or a face name to use for displaying the date.  A
+face named @code{calendar-today-face} is provided for this purpose;
+that symbol is the default for this variable.
+
+@vindex today-invisible-calendar-hook
+@noindent
+  A similar normal hook, @code{today-invisible-calendar-hook} is run if
+the current date is @emph{not} visible in the window.
+
+@vindex calendar-move-hook
+  Each of the calendar cursor motion commands runs the hook
+@code{calendar-move-hook} after it moves the cursor.
+
+@node Holiday Customizing
+@section Customizing the Holidays
+
+@vindex calendar-holidays
+@vindex christian-holidays
+@vindex hebrew-holidays
+@vindex islamic-holidays
+  Emacs knows about holidays defined by entries on one of several lists.
+You can customize these lists of holidays to your own needs, adding or
+deleting holidays.  The lists of holidays that Emacs uses are for
+general holidays (@code{general-holidays}), local holidays
+(@code{local-holidays}), Christian holidays (@code{christian-holidays}),
+Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim)
+holidays (@code{islamic-holidays}), and other holidays
+(@code{other-holidays}).
+
+@vindex general-holidays
+  The general holidays are, by default, holidays common throughout the
+United States.  To eliminate these holidays, set @code{general-holidays}
+to @code{nil}.
+
+@vindex local-holidays
+  There are no default local holidays (but sites may supply some).  You
+can set the variable @code{local-holidays} to any list of holidays, as
+described below.
+
+@vindex all-christian-calendar-holidays
+@vindex all-hebrew-calendar-holidays
+@vindex all-islamic-calendar-holidays
+  By default, Emacs does not include all the holidays of the religions
+that it knows, only those commonly found in secular calendars.  For a
+more extensive collection of religious holidays, you can set any (or
+all) of the variables @code{all-christian-calendar-holidays},
+@code{all-hebrew-calendar-holidays}, or
+@code{all-islamic-calendar-holidays} to @code{t}.  If you want to
+eliminate the religious holidays, set any or all of the corresponding
+variables @code{christian-holidays}, @code{hebrew-holidays}, and
+@code{islamic-holidays} to @code{nil}.@refill
+
+@vindex other-holidays
+  You can set the variable @code{other-holidays} to any list of
+holidays.  This list, normally empty, is intended for individual use.
+
+@cindex holiday forms
+  Each of the lists (@code{general-holidays}, @code{local-holidays},
+@code{christian-holidays}, @code{hebrew-holidays},
+@code{islamic-holidays}, and @code{other-holidays}) is a list of
+@dfn{holiday forms}, each holiday form describing a holiday (or
+sometimes a list of holidays).
+
+  Here is a table of the possible kinds of holiday form.  Day numbers
+and month numbers count starting from 1, but ``dayname'' numbers
+count Sunday as 0.  The element @var{string} is always the
+name of the holiday, as a string.
+
+@table @code
+@item (holiday-fixed @var{month} @var{day} @var{string})
+A fixed date on the Gregorian calendar.
+
+@item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
+The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
+(@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
+from the end of the month.
+
+@item (holiday-hebrew @var{month} @var{day} @var{string})
+A fixed date on the Hebrew calendar.
+
+@item (holiday-islamic @var{month} @var{day} @var{string})
+A fixed date on the Islamic calendar.
+
+@item (holiday-julian @var{month} @var{day} @var{string})
+A fixed date on the Julian calendar.
+
+@item (holiday-sexp @var{sexp} @var{string})
+A date calculated by the Lisp expression @var{sexp}.  The expression
+should use the variable @code{year} to compute and return the date of a
+holiday, or @code{nil} if the holiday doesn't happen this year.  The
+value of @var{sexp} must represent the date as a list of the form
+@code{(@var{month} @var{day} @var{year})}.
+
+@item (if @var{condition} @var{holiday-form})
+A holiday that happens only if @var{condition} is true.
+
+@item (@var{function} @r{[}@var{args}@r{]})
+A list of dates calculated by the function @var{function}, called with
+arguments @var{args}.
+@end table
+
+  For example, suppose you want to add Bastille Day, celebrated in
+France on July 14.  You can do this as follows:
+
+@smallexample
+(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
+@end smallexample
+
+@noindent
+The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
+fourteenth day of the seventh month (July).
+
+  Many holidays occur on a specific day of the week, at a specific time
+of month.  Here is a holiday form describing Hurricane Supplication Day,
+celebrated in the Virgin Islands on the fourth Monday in August:
+
+@smallexample
+(holiday-float 8 1 4 "Hurricane Supplication Day")
+@end smallexample
+
+@noindent
+Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
+Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
+the month (1 specifies the first occurrence, 2 the second occurrence,
+@minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
+so on).
+
+  You can specify holidays that occur on fixed days of the Hebrew,
+Islamic, and Julian calendars too.  For example,
+
+@smallexample
+(setq other-holidays
+      '((holiday-hebrew 10 2 "Last day of Hanukkah")
+        (holiday-islamic 3 12 "Mohammed's Birthday")
+        (holiday-julian 4 2 "Jefferson's Birthday")))
+@end smallexample
+
+@noindent
+adds the last day of Hanukkah (since the Hebrew months are numbered with
+1 starting from Nisan), the Islamic feast celebrating Mohammed's
+birthday (since the Islamic months are numbered from 1 starting with
+Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
+Julian calendar.
+
+  To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
+@code{holiday-sexp} form.  For example, American presidential elections
+occur on the first Tuesday after the first Monday in November of years
+divisible by 4:
+
+@smallexample
+(holiday-sexp '(if (= 0 (% year 4))
+                   (calendar-gregorian-from-absolute
+                    (1+ (calendar-dayname-on-or-before
+                          1 (+ 6 (calendar-absolute-from-gregorian
+                                  (list 11 1 year)))))))
+              "US Presidential Election")
+@end smallexample
+
+@noindent
+or
+
+@smallexample
+(if (= 0 (% displayed-year 4))
+    (fixed 11
+           (extract-calendar-day
+             (calendar-gregorian-from-absolute
+               (1+ (calendar-dayname-on-or-before
+                     1 (+ 6 (calendar-absolute-from-gregorian
+                              (list 11 1 displayed-year)))))))
+           "US Presidential Election"))
+@end smallexample
+
+  Some holidays just don't fit into any of these forms because special
+calculations are involved in their determination.  In such cases you
+must write a Lisp function to do the calculation.  To include eclipses,
+for example, add @code{(eclipses)} to @code{other-holidays}
+and write an Emacs Lisp function @code{eclipses} that returns a
+(possibly empty) list of the relevant Gregorian dates among the range
+visible in the calendar window, with descriptive strings, like this:
+
+@smallexample
+(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
+@end smallexample
+
+@node Date Display Format
+@section Date Display Format
+@vindex calendar-date-display-form
+
+  You can customize the manner of displaying dates in the diary, in mode
+lines, and in messages by setting @code{calendar-date-display-form}.
+This variable holds a list of expressions that can involve the variables
+@code{month}, @code{day}, and @code{year}, which are all numbers in
+string form, and @code{monthname} and @code{dayname}, which are both
+alphabetic strings.  In the American style, the default value of this
+list is as follows:
+
+@smallexample
+((if dayname (concat dayname ", ")) monthname " " day ", " year)
+@end smallexample
+
+@noindent
+while in the European style this value is the default:
+
+@smallexample
+((if dayname (concat dayname ", ")) day " " monthname " " year)
+@end smallexample
+
+@noindent
+The ISO standard date representation is this:
+
+@smallexample
+(year "-" month "-" day)
+@end smallexample
+
+@noindent
+This specifies a typical American format:
+
+@smallexample
+(month "/" day "/" (substring year -2))
+@end smallexample
+
+@node Time Display Format
+@section Time Display Format
+@vindex calendar-time-display-form
+
+  The calendar and diary by default display times of day in the
+conventional American style with the hours from 1 through 12, minutes,
+and either @samp{am} or @samp{pm}.  If you prefer the European style,
+also known in the US as military, in which the hours go from 00 to 23,
+you can alter the variable @code{calendar-time-display-form}.  This
+variable is a list of expressions that can involve the variables
+@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
+numbers in string form, and @code{am-pm} and @code{time-zone}, which are
+both alphabetic strings.  The default value of
+@code{calendar-time-display-form} is as follows:
+
+@smallexample
+(12-hours ":" minutes am-pm
+          (if time-zone " (") time-zone (if time-zone ")"))
+@end smallexample
+
+@noindent
+Here is a value that provides European style times:
+
+@smallexample
+(24-hours ":" minutes
+          (if time-zone " (") time-zone (if time-zone ")"))
+@end smallexample
+
+@node Daylight Savings
+@section Daylight Savings Time
+@cindex daylight savings time
+
+  Emacs understands the difference between standard time and daylight
+savings time---the times given for sunrise, sunset, solstices,
+equinoxes, and the phases of the moon take that into account.  The rules
+for daylight savings time vary from place to place and have also varied
+historically from year to year.  To do the job properly, Emacs needs to
+know which rules to use.
+
+  Some operating systems keep track of the rules that apply to the place
+where you are; on these systems, Emacs gets the information it needs
+from the system automatically.  If some or all of this information is
+missing, Emacs fills in the gaps with the rules currently used in
+Cambridge, Massachusetts, which is the center of GNU's world.
+
+
+@vindex calendar-daylight-savings-starts
+@vindex calendar-daylight-savings-ends
+  If the default choice of rules is not appropriate for your location,
+you can tell Emacs the rules to use by setting the variables
+@code{calendar-daylight-savings-starts} and
+@code{calendar-daylight-savings-ends}.  Their values should be Lisp
+expressions that refer to the variable @code{year}, and evaluate to the
+Gregorian date on which daylight savings time starts or (respectively)
+ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
+The values should be @code{nil} if your area does not use daylight
+savings time.
+
+  Emacs uses these expressions to determine the start and end dates of
+daylight savings time as holidays and for correcting times of day in the
+solar and lunar calculations.
+
+  The values for Cambridge, Massachusetts are as follows:
+
+@example
+@group
+(calendar-nth-named-day 1 0 4 year)
+(calendar-nth-named-day -1 0 10 year)
+@end group
+@end example
+
+@noindent
+i.e., the first 0th day (Sunday) of the fourth month (April) in
+the year specified by @code{year}, and the last Sunday of the tenth month
+(October) of that year.  If daylight savings time were
+changed to start on October 1, you would set
+@code{calendar-daylight-savings-starts} to this:
+
+@example
+(list 10 1 year)
+@end example
+
+  For a more complex example, suppose daylight savings time begins on
+the first of Nisan on the Hebrew calendar.  You should set
+@code{calendar-daylight-savings-starts} to this value:
+
+@example
+(calendar-gregorian-from-absolute
+  (calendar-absolute-from-hebrew
+    (list 1 1 (+ year 3760))))
+@end example
+
+@noindent
+because Nisan is the first month in the Hebrew calendar and the Hebrew
+year differs from the Gregorian year by 3760 at Nisan.
+
+  If there is no daylight savings time at your location, or if you want
+all times in standard time, set @code{calendar-daylight-savings-starts}
+and @code{calendar-daylight-savings-ends} to @code{nil}.
+
+@vindex calendar-daylight-time-offset
+  The variable @code{calendar-daylight-time-offset} specifies the
+difference between daylight savings time and standard time, measured in
+minutes.  The value for Cambridge is 60.
+
+@vindex calendar-daylight-savings-starts-time
+@vindex calendar-daylight-savings-ends-time
+  The variable @code{calendar-daylight-savings-starts-time} and the
+variable @code{calendar-daylight-savings-ends-time} specify the number
+of minutes after midnight local time when the transition to and from
+daylight savings time should occur.  For Cambridge, both variables'
+values are 120.
+
+@node Diary Customizing
+@section Customizing the Diary
+
+@vindex holidays-in-diary-buffer
+  Ordinarily, the mode line of the diary buffer window indicates any
+holidays that fall on the date of the diary entries.  The process of
+checking for holidays can take several seconds, so including holiday
+information delays the display of the diary buffer noticeably.  If you'd
+prefer to have a faster display of the diary buffer but without the
+holiday information, set the variable @code{holidays-in-diary-buffer} to
+@code{nil}.@refill
+
+@vindex number-of-diary-entries
+  The variable @code{number-of-diary-entries} controls the number of
+days of diary entries to be displayed at one time.  It affects the
+initial display when @code{view-diary-entries-initially} is @code{t}, as
+well as the command @kbd{M-x diary}.  For example, the default value is
+1, which says to display only the current day's diary entries.  If the
+value is 2, both the current day's and the next day's entries are
+displayed.  The value can also be a vector of seven elements: for
+example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
+appear on Sunday, the current date's and the next day's diary entries
+appear Monday through Thursday, Friday through Monday's entries appear
+on Friday, while on Saturday only that day's entries appear.
+
+@vindex print-diary-entries-hook
+@findex print-diary-entries
+  The variable @code{print-diary-entries-hook} is a normal hook run
+after preparation of a temporary buffer containing just the diary
+entries currently visible in the diary buffer.  (The other, irrelevant
+diary entries are really absent from the temporary buffer; in the diary
+buffer, they are merely hidden.)  The default value of this hook does
+the printing with the command @code{lpr-buffer}.  If you want to use a
+different command to do the printing, just change the value of this
+hook.  Other uses might include, for example, rearranging the lines into
+order by day and time.
+
+@vindex diary-date-forms
+  You can customize the form of dates in your diary file, if neither the
+standard American nor European styles suits your needs, by setting the
+variable @code{diary-date-forms}.  This variable is a list of patterns
+for recognizing a date.  Each date pattern is a list whose elements may
+be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs
+Lisp Reference Manual}) or the symbols @code{month}, @code{day},
+@code{year}, @code{monthname}, and @code{dayname}.  All these elements
+serve as patterns that match certain kinds of text in the diary file.
+In order for the date pattern, as a whole, to match, all of its elements
+must match consecutively.
+
+  A regular expression in a date pattern matches in its usual fashion,
+using the standard syntax table altered so that @samp{*} is a word
+constituent.
+
+  The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
+and @code{dayname} match the month number, day number, year number,
+month name, and day name of the date being considered.  The symbols that
+match numbers allow leading zeros; those that match names allow
+three-letter abbreviations and capitalization.  All the symbols can
+match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
+month'', and so on, it should match regardless of the date being
+considered.
+
+  The default value of @code{diary-date-forms} in the American style is
+this:
+
+@example
+((month "/" day "[^/0-9]")
+ (month "/" day "/" year "[^0-9]")
+ (monthname " *" day "[^,0-9]")
+ (monthname " *" day ", *" year "[^0-9]")
+ (dayname "\\W"))
+@end example
+
+  The date patterns in the list must be @emph{mutually exclusive} and
+must not match any portion of the diary entry itself, just the date and
+one character of whitespace.  If, to be mutually exclusive, the pattern
+must match a portion of the diary entry text---beyond the whitespace
+that ends the date---then the first element of the date pattern
+@emph{must} be @code{backup}.  This causes the date recognizer to back
+up to the beginning of the current word of the diary entry, after
+finishing the match.  Even if you use @code{backup}, the date pattern
+must absolutely not match more than a portion of the first word of the
+diary entry.  The default value of @code{diary-date-forms} in the
+European style is this list:
+
+@example
+((day "/" month "[^/0-9]")
+ (day "/" month "/" year "[^0-9]")
+ (backup day " *" monthname "\\W+\\<[^*0-9]")
+ (day " *" monthname " *" year "[^0-9]")
+ (dayname "\\W"))
+@end example
+
+@noindent
+Notice the use of @code{backup} in the third pattern, because it needs
+to match part of a word beyond the date itself to distinguish it from
+the fourth pattern.
+
+@node Hebrew/Islamic Entries
+@section Hebrew- and Islamic-Date Diary Entries
+
+  Your diary file can have entries based on Hebrew or Islamic dates, as
+well as entries based on the world-standard Gregorian calendar.
+However, because recognition of such entries is time-consuming and most
+people don't use them, you must explicitly enable their use.  If you
+want the diary to recognize Hebrew-date diary entries, for example,
+you must do this:
+
+@vindex nongregorian-diary-listing-hook
+@vindex nongregorian-diary-marking-hook
+@findex list-hebrew-diary-entries
+@findex mark-hebrew-diary-entries
+@smallexample
+(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
+(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
+@end smallexample
+
+@noindent
+If you want Islamic-date entries, do this:
+
+@findex list-islamic-diary-entries
+@findex mark-islamic-diary-entries
+@smallexample
+(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
+(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
+@end smallexample
+
+  Hebrew- and Islamic-date diary entries have the same formats as
+Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
+date and @samp{I} precedes an Islamic date.  Moreover, because the
+Hebrew and Islamic month names are not uniquely specified by the first
+three letters, you may not abbreviate them.  For example, a diary entry
+for the Hebrew date Heshvan 25 could look like this:
+
+@smallexample
+HHeshvan 25 Happy Hebrew birthday!
+@end smallexample
+
+@noindent
+and would appear in the diary for any date that corresponds to Heshvan 25
+on the Hebrew calendar.  And here is an Islamic-date diary entry that matches
+Dhu al-Qada 25:
+
+@smallexample
+IDhu al-Qada 25 Happy Islamic birthday!
+@end smallexample
+
+  As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
+are nonmarking if they are preceded with an ampersand (@samp{&}).
+
+  Here is a table of commands used in the calendar to create diary entries
+that match the selected date and other dates that are similar in the Hebrew
+or Islamic calendar:
+
+@table @kbd
+@item i h d
+Add a diary entry for the Hebrew date corresponding to the selected date
+(@code{insert-hebrew-diary-entry}).
+@item i h m
+Add a diary entry for the day of the Hebrew month corresponding to the
+selected date (@code{insert-monthly-hebrew-diary-entry}).  This diary
+entry matches any date that has the same Hebrew day-within-month as the
+selected date.
+@item i h y
+Add a diary entry for the day of the Hebrew year corresponding to the
+selected date (@code{insert-yearly-hebrew-diary-entry}).  This diary
+entry matches any date which has the same Hebrew month and day-within-month
+as the selected date.
+@item i i d
+Add a diary entry for the Islamic date corresponding to the selected date
+(@code{insert-islamic-diary-entry}).
+@item i i m
+Add a diary entry for the day of the Islamic month corresponding to the
+selected date (@code{insert-monthly-islamic-diary-entry}).
+@item i i y
+Add a diary entry for the day of the Islamic year corresponding to the
+selected date (@code{insert-yearly-islamic-diary-entry}).
+@end table
+
+@findex insert-hebrew-diary-entry
+@findex insert-monthly-hebrew-diary-entry
+@findex insert-yearly-hebrew-diary-entry
+@findex insert-islamic-diary-entry
+@findex insert-monthly-islamic-diary-entry
+@findex insert-yearly-islamic-diary-entry
+  These commands work much like the corresponding commands for ordinary
+diary entries: they apply to the date that point is on in the calendar
+window, and what they do is insert just the date portion of a diary entry
+at the end of your diary file.  You must then insert the rest of the
+diary entry.
+
+@node Fancy Diary Display
+@section Fancy Diary Display
+@vindex diary-display-hook
+@findex simple-diary-display
+
+  Diary display works by preparing the diary buffer and then running the
+hook @code{diary-display-hook}.  The default value of this hook
+(@code{simple-diary-display}) hides the irrelevant diary entries and
+then displays the buffer.  However, if you specify the hook as follows,
+
+@cindex diary buffer
+@findex fancy-diary-display
+@example
+(add-hook 'diary-display-hook 'fancy-diary-display)
+@end example
+
+@noindent
+this enables fancy diary display.  It displays diary entries and
+holidays by copying them into a special buffer that exists only for the
+sake of display.  Copying to a separate buffer provides an opportunity
+to change the displayed text to make it prettier---for example, to sort
+the entries by the dates they apply to.
+
+  As with simple diary display, you can print a hard copy of the buffer
+with @code{print-diary-entries}.  To print a hard copy of a day-by-day
+diary for a week, position point on Sunday of that week, type
+@kbd{7 d}, and then do @kbd{M-x print-diary-entries}.  As usual, the
+inclusion of the holidays slows down the display slightly; you can speed
+things up by setting the variable @code{holidays-in-diary-buffer} to
+@code{nil}.
+
+@vindex diary-list-include-blanks
+  Ordinarily, the fancy diary buffer does not show days for which there are
+no diary entries, even if that day is a holiday.  If you want such days to be
+shown in the fancy diary buffer, set the variable
+@code{diary-list-include-blanks} to @code{t}.@refill
+
+@cindex sorting diary entries
+  If you use the fancy diary display, you can use the normal hook
+@code{list-diary-entries-hook} to sort each day's diary entries by their
+time of day.  Here's how:
+
+@findex sort-diary-entries
+@example
+(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
+@end example
+
+@noindent
+For each day, this sorts diary entries that begin with a recognizable
+time of day according to their times.  Diary entries without times come
+first within each day.
+
+  Fancy diary display also has the ability to process included diary
+files.  This permits a group of people to share a diary file for events
+that apply to all of them.  Lines in the diary file of this form:
+
+@smallexample
+#include "@var{filename}"
+@end smallexample
+
+@noindent
+includes the diary entries from the file @var{filename} in the fancy
+diary buffer.  The include mechanism is recursive, so that included files
+can include other files, and so on; you must be careful not to have a
+cycle of inclusions, of course.  Here is how to enable the include
+facility:
+
+@vindex list-diary-entries-hook
+@vindex mark-diary-entries-hook
+@findex include-other-diary-files
+@findex mark-included-diary-files
+@smallexample
+(add-hook 'list-diary-entries-hook 'include-other-diary-files)
+(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
+@end smallexample
+
+The include mechanism works only with the fancy diary display, because
+ordinary diary display shows the entries directly from your diary file.
+
+@node Sexp Diary Entries
+@section Sexp Entries and the Fancy Diary Display
+@cindex sexp diary entries
+
+  Sexp diary entries allow you to do more than just have complicated
+conditions under which a diary entry applies.  If you use the fancy
+diary display, sexp entries can generate the text of the entry depending
+on the date itself.  For example, an anniversary diary entry can insert
+the number of years since the anniversary date into the text of the
+diary entry.  Thus the @samp{%d} in this dairy entry:
+
+@findex diary-anniversary
+@smallexample
+%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
+@end smallexample
+
+@noindent
+gets replaced by the age, so on October 31, 1990 the entry appears in
+the fancy diary buffer like this:
+
+@smallexample
+Arthur's birthday (42 years old)
+@end smallexample
+
+@noindent
+If the diary file instead contains this entry:
+
+@smallexample
+%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
+@end smallexample
+
+@noindent
+the entry in the fancy diary buffer for October 31, 1990 appears like this:
+
+@smallexample
+Arthur's 42nd birthday
+@end smallexample
+
+  Similarly, cyclic diary entries can interpolate the number of repetitions
+that have occurred:
+
+@findex diary-cyclic
+@smallexample
+%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
+@end smallexample
+
+@noindent
+looks like this:
+
+@smallexample
+Renew medication (5th time)
+@end smallexample
+
+@noindent
+in the fancy diary display on September 8, 1990.
+
+  There is an early reminder diary sexp that includes its entry in the
+diary not only on the date of occurrence, but also on earlier dates.
+For example, if you want a reminder a week before your anniversary, you
+can use
+
+@findex diary-remind
+@smallexample
+%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
+@end smallexample
+
+@noindent
+and the fancy diary will show
+@smallexample
+Ed's anniversary
+@end smallexample
+@noindent
+both on December 15 and on December 22.
+
+@findex diary-date
+  The function @code{diary-date} applies to dates described by a month,
+day, year combination, each of which can be an integer, a list of
+integers, or @code{t}. The value @code{t} means all values.  For
+example,
+
+@smallexample
+%%(diary-date '(10 11 12) 22 t) Rake leaves
+@end smallexample
+
+@noindent
+causes the fancy diary to show
+
+@smallexample
+Rake leaves
+@end smallexample
+
+@noindent
+on October 22, November 22, and December 22 of every year.
+
+@findex diary-float
+  The function @code{diary-float} allows you to describe diary entries
+that apply to dates like the third Friday of November, or the last
+Tuesday in April.  The parameters are the @var{month}, @var{dayname},
+and an index @var{n}. The entry appears on the @var{n}th @var{dayname}
+of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and
+so on.  If @var{n} is negative it counts backward from the end of
+@var{month}.  The value of @var{month} can be a list of months, a single
+month, or @code{t} to specify all months.  You can also use an optional
+parameter @var{day} to specify the @var{n}th @var{dayname} of
+@var{month} on or after/before @var{day}; the value of @var{day} defaults
+to 1 if @var{n} is positive and to the last day of @var{month} if
+@var{n} is negative.  For example,
+
+@smallexample
+%%(diary-float t 1 -1) Pay rent
+@end smallexample
+
+@noindent
+causes the fancy diary to show
+
+@smallexample
+Pay rent
+@end smallexample
+
+@noindent
+on the last Monday of every month.
+
+  The generality of sexp diary entries lets you specify any diary
+entry that you can describe algorithmically.  A sexp diary entry
+contains an expression that computes whether the entry applies to any
+given date.  If its value is non-@code{nil}, the entry applies to that
+date; otherwise, it does not.  The expression can use the variable
+@code{date} to find the date being considered; its value is a list
+(@var{month} @var{day} @var{year}) that refers to the Gregorian
+calendar.
+
+  The sexp diary entry applies to a date when the expression's value
+is non-@code{nil}, but some values have more specific meanings.  If
+the value is a string, that string is a description of the event which
+occurs on that date.  The value can also have the form
+@code{(@var{mark} . @var{string})}; then @var{mark} specifies how to
+mark the date in the calendar, and @var{string} is the description of
+the event.  If @var{mark} is a single-character string, that character
+appears next to the date in the calendar.  If @var{mark} is a face
+name, the date is displayed in that face.  If @var{mark} is
+@code{nil}, that specifies no particular highlighting for the date.
+
+  Suppose you get paid on the 21st of the month if it is a weekday, and
+on the Friday before if the 21st is on a weekend.  Here is how to write
+a sexp diary entry that matches those dates:
+
+@smallexample
+&%%(let ((dayname (calendar-day-of-week date))
+         (day (car (cdr date))))
+      (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
+          (and (memq day '(19 20)) (= dayname 5)))
+         ) Pay check deposited
+@end smallexample
+
+  The following sexp diary entries take advantage of the ability (in the fancy
+diary display) to concoct diary entries whose text varies based on the date:
+
+@findex diary-sunrise-sunset
+@findex diary-phases-of-moon
+@findex diary-day-of-year
+@findex diary-iso-date
+@findex diary-julian-date
+@findex diary-astro-day-number
+@findex diary-hebrew-date
+@findex diary-islamic-date
+@findex diary-french-date
+@findex diary-mayan-date
+@table @code
+@item %%(diary-sunrise-sunset)
+Make a diary entry for the local times of today's sunrise and sunset.
+@item %%(diary-phases-of-moon)
+Make a diary entry for the phases (quarters) of the moon.
+@item %%(diary-day-of-year)
+Make a diary entry with today's day number in the current year and the number
+of days remaining in the current year.
+@item %%(diary-iso-date)
+Make a diary entry with today's equivalent ISO commercial date.
+@item %%(diary-julian-date)
+Make a diary entry with today's equivalent date on the Julian calendar.
+@item %%(diary-astro-day-number)
+Make a diary entry with today's equivalent astronomical (Julian) day number.
+@item %%(diary-hebrew-date)
+Make a diary entry with today's equivalent date on the Hebrew calendar.
+@item %%(diary-islamic-date)
+Make a diary entry with today's equivalent date on the Islamic calendar.
+@item %%(diary-french-date)
+Make a diary entry with today's equivalent date on the French Revolutionary
+calendar.
+@item %%(diary-mayan-date)
+Make a diary entry with today's equivalent date on the Mayan calendar.
+@end table
+
+@noindent
+Thus including the diary entry
+
+@example
+&%%(diary-hebrew-date)
+@end example
+
+@noindent
+causes every day's diary display to contain the equivalent date on the
+Hebrew calendar, if you are using the fancy diary display.  (With simple
+diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
+diary for any date, but does nothing particularly useful.)
+
+  These functions can be used to construct sexp diary entries based on
+the Hebrew calendar in certain standard ways:
+
+@cindex rosh hodesh
+@findex diary-rosh-hodesh
+@cindex parasha, weekly
+@findex diary-parasha
+@cindex candle lighting times
+@findex diary-sabbath-candles
+@cindex omer count
+@findex diary-omer
+@cindex yahrzeits
+@findex diary-yahrzeit
+@table @code
+@item %%(diary-rosh-hodesh)
+Make a diary entry that tells the occurrence and ritual announcement of each
+new Hebrew month.
+@item %%(diary-parasha)
+Make a Saturday diary entry that tells the weekly synagogue scripture reading.
+@item %%(diary-sabbath-candles)
+Make a Friday diary entry that tells the @emph{local time} of Sabbath
+candle lighting.
+@item %%(diary-omer)
+Make a diary entry that gives the omer count, when appropriate.
+@item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
+Make a diary entry marking the anniversary of a date of death.  The date
+is the @emph{Gregorian} (civil) date of death.  The diary entry appears
+on the proper Hebrew calendar anniversary and on the day before.  (In
+the European style, the order of the parameters is changed to @var{day},
+@var{month}, @var{year}.)
+@end table
+
+  All the functions documented above take an optional argument
+@var{mark} which specifies how to mark the date in the calendar display.
+If one of these functions decides that it applies to a certain date,
+it returns a value that contains @var{mark}.
+
+
 @node Index
 @unnumbered Index
 
--- a/man/emacs.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/emacs.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -709,7 +709,7 @@
 
 The Diary
 
-* Diary Commands::	   Viewing diary entries and associated calendar dates.
+* Displaying the Diary::   Viewing diary entries and associated calendar dates.
 * Format of Diary File::   Entering events in your diary.
 * Date Formats::	   Various ways you can specify dates.
 * Adding to Diary::	   Commands to create diary entries.
--- a/man/files.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/files.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -244,7 +244,7 @@
 window system.  Dropping a file into an ordinary Emacs window visits
 the file using that window.  However, dropping a file into a window
 displaying a Dired buffer moves or copies the file into the displayed
-directory.  For details, see @xref{Drag and Drop} and @xref{Misc Dired
+directory.  For details, see @ref{Drag and Drop}, @ref{Misc Dired
 Features}.
 
 @cindex creating files
@@ -940,6 +940,15 @@
 for a changed file.  Since checking a remote file is too slow, these
 modes do not check or revert remote files.
 
+@vindex auto-revert-check-vc-info
+  Whenever Auto Revert mode reverts the buffer, it updates the version
+control information, such as the version control number displayed in
+the mode line.  However, this information may not be properly updated
+if the version control state changes outside of Emacs---for example,
+if a new version is checked in from outside the current Emacs session.
+If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert
+mode will update the version control status information periodically.
+
 @node Auto Save
 @section Auto-Saving: Protection Against Disasters
 @cindex Auto Save mode
--- a/man/frames.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/frames.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -83,6 +83,18 @@
 Move point to where you click (@code{mouse-set-point}).
 This is normally the left button.
 
+@vindex x-mouse-click-focus-ignore-position
+Normally, Emacs does not distinguish between ordinary mouse clicks and
+clicks that select a frame.  When you click on a frame to select it,
+that also changes the selected window and cursor position according to
+the mouse click position.  On the X window system, you can change this
+behavior by setting the variable
+@code{x-mouse-click-focus-ignore-position} to @code{t}.  Then the
+first click selects the frame, but does not affect the selected window
+or cursor position.  If you click again in the same place, since that
+click will be in the selected frame, it will change the window or
+cursor position.
+
 @item Drag-Mouse-1
 Set the region to the text you select by dragging, and copy it to the
 kill ring (@code{mouse-set-region}).  You can specify both ends of the
@@ -96,6 +108,10 @@
 on how far away from the window edge the mouse has gone; the variable
 @code{mouse-scroll-min-lines} specifies a minimum step size.
 
+@vindex mouse-drag-copy-region
+If the variable @code{mouse-drag-copy-region} is @code{nil}, this
+mouse command does not copy the selected region into the kill ring.
+
 @item Mouse-2
 Yank the last killed text, where you click (@code{mouse-yank-at-click}).
 This is normally the middle button.
--- a/man/gnus.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/gnus.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -8,7 +8,7 @@
 
 @copying
 Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004
+2002, 2003, 2004, 2005
 Free Software Foundation, Inc.
 
 @quotation
@@ -18594,7 +18594,7 @@
 buffer how to maneuver around undownloaded (only headers stored in the
 agent) and unfetched (neither article nor headers stored) articles.
 
-The legal values are @code{nil} (maneuver to any article),
+The valid values are @code{nil} (maneuver to any article),
 @code{undownloaded} (maneuvering while unplugged ignores articles that
 have not been fetched), @code{always-undownloaded} (maneuvering always
 ignores articles that have not been fetched), @code{unfetched}
--- a/man/help.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/help.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -172,6 +172,9 @@
 @item C-h S @var{symbol} @key{RET}
 Display the Info documentation on symbol @var{symbol} according to the
 programming language you are editing (@code{info-lookup-symbol}).
+@item C-h .
+Display a help message associated with special text areas, such as
+links in @samp{*Help*} buffers (@code{display-local-help}).
 @end table
 
 @node Key Help
@@ -277,13 +280,14 @@
 normally checks only commands (interactive functions); if you specify a
 prefix argument, it checks noninteractive functions as well.
 
-  Because @kbd{C-h a} looks only for commands whose names contain the
-string you specify, you must use ingenuity in choosing the string.  If
-you are looking for commands for killing backwards and @kbd{C-h a
-kill-backwards @key{RET}} doesn't reveal any, don't give up.  Try just
-@kbd{kill}, or just @kbd{backwards}, or just @kbd{back}.  Be
-persistent.  Also note that you can use a regular expression as the
-argument, for more flexibility (@pxref{Regexps}).
+  Because @kbd{C-h a} looks only for commands matching the string you
+specify, you may not find what you want on the first try.  In that
+case, don't just give up.  You can give Apropos a list of words to
+search for.  When more than one word is specified, at least two of
+those words must be present for an item to match.  If you are looking
+for commands to kill a chunk of text before point, try @kbd{C-h a kill
+back behind before @key{RET}}.  For even greater flexibility, you can
+also supply a regular expression to Apropos (@pxref{Regexps}).
 
   Here is a set of arguments to give to @kbd{C-h a} that covers many
 classes of Emacs commands, since there are strong conventions for naming
@@ -327,6 +331,13 @@
   If the variable @code{apropos-do-all} is non-@code{nil}, the commands
 above all behave as if they had been given a prefix argument.
 
+@vindex apropos-sort-by-scores
+@cindex apropos search results, order by score
+  By default, Apropos lists the search results in alphabetical order.
+If the variable @code{apropos-sort-by-scores} is non-@code{nil},
+Apropos tries to guess the relevance of each result, and displays the
+most relevant ones first.
+
   If you want more information about a function definition, variable or
 symbol property listed in the Apropos buffer, you can click on it with
 @kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}.
@@ -590,10 +601,20 @@
 @cindex balloon help
   When a region of text is ``active,'' so that you can select it with
 the mouse or a key like @kbd{RET}, it often has associated help text.
-Areas of the mode line are examples.  This help will normally be
-shown in the echo area when you move point into the active text.  In
-a window system you can display the help text as a ``tooltip''
-(sometimes known as ``balloon help'').  @xref{Tooltips}.
+Areas of the mode line are examples.  On most window systems, the help
+text is displayed as a ``tooltip'' (sometimes known as ``balloon
+help'').  @xref{Tooltips}.  Otherwise, it is shown in the echo area
+when you move point into the active text.
+
+@kindex C-h .
+@findex display-local-help
+@vindex help-at-pt-display-when-idle
+  You can also access text region help info using the keyboard.  The
+command @kbd{C-h .} (@code{display-local-help}) displays any help text
+associated with the text at point, using the echo area.  If you want
+help text to be displayed automatically whenever it is available at
+point, set the variable @code{help-at-pt-display-when-idle} to
+@code{t}.
 
 @ignore
    arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1
--- a/man/idlwave.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/idlwave.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -14,12 +14,11 @@
 @set IDLVERSION 6.1
 @set NSYSROUTINES 1850
 @set NSYSKEYWORDS 7685
-@set DATE November, 2004
+@set DATE March, 2005
 @set AUTHOR J.D. Smith & Carsten Dominik
 @set AUTHOR-EMAIL jdsmith@@as.arizona.edu
 @set MAINTAINER J.D. Smith
 @set MAINTAINER-EMAIL jdsmith@@as.arizona.edu
-@set IDLWAVE-HOMEPAGE http://idlwave.org/
 @c %**end of header
 @finalout
 
@@ -30,7 +29,7 @@
 This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
 @value{VERSION}
 
-Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
 Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -61,7 +60,7 @@
 This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
 IDLWAVE version @value{VERSION}, @value{DATE}.
 @sp 2
-Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
 Foundation, Inc.
 @sp 2
 @cindex Copyright, of IDLWAVE
@@ -101,7 +100,6 @@
 * Getting Started::             Tutorial
 * The IDLWAVE Major Mode::      The mode for editing IDL programs
 * The IDLWAVE Shell::           The mode for running IDL as an inferior program
-* Installation::                How to Install or Upgrade               
 * Acknowledgements::            Who did what
 * Sources of Routine Info::     How does IDLWAVE know about routine XYZ     
 * HTML Help Browser Tips::      
@@ -180,11 +178,6 @@
 * Walking the Calling Stack::   
 * Electric Debug Mode::         
 
-Installation
-
-* Installing IDLWAVE::          How to install the distribution
-* Installing Online Help::      Where to get the additional files needed
-
 Sources of Routine Info
 
 * Routine Definitions::         Where IDL Routines are defined.
@@ -204,8 +197,6 @@
 @node Introduction, IDLWAVE in a Nutshell, Top, Top
 @chapter Introduction
 @cindex Introduction
-@cindex CORBA (Common Object Request Broker Architecture)
-@cindex Interface Definition Language
 @cindex Interactive Data Language
 @cindex cc-mode.el
 @cindex @file{idl.el}
@@ -213,14 +204,13 @@
 @cindex Feature overview
 
 IDLWAVE is a package which supports editing source files written in
-the Interactive Data Language (IDL@footnote{IDL is a registered
-trademark of Research Systems, Inc., a Kodak Company}), and running
+the Interactive Data Language, and running
 IDL as an inferior shell@footnote{Note that this package has nothing
 to do with the Interface Definition Language, part of the Common
 Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also
 be used for editing source files for the related WAVE/CL language, but
 with only limited support.}.  It is a feature-rich replacement for the
-IDLDE development environment bundled with IDL, and uses the full
+IDLDE development environment included with IDL, and uses the full
 power of Emacs to make editing and running IDL programs easier,
 quicker, and more structured.
 
@@ -421,11 +411,10 @@
 shoulder of your nearest IDLWAVE guru for a few days.
 
 It is assumed that you have access to Emacs or XEmacs with the full
-IDLWAVE package including online help (@pxref{Installation}).  We also
-assume that you are familiar with Emacs and can read the nomenclature of
-key presses in Emacs (in particular, @kbd{C} stands for @key{CONTROL}
-and @kbd{M} for @key{META} (often the @key{ALT} key carries this
-functionality)).
+IDLWAVE package including online help.  We also assume that you are
+familiar with Emacs and can read the nomenclature of key presses in
+Emacs (in particular, @kbd{C} stands for @key{CONTROL} and @kbd{M} for
+@key{META} (often the @key{ALT} key carries this functionality)).
 
 Open a new source file by typing:
 
@@ -612,9 +601,8 @@
 
 You likely have your own indentation preferences for IDL code.  For
 example, some like to indent the main block of an IDL program from the
-margin, different from the conventions used by RSI, and use only 3
-spaces as indentation between @code{BEGIN} and @code{END}.  Try the
-following lines in @file{.emacs}:
+margin and use only 3 spaces as indentation between @code{BEGIN} and
+@code{END}.  Try the following lines in @file{.emacs}:
 
 @lisp
 (setq idlwave-main-block-indent 2)
@@ -1279,19 +1267,18 @@
 @cindex Online Help, Installation
 @cindex Speed, of online help
 
-For IDL system routines, RSI provides extensive documentation.
-IDLWAVE can access an HTML version of this documentation very quickly
-and accurately.  This is @emph{much} faster than using the IDL online
-help application, because IDLWAVE usually gets you to the right place
-in the documentation directly --- e.g. a specific keyword of a routine
---- without any additional browsing and scrolling.  For this online
-help to work, an HTML version of the IDL documentation, which is not
-part of the standalone IDLWAVE distribution, is required.  The
-necessary files can be downloaded from @uref{@value{IDLWAVE-HOMEPAGE},
-the maintainers webpage}.  There are a variety of options for
-displaying the HTML help: see below.  Help for routines without HTML
-documentation is also available, using the routine documentation
-header and/or source.
+IDLWAVE can display help from an HTML version of the IDL documentation
+if it is available.  This is @emph{much} faster than using the IDL
+online help application, because IDLWAVE usually gets you to the right
+place in the documentation directly --- e.g. a specific keyword of a
+routine --- without any additional browsing and scrolling.  There are
+a variety of options for displaying the HTML help: see below.  Help
+for routines without HTML documentation is also available, using the
+routine documentation header and/or source.
+
+To make this feature work, you should set
+@code{idlwave-html-help-location} to the directory name of the
+directory where the IDL help files are installed.
 
 @kindex M-?
 In any IDL program (or, as with most IDLWAVE commands, in the IDL
@@ -1376,19 +1363,19 @@
 Customize this variable to see what choices of browsers your system
 offers.
 
-Certain browsers like @code{w3} (bundled with many versions of Emacs)
-and @code{w3m} (@uref{http://emacs-w3m.namazu.org/}, the author's help
-browser of choice) are run within Emacs, and use Emacs buffers to
-display the HTML help.  This can be convenient, especially on small
-displays, and images can even be displayed in-line on new Emacs
-versions.  However, better formatting results are often achieved with
-external browsers, like Mozilla.  IDLWAVE assumes any browser function
-containing "w3" is displayed in a local buffer.  If you are using
-another Emacs-local browser for which this is not true, set the
-variable @code{idlwave-help-browser-is-local}.
-
-@emph{N.B. For Windows users}: IDLWAVE can bring up RSI help directly
-in the Microsoft HTMLHelp documentation supplied with IDL: no
+Certain browsers like @code{w3} and @code{w3m}
+(@uref{http://emacs-w3m.namazu.org/}, the author's help browser of
+choice) are run within Emacs, and use Emacs buffers to display the
+HTML help.  This can be convenient, especially on small displays, and
+images can even be displayed in-line on new Emacs versions.  However,
+better formatting results are often achieved with external browsers,
+like Mozilla.  IDLWAVE assumes any browser function containing "w3" is
+displayed in a local buffer.  If you are using another Emacs-local
+browser for which this is not true, set the variable
+@code{idlwave-help-browser-is-local}.
+
+@emph{N.B. For Windows users}: IDLWAVE can bring up help directly
+from the Microsoft HTMLHelp documentation supplied with IDL: no
 additional help files are needed.  Be sure to set
 @code{idlwave-system-directory} and the help file will be found
 automatically (or, alternatively, specify its location directly with
@@ -2217,7 +2204,7 @@
 
 @defopt idlwave-abbrev-change-case (@code{nil})
 Non-@code{nil} means all abbrevs will be forced to either upper or lower
-case.  Legal values are @code{nil}, @code{t}, and @code{down}.
+case.  Valid values are @code{nil}, @code{t}, and @code{down}.
 @end defopt
 
 @defopt idlwave-reserved-word-upcase (@code{nil})
@@ -2343,7 +2330,7 @@
 
 
 
-@node The IDLWAVE Shell, Installation, The IDLWAVE Major Mode, Top
+@node The IDLWAVE Shell, Acknowledgements, The IDLWAVE Major Mode, Top
 @chapter The IDLWAVE Shell
 @cindex IDLWAVE shell
 @cindex Major mode, @code{idlwave-shell-mode}
@@ -2842,7 +2829,7 @@
 
 @defopt idlwave-shell-mark-breakpoints (@code{t})
 Non-@code{nil} means mark breakpoints in the source file buffers.  The
-value indicates the preferred method.  Legal values are @code{nil},
+value indicates the preferred method.  Valid values are @code{nil},
 @code{t}, @code{face}, and @code{glyph}.
 @end defopt
 
@@ -2879,7 +2866,7 @@
 
 @defopt idlwave-shell-mark-stop-line (@code{t})
 Non-@code{nil} means mark the source code line where IDL is currently
-stopped.  The value specifies the preferred method.  Legal values are
+stopped.  The value specifies the preferred method.  Valid values are
 @code{nil}, @code{t}, @code{arrow}, and @code{face}.
 @end defopt
 
@@ -3209,59 +3196,7 @@
 @end defopt
 
 
-@node Installation, Acknowledgements, The IDLWAVE Shell, Top
-@chapter Installation
-@cindex Installation
-
-@menu
-* Installing IDLWAVE::          How to install the distribution
-* Installing Online Help::      Where to get the additional files needed
-@end menu
-
-@node Installing IDLWAVE, Installing Online Help, Installation, Installation
-@section Installing IDLWAVE
-
-@cindex FTP site
-@cindex URL, homepage for IDLWAVE
-@cindex Homepage for IDLWAVE
-@cindex IDLWAVE, homepage
-@cindex XEmacs package IDLWAVE
-@cindex Emacs, distributed with IDLWAVE
-@cindex Copyright, of IDL manual
-IDLWAVE is part of Emacs 21.1 and later.  It is also an XEmacs package
-and can be installed from
-@uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site}
-with the normal package management system on XEmacs 21.  These
-pre-installed versions should work out-of-the-box.  However, the HTML
-files required for online HTML help are not distributed with
-XEmacs/Emacs and have to be installed separately@footnote{Due to
-copyright reasons, the HTML version of the IDL manual cannot be
-distributed under the GPL.}  (@pxref{Installing Online Help}).
-
-You can also download IDLWAVE and install it yourself from
-@uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}.  Follow the
-instructions in the INSTALL file.
-
-@node Installing Online Help,  , Installing IDLWAVE, Installation
-@section Installing Online Help
-@cindex Installing online help
-@cindex Online Help, Installation
-
-If you want to use the online help display, an additional set of files
-(HTML versions of the IDL documentation) must be installed.  These
-files can also be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, the
-maintainers webpage}.  You need to place the files somewhere on your
-system and tell IDLWAVE where they are with
-
-@lisp
-(setq idlwave-html-help-location "/path/to/help/dir/") ;e.g. /usr/local/etc
-@end lisp
-
-Note that the help package only changes with new versions of the IDL
-documentation, and need not be updated unless your version of IDL
-changes.
-
-@node Acknowledgements, Sources of Routine Info, Installation, Top
+@node Acknowledgements, Sources of Routine Info, The IDLWAVE Shell, Top
 @chapter Acknowledgements
 @cindex Acknowledgements
 @cindex Maintainer, of IDLWAVE
@@ -3731,10 +3666,7 @@
 manuals.  The file @file{idlw-rinfo.el} contains the routine information
 for the IDL system routines, and links to relevant sections of the HTML
 documentation.  The Online Help feature of IDLWAVE requires HTML
-versions of the IDL manuals to be available; the HTML documentation is
-not distributed with IDLWAVE by default, but must be downloaded
-separately from the @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers
-webpage}.
+versions of the IDL manuals to be available.
 
 The HTML files and related images can be produced from the
 @file{idl.chm} HTMLHelp file distributed with IDL using the free
@@ -3755,22 +3687,19 @@
 5.0).  Since IDLWAVE runs on a many different system types, a single
 browser configuration is not possible, but choices abound.
 
-On many systems, the default browser configured in
-@code{browse-url-browser-function}, and hence inherited by default by
-@code{idlwave-help-browser-function}, is Netscape.  Unfortunately, the
-HTML manuals decompiled from the original RSI source contain
-formatting structures which Netscape 4.x does not handle well, though
-they are still readable.  A much better choice is Mozilla, or one of
-the Mozilla-derived browsers such as
-@uref{http://galeon.sourceforge.net/,Galeon} (Linux),
+Unfortunately, the HTML manuals decompiled from the original
+source contain formatting structures which Netscape 4.x does not
+handle well, though they are still readable.  A much better choice is
+Mozilla, or one of the Mozilla-derived browsers such as
+@uref{http://galeon.sourceforge.net/,Galeon} (GNU/Linux),
 @uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or
 @uref{http://www.mozilla.org/projects/firebird/,Firebird} (all
 platforms).  Newer versions of Emacs provide a browser-function choice
 @code{browse-url-gnome-moz} which uses the Gnome-configured browser.
 
-Note that the HTML files decompiled from RSI Microsoft Help sources
+Note that the HTML files decompiled from  Microsoft Help sources
 contain specific references to the @samp{Symbol} font, which by default
-is not permitted in normal encodings (it's technically illegal).  Though
+is not permitted in normal encodings (it's invalid, technically).  Though
 it only impacts a few symbols, you can trick Mozilla-based browsers into
 recognizing @samp{Symbol} by following the directions
 @uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}.  With this
@@ -3995,12 +3924,9 @@
 portability of Emacs, much of IDLWAVE does also work under different
 operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS.
 
-The only real problem is that RSI does not provide a command-line
+The only real problem is that there is no command-line
 version of IDL for Windows or MacOS(<=9) with which IDLWAVE can
-interact@footnote{Call your RSI representative and complain --- it
-should be trivial for them to provide one.  And if enough people ask for
-it, maybe they will.  The new MacOSX version of IDL @emph{does} have a
-shell and works well with IDLWAVE.}.  As a result, the IDLWAVE Shell
+interact.  As a result, the IDLWAVE Shell
 does not work and you have to rely on IDLDE to run and debug your
 programs.  However, editing IDL source files with Emacs/IDLWAVE works
 with all bells and whistles, including routine info, completion and fast
@@ -4018,7 +3944,7 @@
 ;; the X/Emacs installation)
 (setq load-path (cons "c:/program files/IDLWAVE" load-path))
 
-;; The location of the IDL library files, both from RSI and your own.
+;; The location of the IDL library files, both standard and your own.
 ;; note that the initial "+" expands the path recursively
 (setq idlwave-library-path
         '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" ))
@@ -4113,9 +4039,7 @@
 place, and this is the source of the error.  If you recompile (or just
 "make; make install") from source, it should resolve this problem.
 Another option is to recompile the @file{idlw*.el} files by hand using
-@kbd{M-x byte-compile-file}.  Why not take the opportunity to grab the
-latest IDLWAVE version at @uref{@value{IDLWAVE-HOMEPAGE}, the
-maintainers webpage}
+@kbd{M-x byte-compile-file}.
 
 @item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
 windows on my desktop.}
@@ -4214,7 +4138,7 @@
 @item @strong{All the Greek-font characters in the HTML help are
 displayed as Latin characters!}
 
-Unfortunately, the HTMLHelp files RSI provides attempt to switch to
+Unfortunately, the HTMLHelp files attempt to switch to
 @samp{Symbol} font to display Greek characters, which is not really an
 permitted method for doing this in HTML.  There is a "workaround" for
 many browsers: @xref{HTML Help Browser Tips}.
--- a/man/misc.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/misc.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001, 2004
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004
 @c   Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
@@ -1247,6 +1247,14 @@
   If you set the variable @code{server-window} to a window or a frame,
 @kbd{C-x #} displays the server buffer in that window or in that frame.
 
+@vindex server-name
+  You can run multiple Emacs servers on the same machine by giving
+each one a unique ``server name'', using the variable
+@code{server-name}.  For example, @kbd{M-x set-variable RET
+server-name RET foo RET} sets the server name to @samp{foo}.  The
+@code{emacsclient} program can visit a server by name using the
+@samp{-s} option.  @xref{Invoking emacsclient}.
+
   While @code{mail} or another application is waiting for
 @code{emacsclient} to finish, @code{emacsclient} does not read terminal
 input.  So the terminal that @code{mail} was using is effectively
@@ -1329,6 +1337,9 @@
 This can be used typically when connecting from home to an Emacs
 server running on your machine at your workplace.
 
+If there is more than one Emacs server running, you can specify a
+server name with the option @samp{-s @var{name}}.
+
 You can also use @code{emacsclient} to execute any piece of Emacs Lisp
 code, using the option @samp{--eval}.  When this option is given, the
 rest of the arguments is not taken as a list of files to visit but as
@@ -1341,7 +1352,7 @@
   The Emacs commands for making hardcopy let you print either an entire
 buffer or just part of one, either with or without page headers.
 See also the hardcopy commands of Dired (@pxref{Misc File Ops})
-and the diary (@pxref{Diary Commands}).
+and the diary (@pxref{Displaying the Diary}).
 
 @table @kbd
 @item M-x print-buffer
--- a/man/mule.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/mule.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1333,62 +1333,31 @@
 non-standard ``extended'' versions of ISO-8859 character sets by using the
 function @code{standard-display-8bit} in the @code{disp-table} library.
 
-  There are several ways you can input single-byte non-@acronym{ASCII}
+  There are two ways to input single-byte non-@acronym{ASCII}
 characters:
 
 @itemize @bullet
 @cindex 8-bit input
 @item
-If your keyboard can generate character codes 128 (decimal) and up,
-representing non-@acronym{ASCII} characters, you can type those character codes
-directly.
-
-On a windowing terminal, you should not need to do anything special to
-use these keys; they should simply work.  On a text-only terminal, you
-should use the command @code{M-x set-keyboard-coding-system} or the
-variable @code{keyboard-coding-system} to specify which coding
-system your keyboard uses (@pxref{Specify Coding}).  Enabling this
-feature will probably require you to use @kbd{ESC} to type Meta
-characters; however, on a console terminal or in @code{xterm}, you can
-arrange for Meta to be converted to @kbd{ESC} and still be able type
-8-bit characters present directly on the keyboard or using
-@kbd{Compose} or @kbd{AltGr} keys.  @xref{User Input}.
-
-@item
 You can use an input method for the selected language environment.
 @xref{Input Methods}.  When you use an input method in a unibyte buffer,
 the non-@acronym{ASCII} character you specify with it is converted to unibyte.
 
-@kindex C-x 8
-@cindex @code{iso-transl} library
-@cindex compose character
-@cindex dead character
 @item
-For Latin-1 only, you can use the
-key @kbd{C-x 8} as a ``compose character'' prefix for entry of
-non-@acronym{ASCII} Latin-1 printing characters.  @kbd{C-x 8} is good for
-insertion (in the minibuffer as well as other buffers), for searching,
-and in any other context where a key sequence is allowed.
+If your keyboard can generate character codes 128 (decimal) and up,
+representing non-@acronym{ASCII} characters, you can type those character codes
+directly.
 
-@kbd{C-x 8} works by loading the @code{iso-transl} library.  Once that
-library is loaded, the @key{ALT} modifier key, if you have one, serves
-the same purpose as @kbd{C-x 8}; use @key{ALT} together with an accent
-character to modify the following letter.  In addition, if you have keys
-for the Latin-1 ``dead accent characters,'' they too are defined to
-compose with the following character, once @code{iso-transl} is loaded.
-Use @kbd{C-x 8 C-h} to list the available translations as mnemonic
-command names.
-
-@item
-@cindex @code{iso-acc} library
-@cindex ISO Accents mode
-@findex iso-accents-mode
-@cindex Latin-1, Latin-2 and Latin-3 input mode
-For Latin-1, Latin-2 and Latin-3, @kbd{M-x iso-accents-mode} enables
-a minor mode that works much like the @code{latin-1-prefix} input
-method, but does not depend on having the input methods installed.  This
-mode is buffer-local.  It can be customized for various languages with
-@kbd{M-x iso-accents-customize}.
+On a window system, you should not need to do anything special to use
+these keys; they should simply work.  On a text-only terminal, you
+should use the command @code{M-x set-keyboard-coding-system} or the
+variable @code{keyboard-coding-system} to specify which coding system
+your keyboard uses (@pxref{Specify Coding}).  Enabling this feature
+will probably require you to use @kbd{ESC} to type Meta characters;
+however, on a console terminal or in @code{xterm}, you can arrange for
+Meta to be converted to @kbd{ESC} and still be able type 8-bit
+characters present directly on the keyboard or using @kbd{Compose} or
+@kbd{AltGr} keys.  @xref{User Input}.
 @end itemize
 
 @node Charsets
--- a/man/picture.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/picture.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -90,23 +90,23 @@
 @findex picture-backward-clear-column
 @findex picture-clear-column
 @findex picture-clear-line
-  Picture mode provides erasure instead of deletion and killing of
-text.  @key{DEL} (@code{picture-backward-clear-column}) replaces the
-preceding character with a space rather than removing it; this moves
-point backwards.  @kbd{C-d} (@code{picture-clear-column}) replaces the
-next character or characters with spaces, but does not move point.  (If
-you want to clear characters to spaces and move forward over them, use
+  In Picture mode, the commands that normally delete or kill text,
+instead erase text (replacing it with spaces).  @key{DEL}
+(@code{picture-backward-clear-column}) replaces the preceding
+character with a space rather than removing it; this moves point
+backwards.  @kbd{C-d} (@code{picture-clear-column}) replaces the next
+character or characters with spaces, but does not move point.  (If you
+want to clear characters to spaces and move forward over them, use
 @key{SPC}.)  @kbd{C-k} (@code{picture-clear-line}) really kills the
-contents of lines, but does not delete the newlines from the
-buffer.
+contents of lines, but does not delete the newlines from the buffer.
 
 @findex picture-open-line
   To do actual insertion, you must use special commands.  @kbd{C-o}
-(@code{picture-open-line}) creates a blank line after the current line;
-it never splits a line.  @kbd{C-M-o} (@code{split-line}) makes sense in
-Picture mode, so it is not changed.  @kbd{C-j}
-(@code{picture-duplicate-line}) inserts below the current line another
-line with the same contents.@refill
+(@code{picture-open-line}) creates a blank line after the current
+line; it never splits a line.  @kbd{C-M-o} (@code{split-line}) makes
+sense in Picture mode, so it is not changed.  @kbd{C-j}
+(@code{picture-duplicate-line}) inserts another line with the same
+contents below the current line.
 
 @kindex C-c C-d @r{(Picture mode)}
    To do actual deletion in Picture mode, use @kbd{C-w}, @kbd{C-c C-d}
@@ -141,22 +141,30 @@
 
 @table @kbd
 @item C-c <
+@itemx C-c @key{LEFT}
 Move left after insertion (@code{picture-movement-left}).
 @item C-c >
+@itemx C-c @key{RIGHT}
 Move right after insertion (@code{picture-movement-right}).
 @item C-c ^
+@itemx C-c @key{UP}
 Move up after insertion (@code{picture-movement-up}).
 @item C-c .
+@itemx C-c @key{DOWN}
 Move down after insertion (@code{picture-movement-down}).
 @item C-c `
+@itemx C-c @key{HOME}
 Move up and left (``northwest'') after insertion (@code{picture-movement-nw}).
 @item C-c '
+@itemx C-c @key{PAGEUP}
 Move up and right (``northeast'') after insertion
 (@code{picture-movement-ne}).
 @item C-c /
+@itemx C-c @key{END}
 Move down and left (``southwest'') after insertion
 @*(@code{picture-movement-sw}).
 @item C-c \
+@itemx C-c @key{PAGEDOWN}
 Move down and right (``southeast'') after insertion
 @*(@code{picture-movement-se}).
 @end table
--- a/man/reftex.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/reftex.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -9,7 +9,7 @@
 @c Version and Contact Info
 @set VERSION 4.24
 @set EDITION 4.24
-@set DATE August 2004
+@set DATE March 2005
 @set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site}
 @set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage}
 @set MAINTAINER Carsten Dominik
@@ -25,7 +25,8 @@
 This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for
 @b{Ref@TeX{}} @value{VERSION}
 
-Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2005
+Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -734,9 +735,9 @@
 A label can be derived from context.  This means, @b{Ref@TeX{}} takes
 the context of the label definition and constructs a label from
 that@footnote{Note that the context may contain constructs which are
-illegal in labels.  @b{Ref@TeX{}} will therefore strip the accent from
+invalid in labels.  @b{Ref@TeX{}} will therefore strip the accent from
 accented Latin-1 characters and remove everything else which is not
-legal in labels.  This mechanism is safe, but may not be satisfactory
+valid in labels.  This mechanism is safe, but may not be satisfactory
 for non-western languages.  Check the following variables if you need to
 change things: @code{reftex-translate-to-ascii-function},
 @code{reftex-derive-label-parameters}, @code{reftex-label-illegal-re},
@@ -2832,7 +2833,7 @@
 @vindex reftex-translate-to-ascii-function
 @vindex reftex-label-illegal-re
 Also, when a label is derived from context, @b{Ref@TeX{}} clears the
-context string from non-ASCII characters in order to make a legal label.
+context string from non-ASCII characters in order to make a valid label.
 If there should ever be a version of @TeX{} which allows extended
 characters @emph{in labels}, then we will have to look at the
 variables @code{reftex-translate-to-ascii-function} and
@@ -4119,7 +4120,7 @@
 
 If @var{derive}is @code{t}, @b{Ref@TeX{}} will try to derive a sensible
 label from context.  A section label for example will be derived from
-the section heading.  The conversion of the context to a legal label is
+the section heading.  The conversion of the context to a valid label is
 governed by the specifications given in
 @code{reftex-derive-label-parameters}.  If @var{derive} is @code{nil},
 the default label will consist of the prefix and a unique number, like
@@ -4165,7 +4166,7 @@
 @end deffn
 
 @deffn Hook reftex-string-to-label-function
-Function to turn an arbitrary string into a legal label.
+Function to turn an arbitrary string into a valid label.
 @b{Ref@TeX{}}'s default function uses the variable
 @code{reftex-derive-label-parameters}.
 @end deffn
@@ -4173,7 +4174,7 @@
 @deffn Hook reftex-translate-to-ascii-function
 Filter function which will process a context string before it is used to
 derive a label from it.  The intended application is to convert ISO or
-Mule characters into something legal in labels.  The default function
+Mule characters into something valid in labels.  The default function
 @code{reftex-latin1-to-ascii} removes the accents from Latin-1
 characters.  X-Symbol (>=2.6) sets this variable to the much more
 general @code{x-symbol-translate-to-ascii}.
@@ -4187,9 +4188,9 @@
 Number of words to use.
 @item @var{maxchar}
 Maximum number of characters in a label string.
-@item @var{illegal}
-@code{nil}: Throw away any words containing characters illegal in labels.@*
-@code{t}:   Throw away only the illegal characters, not the whole word.
+@item @var{invalid}
+@code{nil}: Throw away any words containing characters invalid in labels.@*
+@code{t}:   Throw away only the invalid characters, not the whole word.
 @item @var{abbrev}
 @code{nil}: Never abbreviate words.@*
 @code{t}:   Always abbreviate words (see @code{reftex-abbrev-parameters}).@*
@@ -4204,7 +4205,7 @@
 @end defopt
 
 @defopt reftex-label-illegal-re
-Regexp matching characters not legal in labels.
+Regexp matching characters not valid in labels.
 @end defopt
 
 @defopt reftex-abbrev-parameters
@@ -4557,7 +4558,7 @@
 
 The final entry may also be a symbol.  It must have an association in
 the variable @code{reftex-index-macros-builtin} to specify the main
-indexing package you are using.  Legal values are currently
+indexing package you are using.  Valid values are currently
 @example
 default         @r{The LaTeX default - unnecessary to specify this one}
 multind         @r{The multind.sty package}
@@ -4589,7 +4590,7 @@
 for an index tag when creating index entries or displaying a specific
 index.  This variable controls the default offered for these queries.
 The default can be selected with @key{RET} during selection or
-completion.  Legal values of this variable are:
+completion.  Valid values of this variable are:
 @example
 nil        @r{Do not provide a default index}
 "tag"      @r{The default index tag given as a string, e.g. "idx"}
@@ -4829,9 +4830,9 @@
 @example
 @var{type}:       @r{File type like @code{"bib"} or @code{"tex"}.}
 @var{def-ext}:    @r{The default extension for that file type, like @code{".tex"} or @code{".bib"}.}
-@var{other-ext}:  @r{Any number of other legal extensions for this file type.}
+@var{other-ext}:  @r{Any number of other valid extensions for this file type.}
 @end example
-When a files is searched and it does not have any of the legal extensions,
+When a files is searched and it does not have any of the valid extensions,
 we try the default extension first, and then the naked file name.
 @end defopt
 
@@ -5456,7 +5457,7 @@
 All @file{.rel} files have a final newline to avoid queries.
 @item
 Single byte representations of accented European letters (ISO-8859-1)
-are now legal in labels.
+are now valid in labels.
 @end itemize
 
 @noindent @b{Version 3.33}
--- a/man/rmail.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/rmail.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1193,7 +1193,7 @@
 @code{movemail} program and determine its version.  There are two
 versions of @code{movemail} program: the native one, shipped with GNU
 Emacs (the ``emacs version'') and the one included in GNU mailutils
-(the ``mailutils version'', @pxref{movemail,,,mailutils,GNU
+(the ``mailutils version,'' @pxref{movemail,,,mailutils,GNU
 mailutils}).  They support the same command line syntax and the same
 basic subset of options.  However, the @samp{mailutils} version offers
 additional features.
--- a/man/search.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/search.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004, 2005
 @c   Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search, Fixit, Display, Top
@@ -25,15 +25,13 @@
 * Regexp Search::		Search for match for a regexp.
 * Regexps::			Syntax of regular expressions.
 * Search Case::			To ignore case while searching, or not.
-* Configuring Scrolling::	Scrolling within incremental search.
 * Replace::			Search, and replace some or all matches.
 * Other Repeating Search::	Operating on all matches for some regexp.
 @end menu
 
-@node Incremental Search, Nonincremental Search, Search, Search
+@node Incremental Search
 @section Incremental Search
 
-@cindex incremental search
   An incremental search begins searching as soon as you type the first
 character of the search string.  As you type in the search string, Emacs
 shows you where the string (as you have typed it so far) would be
@@ -49,6 +47,23 @@
 Incremental search backward (@code{isearch-backward}).
 @end table
 
+@menu
+* Basic Isearch::       Basic incremental search commands.
+* Repeat Isearch::      Searching for the same string again.
+* Error in Isearch::    When your string is not found.
+* Special Isearch::     Special input in incremental search.
+* Non-ASCII Isearch::   How to search for non-ASCII characters.
+* Isearch Yank::        Commands that grab text into the search string
+                          or else edit the search string.
+* Highlight Isearch::   Isearch highlights the other possible matches.
+* Isearch Scroll::      Scrolling during an incremental search.
+* Slow Isearch::        Incremental search features for slow terminals.
+@end menu
+
+@node Basic Isearch
+@subsection Basics of Incremental Search
+@cindex incremental search
+
 @kindex C-s
 @findex isearch-forward
   @kbd{C-s} starts a forward incremental search.  It reads characters
@@ -81,6 +96,15 @@
 @kbd{C-y}, @kbd{M-y}, @kbd{M-r}, @kbd{M-c}, @kbd{M-e}, and some other
 meta-characters).
 
+  When you exit the incremental search, it sets the mark where point
+@emph{was} before the search.  That is convenient for moving back
+there.  In Transient Mark mode, incremental search sets the mark
+without activating it, and does so only if the mark is not already
+active.
+
+@node Repeat Isearch
+@subsection Repeating Incremental Search
+
   Sometimes you search for @samp{FOO} and find one, but not the one you
 expected to find.  There was a second @samp{FOO} that you forgot
 about, before the one you were aiming for.  In this event, type
@@ -92,6 +116,15 @@
 typing just @kbd{C-s C-s}: the first @kbd{C-s} is the key that invokes
 incremental search, and the second @kbd{C-s} means ``search again.''
 
+  If a search is failing and you ask to repeat it by typing another
+@kbd{C-s}, it starts again from the beginning of the buffer.
+Repeating a failing reverse search with @kbd{C-r} starts again from
+the end.  This is called @dfn{wrapping around}, and @samp{Wrapped}
+appears in the search prompt once this has happened.  If you keep on
+going past the original starting point of the search, it changes to
+@samp{Overwrapped}, which means that you are revisiting matches that
+you have already seen.
+
   To reuse earlier search strings, use the @dfn{search ring}.  The
 commands @kbd{M-p} and @kbd{M-n} move through the ring to pick a search
 string to reuse.  These commands leave the selected search ring element
@@ -100,6 +133,23 @@
 search ring, type @kbd{M-e}.  Type @kbd{C-s} or @kbd{C-r}
 to terminate editing the string and search for it.
 
+  You can change to searching backwards with @kbd{C-r}.  If a search fails
+because the place you started was too late in the file, you should do this.
+Repeated @kbd{C-r} keeps looking for more occurrences backwards.  A
+@kbd{C-s} starts going forwards again.  @kbd{C-r} in a search can be canceled
+with @key{DEL}.
+
+@kindex C-r
+@findex isearch-backward
+  If you know initially that you want to search backwards, you can use
+@kbd{C-r} instead of @kbd{C-s} to start the search, because @kbd{C-r} as
+a key runs a command (@code{isearch-backward}) to search backward.  A
+backward search finds matches that are entirely before the starting
+point, just as a forward search finds matches that begin after it.
+
+@node Error in Isearch
+@subsection Errors in Incremental Search
+
   If your string is not found at all, the echo area says @samp{Failing
 I-Search}.  The cursor is after the place where Emacs found as much of your
 string as it could.  Thus, if you search for @samp{FOOT}, and there is no
@@ -113,6 +163,21 @@
 @samp{FOOT}).  A second @kbd{C-g} at that point cancels the search
 entirely, returning point to where it was when the search started.
 
+@cindex quitting (in search)
+  The @kbd{C-g} ``quit'' character does special things during searches;
+just what it does depends on the status of the search.  If the search has
+found what you specified and is waiting for input, @kbd{C-g} cancels the
+entire search.  The cursor moves back to where you started the search.  If
+@kbd{C-g} is typed when there are characters in the search string that have
+not been found---because Emacs is still searching for them, or because it
+has failed to find them---then the search string characters which have not
+been found are discarded from the search string.  With them gone, the
+search is now successful and waiting for more input, so a second @kbd{C-g}
+will cancel the entire search.
+
+@node Special Isearch
+@subsection Special Input for Incremental Search
+
   An upper-case letter in the search string makes the search
 case-sensitive.  If you delete the upper-case character from the search
 string, it ceases to have this effect.  @xref{Search Case}.
@@ -125,13 +190,31 @@
 treated in the same context.  You can also specify a character by its
 octal code: enter @kbd{C-q} followed by a sequence of octal digits.
 
+  @kbd{M-%} typed in incremental search invokes @code{query-replace}
+or @code{query-replace-regexp} (depending on search mode) with the
+current search string used as the string to replace.  @xref{Query
+Replace}.
+
+  Entering @key{RET} when the search string is empty launches
+nonincremental search (@pxref{Nonincremental Search}).
+
+@vindex isearch-mode-map
+  To customize the special characters that incremental search understands,
+alter their bindings in the keymap @code{isearch-mode-map}.  For a list
+of bindings, look at the documentation of @code{isearch-mode} with
+@kbd{C-h f isearch-mode @key{RET}}.
+
+@node Non-ASCII Isearch
+@subsection Isearch for Non-@acronym{ASCII} Characters
+
 @cindex searching for non-@acronym{ASCII} characters
 @cindex input method, during incremental search
-  To search for non-@acronym{ASCII} characters, you must use an input method
-(@pxref{Input Methods}).  If an input method is enabled in the
-current buffer when you start the search, you can use it while you
-type the search string also.  Emacs indicates that by including the
-input method mnemonic in its prompt, like this:
+
+  To enter non-@acronym{ASCII} characters in an incrementral search,
+you must use an input method (@pxref{Input Methods}).  If an input
+method is enabled in the current buffer when you start the search, you
+can use it while you type the search string also.  Emacs indicates
+that by including the input method mnemonic in its prompt, like this:
 
 @example
 I-search [@var{im}]:
@@ -148,40 +231,8 @@
 name of the input method.  The input method you enable during
 incremental search remains enabled in the current buffer afterwards.
 
-  If a search is failing and you ask to repeat it by typing another
-@kbd{C-s}, it starts again from the beginning of the buffer.
-Repeating a failing reverse search with @kbd{C-r} starts again from
-the end.  This is called @dfn{wrapping around}, and @samp{Wrapped}
-appears in the search prompt once this has happened.  If you keep on
-going past the original starting point of the search, it changes to
-@samp{Overwrapped}, which means that you are revisiting matches that
-you have already seen.
-
-@cindex quitting (in search)
-  The @kbd{C-g} ``quit'' character does special things during searches;
-just what it does depends on the status of the search.  If the search has
-found what you specified and is waiting for input, @kbd{C-g} cancels the
-entire search.  The cursor moves back to where you started the search.  If
-@kbd{C-g} is typed when there are characters in the search string that have
-not been found---because Emacs is still searching for them, or because it
-has failed to find them---then the search string characters which have not
-been found are discarded from the search string.  With them gone, the
-search is now successful and waiting for more input, so a second @kbd{C-g}
-will cancel the entire search.
-
-  You can change to searching backwards with @kbd{C-r}.  If a search fails
-because the place you started was too late in the file, you should do this.
-Repeated @kbd{C-r} keeps looking for more occurrences backwards.  A
-@kbd{C-s} starts going forwards again.  @kbd{C-r} in a search can be canceled
-with @key{DEL}.
-
-@kindex C-r
-@findex isearch-backward
-  If you know initially that you want to search backwards, you can use
-@kbd{C-r} instead of @kbd{C-s} to start the search, because @kbd{C-r} as
-a key runs a command (@code{isearch-backward}) to search backward.  A
-backward search finds matches that are entirely before the starting
-point, just as a forward search finds matches that begin after it.
+@node Isearch Yank
+@subsection Isearch Yanking
 
   The characters @kbd{C-w} and @kbd{C-y} can be used in incremental
 search to grab text from the buffer into the search string.  This
@@ -212,18 +263,11 @@
 @kbd{Mouse-2} in the echo area does the same.
 @xref{Yanking}.
 
-  When you exit the incremental search, it sets the mark to where point
-@emph{was}, before the search.  That is convenient for moving back
-there.  In Transient Mark mode, incremental search sets the mark without
-activating it, and does so only if the mark is not already active.
-
-  @kbd{M-%} typed in incremental search invokes @code{query-replace}
-or @code{query-replace-regexp} (depending on search mode) with the
-current search string used as the string to replace.  @xref{Query
-Replace}.
-
+@node Highlight Isearch
+@subsection Lazy Search Highlighting
 @cindex lazy search highlighting
 @vindex isearch-lazy-highlight
+
   When you pause for a little while during incremental search, it
 highlights all other possible matches for the search string.  This
 makes it easier to anticipate where you can get to by typing @kbd{C-s}
@@ -238,12 +282,7 @@
 (for all the other matches).  The latter is also used for other matches
 inside @code{query-replace}.
 
-@vindex isearch-mode-map
-  To customize the special characters that incremental search understands,
-alter their bindings in the keymap @code{isearch-mode-map}.  For a list
-of bindings, look at the documentation of @code{isearch-mode} with
-@kbd{C-h f isearch-mode @key{RET}}.
-
+@node Isearch Scroll
 @subsection Scrolling During Incremental Search
 
   Vertical scrolling during incremental search can be enabled by
@@ -268,10 +307,14 @@
 nevertheless made available under this rubric, since they are likewise
 handy during a search.
 
-  For a list of commands which are configured as scrolling commands by
-default and instructions on how thus to configure other commands, see
-@ref{Configuring Scrolling}.
+  You can make other commands usable within an incremental search by
+giving the command a non-@code{nil} @code{isearch-scroll} property.
+This works for commands that don't permanently change point, the
+buffer contents, the match data, the current buffer, or the selected
+window and frame.  The command must not delete the current window and
+must not itself attempt an incremental search.
 
+@node Slow Isearch
 @subsection Slow Terminal Incremental Search
 
   Incremental search on a slow terminal uses a modified style of display
@@ -294,7 +337,7 @@
   The number of lines to use in slow terminal search display is controlled
 by the variable @code{search-slow-window-lines}.  Its normal value is 1.
 
-@node Nonincremental Search, Word Search, Incremental Search, Search
+@node Nonincremental Search
 @section Nonincremental Search
 @cindex nonincremental search
 
@@ -334,7 +377,7 @@
 historical reasons, and to avoid the need to find key sequences
 for them.
 
-@node Word Search, Regexp Search, Nonincremental Search, Search
+@node Word Search
 @section Word Search
 @cindex word search
 
@@ -373,7 +416,7 @@
 via the incremental search commands both for historical reasons and
 to avoid the need to find suitable key sequences for them.
 
-@node Regexp Search, Regexps, Word Search, Search
+@node Regexp Search
 @section Regular Expression Search
 @cindex regular expression
 @cindex regexp
@@ -381,7 +424,8 @@
   A @dfn{regular expression} (@dfn{regexp}, for short) is a pattern
 that denotes a class of alternative strings to match, possibly
 infinitely many.  GNU Emacs provides both incremental and
-nonincremental ways to search for a match for a regexp.
+nonincremental ways to search for a match for a regexp.  The syntax of
+regular expressions is explained in the following section.
 
 @kindex C-M-s
 @findex isearch-forward-regexp
@@ -429,7 +473,7 @@
 @code{isearch-forward} and @code{isearch-backward}.  @xref{Incremental
 Search}.
 
-@node Regexps, Search Case, Regexp Search, Search
+@node Regexps
 @section Syntax of Regular Expressions
 @cindex syntax of regexps
 
@@ -830,7 +874,7 @@
 for matching parens.)
 @end ignore
 
-@node Search Case, Configuring Scrolling, Regexps, Search
+@node Search Case
 @section Searching and Case
 
   Incremental searches in Emacs normally ignore the case of the text
@@ -852,91 +896,17 @@
 effect of including an upper-case letter in the current search.
 
 @vindex case-fold-search
+@vindex default-case-fold-search
   If you set the variable @code{case-fold-search} to @code{nil}, then
 all letters must match exactly, including case.  This is a per-buffer
 variable; altering the variable affects only the current buffer, but
-there is a default value which you can change as well.  @xref{Locals}.
-This variable applies to nonincremental searches also, including those
-performed by the replace commands (@pxref{Replace}) and the minibuffer
-history matching commands (@pxref{Minibuffer History}).
-
-@node Configuring Scrolling, Replace, Search Case, Search
-@section Configuring Scrolling
-@cindex scrolling in incremental search
-@vindex isearch-allow-scroll
-
-Scrolling, etc., during incremental search is enabled by setting the
-customizable variable @code{isearch-allow-scroll} to a non-@code{nil} value.
-
-@c See Subject: Info file:  How do I get an itemized list without blank lines?
-@c Date: Sat, 12 Apr 2003 09:45:31 +0000  in gnu.emacs.help
-@subsection Standard scrolling commands
-Here is the list of commands which are configured by default to be
-``scrolling'' commands in an incremental search, together with their
-usual bindings:
-@subsubsection Commands which scroll the window:
-@table @asis
-@item @code{scroll-bar-toolkit-scroll} (@kbd{@key{vertical-scroll-bar}@key{mouse-1}} in X-Windows)
-@itemx @code{mac-handle-scroll-bar-event} (@kbd{@key{vertical-scroll-bar}@key{mouse-1}} on a Mac)
-@itemx @code{w32-handle-scroll-bar-event} (@kbd{@key{vertical-scroll-bar}@key{mouse-1}} in MS-Windows)
-@item @code{recenter} (@kbd{C-l}) @xref{Scrolling}.
-@itemx @code{reposition-window} (@kbd{C-M-l}) @xref{Scrolling}.
-@itemx @code{scroll-up} (@kbd{@key{NEXT}}) @xref{Scrolling}.
-@itemx @code{scroll-down} (@kbd{@key{PRIOR}}) @xref{Scrolling}.
-@end table
-
-@subsubsection Commands which act on the other window:
-@table @asis
-@item @code{list-buffers} (@kbd{C-x C-b}) @xref{List Buffers}.
-@itemx @code{scroll-other-window} (@kbd{C-M-v}) @xref{Other Window}.
-@itemx @code{scroll-other-window-down} (@kbd{C-M-S-v}) @xref{Other Window}.
-@itemx @code{beginning-of-buffer-other-window} (@kbd{M-@key{home}})
-@itemx @code{end-of-buffer-other-window} (@kbd{M-@key{end}})
-@end table
+there is a default value in @code{default-case-fold-search} that you
+can also set.  @xref{Locals}.  This variable applies to nonincremental
+searches also, including those performed by the replace commands
+(@pxref{Replace}) and the minibuffer history matching commands
+(@pxref{Minibuffer History}).
 
-@subsubsection Commands which change the window layout:
-@table @asis
-@item @code{delete-other-windows} (@kbd{C-x 1}) @xref{Change Window}.
-@itemx @code{balance-windows} (@kbd{C-x +}) @xref{Change Window}.
-@itemx @code{split-window-vertically} (@kbd{C-x 2}) @xref{Split Window}.
-@itemx @code{enlarge-window} (@kbd{C-x ^}) @xref{Change Window}.
-@end table
-
-@subsection Configuring other commands as scrolling commands
-To do this, set a command's isearch-scroll property to the value t.
-For example:
-
-@example
-@code{(put 'my-command 'isearch-scroll t)}
-@end example
-
-You should only thus configure commands which are ``safe'': i.e., they
-won't leave emacs in an inconsistent state when executed within a
-search---that is to say, the following things may be changed by a
-command only temporarily, and must be restored before the command
-finishes:
-
-@enumerate
-@item
-Point.
-@item
-The buffer contents.
-@item
-The selected window and selected frame.
-@item
-The current match-data.  @xref{Match Data,,, elisp, The Emacs Lisp
-Reference Manual}.
-@end enumerate
-
-Additionally, the command must not delete the current window and must
-not itself attempt an incremental search.  It may, however, change the
-window's size, or create or delete other windows and frames.
-
-Note that an attempt by a command to scroll the text
-@emph{horizontally} won't work, although it will do no harm---any such
-scrolling will be overridden and nullified by the display code.
-
-@node Replace, Other Repeating Search, Configuring Scrolling, Search
+@node Replace
 @section Replacement Commands
 @cindex replacement
 @cindex search-and-replace commands
@@ -967,13 +937,10 @@
 @node Unconditional Replace, Regexp Replace, Replace, Replace
 @subsection Unconditional Replacement
 @findex replace-string
-@findex replace-regexp
 
 @table @kbd
 @item M-x replace-string @key{RET} @var{string} @key{RET} @var{newstring} @key{RET}
 Replace every occurrence of @var{string} with @var{newstring}.
-@item M-x replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET}
-Replace every match for @var{regexp} with @var{newstring}.
 @end table
 
   To replace every instance of @samp{foo} after point with @samp{bar},
@@ -1008,11 +975,17 @@
 
 @node Regexp Replace, Replacement and Case, Unconditional Replace, Replace
 @subsection Regexp Replacement
+@findex replace-regexp
 
   The @kbd{M-x replace-string} command replaces exact matches for a
 single string.  The similar command @kbd{M-x replace-regexp} replaces
 any match for a specified pattern.
 
+@table @kbd
+@item M-x replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET}
+Replace every match for @var{regexp} with @var{newstring}.
+@end table
+
   In @code{replace-regexp}, the @var{newstring} need not be constant:
 it can refer to all or part of what is matched by the @var{regexp}.
 @samp{\&} in @var{newstring} stands for the entire match being
@@ -1258,7 +1231,7 @@
   See also @ref{Transforming File Names}, for Dired commands to rename,
 copy, or link files by replacing regexp matches in file names.
 
-@node Other Repeating Search,, Replace, Search
+@node Other Repeating Search
 @section Other Search-and-Loop Commands
 
   Here are some other commands that find matches for a regular
--- a/man/text.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/text.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -1053,30 +1053,35 @@
 you can undo right past them.  Making lines visible or invisible is simply
 not recorded by the undo mechanism.
 
+  Many of these commands act on the ``current'' heading line.  If
+point is on a heading line, that is the current heading line; if point
+is on a body line, the current heading line is the nearest preceding
+header line.
+
 @table @kbd
+@item C-c C-c
+Make the current heading line's body invisible (@code{hide-entry}).
+@item C-c C-e
+Make the current heading line's body visible (@code{show-entry}).
+@item C-c C-d
+Make everything under the current heading invisible, not including the
+heading itself (@code{hide-subtree}).
+@item C-c C-s
+Make everything under the current heading visible, including body,
+subheadings, and their bodies (@code{show-subtree}).
+@item C-c C-l
+Make the body of the current heading line, and of all its subheadings,
+invisible (@code{hide-leaves}).
+@item C-c C-k
+Make all subheadings of the current heading line, at all levels,
+visible (@code{show-branches}).
+@item C-c C-i
+Make immediate subheadings (one level down) of the current heading
+line visible (@code{show-children}).
 @item C-c C-t
 Make all body lines in the buffer invisible (@code{hide-body}).
 @item C-c C-a
 Make all lines in the buffer visible (@code{show-all}).
-@item C-c C-d
-Make everything under this heading invisible, not including this
-heading itself (@code{hide-subtree}).
-@item C-c C-s
-Make everything under this heading visible, including body,
-subheadings, and their bodies (@code{show-subtree}).
-@item C-c C-l
-Make the body of this heading line, and of all its subheadings,
-invisible (@code{hide-leaves}).
-@item C-c C-k
-Make all subheadings of this heading line, at all levels, visible
-(@code{show-branches}).
-@item C-c C-i
-Make immediate subheadings (one level down) of this heading line
-visible (@code{show-children}).
-@item C-c C-c
-Make this heading line's body invisible (@code{hide-entry}).
-@item C-c C-e
-Make this heading line's body visible (@code{show-entry}).
 @item C-c C-q
 Hide everything except the top @var{n} levels of heading lines
 (@code{hide-sublevels}).
@@ -1091,22 +1096,21 @@
 @kindex C-c C-c @r{(Outline mode)}
 @kindex C-c C-e @r{(Outline mode)}
   Two commands that are exact opposites are @kbd{C-c C-c}
-(@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}).  They are
-used with point on a heading line, and apply only to the body lines of
-that heading.  Subheadings and their bodies are not affected.
+(@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}).  They apply
+to the body lines directly following the current heading line.
+Subheadings and their bodies are not affected.
 
 @findex hide-subtree
 @findex show-subtree
 @kindex C-c C-s @r{(Outline mode)}
 @kindex C-c C-d @r{(Outline mode)}
 @cindex subtree (Outline mode)
-  Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) and
-@kbd{C-c C-s} (@code{show-subtree}).  Both expect to be used when point is
-on a heading line, and both apply to all the lines of that heading's
-@dfn{subtree}: its body, all its subheadings, both direct and indirect, and
-all of their bodies.  In other words, the subtree contains everything
-following this heading line, up to and not including the next heading of
-the same or higher rank.@refill
+  Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree})
+and @kbd{C-c C-s} (@code{show-subtree}).  Both apply to the current
+heading line's @dfn{subtree}: its body, all its subheadings, both
+direct and indirect, and all of their bodies.  In other words, the
+subtree contains everything following the current heading line, up to
+and not including the next heading of the same or higher rank.@refill
 
 @findex hide-leaves
 @findex show-branches
@@ -1131,9 +1135,12 @@
 @kindex C-c C-a @r{(Outline mode)}
   Two commands have a blanket effect on the whole file.  @kbd{C-c C-t}
 (@code{hide-body}) makes all body lines invisible, so that you see just
-the outline structure.  @kbd{C-c C-a} (@code{show-all}) makes all lines
-visible.  These commands can be thought of as a pair of opposites even
-though @kbd{C-c C-a} applies to more than just body lines.
+the outline structure (as a special exception, it will not hide lines
+at the top of the file, preceding the first header line, even though
+these are technically body lines).  @kbd{C-c C-a} (@code{show-all})
+makes all lines visible.  These commands can be thought of as a pair
+of opposites even though @kbd{C-c C-a} applies to more than just body
+lines.
 
 @findex hide-sublevels
 @kindex C-c C-q @r{(Outline mode)}
@@ -1284,39 +1291,45 @@
 @cindex @TeX{} mode
 @cindex La@TeX{} mode
 @cindex Sli@TeX{} mode
+@cindex Doc@TeX{} mode
 @cindex mode, @TeX{}
 @cindex mode, La@TeX{}
 @cindex mode, Sli@TeX{}
+@cindex mode, Doc@TeX{}
 @findex tex-mode
 @findex plain-tex-mode
 @findex latex-mode
 @findex slitex-mode
+@findex doctex-mode
 
   @TeX{} is a powerful text formatter written by Donald Knuth; it is also
 free, like GNU Emacs.  La@TeX{} is a simplified input format for @TeX{},
 implemented by @TeX{} macros; it comes with @TeX{}.  Sli@TeX{} is a special
 form of La@TeX{}.@footnote{Sli@TeX{} is obsoleted by the @samp{slides}
-document class in recent La@TeX{} versions.}
+document class in recent La@TeX{} versions.}  Doc@TeX{} (@file{.dtx})
+is a special file format in which the La@TeX{} sources are written,
+combining sources with documentation.
 
   Emacs has a special @TeX{} mode for editing @TeX{} input files.
 It provides facilities for checking the balance of delimiters and for
 invoking @TeX{} on all or part of the file.
 
 @vindex tex-default-mode
-  @TeX{} mode has three variants, Plain @TeX{} mode, La@TeX{} mode, and
-Sli@TeX{} mode (these three distinct major modes differ only slightly).
-They are designed for editing the three different formats.  The command
-@kbd{M-x tex-mode} looks at the contents of the buffer to determine
-whether the contents appear to be either La@TeX{} input or Sli@TeX{}
-input; if so, it selects the appropriate mode.  If the file contents do
-not appear to be La@TeX{} or Sli@TeX{}, it selects Plain @TeX{} mode.
-If the contents are insufficient to determine this, the variable
+  @TeX{} mode has four variants: Plain @TeX{} mode, La@TeX{} mode,
+Sli@TeX{} mode, and Doc@TeX{} mode (these distinct major modes differ
+only slightly).  They are designed for editing the four different
+formats.  The command @kbd{M-x tex-mode} looks at the contents of the
+buffer to determine whether the contents appear to be either La@TeX{}
+input, Sli@TeX{}, or Doc@TeX{} input; if so, it selects the
+appropriate mode.  If the file contents do not appear to be La@TeX{},
+Sli@TeX{} or Doc@TeX{}, it selects Plain @TeX{} mode.  If the contents
+are insufficient to determine this, the variable
 @code{tex-default-mode} controls which mode is used.
 
   When @kbd{M-x tex-mode} does not guess right, you can use the commands
-@kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, and @kbd{M-x
-slitex-mode} to select explicitly the particular variants of @TeX{}
-mode.
+@kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, @kbd{M-x slitex-mode},
+and @kbd{doctex-mode} to select explicitly the particular variants of
+@TeX{} mode.
 
 @menu
 * Editing: TeX Editing.   Special commands for editing in TeX mode.
--- a/man/url.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/url.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -319,10 +319,14 @@
 HTTP allows clients to express preferences for the language and
 encoding of documents which servers may honour.  For each of these
 variables, the value is a string; it can specify a single choice, or
-it can be a comma-separated list in descending order of preference.
-Each element can be followed by @samp{;q=@var{priority}} to specify
-its preference level; e.g., for @code{url-mime-language-string},
-@w{@code{"de, en-gb;q=0.8, en;q=0.7"}}.
+it can be a comma-separated list.
+
+Normally this list ordered by descending preference.  However, each
+element can be followed by @samp{;q=@var{priority}} to specify its
+preference level, a decimal number from 0 to 1; e.g., for
+@code{url-mime-language-string}, @w{@code{"de, en-gb;q=0.8,
+en;q=0.7"}}.  An element that has no @samp{;q} specification has
+preference level 1.
 
 @defopt url-mime-charset-string
 @cindex character sets
--- a/man/xresources.texi	Wed Mar 23 13:35:08 2005 +0000
+++ b/man/xresources.texi	Sun Mar 27 17:29:43 2005 +0000
@@ -7,10 +7,14 @@
   You can customize some X-related aspects of Emacs behavior using X
 resources, as is usual for programs that use X.  On MS-Windows, you
 can customize some of the same aspects using the system registry.
-@xref{MS-Windows Registry}.  X resources are the only way to customize
-tooltip windows and LessTif menus, since the libraries that implement
-them don't provide for customization through Emacs.  This appendix
-describes the X resources that Emacs recognizes and how to use them.
+@xref{MS-Windows Registry}.
+
+  When Emacs is built using an `X toolkit', such as Lucid or LessTif,
+you need to use X resources to customize the appearance of the
+widgets, including the menu-bar, scroll-bar, and dialog boxes.  This
+is because the libraries that implement these don't provide for
+customization through Emacs.  GTK+ widgets use a separate system of
+`GTK resources', which we will also describe.
 
 @menu
 * Resources::           Using X resources with Emacs (in general).
@@ -58,6 +62,11 @@
 @samp{BorderWidth} class.  Case distinctions are significant in these
 names.
 
+  Every resource definition is associated with a specific program
+name---the name of the executable file that you ran.  For Emacs, that
+is normally @samp{emacs}.  To specify a definition for all instances
+of Emacs, regardless of their names, use @samp{Emacs}.
+
   In @file{~/.Xdefaults}, you can specify a value for a single resource
 on one line, like this:
 
@@ -86,11 +95,8 @@
 
   The order in which the lines appear in the file does not matter.
 Also, command-line options always override the X resources file.
-
-  The string @samp{emacs} in the examples above is also a resource
-name.  It actually represents the name of the executable file that you
-invoke to run Emacs.  If Emacs is installed under a different name, it
-looks for resources under that name instead of @samp{emacs}.
+Here is a list of X command-line options and their corresponding
+resource names.
 
 @table @samp
 @item -name @var{name}
@@ -272,6 +278,17 @@
 @item @code{verticalScrollBars} (class @code{ScrollBars})
 Give frames scroll bars if @samp{on}; don't have scroll bars if
 @samp{off}.
+
+@item @code{visualClass} (class @code{VisualClass})
+Specify the ``visual'' that X should use.  This tells X how to handle
+colors.
+
+The value should start with one of @samp{TrueColor},
+@samp{PseudoColor}, @samp{DirectColor}, @samp{StaticColor},
+@samp{GrayScale}, and @samp{StaticGray}, followed by
+@samp{-@var{depth}}, where @var{depth} is the number of color planes.
+Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo}
+program outputs information saying which ones.
 @end table
 
 @node Face Resources
@@ -552,31 +569,32 @@
 @cindex @file{~/.gtkrc-2.0} file
 @cindex @file{~/.emacs.d/gtkrc} file
 
-  If the Emacs installed at your site was built to use the GTK widget set,
-then the menu bar, scroll bar and the dialogs can be customized with
-the standard GTK @file{~/.gtkrc-2.0} file or with the Emacs specific
-@file{~/.emacs.d/gtkrc} file; note that these files are only for
-customizing specific GTK widget features.  To customize Emacs font,
-background, faces etc., use the normal X resources, see @ref{Resources}.
+  If Emacs was built to use the GTK widget set, then the menu bar,
+scroll bar and the dialogs are customized with the standard GTK
+customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific
+file @file{~/.emacs.d/gtkrc}.  We recommend that you use
+@file{~/.emacs.d/gtkrc} for customizations, since @file{~/.gtkrc-2.0}
+seems to be ignored when running GConf with GNOME.  These files apply
+only to GTK widget features.  To customize Emacs font, background,
+faces, etc., use the normal X resources (@pxref{Resources}).
 
   Some GTK themes override these mechanisms, which means that using
-these mechanisms will not work to customize them.  We recommend that
-you use @file{~/.emacs.d/gtkrc} for customizations, since
-@file{~/.gtkrc-2.0} seems to be ignored when running GConf with GNOME.
+these mechanisms will not work to customize them.
 
-  In these files you first defines a style and then how to apply that style
-to widgets (@pxref{GTK widget names}).  Here is an example of how to
-change the font for Emacs menus:
+  In these files you first define a style and say what it means; then
+you specify to apply the style to various widget types (@pxref{GTK
+widget names}).  Here is an example of how to change the font for
+Emacs menus:
 
 @smallexample
-# This is a comment.
+# @r{Define the style @samp{metafont}.}
 style "menufont"
 @{
   font_name = "helvetica bold 14"  # This is a Pango font name
 @}
 
+# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{metafont}.}
 widget "*emacs-menuitem*" style "menufont"
-
 @end smallexample
 
   Here is a more elaborate example, showing how to change the parts of
@@ -585,72 +603,74 @@
 @smallexample
 style "scroll"
 @{
-  fg[NORMAL] = "red"@ @ @ @ @ # The arrow color.
-  bg[NORMAL] = "yellow"@ @ # The thumb and background around the arrow.
-  bg[ACTIVE] = "blue"@ @ @ @ # The trough color.
-  bg[PRELIGHT] = "white"@ # The thumb color when the mouse is over it.
+  fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.}
+  bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.}
+  bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.}
+  bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.}
 @}
 
 widget "*verticalScrollBar*" style "scroll"
 @end smallexample
 
-  There are some things you can set without using any style or widget name,
-which affect GTK as a whole.  Most of these are poorly documented, but can
-be found in the `Properties' section of the documentation page for
-@code{GtkSetting}, in the GTK document references below.
-
-One property of interest is @code{gtk-font-name} which sets the default
-font for GTK; you must use Pango font names (@pxref{GTK styles}).  A
-@file{~/.gtkrc-2.0} file that just sets a default font looks like this:
+  There are also parameters that affect GTK as a whole.  For example,
+the property @code{gtk-font-name} sets the default font for GTK.  You
+must use Pango font names (@pxref{GTK styles}).  A GTK resources file
+that just sets a default font looks like this:
 
 @smallexample
 gtk-font-name = "courier 12"
 @end smallexample
 
-
-  If GTK at your site is installed under @var{prefix},
-the resource file syntax is fully described in the GTK API
-document
-@file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html}.
-@var{prefix} is usually @file{/usr} or @file{/usr/local}.
-You can find the same document online at
+  The GTK resources file is fully described in the GTK API document.
+This can be found in
+@file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html},
+where @file{prefix} is the directory in which the GTK libraries were
+installed (usually @file{/usr} or @file{/usr/local}).  You can also
+find the document online, at
 @uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}.
 
-
 @menu
 * GTK widget names::      How widgets in GTK are named in general.
-* GTK names in Emacs::    GTK widget names in Emacs.
+* GTK Names in Emacs::    GTK widget names in Emacs.
 * GTK styles::            What can be customized in a GTK widget.
 @end menu
 
-
 @node GTK widget names
 @appendixsubsec GTK widget names
 @cindex GTK widget names
 
-  Widgets are specified by widget class or by widget name.
-The widget class is the type of the widget, for example @code{GtkMenuBar}.
-The widget name is the name given to a specific widget within a program.
-A widget always have a class but it is not mandatory to give a name to
-a widget.  Absolute names are sequences of widget names or
-widget classes, corresponding to hierarchies of widgets embedded within
-other widgets.  For example, if a @code{GtkWindow} contains a @code{GtkVBox}
-which in turn contains a @code{GtkMenuBar}, the absolute class name
-is @code{GtkWindow.GtkVBox.GtkMenuBar}.
+  A GTK widget is specified by its @dfn{widget class} and
+@dfn{widget name}.  The widget class is the type of the widget: for
+example, @code{GtkMenuBar}.  The widget name is the name given to a
+specific widget.  A widget always has a class, but need not have a
+name.
 
-@noindent
-If the widgets are named ``top'', ``box'' and ``menubar'', the absolute
-widget name is @code{top.box.menubar},
+  @dfn{Absolute names} are sequences of widget names or widget
+classes, corresponding to hierarchies of widgets embedded within
+other widgets.  For example, if a @code{GtkWindow} named @code{top}
+contains a @code{GtkVBox} named @code{box}, which in turn contains
+a @code{GtkMenuBar} called @code{menubar}, the absolute class name
+of the menu-bar widget is @code{GtkWindow.GtkVBox.GtkMenuBar}, and
+its absolute widget name is @code{top.box.menubar}.
 
   When assigning a style to a widget, you can use the absolute class
 name or the absolute widget name.
-There are two commands:  @code{widget_class} will assign a style to
-widgets, matching only against the absolute class name.
-The command @code{widget} will match the absolute widget name,
-but if there is no name for a widget in the hierarchy, the class is matched.
-These commands require the absolute name and the style name to be
-within  double quotes.  These commands are written at the top level in a
-@file{~/.gtkrc-2.0} file, like this:
+
+  There are two commands to specify changes for widgets:
+
+@table @asis
+@item @code{widget_class}
+specifies a style for widgets based on the absolute class name.
+
+@item @code{widget}
+specifies a style for widgets based on the absolute class name,
+or just the class.
+@end table
+
+@noindent
+You must soecify the class and the style in double-quotes, and put
+these commands at the top level in a @file{~/.gtkrc-2.0} file, like
+this:
 
 @smallexample
 style "menufont"
@@ -662,18 +682,17 @@
 widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont"
 @end smallexample
 
-
-  Matching of absolute names is done with shell ``glob'' syntax, that is
-@samp{*} matches zero or more characters and @samp{?} matches one character.
-So the following would assign @code{base_style} to all widgets:
+  Matching of absolute names uses shell wildcard syntax: @samp{*}
+matches zero or more characters and @samp{?} matches one character.
+This example assigns @code{base_style} to all widgets:
 
 @smallexample
 widget "*" style "base_style"
 @end smallexample
 
   Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar}
-and the corresponding absolute widget name @code{top.box.menubar},
-the following all assign @code{my_style} to the menu bar:
+and the corresponding absolute widget name @code{top.box.menubar}, all
+these examples specify @code{my_style} for the menu bar:
 
 @smallexample
 widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style"
@@ -685,17 +704,17 @@
 widget "*menu*" style "my_style"
 @end smallexample
 
-@node GTK names in Emacs
-@appendixsubsec GTK names in Emacs
+@node GTK Names in Emacs
+@appendixsubsec GTK Widget Names in Emacs
 @cindex GTK widget names
 @cindex GTK widget classes
 
-  In Emacs the top level widget for a frame is a @code{GtkWindow} that
-contains a @code{GtkVBox}.  The @code{GtkVBox} contains the
-@code{GtkMenuBar} and a @code{GtkFixed} widget.
-The vertical scroll bars, @code{GtkVScrollbar},
-are contained in the @code{GtkFixed} widget.
-The text you write in Emacs is drawn in the @code{GtkFixed} widget.
+  In Emacs, the top level widget for a frame is a @code{GtkWindow}
+that contains a @code{GtkVBox}.  The @code{GtkVBox} contains the
+@code{GtkMenuBar} and a @code{GtkFixed} widget.  The vertical scroll
+bars, @code{GtkVScrollbar}, are contained in the @code{GtkFixed}
+widget.  The text you write in Emacs is drawn in the @code{GtkFixed}
+widget.
 
   Dialogs in Emacs are @code{GtkDialog} widgets.  The file dialog is a
 @code{GtkFileSelection} widget.
@@ -759,14 +778,14 @@
 widget "*emacs-menuitem* style "my_menu_style"
 @end smallexample
 
-  An alternative is to put customization into @file{~/.emacs.d/gtkrc}.
-This file is only read by Emacs, so anything in @file{~/.emacs.d/gtkrc}
-affects Emacs but leaves other applications unaffected.
-For example, the drop down menu in the file dialog can not
-be customized by any absolute widget name, only by an absolute
-class name.  This is so because the widgets in the drop down menu does not
-have names and the menu is not contained in the Emacs GtkWindow.
-To have all menus in Emacs look the same, use this in @file{~/.emacs.d/gtkrc}:
+  If you specify a customization in @file{~/.emacs.d/gtkrc}, then it
+automatically applies only to Emacs, since other programs don't read
+that file.  For example, the drop down menu in the file dialog can not
+be customized by any absolute widget name, only by an absolute class
+name.  This is so because the widgets in the drop down menu do not
+have names and the menu is not contained in the Emacs GtkWindow.  To
+have all menus in Emacs look the same, use this in
+@file{~/.emacs.d/gtkrc}:
 
 @smallexample
 widget_class "*Menu*" style "my_menu_style"
@@ -777,16 +796,16 @@
 @cindex GTK styles
 
   In a GTK style you specify the appearance widgets shall have.  You
-can specify foreground and background color, background pixmap and font.
-The edit widget (where you edit the text) in Emacs is a GTK widget,
-but trying to specify a style for the edit widget will have no effect.
-This is so that Emacs compiled for GTK is compatible with Emacs compiled
-for other X toolkits.  The settings for foreground, background and font
-for the edit widget is taken from the X resources; @pxref{Resources}.
-Here is an example of two style declarations, ``default'' and ``ruler'':
+can specify foreground and background color, background pixmap and
+font.  The edit widget (where you edit the text) in Emacs is a GTK
+widget, but trying to specify a style for the edit widget will have no
+effect.  This is so that Emacs compiled for GTK is compatible with
+Emacs compiled for other X toolkits.  The settings for foreground,
+background and font for the edit widget is taken from the X resources;
+@pxref{Resources}.  Here is an example of two style declarations,
+@samp{default} and @samp{ruler}:
 
 @smallexample
-
 pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
 
 style "default"
@@ -821,12 +840,13 @@
 
 @end smallexample
 
-  The style ``ruler'' inherits from ``default''.  This way you can build
+  The style @samp{ruler} inherits from @samp{default}.  This way you can build
 on existing styles.  The syntax for fonts and colors is described below.
 
-  As this example shows, it is possible to specify several values
-for foreground and background depending on which state the widget has.
-The possible states are
+  As this example shows, it is possible to specify several values for
+foreground and background depending on the widget's @dfn{state}.  The
+possible states are:
+
 @table @code
 @item NORMAL
 This is the default state for widgets.
@@ -846,71 +866,73 @@
 There is no place in Emacs where this setting has any effect.
 @item INSENSITIVE
 This is the state for widgets that are visible, but they can not be
-manipulated like they normally can.  For example, buttons that can't be
-pressed and menu items that can't be selected.
-Text for menu items that are not available can be set to yellow with
-@code{fg[INSENSITIVE] = "yellow"}.
+manipulated in the usual way---for example, buttons that can't be
+pressed, and disabled menu items.  To display disabled menu items in
+yellow, use @code{fg[INSENSITIVE] = "yellow"}.
 @end table
 
-Here are the things that can go in a style declaration:
+  Here are the things that can go in a style declaration:
 
 @table @code
 @item bg[@var{state}] = @var{color}
-This is the background color widgets use.  This background is not used for
-editable text, use @code{base} for that.
+This specifies the background color for the widget.  Note that
+editable text doesn't use @code{bg}; it uses @code{base} instead.
 
 @item base[@var{state}] = @var{color}
-This is the background color for editable text.
-In Emacs, this color is used for the background of the text fields in the
-file dialog.
+This specifies the background color for editable text.  In Emacs, this
+color is used for the background of the text fields in the file
+dialog.
 
 @item bg_pixmap[@var{state}] = "@var{pixmap}"
-You can specify a pixmap to be used instead of the background color.
-@var{pixmap} is a file name.  GTK can use a number of file formats,
-including XPM, XBM, GIF, JPEG and PNG.  If you want a widget to use the same
-pixmap as its parent, use @samp{<parent>}.  If you don't want any
-pixmap use @samp{<none>}.  Using @samp{<none>} can be useful
-if your style inherits a style that does specify a pixmap.
+This specifies an image background (instead of a background color).
+@var{pixmap} should be the image file name.  GTK can use a number of
+image file formats, including XPM, XBM, GIF, JPEG and PNG.  If you
+want a widget to use the same image as its parent, use
+@samp{<parent>}.  If you don't want any image, use @samp{<none>}.
+@samp{<none>} is the way to cancel a background image inherited from a
+parent style.
 
-  GTK looks for the pixmap in directories specified in @code{pixmap_path}.
-It is not possible to refer to a file by its absolute path name.
-@code{pixmap_path} is a colon-separated list of directories within double
-quotes, specified at the top level in a @file{gtkrc} file (i.e. not inside
-a style definition; see example above):
+You can't specify the file by its absolute file name.  GTK looks for
+the pixmap file in directories specified in @code{pixmap_path}.
+@code{pixmap_path} is a colon-separated list of directories within
+double quotes, specified at the top level in a @file{gtkrc} file
+(i.e. not inside a style definition; see example above):
 
 @smallexample
 pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
 @end smallexample
 
 @item fg[@var{state}] = @var{color}
-This is the foreground color widgets use.  This is the color
-of text in menus and buttons.  It is also the color for the arrows in the
-scroll bar.  For editable text, use @code{text}.
+This specifies the foreground color for widgets to use.  It is the
+color of text in menus and buttons, and the color for the arrows in
+the scroll bar.  For editable text, use @code{text}.
 
 @item text[@var{state}] = @var{color}
 This is the color for editable text.  In Emacs, this color is used for the
 text fields in the file dialog.
 
 @item font_name = "@var{font}"
-This is the font a widget shall use.  @var{font} is a Pango font name,
-for example ``Sans Italic 10'', ``Helvetica Bold 12'', ``Courier 14'',
-``Times 18''.  See below for exact syntax.  The names are case insensitive.
+This specifies the the font for text in the widget.  @var{font} is a
+Pango font name, for example @samp{Sans Italic 10}, @samp{Helvetica
+Bold 12}, @samp{Courier 14}, @samp{Times 18}.  See below for exact
+syntax.  The names are case insensitive.
 @end table
 
-  Colors are specified in three ways, a name, a hexadecimal form or
-an RGB triplet.
+  There are three ways to specify a color: by name, in hexadecimal
+form, and with an RGB triplet.
 
 @noindent
 A color name is written within double quotes, for example @code{"red"}.
 
 @noindent
-A hexadecimal form is written within double quotes.  There are four forms,
-@code{#rrrrggggbbbb}, @code{#rrrgggbbb},
-@code{#rrggbb}, or @code{#rgb}.  In each of these r, g and b are hex digits.
+Hexadecimal form is the same as in X:
+@code{#@var{rrrr}@var{gggg}@var{bbbb}}, where all three color specs
+must have the same number of hex digits (1, 2, 3 or 4).
 
 @noindent
-An RGB triplet looks like @code{@{ r, g, b @}}, where r, g and b are either
-integers in the range 0-65535 or floats in the range 0.0-1.0.
+An RGB triplet looks like @code{@{ @var{r}, @var{g}, @var{b} @}},
+where @var{r}, @var{g} and @var{b} are either integers in the range
+0-65535 or floats in the range 0.0-1.0.
 
   Pango font names have the form ``@var{family-list} @var{style-options}
 @var{size}''.
@@ -935,8 +957,9 @@
 
 @noindent
 A `style' corresponds to the fourth part of an X font name.  In X font
-names it is the character ``r'', ``i'' or ``o''; in Pango font names the
-corresponding values are @code{normal}, @code{italic}, or @code{oblique}.
+names it is the character @samp{r}, @samp{i} or @samp{o}; in Pango
+font names the corresponding values are @code{normal}, @code{italic},
+or @code{oblique}.
 
 @noindent
 A `variant' is either @code{normal} or @code{small-caps}.
--- a/src/ChangeLog	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/ChangeLog	Sun Mar 27 17:29:43 2005 +0000
@@ -1,3 +1,39 @@
+2005-03-26  Lennart Borgman  <lennart.borgman.073@student.lu.se>
+
+	* w32term.h (x_output): add focus_state.
+
+	* w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
+	(w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change.
+
+2005-03-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* minibuf.c (Fminibuffer_complete_and_exit, Fself_insert_and_exit):
+	Use Fexit_minibuffer.
+	(Fexit_minibuffer): Mark it as no-return, deactivate the mark.
+
+2005-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* dired.c (Ffile_attributes): Add a missing gcpro.
+
+	* alloc.c (make_number): The arg can be bigger than `int'.
+	* lisp.h (make_number): Make prototype more precise.
+
+	* process.c, dired.c (Vfile_name_coding_system)
+	(Vdefault_file_name_coding_system):
+	* callproc.c (Vdoc_file_name, Vfile_name_coding_system)
+	(Vdefault_file_name_coding_system): Remove unused declarations.
+
+2005-03-24  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* xmenu.c (create_and_show_popup_menu): Just remove menu and return
+	if it failed to pop up (Gnome "show pointer on ctrl" option makes
+	menus fail to pop up).
+
+2005-03-24  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xdisp.c (get_next_display_element): Also use `\ ' & `\-' for latin-9.
+	Just prepend a backslash without replacing the NBSP by an SPC.
+
 2005-03-22  Kim F. Storm  <storm@cua.dk>
 
 	* xfaces.c (lookup_derived_face): Add arg SIGNAL_P.
@@ -17,7 +53,7 @@
 2005-03-22  David Kastrup  <dak@gnu.org>
 
 	* textprop.c (Fnext_char_property_change)
-	(Fprevious_char_property_change): allow marker as limit.
+	(Fprevious_char_property_change): Allow marker as limit.
 	(Fnext_single_char_property_change)
 	(Fprevious_single_char_property_change): Check that limit is a
 	number in strings.
@@ -51,8 +87,7 @@
 
 2005-03-17  Kenichi Handa  <handa@m17n.org>
 
-	* coding.c (syms_of_coding): Docstring of coding-category-list
-	fixed.
+	* coding.c (syms_of_coding): Docstring of coding-category-list fixed.
 
 2005-03-17  Stefan Monnier  <monnier@iro.umontreal.ca>
 
--- a/src/alloc.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/alloc.c	Sun Mar 27 17:29:43 2005 +0000
@@ -1503,7 +1503,7 @@
 #ifndef make_number
 Lisp_Object
 make_number (n)
-     int n;
+     EMACS_INT n;
 {
   Lisp_Object obj;
   obj.s.val = n;
--- a/src/callproc.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/callproc.c	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 /* Synchronous subprocess invocation for GNU Emacs.
-   Copyright (C) 1985,86,87,88,93,94,95,99, 2000,01,02,03,04
-   Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001,
+     2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -130,10 +130,6 @@
 /* If synch_process_death is zero,
    this is exit code of synchronous subprocess.  */
 int synch_process_retcode;
-
-extern Lisp_Object Vdoc_file_name;
-
-extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
 
 /* Clean up when exiting Fcall_process.
    On MSDOS, delete the temporary file on any kind of termination.
--- a/src/coding.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/coding.c	Sun Mar 27 17:29:43 2005 +0000
@@ -7821,8 +7821,7 @@
 one algorithm agrees with a byte sequence of source text, the coding
 system bound to the corresponding coding-category is selected.
 
-When you modify this variable, `update-coding-systems-internal' must
-be called.  */);
+Don't modify this variable directly, but use `set-coding-category'.  */);
   {
     int i;
 
--- a/src/dired.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/dired.c	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 /* Lisp functions for making directory listings.
-   Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004
+   Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004, 2005
      Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -114,7 +114,6 @@
 
 extern int completion_ignore_case;
 extern Lisp_Object Vcompletion_regexp_list;
-extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
 
 Lisp_Object Vcompletion_ignored_extensions;
 Lisp_Object Qcompletion_ignore_case;
@@ -907,6 +906,7 @@
 #endif
   char modes[10];
   Lisp_Object handler;
+  struct gcpro gcpro1;
 
   filename = Fexpand_file_name (filename, Qnil);
 
@@ -922,7 +922,9 @@
 	return call3 (handler, Qfile_attributes, filename, id_format);
     }
 
+  GCPRO1 (filename);
   encoded = ENCODE_FILE (filename);
+  UNGCPRO;
 
   if (lstat (SDATA (encoded), &s) < 0)
     return Qnil;
--- a/src/lisp.h	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/lisp.h	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 /* Fundamental definitions for GNU Emacs Lisp interpreter.
-   Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000,01,02,03,2004
-     Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
+   2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -451,7 +451,7 @@
 #define make_number(N) \
   (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; }))
 #else
-extern Lisp_Object make_number ();
+extern Lisp_Object make_number P_ ((EMACS_INT));
 #endif
 
 #define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type)
--- a/src/minibuf.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/minibuf.c	Sun Mar 27 17:29:43 2005 +0000
@@ -1,5 +1,5 @@
 /* Minibuffer input and completion.
-   Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04
+   Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04,05
              Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -2085,6 +2085,8 @@
   return make_number (1);
 }
 
+EXFUN (Fexit_minibuffer, 0) NO_RETURN;
+
 DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
        Sminibuffer_complete_and_exit, 0, 0, "",
        doc: /* If the minibuffer contents is a valid completion then exit.
@@ -2147,7 +2149,7 @@
       return Qnil;
     }
  exit:
-  return Fthrow (Qexit, Qnil);
+  return Fexit_minibuffer ();
   /* NOTREACHED */
 }
 
@@ -2554,14 +2556,21 @@
   else
     bitch_at_user ();
 
-  return Fthrow (Qexit, Qnil);
+  return Fexit_minibuffer ();
 }
 
 DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
        doc: /* Terminate this minibuffer argument.  */)
      ()
 {
-  return Fthrow (Qexit, Qnil);
+  /* If the command that uses this has made modifications in the minibuffer,
+     we don't want them to cause deactivation of the mark in the original
+     buffer.
+     A better solution would be to make deactivate-mark buffer-local
+     (or to turn it into a list of buffers, ...), but in the mean time,
+     this should do the trick in most cases.  */
+  Vdeactivate_mark = Qnil;
+  Fthrow (Qexit, Qnil);
 }
 
 DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
--- a/src/process.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/process.c	Sun Mar 27 17:29:43 2005 +0000
@@ -1,6 +1,6 @@
 /* Asynchronous subprocess control for GNU Emacs.
-   Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999,
-      2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1998, 1999,
+      2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -376,8 +376,6 @@
 /* Maximum number of bytes to send to a pty without an eof.  */
 static int pty_max_bytes;
 
-extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
-
 #ifdef HAVE_PTYS
 #ifdef HAVE_PTY_H
 #include <pty.h>
--- a/src/w32term.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/w32term.c	Sun Mar 27 17:29:43 2005 +0000
@@ -255,6 +255,10 @@
 static void frame_unhighlight P_ ((struct frame *));
 static void x_new_focus_frame P_ ((struct w32_display_info *,
 				   struct frame *));
+static void x_focus_changed P_ ((int, int, struct w32_display_info *,
+				  struct frame *, struct input_event *));
+static void w32_detect_focus_change P_ ((struct w32_display_info *,
+                                       W32Msg *, struct input_event *));
 static void w32_frame_rehighlight P_ ((struct frame *));
 static void x_frame_rehighlight P_ ((struct w32_display_info *));
 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
@@ -2816,6 +2820,81 @@
   x_frame_rehighlight (dpyinfo);
 }
 
+
+/* Handle FocusIn and FocusOut state changes for FRAME.
+   If FRAME has focus and there exists more than one frame, puts
+   a FOCUS_IN_EVENT into *BUFP.  */
+
+static void
+x_focus_changed (type, state, dpyinfo, frame, bufp)
+     int type;
+     int state;
+     struct w32_display_info *dpyinfo;
+     struct frame *frame;
+     struct input_event *bufp;
+{
+  if (type == WM_SETFOCUS)
+    {
+      if (dpyinfo->w32_focus_event_frame != frame)
+        {
+          x_new_focus_frame (dpyinfo, frame);
+          dpyinfo->w32_focus_event_frame = frame;
+
+          /* Don't stop displaying the initial startup message
+             for a switch-frame event we don't need.  */
+          if (GC_NILP (Vterminal_frame)
+              && GC_CONSP (Vframe_list)
+              && !GC_NILP (XCDR (Vframe_list)))
+            {
+              bufp->kind = FOCUS_IN_EVENT;
+              XSETFRAME (bufp->frame_or_window, frame);
+            }
+        }
+
+      frame->output_data.x->focus_state |= state;
+
+      /* TODO: IME focus?  */
+    }
+  else if (type == WM_KILLFOCUS)
+    {
+      frame->output_data.x->focus_state &= ~state;
+
+      if (dpyinfo->w32_focus_event_frame == frame)
+        {
+          dpyinfo->w32_focus_event_frame = 0;
+          x_new_focus_frame (dpyinfo, 0);
+        }
+
+      /* TODO: IME focus?  */
+    }
+}
+
+
+/* The focus may have changed.  Figure out if it is a real focus change,
+   by checking both FocusIn/Out and Enter/LeaveNotify events.
+
+   Returns FOCUS_IN_EVENT event in *BUFP. */
+
+static void
+w32_detect_focus_change (dpyinfo, event, bufp)
+     struct w32_display_info *dpyinfo;
+     W32Msg *event;
+     struct input_event *bufp;
+{
+  struct frame *frame;
+
+  frame = x_any_window_to_frame (dpyinfo, event->msg.hwnd);
+  if (! frame)
+    return;
+
+  /* On w32, this is only called from focus events, so no switch needed.  */
+  x_focus_changed (event->msg.message,
+		   (event->msg.message == WM_KILLFOCUS ?
+		    FOCUS_IMPLICIT : FOCUS_EXPLICIT),
+		   dpyinfo, frame, bufp);
+}
+
+
 /* Handle an event saying the mouse has moved out of an Emacs frame.  */
 
 void
@@ -4660,27 +4739,13 @@
 	  break;
 
 	case WM_SETFOCUS:
-	  /* TODO: Port this change:
-	     2002-06-28  Jan D.  <jan.h.d@swipnet.se>
-	     * xterm.h (struct x_output): Add focus_state.
-	     * xterm.c (x_focus_changed): New function.
-	     (x_detect_focus_change): New function.
-	     (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut
-	     EnterNotify and LeaveNotify to track X focus changes.
-	  */
-	  f = x_any_window_to_frame (dpyinfo, msg.msg.hwnd);
-
-          dpyinfo->w32_focus_event_frame = f;
-
-          if (f)
-            x_new_focus_frame (dpyinfo, f);
+	  w32_detect_focus_change (dpyinfo, &msg, &inev);
 
 	  dpyinfo->grabbed = 0;
 	  check_visibility = 1;
 	  break;
 
 	case WM_KILLFOCUS:
-          /* TODO: some of this belongs in MOUSE_LEAVE */
 	  f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd);
 
           if (f)
--- a/src/w32term.h	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/w32term.h	Sun Mar 27 17:29:43 2005 +0000
@@ -276,8 +276,25 @@
 {
   PIX_TYPE background_pixel;
   PIX_TYPE foreground_pixel;
+
+  /* Keep track of focus.  May be EXPLICIT if we received a FocusIn for this
+     frame, or IMPLICIT if we received an EnterNotify.
+     FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+  int focus_state;
+
 };
 
+enum
+{
+  /* Values for focus_state, used as bit mask.
+     EXPLICIT means we received a FocusIn for the frame and know it has
+     the focus.  IMPLICIT means we recevied an EnterNotify and the frame
+     may have the focus if no window manager is running.
+     FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+  FOCUS_NONE     = 0,
+  FOCUS_IMPLICIT = 1,
+  FOCUS_EXPLICIT = 2
+};
 
 struct w32_output
 {
--- a/src/xdisp.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/xdisp.c	Sun Mar 27 17:29:43 2005 +0000
@@ -5071,7 +5071,8 @@
 			   && it->len == 1)
 			  || !CHAR_PRINTABLE_P (it->c)
 			  || (!NILP (Vshow_nonbreak_escape)
-			      && (it->c == 0x8ad || it->c == 0x8a0)))
+			      && (it->c == 0x8ad || it->c == 0x8a0
+				  || it->c == 0xf2d || it->c == 0xf20)))
 		       : (it->c >= 127
 			  && (!unibyte_display_via_language_environment
 			      || it->c == unibyte_char_to_multibyte (it->c)))))
@@ -5138,10 +5139,11 @@
 					 it->face_id);
 		}
 
-	      if (it->c == 0x8a0 || it->c == 0x8ad)
+	      if (it->c == 0x8a0 || it->c == 0x8ad
+		  || it->c == 0xf20 || it->c == 0xf2d)
 		{
 		  XSETINT (it->ctl_chars[0], escape_glyph);
-		  g = it->c == 0x8ad ? '-' : ' ';
+		  g = it->c;
 		  XSETINT (it->ctl_chars[1], g);
 		  ctl_len = 2;
 		  goto display_control;
--- a/src/xmenu.c	Wed Mar 23 13:35:08 2005 +0000
+++ b/src/xmenu.c	Sun Mar 27 17:29:43 2005 +0000
@@ -2490,11 +2490,14 @@
 
   record_unwind_protect (pop_down_menu, make_save_value (menu, 0));
 
-  /* Set this to one.  popup_widget_loop increases it by one, so it becomes
-     two.  show_help_echo uses this to detect popup menus.  */
-  popup_activated_flag = 1;
-  /* Process events that apply to the menu.  */
-  popup_widget_loop (1, menu);
+  if (GTK_WIDGET_MAPPED (menu))
+    {
+      /* Set this to one.  popup_widget_loop increases it by one, so it becomes
+         two.  show_help_echo uses this to detect popup menus.  */
+      popup_activated_flag = 1;
+      /* Process events that apply to the menu.  */
+      popup_widget_loop (1, menu);
+    }
 
   unbind_to (specpdl_count, Qnil);
 
--- a/vms/make-mms-derivative.el	Wed Mar 23 13:35:08 2005 +0000
+++ b/vms/make-mms-derivative.el	Sun Mar 27 17:29:43 2005 +0000
@@ -24,29 +24,48 @@
 
 ;;; Commentary:
 
-;; Under OpenVMS the standard make-like program is called MMS, which
-;; looks for an input file in the default directory named DESCRIP.MMS
-;; and runs the DCL command rules therein.  As of 2005, the build
-;; process requires a hand translation of the Makefile.in and related
-;; Emacs-specific methodology to DCL and TPU commands, so to alleviate
-;; this pain, we provide `make-mms-derivative', which given a source
-;; FILENAME (under `make-mms-derivative-root-dir'), inserts the file
-;; contents in a new buffer and loads FILENAME-2mms.  The elisp in the
-;; -2mms file can (do whatever -- it's emacs -- and) arrange to write
-;; out the modified buffer after FILENAME-2mms loading by using:
+;; Under VMS the standard make-like program is called MMS, which looks
+;; for an input file in the default directory named DESCRIP.MMS and runs
+;; the DCL command rules therein.  As of 2005, the build process
+;; requires a hand translation of the Makefile.in and Emacs-specific
+;; methodology to DCL and TPU commands, so to alleviate this pain, we
+;; provide `make-mms-derivative', which given a source FILENAME, inserts
+;; the file contents in a new buffer and loads FILENAME-2mms.  The lisp
+;; code in the -2mms file can (do whatever -- it's emacs -- and), as
+;; long as it arranges to write out the modified buffer after loading by
+;; specifying, on a line of its own, the directive:
+;;
+;;  :output RELATIVE-OUTPUT
+;;
+;; where RELATIVE-OUTPUT is a filename (a string) relative to FILENAME's
+;; directory, typically something simple like "descrip.mms_in_in".  Only
+;; the first :output directive is recognized.
 ;;
-;;  (make-mms-derivative-data 'write-under-root RELATIVE-FILENAME)
+;; The only other special directive at this time has the form:
+;;
+;;  :gigo NAME
+;;  ;;blah blah blah
+;;  ;;(more text here)
 ;;
-;; where RELATIVE-FILENAME is something like "src/descrip.mms_in_in".
-;; Over the long run, the convenience procedures provided (see source)
+;; NAME is anything distinguishable w/ `eq' (number, symbol or keyword).
+;; This associates NAME with the block of text starting immediately below
+;; the :gigo directive and ending at the first line that does not begin
+;; with two semicolons (which are stripped from each line in the block).
+;; To insert this block of text, pass NAME to `make-mms-derivative-gigo'.
+;;
+;; Directives are scanned before normal evaluation, so their placement
+;; in the file is not important.  During loading, plain strings are
+;; displayed in the echo area, prefixed with the current line number.
+;;
+;; Over the long run, the convenience functions provided (see source)
 ;; will be augmented by factoring maximally the -2mms files, squeezing
 ;; as much algorithm out of those nasty heuristics as possible.  What
 ;; makes them nasty is not that they rely on the conventions of the
 ;; Emacs makefiles; that's no big deal.  What makes them nasty is that
 ;; they rely on the conventions of separately maintained tools (namely
-;; Autoconf 1.11 under OpenVMS and the rest of GNU), and the separation
-;; of conventions is how people drift apart, dragging their software
-;; behind mercilessly.
+;; Autoconf for VMS and GNU Autoconf), and the separation of conventions
+;; is how people drift apart, dragging their software behind
+;; mercilessly.
 ;;
 ;; In general, codified thought w/o self-synchronization is doomed.
 ;; That a generation would eat its young (most discriminatingly, even)
@@ -54,79 +73,66 @@
 
 ;;; Code:
 
-(defvar make-mms-derivative-root-dir "AXPA:[TTN.EMACS.EMACS212_3]"
-  "Source tree root directory.")
-
 (defvar make-mms-derivative-data nil
-  "Alist of data specific to `make-mms-derivative'.")
+  "Plist of data specific to `make-mms-derivative'.")
 
 (defun make-mms-derivative-data (key &optional newval)
-  (if newval
-      (setq make-mms-derivative-data
-            (cons (cons key newval) make-mms-derivative-data))
-    (cdr (assq key make-mms-derivative-data))))
+  (if newval (setq make-mms-derivative-data
+		   (plist-put make-mms-derivative-data key newval))
+    (plist-get make-mms-derivative-data key)))
 
-(defmacro make-mms-derivative-progn (msg &rest body)
-  `(progn
-     (message "(%s) %s" (point) ,msg)
-     ,@body))
-
-(put 'make-mms-derivative-progn 'lisp-indent-function 1)
+(defun make-mms-derivative-gigo (name)
+  "Insert the text associated with :gigo NAME."
+  (insert (cdr (assq name (make-mms-derivative-data :gigo)))))
 
-(defun make-mms-derivative-load-edits-file (name)
-  (make-mms-derivative-data 'edits-filename name)
-  (let (raw-data
-	(cur (current-buffer))
-	(wbuf (get-buffer-create "*make-mms-derivative-load-edits-file work")))
-    (set-buffer wbuf)
-    (insert-file-contents name)
-    (keep-lines "^;;;[0-9]+;;")
-    (goto-char (point-max))
-    (while (re-search-backward "^;;;\\([0-9]+\\);;\\(.*\\)$" (point-min) t)
-      (let* ((i (string-to-number (match-string 1)))
-	     (line (match-string 2))
-	     (look (assq i raw-data)))
-	(if look
-	    (setcdr look (cons line (cdr look)))
-	  (setq raw-data (cons (list i line) raw-data)))))
-    (kill-buffer wbuf)
-    (set-buffer cur)
-    (mapcar (lambda (ent)
-              (setcdr ent (mapconcat (lambda (line)
-                                       (concat line "\n"))
-                                     (cdr ent)
-                                     "")))
-	    raw-data)
-    (make-mms-derivative-data 'raw-data raw-data))
-  (load name))
-
-(defun make-mms-derivative-insert-raw-data (n)
-  (insert (cdr (assq n (make-mms-derivative-data 'raw-data)))))
-
-(defun make-mms-derivative (file)
+(defun make-mms-derivative (filename)
+  "Take FILENAME contents, load FILENAME-2mms, and write out the result.
+The output file is specified by the :output directive in FILENAME-2mms.
+See commentary of make-mms-derivative.el for full documentation."
   (interactive "fSource File: ")
-  (let ((root (expand-file-name make-mms-derivative-root-dir))
-        (file (expand-file-name file)))
-    (when (file-name-absolute-p (file-relative-name file root))
-      (error "Not under root (%s)" root))
-    (let ((edits-filename (concat file "-2mms")))
-      (unless (file-exists-p edits-filename)
-        (error "Could not find %s" edits-filename))
-      (let ((buf (get-buffer-create
-		  (format "*mms-derivative: %s"
-			  (file-relative-name file root)))))
-        (message "Munging ...")
-        (switch-to-buffer buf)
-        (erase-buffer)
-        (make-variable-buffer-local 'make-mms-derivative-data)
-        (insert-file file)
-        (make-mms-derivative-load-edits-file edits-filename)
-        (let ((out (make-mms-derivative-data 'write-under-root)))
-          (when out
-            (write-file
-             (expand-file-name rel-filename make-mms-derivative-root-dir)))
-          (kill-buffer buf)
-          (unless out (message "Munging ... done")))))))
+  (let* ((todo (let ((fn (concat filename "-2mms")))
+		 (unless (file-exists-p fn)
+		   (error "Could not find %s" fn))
+		 (set-buffer (get-buffer-create " *make-mms-derivative todo*"))
+		 (insert-file-contents fn)
+		 (current-buffer)))
+	 (deriv (get-buffer-create (format "*mms-derivative: %s"
+					   (file-relative-name filename))))
+	 output gigo form)
+    (set-buffer todo)
+    (re-search-forward "^:output")
+    (setq output (expand-file-name (read (current-buffer))
+				   (file-name-directory filename)))
+    (goto-char (point-min))
+    (while (re-search-forward "^:gigo" (point-max) t)
+      (let ((name (read (current-buffer)))
+	    (p (progn (forward-line 1) (point))))
+	(while (looking-at ";;")
+	  (delete-char 2)
+	  (forward-line 1))
+	(setq gigo (cons (cons name (buffer-substring p (point))) gigo))
+	(delete-region p (point))))
+    (message "Munging...")
+    (switch-to-buffer deriv)
+    (erase-buffer)
+    (insert-file-contents filename)
+    (set (make-local-variable 'make-mms-derivative-data)
+	 (list :gigo gigo))
+    (set-buffer todo)
+    (goto-char (point-min))
+    (while (condition-case nil
+	       (setq form (read (current-buffer)))
+	     (end-of-file nil))
+      (if (stringp form)
+	  (message "%d: %s" (count-lines (point-min) (point)) form)
+	(save-excursion
+	  (set-buffer deriv)
+	  (eval form))))
+    (set-buffer deriv)
+    (message "Munging...done")
+    (write-file output)
+    (kill-buffer todo)
+    (kill-buffer deriv)))
 
 (provide 'make-mms-derivative)