changeset 90133:4da4a09e8b1b

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-31 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 206-222) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 45-52) - Update from CVS - Update from CVS: texi Makefile.in CVS keyw cruft - Update from CVS: ChangeLog tweaks
author Miles Bader <miles@gnu.org>
date Thu, 31 Mar 2005 09:58:14 +0000
parents 4080fe8b4f0f (current diff) 6dffc0a6ed26 (diff)
children a879affc1f0e
files admin/FOR-RELEASE etc/ChangeLog etc/NEWS etc/TUTORIAL etc/TUTORIAL.bg etc/TUTORIAL.cn etc/TUTORIAL.cs etc/TUTORIAL.de etc/TUTORIAL.es etc/TUTORIAL.fr etc/TUTORIAL.it etc/TUTORIAL.ja etc/TUTORIAL.ko etc/TUTORIAL.nl etc/TUTORIAL.pl etc/TUTORIAL.ro etc/TUTORIAL.ru etc/TUTORIAL.sk etc/TUTORIAL.sl etc/TUTORIAL.sv etc/TUTORIAL.th etc/TUTORIAL.zh leim/ChangeLog leim/quail/latin-ltx.el lisp/ChangeLog lisp/autoinsert.el lisp/autorevert.el lisp/bookmark.el lisp/calc/calc-embed.el lisp/calc/calc-forms.el lisp/calc/calc-help.el lisp/calc/calc-lang.el lisp/calc/calc-sel.el lisp/calc/calc.el lisp/calc/calcalg2.el lisp/calendar/appt.el lisp/calendar/cal-china.el lisp/calendar/cal-coptic.el lisp/calendar/cal-french.el lisp/calendar/cal-hebrew.el lisp/calendar/cal-islam.el lisp/calendar/cal-iso.el lisp/calendar/cal-julian.el lisp/calendar/cal-mayan.el lisp/calendar/cal-menu.el lisp/calendar/cal-move.el lisp/calendar/cal-persia.el lisp/calendar/cal-x.el lisp/calendar/calendar.el lisp/calendar/holidays.el lisp/calendar/lunar.el lisp/calendar/solar.el lisp/comint.el lisp/complete.el lisp/dired-aux.el lisp/dired.el lisp/ediff-hook.el lisp/emacs-lisp/advice.el lisp/emacs-lisp/cl-macs.el lisp/emacs-lisp/debug.el lisp/emacs-lisp/lisp-mode.el lisp/emacs-lisp/rx.el lisp/emulation/cua-base.el lisp/emulation/vi.el lisp/emulation/vip.el lisp/eshell/esh-io.el lisp/eshell/esh-var.el lisp/files.el lisp/filesets.el lisp/follow.el lisp/font-lock.el lisp/generic-x.el lisp/generic.el lisp/gnus/ChangeLog lisp/gnus/gnus-group.el lisp/gnus/gnus-srvr.el lisp/gnus/message.el lisp/gnus/mm-util.el lisp/gnus/rfc2047.el lisp/hi-lock.el lisp/hilit-chg.el lisp/info.el lisp/international/iso-acc.el lisp/international/mule-cmds.el lisp/international/mule.el lisp/kmacro.el lisp/language/thai-util.el lisp/language/thai-word.el lisp/language/thai.el lisp/mail/mailalias.el lisp/mail/supercite.el lisp/menu-bar.el lisp/mh-e/ChangeLog lisp/mh-e/mh-e.el lisp/mh-e/mh-identity.el lisp/mh-e/mh-mime.el lisp/midnight.el lisp/progmodes/compile.el lisp/progmodes/cperl-mode.el lisp/progmodes/ebnf-abn.el lisp/progmodes/ebnf-bnf.el lisp/progmodes/ebnf-dtd.el lisp/progmodes/ebnf-ebx.el lisp/progmodes/ebnf-iso.el lisp/progmodes/ebnf-yac.el lisp/progmodes/ebnf2ps.el lisp/progmodes/f90.el lisp/progmodes/fortran.el lisp/progmodes/gdb-ui.el lisp/progmodes/gud.el lisp/progmodes/idlw-shell.el lisp/progmodes/idlwave.el lisp/progmodes/python.el lisp/progmodes/sh-script.el lisp/progmodes/vhdl-mode.el lisp/progmodes/which-func.el lisp/progmodes/xscheme.el lisp/ps-print.el lisp/register.el lisp/reveal.el lisp/simple.el lisp/term.el lisp/term/bobcat.el lisp/term/xterm.el lisp/textmodes/fill.el lisp/textmodes/ispell.el lisp/textmodes/org.el lisp/textmodes/refbib.el lisp/textmodes/refer.el lisp/textmodes/reftex-cite.el lisp/textmodes/reftex-index.el lisp/textmodes/reftex-parse.el lisp/textmodes/reftex-ref.el lisp/textmodes/reftex-vars.el lisp/textmodes/reftex.el lisp/textmodes/sgml-mode.el lisp/textmodes/tex-mode.el lisp/thumbs.el lisp/tooltip.el lisp/vc-cvs.el lisp/vc.el lisp/window.el lispref/ChangeLog lispref/Makefile.in lispref/anti.texi lispref/calendar.texi lispref/display.texi lispref/elisp.texi lispref/keymaps.texi lispref/markers.texi lispref/minibuf.texi lispref/modes.texi lispref/os.texi lispref/positions.texi lispref/text.texi lispref/tips.texi lispref/vol1.texi lispref/vol2.texi man/ChangeLog man/basic.texi man/building.texi man/calc.texi man/calendar.texi man/cl.texi man/commands.texi man/custom.texi man/dired-x.texi man/dired.texi man/display.texi man/emacs-mime.texi man/emacs.texi man/files.texi man/frames.texi man/gnus-faq.texi man/gnus.texi man/help.texi man/idlwave.texi man/message.texi man/misc.texi man/mule.texi man/programs.texi man/reftex.texi man/text.texi man/xresources.texi src/ChangeLog src/alloc.c src/callproc.c src/coding.c src/dired.c src/editfns.c src/fileio.c src/lisp.h src/minibuf.c src/process.c src/w32term.c src/w32term.h src/xdisp.c src/xmenu.c
diffstat 210 files changed, 10731 insertions(+), 5842 deletions(-) [+]
line wrap: on
line diff
--- a/admin/FOR-RELEASE	Tue Mar 29 00:48:14 2005 +0000
+++ b/admin/FOR-RELEASE	Thu Mar 31 09:58:14 2005 +0000
@@ -1,5 +1,10 @@
 Tasks needed before the next release.
 
+* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE
+
+`undo-ask-before-discard', currently set to t for debugging purposes
+has to be set to nil: when t, it can leak memory and cause other problems.
+
 * NEW FEATURES
 
 ** Face remapping.
--- a/etc/ChangeLog	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,16 @@
+2005-03-30  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* TUTORIAL: Add title line.
+	* TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de,
+	* TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja,
+	* TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR,
+	* TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl
+	* TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise.
+
+2005-03-29  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-refcard.tex, gnus-logo.eps: New files.
+
 2005-03-23  David Ponce  <david@dponce.com>
 
 	* NEWS: Mention recentf-keep.
--- a/etc/NEWS	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/NEWS	Thu Mar 31 09:58:14 2005 +0000
@@ -182,6 +182,26 @@
 
 * Changes in Emacs 22.1
 
+** Improved Thai support.  A new minor mode `thai-word-mode' (which is
+automatically activated if you select Thai as a language
+environment) changes key bindings of most word-oriented commands to
+versions which recognize Thai words.  Affected commands are
+    M-f     (forward-word)
+    M-b     (backward-word)
+    M-d     (kill-word)
+    M-DEL   (backward-kill-word)
+    M-t     (transpose-words)
+    M-q     (fill-paragraph)
+
+** iso-acc.el is now obsolete.  Use one of the latin input methods instead.
+
+---
+** 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,
@@ -221,6 +241,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.
@@ -297,6 +318,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.
 
@@ -313,6 +335,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.
 
 +++
@@ -320,7 +343,10 @@
 for matching the beginning and end of a symbol.  A symbol is a
 non-empty sequence of either word or symbol constituent characters, as
 specified by the syntax table.
-
+---
+*** rx.el has new corresponding `symbol-end' and `symbol-start' elements.
+
++++
 ** Passing resources on the command line now works on MS Windows.
 You can use --xrm to pass resource settings to Emacs, overriding any
 existing values.  For example:
@@ -363,6 +389,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
@@ -390,9 +417,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.
 
 +++
@@ -441,6 +470,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
@@ -480,6 +510,7 @@
 compilation processes without affecting the environment that all
 subprocesses inherit.
 
++++
 ** Grep has been decoupled from compilation mode setup.
 
 ---
@@ -540,6 +571,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
@@ -547,10 +579,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.
 
@@ -570,6 +604,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.
@@ -578,6 +613,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.
@@ -595,6 +631,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.
@@ -608,6 +645,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 &
@@ -646,18 +684,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
@@ -681,7 +722,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
@@ -753,6 +794,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.
 
@@ -764,6 +806,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
@@ -776,6 +819,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'.
@@ -784,6 +828,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'.
 
@@ -820,6 +865,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
@@ -883,6 +929,7 @@
 the current Info node name into the kill ring.  With a zero prefix
 arg, puts the node name inside the `info' function call.
 
+---
 *** New face `info-xref-visited' distinguishes visited nodes from unvisited
 and a new option `Info-fontify-visited-nodes' to control this.
 
@@ -894,6 +941,7 @@
 If you prefer the old behavior, you can set the new user option
 `Info-hide-note-references' to nil.
 
+---
 *** Images in Info pages are supported.
 Info pages show embedded images, in Emacs frames with image support.
 Info documentation that includes images, processed with makeinfo
@@ -966,6 +1014,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
@@ -979,6 +1028,7 @@
 +++
 ** Under X, mouse-wheel-mode is turned on by default.
 
++++
 ** The X resource useXIM can be used to turn off use of XIM, which may
 speed up Emacs with slow networking to the X server.
 
@@ -988,6 +1038,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'.
 
@@ -1002,6 +1053,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
@@ -1034,6 +1086,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
@@ -1041,6 +1094,7 @@
    instead.  The updated skeleton-insert docstring explains these new
    features along with other details of skeleton construction.
 
+---
 ** MH-E changes.
 
 Upgraded to MH-E version 7.82. There have been major changes since
@@ -1086,6 +1140,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.
 
@@ -1208,6 +1263,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
@@ -1272,6 +1328,7 @@
 default, all trivial operations involving whole lines are performed
 automatically.  The game uses faces for better visual feedback.
 
+---
 ** The new variable `x-select-request-type' controls how Emacs
 requests X selection.  The default value is nil, which means that
 Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
@@ -1303,9 +1360,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.
 
 +++
@@ -1316,6 +1375,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
@@ -1337,10 +1397,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.
@@ -1371,6 +1433,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.
@@ -1790,6 +1853,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'.
 
@@ -1799,6 +1863,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'.
@@ -1819,6 +1884,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
@@ -2268,17 +2334,23 @@
 ---
 ** Perl mode has a new variable `perl-indent-continued-arguments'.
 
+---
+** Fortran mode does more font-locking by default. Use level 3
+highlighting for the old default.
+
 +++
 ** Fortran mode has a new variable `fortran-directive-re'.
 Adapt this to match the format of any compiler directives you use.
 Lines that match are never indented, and are given distinctive font-locking.
 
 +++
-** F90 mode has new navigation commands `f90-end-of-block',
-`f90-beginning-of-block', `f90-next-block', `f90-previous-block'.
-
----
-** F90 mode now has support for hs-minor-mode (hideshow).
+** F90 mode and Fortran mode have new navigation commands
+`f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
+`f90-previous-block', `fortran-end-of-block',
+`fortran-beginning-of-block'.
+
+---
+** F90 mode and Fortran mode have support for hs-minor-mode (hideshow).
 It cannot deal with every code format, but ought to handle a sizeable
 majority.
 
@@ -2432,17 +2504,31 @@
 "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
 temporary overlay showing in the course of an isearch operation.
 
++++
 ** New command `recode-region' decodes the region again by a specified
 coding system.
 
 
 * New modes and packages in Emacs 22.1
 
++++
+** The new package longlines.el provides a minor mode for editing text
+files composed of long lines, based on the `use-hard-newlines'
+mechanism.  The long lines are broken up by inserting soft newlines,
+which are automatically removed when saving the file to disk or
+copying into the kill ring, clipboard, etc.  By default, Longlines
+mode inserts soft newlines automatically during editing, a behavior
+referred to as "soft word wrap" in other text editors.  This is
+similar to Refill mode, but more reliable.  To turn the word wrap
+feature off, set `longlines-auto-wrap' to nil.
+
++++
 ** 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
@@ -2450,12 +2536,12 @@
 .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.
 
++++
 ** The new package flymake.el does on-the-fly syntax checking of program
 source files.  See the Flymake's Info manual for more details.
 
@@ -2463,12 +2549,15 @@
 of hierarchical data as an outline.  For example, the tree-widget is
 well suited to display a hierarchy of directories and files.
 
++++
 ** The wdired.el package allows you to use normal editing commands on Dired
 buffers to change filenames, permissions, etc...
 
++++
 ** 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.
@@ -2477,6 +2566,7 @@
 ** The new global minor mode `size-indication-mode' (off by default)
 shows the size of accessible part of the buffer on the mode line.
 
+---
 ** GDB-Script-mode is used for files like .gdbinit.
 
 ---
@@ -2532,6 +2622,7 @@
 must remove older versions of cua.el or cua-mode.el as well as the
 loading and customization of those packages from the .emacs file.
 
++++
 ** The new keypad setup package provides several common bindings for
 the numeric keypad which is available on most keyboards.  The numeric
 keypad typically has the digits 0 to 9, a decimal point, keys marked
@@ -2659,6 +2750,7 @@
 ** The new package ibuffer provides a powerful, completely
 customizable replacement for buff-menu.el.
 
++++
 ** The new package table.el implements editable, WYSIWYG, embedded
 `text tables' in Emacs buffers.  It simulates the effect of putting
 these tables in a special major mode.  The package emulates WYSIWYG
@@ -2681,16 +2773,20 @@
 ---
 ** cplus-md.el has been removed to avoid problems with Custom.
 
++++
 ** 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
 configuration files.
 
 * Incompatible Lisp Changes in Emacs 22.1
 
++++
 ** The new interactive-specification `G' reads a file name
 much like `F', but if the input is a directory name (even defaulted),
 it returns just the directory name.
@@ -2709,6 +2805,17 @@
 * Lisp Changes in Emacs 22.1
 
 +++
+** The new function `filter-buffer-substring' extracts a buffer
+substring, passes it through a set of filter functions, and returns
+the filtered substring.  It is used instead of `buffer-substring' or
+`delete-and-extract-region' when copying text into a user-accessible
+data structure, like the kill-ring, X clipboard, or a register.  The
+list of filter function is specified by the new variable
+`buffer-substring-filters'.  For example, Longlines mode uses
+`buffer-substring-filters' to remove soft newlines from the copied
+text.
+
++++
 ** An element of buffer-undo-list can now have the form (apply FUNNAME
 . ARGS), where FUNNAME is a symbol other than t or nil.  That stands
 for a high-level change that should be undone by evaluating (apply
@@ -2734,6 +2841,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.
@@ -2814,6 +2922,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.
 
@@ -2830,6 +2939,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.
@@ -2838,6 +2948,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
@@ -3099,6 +3210,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
@@ -3125,6 +3237,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
@@ -3224,6 +3337,7 @@
 changes to mode lines, header lines, or display properties may require
 forcing an explicit window update.
 
+---
 ** New function `redirect-debugging-output' can be used to redirect
 debugging output on the stderr file handle to a file.
 
@@ -3667,7 +3781,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.
@@ -3919,6 +4033,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).
@@ -3932,6 +4047,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
@@ -4422,6 +4538,7 @@
 display a prompt but don't use the minibuffer, now display the prompt
 using the text properties (esp. the face) of the prompt string.
 
+---
 ** New function x-send-client-message sends a client message when
 running under X.
 
@@ -4431,6 +4548,7 @@
 
 ** New packages:
 
++++
 *** The new package gdb-ui.el provides an enhanced graphical interface to
 GDB. You can interact with GDB through the GUD buffer in the usual way, but
 there are also further buffers which control the execution and describe the
@@ -4447,9 +4565,11 @@
 binary data structures, such as network packets, to and from Lisp
 data structures.
 
+---
 *** 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/etc/TUTORIAL	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Emacs Tutorial
 You are looking at the Emacs tutorial.  See end for copying conditions.
 Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation.
 
--- a/etc/TUTORIAL.bg	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.bg	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+âúâåäåíèåòî íà Åìàêñ
 Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ.  Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà.
 Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation.
 
--- a/etc/TUTORIAL.cn	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.cn	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Emacs ¿ìËÙÖ¸ÄÏ
 ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£
 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
 
--- a/etc/TUTORIAL.cs	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.cs	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+tutoriál k Emacsu
 Copyright (c) 1985 Free Software Foundation, Inc;  podmínky viz na konci.
 Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>.
 
--- a/etc/TUTORIAL.de	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.de	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Einführung in Emacs
 Einführung in Emacs.  (c) 2002, 2003 Free Software Foundation, Inc.
 
 Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal
--- a/etc/TUTORIAL.es	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.es	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+tutorial de Emacs
 Usted esta viendo el tutorial de Emacs. Vea al final las condiciones
 de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software
 Foundation.
--- a/etc/TUTORIAL.fr	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.fr	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Didacticiel d'Emacs
 Didacticiel d'Emacs.  Voir la fin de ce document pour les conditions.
 Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc.
 
--- a/etc/TUTORIAL.it	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.it	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Esercitazione di Emacs
 Esercitazione di Emacs.  Copyright (c) 2003 Free Software Foundation, Inc.
 Condizioni d'uso alla fine del file.
 
--- a/etc/TUTORIAL.ja	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.ja	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Emacs $BF~Lg%,%$%I$G$9(B
 $B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B
 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
 
--- a/etc/TUTORIAL.ko	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.ko	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B
 $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc;  $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B
 $(C@V=@4O4Y(B.  $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.
 
--- a/etc/TUTORIAL.nl	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.nl	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Emacs-inleiding
 Je leest nu de Emacs-inleiding.  De kopieervoorwaarden staan onderaan.
 Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation
 
--- a/etc/TUTORIAL.pl	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.pl	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+krótki samouczek Emacsa
 Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001
 Free Software Foundation, Inc. Szczegó³y na koñcu pliku.
 
--- a/etc/TUTORIAL.pt_BR	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.pt_BR	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Tutorial do Emacs
 Copyright (c) 2004 Free Software Foundation, Inc;  Veja no fim as
 condições.
 
--- a/etc/TUTORIAL.ro	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.ro	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+tutorialului de Emacs
 Copyright (c) 1998 Free Software Foundation  -*-coding: latin-2;-*-
 Traducere din englezã de Tudor Hulubei <tudor@gnu.org>.
 Mulþumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi ºi sugestii.
--- a/etc/TUTORIAL.ru	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.ru	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+ÕÞÅÂÎÉË Emacs
 ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs.  õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ.
 Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc.
 
--- a/etc/TUTORIAL.sk	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.sk	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+tútorial k Emacsu
 Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci.
 Do èe¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav
 Va¹ko <zemiak@zoznam.sk>.
--- a/etc/TUTORIAL.sl	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.sl	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Prvo berilo za Emacs
 Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu.
 Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
 
--- a/etc/TUTORIAL.sv	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.sv	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+användarhandledningen till Emacs
 Detta är den Svenska användarhandledningen till Emacs. I slutet finns
 kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free
 Software Foundation, Inc.
--- a/etc/TUTORIAL.th	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.th	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B
 ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software
 Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B.
 0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B.
--- a/etc/TUTORIAL.zh	Tue Mar 29 00:48:14 2005 +0000
+++ b/etc/TUTORIAL.zh	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,4 @@
+Emacs §Ö³t«ü«n¡]
 ±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C
 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnus-logo.eps	Thu Mar 31 09:58:14 2005 +0000
@@ -0,0 +1,1055 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: gnuslogo1.ps
+%%Creator: XV Version 3.00  Rev: 3/30/93  -  by John Bradley
+%%BoundingBox: 0 0 493 505
+%%Pages: 1
+%%DocumentFonts:
+%%EndComments
+%%EndProlog
+
+%%Page: 1 1
+
+% remember original state
+/origstate save def
+
+% build a temporary dictionary
+20 dict begin
+
+% define string to hold a scanline's worth of data
+/pix 62 string def
+
+% lower left corner
+0 0 translate
+
+% size of image (on paper, in 1/72inch coords)
+493.0 505.0 scale
+
+% dimensions of data
+493 505 1
+
+% mapping matrix
+[493 0 0 -505 0 505]
+
+{currentfile pix readhexstring pop}
+image
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff01fffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff8003ffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff0000ffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff8000007ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000003ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe0000000ffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff000000003fff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff000000000fff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffc0000000007ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff80000000003ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00000000001ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffe00000000000ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffc00000000000ff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff8000000000007f8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff0000000000003f8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff0000000000003f8
+fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffe0000000000001f8
+fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffc0000000000000f8
+ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffc0000000000000f8
+ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff8000000000000078
+fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000000000000038
+fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffe0000000000000038
+fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffe0000000000000038
+fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffc0000000000000018
+ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffc0000000000000018
+ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff80000000000000018
+ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff80000000000000008
+ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
+fffffffffffffffffffffffffffffffffff00000000000000008
+fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
+fffffffffffffffffffffffffffffffffff00000000000000008
+fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffe00000000000000008
+fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffe00000000000000008
+fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffc00000000000000000
+ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
+ffffffffffffffffffffffffffffffffffc00000000000000000
+ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffff800000000000000000
+ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffff800000000000000000
+ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffff000040000000000000
+fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
+ffffffffffffffffffffffffffffffffff0007ffc00000000000
+fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffe001ffffc0000000000
+fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
+fffffffffffffffffffffffffffffffffc003ffffe0000000000
+fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
+fffffffffffffffffffffffffffffffffc007fffffc000000000
+fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
+fffffffffffffffffffffffffffffffff800fffffff000000000
+ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
+fffffffffffffffffffffffffffffffff801fffffff800000000
+ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
+fffffffffffffffffffffffffffffffff003ffffffff00000000
+ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
+fffffffffffffffffffffffffffffffff007ffffffff00000000
+ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffe00fffffffff80000000
+fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
+ffffffffffffffffffffffffffffffffe01fffffffffc0000008
+fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
+ffffffffffffffffffffffffffffffffc03fffffffffc0000008
+fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
+ffffffffffffffffffffffffffffffffc07ffffffffff0000000
+fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
+ffffffffffffffffffffffffffffffff807ffffffffff0000000
+fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
+ffffffffffffffffffffffffffffffff80fffffffffff0000008
+fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
+ffffffffffffffffffffffffffffffff81fffffffffff8000008
+fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
+ffffffffffffffffffffffffffffffff01fffffffffff8000008
+ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
+ffffffffffffffffffffffffffffffff03fffffffffffc000008
+ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
+fffffffffffffffffffffffffffffffe03fffffffffffc000008
+ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
+fffffffffffffffffffffffffffffffe07fffffffffffe000008
+ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
+fffffffffffffffffffffffffffffffe07fffffffffffe000008
+ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
+fffffffffffffffffffffffffffffffe0ffffffffffffe000008
+ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
+fffffffffffffffffffffffffffffffc0ffffffffffffe000008
+ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
+fffffffffffffffffffffffffffffffc1fffffffffffff000008
+ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
+fffffffffffffffffffffffffffffffc3fffffffffffff000008
+ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
+fffffffffffffffffffffffffffffff87fffffffffffff000008
+ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
+fffffffffffffffffffffffffffffff8ffffffffffffff000008
+ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
+fffffffffffffffffffffffffffffffcffffffffffffff000008
+fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
+ffffffffffffffffffffffffffffe7fdffffffffffffff000008
+fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
+ffffffffffffffffffffffffffffe7fdffffffffffffff000008
+fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
+ffffffffffffffffffffffffffffc7ffffffffffffffff000008
+fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
+fffffffffeffffffffffffffffff87ffffffffffffffff000008
+f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
+fffffffffcffffffffffffffffff87ffffffffffffffff000008
+f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
+fffffffff8ffffffffffffffffff07ffffffffffffffff000008
+f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
+fffffffff8fffffffffffffffffe0fffffffffffffffff000008
+f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
+fffffffff0fffffffffffffffffe0fffffffffffffffff000018
+e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
+fffffffff0fffffffffffffffffc0fffffffffffffffff000018
+e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
+ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
+c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
+ffffffffe0fffffffffffffffff81fffffffffffffffff000018
+c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
+ffffffffc0fffffffffffffffff83fffffffffffffffff000018
+800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
+ffffffff01fffffffffffffffff03fffffffffffffffff000038
+800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
+ffffffff01fffffffffffffffff03fffffffffffffffff800038
+00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
+fffffffe03ffffffffffffffffe07fffffffffffffffff800038
+00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
+fffffffc03ffffffffffffffffe07fffffffffffffffff800038
+00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
+fffffff803ffffffffffffffffc07fffffffffffffffff800038
+00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
+fffffff007ffffffffffffffffc0ffffffffffffffffff800038
+0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
+fffffff007ffffffffffffffff80ffffffffffffffffff800078
+0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
+ffffffc00fffffffffffffffff81ffffffffffffffffff800078
+8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
+ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
+8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
+ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
+c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
+fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
+e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
+fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
+f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
+fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
+f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
+ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
+f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
+ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
+fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
+fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
+fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
+ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
+fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
+00000000fffff3ffffffffff003fffffffffffffffffff0001f8
+fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
+00000001fffff1fffffffffe003fffffffffffffffffff0003f8
+ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
+00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
+ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
+00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
+ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
+00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
+ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
+00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
+fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
+00000007ffff803fffffff0000fffffffffffffffffffe0007f8
+fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
+00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
+fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
+0000000fffff000ffffff80003fffffffffffffffffffe0007f8
+fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
+0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
+ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
+0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
+ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
+0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
+ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
+0000003ffffe0000000000000ffffffffffffffffffffe000ff8
+fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
+0000003ffffc0000000000000ffffffffffffffffffffe000ff8
+fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
+0000007ffff80000000000001ffffffffffffffffffffe001ff8
+fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
+0000007ffff80000000000001ffffffffffffffffffffe001ff8
+fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
+000000fffff80000000000003ffffffffffffffffffffc001ff8
+fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
+000003fffff00000000000007ffffffffffffffffffffc001ff8
+fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
+000007ffffe00000000000007ffffffffffffffffffffe003ff8
+fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
+000007ffffe0000000000000fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
+00001fffffc0000000000001fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
+00001fffffc0000000000003fffffffffffffffffffffc003ff8
+ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
+00003fffff80000000000003fffffffffffffffffffffc007ff8
+ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
+00007fffff80000000000007fffffffffffffffffffffc007ff8
+ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
+0000ffffff0000000000000ffffffffffffffffffffffc007ff8
+fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
+0001ffffff0000000000001ffffffffffffffffffffffc007ff8
+fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
+0003fffffe0000000000001ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
+0007fffffe0000000000003ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
+001ffffffc0000000000007ffffffffffffffffffffff800fff8
+fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
+003ffffffc000000000000fffffffffffffffffffffff800fff8
+ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
+00fffffff8000000000003fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
+03fffffff8000000000003fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
+07fffffff0000000000007fffffffffffffffffffffff001fff8
+ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
+3ffffffff000000000000ffffffffffffffffffffffff003fff8
+ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
+fffffffff000000000003ffffffffffffffffffffffff003fff8
+ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff800000000007ffffffffffffffffffffffff003fff8
+fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff80000000000ffffffffffffffffffffffffe003fff8
+fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffc0000000003ffffffffffffffffffffffffe007fff8
+fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe0000000007ffffffffffffffffffffffffe007fff8
+fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe000000000fffffffffffffffffffffffffe00ffff8
+fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff000000001fffffffffffffffffffffffffe00ffff8
+ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
+ffffffffff800000007fffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
+ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
+ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
+ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
+fffffffffff800001fffffffffffffffffffffffffffc01ffff8
+ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
+fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
+ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
+ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
+ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff803ffff8
+fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff007ffff8
+fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe00fffff8
+ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe01fffff8
+ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc01fffff8
+fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffc03fffff8
+fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff803fffff8
+fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff803fffff8
+fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff007fffff8
+ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
+ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
+ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
+ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
+ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
+fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff803ffffff8
+fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff803ffffff8
+fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff807ffffff8
+fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff807ffffff8
+fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff007ffffff8
+fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00fffffff8
+fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00fffffff8
+ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe01fffffff8
+ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe03fffffff8
+ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe03fffffff8
+ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc07fffffff8
+ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc07fffffff8
+fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff807fffffff8
+fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff807fffffff8
+fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ffffffff8
+fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80ffffffff8
+fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff01ffffffff8
+fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
+fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
+ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
+ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
+ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
+ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
+ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff80fffffffff8
+ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff81fffffffff8
+ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff81fffffffff8
+ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff01fffffffff8
+ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff03fffffffff8
+ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe03fffffffff8
+fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffe07fffffffff8
+fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc07fffffffff8
+fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc07fffffffff8
+fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
+fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
+fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff80ffffffffff8
+fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff80ffffffffff8
+fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff00ffffffffff8
+fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff01ffffffffff8
+fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffff01ffffffffff8
+fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
+ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
+ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
+ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
+ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
+fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
+fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
+ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
+ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
+ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
+fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
+fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
+fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
+fffffffffffffffff03ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
+ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
+ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
+ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
+ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
+ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
+ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
+ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
+fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
+fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
+fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
+fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
+fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
+fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff807ffffffffffffffffff803ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff00fffffffffffffffffff803ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff00fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff807fffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff807fffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff807fffffffffffffffffffc03fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff00ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff807ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff807ffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00fffffffffffffffffffff007fffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
+fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
+fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
+fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
+fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
+fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
+fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
+ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffff801fffffffffffffffffffff801ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
+ffffffffff803fffffffffffffffffffff801ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
+ffffffffff003fffffffffffffffffffff803ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
+fffffffffe007fffffffffffffffffffff803ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
+fffffffffc007fffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
+fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
+fffffffff800ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
+fffffffff801ffffffffffffffffffffff003ffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
+fffffffff803ffffffffffffffffffffff007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
+fffffffff003fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
+ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
+ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
+ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
+ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
+ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
+fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
+fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
+9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
+0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
+07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
+07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
+03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
+03ffff8001fffffffffffffffffffffff801fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
+01ffff0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
+00fffe0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
+00fffe0003fffffffffffffffffffffff803fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
+003ffc0007fffffffffffffffffffffff003fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
+001fe0001ffffffffffffffffffffffff003fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
+000fc0001ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
+000000001ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
+000000003ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
+000000003ffffffffffffffffffffffff007fffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
+000000007fffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
+000000007fffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
+00000001ffffffffffffffffffffffffe007fffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
+00000003ffffffffffffffffffffffffc00ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
+00000003ffffffffffffffffffffffffc00ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
+00000007ffffffffffffffffffffffffc00ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
+0000000fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
+0000001fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
+0000001fffffffffffffffffffffffffc01ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
+0000003fffffffffffffffffffffffffc01ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
+0000007fffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
+0000007fffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
+000000ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
+000001ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
+000001ffffffffffffffffffffffffff801ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
+000003ffffffffffffffffffffffffff801ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
+000003ffffffffffffffffffffffffff801ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
+000007ffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
+00000fffffffffffffffffffffffffff003ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
+00000fffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
+00001fffffffffffffffffffffffffff803ffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
+00003fffffffffffffffffffffffffff007ffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
+00007fffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
+0000ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
+0001ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
+0001ffffffffffffffffffffffffffff00fffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
+0003ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
+0007ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
+0007ffffffffffffffffffffffffffff01fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
+001fffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
+007fffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
+00ffffffffffffffffffffffffffffff07fffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
+dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
+fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
+fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
+ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
+ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffff8
+
+
+showpage
+
+% stop using temporary dictionary
+end
+
+% restore original state
+origstate restore
+
+%%Trailer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/gnus-refcard.tex	Thu Mar 31 09:58:14 2005 +0000
@@ -0,0 +1,1427 @@
+\documentclass{article}
+
+% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex
+% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and
+% gnuslogo-booklet.eps).
+%
+% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps),
+% we can generate the refcard and the booklet version.  Appropriate Makefile
+% rules were added.  This simplifies to distribute the refcard with Emacs.
+%
+% (Reiner Steib, March 2005)
+
+\usepackage{ifthen}
+\ifthenelse{\isundefined{\booklettrue}}{
+  \typeout{Creating reference card...}
+}{
+  \typeout{Creating reference booklet...}}
+
+\usepackage{supertabular}
+
+\newlength{\logowidth}  \setlength{\logowidth} {6.861in}
+\newlength{\logoheight} \setlength{\logoheight}{7.013in}
+
+\usepackage{graphicx}
+
+\usepackage{geometry}
+
+\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % Reference Card
+  
+  \def\Guide{Card}\def\guide{card}
+  \def\logoscale{0.25}
+  
+  % Page setup for the refcard:
+  
+  % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in}
+  % \setlength{\topmargin}{-1.0in}
+  % % the same settings work for A4, although there is a bit of space at the
+  % % top and bottom of the page. 
+  % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in}
+
+  \ifthenelse{\isundefined{\letterpapertrue}}{
+    \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm}
+  }{
+    \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm}
+  }
+  
+}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % Reference Booklet
+  
+  \def\Guide{Booklet}\def\guide{booklet}
+  \def\logoscale{0.5}% FIXME: too large for 2up printing?  --rsteib
+  
+  % FIXME: Use geometry package.  --rsteib
+%   \ifthenelse{\isundefined{\letterpapertrue}}{
+%     \textwidth 4.9in \textheight 7.35in \topmargin -1.0in
+%   }{
+%     \textwidth 4.5in \textheight 7.5in \topmargin -1.0in
+%   }
+%   \oddsidemargin -0.5in \evensidemargin -0.5in
+  \ifthenelse{\isundefined{\letterpapertrue}}{
+    \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm}
+  }{
+    % FIXME: Use geometry package.  --rsteib
+    \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm}
+  }
+  
+  \def\sec{\section}
+  \def\subsec{\subsection}
+  \def\subsubsec{\subsubsection}
+  \def\blankpage{\vspace*{\fill}\par
+  %\centerline{(This page intentionally left blank.)}
+  \par\vspace*{\fill}\pagebreak}
+}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %  
+%% include file for the Gnus refcard and booklet
+
+\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions
+\def\date{Mar, 2005}
+\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
+
+%%
+\newlength{\keycolwidth}
+\newenvironment{keys}[1]% #1 is the widest key
+{\nopagebreak%\noindent%
+  \settowidth{\keycolwidth}{#1}%
+  \addtolength{\keycolwidth}{\tabcolsep}%
+  \addtolength{\keycolwidth}{-\columnwidth}%
+  \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
+  {\end{supertabular}\\}
+
+%% uncomment the first definition if you do not want pagebreaks in maps
+%%\newcommand{\esamepage}{\samepage}
+\newcommand{\esamepage}{}
+
+\newcommand*{\B}[1]{{\bf#1})}    % bold l)etter
+
+\newcommand{\Title}{%
+  \begin{center}
+    {\bf\LARGE Gnus \progver\ Reference \Guide\\}
+                                %{\normalsize \Guide\ version \refver}
+  \end{center}
+  }
+
+% \newcommand*{\LogoOLD}[1]{\centerline{%
+%     \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
+%       {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}}
+
+\newcommand*{\Logo}[1]{\centerline{%
+    \includegraphics[width=\logoscale\logowidth]{gnus-logo}}}
+
+\newcommand{\Copyright}{%
+  \begin{center}
+    Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
+    Copyright \copyright\ 1995 Vladimir Alexiev
+    $<$vladimir@cs.ualberta.ca$>$.\\*
+    Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
+    Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\*
+    Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
+    Ingebrigtsen.\\*
+    and the Emacs Help Bindings feature (C-h b).\\*
+    Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
+  \end{center}
+
+  Permission is granted to make and distribute copies of this reference
+  \guide{} provided the copyright notice and this permission are preserved on
+  all copies.  Please send corrections, additions and suggestions to the
+  current maintainer's email address. \Guide{} last edited on \date.
+  }
+
+\newcommand{\Notes}{%
+  \subsection*{Notes}
+  {\esamepage
+    Gnus is complex. Currently it has some 876 interactive (user-callable)
+    functions. Of these 618 are in the two major modes (Group and
+    Summary/Article). Many of these functions have more than one binding, some
+    have 3 or even 4 bindings. The total number of keybindings is 677. So in
+    order to save 40\% space, every function is listed only once on this
+    \guide, under the ``more logical'' binding. Alternative bindings are given
+    in parentheses in the beginning of the description.
+
+    Many Gnus commands are affected by the numeric prefix. Normally you enter a
+    prefix by holding the Meta key and typing a number, but in most Gnus modes
+    you don't need to use Meta since the digits are not self-inserting. The
+    prefixed behavior of commands is given in [brackets]. Often the prefix is
+    used to specify:
+
+    \quad [distance] How many objects to move the point over.
+
+    \quad [scope] How many objects to operate on (including the current one).
+
+    \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
+    determines how many objects to operate on. Else if there are some objects
+    marked with the process mark \#, these are operated on. Else only the
+    current object is affected.
+
+    \quad [level] A group subscribedness level. Only groups with a lower or
+    equal level will be affected by the operation. If no prefix is given,
+    `gnus-group-default-list-level' is used.  If
+    `gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
+    commands will also set the default level.
+
+    \quad [score] An article score. If no prefix is given,
+    `gnus-summary-default-score' is used. \\*[\baselineskip]
+                                % some keys
+    Gnus startup-commands:\\*
+    \begin{keys}{M-x gnus-unplugged}
+      M-x gnus           & start Gnus. \\
+      M-x gnus-no-server & start Gnus without connecting to server
+      (i.e. to read mail). \\
+    \end{keys}
+    Additionally, there are the two commands \texttt{gnus-plugged} and
+    \texttt{gnus-unplugged}, which are only used if you want to download
+    news and/or read previously downloaded news offline (see C-c C-i g Gnus
+    Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in
+    \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus
+    Unplugged.
+                                %
+    \begin{keys}{C-c C-i}
+      C-c C-i & Go to the Gnus online {\bf info}.\\
+      C-c C-b & Send a Gnus {\bf bug} report.\\
+    \end{keys}
+    }}
+
+\newcommand{\GroupLevels}{%
+  The table below assumes that you use the default Gnus levels.
+  Fill your user-specific levels in the blank cells.\\[1\baselineskip]
+  \begin{tabular}{|c|l|l|}
+    \hline
+    Level & Groups & Status \\
+    \hline
+    1 & draft/mail groups   &              \\
+    2 & mail groups         &              \\
+    3 &                     & subscribed   \\
+    4 &                     &              \\
+    5 & default list level  &              \\
+    \hline
+    6 &                     & unsubscribed \\
+    7 &                     &              \\
+    \hline
+    8 &                     & zombies      \\
+    \hline
+    9 &                     & killed       \\
+    \hline
+  \end{tabular}}
+
+\newcommand{\MarkCharacters}{%
+  {\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
+    \newlength{\markcolwidth}
+    \settowidth{\markcolwidth}{` '}% widest character
+    \addtolength{\markcolwidth}{4\tabcolsep}
+    \addtolength{\markcolwidth}{-\columnwidth}
+    \newlength{\markdblcolwidth}
+    \setlength{\markdblcolwidth}{\columnwidth}
+    \addtolength{\markdblcolwidth}{-2\tabcolsep}
+    \begin{tabular}{|c|p{-\markcolwidth}|}
+      \hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
+        All these marks appear in the first column of the summary line, and so
+        are mutually exclusive.}\\ 
+      \hline
+      ` ' & (M-u, M SPC, M c) Not read.\\
+      !   & (!, M !, M t) Ticked (interesting).\\
+      ?   & (?, M ?) Dormant (only followups are interesting).\\
+      E   & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
+      G   & (C, B DEL) Canceled article (or deleted in mailgroups).\\
+      \$  & (M-d, M s x, S x).  Marked as spam.\\
+      \hline\hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}
+      {The marks below mean that the article
+        is read (killed, uninteresting), and have more or less the same effect.
+        Some commands however explicitly differentiate between them (e.g.\ M
+        M-C-r, adaptive scoring).}\\
+      \hline
+      r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
+      C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
+      F   & SOUPed article. See the manual.\\
+      O   & {\bf Old} (read in a previous session).\\
+      K   & (k, M k; C-k, M K) {\bf Killed}.\\
+      M   & Article marked as read by duplicate suppression.\\
+      Q   & Article is part of a sparse thread (see ``Threading''
+      in the manual).\\
+      R   & {\bf Read} (viewed in actuality).\\
+      X   & Killed by a kill file.\\
+      Y   & Killed due to low score.\\
+      \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
+      \multicolumn{2}{|p{\markdblcolwidth}|}
+      {{\bf Marks not affecting visibility}}\\
+      \hline
+      \#  & (\#, M \#, M P p) Processable (will be affected by the next operation).
+      [2]\\
+      A   & {\bf Answered} (followed-up or replied). [2]\\
+      F   & Forwarded. [2]\\
+      $\ast$  & Cached. [2]\\
+      S   & Saved. [2]\\
+      N   & Recently arrived. [2]\\
+      .   & Unseen. [2]\\
+      +   & Over default score. [3]\\
+      $-$ & Under default score. [3]\\
+      $=$ & Has children (thread underneath it). Add `\%e' to
+      `gnus-summary-line-format'. [3]\\
+      \hline
+    \end{tabular}
+    }}
+
+\newcommand{\GroupModeGeneral}{%
+  \begin{keys}{C-c M-C-x}
+    RET     & (=) Enter this group. [Prefix: how many (read) articles to fetch.
+    Positive: newest articles, negative: oldest ones; non-numerical:
+    view all articles, not just unread]\\
+    M-RET   & Enter group quickly.\\
+    M-SPC   & Same as RET but does not expunge and hide dormants.\\
+    M-C-RET & Enter group without any processing, changes will not be permanent.\\
+    SPC     & Select this group and display the first (unread) article. [Same
+    prefix as above.]\\
+    ?       & Give a very short help message.\\
+    $<$     & Go to the beginning of the Group buffer.\\
+    $>$     & Go to the end of the Group buffer.\\
+    ,       & Jump to the lowest-level group with unread articles.\\
+    .       & Jump to the first group with unread articles.\\
+    \^{}      & Enter the Server buffer mode.\\
+    a       & Post an {\bf article} to a group
+              [Prefix: use group under point to find posting-style].\\
+    b       & Find {\bf bogus} groups and delete them.\\
+    c       & Mark all unticked articles in this group as read ({\bf catch-up}).
+    [p/p]\\ 
+    g       & Check the server for new articles ({\bf get}). [level]\\
+    M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
+    j       & {\bf Jump} to a group.\\
+    m       & {\bf Mail} a message to someone
+              [Prefix: use group under point to find posting-style].\\
+    n       & Go to the {\bf next} group with unread articles. [distance]\\
+    M-n     & Go to the {\bf next} group on the same or lower level.
+    [distance]\\ 
+    p       & (DEL) Go to the {\bf previous} group with unread articles.
+    [distance]\\ 
+    M-p     & Go to the {\bf previous} group on the same or lower level. [distance]\\ 
+    q       & {\bf Quit} Gnus.\\
+    r       & Re-read the init file ({\bf reset}).\\
+    s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
+    `gnus-save-newsrc-file').\\ 
+    z       & Suspend (kill all buffers of) Gnus.\\
+    B       & {\bf Browse} a foreign server.\\
+    C       & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
+    F       & {\bf Find} new groups and process them.\\
+    N       & Go to the {\bf next} group. [distance]\\
+    P       & Go to the {\bf previous} group. [distance]\\
+    Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
+    R       & {\bf Restart} Gnus.\\
+    Z       & Clear the dribble buffer.\\
+    M-c     & Clear data from group (marks and list of read articles). \\
+    C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
+    (depending on `gnus-group-sort-function').\\
+    C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
+    process.\\
+    C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
+    C-c M-g & Activate all {\bf groups}.\\
+    C-c C-i & Gnus online-manual ({\bf info}).\\
+    C-x C-t & {\bf Transpose} two groups.\\
+    H f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
+    H c     & Display this group's {\bf charter}. [Prefix: query for group]\\
+    H C     & Display this group's {\bf control message} (using
+    ange-ftp). [Prefix: query for group]\\
+    H v     & (V) Display the Gnus {\bf version} number.\\
+    H d     & (C-c C-d) Show the {\bf description} of this group
+    [Prefix: re-read from server].\\ 
+    M-d     & {\bf Describe} all groups. [Prefix: re-read from server]\\
+    D g     & Regenerate a Sieve script from group parameters.\\
+    D u     & Regenerate Sieve script and {\bf upload} to server.\\
+  \end{keys}
+  }
+
+\newcommand{\ListGroups}{%
+  {\esamepage
+    \begin{keys}{A M}
+      A d     & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ 
+      A k     & (C-c C-l) List all {\bf killed} groups.
+      [Prefix: look at active-file from server]\\
+      A l     & List all groups on a specific level.
+      [Prefix: also list groups with no unread articles]\\
+      A a     & (C-c C-a) List all groups whose names match a regexp
+      ({\bf apropos}).\\ 
+      A A     & List the server's active-file.\\
+      A M     & List groups that {\bf match} a regexp.\\
+      A m     & List groups that {\bf match} a regexp and have unread articles. 
+      [level]\\ 
+      A s     & (l) List all {\bf subscribed} groups with unread articles.
+      [level; 5 and lower is the default]\\
+      A u     & (L) List all groups (including read and {\bf unsubscribed}).
+      [level; 7 and lower is the default]\\
+      A z     & List all {\bf zombie} groups.\\
+      A c     & List all groups with cached articles. [level]\\
+      A ?     & List all groups with dormant articles. [level]\\
+    \end{keys}
+  }
+  
+  \newcommand{\CreateEditGroups}{%
+    {\esamepage
+      The select methods are indicated in parentheses.\\*
+      \begin{keys}{G DEL}
+        G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
+        G c     & {\bf Customize} this group's parameters.\\
+        G d     & Make a {\bf directory} group (every file must be a posting and files
+        must have numeric names). (nndir)\\
+        G D     & Enter a {\bf directory} as a (temporary) group.
+        (nneething without recording articles read)\\
+        G e     & (M-e) {\bf Edit} this group's select method.\\
+        G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
+        G f     & Make a group based on a {\bf file}. (nndoc)\\
+        G h     & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
+        G k     & Make a {\bf kiboze} group. (nnkiboze)\\
+        G m     & {\bf Make} a new group.\\
+        G p     & Edit this group's {\bf parameters}.\\
+        G r     & Rename this group (does not work with read-only groups!).\\
+        G u     & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
+        G v     & Add this group to a {\bf virtual} group. [p/p]\\
+        G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
+        G w     & Create ephemeral group based on web-search. [Prefix: make solid group
+        instead]\\
+        G R     & Make an {\bf RSS} group.\\
+        G DEL   & {\bf Delete} group [Prefix: delete all articles as well].\\
+        G x     & Expunge all deleted articles in an nnimap mailbox.\\
+        G l     & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\
+      \end{keys}
+      You can also create mail-groups and read your mail with Gnus (very useful
+      if you are subscribed to mailing lists), using one of the methods
+      nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
+      (C-c C-i g Reading Mail RET).
+      }}
+
+                                % TODO:
+  \newcommand{\SoupCommands}{%
+    \begin{keys}{G s w}
+      G s b   & gnus-group-brew-soup: not documented.\\
+      G s p   & gnus-soup-pack-packet: not documented.\\
+      G s r   & nnsoup-pack-replies: not documented.\\
+      G s s   & gnus-soup-send-replies: not documented.\\
+      G s w   & gnus-soup-save-areas: not documented.\\
+    \end{keys}}
+
+  \newcommand{\MarkGroups}{%
+    \begin{keys}{M m}
+      M m     & (\#) Set the process {\bf mark} on this group. [scope]\\
+      M r     & Mark all groups matching regular expression.\\
+      M u     & (M-\#) Remove the process mark from this group ({\bf unmark}).
+      [scope]\\ 
+      M U     & Remove the process mark from all groups (\textbf{umark all}).\\
+      M w     & Mark all groups in the current region. [prefix: unmark]\\
+      M b     & Mark all groups in the {\bf buffer}. [prefix: unmark]\\
+    \end{keys}}
+
+  \newcommand{\GroupTopicsGeneral}{%
+    {\esamepage
+      Topics are ``categories'' for groups. Press t in the group-buffer to
+      toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\*
+      \begin{keys}{C-c C-x}
+        T n     & Prompt for topic {\bf name} and create it.\\
+        T m     & {\bf Move} the current group to some other topic [p/p].\\
+        T j     & {\bf Jump} to a topic.\\
+        T c     & {\bf Copy} the current group to some other topic [p/p].\\
+        T D     & Remove (not delete) the current group [p/p].\\
+        T M     & {\bf Move} all groups matching a regexp to a topic.\\
+        T C     & {\bf Copy} all groups matching a regexp to a topic.\\
+        T H     & Toggle {\bf hiding} of empty topics.\\
+        T r     & {\bf Rename} a topic.\\
+        T DEL   & Delete an empty topic.\\
+        T \#    & Mark all groups in the current topic with the process-mark.\\
+        T M-\#  & Remove the process-mark from all groups in the current topic.\\
+        T TAB   & (TAB) Indent current topic [Prefix: unindent].\\ 
+        M-TAB   & Unindent the current topic.\\
+        RET     & (SPC) Either unfold topic or enter group [level].\\
+        T s     & {\bf Show} the current topic. [Prefix: show permanently]\\
+        T h     & {\bf Hide} the current topic. [Prefix: hide permanently]\\
+        C-c C-x & Expire all articles in current group or topic.\\
+        C-k     & {\bf Kill} a group or topic.\\
+        C-y     & {\bf Yank} a group or topic.\\
+        A T     & List active-file using {\bf topics}.\\
+        G p     & Edit topic-{\bf parameters}.\\
+        T M-n   & Go to {\bf next} topic. [distance]\\
+        T M-p   & Go to {\bf previous} topic. [distance]\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\TopicSorting}{%
+    {\esamepage
+      \begin{keys}{T S m}
+        T S a  & Sort {\bf alphabetically}.\\
+        T S u  & Sort by number of {\bf unread} articles.\\
+        T S l  & Sort by group {\bf level}.\\
+        T S v  & Sort by group score ({\bf value}).\\
+        T S r  & Sort by group {\bf rank}.\\
+        T S m  & Sort by {\bf method}.\\
+        T S e  & Sort by {\bf server} name.\\
+        T S s  & Sort according to `gnus-group-sort-function'.\\
+      \end{keys}
+      With a prefix these commands will sort in reverse order.
+      }
+    }
+
+  \newcommand{\SubscribeKillYankGroups}{%
+    {\esamepage
+      \begin{keys}{S C-k}
+        S k     & (C-k) {\bf Kill} this group.\\
+        S l     & Set the {\bf level} of this group. [p/p]\\
+        S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
+        S t     & (u) {\bf Toggle} subscription to this group. [p/p]\\
+        S w     & (C-w) Kill all groups in the region.\\
+        S y     & (C-y) {\bf Yank} the last killed group.\\
+        S z     & Kill all {\bf zombie} groups.\\
+        S C-k   & Kill all groups on a certain level.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SummaryModeGeneral}{%
+    {\esamepage
+      \begin{keys}{M-RET}
+        SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
+        next one.\\ 
+        DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
+        RET     & (A RET) Scroll this article one line forward. [distance]\\
+        M-RET   & (A M-RET) Scroll this article one line backward. [distance]\\
+        =       & Expand the Summary window (fullsize).
+        [Prefix: shrink to display article window]\\
+                                %
+        \&      & Execute a command on all articles whose header matches a regexp.
+        [Prefix: move backwards]\\
+        M-\&    & Execute a command on all articles having the process mark.\\
+                                %
+        M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
+        [distance]\\ 
+        M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article. 
+        [distance]\\ 
+        M-s     & {\bf Search} through all subsequent articles for a regexp.\\
+        M-r     & Search through all previous articles for a regexp.\\
+                                %
+        A P     & {\bf Postscript}-print current buffer.\\
+                                %
+        M-k     & Edit this group's {\bf kill} file.\\
+        M-K     & Edit the general {\bf kill} file.\\
+                                %
+        C-t     & Toggle {\bf truncation} of summary lines.\\
+        Y g     & Regenerate the summary-buffer.\\
+        Y c     & Insert all cached articles into the summary-buffer.\\
+                                %
+        M-C-e   & {\bf Edit} the group-parameters.\\
+        M-C-a   & Customize the group-parameters.\\
+                                %
+                                % article handling
+                                %
+        A $<$   & ($<$, A b) Scroll to the beginning of this article.\\
+        A $>$   & ($>$, A e) Scroll to the end of this article.\\
+        A s     & (s) Perform an i{\bf search} in the article buffer.\\
+                                %
+        A D     & (C-d) Un{\bf digestify} this article into a separate group.
+        [Prefix: force digest]\\
+        M-C-d   & Like C-d, but open several documents in nndoc-groups, wrapped
+        in an nnvirtual group [p/p]\\
+                                %
+        A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ 
+        A r     & (\^{}, A \^{}) Fetch the parent(s) of this article.
+        [Prefix: if positive fetch \textit{n} ancestors;
+        negative: fetch only the \textit{n}th ancestor]\\
+        A t     & {\bf Translate} this article.\\
+        A R     & Fetch all articles mentioned in the {\bf References}-header.\\
+        A T     & Fetch full \textbf{thread} in which the current article appears.\\
+        M-\^{}  & Fetch the article with a given Message-ID.\\
+        S y     & {\bf Yank} the current article into an existing message-buffer.
+        [p/p]\\
+        A M     & Setup group parameters for {\bf mailing} lists from
+        headers. [Prefix: replace old settings]\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\MIMESummary}{%
+    {\esamepage
+      For the commands operating on one MIME part (a subset of gnus-article-*), a
+      prefix selects which part to operate on. If the point is placed over a
+      MIME button in the article buffer, use the corresponding bindings for the
+      article buffer instead.
+      
+      \begin{keys}{W M w}
+        K v      & (b, W M b) {\bf View} the MIME-part.\\
+        K o      & {\bf Save} the MIME part.\\
+        K c      & {\bf Copy} the MIME part.\\
+        K e      & View the MIME part {\bf externally}.\\
+        K i      & View the MIME part {\bf internally}.\\
+        K $\mid$ & Pipe the MIME part to an external command.\\
+        K b      & Make all the MIME parts have buttons in front of them.\\
+        K m      & Try to repair {\bf multipart-headers}.\\
+        K C      & View the MIME part using a different {\bf charset}.\\
+        X m      & Save all parts matching a MIME type to a directory. [p/p]\\
+        M-t      & Toggle the buttonized display of the article buffer.\\
+        W M w    & Decode RFC2047-encoded words in the article headers.\\
+        W M c    & Decode encoded article bodies. [Prefix: prompt for charset]\\
+        W M v    & View all MIME parts in the current article.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SortSummary}{%
+    {\esamepage
+      \begin{keys}{C-c C-s C-a}
+        C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
+        % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus
+        C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
+        C-c C-s C-i & Sort the summary-buffer by article score.\\
+        C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
+        C-c C-s C-c & Sort the summary-buffer by length.\\
+        C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
+        C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
+        C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\
+        C-c C-s C-o & Sort the summary-buffer using the default method.\\
+      \end{keys}
+      With a prefix these functions sort in reverse order.
+      }
+    }
+
+  \newcommand{\MailGroups}{% formerly \Bsubmap
+    {\esamepage
+      These commands (except `B c') are only valid in a mail group.\\*
+      \begin{keys}{B M-C-e}
+        B DEL   & (B backspace, B delete) {\bf Delete} the mail article from disk (!).
+        [p/p]\\
+        B B     & Crosspost this article to another group.\\
+        B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
+        B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
+        B i     & {\bf Import} a random file into this group.\\
+        B I     & Create an empty article in this group.\\
+        B m     & {\bf Move} the article from one mail group to another. [p/p]\\
+        B p     & Query whether the article was {\bf posted} as well.\\
+        B q     & {\bf Query} where the article will end up after fancy splitting\\
+        B r     & {\bf Respool} this mail article. [p/p]\\
+        B t     & {\bf Trace} the fancy splitting patterns applied to this article.\\
+        B w     & (e) Edit this article.\\
+        B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
+        (!). [p/p]\\ 
+        K E     & {\bf Encrypt} article body. [p/p]\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\DraftGroup}{% formerly \Dsubmap
+    {\esamepage
+      The ``drafts''-group contains messages that have been saved but not sent
+      and rejected articles. \\*
+      \begin{keys}{B DEL}
+        D e      & \textbf{edit} message.\\
+        D s      & \textbf{Send} message. [p/p]\\
+        D S      & \textbf{Send} all messages.\\
+        D t      & \textbf{Toggle} sending (mark as unsendable).\\
+        B DEL    & \textbf{Delete} message (like in mailgroup).\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\SelectArticles}{% formerly \Gsubmap
+    {\esamepage
+      These commands select the target article. They do not understand the prefix.\\*
+      \begin{keys}{G C-n}
+        h       & Enter article-buffer.\\
+        G b     & (,) Go to the {\bf best} article (the one with highest score).\\
+        G f     & (.) Go to the {\bf first} unread article.\\
+        G n     & (n) Go to the {\bf next} unread article.\\
+        G p     & (p) Go to the {\bf previous} unread article.\\
+                                %
+        G N     & (N) Go to {\bf the} next article.\\
+        G P     & (P) Go to the {\bf previous} article.\\
+                                %
+        G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
+        G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
+                                %
+        G l     & (l) Go to the previously read article ({\bf last-read-article}).\\
+        G o     & Pop an article off the summary history and go to it.\\
+                                %
+        G g     & Search an article via subject.\\
+        G j     & (j) Search an article via Message-Id or subject.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\ArticleModeGeneral}{%
+    {\esamepage
+      The normal navigation keys work in Article mode. Some additional keys are:\\
+      \begin{keys}{C-c RET}
+        C-c \^{} & Get the article with the Message-ID near point.\\
+        C-c RET & Send reply to address near point.\\
+        h       & Go to the \textbf{header}-line of the article in the
+        summary-buffer.\\
+        s       & Go to \textbf{summary}-buffer.\\
+        RET     & (middle mouse button) Activate the button at point to follow
+        an URL or Message-ID.\\
+        TAB     & Move the point to the next button.\\
+        M-TAB   & Move point to previous button.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\WashArticle}{% formerly \Wsubmap
+    {\esamepage
+      \begin{keys}{W W H}
+        W 6     & Translate a base64 article.\\
+        W a     & Strip certain {\bf headers} from body.\\
+        W b     & Make Message-IDs and URLs in the article mouse-clickable
+        {\bf buttons}.\\  
+        W c     & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\
+        W d     & Treat {\bf dumbquotes}.\\
+        W e     & Treat {\bf emphasized} text.\\
+        W h     & Treat {\bf HTML}.\\
+        W l     & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
+        W m     & {\bf Morse} decode article.\\
+        W o     & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
+        W p     & Verify X-{\bf PGP}-Sig header.\\
+        W q     & Treat {\bf quoted}-printable in the article.\\
+        W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
+        W s     & Verify (and decrypt) a {\bf signed} message.\\
+        W t     & (t) {\bf Toggle} display of all headers.\\
+        W u     & {\bf Unsplit} broken URLs.\\
+        W v     & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
+        W w     & Do word {\bf wrap} in the article.\\
+        W B     & Add clickable {\bf buttons} to the article headers.\\
+        W C     & {\bf Capitalize} first word in each sentence.\\
+        W Q     & Fill long lines.\\
+        W Z     & Translate a HZ-encoded article.\\
+                                %
+        W G u   & {\bf Unfold} folded header lines.\\
+        W G f   & {\bf Fold} all header lines.\\
+        W G n   & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\
+                                %
+        W Y c   & Repair broken {\bf citations}.\\
+        W Y a   & Repair broken {\bf attribution} lines.\\
+        W Y u   & {\bf Unwrap} broken citation lines.\\
+        W Y f   & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\BlankAndWhitespace}{% 
+    {\esamepage
+      \begin{keys}{W E w}
+        W E l   & Strip blank {\bf lines} from the beginning of the article.\\
+        W E m   & Replace blank lines with empty lines and remove {\bf multiple}
+        blank lines.\\
+        W E t   & Remove {\bf trailing} blank lines.\\
+        W E a   & Strip blank lines at the beginning and the end
+        (W E l, W E m and W E t).\\
+        W E A   & Strip {\bf all} blank lines.\\
+        W E s   & Strip leading blank lines from the article body.\\
+        W E e   & Strip trailing blank lines from the article body.\\
+        W E w   & Remove leading {\bf whitespace} from all headers.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\Picons}{% 
+    {\esamepage
+      \begin{keys}{W D D}
+        W D s   & (W g) Display {\bf smilies}.\\
+        W D x   & (W f) Look for and display any X-{\bf Face} headers.\\
+        W D d   & Display any Face headers.\\
+        W D n   & Toggle picons in {\bf Newsgroups} and Followup-To.\\
+        W D m   & Toggle picons in {\bf mail} headers (To and Cc).\\
+        W D f   & Toggle picons in {\bf From}.\\
+        W D D   & Remove all images from the article buffer.\\
+      \end{keys}
+      }
+    }
+
+  \newcommand{\TimeAndDate}{% 
+    {\esamepage
+      \begin{keys}{W T u}
+        W T u   & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
+        W T i   & Display the article timestamp in {\bf ISO} 8601.\\
+        W T l   & Display the article timestamp in the {\bf local} timezone.\\
+        W T s   & Display according to `gnus-article-time-format'.\\
+        W T e   & Display the time {\bf elapsed} since it was sent.\\
+        W T o   & Display the {\bf original} timestamp.\\
+        W T p   & Display the date in format that's {\bf
+          pronounceable} in English.\\        
+      \end{keys}
+      }
+    }
+
+  \newcommand{\HideHighlightArticle}{%
+    {\esamepage
+      \begin{keys}{W W C-c}
+        W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
+        W W h   & Hide article {\bf headers}.\\
+        W W b   & Hide {\bf boring} headers.\\
+        W W s   & Hide {\bf signature}.\\
+        W W l   & Hide {\bf list} identifiers in subject-header.\\
+        W W P   & Hide {\bf PEM} (privacy enhanced messages).\\
+        W W B   & Hide banner specified by group parameter.\\
+        W W c   & Hide {\bf citation}.\\
+        W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
+        W W C   & Hide cited text in articles that aren't roots.\\
+        W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
+        W H c   & Highlight article {\bf citations}.\\
+        W H h   & Highlight article {\bf headers}.\\
+        W H s   & Highlight article {\bf signature}.\\
+      \end{keys}
+      For all hiding-commands: A positive prefix always hides, and a negative
+      prefix will show what was previously hidden.
+      }}
+
+  \newcommand{\MIMEArticleMode}{%
+    {\esamepage
+      \begin{keys}{RET}
+        RET     & (BUTTON-2) Toggle display of the MIME object.\\
+        v       & Prompt for a method and then view object using this method.\\
+        o       & Prompt for a filename and save the MIME object.\\
+        C-o     & Prompt for a filename to save the MIME object to and remove it.\\
+        d       & {\bf Delete} the MIME object.\\
+        c       & {\bf Copy} the MIME object to a new buffer and display this buffer.\\
+        i       & Display the MIME object in this buffer.\\
+        C       & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\
+        E       & View internally. \\
+        e       & View {\bf externally}. \\
+        t       & View the MIME object as a different {\bf type}.\\
+        p       & {\bf Print} the MIME object.\\
+        $\mid$  & Pipe the MIME object to a process.\\
+        .       & Take action on the MIME object.\\
+      \end{keys}
+      }
+    }
+
+  %% end of article mode for reading ..........................................
+
+  \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
+    {\esamepage
+      \begin{keys}{M M-C-r}
+        d       & (M d, M r) Mark this article as read and move to the next one.
+        [scope]\\ 
+        D       & Mark this article as read and move to the previous one. [scope]\\
+        !       & (u, M !, M t) Tick this article (mark it as interesting) and move
+        to the next one. [scope]\\
+        U       & Tick this article and move to the previous one. [scope]\\ 
+        M ?     & (?) Mark this article as dormant (only followups are
+        interesting). [scope]\\ 
+        M D     & Show all {\bf dormant} articles (normally they are hidden unless they
+        have any followups).\\
+        M M-D   & Hide all {\bf dormant} articles.\\
+        C-w     & Mark all articles between point and mark as read.\\
+        M-u     & (M SPC, M c) Clear all marks from this article and move to the next
+        one. [scope]\\ 
+        M-U     & Clear all marks from this article and move to the previous one.
+        [scope]\\
+                                %
+        M e     & (E, M x) Mark this article as {\bf expirable}. [scope]\\
+                                %
+        M k     & (k) {\bf Kill} all articles with the same subject then select the
+        next unread one.\\ 
+        M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
+                                %
+        M C     & {\bf Catch-up} the articles that are not ticked and not dormant.\\
+        M C-c   & {\bf Catch-up} all articles in this group.\\
+        M H     & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\
+                                %
+        M b     & Set a {\bf bookmark} in this article.\\
+        M B     & Remove the {\bf bookmark} from this article.\\
+                                %
+        M M-r   & (x) Expunge all {\bf read} articles from this group.\\
+        M M-C-r & Expunge all articles having a given mark.\\
+        M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
+        M M C-h & Displays some more keys doing ticking slightly differently.\\
+      \end{keys}
+      The variable `gnus-summary-goto-unread' controls what happens after a mark
+      has been set (C-x C-i g Setting Marks RET)
+      }}
+
+  \newcommand{\MarkByScore}{%
+    \begin{keys}{M V m}
+      M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
+      M V k   & {\bf Kill} all low-scored articles. [score]\\
+      M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
+      M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ProcessMark}{%
+  {\esamepage 
+    These commands set and remove the process mark (\#). You only need to use
+    it if the set of articles you want to operate on is non-contiguous. Else
+    use a numeric prefix.\\*
+    \begin{keys}{M P R}
+      M P p   & (\#, M \#) Mark this article.\\
+      M P u   & (M-\#, M M-\#) \textbf{unmark} this article.\\
+      M P b   & Mark all articles in {\bf buffer}.\\
+      M P r   & Mark all articles in the {\bf region}.\\
+      M P g   & Unmark all articles in the region.\\
+      M P R   & Mark all articles matching a {\bf regexp}.\\
+      M P G   & Unmark all articles matching a regexp.\\
+      M P t   & Mark all articles in this (sub){\bf thread}.\\
+      M P T   & Unmark all articles in this (sub){\bf thread}.\\
+      M P s   & Mark all articles in the current {\bf series}.\\
+      M P S   & Mark all {\bf series} that already contain a marked article.\\
+      M P a   & Mark {\bf all} articles (in series order).\\
+      M P U   & \textbf{unmark} all articles.\\
+      M P i   & {\bf Invert} the list of process-marked articles.\\
+      M P k   & Push the current process-mark set onto stack and unmark
+      all articles.\\
+      M P y   & Pop process-mark set from stack and restore it.\\
+      M P w   & Push process-mark set on the stack.\\
+      M P v   & Mark all articles with score over the default score. [Prefix: score]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\Limiting}{%
+  {\esamepage
+    \begin{keys}{/M}
+      //   & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
+      /a   & Limit the summary-buffer to articles matching {\bf author}.\\
+      /x   & Limit depending on ``extra'' headers.\\
+      /u   & (x) Limit to {\bf unread} articles.
+      [Prefix: also exclude ticked and dormant articles]\\
+      /.   & Limit to unseen articles.\\
+      /m   & Limit to articles marked with specified {\bf mark}.\\
+      /t   & Ask for a number and exclude articles younger than that many days.
+      [Prefix: exclude older articles]\\
+      /n   & Limit to current article. [p/p]\\
+      /w   & Pop the previous limit off the stack and restore it.
+      [Prefix: pop all limits]\\
+      /v   & Limit to score. [score]\\
+      /E   & (M S) Include all expunged articles in the limit.\\
+      /D   & Include all dormant articles in the limit.\\
+      /*   & Limit to cached articles.\\
+      Y C  & Include all cached articles in the limit.\\
+      /d   & Exclude all dormant articles from the limit.\\
+      /M   & Exclude all marked articles.\\
+      /T   & Include all articles from the current thread in the limit.\\
+      /c   & Exclude all dormant articles that have no children from the limit.\\
+      /C   & Mark all excluded unread articles as read.
+      [Prefix: also mark ticked and dormant articles]\\
+      /o   & Insert all {\bf old} articles. [Prefix: how many]\\
+      /N   & Insert all {\bf new} articles.\\
+      /p   & Limit to articles {\bf predicated} in the `display' group parameter.\\
+      % /r   & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus
+    \end{keys}
+    }
+  }
+
+\newcommand{\OutputArticles}{% formerly \Osubmap
+  {\esamepage
+    \begin{keys}{O m}
+      O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
+      O b     & Save this article's {\bf body} in plain file format [p/p]\\
+      O f     & Save this article in plain {\bf file} format. [p/p]\\
+      O F     & like O f, but overwrite file's contents. [p/p]\\
+      O h     & Save this article in {\bf mh} folder format. [p/p]\\
+      O m     & Save this article in {\bf mail} format. [p/p]\\
+      O r     & Save this article in {\bf rmail} format. [p/p]\\
+      O v     & Save this article in {\bf vm} format. [p/p]\\
+      O p     & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\
+      O P     & \textbf{Print} this article using Muttprint. [p/p]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\PostReplyetc}{% formerly \Ssubmap
+  {\esamepage
+    These commands put you in a separate news or mail buffer. See the section
+    about composing messages for more information.\\*
+                                %After
+                                %editing the article, send it by pressing C-c C-c.  If you are in a
+                                %foreign group and want to post the article using the foreign server, give
+                                %a prefix to C-c C-c.\\* 
+    \begin{keys}{S O m}
+      S p     & (a) {\bf Post} an article to this group.\\
+      S f     & (f) Post a {\bf followup} to this article.\\
+      S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
+      S o p   & Forward this article as a {\bf post} to a newsgroup.\\
+      S M-c   & Send a complaint about excessive crossposting to the author of this
+      article. [p/p]\\
+                                %
+      S m     & (m) Send a {\bf mail} to some other person.\\
+      S r     & (r) Mail a {\bf reply} to the author of this article.\\
+      S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
+      S B r   & Like S r but ignore the Reply-To: header.\\
+      S B R   & Like S R but ignore the Reply-To: header.\\
+      S w     & Mail a {\bf wide} reply to this article.\\
+      S W     & Mail a {\bf wide} reply to this article and include
+      the original.\\
+      S v     & Mail a {\bf very} wide reply to this article.\\
+      S V     & Mail a {\bf very} wide reply to this article and include the original.\\
+      S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.\\
+      S D b   & Resend {\bf bounced} mail.\\
+      S D r   & {\bf Resend} mail to a different person.\\
+      S D e   & {\bf Edit} and resend.\\
+                                %
+      S n     & Post a followup via {\bf news} even if you got the message
+      through mail.\\
+      S N     & Post a followup via {\bf news} and include the original mail.
+      [p/p]\\
+                                %
+      S c     & (C) {\bf Cancel} this article (only works if it is
+      your own). [p/p]\\
+      S s     & {\bf Supersede} this article with a new one (only for own
+      articles).\\
+                                %
+      S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
+      S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
+      [p/p]\\ 
+                                %
+      S u     & {\bf Uuencode} a file and post it as a series.\\
+    \end{keys}
+    If you want to cancel or supersede an article you just posted (before it
+    has appeared on the server), go to the *post-news* buffer, change
+    `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
+    }}
+
+\newcommand{\Threading}{% formerly \Tsubmap
+  {\esamepage
+    \begin{keys}{T M-\#}
+      T \#    & Mark this thread with the process mark.\\
+      T M-\#  & Remove process-marks from this thread.\\
+                                %
+      T t     & Re-{\bf thread} the current article's thread.\\
+      T \^{}  & Make the current article child of the marked (or previous) article.\\
+                                % movement
+      T n     & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\
+      T p     & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\
+      T d     & {\bf Descend} this thread. [distance]\\
+      T u     & Ascend this thread ({\bf up}-thread). [distance]\\
+      T o     & Go to the top of this thread.\\
+                                %
+      T s     & {\bf Show} the thread hidden under this article.\\
+      T h     & {\bf Hide} this (sub)thread.\\
+                                %
+      T i     & {\bf Increase} the score of this thread.\\
+      T l     & (M-C-l) {\bf Lower} the score of this thread.\\
+                                %
+      T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
+      tick it, positive prefix: unmark it.]\\
+                                %
+      T H     & {\bf Hide} all threads.\\
+      T S     & {\bf Show} all hidden threads.\\
+      T T     & (M-C-t) {\bf Toggle} threading.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\Scoring}{% formerly \Vsubmap
+  {\esamepage
+    Read about Adaptive Scoring in the online info.\\*
+    \begin{keys}{\bf A p m l}
+      V a     & {\bf Add} a new score entry, specifying all elements.\\
+      V c     & Specify a new score file as {\bf current}.\\
+      V e     & {\bf Edit} the current score alist.\\
+      V f     & Edit a score {\bf file} and make it the current one.\\
+      V m     & {\bf Mark} all articles below a given score as read.\\
+      V s     & Set the {\bf score} of this article.\\
+      V t     & Display all score rules applied to this article ({\bf track}).\\
+      W w     & List {\bf words} used in scoring.\\
+      V x     & {\bf Expunge} all low-scored articles. [score]\\
+      V C     & {\bf Customize} the current score file through a user-friendly
+      interface.\\
+      V F     & {\bf Flush} the cache of score files.\\
+      V R     & {\bf Re-score} the summary buffer.\\
+      V S     & Display the {\bf score} of this article.\\
+      \bf A p m l& Make a scoring entry based on this article.\\
+    \end{keys}
+    The four letters stand for:\\*
+    \quad \B{A}ction: I)ncrease, L)ower;\\*
+    \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
+    message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
+    \quad \B{m}atch type:\\*
+    \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
+    \qquad date: b)efore, a)t, n)this,\\*
+    \qquad number: $<$, =, $>$;\\*
+    \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
+
+    If you type the second letter in uppercase, the remaining two are assumed
+    to be s)ubstring and t)emporary. 
+    If you type the third letter in uppercase, the last one is assumed to be 
+    t)emporary.
+
+    \quad Extra keys for manual editing of a score file:\\*
+    \begin{keys}{C-c C-c}
+      C-c C-c & Finish editing the score file.\\
+      C-c C-d & Insert the current {\bf date} as number of days.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ExtractSeries}{% formerly \Xsubmap
+  {\esamepage
+    Gnus recognizes if the current article is part of a series (multipart
+    posting whose parts are identified by numbers in their subjects, e.g.{}
+    1/10\dots10/10) and processes the series accordingly. You can mark and
+    process more than one series at a time. If the posting contains any
+    archives, they are expanded and gathered in a new group.\\*
+    \begin{keys}{X p}
+      X b     & Un-{\bf binhex} these series. [p/p]\\
+      X o     & Simply {\bf output} these series (no decoding). [p/p]\\ 
+      X p     & Unpack these {\bf postscript} series. [p/p]\\
+      X s     & Un-{\bf shar} these series. [p/p]\\
+      X u     & {\bf Uudecode} these series. [p/p]\\
+    \end{keys}
+
+    Each one of these commands has four variants:\\*
+    \begin{keys}{X v \bf Z}
+      X   \bf z & Decode these series. [p/p]\\
+      X   \bf Z & Decode and save these series. [p/p]\\
+      X v \bf z & Decode and view these series. [p/p]\\
+      X v \bf Z & Decode, save and view these series. [p/p]\\
+    \end{keys}
+    where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
+
+    An alternative binding for the most-often used of these commands is\\*
+    \begin{keys}{C-c C-v C-v}
+      C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
+    \end{keys}
+    }}
+
+\newcommand{\ExitSummary}{% formerly \Zsubmap
+  {\esamepage
+    \begin{keys}{Z G}
+      Z Z     & (q, Z Q) Exit this group.\\
+      Z E     & (Q) {\bf Exit} without updating the group information.\\
+                                %
+      Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
+      Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
+                                %
+      Z n     & Mark all articles as read and go to the {\bf next} group.\\
+      Z N     & Exit and go to {\bf the} next group.\\
+      Z P     & Exit and go to the {\bf previous} group.\\
+                                %
+      Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
+      Z R     & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}).
+      [Prefix: select all articles, read and unread.]\\
+      Z s     & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionGeneral}{%
+  Press C-c ? in the composition-buffer to get this information.\\*
+  {\esamepage
+    \begin{keys}{C-c C-m}
+                                % sending
+      C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
+      C-c C-s & Send message. [Prefix: send via foreign server]\\
+      C-c C-d & Don't send message (save as \textbf{draft}).\\
+      C-c C-k & \textbf{Kill} message-buffer.\\
+      C-c C-m & {\bf Mail} reply to the address near point.
+      [Prefix: include the original]\\
+                                % modify headers/body
+      C-c C-o & Sort headers.\\
+      C-c C-e & \textbf{Elide} region.\\
+      C-c C-v & Kill everything outside region.\\
+      C-c C-r & Do a \textbf{Rot-13} on the body.\\
+      C-c C-w & Insert signature (from `message-signature-file').\\
+      C-c C-z & Kill everything up to signature.\\
+      C-c C-y & \textbf{Yank} original message.\\
+      C-c C-q & Fill the yanked message.\\
+      C-c M-C-y & \textbf{Yank} a buffer and quote it.\\
+      M-RET   & Insert four newlines and format quoted text. [Prefix:
+      justify as well]\\
+      C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionMovementArticle}{%
+  The following functions create the header-field if necessary.\\*
+  {\esamepage
+    \begin{keys}{C-c C-f C-u}
+      C-c TAB & Move to \textbf{signature}.\\
+      C-c C-b & Move to \textbf{body}.\\
+      C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\
+      C-c C-f C-c & Move to \textbf{Cc:}.\\
+      C-c C-f C-b & Move to \textbf{Bcc:}.\\
+      C-c C-f C-w & Move to \textbf{Fcc:}.\\
+      C-c C-f C-s & Move to \textbf{Subject:}.\\
+      C-c C-f C-r & Move to \textbf{Reply-To:}.\\
+      C-c C-f C-f & Move to \textbf{Followup-To:}.\\
+      C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\
+      C-c C-f C-u & Move to \textbf{Summary:}.\\
+      C-c C-f C-k & Move to \textbf{Keywords:}.\\
+      C-c C-f C-d & Move to \textbf{Distribution:}.\\
+      C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\
+      C-c C-f C-o & Move to \textbf{From:}.\\
+      C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for
+      an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\
+      C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\
+      C-c M-n     & Insert \textbf{Disposition-Notification-To:}
+      (request receipt).\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\MsgCompositionMML}{%
+  {\esamepage
+    \begin{keys}{C-c C-m P}
+      C-c C-m f   & (C-c C-a) Attach \textbf{file}.\\
+      C-c C-m b   & Attach contents of \textbf{buffer}.\\
+      C-c C-m e   & Attach \textbf{external} file (ftp..).\\
+      C-c C-m P   & Create MIME-\textbf{preview} (new
+      buffer). [Prefix: show raw MIME preview]\\
+      C-c C-m v   & \textbf{Validate} article.\\
+      C-c C-m p   & Insert \textbf{part}.\\
+      C-c C-m m   & Insert \textbf{multi}-part.\\
+      C-c C-m q   & \textbf{Quote} region.\\
+      C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\
+      C-c C-m c o & Encrypt message using PGP.\\
+      C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\
+      C-c C-m s s & Sign message using \textbf{S/MIME}.\\
+      C-c C-m s o & Sign message using PGP.\\
+      C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\
+      C-c C-m C-n & Remove security related MML tags from message.\\
+                                % TODO: narrow headers (C-c C-m n) ?
+    \end{keys}
+    }
+  }
+
+%% TODO:
+\newcommand{\ServerMode}{%
+  {\esamepage
+    To enter this mode, press \^{} while in Group mode.\\*
+    \begin{keys}{SPC}
+      SPC     & (RET) Browse this server.\\
+      a       & {\bf Add} a new server.\\
+      c       & {\bf Copy} this server.\\
+      e       & {\bf Edit} a server.\\
+      k       & {\bf Kill} this server. [scope]\\
+      l       & {\bf List} all servers.\\
+      q       & Return to the group buffer ({\bf quit}).\\
+      s       & Request that the server scan its sources for new articles.\\
+      g       & Request that the server regenerate its data.\\
+      y       & {\bf Yank} the previously killed server.\\
+      O       & Try to {\bf open} a connection to this server.\\
+      C       & {\bf Close} connection to this server.\\
+      D       & Mark this server as unreachable ({\bf deny}).\\
+      M-o     & {\bf Open} the connection to all servers.\\
+      M-c     & {\bf Close} the connection to all servers.\\
+      R       & Make all denied servers into closed servers.\\
+      L       & Set server status to offline.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\BrowseServer}{%
+  {\esamepage
+    To enter this mode, press `B' while in Group mode.\\*
+    \begin{keys}{RET}
+      RET     & Enter the current group.\\
+      SPC     & Enter the current group and display the first article.\\
+      ?       & Give a very short help message.\\
+      n       & Go to the {\bf next} group. [distance]\\
+      p       & Go to the {\bf previous} group. [distance]\\
+      q       & (l) {\bf Quit} browse mode.\\
+      u       & Subscribe to the current group. [scope]\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\GroupUnplugged}{%
+  {\esamepage
+    \begin{keys}{J S}
+      J j & Toggle plugged-state.\\
+      J s & Fetch articles from all groups for offline-reading.\\
+      J u & Fetch all eligible articles from this group.\\
+      J S & \textbf{Send} all sendable messages in the drafts group.\\
+                                %
+      J c & Enter \textbf{category} buffer.\\
+      J a & \textbf{Add} this group to an Agent category [p/p].\\
+      J r & \textbf{Remove} this group from its Agent category [p/p].\\
+      J Y & Synchronize flags changed while unplugged with remote server.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\SummaryUnplugged}{%
+  {\esamepage
+    \begin{keys}{J M-\#}
+      J \#   & \textbf{Mark} the article for downloading.\\
+      J M-\# & \textbf{Unmark} the article for downloading.\\
+      @      & \textbf{Toggle} whether to download the article.\\
+      J c    & Mark all undownloaded articles as read (\textbf{catch-up}).\\
+      J u    & Download all downloadable articles from group.\\
+    \end{keys}
+    }
+  }
+
+\newcommand{\ServerUnplugged}{%
+  {\esamepage
+    \begin{keys}{J a}
+      J a & \textbf{Add} the current server to the list of servers covered
+      by the agent.\\
+      J r & \textbf{Remove} the current server from the list of servers covered
+      by the agent.\\
+    \end{keys}
+    }
+  }
+
+% end   {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %  
+
+
+% o some things might not be updated: scoring and server modes, maybe more
+% o Gnus Unplugged category-buffer commands need to be written
+
+\begin{document}
+
+\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
+\def\date{Jan 10th, 2004}
+\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
+
+\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \raggedbottom\raggedright
+  \twocolumn
+  % use \tiny to shrink it to 4 pages (needs a high-resolution printer though)
+  % \tiny
+  \scriptsize
+  \pagestyle{plain}
+  \Title
+  \par
+  \Logo{refcard}
+}{
+  \setcounter{page}{0}
+  \thispagestyle{empty}
+  \vspace*{\fill}
+  \Title
+  \vspace{0.4in}
+  \Logo{booklet}
+  \vspace*{\fill}
+  \pagebreak
+}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TODO: how does this work ?
+%\tableofcontents
+
+\Notes
+%
+
+\section*{Group-Mode}
+\GroupModeGeneral
+    \subsection*{Group Subscribedness-Levels}
+    \GroupLevels
+    \subsection*{List Groups}
+    \ListGroups
+    \subsection*{Create/Edit Foreign Groups}
+    \CreateEditGroups
+    \subsection*{Unsubscribe, Kill and Yank Groups}
+    \SubscribeKillYankGroups
+    \subsection*{Mark Groups}
+    \MarkGroups
+    \subsection*{Group-Unplugged}
+    \GroupUnplugged
+% topics in group-mode
+    \subsection*{Group Topics}
+    \GroupTopicsGeneral
+    \subsubsection*{Topic Sorting}
+    \TopicSorting
+
+% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak}
+
+% summary-mode
+\section*{Summary Mode}
+\SummaryModeGeneral
+    \subsection*{Select Articles}
+    \SelectArticles
+%
+    \subsection*{Threading}
+    \Threading
+%
+    \subsection*{Limiting}
+    \Limiting
+    \subsection*{Sort the Summary-Buffer}
+    \SortSummary
+    \subsection*{Score (Value) Commands}
+    \Scoring
+    
+\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \subsection*{Output Articles}
+  \OutputArticles
+  \subsection*{Extract Series (Uudecode etc)}
+  \ExtractSeries
+}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    \subsection*{MIME operations from the Summary-Buffer}
+    \MIMESummary
+    
+\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  \subsection*{Extract Series (Uudecode etc)}
+  \ExtractSeries
+  \subsection*{Output Articles}
+  \OutputArticles
+}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+    \subsection*{Post, Followup, Reply, Forward, Cancel}
+    \PostReplyetc
+    
+\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard
+
+      \subsection*{Message Composition}
+
+    \MsgCompositionGeneral
+        \subsubsection*{Jumping in message-buffer}
+        \MsgCompositionMovementArticle
+        \subsubsection*{Attachments/MML}
+        \MsgCompositionMML
+% marking articles
+    \subsection*{Mark Articles}
+    \MarkArticlesGeneral
+        \subsubsection*{Mark Based on Score}
+        \MarkByScore
+        \subsubsection*{The Process Mark}
+        \ProcessMark
+        \subsubsection*{Mark Indication-Characters}
+        \MarkCharacters
+%
+\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}%
+
+    \subsection*{Summary-Unplugged}
+    \SummaryUnplugged
+    \subsection*{Mail-Group Commands}
+    \MailGroups
+    \subsection*{Draft-Group Commands}
+    \DraftGroup
+% exiting
+    \subsection*{Exit the Summary-Buffer}
+    \ExitSummary
+%
+%
+\section*{Article Mode (reading)}
+\ArticleModeGeneral
+    \subsection*{Wash the Article-Buffer}
+    \WashArticle
+    \subsubsection*{Blank Lines and Whitespace}
+    \BlankAndWhitespace
+    \subsubsection*{Picons, X-faces, Smileys}
+    \Picons
+    \subsubsection*{Time and Date}
+    \TimeAndDate
+    \subsection*{Hide/Highlight Parts of the Article}
+    \HideHighlightArticle
+    \subsection*{MIME operations from the Article-Buffer (reading)}
+    \MIMEArticleMode
+%
+%
+\section*{Server Mode}
+\ServerMode
+    \subsection*{Unplugged-Server}
+    \ServerUnplugged
+%
+%
+\section*{Browse Server Mode}
+\BrowseServer
+
+%\pagebreak
+\vspace*{\fill}
+\Copyright
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
+% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1
--- a/leim/ChangeLog	Tue Mar 29 00:48:14 2005 +0000
+++ b/leim/ChangeLog	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/leim/quail/latin-ltx.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,12 +1,524 @@
+2005-03-31  Kenichi Handa  <handa@etlken2>
+
+	* textmodes/fill.el (fill-text-properties-at): New function.
+	(fill-newline): Use fill-text-properties-at instead of
+	text-properties-at.
+
+2005-03-31  Karl Berry  <karl@freefriends.org>
+
+	* textmodes/tex-mode.el (tex-compile): shell-quote-argument,
+	not comint-quote-filename.
+
+2005-03-31  Olive Lin  <olive.lin@versateladsl.be> (tiny change)
+
+	* textmodes/tex-mode.el (tex-start-tex) shell-quote-argument,
+	not comint-quote-filename.
+
+2005-03-31  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* help-fns.el (help-with-tutorial): Revert last change.
+
+2005-03-31  Kim F. Storm  <storm@cua.dk>
+
+	* emulation/cua-base.el (cua-scroll-down): Add CUA property.
+
+2005-03-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* calendar/cal-china.el: Update reference to "Calendrical
+	Calculations" book; there's a new edition.
+	* calendar/cal-coptic.el: Likewise.
+	* calendar/cal-french.el: Likewise.
+	* calendar/cal-hebrew.el: Likewise.
+	* calendar/cal-islam.el: Likewise.
+	* calendar/cal-iso.el: Likewise.
+	* calendar/cal-julian.el: Likewise.
+	* calendar/cal-mayan.el: Likewise.
+	* calendar/cal-persia.el: Likewise.
+	* calendar/calendar.el: Likewise.
+	* calendar/holidays.el: Likewise.
+	* calendar/lunar.el: Likewise.
+	* calendar/solar.el: Likewise.
+
+	* calendar/calendar.el (calendar-day-abbrev-array): Remove trailing
+	white space from doc string.
+
+2005-03-30  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-help.el (calc-full-help): Remove email address.
+
+2005-03-30  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* help-fns.el (help-with-tutorial): Delete title line.
+
+2005-03-30  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* calendar/cal-x.el (calendar-one-frame-setup)
+	(calendar-only-one-frame-setup, calendar-two-frame-setup): Use t
+	rather than 'symbol for set-window-dedicated-p.
+
+	* calendar/appt.el (appt-buffer-name): Make it a constant.
+	(appt-add): Doc fix.
+
+	* filesets.el (filesets-menu-path, filesets-menu-before)
+	(filesets-menu-in-menu): Doc fix.  Now valid in GNU Emacs.
+	(filesets-menu-cache-file): Use directory ~/.emacs.d.
+	(filesets-add-submenu): Delete and use add-submenu instead.
+
+2005-03-30  Carsten Dominik  <dominik@science.uva.nl>
+
+	* org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset)
+	(org-agenda-convert-date, org-agenda-goto-calendar): New commands.
+	(org-diary-default-entry): New function.
+	(org-get-entries-from-diary): Better parsing of diary entries
+	(org-agenda-check-no-diary): New function.
+	("diary-lib"): Advice to function `add-to-diary-list', to allow
+	linking to diary entries.
+	(org-agenda-execute-calendar-command): New function
+	(org-agenda): Improved visible section in window.  And
+	use `org-fit-agenda-window'.
+	(org-fit-agenda-window): New option.
+	(org-move-subtree-down): Better handling of empty lines
+	at end of subtree.
+	(org-cycle): Numeric prefix is interpreted now as show-subtree N
+	levels up.
+	(org-fontify-done-headline): New option.
+	(org-headline-done-face): New face.
+	(org-set-font-lock-defaults): Use `org-headline-done-face'.
+	(org-table-copy-down): renamed from
+	`org-table-copy-from-above'.  When current field is non-empty, it
+	is copied to next row.
+	(org-table-copy-from-above): Fixed bug which made it
+	impossible to copy fields containing only a single non-white
+	character.
+
+2005-03-30  Kim F. Storm  <storm@cua.dk>
+
+	* kmacro.el (kmacro-end-macro): Isearch may store this command
+	into the macro -- so ignore it when executing keyboard macro.
+
+2005-03-30  Nick Roberts  <nickrob@snap.net.nz>
+
+	* tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position.
+
+2005-03-29  Kenichi Handa  <handa@m17n.org>
+
+	* language/thai.el ("Thai"): Set setup-function and exit-function
+	for Thai language environment.
+
+	* language/thai-util.el: Require thai-word.
+	(thai-word-mode-map): New variable.
+	(thai-word-mode): New minor mode.
+	(setup-thai-language-environment-internal): New function.
+	(exit-thai-language-environment-internal): New function.
+
+	* language/thai-word.el (thai-word-table): Declare it by defvar,
+	use dolist to initialize it.
+	(thai-kill-word, thai-backward-kill-word, thai-transpose-words)
+	(thai-fill-find-break-point): New functions.
+
+2005-03-29  Richard M. Stallman  <rms@gnu.org>
+
+	* simple.el (idle-update-delay): Move definition up.
+	(set-mark): Doc fix.
+
+2005-03-29  Chong Yidong  <cyd@stupidchicken.com>
+
+	* longlines.el: New file.
+
+	* simple.el (buffer-substring-filters): New variable.
+	(filter-buffer-substring): New function.
+	(kill-region, copy-region-as-kill): Use it.
+
+	* register.el (copy-to-register, append-to-register)
+	(prepend-to-register): Use filter-buffer-substring.
+
+2005-03-30  Nick Roberts  <nickrob@snap.net.nz>
+
+	* progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text.
+	(gud-filter-pending-text): Move in front of gdb.
+	(gud-overlay-arrow-position): New variable.
+	(gud-sentinel, gud-display-line): Use it in place of
+	overlay-arrow-position.
+
+2005-03-29  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* progmodes/fortran.el (fortran-if-indent): Doc fix.
+	(fortran-font-lock-keywords-2): Add "where", "elsewhere".
+	(fortran-font-lock-keywords-4): New variable.
+	(fortran-blocks-re, fortran-end-block-re)
+	(fortran-start-block-re): New constants, for hideshow.
+	(hs-special-modes-alist): Add a Fortran entry.
+	(fortran-mode-map): Bind fortran-end-of-block,
+	fortran-beginning-of-block to \M-\C-n, \M-\C-p.
+	(fortran-mode): Doc fix. Add fortran-font-lock-keywords-4.
+	(fortran-looking-at-if-then, fortran-end-of-block)
+	(fortran-beginning-of-block): New functions, for hideshow.
+
+	* progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc
+	fix. Tweak regexp.
+	(f90-beginning-of-block): Push mark first.
+
+2005-03-29  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc.el: Update copyright date.
+	(calc-version): Increase to 2.1.
+	(calc-version-date): Remove.
+
+	* calc/calc-help.el: Update copyright date.
+	(calc-full-help): Remove reference to calc-version-date.
+	Update copyright date.
+
+2005-03-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* vc.el (vc-do-command): Use a pipe for async processes, so password
+	prompts don't show up at places where the user can't reply.
+
+2005-03-29  Olive Lin  <olive.lin@versateladsl.be> (tiny change)
+
+	* textmodes/tex-mode.el (tex-send-command): shell-quote-argument
+	on the file name we pass to the inferior shell.
+
+2005-03-29  Stephan Stahl  <stahl@eos.franken.de>  (tiny change)
+
+	* progmodes/which-func.el (which-function): Be robust in the face of an
+	imenu--make-index-alist failure.
+
+2005-03-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* reveal.el (reveal-mode-map): Don't override C-a and C-e.
+
+	* progmodes/python.el (python-preoutput-filter): Fix last change.
+
+2005-03-29  Lute Kamstra  <lute@gnu.org>
+
+	* emacs-lisp/debug.el (debug-on-entry): Handle autoloaded
+	functions and compiled macros.
+	(debug-convert-byte-code): Handle macros too.
+	(debug-on-entry-1): Don't signal an error when trying to clear a
+	function that is not set to debug on entry.
+
+2005-03-29  Jay Belanger  <belanger@truman.edu>
+
+	* calc/calc-lang.el: Add functions to math-function-table
+	properties of tex and math.
+
+2005-03-29  Kenichi Handa  <handa@m17n.org>
+
+	* ps-mule.el (ps-mule-plot-string): Translate characters by
+	ps-print-translation-table.
+	(ps-mule-begin-job): Call find-charset-region/string with
+	ps-print-translation-table.
+	(ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1.
+
+	* ps-print.el (ps-print-translation-table): New variable.
+	(ps-plot-region): Translate characters by ps-print-translation-table.
+
+2005-03-29  Juri Linkov  <juri@jurta.org>
+
+	* simple.el (next-error-highlight-timer): New variable.
+
+	* progmodes/compile.el (compilation-goto-locus):
+	Use `next-error-highlight-timer' instead of `sit-for'.
+
+2005-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* mail/supercite.el (sc-mail-field): Use assoc-string.
+	(sc-get-address): Simplify regexps.
+
+	* files.el (minibuffer-with-setup-hook): New macro.
+	(find-file-read-args): Use it to avoid let-binding
+	minibuffer-with-setup-hook (which breaks turning on/off
+	file-name-shadow-mode while in the prompt).
+
+	* complete.el (PC-read-include-file-name-internal): Use test-completion.
+
+2005-03-28  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* font-lock.el: Bind `font-lock-fontify-block' to M-o M-o.
+
+2005-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* window.el (window-buffer-height): Use count-screen-lines.
+
+	* progmodes/python.el (python-preoutput-leftover): New var.
+	(python-preoutput-filter): Use it.
+	(python-send-receive): Loop until all the result has been received.
+
+2005-03-28  Juri Linkov  <juri@jurta.org>
+
+	* dired.el (dired-mode-map): Add ellipsis to "Compare directories".
+
+	* menu-bar.el (menu-bar-file-menu): Remove ellipsis from
+	"Recover Crashed Session".
+	(menu-bar-search-menu): Add ellipsis to "Search tagged files".
+	(menu-bar-replace-menu): Add ellipsis to "Replace in tagged files".
+	(menu-bar-goto-menu): Add ellipsis to "Set Tags File Name".
+	(menu-bar-goto-menu): Add ellipsis to "Tags Apropos".
+	(menu-bar-options-menu): Add ellipsis to "Set Font/Fontset".
+	(menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual".
+	(menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual".
+	(menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages".
+
+	* ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu):
+	Remove ellipsis from "Ediff Manual", "Customize Ediff", "List
+	Ediff Sessions", "Toggle use of separate control buffer frame",
+	"Use separate frame for Ediff control buffer".
+
+	* bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to
+	Bookmark", "Set Bookmark", "Insert Contents", "Insert Location",
+	"Rename Bookmark", "Delete Bookmark".
+
+	* info.el (Info-mode-menu): Remove ellipsis from "Index".
+	Add ellipsis to "Lookup a String", "Lookup a string in all indices".
+	Add `:active Info-index-alternatives' to "Next Matching Item".
+
+	* wdired.el (wdired-change-to-wdired-mode):
+	Mention `wdired-abort-changes' key in the initial message.
+
+	* international/mule.el (auto-coding-alist): Associate non-ascii
+	image filename extensions with `no-conversion'.
+
+2005-03-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* international/iso-acc.el:
+	* obsolete/iso-acc.el: Move iso-acc to the obsolete subdir.
+
+2005-03-26  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* textmodes/sgml-mode.el (html-mode): Doc update.
+
+	* autorevert.el (auto-revert-check-vc-info): Minor doc fix.
+
+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): 
+	* 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 arguments constant whenever
-	possible.
+	* 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)
@@ -14,8 +526,8 @@
 
 	* generic.el (generic-make-keywords-list): Add autoload cookie.
 
-	* calendar/time-date.el: Add comment on time value formats.  Don't
-	require parse-time.
+	* 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.
@@ -34,8 +546,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.
@@ -124,8 +636,7 @@
 
 2005-03-21  Lute Kamstra  <lute@gnu.org>
 
-	* generic.el: Fix commentary section.  Don't require cl for
-	compilation.
+	* generic.el: Fix commentary section.  Don't require cl for compilation.
 	(generic-mode-list): Add autoload cookie.
 	(generic-use-find-file-hook, generic-lines-to-scan)
 	(generic-find-file-regexp, generic-ignore-files-regexp)
@@ -175,20 +686,27 @@
 
 	* tramp-smb.el (all): Remove debug construct for
 	`with-parsed-tramp-file-name'.
-	(tramp-smb-prompt): Prompt can contain spaces inside directory
-	names.
+	(tramp-smb-prompt): Prompt can contain spaces inside directory names.
 	(tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file):
 	No error message if DIRECTORY or FILENAME doesn't exist.
 	(tramp-smb-open-connection): Check existence of
 	`tramp-smb-program'.
 
+2005-03-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/perl-mode.el (perl-font-lock-syntactic-face-function):
+	Properly handle the case where the `m' or `s' command's argument is not
+	yet terminated.
+	(perl-indent-new-calculate): New function.
+	(perl-indent-line): Use it.
+
 2005-03-20  Miles Bader  <miles@gnu.org>
 
 	* progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces
 	in text-mode too.  Change to new face names.
-	(breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'.
+	(breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'.
 	Add `:weight bold' attribute.
-	(breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'.
+	(breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'.
 
 2005-03-19  Juri Linkov  <juri@jurta.org>
 
@@ -205,8 +723,7 @@
 
 2005-03-19  Yoichi NAKAYAMA  <yoichi@geiin.org>  (tiny changes)
 
-	* finder.el (finder-current-item): Throw an error on an empty
-	line.
+	* finder.el (finder-current-item): Throw an error on an empty line.
 
 	* man.el (Man-follow-manual-reference): If current-word returns
 	nil, use "".
@@ -245,8 +762,8 @@
 
 2005-03-19  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
 
-	* ps-print.el (ps-generate-string-list, ps-generate-header-line): Use
-	functionp instead of symbolp and fboundp.  Reported by Drkm
+	* ps-print.el (ps-generate-string-list, ps-generate-header-line):
+	Use functionp instead of symbolp and fboundp.  Reported by Drkm
 	<darkman_spam@yahoo.fr>.
 	(ps-print-version): New version 6.6.6.
 
--- a/lisp/autoinsert.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/autoinsert.el	Thu Mar 31 09:58:14 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/autorevert.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/autorevert.el	Thu Mar 31 09:58:14 2005 +0000
@@ -246,7 +246,7 @@
 control info every `auto-revert-interval' seconds.  Nevertheless,
 it should not cause excessive CPU usage on a reasonably fast
 machine, if it does not apply to too many version controlled
-buffers.  CPU usage depends on the version control system"
+buffers.  CPU usage depends on the version control system."
   :group 'auto-revert
   :type 'boolean
   :version "22.1")
--- a/lisp/bookmark.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/bookmark.el	Thu Mar 31 09:58:14 2005 +0000
@@ -2111,12 +2111,12 @@
     (define-key map [write]	'("Save Bookmarks As..." . bookmark-write))
     (define-key map [save]	'("Save Bookmarks" . bookmark-save))
     (define-key map [edit]	'("Edit Bookmark List" . bookmark-bmenu-list))
-    (define-key map [delete]	'("Delete Bookmark" . bookmark-delete))
-    (define-key map [rename]	'("Rename Bookmark" . bookmark-rename))
-    (define-key map [locate]	'("Insert Location" . bookmark-locate))
-    (define-key map [insert]	'("Insert Contents" . bookmark-insert))
-    (define-key map [set]	'("Set Bookmark" . bookmark-set))
-    (define-key map [jump]	'("Jump to Bookmark" . bookmark-jump))
+    (define-key map [delete]	'("Delete Bookmark..." . bookmark-delete))
+    (define-key map [rename]	'("Rename Bookmark..." . bookmark-rename))
+    (define-key map [locate]	'("Insert Location..." . bookmark-locate))
+    (define-key map [insert]	'("Insert Contents..." . bookmark-insert))
+    (define-key map [set]	'("Set Bookmark..." . bookmark-set))
+    (define-key map [jump]	'("Jump to Bookmark..." . bookmark-jump))
     map))
 
 ;;;###autoload
--- a/lisp/calc/calc-embed.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc-embed.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc-forms.el	Thu Mar 31 09:58:14 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-help.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc-help.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,6 @@
 ;;; calc-help.el --- help display functions for Calc,
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004, 2005
 ;;           Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
@@ -409,10 +409,10 @@
 (defun calc-full-help ()
   (interactive)
   (with-output-to-temp-buffer "*Help*"
-    (princ (format "GNU Emacs Calculator version %s of %s.\n"
-		   calc-version calc-version-date))
-    (princ "  By Dave Gillespie, daveg@synaptics.com.\n")
-    (princ "  Copyright (C) 1990, 1993 Free Software Foundation, Inc.\n\n")
+    (princ (format "GNU Emacs Calculator version %s.\n"
+		   calc-version))
+    (princ "  By Dave Gillespie.\n")
+    (princ "  Copyright (C) 2005 Free Software Foundation, Inc.\n\n")
     (princ "Type `h s' for a more detailed summary.\n")
     (princ "Or type `h i' to read the full Calc manual on-line.\n\n")
     (princ "Basic keys:\n")
--- a/lisp/calc/calc-lang.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc-lang.el	Thu Mar 31 09:58:14 2005 +0000
@@ -388,6 +388,9 @@
      ( \\arg	   . calcFunc-arg )
      ( \\cos	   . calcFunc-cos )
      ( \\cosh	   . calcFunc-cosh )
+     ( \\cot	   . calcFunc-cot )
+     ( \\coth	   . calcFunc-coth )
+     ( \\csc	   . calcFunc-csc )
      ( \\det	   . calcFunc-det )
      ( \\exp	   . calcFunc-exp )
      ( \\gcd	   . calcFunc-gcd )
@@ -395,10 +398,11 @@
      ( \\log	   . calcFunc-log10 )
      ( \\max	   . calcFunc-max )
      ( \\min	   . calcFunc-min )
-     ( \\tan	   . calcFunc-tan )
+     ( \\sec	   . calcFunc-sec )
      ( \\sin	   . calcFunc-sin )
      ( \\sinh	   . calcFunc-sinh )
      ( \\sqrt	   . calcFunc-sqrt )
+     ( \\tan	   . calcFunc-tan )
      ( \\tanh	   . calcFunc-tanh )
      ( \\phi	   . calcFunc-totient )
      ( \\mu	   . calcFunc-moebius )))
@@ -686,6 +690,10 @@
      ( Conjugate   . calcFunc-conj )
      ( Cos	   . calcFunc-cos )
      ( Cosh	   . calcFunc-cosh )
+     ( Cot	   . calcFunc-cot )
+     ( Coth	   . calcFunc-coth )
+     ( Csc	   . calcFunc-csc )
+     ( Csch	   . calcFunc-csch )
      ( D	   . calcFunc-deriv )
      ( Dt	   . calcFunc-tderiv )
      ( Det	   . calcFunc-det )
@@ -708,6 +716,8 @@
      ( Random	   . calcFunc-random )
      ( Round	   . calcFunc-round )
      ( Re	   . calcFunc-re )
+     ( Sec	   . calcFunc-sec )
+     ( Sech	   . calcFunc-sech )
      ( Sign	   . calcFunc-sign )
      ( Sin	   . calcFunc-sin )
      ( Sinh	   . calcFunc-sinh )
--- a/lisp/calc/calc-sel.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc-sel.el	Thu Mar 31 09:58:14 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/calc.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calc.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,7 @@
 ;;; calc.el --- the GNU Emacs calculator
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, 2005 
+;;           Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -656,8 +657,7 @@
 (put 'math-underflow 'error-conditions '(error math-underflow calc-error))
 (put 'math-underflow 'error-message "Floating-point underflow occurred")
 
-(defconst calc-version "2.02g")
-(defconst calc-version-date "Mon Nov 19 2001")
+(defconst calc-version "2.1")
 (defvar calc-trail-pointer nil)		; "Current" entry in trail buffer.
 (defvar calc-trail-overlay nil)		; Value of overlay-arrow-string.
 (defvar calc-undo-list nil)		; List of previous operations for undo.
--- a/lisp/calc/calcalg2.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calc/calcalg2.el	Thu Mar 31 09:58:14 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/appt.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/appt.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,9 +1,9 @@
 ;;; appt.el --- appointment notification functions
 
-;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1990, 1994, 1998, 2004  Free Software Foundation, Inc.
 
 ;; Author: Neil Mager <neilm@juliet.ll.mit.edu>
-;; Maintainer: FSF
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 
 ;; This file is part of GNU Emacs.
@@ -181,7 +181,7 @@
 
 ;;; Internal variables below this point.
 
-(defvar appt-buffer-name " *appt-buf*"
+(defconst appt-buffer-name " *appt-buf*"
   "Name of the appointments buffer.")
 
 (defvar appt-time-msg-list nil
@@ -486,9 +486,8 @@
 
 ;;;###autoload
 (defun appt-add (new-appt-time new-appt-msg)
-  "Add an appointment for the day at NEW-APPT-TIME and issue message NEW-APPT-MSG.
+  "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG.
 The time should be in either 24 hour format or am/pm format."
-
   (interactive "sTime (hh:mm[am/pm]): \nsMessage: ")
   (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?"
 		    new-appt-time)
--- a/lisp/calendar/cal-china.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-china.el	Thu Mar 31 09:58:14 2005 +0000
@@ -38,8 +38,8 @@
 ;; The date of Chinese New Year is correct from 1644-2051.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-coptic.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-coptic.el	Thu Mar 31 09:58:14 2005 +0000
@@ -29,8 +29,8 @@
 ;; diary.el that deal with the Coptic and Ethiopic calendars.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-french.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-french.el	Thu Mar 31 09:58:14 2005 +0000
@@ -29,8 +29,8 @@
 ;; diary.el that deal with the French Revolutionary calendar.
 
 ;; Technical details of the French Revolutionary calendar can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997), and in
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001), and in
 ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by
 ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and
 ;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404.
--- a/lisp/calendar/cal-hebrew.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-hebrew.el	Thu Mar 31 09:58:14 2005 +0000
@@ -30,8 +30,8 @@
 ;; diary.el that deal with the Hebrew calendar.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-islam.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-islam.el	Thu Mar 31 09:58:14 2005 +0000
@@ -29,8 +29,8 @@
 ;; diary.el that deal with the Islamic calendar.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-iso.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-iso.el	Thu Mar 31 09:58:14 2005 +0000
@@ -30,8 +30,8 @@
 ;; diary.el that deal with the ISO calendar.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-julian.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-julian.el	Thu Mar 31 09:58:14 2005 +0000
@@ -29,8 +29,8 @@
 ;; diary.el that deal with the Julian calendar.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-mayan.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-mayan.el	Thu Mar 31 09:58:14 2005 +0000
@@ -44,8 +44,8 @@
 ;; Comments, improvements, and bug reports should be sent to Reingold.
 
 ;; Technical details of the Mayan calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997), and in
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001), and in
 ;; ``Calendrical Calculations, Part II: Three Historical Calendars''
 ;; by E. M. Reingold,  N. Dershowitz, and S. M. Clamen,
 ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993),
--- a/lisp/calendar/cal-menu.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-menu.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-move.el	Thu Mar 31 09:58:14 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/cal-persia.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-persia.el	Thu Mar 31 09:58:14 2005 +0000
@@ -29,8 +29,8 @@
 ;; diary.el that deal with the Persian calendar.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/cal-x.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/cal-x.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,9 +1,10 @@
 ;;; cal-x.el --- calendar windows in dedicated frames in X
 
-;; Copyright (C) 1994, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 2005  Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.sunysb.edu>
 ;;      Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: calendar, dedicated frames, X Window System
 
@@ -88,7 +89,7 @@
                                      (frame-parameters calendar-frame))))
               (iconify-or-deiconify-frame))
           (calendar-basic-setup arg)
-          (set-window-dedicated-p (selected-window) 'calendar)
+          (set-window-dedicated-p (selected-window) t)
           (set-window-dedicated-p
            (display-buffer
             (if (not (memq 'fancy-diary-display diary-display-hook))
@@ -96,7 +97,7 @@
               (if (not (bufferp (get-buffer fancy-diary-buffer)))
                   (make-fancy-diary-buffer))
               fancy-diary-buffer))
-           'diary))))))
+           t))))))
 
 (defun calendar-only-one-frame-setup (&optional arg)
   "Start calendar and display it in a dedicated frame.
@@ -117,7 +118,7 @@
                                      (frame-parameters calendar-frame))))
               (iconify-or-deiconify-frame))
           (calendar-basic-setup arg)
-          (set-window-dedicated-p (selected-window) 'calendar))))))
+          (set-window-dedicated-p (selected-window) t))))))
 
 (defun calendar-two-frame-setup (&optional arg)
   "Start calendar and diary in separate, dedicated frames.
@@ -139,7 +140,7 @@
                                   (frame-parameters calendar-frame))))
             (iconify-or-deiconify-frame))
         (display-buffer calendar-buffer)
-        (set-window-dedicated-p (selected-window) 'calendar)
+        (set-window-dedicated-p (selected-window) t)
         (setq diary-frame (make-frame diary-frame-parameters))
         (run-hooks 'calendar-after-frame-setup-hooks)
         (select-frame diary-frame)
@@ -154,7 +155,7 @@
             (if (not (bufferp (get-buffer fancy-diary-buffer)))
                 (make-fancy-diary-buffer))
             fancy-diary-buffer))
-         'diary)))))
+         t)))))
 
 ;; Formerly (get-file-buffer diary-file) was added to the list here,
 ;; but that isn't clean, and the value could even be nil.
--- a/lisp/calendar/calendar.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/calendar.el	Thu Mar 31 09:58:14 2005 +0000
@@ -75,13 +75,13 @@
 ;;       solar.el                      Sunrise/sunset, equinoxes/solstices
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; An earlier version of the technical details appeared in
 ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
 ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990),
-;; pages 899-928.  ``Calendrical Calculations, Part II: Three Historical
+;; pages 899-928, and in ``Calendrical Calculations, Part II: Three Historical
 ;; Calendars'' by E. M. Reingold,  N. Dershowitz, and S. M. Clamen,
 ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993),
 ;; pages 383-404.
@@ -2763,7 +2763,7 @@
 instead of the full names in the diary file.  Do not include a
 trailing `.' in the strings specified in this variable, though
 you may use such in the diary file.  If any element of this array
-is nil, then the abbreviation will be constructed as the first 
+is nil, then the abbreviation will be constructed as the first
 `calendar-abbrev-length' characters of the corresponding full name.")
 
 (defvar calendar-month-name-array
@@ -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/holidays.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/holidays.el	Thu Mar 31 09:58:14 2005 +0000
@@ -30,8 +30,8 @@
 ;; in calendar.el.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; An earlier version of the technical details appeared in
 ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
--- a/lisp/calendar/lunar.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/lunar.el	Thu Mar 31 09:58:14 2005 +0000
@@ -38,8 +38,8 @@
 ;; person rewrite the code for the lunar calculations in this file!
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/calendar/solar.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/calendar/solar.el	Thu Mar 31 09:58:14 2005 +0000
@@ -48,8 +48,8 @@
 ;;       1951--2050.  For other years the times will be within +/- 1 minute.
 
 ;; Technical details of all the calendrical calculations can be found in
-;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
-;; Cambridge University Press (1997).
+;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
+;; and Nachum Dershowitz, Cambridge University Press (2001).
 
 ;; Comments, corrections, and improvements should be sent to
 ;;  Edward M. Reingold               Department of Computer Science
--- a/lisp/comint.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/comint.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/complete.el	Thu Mar 31 09:58:14 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)
@@ -937,12 +937,11 @@
 	 ((not completion-table) nil)
 	 ((eq action nil) (try-completion str2 completion-table nil))
 	 ((eq action t) (all-completions str2 completion-table nil))
-	 ((eq action 'lambda)
-	  (eq (try-completion str2 completion-table nil) t))))
+	 ((eq action 'lambda) (test-completion str2 completion-table nil))))
     (funcall PC-old-read-file-name-internal string dir action)))
 
 
 (provide 'complete)
 
-;;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458
+;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458
 ;;; complete.el ends here
--- a/lisp/dired-aux.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/dired-aux.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/dired.el	Thu Mar 31 09:58:14 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/ediff-hook.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/ediff-hook.el	Thu Mar 31 09:58:14 2005 +0000
@@ -131,10 +131,10 @@
        ))
    (defvar ediff-misc-menu
      '("Ediff Miscellanea"
-       ["Ediff Manual..." ediff-documentation t]
-       ["Customize Ediff..." ediff-customize t]
-       ["List Ediff Sessions..." ediff-show-registry t]
-       ["Use separate frame for Ediff control buffer..."
+       ["Ediff Manual" ediff-documentation t]
+       ["Customize Ediff" ediff-customize t]
+       ["List Ediff Sessions" ediff-show-registry t]
+       ["Use separate frame for Ediff control buffer"
 	ediff-toggle-multiframe
 	:style toggle
 	:selected (if (and (featurep 'ediff-util)
@@ -242,14 +242,14 @@
 
        ;; define ediff miscellanea
        (define-key menu-bar-ediff-misc-menu [emultiframe]
-	 '("Toggle use of separate control buffer frame..."
+	 '("Toggle use of separate control buffer frame"
 	   . ediff-toggle-multiframe))
        (define-key menu-bar-ediff-misc-menu [eregistry]
-	 '("List Ediff Sessions..." . ediff-show-registry))
+	 '("List Ediff Sessions" . ediff-show-registry))
        (define-key menu-bar-ediff-misc-menu [ediff-cust]
-	 '("Customize Ediff..." . ediff-customize))
+	 '("Customize Ediff" . ediff-customize))
        (define-key menu-bar-ediff-misc-menu [ediff-doc]
-	 '("Ediff Manual..." . ediff-documentation))
+	 '("Ediff Manual" . ediff-documentation))
        )
 
       ) ; emacs case
--- a/lisp/emacs-lisp/advice.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emacs-lisp/advice.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emacs-lisp/cl-macs.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emacs-lisp/debug.el	Thu Mar 31 09:58:14 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)
 
@@ -633,24 +632,31 @@
 Use \\[cancel-debug-on-entry] to cancel the effect of this command.
 Redefining FUNCTION also cancels it."
   (interactive "aDebug on entry (to function): ")
-  ;; Handle a function that has been aliased to some other function.
-  (if (and (subrp (symbol-function function))
-	   (eq (cdr (subr-arity (symbol-function function))) 'unevalled))
-      (error "Function %s is a special form" function))
-  (if (or (symbolp (symbol-function function))
+  (when (and (subrp (symbol-function function)) 
+	     (eq (cdr (subr-arity (symbol-function function))) 'unevalled))
+    (error "Function %s is a special form" function))
+  (if (or (symbolp (symbol-function function)) 
 	  (subrp (symbol-function function)))
-      ;; Create a wrapper in which we can then add the necessary debug call.
+      ;; The function is built-in or aliased to another function.
+      ;; Create a wrapper in which we can add the debug call.
       (fset function `(lambda (&rest debug-on-entry-args)
 			,(interactive-form (symbol-function function))
-			(apply ',(symbol-function function)
-			       debug-on-entry-args))))
-  (or (consp (symbol-function function))
-      (debug-convert-byte-code function))
-  (or (consp (symbol-function function))
-      (error "Definition of %s is not a list" function))
+			(apply ',(symbol-function function) 
+			       debug-on-entry-args)))
+    (when (eq (car-safe (symbol-function function)) 'autoload)
+      ;; The function is autoloaded.  Load its real definition.
+      (load (cadr (symbol-function function)) nil noninteractive nil t))
+    (when (or (not (consp (symbol-function function)))
+	      (and (eq (car (symbol-function function)) 'macro)
+		   (not (consp (cdr (symbol-function function))))))
+      ;; The function is byte-compiled.  Create a wrapper in which
+      ;; we can add the debug call.
+      (debug-convert-byte-code function)))
+  (unless (consp (symbol-function function))
+    (error "Definition of %s is not a list" function))
   (fset function (debug-on-entry-1 function t))
-  (or (memq function debug-function-list)
-      (push function debug-function-list))
+  (unless (memq function debug-function-list)
+    (push function debug-function-list))
   function)
 
 ;;;###autoload
@@ -665,45 +671,52 @@
 	   (if name (intern name)))))
   (if (and function (not (string= function "")))
       (progn
-	(let ((f (debug-on-entry-1 function nil)))
+	(let ((defn (debug-on-entry-1 function nil)))
 	  (condition-case nil
-	      (if (and (equal (nth 1 f) '(&rest debug-on-entry-args))
-		       (eq (car (nth 3 f)) 'apply))
-		  ;; `f' is a wrapper introduced in debug-on-entry.
-		  ;; Get rid of it since we don't need it any more.
-		  (setq f (nth 1 (nth 1 (nth 3 f)))))
+	      (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args))
+			 (eq (car (nth 3 defn)) 'apply))
+		;; `defn' is a wrapper introduced in debug-on-entry.
+		;; Get rid of it since we don't need it any more.
+		(setq defn (nth 1 (nth 1 (nth 3 defn)))))
 	    (error nil))
-	  (fset function f))
+	  (fset function defn))
 	(setq debug-function-list (delq function debug-function-list))
 	function)
     (message "Cancelling debug-on-entry for all functions")
     (mapcar 'cancel-debug-on-entry debug-function-list)))
 
 (defun debug-convert-byte-code (function)
-  (let ((defn (symbol-function function)))
-    (if (not (consp defn))
-	;; Assume a compiled code object.
-	(let* ((contents (append defn nil))
-	       (body
-		(list (list 'byte-code (nth 1 contents)
-			    (nth 2 contents) (nth 3 contents)))))
-	  (if (nthcdr 5 contents)
-	      (setq body (cons (list 'interactive (nth 5 contents)) body)))
-	  (if (nth 4 contents)
-	      ;; Use `documentation' here, to get the actual string,
-	      ;; in case the compiled function has a reference
-	      ;; to the .elc file.
-	      (setq body (cons (documentation function) body)))
-	  (fset function (cons 'lambda (cons (car contents) body)))))))
+  (let* ((defn (symbol-function function))
+	 (macro (eq (car-safe defn) 'macro)))
+    (when macro (setq defn (cdr defn)))
+    (unless (consp defn)
+      ;; Assume a compiled code object.
+      (let* ((contents (append defn nil))
+	     (body
+	      (list (list 'byte-code (nth 1 contents)
+			  (nth 2 contents) (nth 3 contents)))))
+	(if (nthcdr 5 contents)
+	    (setq body (cons (list 'interactive (nth 5 contents)) body)))
+	(if (nth 4 contents)
+	    ;; Use `documentation' here, to get the actual string,
+	    ;; in case the compiled function has a reference
+	    ;; to the .elc file.
+	    (setq body (cons (documentation function) body)))
+	(setq defn (cons 'lambda (cons (car contents) body))))
+      (when macro (setq defn (cons 'macro defn)))
+      (fset function defn))))
 
 (defun debug-on-entry-1 (function flag)
   (let* ((defn (symbol-function function))
 	 (tail defn))
-    (if (subrp tail)
-	(error "%s is a built-in function" function)
-      (if (eq (car tail) 'macro) (setq tail (cdr tail)))
-      (if (eq (car tail) 'lambda) (setq tail (cdr tail))
-	(error "%s not user-defined Lisp function" function))
+    (when (eq (car-safe tail) 'macro) 
+      (setq tail (cdr tail)))
+    (if (not (eq (car-safe tail) 'lambda))
+	;; Only signal an error when we try to set debug-on-entry.
+	;; When we try to clear debug-on-entry, we are now done.
+	(when flag
+	  (error "%s is not a user-defined Lisp function" function))
+      (setq tail (cdr tail))
       ;; Skip the docstring.
       (when (and (stringp (cadr tail)) (cddr tail))
 	(setq tail (cdr tail)))
@@ -714,8 +727,8 @@
 	;; Add/remove debug statement as needed.
 	(if flag
 	    (setcdr tail (cons '(implement-debug-on-entry) (cdr tail)))
-	  (setcdr tail (cddr tail))))
-      defn)))
+	  (setcdr tail (cddr tail)))))
+    defn))
 
 (defun debugger-list-functions ()
   "Display a list of all the functions now set to debug on entry."
--- a/lisp/emacs-lisp/lisp-mode.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emacs-lisp/rx.el	Thu Mar 31 09:58:14 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/cua-base.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emulation/cua-base.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1016,7 +1016,7 @@
 	(scroll-down arg)
       (beginning-of-buffer (goto-char (point-min)))))))
 
-(put 'cua-scroll-up 'CUA 'move)
+(put 'cua-scroll-down 'CUA 'move)
 
 ;;; Cursor indications
 
--- a/lisp/emulation/vi.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emulation/vi.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/emulation/vip.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/eshell/esh-io.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/eshell/esh-var.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/files.el	Thu Mar 31 09:58:14 2005 +0000
@@ -928,20 +928,31 @@
 (defvar find-file-default nil
   "Used within `find-file-read-args'.")
 
+(defmacro minibuffer-with-setup-hook (fun &rest body)
+  "Add FUN to `minibuffer-setup-hook' while executing BODY.
+BODY should use the minibuffer at most once.
+Recursive uses of the minibuffer will not be affected."
+  (declare (indent 1) (debug t))
+  (let ((hook (make-symbol "setup-hook")))
+    `(let ((,hook
+	    (lambda ()
+	      ;; Clear out this hook so it does not interfere
+	      ;; with any recursive minibuffer usage.
+	      (remove-hook 'minibuffer-setup-hook ,hook)
+	      (,fun))))
+       (unwind-protect
+	   (progn
+	     (add-hook 'minibuffer-setup-hook ,hook)
+	     ,@body)
+	 (remove-hook 'minibuffer-setup-hook ,hook)))))
+
 (defun find-file-read-args (prompt mustmatch)
   (list (let ((find-file-default
 	       (and buffer-file-name
-		    (abbreviate-file-name buffer-file-name)))
-	      (munge-default-fun
-	       (lambda ()
-		 (setq minibuffer-default find-file-default)
-		 ;; Clear out this hook so it does not interfere
-		 ;; with any recursive minibuffer usage.
-		 (pop minibuffer-setup-hook)))
-	      (minibuffer-setup-hook
-	       minibuffer-setup-hook))
-	  (add-hook 'minibuffer-setup-hook munge-default-fun)
-	  (read-file-name prompt nil default-directory mustmatch))
+		    (abbreviate-file-name buffer-file-name))))
+	  (minibuffer-with-setup-hook
+	      (lambda () (setq minibuffer-default find-file-default))
+	    (read-file-name prompt nil default-directory mustmatch)))
 	t))
 
 (defun find-file (filename &optional wildcards)
@@ -1777,8 +1788,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 +3433,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/filesets.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,6 @@
 ;;; filesets.el --- handle group of files
 
-;; Copyright (C) 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2005  Free Software Foundation, Inc.
 
 ;; Author: Thomas Link <t.link@gmx.at>
 ;; Maintainer: FSF
@@ -304,31 +304,26 @@
   :type 'sexp
   :group 'filesets)
 
-(if filesets-running-xemacs
-    (progn
-      (defcustom filesets-menu-path nil
-	"*The menu under which the filesets menu should be inserted.
-XEmacs specific; see `add-submenu' for documentation."
-	:set (function filesets-set-default)
-	:type 'sexp
-	:group 'filesets)
+(defcustom filesets-menu-path nil
+  "*The menu under which the filesets menu should be inserted.
+See `add-submenu' for documentation."
+  :set (function filesets-set-default)
+  :type 'sexp
+  :group 'filesets)
 
-      (defcustom filesets-menu-before "File"
-	"*The name of a menu before which this menu should be added.
-XEmacs specific; see `add-submenu' for documentation."
-	:set (function filesets-set-default)
-	:type 'sexp
-	:group 'filesets)
+(defcustom filesets-menu-before "File"
+  "*The name of a menu before which this menu should be added.
+See `add-submenu' for documentation."
+  :set (function filesets-set-default)
+  :type 'sexp
+  :group 'filesets)
 
-      (defcustom filesets-menu-in-menu nil
-	"*Use that instead of `current-menubar' as the menu to change.
-XEmacs specific; see `add-submenu' for documentation."
-	:set (function filesets-set-default)
-	:type 'sexp
-	:group 'filesets))
-  (defvar filesets-menu-path nil)
-  (defvar filesets-menu-before nil)
-  (defvar filesets-menu-in-menu nil))
+(defcustom filesets-menu-in-menu nil
+  "*Use that instead of `current-menubar' as the menu to change.
+See `add-submenu' for documentation."
+  :set (function filesets-set-default)
+  :type 'sexp
+  :group 'filesets)
 
 (defcustom filesets-menu-shortcuts-flag t
   "*Non-nil means to prepend menus with hopefully unique shortcuts."
@@ -351,7 +346,7 @@
 (defcustom filesets-menu-cache-file
   (if filesets-running-xemacs
       "~/.xemacs/filesets-cache.el"
-      "~/.filesets-cache.el")
+      "~/.emacs.d/filesets-cache.el")
   "*File to be used for saving the filesets menu between sessions.
 Set this to \"\", to disable caching of menus.
 Don't forget to check out `filesets-menu-ensure-use-cached'."
@@ -1070,9 +1065,7 @@
 ;;; Emacs compatibility
 (eval-and-compile
   (if filesets-running-xemacs
-      (progn
-	(fset 'filesets-error 'error)
-	(fset 'filesets-add-submenu 'add-submenu))
+      (fset 'filesets-error 'error)
 
     (require 'easymenu)
 
@@ -1080,12 +1073,6 @@
       "`error' wrapper."
       (error (mapconcat 'identity args " ")))
 
-    ;; This should work for 21.1 Emacs
-    (defun filesets-add-submenu (menu-path submenu &optional
-					   before in-menu)
-      "`easy-menu-define' wrapper."
-      (easy-menu-define
-	filesets-submenu global-map "Filesets menu" submenu))
     ))
 
 (defun filesets-filter-dir-names (lst &optional negative)
@@ -2339,7 +2326,7 @@
       (filesets-menu-cache-file-save-maybe)))
   (let ((cb (current-buffer)))
     (when (not (member cb filesets-updated-buffers))
-      (filesets-add-submenu
+      (add-submenu
        filesets-menu-path
        `(,filesets-menu-name
 	 ("# Filesets"
@@ -2496,6 +2483,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/follow.el	Thu Mar 31 09:58:14 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/font-lock.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/font-lock.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1097,7 +1097,7 @@
 	  ((error quit) (message "Fontifying block...%s" error-data)))))))
 
 (if (boundp 'facemenu-keymap)
-    (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block))
+    (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block))
 
 ;;; End of Fontification functions.
 
--- a/lisp/generic-x.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/generic-x.el	Thu Mar 31 09:58:14 2005 +0000
@@ -324,7 +324,7 @@
      (generic-make-keywords-list
       '("for"
 	"if")
-      'font-lock-keyword-face "^[@ \t]*")
+      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
@@ -334,7 +334,7 @@
 	"errorlevel"
 	"goto"
 	"not")
-      'font-lock-keyword-face)
+      font-lock-keyword-face)
      ;; These are built-in commands.  Only frequently-used ones are listed.
      (generic-make-keywords-list
       '("CALL"	    "call"	 "Call"
@@ -352,7 +352,7 @@
 	"SET"	    "set"	 "Set"
 	"START"	    "start"	 "Start"
 	"SHIFT"	    "shift"	 "Shift")
-      'font-lock-builtin-face "[ \t|\n]")
+      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)
@@ -410,11 +410,11 @@
 ;; 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)
@@ -427,7 +427,7 @@
 	comment-start-skip "[Rr][Ee][Mm] *")
   (set-syntax-table bat-generic-mode-syntax-table)
   ;; Make keywords case-insensitive
-  (setq font-lock-defaults '(generic-font-lock-defaults nil t))
+  (setq font-lock-defaults '(generic-font-lock-keywords nil t))
   (use-local-map bat-generic-mode-keymap)))
 
 ;;; Mailagent
@@ -441,13 +441,12 @@
   '(("^\\(\\sw+\\)\\s-*="         1 font-lock-variable-name-face)
     ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face))
   '("\\.rules\\'")
-  '(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)))))
+  (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)
@@ -752,13 +751,13 @@
 	"FILETYPE"
 	"FILEVERSION"
 	"PRODUCTVERSION")
-      'font-lock-type-face)
+      font-lock-type-face)
      (generic-make-keywords-list
       '("BEGIN"
 	"BLOCK"
 	"END"
 	"VALUE")
-      'font-lock-function-name-face)
+      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\\)\\>"
@@ -1375,19 +1374,19 @@
      ;; system variables
      (generic-make-keywords-list
       installshield-system-variables-list
-      'font-lock-variable-name-face "[^_]" "[^_]")
+      font-lock-variable-name-face "[^_]" "[^_]")
      ;; system functions
      (generic-make-keywords-list
       installshield-system-functions-list
-      'font-lock-function-name-face "[^_]" "[^_]")
+      font-lock-function-name-face "[^_]" "[^_]")
      ;; type keywords
      (generic-make-keywords-list
       installshield-types-list
-      'font-lock-type-face "[^_]" "[^_]")
+      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?
+      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.")
@@ -1429,9 +1428,11 @@
     "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)))
   '("\\.mailrc\\'")
@@ -1569,32 +1570,34 @@
 	    '((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...
-    ("[ \t]+$" . show-tabs-space-face)
-    ;; ...embedded tabs
-    ("[^\n\t]\\(\t+\\)" (1 show-tabs-tab-face))))
+(eval-when-compile
 
-(defvar show-tabs-generic-mode-font-lock-defaults-2
+(defconst show-tabs-generic-mode-font-lock-defaults-1
   '(;; trailing spaces must come before...
-    ("[ \t]+$" . show-tabs-space-face)
+    ("[ \t]+$" . 'show-tabs-space-face)
+    ;; ...embedded tabs
+    ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face))))
+
+(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)
@@ -1602,7 +1605,7 @@
 (define-generic-mode show-tabs-generic-mode
   nil ;; no comment char
   nil ;; no keywords
-  show-tabs-generic-mode-font-lock-defaults-1
+  (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1)
   nil ;; no auto-mode-alist
   ;; '(show-tabs-generic-mode-hook-fun)
   nil
@@ -1701,7 +1704,7 @@
    ;; Make keywords case-insensitive
    (function
     (lambda()
-      (setq font-lock-defaults '(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
@@ -1745,7 +1748,7 @@
    ;; Make keywords case-insensitive
    (function
     (lambda()
-      (setq font-lock-defaults '(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
--- a/lisp/generic.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/generic.el	Thu Mar 31 09:58:14 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,7 +401,7 @@
 	      (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)
--- a/lisp/gnus/ChangeLog	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,98 @@
+2005-03-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* message.el (message-resend): Bind rfc2047-encode-encoded-words.
+
+	* mm-util.el (mm-replace-in-string): New function.
+	(mm-xemacs-find-mime-charset-1): Ignore errors while loading
+	latin-unity, which cannot be used with XEmacs 21.1.
+
+	* rfc2047.el (rfc2047-encode-function-alist): Rename from
+	rfc2047-encoding-function-alist in order to avoid conflicting with
+	the old version.
+	(rfc2047-encode-message-header): Remove useless goto-char.
+	(rfc2047-encodable-p): Don't move point.
+	(rfc2047-syntax-table): Treat `(' and `)' as is.
+	(rfc2047-encode-region): Concatenate words containing non-ASCII
+	characters in structured fields; don't encode space-delimited
+	ASCII words even in unstructured fields; don't break words at
+	char-category boundaries; encode encoded words in structured
+	fields; treat text within parentheses as special; show the
+	original text when error has occurred; move point to the end of
+	the region after encoding, suggested by IRIE Tetsuya
+	<irie@t.email.ne.jp>; treat backslash-quoted characters as
+	non-special; check carefully whether to encode special characters;
+	fix some kind of misconfigured headers; signal a real error if
+	debug-on-quit or debug-on-error is non-nil; don't infloop,
+	suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume
+	the close parenthesis may be included in the encoded word; encode
+	bogus delimiters.
+	(rfc2047-encode-string): Use mm-with-multibyte-buffer.
+	(rfc2047-encode-max-chars): New variable.
+	(rfc2047-encode-1): New function.
+	(rfc2047-encode): Use it; encode text so that it occupies the
+	maximum width within 76-column; work correctly on Q encoding for
+	iso-2022-* charsets; fold the line before encoding; don't append a
+	space if the encoded word includes close parenthesis.
+	(rfc2047-fold-region): Use existing whitespace for LWSP; make it
+	sure not to break a line just after the header name.
+	(rfc2047-b-encode-region): Remove.
+	(rfc2047-b-encode-string): New function.
+	(rfc2047-q-encode-region): Remove.
+	(rfc2047-q-encode-string): New function.
+	(rfc2047-encode-parameter): New function.
+	(rfc2047-encoded-word-regexp): Don't use shy group.
+	(rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
+	(rfc2047-parse-and-decode): Ditto.
+	(rfc2047-decode): Treat the ascii coding-system as raw-text by
+	default.
+
+2005-03-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+	* rfc2047.el (rfc2047-encode-encoded-words): New variable.
+	(rfc2047-field-value): Strip props.
+	(rfc2047-encode-message-header): Disabled header folding -- not
+	all headers can be folded, and this should be done by the message
+	composition mode.  Probably.  I think.
+	(rfc2047-encodable-p): Say that =? needs encoding.
+	(rfc2047-encode-region): Encode =? strings.
+
+2005-03-25  Jesper Harder  <harder@ifa.au.dk>
+
+	* rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
+	language tags; remove unnecessary '+'.  Reported by Stefan Wiens
+	<s.wi@gmx.net>.
+	(rfc2047-decode-string): Don't cons a string unnecessarily.
+	(rfc2047-parse-and-decode, rfc2047-decode): Use a character for
+	the encoding to avoid consing a string.
+	(rfc2047-decode): Use mm-subst-char-in-string instead of
+	mm-replace-chars-in-string.
+
+2005-03-25  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+	* rfc2047.el (rfc2047-encode): Use uppercase letters to specify
+	encodings of MIME-encoded words, in order to improve
+	interoperability with several broken MUAs.
+
+2005-03-21  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and
+	pass it to `gnus-browse-read-group'.
+	(gnus-browse-read-group): Add NUMBER argument and pass it to
+	`gnus-group-read-ephemeral-group'.
+
+	* gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER
+	argument and pass it to `gnus-group-read-group'.
+
+2005-03-19  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* mm-util.el (mm-xemacs-find-mime-charset): Only call
+	mm-xemacs-find-mime-charset-1 if we have the mule feature
+	available at runtime.
+
+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):
@@ -614,7 +709,7 @@
 	unless plugged.  Disable the agent so that an open failure causes
 	an error.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Reiner Steib  <Reiner.Steib@gmx.de>
+2004-10-18  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-agent.el (gnus-agent-fetched-hook): Add :version.
 	(gnus-agent-go-online): Change :version.
@@ -656,21 +751,21 @@
 	(gnus-convert-mark-converter-prompt)
 	(gnus-convert-converter-needs-prompt): Fix use of property list.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 	* gnus-start.el (gnus-get-unread-articles-in-group): Don't do
 	stuff for non-living groups.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 	* gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
 	(gnus-agent-regenerate-group): Using nil messages aren't valid.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 	* gnus-agent.el (gnus-agent-read-agentview):
 	Inline gnus-uncompress-range.
@@ -687,7 +782,7 @@
 	message-send-mail-function.  The change makes the agent real-time
 	responsive to user changes to message-send-mail-function.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Reiner Steib  <Reiner.Steib@gmx.de>
+2004-10-18  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-start.el (gnus-get-unread-articles): Fix last commit.
 
@@ -728,12 +823,12 @@
 
 	* gnus-util.el (gnus-rename-file): New function.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-agent.el (gnus-agent-regenerate-group): Activate the group
 	when the group's active is not available.
 
-2004-10-18  Kevin Greiner  <kevin.greiner@compsol.cc> for Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
 	error.
--- a/lisp/gnus/gnus-group.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/gnus-group.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1984,7 +1984,8 @@
 (defun gnus-group-read-ephemeral-group (group method &optional activate
 					      quit-config request-only
 					      select-articles
-					      parameters)
+					      parameters
+					      number)
   "Read GROUP from METHOD as an ephemeral group.
 If ACTIVATE, request the group first.
 If QUIT-CONFIG, use that window configuration when exiting from the
@@ -1992,6 +1993,7 @@
 If REQUEST-ONLY, don't actually read the group; just request it.
 If SELECT-ARTICLES, only select those articles.
 If PARAMETERS, use those as the group parameters.
+If NUMBER, fetch this number of articles.
 
 Return the name of the group if selection was successful."
   (interactive
@@ -2039,7 +2041,7 @@
 	  (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup)
 		      (gnus-fetch-old-headers
 		       gnus-fetch-old-ephemeral-headers))
-		  (gnus-group-read-group t t group select-articles))
+		  (gnus-group-read-group (or number t) t group select-articles))
 	    group)
 	;;(error nil)
 	(quit
--- a/lisp/gnus/gnus-srvr.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/gnus-srvr.el	Thu Mar 31 09:58:14 2005 +0000
@@ -851,23 +851,26 @@
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-browse-mode-hook))
 
-(defun gnus-browse-read-group (&optional no-article)
-  "Enter the group at the current line."
-  (interactive)
+(defun gnus-browse-read-group (&optional no-article number)
+  "Enter the group at the current line.
+If NUMBER, fetch this number of articles."
+  (interactive "P")
   (let ((group (gnus-browse-group-name)))
     (if (or (not (gnus-get-info group))
 	    (gnus-ephemeral-group-p group))
 	(unless (gnus-group-read-ephemeral-group
 		 group gnus-browse-current-method nil
-		 (cons (current-buffer) 'browse))
+		 (cons (current-buffer) 'browse)
+		 nil nil nil number)
 	  (error "Couldn't enter %s" group))
       (unless (gnus-group-read-group nil no-article group)
 	(error "Couldn't enter %s" group)))))
 
-(defun gnus-browse-select-group ()
-  "Select the current group."
-  (interactive)
-  (gnus-browse-read-group 'no))
+(defun gnus-browse-select-group (&optional number)
+  "Select the current group.
+If NUMBER, fetch this number of articles."
+  (interactive "P")
+  (gnus-browse-read-group 'no number))
 
 (defun gnus-browse-next-group (n)
   "Go to the next group."
--- a/lisp/gnus/message.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/message.el	Thu Mar 31 09:58:14 2005 +0000
@@ -6364,7 +6364,8 @@
 	(replace-match "X-From-Line: "))
       ;; Send it.
       (let ((message-inhibit-body-encoding t)
-	    message-required-mail-headers)
+	    message-required-mail-headers
+	    rfc2047-encode-encoded-words)
 	(message-send-mail))
       (kill-buffer (current-buffer)))
     (message "Resending message to %s...done" address)))
--- a/lisp/gnus/mm-util.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/mm-util.el	Thu Mar 31 09:58:14 2005 +0000
@@ -86,6 +86,32 @@
      (multibyte-char-to-unibyte . identity))))
 
 (eval-and-compile
+  (cond
+   ((fboundp 'replace-in-string)
+    (defalias 'mm-replace-in-string 'replace-in-string))
+   ((fboundp 'replace-regexp-in-string)
+    (defun mm-replace-in-string (string regexp newtext &optional literal)
+      "Replace all matches for REGEXP with NEWTEXT in STRING.
+If LITERAL is non-nil, insert NEWTEXT literally.  Return a new
+string containing the replacements.
+
+This is a compatibility function for different Emacsen."
+      (replace-regexp-in-string regexp newtext string nil literal)))
+   (t
+    (defun mm-replace-in-string (string regexp newtext &optional literal)
+      "Replace all matches for REGEXP with NEWTEXT in STRING.
+If LITERAL is non-nil, insert NEWTEXT literally.  Return a new
+string containing the replacements.
+
+This is a compatibility function for different Emacsen."
+      (let ((start 0) tail)
+	(while (string-match regexp string start)
+	  (setq tail (- (length string) (match-end 0)))
+	  (setq string (replace-match newtext nil literal string))
+	  (setq start (- (length string) tail))))
+      string))))
+
+(eval-and-compile
   (defalias 'mm-char-or-char-int-p
     (cond
      ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
@@ -555,7 +581,7 @@
 
     ;; Load the Latin Unity library, if available.
     (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
-      (require 'latin-unity))
+      (ignore-errors (require 'latin-unity)))
 
     ;; Now, can we use it?
     (if (featurep 'latin-unity)
@@ -600,7 +626,7 @@
 
 (defmacro mm-xemacs-find-mime-charset (begin end)
   (when (featurep 'xemacs)
-    `(mm-xemacs-find-mime-charset-1 ,begin ,end)))
+    `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end))))
 
 (defun mm-find-mime-charset-region (b e &optional hack-charsets)
   "Return the MIME charsets needed to encode the region between B and E.
--- a/lisp/gnus/nnmaildir.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/nnmaildir.el	Thu Mar 31 09:58:14 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/gnus/rfc2047.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/gnus/rfc2047.el	Thu Mar 31 09:58:14 2005 +0000
@@ -119,12 +119,15 @@
 Valid encodings are nil, `Q' and `B'.  These indicate binary (no) encoding,
 quoted-printable and base64 respectively.")
 
-(defvar rfc2047-encoding-function-alist
-  '((Q . rfc2047-q-encode-region)
-    (B . rfc2047-b-encode-region)
-    (nil . ignore))
+(defvar rfc2047-encode-function-alist
+  '((Q . rfc2047-q-encode-string)
+    (B . rfc2047-b-encode-string)
+    (nil . identity))
   "Alist of RFC2047 encodings to encoding functions.")
 
+(defvar rfc2047-encode-encoded-words t
+  "Whether encoded words should be encoded again.")
+
 ;;;
 ;;; Functions for encoding RFC2047 messages
 ;;;
@@ -166,7 +169,7 @@
     (save-restriction
       (rfc2047-narrow-to-field)
       (re-search-forward ":[ \t\n]*" nil t)
-      (buffer-substring (point) (point-max)))))
+      (buffer-substring-no-properties (point) (point-max)))))
 
 (defvar rfc2047-encoding-type 'address-mime
   "The type of encoding done by `rfc2047-encode-region'.
@@ -186,24 +189,25 @@
 	  (rfc2047-narrow-to-field)
 	  (if (not (rfc2047-encodable-p))
 	      (prog1
-		(if (and (eq (mm-body-7-or-8) '8bit)
-			 (mm-multibyte-p)
-			 (mm-coding-system-p
-			  (car message-posting-charset)))
-		    ;; 8 bit must be decoded.
-		    (mm-encode-coding-region
-		     (point-min) (point-max)
-		     (mm-charset-to-coding-system
-		      (car message-posting-charset))))
+		  (if (and (eq (mm-body-7-or-8) '8bit)
+			   (mm-multibyte-p)
+			   (mm-coding-system-p
+			    (car message-posting-charset)))
+		      ;; 8 bit must be decoded.
+		      (mm-encode-coding-region
+		       (point-min) (point-max)
+		       (mm-charset-to-coding-system
+			(car message-posting-charset))))
 		;; No encoding necessary, but folding is nice
-		(rfc2047-fold-region
-		 (save-excursion
-		   (goto-char (point-min))
-		   (skip-chars-forward "^:")
-		   (when (looking-at ": ")
-		     (forward-char 2))
-		   (point))
-		 (point-max)))
+		(when nil
+		  (rfc2047-fold-region
+		   (save-excursion
+		     (goto-char (point-min))
+		     (skip-chars-forward "^:")
+		     (when (looking-at ": ")
+		       (forward-char 2))
+		     (point))
+		   (point-max))))
 	    ;; We found something that may perhaps be encoded.
 	    (setq method nil
 		  alist rfc2047-header-encoding-alist)
@@ -213,7 +217,6 @@
 			(eq (car elem) t))
 		(setq alist nil
 		      method (cdr elem))))
-	    (goto-char (point-min))
 	    (re-search-forward "^[^:]+: *" nil t)
 	    (cond
 	     ((eq method 'address-mime)
@@ -267,8 +270,13 @@
   (require 'message)			; for message-posting-charset
   (let ((charsets
 	 (mm-find-mime-charset-region (point-min) (point-max))))
-    (and charsets
-	 (not (equal charsets (list (car message-posting-charset)))))))
+    (goto-char (point-min))
+    (or (and rfc2047-encode-encoded-words
+	     (prog1
+		 (search-forward "=?" nil t)
+	       (goto-char (point-min))))
+	(and charsets
+	     (not (equal charsets (list (car message-posting-charset))))))))
 
 ;; Use this syntax table when parsing into regions that may need
 ;; encoding.  Double quotes are string delimiters, backslash is
@@ -292,8 +300,8 @@
 			      table))))
     (modify-syntax-entry ?\\ "\\" table)
     (modify-syntax-entry ?\" "\"" table)
-    (modify-syntax-entry ?\( "." table)
-    (modify-syntax-entry ?\) "." table)
+    (modify-syntax-entry ?\( "(" table)
+    (modify-syntax-entry ?\) ")" table)
     (modify-syntax-entry ?\< "." table)
     (modify-syntax-entry ?\> "." table)
     (modify-syntax-entry ?\[ "." table)
@@ -310,183 +318,341 @@
 Dynamically bind `rfc2047-encoding-type' to change that."
   (save-restriction
     (narrow-to-region b e)
-    (if (eq 'mime rfc2047-encoding-type)
-	;; Simple case.  Treat as single word after any initial ASCII
-	;; part and before any tailing ASCII part.  The leading ASCII
-	;; is relevant for instance in Subject headers with `Re:' for
-	;; interoperability with non-MIME clients, and we might as
-	;; well avoid the tail too.
-	(progn
+    (let ((encodable-regexp (if rfc2047-encode-encoded-words
+				"[^\000-\177]+\\|=\\?"
+			      "[^\000-\177]+"))
+	  start				; start of current token
+	  end begin csyntax
+	  ;; Whether there's an encoded word before the current token,
+	  ;; either immediately or separated by space.
+	  last-encoded
+	  (orig-text (buffer-substring-no-properties b e)))
+      (if (eq 'mime rfc2047-encoding-type)
+	  ;; Simple case.  Continuous words in which all those contain
+	  ;; non-ASCII characters are encoded collectively.  Encoding
+	  ;; ASCII words, including `Re:' used in Subject headers, is
+	  ;; avoided for interoperability with non-MIME clients and
+	  ;; for making it easy to find keywords.
+	  (progn
+	    (goto-char (point-min))
+	    (while (progn (skip-chars-forward " \t\n")
+			  (not (eobp)))
+	      (setq start (point))
+	      (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)")
+			  (progn
+			    (setq end (match-end 0))
+			    (re-search-forward encodable-regexp end t)))
+		(goto-char end))
+	      (if (> (point) start)
+		  (rfc2047-encode start (point))
+		(goto-char end))))
+	;; `address-mime' case -- take care of quoted words, comments.
+	(with-syntax-table rfc2047-syntax-table
 	  (goto-char (point-min))
-	  ;; Does it need encoding?
-	  (skip-chars-forward "\000-\177")
-	  (unless (eobp)
-	    (skip-chars-backward "^ \n") ; beginning of space-delimited word
-	    (rfc2047-encode (point) (progn
-				      (goto-char e)
-				      (skip-chars-backward "\000-\177")
-				      (skip-chars-forward "^ \n")
-				      ;; end of space-delimited word
-				      (point)))))
-      ;; `address-mime' case -- take care of quoted words, comments.
-      (with-syntax-table rfc2047-syntax-table
-	(let ((start)			; start of current token
-	      end			; end of current token
-	      ;; Whether there's an encoded word before the current
-	      ;; token, either immediately or separated by space.
-	      last-encoded)
-	  (goto-char (point-min))
-	  (condition-case nil		; in case of unbalanced quotes
+	  (condition-case err		; in case of unbalanced quotes
 	      ;; Look for rfc2822-style: sequences of atoms, quoted
 	      ;; strings, specials, whitespace.  (Specials mustn't be
 	      ;; encoded.)
 	      (while (not (eobp))
+		;; Skip whitespace.
+		(skip-chars-forward " \t\n")
 		(setq start (point))
-		;; Skip whitespace.
-		(unless (= 0 (skip-chars-forward " \t\n"))
-		  (setq start (point)))
 		(cond
 		 ((not (char-after)))	; eob
 		 ;; else token start
-		 ((eq ?\" (char-syntax (char-after)))
+		 ((eq ?\" (setq csyntax (char-syntax (char-after))))
 		  ;; Quoted word.
 		  (forward-sexp)
 		  (setq end (point))
 		  ;; Does it need encoding?
 		  (goto-char start)
-		  (skip-chars-forward "\000-\177" end)
-		  (if (= end (point))
-		      (setq last-encoded  nil)
-		    ;; It needs encoding.  Strip the quotes first,
-		    ;; since encoded words can't occur in quotes.
-		    (goto-char end)
-		    (delete-backward-char 1)
-		    (goto-char start)
-		    (delete-char 1)
-		    (when last-encoded
-		      ;; There was a preceding quoted word.  We need
-		      ;; to include any separating whitespace in this
-		      ;; word to avoid it getting lost.
-		      (skip-chars-backward " \t")
-		      ;; A space is needed between the encoded words.
-		      (insert ? )
-		      (setq start (point)
-			    end (1+ end)))
-		    ;; Adjust the end position for the deleted quotes.
-		    (rfc2047-encode start (- end 2))
-		    (setq last-encoded t))) ; record that it was encoded
-		 ((eq ?. (char-syntax (char-after)))
+		  (if (re-search-forward encodable-regexp end 'move)
+		      ;; It needs encoding.  Strip the quotes first,
+		      ;; since encoded words can't occur in quotes.
+		      (progn
+			(goto-char end)
+			(delete-backward-char 1)
+			(goto-char start)
+			(delete-char 1)
+			(when last-encoded
+			  ;; There was a preceding quoted word.  We need
+			  ;; to include any separating whitespace in this
+			  ;; word to avoid it getting lost.
+			  (skip-chars-backward " \t")
+			  ;; A space is needed between the encoded words.
+			  (insert ? )
+			  (setq start (point)
+				end (1+ end)))
+			;; Adjust the end position for the deleted quotes.
+			(rfc2047-encode start (- end 2))
+			(setq last-encoded t)) ; record that it was encoded
+		    (setq last-encoded  nil)))
+		 ((eq ?. csyntax)
 		  ;; Skip other delimiters, but record that they've
 		  ;; potentially separated quoted words.
 		  (forward-char)
 		  (setq last-encoded nil))
+		 ((eq ?\) csyntax)
+		  (error "Unbalanced parentheses"))
+		 ((eq ?\( csyntax)
+		  ;; Look for the end of parentheses.
+		  (forward-list)
+		  ;; Encode text as an unstructured field.
+		  (let ((rfc2047-encoding-type 'mime))
+		    (rfc2047-encode-region (1+ start) (1- (point))))
+		  (skip-chars-forward ")"))
 		 (t		    ; normal token/whitespace sequence
 		  ;; Find the end.
-		  (forward-word 1)
-		  (skip-chars-backward " \t")
+		  ;; Skip one ASCII word, or encode continuous words
+		  ;; in which all those contain non-ASCII characters.
+		  (setq end nil)
+		  (while (not (or end (eobp)))
+		    (when (looking-at "[\000-\177]+")
+		      (setq begin (point)
+			    end (match-end 0))
+		      (when (progn
+			      (while (and (or (re-search-forward
+					       "[ \t\n]\\|\\Sw" end 'move)
+					      (setq end nil))
+					  (eq ?\\ (char-syntax (char-before))))
+				;; Skip backslash-quoted characters.
+				(forward-char))
+			      end)
+			(setq end (match-beginning 0))
+			(if rfc2047-encode-encoded-words
+			    (progn
+			      (goto-char begin)
+			      (when (search-forward "=?" end 'move)
+				(goto-char (match-beginning 0))
+				(setq end nil)))
+			  (goto-char end))))
+		    ;; Where the value nil of `end' means there may be
+		    ;; text to have to be encoded following the point.
+		    ;; Otherwise, the point reached to the end of ASCII
+		    ;; words separated by whitespace or a special char.
+		    (unless end
+		      (when (looking-at encodable-regexp)
+			(goto-char (setq begin (match-end 0)))
+			(while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)")
+				    (setq end (match-end 0))
+				    (progn
+				      (while (re-search-forward
+					      encodable-regexp end t))
+				      (< begin (point)))
+				    (goto-char begin)
+				    (or (not (re-search-forward "\\Sw" end t))
+					(progn
+					  (goto-char (match-beginning 0))
+					  nil)))
+			  (goto-char end))
+			(when (looking-at "[^ \t\n]+")
+			  (setq end (match-end 0))
+			  (if (re-search-forward "\\Sw+" end t)
+			      ;; There are special characters better
+			      ;; to be encoded so that MTAs may parse
+			      ;; them safely.
+			      (cond ((= end (point)))
+				    ((looking-at (concat "\\sw*\\("
+							 encodable-regexp
+							 "\\)"))
+				     (setq end nil))
+				    (t
+				     (goto-char (1- (match-end 0)))
+				     (unless (= (point) (match-beginning 0))
+				       ;; Separate encodable text and
+				       ;; delimiter.
+				       (insert " "))))
+			    (goto-char end)
+			    (skip-chars-forward " \t\n")
+			    (if (and (looking-at "[^ \t\n]+")
+				     (string-match encodable-regexp
+						   (match-string 0)))
+				(setq end nil)
+			      (goto-char end)))))))
+		  (skip-chars-backward " \t\n")
 		  (setq end (point))
-		  ;; Deal with encoding and leading space as for
-		  ;; quoted words.
 		  (goto-char start)
-		  (skip-chars-forward "\000-\177" end)
-		  (if (= end (point))
-		      (setq last-encoded  nil)
-		    (when last-encoded
-		      (goto-char start)
-		      (skip-chars-backward " \t")
-		      (insert ? )
-		      (setq start (point)
-			    end (1+ end)))
-		    (rfc2047-encode start end)
-		    (setq last-encoded t)))))
+		  (if (re-search-forward encodable-regexp end 'move)
+		      (progn
+			(unless (memq (char-before start) '(nil ?\t ? ))
+			  (if (progn
+				(goto-char start)
+				(skip-chars-backward "^ \t\n")
+				(and (looking-at "\\Sw+")
+				     (= (match-end 0) start)))
+			      ;; Also encode bogus delimiters.
+			      (setq start (point))
+			    ;; Separate encodable text and delimiter.
+			    (goto-char start)
+			    (insert " ")
+			    (setq start (1+ start)
+				  end (1+ end))))
+			(rfc2047-encode start end)
+			(setq last-encoded t))
+		    (setq last-encoded nil)))))
 	    (error
-	     (error "Invalid data for rfc2047 encoding: %s"
-		    (buffer-substring b e)))))))
-    (rfc2047-fold-region b (point))))
+	     (if (or debug-on-quit debug-on-error)
+		 (signal (car err) (cdr err))
+	       (error "Invalid data for rfc2047 encoding: %s"
+		      (mm-replace-in-string orig-text "[ \t\n]+" " "))))))))
+    (rfc2047-fold-region b (point))
+    (goto-char (point-max))))
 
 (defun rfc2047-encode-string (string)
   "Encode words in STRING.
 By default, the string is treated as containing addresses (see
 `rfc2047-encoding-type')."
-  (with-temp-buffer
+  (mm-with-multibyte-buffer
     (insert string)
     (rfc2047-encode-region (point-min) (point-max))
     (buffer-string)))
 
+(defvar rfc2047-encode-max-chars 76
+  "Maximum characters of each header line that contain encoded-words.
+If it is nil, encoded-words will not be folded.  Too small value may
+cause an error.  Don't change this for no particular reason.")
+
+(defun rfc2047-encode-1 (column string cs encoder start crest tail
+				&optional eword)
+  "Subroutine used by `rfc2047-encode'."
+  (cond ((string-equal string "")
+	 (or eword ""))
+	((not rfc2047-encode-max-chars)
+	 (concat start
+		 (funcall encoder (if cs
+				      (mm-encode-coding-string string cs)
+				    string))
+		 "?="))
+	((>= column rfc2047-encode-max-chars)
+	 (when eword
+	   (cond ((string-match "\n[ \t]+\\'" eword)
+		  ;; Reomove a superfluous empty line.
+		  (setq eword (substring eword 0 (match-beginning 0))))
+		 ((string-match "(+\\'" eword)
+		  ;; Break the line before the open parenthesis.
+		  (setq crest (concat crest (match-string 0 eword))
+			eword (substring eword 0 (match-beginning 0))))))
+	 (rfc2047-encode-1 (length crest) string cs encoder start " " tail
+			   (concat eword "\n" crest)))
+	(t
+	 (let ((index 0)
+	       (limit (1- (length string)))
+	       (prev "")
+	       next len)
+	   (while (and prev
+		       (<= index limit))
+	     (setq next (concat start
+				(funcall encoder
+					 (if cs
+					     (mm-encode-coding-string
+					      (substring string 0 (1+ index))
+					      cs)
+					   (substring string 0 (1+ index))))
+				"?=")
+		   len (+ column (length next)))
+	     (if (> len rfc2047-encode-max-chars)
+		 (setq next prev
+		       prev nil)
+	       (if (or (< index limit)
+		       (<= (+ len (or (string-match "\n" tail)
+				      (length tail)))
+			   rfc2047-encode-max-chars))
+		   (setq prev next
+			 index (1+ index))
+		 (if (string-match "\\`)+" tail)
+		     ;; Break the line after the close parenthesis.
+		     (setq tail (concat (substring tail 0 (match-end 0))
+					"\n "
+					(substring tail (match-end 0)))
+			   prev next
+			   index (1+ index))
+		   (setq next prev
+			 prev nil)))))
+	   (if (> index limit)
+	       (concat eword next tail)
+	     (if (= 0 index)
+		 (if (and eword
+			  (string-match "(+\\'" eword))
+		     (setq crest (concat crest (match-string 0 eword))
+			   eword (substring eword 0 (match-beginning 0)))
+		   (setq eword (concat eword next)))
+	       (setq crest " "
+		     eword (concat eword next)))
+	     (when (string-match "\n[ \t]+\\'" eword)
+	       ;; Reomove a superfluous empty line.
+	       (setq eword (substring eword 0 (match-beginning 0))))
+	     (rfc2047-encode-1 (length crest) (substring string index)
+			       cs encoder start " " tail
+			       (concat eword "\n" crest)))))))
+
 (defun rfc2047-encode (b e)
   "Encode the word(s) in the region B to E.
-By default, the region is treated as containing addresses (see
-`rfc2047-encoding-type')."
-  (let* ((mime-charset (mm-find-mime-charset-region b e))
-	 (cs (if (> (length mime-charset) 1)
-		 ;; Fixme: Instead of this, try to break region into
-		 ;; parts that can be encoded separately.
-		 (error "Can't rfc2047-encode `%s'"
-			(buffer-substring b e))
-	       (setq mime-charset (car mime-charset))
-	       (mm-charset-to-coding-system mime-charset)))
-	 ;; Fixme: Better, calculate the number of non-ASCII
-	 ;; characters, at least for 8-bit charsets.
-	 (encoding (or (cdr (assq mime-charset
+Point moves to the end of the region."
+  (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii)))
+	cs encoding tail crest eword)
+    (cond ((> (length mime-charset) 1)
+	   (error "Can't rfc2047-encode `%s'"
+		  (buffer-substring-no-properties b e)))
+	  ((= (length mime-charset) 1)
+	   (setq mime-charset (car mime-charset)
+		 cs (mm-charset-to-coding-system mime-charset))
+	   (unless (and (mm-multibyte-p)
+			(mm-coding-system-p cs))
+	     (setq cs nil))
+	   (save-restriction
+	     (narrow-to-region b e)
+	     (setq encoding
+		   (or (cdr (assq mime-charset
 				  rfc2047-charset-encoding-alist))
 		       ;; For the charsets that don't have a preferred
 		       ;; encoding, choose the one that's shorter.
-		       (save-restriction
-			 (narrow-to-region b e)
-			 (if (eq (rfc2047-qp-or-base64) 'base64)
-			     'B
-			   'Q))))
-	 (start (concat
-		 "=?" (downcase (symbol-name mime-charset)) "?"
-		 (downcase (symbol-name encoding)) "?"))
-	 (factor (case mime-charset
-		   ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1)
-		   ((big5 gb2312 euc-kr) 2)
-		   (utf-8 4)
-		   (t 8)))
-	 (pre (- b (save-restriction
-		     (widen)
-		     (rfc2047-point-at-bol))))
-	 ;; encoded-words must not be longer than 75 characters,
-	 ;; including charset, encoding etc.  This leaves us with
-	 ;; 75 - (length start) - 2 - 2 characters.  The last 2 is for
-	 ;; possible base64 padding.  In the worst case (iso-2022-*)
-	 ;; each character expands to 8 bytes which is expanded by a
-	 ;; factor of 4/3 by base64 encoding.
-	 (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0))))
-	 ;; Limit line length to 76 characters.
-	 (length1 (max 1 (floor (- 76 (length start) 4 pre)
-				(* factor (/ 4.0 3.0)))))
-	 (first t))
-    (if mime-charset
-	(save-restriction
-	  (narrow-to-region b e)
-	  (when (eq encoding 'B)
-	    ;; break into lines before encoding
-	    (goto-char (point-min))
-	    (while (not (eobp))
-	      (if first
-		  (progn
-		    (goto-char (min (point-max) (+ length1 (point))))
-		    (setq first nil))
-		(goto-char (min (point-max) (+ length (point)))))
-	      (unless (eobp)
-		(insert ?\n)))
-	    (setq first t))
-	  (if (and (mm-multibyte-p)
-		   (mm-coding-system-p cs))
-	      (mm-encode-coding-region (point-min) (point-max) cs))
-	  (funcall (cdr (assq encoding rfc2047-encoding-function-alist))
-		   (point-min) (point-max))
-	  (goto-char (point-min))
-	  (while (not (eobp))
-	    (unless first
-	      (insert ? ))
-	    (setq first nil)
-	    (insert start)
-	    (end-of-line)
-	    (insert "?=")
-	    (forward-line 1))))))
+		       (if (eq (rfc2047-qp-or-base64) 'base64)
+			   'B
+			 'Q)))
+	     (widen)
+	     (goto-char e)
+	     (skip-chars-forward "^ \t\n")
+	     ;; `tail' may contain a close parenthesis.
+	     (setq tail (buffer-substring-no-properties e (point)))
+	     (goto-char b)
+	     (setq b (point-marker)
+		   e (set-marker (make-marker) e))
+	     (rfc2047-fold-region (rfc2047-point-at-bol) b)
+	     (goto-char b)
+	     (skip-chars-backward "^ \t\n")
+	     (unless (= 0 (skip-chars-backward " \t"))
+	       ;; `crest' may contain whitespace and an open parenthesis.
+	       (setq crest (buffer-substring-no-properties (point) b)))
+	     (setq eword (rfc2047-encode-1
+			  (- b (rfc2047-point-at-bol))
+			  (mm-replace-in-string
+			   (buffer-substring-no-properties b e)
+			   "\n\\([ \t]?\\)" "\\1")
+			  cs
+			  (or (cdr (assq encoding
+					 rfc2047-encode-function-alist))
+			      'identity)
+			  (concat "=?" (downcase (symbol-name mime-charset))
+				  "?" (upcase (symbol-name encoding)) "?")
+			  (or crest " ")
+			  tail))
+	     (delete-region (if (eq (aref eword 0) ?\n)
+				(if (bolp)
+				    ;; The line was folded before encoding.
+				    (1- (point))
+				  (point))
+			      (goto-char b))
+			    (+ e (length tail)))
+	     ;; `eword' contains `crest' and `tail'.
+	     (insert eword)
+	     (set-marker b nil)
+	     (set-marker e nil)
+	     (unless (or (/= 0 (length tail))
+			 (eobp)
+			 (looking-at "[ \t\n)]"))
+	       (insert " "))))
+	  (t
+	   (goto-char e)))))
 
 (defun rfc2047-fold-field ()
   "Fold the current header field."
@@ -512,6 +678,7 @@
 	  (goto-char (or break qword-break))
 	  (setq break nil
 		qword-break nil)
+	  (skip-chars-backward " \t")
 	  (if (looking-at "[ \t]")
 	      (insert ?\n)
 	    (insert "\n "))
@@ -533,10 +700,8 @@
 	  (forward-char 1))
 	 ((memq (char-after) '(?  ?\t))
 	  (skip-chars-forward " \t")
-	  (if first
-	      ;; Don't break just after the header name.
-	      (setq first nil)
-	    (setq break (1- (point)))))
+	  (unless first ;; Don't break just after the header name.
+	    (setq break (point))))
 	 ((not break)
 	  (if (not (looking-at "=\\?[^=]"))
 	      (if (eq (char-after) ?=)
@@ -547,15 +712,17 @@
 	      (setq qword-break (point)))
 	    (skip-chars-forward "^ \t\n\r")))
 	 (t
-	  (skip-chars-forward "^ \t\n\r"))))
+	  (skip-chars-forward "^ \t\n\r")))
+	(setq first nil))
       (when (and (or break qword-break)
 		 (> (- (point) bol) 76))
 	(goto-char (or break qword-break))
 	(setq break nil
 	      qword-break nil)
-	  (if (looking-at "[ \t]")
-	      (insert ?\n)
-	    (insert "\n "))
+	(if (or (> 0 (skip-chars-backward " \t"))
+		(looking-at "[ \t]"))
+	    (insert ?\n)
+	  (insert "\n "))
 	(setq bol (1- (point)))
 	;; Don't break before the first non-LWSP characters.
 	(skip-chars-forward " \t")
@@ -590,48 +757,48 @@
 	(setq eol (rfc2047-point-at-eol))
 	(forward-line 1)))))
 
-(defun rfc2047-b-encode-region (b e)
-  "Base64-encode the header contained in region B to E."
-  (save-restriction
-    (narrow-to-region (goto-char b) e)
-    (while (not (eobp))
-      (base64-encode-region (point) (progn (end-of-line) (point)) t)
-      (if (and (bolp) (eolp))
-	  (delete-backward-char 1))
-      (forward-line))))
+(defun rfc2047-b-encode-string (string)
+  "Base64-encode the header contained in STRING."
+  (base64-encode-string string t))
 
-(defun rfc2047-q-encode-region (b e)
-  "Quoted-printable-encode the header in region B to E."
-  (save-excursion
-    (save-restriction
-      (narrow-to-region (goto-char b) e)
-      (let ((bol (save-restriction
-		   (widen)
-		   (rfc2047-point-at-bol))))
-	(quoted-printable-encode-region
-	 b e nil
-	 ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
-	 ;; Avoid using 8bit characters.
-	 ;; This list excludes `especials' (see the RFC2047 syntax),
-	 ;; meaning that some characters in non-structured fields will
-	 ;; get encoded when they con't need to be.  The following is
-	 ;; what it used to be.
-;;;  	 ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
-;;;  	 "\010\012\014\040-\074\076\100-\136\140-\177")
-	 "-\b\n\f !#-'*+0-9A-Z\\^`-~\d")
-	(subst-char-in-region (point-min) (point-max) ?  ?_)
-	;; The size of QP encapsulation is about 20, so set limit to
-	;; 56=76-20.
-	(unless (< (- (point-max) (point-min)) 56)
-	  ;; Don't break if it could fit in one line.
-	  ;; Let rfc2047-encode-region break it later.
-	  (goto-char (1+ (point-min)))
-	  (while (and (not (bobp)) (not (eobp)))
-	    (goto-char (min (point-max) (+ 56 bol)))
-	    (search-backward "=" (- (point) 2) t)
-	    (unless (or (bobp) (eobp))
-	      (insert ?\n)
-	      (setq bol (point)))))))))
+(defun rfc2047-q-encode-string (string)
+  "Quoted-printable-encode the header in STRING."
+  (mm-with-unibyte-buffer
+    (insert string)
+    (quoted-printable-encode-region
+     (point-min) (point-max) nil
+     ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
+     ;; Avoid using 8bit characters.
+     ;; This list excludes `especials' (see the RFC2047 syntax),
+     ;; meaning that some characters in non-structured fields will
+     ;; get encoded when they con't need to be.  The following is
+     ;; what it used to be.
+     ;;;  ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
+     ;;;  "\010\012\014\040-\074\076\100-\136\140-\177")
+     "-\b\n\f !#-'*+0-9A-Z\\^`-~\d")
+    (subst-char-in-region (point-min) (point-max) ?  ?_)
+    (buffer-string)))
+
+(defun rfc2047-encode-parameter (param value)
+  "Return and PARAM=VALUE string encoded in the RFC2047-like style.
+This is a replacement for the `rfc2231-encode-string' function.
+
+When attaching files as MIME parts, we should use the RFC2231 encoding
+to specify the file names containing non-ASCII characters.  However,
+many mail softwares don't support it in practice and recipients won't
+be able to extract files with correct names.  Instead, the RFC2047-like
+encoding is acceptable generally.  This function provides the very
+RFC2047-like encoding, resigning to such a regrettable trend.  To use
+it, put the following line in your ~/.gnus.el file:
+
+\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
+"
+  (let* ((rfc2047-encoding-type 'mime)
+	 (rfc2047-encode-max-chars nil)
+	 (string (rfc2047-encode-string value)))
+    (if (string-match (concat "[" ietf-drums-tspecials "]") string)
+	(format "%s=%S" param string)
+      (concat param "=" string))))
 
 ;;;
 ;;; Functions for decoding RFC2047 messages
@@ -639,8 +806,8 @@
 
 (eval-and-compile
   (defconst rfc2047-encoded-word-regexp
-    "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\
-\\?\\([!->@-~ +]*\\)\\?="))
+    "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\
+\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?="))
 
 (defvar rfc2047-quote-decoded-words-containing-tspecials nil
   "If non-nil, quote decoded words containing special characters.")
@@ -671,7 +838,7 @@
 			  "\\(\n?[ \t]\\)+"
 			  "\\(" rfc2047-encoded-word-regexp "\\)"))
 		nil t)
-	  (delete-region (goto-char (match-end 1)) (match-beginning 6)))
+	  (delete-region (goto-char (match-end 1)) (match-beginning 7)))
 	;; Decode the encoded words.
 	(setq b (goto-char (point-min)))
 	(while (re-search-forward rfc2047-encoded-word-regexp nil t)
@@ -774,7 +941,20 @@
 	       mail-parse-charset
 	       (not (eq mail-parse-charset 'us-ascii))
 	       (not (eq mail-parse-charset 'gnus-decoded)))
-	  (mm-decode-coding-string string mail-parse-charset)
+	  ;; `decode-coding-string' in Emacs offers a third optional
+	  ;; arg NOCOPY to avoid consing a new string if the decoding
+	  ;; is "trivial".  Unfortunately it currently doesn't
+	  ;; consider anything else than a `nil' coding system
+	  ;; trivial.
+	  ;; `rfc2047-decode-string' is called multiple times for each
+	  ;; article during summary buffer generation, and we really
+	  ;; want to avoid unnecessary consing.  So we bypass
+	  ;; `decode-coding-string' if the string is purely ASCII.
+	  (if (and (fboundp 'detect-coding-string)
+		   ;; string is purely ASCII
+		   (eq (detect-coding-string string t) 'undecided))
+	      string
+	    (mm-decode-coding-string string mail-parse-charset))
 	(mm-string-as-multibyte string)))))
 
 (defun rfc2047-parse-and-decode (word)
@@ -787,8 +967,8 @@
      (condition-case nil
 	 (rfc2047-decode
 	  (match-string 1 word)
-	  (upcase (match-string 2 word))
-	  (match-string 3 word))
+	  (string-to-char (match-string 3 word))
+	  (match-string 4 word))
        (error word))
      word)))				; un-decodable
 
@@ -809,7 +989,7 @@
 
 (defun rfc2047-decode (charset encoding string)
   "Decode STRING from the given MIME CHARSET in the given ENCODING.
-Valid ENCODINGs are \"B\" and \"Q\".
+Valid ENCODINGs are the characters \"B\" and \"Q\".
 If your Emacs implementation can't decode CHARSET, return nil."
   (if (stringp charset)
       (setq charset (intern (downcase charset))))
@@ -824,18 +1004,17 @@
 	     (memq 'gnus-unknown mail-parse-ignored-charsets))
 	(setq cs (mm-charset-to-coding-system mail-parse-charset)))
     (when cs
-      (when (and (eq cs 'ascii)
-		 mail-parse-charset)
-	(setq cs mail-parse-charset))
+      (when (eq cs 'ascii)
+	(setq cs (or mail-parse-charset 'raw-text)))
       (mm-decode-coding-string
        (cond
-	((equal "B" encoding)
+	((char-equal ?B encoding)
 	 (base64-decode-string
 	  (rfc2047-pad-base64 string)))
-	((equal "Q" encoding)
+	((char-equal ?Q encoding)
 	 (quoted-printable-decode-string
-	  (mm-replace-chars-in-string string ?_ ? )))
-	(t (error "Invalid encoding: %s" encoding)))
+	  (mm-subst-char-in-string ?_ ? string t)))
+	(t (error "Invalid encoding: %c" encoding)))
        cs))))
 
 (provide 'rfc2047)
--- a/lisp/hi-lock.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/hi-lock.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/hilit-chg.el	Thu Mar 31 09:58:14 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/image-mode.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/image-mode.el	Thu Mar 31 09:58:14 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/info.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/info.el	Thu Mar 31 09:58:14 2005 +0000
@@ -3026,12 +3026,12 @@
     :help "Go to menu of visited nodes"]
    ["Table of Contents" Info-toc
     :help "Go to table of contents"]
-   ("Index..."
-    ["Lookup a String" Info-index
+   ("Index"
+    ["Lookup a String..." Info-index
      :help "Look for a string in the index items"]
-    ["Next Matching Item" Info-index-next
+    ["Next Matching Item" Info-index-next :active Info-index-alternatives
      :help "Look for another occurrence of previous item"]
-    ["Lookup a string in all indices" info-apropos
+    ["Lookup a string in all indices..." info-apropos
      :help "Look for a string in the indices of all manuals"])
    ["Edit" Info-edit :help "Edit contents of this node"
     :active Info-enable-edit]
--- a/lisp/international/iso-acc.el	Tue Mar 29 00:48:14 2005 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,491 +0,0 @@
-;;; iso-acc.el --- minor mode providing electric accent keys
-
-;; Copyright (C) 1993, 1994, 1996, 2001 Free Software Foundation, Inc.
-
-;; Author: Johan Vromans
-;; Maintainer: FSF
-;; Keywords: i18n
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Function `iso-accents-mode' activates a minor mode in which
-;; typewriter "dead keys" are emulated.  The purpose of this emulation
-;; is to provide a simple means for inserting accented characters
-;; according to the ISO-8859-1...3 character sets.
-;;
-;; In `iso-accents-mode', pseudo accent characters are used to
-;; introduce accented keys.  The pseudo-accent characters are:
-;;
-;;   '  (minute)    -> actue accent
-;;   `  (backtick)  -> grave accent
-;;   "  (second)    -> diaeresis
-;;   ^  (caret)     -> circumflex
-;;   ~  (tilde)     -> tilde over the character
-;;   /  (slash)     -> slash through the character.
-;;                     Also:  /A is A-with-ring and /E is AE ligature.
-;; These two are enabled only if you set iso-accents-enable
-;; to include them:
-;;   .  (period)    -> dot over the character (some languages only)
-;;   ,  (cedilla)   -> cedilla under the character (some languages only)
-;;
-;; The action taken depends on the key that follows the pseudo accent.
-;; In general:
-;;
-;;   pseudo-accent + appropriate letter -> accented letter
-;;   pseudo-accent + space -> pseudo-accent (except comma and period)
-;;   pseudo-accent + pseudo-accent -> accent (if available)
-;;   pseudo-accent + other -> pseudo-accent + other
-;;
-;; If the pseudo-accent is followed by anything else than a
-;; self-insert-command, the dead-key code is terminated, the
-;; pseudo-accent inserted 'as is' and the bell is rung to signal this.
-;;
-;; Function `iso-accents-mode' can be used to enable the iso accents
-;; minor mode, or disable it.
-
-;; If you want only some of these characters to serve as accents,
-;; add a language to `iso-languages' which specifies the accent characters
-;; that you want, then select the language with `iso-accents-customize'.
-
-;;; Code:
-
-(provide 'iso-acc)
-
-(defgroup iso-acc nil
-  "Minor mode providing electric accent keys."
-  :prefix "iso-accents-"
-  :group 'i18n)
-
-(defcustom iso-accents-insert-offset nonascii-insert-offset
-  "*Offset added by ISO Accents mode to character codes 0200 and above."
-  :type 'integer
-  :group 'iso-acc)
-
-(defvar iso-languages
-  '(("catalan"
-     ;; Note this includes some extra characters used in Spanish,
-     ;; on the idea that someone who uses Catalan is likely to use Spanish
-     ;; as well.
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-	 (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?O . ?\322)
-	 (?a . ?\340) (?e . ?\350) (?o . ?\362)
-	 (?\  . ?`))
-     (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374)
-	  (?\  . ?\"))
-     (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
-	 (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
-	 (?\  . ?\~)))
-
-    ("esperanto"
-     (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306)
-	 (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376)
-	 (?^ . ?^) (?\  . ?^))
-     (?~ (?U . ?\335) (?u . ?\375) (?\  . ?~)))
-
-    ("french"
-     (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347)
-	 (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?U . ?\331)
-         (?a . ?\340) (?e . ?\350) (?u . ?\371)
-	 (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
-	 (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
-	 (?\  . ?^))
-     (?\" (?E . ?\313) (?I . ?\317)
-          (?e . ?\353) (?i . ?\357)
-	  (?\  . ?\"))
-     (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347)
-	 (?\  . ?~))
-     (?, (?C . ?\307) (?c . ?\347) (?\  . ?\,)))
-
-    ("german"
-     (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334)
-	  (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\  . ?\")))
-
-    ("irish"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-	 (?\  . ?')))
-
-    ("portuguese"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
-	 (?u . ?\372) (?c . ?\347)
-	 (?\  . ?'))
-     (?` (?A . ?\300) (?a . ?\340)
-	 (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324)
-	 (?a . ?\342) (?e . ?\352) (?o . ?\364)
-	 (?\  . ?^))
-     (?\" (?U . ?\334) (?u . ?\374)
-	  (?\  . ?\"))
-     (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365)
-         (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
-	 (?\  . ?~))
-     (?, (?c . ?\347) (?C . ?\307) (?, . ?,)))
-
-    ("spanish"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-	 (?\  . ?'))
-     (?\" (?U . ?\334) (?u . ?\374) (?\  . ?\"))
-     (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241)
-          (?? . ?\277) (?\  . ?\~)))
-
-    ("latin-1"
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
-	 (?u . ?\372) (?y . ?\375) (?' . ?\264)
-	 (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
-	 (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
-	 (?` . ?`) (?\  . ?`))
-     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
-	 (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
-	 (?^ . ?^) (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
-	  (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337)
-	  (?u . ?\374) (?y . ?\377)
-	  (?\" . ?\250) (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
-	 (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361)
-	 (?o . ?\365) (?t . ?\376)
-	 (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
-	 (?\~ . ?\270) (?\  . ?~))
-     (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346)
-	 (?o . ?\370)
-	 (?/ . ?\260) (?\  . ?/)))
-
-    ("latin-2" latin-iso8859-2
-     (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315)
-	 (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246)
-	 (?U . ?\332) (?Y . ?\335) (?Z . ?\254)
-	 (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355)
-	 (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266)
-	 (?u . ?\372) (?y . ?\375) (?z . ?\274)
-	 (?' . ?\264) (?\  . ?'))
-     (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252)
-	 (?T . ?\336) (?Z . ?\257)
-	 (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272)
-	 (?t . ?\376) (?z . ?\277)
-	 (?` . ?\252)
-	 (?. . ?\377) (?\  . ?`))
-     (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324)
-	 (?a . ?\342) (?i . ?\356) (?o . ?\364)
-	 (?^ . ?^)			; no special code?
-	 (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334)
-	  (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374)
-	  (?\" . ?\250)
-	  (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322)
-	 (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333)
-	 (?Z . ?\256)
-	 (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362)
-	 (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373)
-	 (?z . ?\276)
-	 (?v . ?\242)			; v accent
-	 (?\~ . ?\242)			; v accent
-	 (?\. . ?\270)			; cedilla accent
-	 (?\  . ?~)))
-
-    ("latin-3" latin-iso8859-3
-     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
-	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
-	 (?' . ?\264) (?\  . ?'))
-     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
-	 (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
-	 (?` . ?`) (?\  . ?`))
-     (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246)
-	 (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333)
-	 (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266)
-	 (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373)
-	 (?^ . ?^) (?\  . ?^))
-     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
-	  (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374)
-	  (?s . ?\337)
-	  (?\" . ?\250) (?\  . ?\"))
-     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
-	 (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365)
-	 (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273)
-	 (?U . ?\335) (?u . ?\375) (?` . ?\242)
-	 (?~ . ?\270) (?\  . ?~))
-     (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257)
-	 (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277)
-	 (?r . ?\256)
-	 (?. . ?\377) (?# . ?\243) (?$ . ?\244)
-	 (?/ . ?\260) (?\  . ?/))
-     (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257)
- 	 (?c . ?\345) (?g . ?\365) (?z . ?\277))))
-  "List of language-specific customizations for the ISO Accents mode.
-
-Each element of the list is of the form
-
-    (LANGUAGE [CHARSET]
-     (PSEUDO-ACCENT MAPPINGS)
-     (PSEUDO-ACCENT MAPPINGS)
-     ...)
-
-LANGUAGE is a string naming the language.
-CHARSET (which may be omitted) is the symbol name
- of the character set used in this language.
- If CHARSET is omitted, latin-iso8859-1 is the default.
-PSEUDO-ACCENT is a char specifying an accent key.
-MAPPINGS are cons cells of the form (CHAR . ISO-CHAR).
-
-The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped
-to ISO-CHAR on input.")
-
-(defvar iso-language nil
-  "Language for which ISO Accents mode is currently customized.
-Change it with the `iso-accents-customize' function.")
-
-(defvar iso-accents-list nil
-  "Association list for ISO accent combinations, for the chosen language.")
-
-(defcustom iso-accents-mode nil
-  "*Non-nil enables ISO Accents mode.
-Setting this variable makes it local to the current buffer.
-See the function `iso-accents-mode'."
-  :type 'boolean
-  :group 'iso-acc)
-(make-variable-buffer-local 'iso-accents-mode)
-
-(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/)
-  "*List of accent keys that become prefixes in ISO Accents mode.
-The default is (?' ?` ?^ ?\" ?~ ?/), which contains all the supported
-accent keys.  If you set this variable to a list in which some of those
-characters are missing, the missing ones do not act as accents.
-
-Note that if you specify a language with `iso-accents-customize',
-that can also turn off certain prefixes (whichever ones are not needed in
-the language you choose)."
-  :type '(repeat character)
-  :group 'iso-acc)
-
-(defun iso-accents-accent-key (prompt)
-  "Modify the following character by adding an accent to it."
-  ;; Pick up the accent character.
-  (if (and iso-accents-mode
-	   (memq last-input-char iso-accents-enable))
-      (iso-accents-compose prompt)
-    (vector last-input-char)))
-
-
-;; The iso-accents-compose function is called deep inside Emacs' read
-;; key sequence machinery, so the call to read-event below actually
-;; recurses into that machinery.  Doing that does not cause any
-;; problem on its own, but read-event will have marked the window's
-;; display matrix to be accurate -- which is broken by the subsequent
-;; call to delete-region.  Therefore, we must call force-window-update
-;; after delete-region to explicitly clear the accurate state of the
-;; window's display matrix.
-
-(defun iso-accents-compose (prompt)
-  (let* ((first-char last-input-char)
-	 (list (assq first-char iso-accents-list))
-	 ;; Wait for the second key and look up the combination.
-	 (second-char (if (or prompt
-			      (not (eq (key-binding "a")
-				       'self-insert-command))
-			      ;; Not at start of a key sequence.
-			      (> (length (this-single-command-keys)) 1)
-			      ;; Called from anything but the command loop.
-			      this-command)
-			  (progn
-			    (message "%s%c"
-				     (or prompt "Compose with ")
-				     first-char)
-			    (read-event))
-			(insert first-char)
-			(prog1 (read-event)
-			  (delete-region (1- (point)) (point))
-			  ;; Display is no longer up-to-date.
-			  (force-window-update (selected-window)))))
-	 (entry (cdr (assq second-char list))))
-    (if entry
-	;; Found it: return the mapped char
-	(vector
-	 (if (and enable-multibyte-characters
-		  (>= entry ?\200))
-	     (+ iso-accents-insert-offset entry)
-	   entry))
-      ;; Otherwise, advance and schedule the second key for execution.
-      (push second-char unread-command-events)
-      (vector first-char))))
-
-;; It is a matter of taste if you want the minor mode indicated
-;; in the mode line...
-;; If so, uncomment the next four lines.
-;; (or (assq 'iso-accents-mode minor-mode-alist)
-;;     (setq minor-mode-alist
-;; 	  (append minor-mode-alist
-;; 		  '((iso-accents-mode " ISO-Acc")))))
-
-;;;###autoload
-(defun iso-accents-mode (&optional arg)
-  "Toggle ISO Accents mode, in which accents modify the following letter.
-This permits easy insertion of accented characters according to ISO-8859-1.
-When Iso-accents mode is enabled, accent character keys
-\(`, ', \", ^, / and ~) do not self-insert; instead, they modify the following
-letter key so that it inserts an ISO accented letter.
-
-You can customize ISO Accents mode to a particular language
-with the command `iso-accents-customize'.
-
-Special combinations: ~c gives a c with cedilla,
-~d gives an Icelandic eth (d with dash).
-~t gives an Icelandic thorn.
-\"s gives German sharp s.
-/a gives a with ring.
-/e gives an a-e ligature.
-~< and ~> give guillemots.
-~! gives an inverted exclamation mark.
-~? gives an inverted question mark.
-
-With an argument, a positive argument enables ISO Accents mode,
-and a negative argument disables it."
-
-  (interactive "P")
-
-  (if (if arg
-	  ;; Negative arg means switch it off.
-	  (<= (prefix-numeric-value arg) 0)
-	;; No arg means toggle.
-	iso-accents-mode)
-      (setq iso-accents-mode nil)
-
-    ;; Enable electric accents.
-    (setq iso-accents-mode t)))
-
-(defun iso-accents-customize (language)
-  "Customize the ISO accents machinery for a particular language.
-It selects the customization based on the specifications in the
-`iso-languages' variable."
-  (interactive (list (completing-read "Language: " iso-languages nil t)))
-  (let ((table (cdr (assoc language iso-languages)))
-	all-accents tail)
-    (if (not table)
-	(error "Unknown language `%s'" language)
-      (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table))
-							(car table)
-						      'latin-iso8859-1))
-					 128))
-      (if (symbolp (car table))
-	  (setq table (cdr table)))
-      (setq iso-language language
-	    iso-accents-list table)
-      (if key-translation-map
-	  (substitute-key-definition
-	   'iso-accents-accent-key nil key-translation-map)
-	(setq key-translation-map (make-sparse-keymap)))
-      ;; Set up translations for all the characters that are used as
-      ;; accent prefixes in this language.
-      (setq tail iso-accents-list)
-      (while tail
-	(define-key key-translation-map (vector (car (car tail)))
-	  'iso-accents-accent-key)
-	(setq tail (cdr tail))))))
-
-(defun iso-accentuate (start end)
-  "Convert two-character sequences in region into accented characters.
-Noninteractively, this operates on text from START to END.
-This uses the same conversion that ISO Accents mode uses for type-in."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (forward-char 1)
-      (let (entry)
-	(while (< (point) end)
-	  (if (and (memq (preceding-char) iso-accents-enable)
-		   (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list)))))
-	      (progn
-		(forward-char -1)
-		(delete-char 2)
-		(insert entry)
-		(setq end (1- end)))
-	    (forward-char 1)))))))
-
-(defun iso-accent-rassoc-unit (value alist)
-  (let (elt acc)
-    (while (and alist (not elt))
-      (setq acc (car (car alist))
-	    elt (car (rassq value (cdr (car alist))))
-	    alist (cdr alist)))
-    (if elt
-	(cons acc elt))))
-
-(defun iso-unaccentuate (start end)
-  "Convert accented characters in the region into two-character sequences.
-Noninteractively, this operates on text from START to END.
-This uses the opposite of the conversion done by ISO Accents mode for type-in."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (let (entry)
-	(while (< (point) end)
-	  (if (and (> (following-char) 127)
-		   (setq entry (iso-accent-rassoc-unit (following-char)
-						       iso-accents-list)))
-	      (progn
-		(delete-char 1)
-		(insert (car entry) (cdr entry))
-		(setq end (1+ end)))
-	    (forward-char 1)))))))
-
-(defun iso-deaccentuate (start end)
-  "Convert accented characters in the region into unaccented characters.
-Noninteractively, this operates on text from START to END."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char start)
-      (let (entry)
-	(while (< (point) end)
-	  (if (and (> (following-char) 127)
-		   (setq entry (iso-accent-rassoc-unit (following-char)
-						       iso-accents-list)))
-	      (progn
-		(delete-char 1)
-		(insert (cdr entry)))
-	    (forward-char 1)))))))
-
-;; Set up the default settings.
-(iso-accents-customize "latin-1")
-
-;; Use Iso-Accents mode in the minibuffer
-;; if it was in use in the previous buffer.
-(defun iso-acc-minibuf-setup ()
-  (setq iso-accents-mode
-	(save-excursion
-	  (set-buffer (window-buffer minibuffer-scroll-window))
-	  iso-accents-mode)))
-
-(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup)
-
-;;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6
-;;; iso-acc.el ends here
--- a/lisp/international/mule-cmds.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/international/mule-cmds.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1681,7 +1681,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
@@ -1695,7 +1695,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.
@@ -2415,7 +2415,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
@@ -2458,9 +2459,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.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/international/mule.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1508,10 +1508,11 @@
 ;;; 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)
+    ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion)
     ("/#[^/]+#\\'" . emacs-mule))
   "Alist of filename patterns vs corresponding coding systems.
 Each element looks like (REGEXP . CODING-SYSTEM).
--- a/lisp/kmacro.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/kmacro.el	Thu Mar 31 09:58:14 2005 +0000
@@ -614,10 +614,13 @@
 counting the definition just completed as the first repetition.
 An argument of zero means repeat until error."
   (interactive "P")
-  (end-kbd-macro arg #'kmacro-loop-setup-function)
-  (when (and last-kbd-macro (= (length last-kbd-macro) 0))
-    (message "Ignore empty macro")
-    (kmacro-pop-ring)))
+   ;; Isearch may push the kmacro-end-macro key sequence onto the macro.
+   ;; Just ignore it when executing the macro.
+  (unless executing-kbd-macro
+    (end-kbd-macro arg #'kmacro-loop-setup-function)
+    (when (and last-kbd-macro (= (length last-kbd-macro) 0))
+      (message "Ignore empty macro")
+      (kmacro-pop-ring))))
 
 
 ;;;###autoload
--- a/lisp/language/thai-util.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/language/thai-util.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,10 +1,9 @@
 ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*-
 
-;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
-;;   Licensed to the Free Software Foundation.
-;; Copyright (C) 2003
+;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
+;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
 
 ;; Keywords: mule, multilingual, Thai, i18n
 
@@ -253,6 +252,42 @@
 		(prog1 (match-end 0)
 		  (thai-compose-syllable pos (match-end 0)))))))))
 
+;; Thai-word-mode requires functions in the feature `thai-word'.
+(require 'thai-word)
+
+(defvar thai-word-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [remap forward-word] 'thai-forward-word)
+    (define-key map [remap backward-word] 'thai-backward-word)
+    (define-key map [remap kill-word] 'thai-kill-word)
+    (define-key map [remap backward-kill-word] 'thai-backward-kill-word)
+    (define-key map [remap transpose-words] 'thai-transpose-words)
+    map)
+  "Keymap for `thai-word-mode'.")
+
+(define-minor-mode thai-word-mode
+  "Minor mode to make word-oriented commands aware of Thai words.
+The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]."
+  :global t
+  (cond (thai-word-mode
+	 ;; This enables linebreak between Thai characters.
+	 (modify-category-entry (make-char 'thai-tis620) ?|)
+	 ;; This enables linebreak at a Thai word boundary.
+	 (put-charset-property 'thai-tis620 'fill-find-break-point-function
+			       'thai-fill-find-break-point))
+	(t
+	 (modify-category-entry (make-char 'thai-tis620) ?| nil t)
+	 (put-charset-property 'thai-tis620 'fill-find-break-point-function
+			       nil))))
+
+;; Function to call on entering the Thai language environment.
+(defun setup-thai-language-environment-internal ()
+  (thai-word-mode 1))
+
+;; Function to call on exiting the Thai language environment.
+(defun exit-thai-language-environment-internal ()
+  (thai-word-mode -1))
+
 ;;
 (provide 'thai-util)
 
--- a/lisp/language/thai-word.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/language/thai-word.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,7 +1,8 @@
 ;;; thai-word.el -- find Thai word boundaries
 
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004
-;; Electrotechnical Laboratory, JAPAN.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
+;;   National Institute of Advanced Industrial Science and Technology (AIST)
+;;   Registration Number H14PRO021
 
 ;; Author: Kenichi HANDA <handa@etl.go.jp>
 
@@ -72,13 +73,10 @@
 ;; which means that you can easily index the list character by
 ;; character.
 
-(defconst thai-word-table nil)
-
-
-;; Set up `thai-word-table'.
-
-(let
-    ((l
+(defvar thai-word-table
+  (let ((table (list 'thai-words)))
+    (dolist (elt
+      ;;; The following is indented as this to minimize this file size.
       '("¡¡"
 	"¡¡Å"
 	"¡¡Ø¸Àѳ±ì"
@@ -10732,11 +10730,10 @@
 	"äÎâ¡ÃÁÔàµÍÃì"
 	"äÎâ´Ã¤ÒÃìºÍ¹"
 	"äÎâÅ"
-	)))
-  (setq thai-word-table (list 'thai-words))
-  (while l
-    (set-nested-alist (car l) 1 thai-word-table)
-    (setq l (cdr l))))
+	))
+      (set-nested-alist elt 1 table))
+    table)
+  "Nested alist of Thai words.") 
 
 
 (defun thai-update-word-table (file &optional append)
@@ -11042,6 +11039,33 @@
   (thai-forward-word (- count)))
 
 
+(defun thai-kill-word (arg)
+  "Like kill-word but pay attention to Thai word boundaries.
+With argument, do this that many times."
+  (interactive "p")
+  (kill-region (point) (progn (thai-forward-word arg) (point))))
+
+
+(defun thai-backward-kill-word (arg)
+  "Like backward-kill-word but pay attention to Thai word boundaries."
+  (interactive "p")
+  (thai-kill-word (- arg)))
+
+
+(defun thai-transpose-words (arg)
+  "Like transpose-words but pay attention to Thai word boundaries."
+  (interactive "*p")
+  (transpose-subr 'thai-forward-word arg))
+
+(defun thai-fill-find-break-point (linebeg)
+  "Go to a line breaking position near point considering Thai word boundaries."
+  (let ((pos (point)))
+    (thai-forward-word -1)
+    (when (<= (point) linebeg)
+      (goto-char pos)
+      (thai-forward-word 1))
+    (kinsoku linebeg)))
+
 (provide 'thai-word)
 
 
--- a/lisp/language/thai.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/language/thai.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,14 +1,12 @@
 ;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*-
 
-;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
-;;   Licensed to the Free Software Foundation.
-;; Copyright (C) 2002 Free Software Foundation, Inc.
-;; Copyright (C) 2003
+;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2005
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
 ;; Copyright (C) 2005
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
+;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
 
 ;; Keywords: multilingual, Thai, i18n
 
@@ -54,6 +52,8 @@
 	  (input-method . "thai-kesmanee")
 	  (unibyte-display . thai-tis620)
 	  (features thai-util)
+	  (setup-function . setup-thai-language-environment-internal)
+	  (exit-function . exit-thai-language-environment-internal)
 	  (sample-text
 	   . (thai-compose-string
 	      (copy-sequence "Thai (,T@RIRd7B(B)		,TJGQJ4U$CQ:(B, ,TJGQJ4U$hP(B")))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/longlines.el	Thu Mar 31 09:58:14 2005 +0000
@@ -0,0 +1,393 @@
+;;; longlines.el --- automatically wrap long lines
+
+;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc.
+
+;; Authors:    Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+;;             Alex Schroeder <alex@gnu.org>
+;;             Chong Yidong <cyd@stupidchicken.com>
+;; Maintainer: Chong Yidong <cyd@stupidchicken.com>
+;; Keywords: convenience
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Some text editors save text files with long lines, and they
+;; automatically break these lines at whitespace, without actually
+;; inserting any newline characters.  When doing `M-q' in Emacs, you
+;; are inserting newline characters.  Longlines mode provides a file
+;; format which wraps the long lines when reading a file and unwraps
+;; the lines when saving the file.  It can also wrap and unwrap
+;; automatically as editing takes place.
+
+;; Special thanks to Rod Smith for many useful bug reports.
+
+;;; Code:
+
+(require 'easy-mmode)
+
+(defgroup longlines nil
+  "Automatic wrapping of long lines when loading files."
+  :group 'fill)
+
+(defcustom longlines-auto-wrap t
+  "*Non-nil means long lines are automatically wrapped after each command.
+Otherwise, you can perform filling using `fill-paragraph' or
+`auto-fill-mode'.  In any case, the soft newlines will be removed
+when the file is saved to disk."
+  :group 'longlines
+  :type 'boolean)
+
+(defcustom longlines-wrap-follows-window-size nil
+  "*Non-nil means wrapping and filling happen at the edge of the window.
+Otherwise, `fill-column' is used, regardless of the window size.  This
+does not work well when the buffer is displayed in multiple windows
+with differing widths."
+  :group 'longlines
+  :type 'boolean)
+
+(defcustom longlines-show-hard-newlines nil
+  "*Non-nil means each hard newline is marked with a symbol.
+You can also enable the display temporarily, using the command
+`longlines-show-hard-newlines'"
+  :group 'longlines
+  :type 'boolean)
+
+(defcustom longlines-show-effect (propertize "|\n" 'face 'escape-glyph)
+  "*A string to display when showing hard newlines.
+This is used when `longlines-show-hard-newlines' is on."
+  :group 'longlines
+  :type 'string)
+
+;; Internal variables
+
+(defvar longlines-wrap-beg nil)
+(defvar longlines-wrap-end nil)
+(defvar longlines-wrap-point nil)
+(defvar longlines-showing nil)
+
+(make-variable-buffer-local 'longlines-wrap-beg)
+(make-variable-buffer-local 'longlines-wrap-end)
+(make-variable-buffer-local 'longlines-wrap-point)
+(make-variable-buffer-local 'longlines-showing)
+
+;; Mode
+
+;;;###autoload
+(define-minor-mode longlines-mode
+  "Toggle Long Lines mode.
+In Long Lines mode, long lines are wrapped if they extend beyond
+`fill-column'.  The soft newlines used for line wrapping will not
+show up when the text is yanked or saved to disk.
+
+If `longlines-auto-wrap' is non-nil, lines are automatically
+wrapped whenever the buffer is changed.  You can always call
+`fill-paragraph' to fill individual paragraphs.
+
+If `longlines-show-hard-newlines' is non-nil, hard newlines will
+be marked by a symbol."
+  nil " ll" nil
+  (if longlines-mode
+      ;; Turn on longlines mode
+      (progn
+        (use-hard-newlines 1 'never)
+        (set (make-local-variable 'require-final-newline) nil)
+        (add-to-list 'buffer-file-format 'longlines)
+        (add-hook 'change-major-mode-hook 'longlines-mode-off nil t)
+        (make-local-variable 'buffer-substring-filters)
+        (add-to-list 'buffer-substring-filters 'longlines-encode-string)
+        (when longlines-wrap-follows-window-size
+          (set (make-local-variable 'fill-column)
+               (- (window-width) window-min-width))
+          (add-hook 'window-configuration-change-hook
+                    'longlines-window-change-function nil t))
+        (let ((buffer-undo-list t)
+              (mod (buffer-modified-p)))
+          ;; Turning off undo is OK since (spaces + newlines) is
+          ;; conserved, except for a corner case in
+          ;; longlines-wrap-lines that we'll never encounter from here
+          (longlines-decode-region (point-min) (point-max))
+          (longlines-wrap-region (point-min) (point-max))
+          (set-buffer-modified-p mod))
+        (when (and longlines-show-hard-newlines
+                   (not longlines-showing))
+          (longlines-show-hard-newlines))
+        (when longlines-auto-wrap
+          (auto-fill-mode 0)
+          (add-hook 'after-change-functions
+                    'longlines-after-change-function nil t)
+          (add-hook 'post-command-hook
+                    'longlines-post-command-function nil t)))
+    ;; Turn off longlines mode
+    (setq buffer-file-format (delete 'longlines buffer-file-format))
+    (if longlines-showing
+        (longlines-unshow-hard-newlines))
+    (let ((buffer-undo-list t))
+      (longlines-encode-region (point-min) (point-max)))
+    (remove-hook 'change-major-mode-hook 'longlines-mode-off t)
+    (remove-hook 'before-kill-functions 'longlines-encode-region t)
+    (remove-hook 'after-change-functions 'longlines-after-change-function t)
+    (remove-hook 'post-command-hook 'longlines-post-command-function t)
+    (remove-hook 'window-configuration-change-hook
+                 'longlines-window-change-function t)
+    (kill-local-variable 'fill-column)))
+
+(defun longlines-mode-off ()
+  "Turn off longlines mode.
+This function exists to be called by `change-major-mode-hook' when the
+major mode changes."
+  (longlines-mode 0))
+
+;; Showing the effect of hard newlines in the buffer
+
+(defface longlines-visible-face
+  '((t (:background "red")))
+  "Face used to make hard newlines visible in `longlines-mode'.")
+
+(defun longlines-show-hard-newlines (&optional arg)
+  "Make hard newlines visible by adding a face.
+With optional argument ARG, make the hard newlines invisible again."
+  (interactive "P")
+  (let ((buffer-undo-list t)
+        (mod (buffer-modified-p)))
+    (if arg
+        (longlines-unshow-hard-newlines)
+      (setq longlines-showing t)
+      (longlines-show-region (point-min) (point-max)))
+    (set-buffer-modified-p mod)))
+
+(defun longlines-show-region (beg end)
+  "Make hard newlines between BEG and END visible."
+  (let* ((pmin (min beg end))
+         (pmax (max beg end))
+         (pos (text-property-any pmin pmax 'hard t)))
+    (while pos
+      (put-text-property pos (1+ pos) 'display
+                         (copy-sequence longlines-show-effect))
+      (setq pos (text-property-any (1+ pos) pmax 'hard t)))))
+
+(defun longlines-unshow-hard-newlines ()
+  "Make hard newlines invisible again."
+  (interactive)
+  (setq longlines-showing nil)
+  (let ((pos (text-property-any (point-min) (point-max) 'hard t)))
+    (while pos
+      (remove-text-properties pos (1+ pos) '(display))
+      (setq pos (text-property-any (1+ pos) (point-max) 'hard t)))))
+
+;; Wrapping the paragraphs.
+
+(defun longlines-wrap-region (beg end)
+  "Wrap each successive line, starting with the line before BEG.
+Stop when we reach lines after END that don't need wrapping, or the
+end of the buffer."
+  (setq longlines-wrap-point (point))
+  (goto-char beg)
+  (forward-line -1)
+  ;; Two successful longlines-wrap-line's in a row mean successive
+  ;; lines don't need wrapping.
+  (while (null (and (longlines-wrap-line)
+                    (or (eobp)
+                        (and (>= (point) end)
+                             (longlines-wrap-line))))))
+  (goto-char longlines-wrap-point))
+
+(defun longlines-wrap-line ()
+  "If the current line needs to be wrapped, wrap it and return nil.
+If wrapping is performed, point remains on the line.  If the line does
+not need to be wrapped, move point to the next line and return t."
+  (if (longlines-set-breakpoint)
+      (progn (backward-char 1)
+             (delete-char 1)
+             (insert-char ?\n 1)
+             nil)
+    (if (longlines-merge-lines-p)
+        (progn (end-of-line)
+               (delete-char 1)
+     ;; After certain commands (e.g. kill-line), there may be two
+     ;; successive soft newlines in the buffer.  In this case, we
+     ;; replace these two newlines by a single space.  Unfortunately,
+     ;; this breaks the conservation of (spaces + newlines), so we
+     ;; have to fiddle with longlines-wrap-point.
+               (if (or (bolp) (eolp))
+                   (if (> longlines-wrap-point (point))
+                       (setq longlines-wrap-point
+                             (1- longlines-wrap-point)))
+                 (insert-char ?  1))
+               nil)
+      (forward-line 1)
+      t)))
+
+(defun longlines-set-breakpoint ()
+  "Place point where we should break the current line, and return t.
+If the line should not be broken, return nil; point remains on the
+line."
+  (move-to-column fill-column)
+  (if (and (re-search-forward "[^ ]" (line-end-position) 1)
+           (> (current-column) fill-column))
+      ;; This line is too long.  Can we break it?
+      (or (longlines-find-break-backward)
+          (progn (move-to-column fill-column)
+                 (longlines-find-break-forward)))))
+
+(defun longlines-find-break-backward ()
+  "Move point backward to the first available breakpoint and return t.
+If no breakpoint is found, return nil."
+  (and (search-backward " " (line-beginning-position) 1)
+       (save-excursion
+         (skip-chars-backward " " (line-beginning-position))
+         (null (bolp)))
+       (progn (forward-char 1)
+              (if (and fill-nobreak-predicate
+                       (run-hook-with-args-until-success
+                        'fill-nobreak-predicate))
+                  (progn (skip-chars-backward " " (line-beginning-position))
+                         (longlines-find-break-backward))
+                t))))
+
+(defun longlines-find-break-forward ()
+  "Move point forward to the first available breakpoint and return t.
+If no break point is found, return nil."
+  (and (search-forward " " (line-end-position) 1)
+       (progn (skip-chars-forward " " (line-end-position))
+              (null (eolp)))
+       (if (and fill-nobreak-predicate
+                (run-hook-with-args-until-success
+                 'fill-nobreak-predicate))
+           (longlines-find-break-forward)
+         t)))
+
+(defun longlines-merge-lines-p ()
+  "Return t if part of the next line can fit onto the current line.
+Otherwise, return nil.  Text cannot be moved across hard newlines."
+  (save-excursion
+    (end-of-line)
+    (and (null (eobp))
+         (null (get-text-property (point) 'hard))
+         (let ((space (- fill-column (current-column))))
+           (forward-line 1)
+           (if (eq (char-after) ? )
+               t ; We can always merge some spaces
+             (<= (if (search-forward " " (line-end-position) 1)
+                     (current-column)
+                   (1+ (current-column)))
+                 space))))))
+
+(defun longlines-decode-region (beg end)
+  "Turn all newlines between BEG and END into hard newlines."
+  (save-excursion
+    (goto-char (min beg end))
+    (while (search-forward "\n" (max beg end) t)
+      (set-hard-newline-properties
+       (match-beginning 0) (match-end 0)))))
+
+(defun longlines-encode-region (beg end &optional buffer)
+  "Replace each soft newline between BEG and END with exactly one space.
+Hard newlines are left intact.  The optional argument BUFFER exists for
+compatibility with `format-alist', and is ignored."
+  (save-excursion
+    (let ((mod (buffer-modified-p)))
+      (goto-char (min beg end))
+      (while (search-forward "\n" (max (max beg end)) t)
+        (unless (get-text-property (match-beginning 0) 'hard)
+          (replace-match " ")))
+      (set-buffer-modified-p mod)
+      end)))
+
+(defun longlines-encode-string (string)
+  "Return a copy of STRING with each soft newline replaced by a space.
+Hard newlines are left intact."
+  (let* ((str (copy-sequence string))
+         (pos (string-match "\n" str)))
+    (while pos
+      (if (null (get-text-property pos 'hard str))
+          (aset str pos ? ))
+      (setq pos (string-match "\n" str (1+ pos))))
+    str))
+
+;; Auto wrap
+
+(defun longlines-auto-wrap (&optional arg)
+  "Turn on automatic line wrapping, and wrap the entire buffer.
+With optional argument ARG, turn off line wrapping."
+  (interactive "P")
+  (remove-hook 'after-change-functions 'longlines-after-change-function t)
+  (remove-hook 'post-command-hook 'longlines-post-command-function t)
+  (if arg
+      (progn (setq longlines-auto-wrap nil)
+             (message "Auto wrap disabled."))
+    (setq longlines-auto-wrap t)
+    (add-hook 'after-change-functions
+              'longlines-after-change-function nil t)
+    (add-hook 'post-command-hook
+              'longlines-post-command-function nil t)
+    (let ((mod (buffer-modified-p)))
+      (longlines-wrap-region (point-min) (point-max))
+      (set-buffer-modified-p mod))
+    (message "Auto wrap enabled.")))
+
+(defun longlines-after-change-function (beg end len)
+  "Update `longlines-wrap-beg' and `longlines-wrap-end'.
+This is called by `after-change-functions' to keep track of the region
+that has changed."
+  (unless undo-in-progress
+    (setq longlines-wrap-beg
+          (if longlines-wrap-beg (min longlines-wrap-beg beg) beg))
+    (setq longlines-wrap-end
+          (if longlines-wrap-end (max longlines-wrap-end end) end))))
+
+(defun longlines-post-command-function ()
+  "Perform line wrapping on the parts of the buffer that have changed.
+This is called by `post-command-hook' after each command."
+  (when longlines-wrap-beg
+    (cond ((or (eq this-command 'yank)
+               (eq this-command 'yank-pop))
+           (longlines-decode-region (point) (mark t))
+           (if longlines-showing
+               (longlines-show-region (point) (mark t))))
+          ((and (eq this-command 'newline) longlines-showing)
+           (save-excursion
+             (if (search-backward "\n" nil t)
+                 (longlines-show-region
+                  (match-beginning 0) (match-end 0))))))
+    (unless (or (eq this-command 'fill-paragraph)
+                (eq this-command 'fill-region))
+      (longlines-wrap-region longlines-wrap-beg longlines-wrap-end))
+    (setq longlines-wrap-beg nil)
+    (setq longlines-wrap-end nil)))
+
+(defun longlines-window-change-function ()
+  "Re-wrap the buffer if the window width has changed.
+This is called by `window-size-change-functions'."
+  (when (/= fill-column (- (window-width) window-min-width))
+    (setq fill-column (- (window-width) window-min-width))
+    (let ((mod (buffer-modified-p)))
+      (longlines-wrap-region (point-min) (point-max))
+      (set-buffer-modified-p mod))))
+
+;; Loading and saving
+
+(add-to-list
+ 'format-alist
+ (list 'longlines "Automatically wrap long lines." nil
+       'longlines-decode-region 'longlines-encode-region t nil))
+
+(provide 'longlines)
+
+;; arch-tag: 3489d225-5506-47b9-8659-d8807b77c624
+;;; longlines.el ends here
--- a/lisp/mail/mailalias.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mail/mailalias.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mail/supercite.el	Thu Mar 31 09:58:14 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
@@ -838,7 +838,7 @@
   "Return the mail header field value associated with FIELD.
 If there was no mail header with FIELD as its key, return the value of
 `sc-mumble'.  FIELD is case insensitive."
-  (or (cdr (assoc (downcase field) sc-mail-info)) sc-mumble))
+  (or (cdr (assoc-string field sc-mail-info 'case-fold)) sc-mumble))
 
 (defun sc-mail-field-query (arg)
   "View the value of a mail field.
@@ -916,8 +916,8 @@
   "Get the full email address path from FROM.
 AUTHOR is the author's name (which is removed from the address)."
   (let ((eos (length from)))
-    (if (string-match (concat "\\(^\\|^\"\\)" author
-			      "\\(\\s +\\|\"\\s +\\)") from 0)
+    (if (string-match (concat "\\`\"?" (regexp-quote author)
+			      "\"?\\s +") from 0)
 	(let ((address (substring from (match-end 0) eos)))
 	  (if (and (= (aref address 0) ?<)
 		   (= (aref address (1- (length address))) ?>))
@@ -2054,5 +2054,5 @@
 (provide 'supercite)
 (run-hooks 'sc-load-hook)
 
-;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3
+;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3
 ;;; supercite.el ends here
--- a/lisp/menu-bar.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/menu-bar.el	Thu Mar 31 09:58:14 2005 +0000
@@ -136,7 +136,7 @@
   '(menu-item "--"))
 
 (define-key menu-bar-file-menu [recover-session]
-  '(menu-item "Recover Crashed Session..." recover-session
+  '(menu-item "Recover Crashed Session" recover-session
 	      :enable (and auto-save-list-file-prefix
 			   (file-directory-p
                             (file-name-directory auto-save-list-file-prefix))
@@ -298,7 +298,7 @@
   '(menu-item "Continue Tags Search" tags-loop-continue
 	      :help "Continue last tags search operation"))
 (define-key menu-bar-search-menu [tags-srch]
-  '(menu-item "Search tagged files" tags-search
+  '(menu-item "Search tagged files..." tags-search
 	      :help "Search for a regexp in all tagged files"))
 (define-key menu-bar-search-menu [separator-tag-search]
   '(menu-item "--"))
@@ -342,7 +342,7 @@
   '(menu-item "Continue Replace" tags-loop-continue
 	      :help "Continue last tags replace operation"))
 (define-key menu-bar-replace-menu [tags-repl]
-  '(menu-item "Replace in tagged files" tags-query-replace
+  '(menu-item "Replace in tagged files..." tags-query-replace
 	      :help "Interactively replace a regexp in all tagged files"))
 (define-key menu-bar-replace-menu [separator-replace-tags]
   '(menu-item "--"))
@@ -377,14 +377,14 @@
 (defvar menu-bar-goto-menu (make-sparse-keymap "Go To"))
 
 (define-key menu-bar-goto-menu [set-tags-name]
-  '(menu-item "Set Tags File Name" visit-tags-table
+  '(menu-item "Set Tags File Name..." visit-tags-table
 	      :help "Tell Tags commands which tag table file to use"))
 
 (define-key menu-bar-goto-menu [separator-tag-file]
   '(menu-item "--"))
 
 (define-key menu-bar-goto-menu [apropos-tags]
-  '(menu-item "Tags Apropos" tags-apropos
+  '(menu-item "Tags Apropos..." tags-apropos
 	      :help "Find function/variables whose names match regexp"))
 (define-key menu-bar-goto-menu [next-tag-otherw]
   '(menu-item "Next Tag in Other Window"
@@ -673,7 +673,7 @@
   '("--"))
 
 (define-key menu-bar-options-menu [mouse-set-font]
-  '(menu-item "Set Font/Fontset" mouse-set-font
+  '(menu-item "Set Font/Fontset..." mouse-set-font
 	       :visible (display-multi-font-p)
 	       :help "Select a font from list of known fonts/fontsets"))
 
@@ -1332,10 +1332,10 @@
 (define-key menu-bar-manuals-menu [sep3]
   '("--"))
 (define-key menu-bar-manuals-menu [command]
-  '(menu-item "Find Command in Manual" Info-goto-emacs-command-node
+  '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node
 	      :help "Display manual section that describes a command"))
 (define-key menu-bar-manuals-menu [key]
-  '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node
+  '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node
 	      :help "Display manual section that describes a key"))
 
 (define-key menu-bar-help-menu [eliza]
@@ -1369,7 +1369,7 @@
 (define-key menu-bar-help-menu [sep2]
   '("--"))
 (define-key menu-bar-help-menu [finder-by-keyword]
-  '(menu-item "Find Emacs Packages..." finder-by-keyword
+  '(menu-item "Find Emacs Packages" finder-by-keyword
 	      :help "Find packages and features by keyword"))
 (define-key menu-bar-help-menu [manuals]
   (list 'menu-item "More Manuals" menu-bar-manuals-menu
--- a/lisp/mh-e/ChangeLog	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mh-e/ChangeLog	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mh-e/mh-e.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mh-e/mh-identity.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/mh-e/mh-mime.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/midnight.el	Thu Mar 31 09:58:14 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/obsolete/iso-acc.el	Thu Mar 31 09:58:14 2005 +0000
@@ -0,0 +1,492 @@
+;;; iso-acc.el --- minor mode providing electric accent keys
+
+;; Copyright (C) 1993, 1994, 1996, 2001, 2002, 2005
+;;           Free Software Foundation, Inc.
+
+;; Author: Johan Vromans
+;; Maintainer: FSF
+;; Keywords: i18n
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Function `iso-accents-mode' activates a minor mode in which
+;; typewriter "dead keys" are emulated.  The purpose of this emulation
+;; is to provide a simple means for inserting accented characters
+;; according to the ISO-8859-1...3 character sets.
+;;
+;; In `iso-accents-mode', pseudo accent characters are used to
+;; introduce accented keys.  The pseudo-accent characters are:
+;;
+;;   '  (minute)    -> actue accent
+;;   `  (backtick)  -> grave accent
+;;   "  (second)    -> diaeresis
+;;   ^  (caret)     -> circumflex
+;;   ~  (tilde)     -> tilde over the character
+;;   /  (slash)     -> slash through the character.
+;;                     Also:  /A is A-with-ring and /E is AE ligature.
+;; These two are enabled only if you set iso-accents-enable
+;; to include them:
+;;   .  (period)    -> dot over the character (some languages only)
+;;   ,  (cedilla)   -> cedilla under the character (some languages only)
+;;
+;; The action taken depends on the key that follows the pseudo accent.
+;; In general:
+;;
+;;   pseudo-accent + appropriate letter -> accented letter
+;;   pseudo-accent + space -> pseudo-accent (except comma and period)
+;;   pseudo-accent + pseudo-accent -> accent (if available)
+;;   pseudo-accent + other -> pseudo-accent + other
+;;
+;; If the pseudo-accent is followed by anything else than a
+;; self-insert-command, the dead-key code is terminated, the
+;; pseudo-accent inserted 'as is' and the bell is rung to signal this.
+;;
+;; Function `iso-accents-mode' can be used to enable the iso accents
+;; minor mode, or disable it.
+
+;; If you want only some of these characters to serve as accents,
+;; add a language to `iso-languages' which specifies the accent characters
+;; that you want, then select the language with `iso-accents-customize'.
+
+;;; Code:
+
+(provide 'iso-acc)
+
+(defgroup iso-acc nil
+  "Minor mode providing electric accent keys."
+  :prefix "iso-accents-"
+  :group 'i18n)
+
+(defcustom iso-accents-insert-offset nonascii-insert-offset
+  "*Offset added by ISO Accents mode to character codes 0200 and above."
+  :type 'integer
+  :group 'iso-acc)
+
+(defvar iso-languages
+  '(("catalan"
+     ;; Note this includes some extra characters used in Spanish,
+     ;; on the idea that someone who uses Catalan is likely to use Spanish
+     ;; as well.
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
+	 (?\  . ?'))
+     (?` (?A . ?\300) (?E . ?\310) (?O . ?\322)
+	 (?a . ?\340) (?e . ?\350) (?o . ?\362)
+	 (?\  . ?`))
+     (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374)
+	  (?\  . ?\"))
+     (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
+	 (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
+	 (?\  . ?\~)))
+
+    ("esperanto"
+     (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306)
+	 (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376)
+	 (?^ . ?^) (?\  . ?^))
+     (?~ (?U . ?\335) (?u . ?\375) (?\  . ?~)))
+
+    ("french"
+     (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347)
+	 (?\  . ?'))
+     (?` (?A . ?\300) (?E . ?\310) (?U . ?\331)
+         (?a . ?\340) (?e . ?\350) (?u . ?\371)
+	 (?\  . ?`))
+     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
+	 (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
+	 (?\  . ?^))
+     (?\" (?E . ?\313) (?I . ?\317)
+          (?e . ?\353) (?i . ?\357)
+	  (?\  . ?\"))
+     (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347)
+	 (?\  . ?~))
+     (?, (?C . ?\307) (?c . ?\347) (?\  . ?\,)))
+
+    ("german"
+     (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334)
+	  (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\  . ?\")))
+
+    ("irish"
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
+	 (?\  . ?')))
+
+    ("portuguese"
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
+	 (?u . ?\372) (?c . ?\347)
+	 (?\  . ?'))
+     (?` (?A . ?\300) (?a . ?\340)
+	 (?\  . ?`))
+     (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324)
+	 (?a . ?\342) (?e . ?\352) (?o . ?\364)
+	 (?\  . ?^))
+     (?\" (?U . ?\334) (?u . ?\374)
+	  (?\  . ?\"))
+     (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365)
+         (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361)
+	 (?\  . ?~))
+     (?, (?c . ?\347) (?C . ?\307) (?, . ?,)))
+
+    ("spanish"
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
+	 (?\  . ?'))
+     (?\" (?U . ?\334) (?u . ?\374) (?\  . ?\"))
+     (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241)
+          (?? . ?\277) (?\  . ?\~)))
+
+    ("latin-1"
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363)
+	 (?u . ?\372) (?y . ?\375) (?' . ?\264)
+	 (?\  . ?'))
+     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
+	 (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
+	 (?` . ?`) (?\  . ?`))
+     (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333)
+	 (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373)
+	 (?^ . ?^) (?\  . ?^))
+     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
+	  (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337)
+	  (?u . ?\374) (?y . ?\377)
+	  (?\" . ?\250) (?\  . ?\"))
+     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
+	 (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361)
+	 (?o . ?\365) (?t . ?\376)
+	 (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277)
+	 (?\~ . ?\270) (?\  . ?~))
+     (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346)
+	 (?o . ?\370)
+	 (?/ . ?\260) (?\  . ?/)))
+
+    ("latin-2" latin-iso8859-2
+     (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315)
+	 (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246)
+	 (?U . ?\332) (?Y . ?\335) (?Z . ?\254)
+	 (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355)
+	 (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266)
+	 (?u . ?\372) (?y . ?\375) (?z . ?\274)
+	 (?' . ?\264) (?\  . ?'))
+     (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252)
+	 (?T . ?\336) (?Z . ?\257)
+	 (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272)
+	 (?t . ?\376) (?z . ?\277)
+	 (?` . ?\252)
+	 (?. . ?\377) (?\  . ?`))
+     (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324)
+	 (?a . ?\342) (?i . ?\356) (?o . ?\364)
+	 (?^ . ?^)			; no special code?
+	 (?\  . ?^))
+     (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334)
+	  (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374)
+	  (?\" . ?\250)
+	  (?\  . ?\"))
+     (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322)
+	 (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333)
+	 (?Z . ?\256)
+	 (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362)
+	 (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373)
+	 (?z . ?\276)
+	 (?v . ?\242)			; v accent
+	 (?\~ . ?\242)			; v accent
+	 (?\. . ?\270)			; cedilla accent
+	 (?\  . ?~)))
+
+    ("latin-3" latin-iso8859-3
+     (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332)
+	 (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372)
+	 (?' . ?\264) (?\  . ?'))
+     (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331)
+	 (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371)
+	 (?` . ?`) (?\  . ?`))
+     (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246)
+	 (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333)
+	 (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266)
+	 (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373)
+	 (?^ . ?^) (?\  . ?^))
+     (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334)
+	  (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374)
+	  (?s . ?\337)
+	  (?\" . ?\250) (?\  . ?\"))
+     (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325)
+	 (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365)
+	 (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273)
+	 (?U . ?\335) (?u . ?\375) (?` . ?\242)
+	 (?~ . ?\270) (?\  . ?~))
+     (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257)
+	 (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277)
+	 (?r . ?\256)
+	 (?. . ?\377) (?# . ?\243) (?$ . ?\244)
+	 (?/ . ?\260) (?\  . ?/))
+     (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257)
+ 	 (?c . ?\345) (?g . ?\365) (?z . ?\277))))
+  "List of language-specific customizations for the ISO Accents mode.
+
+Each element of the list is of the form
+
+    (LANGUAGE [CHARSET]
+     (PSEUDO-ACCENT MAPPINGS)
+     (PSEUDO-ACCENT MAPPINGS)
+     ...)
+
+LANGUAGE is a string naming the language.
+CHARSET (which may be omitted) is the symbol name
+ of the character set used in this language.
+ If CHARSET is omitted, latin-iso8859-1 is the default.
+PSEUDO-ACCENT is a char specifying an accent key.
+MAPPINGS are cons cells of the form (CHAR . ISO-CHAR).
+
+The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped
+to ISO-CHAR on input.")
+
+(defvar iso-language nil
+  "Language for which ISO Accents mode is currently customized.
+Change it with the `iso-accents-customize' function.")
+
+(defvar iso-accents-list nil
+  "Association list for ISO accent combinations, for the chosen language.")
+
+(defcustom iso-accents-mode nil
+  "*Non-nil enables ISO Accents mode.
+Setting this variable makes it local to the current buffer.
+See the function `iso-accents-mode'."
+  :type 'boolean
+  :group 'iso-acc)
+(make-variable-buffer-local 'iso-accents-mode)
+
+(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/)
+  "*List of accent keys that become prefixes in ISO Accents mode.
+The default is (?' ?` ?^ ?\" ?~ ?/), which contains all the supported
+accent keys.  If you set this variable to a list in which some of those
+characters are missing, the missing ones do not act as accents.
+
+Note that if you specify a language with `iso-accents-customize',
+that can also turn off certain prefixes (whichever ones are not needed in
+the language you choose)."
+  :type '(repeat character)
+  :group 'iso-acc)
+
+(defun iso-accents-accent-key (prompt)
+  "Modify the following character by adding an accent to it."
+  ;; Pick up the accent character.
+  (if (and iso-accents-mode
+	   (memq last-input-char iso-accents-enable))
+      (iso-accents-compose prompt)
+    (vector last-input-char)))
+
+
+;; The iso-accents-compose function is called deep inside Emacs' read
+;; key sequence machinery, so the call to read-event below actually
+;; recurses into that machinery.  Doing that does not cause any
+;; problem on its own, but read-event will have marked the window's
+;; display matrix to be accurate -- which is broken by the subsequent
+;; call to delete-region.  Therefore, we must call force-window-update
+;; after delete-region to explicitly clear the accurate state of the
+;; window's display matrix.
+
+(defun iso-accents-compose (prompt)
+  (let* ((first-char last-input-char)
+	 (list (assq first-char iso-accents-list))
+	 ;; Wait for the second key and look up the combination.
+	 (second-char (if (or prompt
+			      (not (eq (key-binding "a")
+				       'self-insert-command))
+			      ;; Not at start of a key sequence.
+			      (> (length (this-single-command-keys)) 1)
+			      ;; Called from anything but the command loop.
+			      this-command)
+			  (progn
+			    (message "%s%c"
+				     (or prompt "Compose with ")
+				     first-char)
+			    (read-event))
+			(insert first-char)
+			(prog1 (read-event)
+			  (delete-region (1- (point)) (point))
+			  ;; Display is no longer up-to-date.
+			  (force-window-update (selected-window)))))
+	 (entry (cdr (assq second-char list))))
+    (if entry
+	;; Found it: return the mapped char
+	(vector
+	 (if (and enable-multibyte-characters
+		  (>= entry ?\200))
+	     (+ iso-accents-insert-offset entry)
+	   entry))
+      ;; Otherwise, advance and schedule the second key for execution.
+      (push second-char unread-command-events)
+      (vector first-char))))
+
+;; It is a matter of taste if you want the minor mode indicated
+;; in the mode line...
+;; If so, uncomment the next four lines.
+;; (or (assq 'iso-accents-mode minor-mode-alist)
+;;     (setq minor-mode-alist
+;; 	  (append minor-mode-alist
+;; 		  '((iso-accents-mode " ISO-Acc")))))
+
+;;;###autoload
+(defun iso-accents-mode (&optional arg)
+  "Toggle ISO Accents mode, in which accents modify the following letter.
+This permits easy insertion of accented characters according to ISO-8859-1.
+When Iso-accents mode is enabled, accent character keys
+\(`, ', \", ^, / and ~) do not self-insert; instead, they modify the following
+letter key so that it inserts an ISO accented letter.
+
+You can customize ISO Accents mode to a particular language
+with the command `iso-accents-customize'.
+
+Special combinations: ~c gives a c with cedilla,
+~d gives an Icelandic eth (d with dash).
+~t gives an Icelandic thorn.
+\"s gives German sharp s.
+/a gives a with ring.
+/e gives an a-e ligature.
+~< and ~> give guillemots.
+~! gives an inverted exclamation mark.
+~? gives an inverted question mark.
+
+With an argument, a positive argument enables ISO Accents mode,
+and a negative argument disables it."
+
+  (interactive "P")
+
+  (if (if arg
+	  ;; Negative arg means switch it off.
+	  (<= (prefix-numeric-value arg) 0)
+	;; No arg means toggle.
+	iso-accents-mode)
+      (setq iso-accents-mode nil)
+
+    ;; Enable electric accents.
+    (setq iso-accents-mode t)))
+
+(defun iso-accents-customize (language)
+  "Customize the ISO accents machinery for a particular language.
+It selects the customization based on the specifications in the
+`iso-languages' variable."
+  (interactive (list (completing-read "Language: " iso-languages nil t)))
+  (let ((table (cdr (assoc language iso-languages)))
+	all-accents tail)
+    (if (not table)
+	(error "Unknown language `%s'" language)
+      (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table))
+							(car table)
+						      'latin-iso8859-1))
+					 128))
+      (if (symbolp (car table))
+	  (setq table (cdr table)))
+      (setq iso-language language
+	    iso-accents-list table)
+      (if key-translation-map
+	  (substitute-key-definition
+	   'iso-accents-accent-key nil key-translation-map)
+	(setq key-translation-map (make-sparse-keymap)))
+      ;; Set up translations for all the characters that are used as
+      ;; accent prefixes in this language.
+      (setq tail iso-accents-list)
+      (while tail
+	(define-key key-translation-map (vector (car (car tail)))
+	  'iso-accents-accent-key)
+	(setq tail (cdr tail))))))
+
+(defun iso-accentuate (start end)
+  "Convert two-character sequences in region into accented characters.
+Noninteractively, this operates on text from START to END.
+This uses the same conversion that ISO Accents mode uses for type-in."
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region start end)
+      (goto-char start)
+      (forward-char 1)
+      (let (entry)
+	(while (< (point) end)
+	  (if (and (memq (preceding-char) iso-accents-enable)
+		   (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list)))))
+	      (progn
+		(forward-char -1)
+		(delete-char 2)
+		(insert entry)
+		(setq end (1- end)))
+	    (forward-char 1)))))))
+
+(defun iso-accent-rassoc-unit (value alist)
+  (let (elt acc)
+    (while (and alist (not elt))
+      (setq acc (car (car alist))
+	    elt (car (rassq value (cdr (car alist))))
+	    alist (cdr alist)))
+    (if elt
+	(cons acc elt))))
+
+(defun iso-unaccentuate (start end)
+  "Convert accented characters in the region into two-character sequences.
+Noninteractively, this operates on text from START to END.
+This uses the opposite of the conversion done by ISO Accents mode for type-in."
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region start end)
+      (goto-char start)
+      (let (entry)
+	(while (< (point) end)
+	  (if (and (> (following-char) 127)
+		   (setq entry (iso-accent-rassoc-unit (following-char)
+						       iso-accents-list)))
+	      (progn
+		(delete-char 1)
+		(insert (car entry) (cdr entry))
+		(setq end (1+ end)))
+	    (forward-char 1)))))))
+
+(defun iso-deaccentuate (start end)
+  "Convert accented characters in the region into unaccented characters.
+Noninteractively, this operates on text from START to END."
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region start end)
+      (goto-char start)
+      (let (entry)
+	(while (< (point) end)
+	  (if (and (> (following-char) 127)
+		   (setq entry (iso-accent-rassoc-unit (following-char)
+						       iso-accents-list)))
+	      (progn
+		(delete-char 1)
+		(insert (cdr entry)))
+	    (forward-char 1)))))))
+
+;; Set up the default settings.
+(iso-accents-customize "latin-1")
+
+;; Use Iso-Accents mode in the minibuffer
+;; if it was in use in the previous buffer.
+(defun iso-acc-minibuf-setup ()
+  (setq iso-accents-mode
+	(save-excursion
+	  (set-buffer (window-buffer minibuffer-scroll-window))
+	  iso-accents-mode)))
+
+(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup)
+
+;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6
+;;; iso-acc.el ends here
--- a/lisp/progmodes/compile.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/compile.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1613,6 +1613,8 @@
     (compilation-set-window-height w)
 
     (when highlight-regexp
+      (if (timerp next-error-highlight-timer)
+	  (cancel-timer next-error-highlight-timer))
       (unless compilation-highlight-overlay
 	(setq compilation-highlight-overlay
 	      (make-overlay (point-min) (point-min)))
@@ -1632,8 +1634,11 @@
 	      (move-overlay compilation-highlight-overlay
 			    (point) end (current-buffer)))
 	    (if (numberp next-error-highlight)
-		(sit-for next-error-highlight))
-	    (if (not (eq next-error-highlight t))
+		(setq next-error-highlight-timer
+		      (run-at-time next-error-highlight nil 'delete-overlay
+				   compilation-highlight-overlay)))
+	    (if (not (or (eq next-error-highlight t)
+			 (numberp next-error-highlight)))
 		(delete-overlay compilation-highlight-overlay))))))
     (when (and (eq next-error-highlight 'fringe-arrow))
       (set (make-local-variable 'overlay-arrow-position)
--- a/lisp/progmodes/cperl-mode.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/cperl-mode.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-abn.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-bnf.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-dtd.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-ebx.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-iso.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf-yac.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/ebnf2ps.el	Thu Mar 31 09:58:14 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/f90.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/f90.el	Thu Mar 31 09:58:14 2005 +0000
@@ -597,41 +597,32 @@
 
 ;; Hideshow support.
 (defconst f90-end-block-re
-  (concat "^[ \t0-9]*\\<end\\>[ \t]*"
+  (concat "^[ \t0-9]*\\<end[ \t]*"
           (regexp-opt '("do" "if" "forall" "function" "interface"
-                        "module" "program" "select"  "subroutine"
+                        "module" "program" "select" "subroutine"
                         "type" "where" ) t)
           "[ \t]*\\sw*")
-  "Regexp matching the end of a \"block\" of F90 code.
+  "Regexp matching the end of an F90 \"block\", from the line start.
 Used in the F90 entry in `hs-special-modes-alist'.")
 
 ;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a
-;; following "(".  DO, CASE, IF can have labels; IF must be
-;; accompanied by THEN.
-;; A big problem is that many of these statements can be broken over
-;; lines, even with embedded comments. We only try to handle this for
-;; IF ... THEN statements, assuming and hoping it will be less common
-;; for other constructs. We match up to one new-line, provided ")
-;; THEN" appears on one line. Matching on just ") THEN" is no good,
-;; since that includes ELSE branches.
-;; For a fully accurate solution, hideshow would probably have to be
-;; modified to allow functions as well as regexps to be used to
-;; specify block start and end positions.
+;; following "(".  DO, CASE, IF can have labels.
 (defconst f90-start-block-re
   (concat
    "^[ \t0-9]*"                         ; statement number
    "\\(\\("
    "\\(\\sw+[ \t]*:[ \t]*\\)?"          ; structure label
-   "\\(do\\|select[ \t]*case\\|if[ \t]*(.*\n?.*)[ \t]*then\\|"
+   "\\(do\\|select[ \t]*case\\|"
+   ;; See comments in fortran-start-block-re for the problems of IF.
+   "if[ \t]*(\\(.*\\|"
+   ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
    ;; Distinguish WHERE block from isolated WHERE.
    "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)"
    "\\|"
    "program\\|interface\\|module\\|type\\|function\\|subroutine"
-   ;; ") THEN" at line end. Problem - also does ELSE.
-;;;   "\\|.*)[ \t]*then[ \t]*\\($\\|!\\)"
    "\\)"
    "[ \t]*")
-  "Regexp matching the start of a \"block\" of F90 code.
+  "Regexp matching the start of an F90 \"block\", from the line start.
 A simple regexp cannot do this in fully correct fashion, so this
 tries to strike a compromise between complexity and flexibility.
 Used in the F90 entry in `hs-special-modes-alist'.")
@@ -1305,12 +1296,12 @@
 Does not check the outermost block, because it may be incomplete.
 Interactively, pushes mark before moving point."
   (interactive "p")
+  (if (interactive-p) (push-mark (point) t))
   (and num (< num 0) (f90-end-of-block (- num)))
   (let ((case-fold-search t)
         (count (or num 1))
         end-list end-this end-type end-label
         start-this start-type start-label)
-    (if (interactive-p) (push-mark (point) t))
     (beginning-of-line)                 ; probably want this
     (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move))
       (beginning-of-line)
--- a/lisp/progmodes/flymake.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/flymake.el	Thu Mar 31 09:58:14 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/fortran.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/fortran.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,7 +1,7 @@
 ;;; fortran.el --- Fortran mode for GNU Emacs
 
-;; Copyright (c) 1986, 93, 94, 95, 97, 98, 99, 2000, 01, 03, 04
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
+;;               2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author: Michael D. Prange <prange@erl.mit.edu>
 ;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
@@ -95,7 +95,7 @@
   :group 'fortran-indent)
 
 (defcustom fortran-if-indent 3
-  "*Extra indentation applied to IF blocks."
+  "*Extra indentation applied to IF, SELECT CASE and WHERE blocks."
   :type  'integer
   :group 'fortran-indent)
 
@@ -321,7 +321,8 @@
                             "while" "inquire" "stop" "return"
                             "include" "open" "close" "read"
                             "write" "format" "print" "select" "case"
-                            "cycle" "exit" "rewind" "backspace")
+                            "cycle" "exit" "rewind" "backspace"
+                            "where" "elsewhere")
                           'paren) "\\>")
            ;; Builtin operators.
            (concat "\\." (regexp-opt
@@ -370,6 +371,29 @@
                 fortran-font-lock-keywords-2)))
   "Gaudy level highlighting for Fortran mode.")
 
+(defvar fortran-font-lock-keywords-4
+  (append fortran-font-lock-keywords-3
+          (list (list
+                 (concat "\\<"
+                         (regexp-opt
+                          '("int" "ifix" "idint" "real" "float" "sngl"
+                            "dble" "cmplx" "ichar" "char" "aint" "dint"
+                            "anint" "dnint" "nint" "idnint" "iabs" "abs"
+                            "dabs" "cabs" "mod" "amod" "dmod" "isign"
+                            "sign" "dsign" "idim" "dim" "ddim" "dprod"
+                            "max" "max0" "amax1" "dmax1" "amax0" "max1"
+                            "min0" "amin1" "dmin1" "amin0" "min1" "len"
+                            "index" "lge" "lgt" "lle" "llt" "aimag"
+                            "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp"
+                            "cexp" "log" "alog" "dlog" "clog" "log10"
+                            "alog10" "dlog10" "sin" "dsin" "csin" "cos"
+                            "dcos" "ccos" "tan" "dtan" "asin" "dasin"
+                            "acos" "dacos" "atan" "datan" "atan2" "datan2"
+                            "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh")
+                          'paren) "[ \t]*(") '(1 font-lock-builtin-face))))
+  "Maximum highlighting for Fortran mode.
+Consists of level 3 plus all other intrinsics not already highlighted.")
+
 ;; Comments are real pain in Fortran because there is no way to
 ;; represent the standard comment syntax in an Emacs syntax table.
 ;; (We can do so for F90-style).  Therefore an unmatched quote in a
@@ -409,6 +433,64 @@
   "Value for `imenu-generic-expression' in Fortran mode.")
 
 
+;; Hideshow support.
+(defconst fortran-blocks-re
+  (concat "block[ \t]*data\\|select[ \t]*case\\|"
+          (regexp-opt '("do" "if" "interface" "function" "map" "program"
+                        "structure" "subroutine" "union" "where")))
+  "Regexp potentially indicating the start or end of a Fortran \"block\".
+Omits naked END statements, and DO-loops closed by anything other
+than ENDDO.")
+
+(defconst fortran-end-block-re
+  ;; Do-loops terminated by things other than ENDDO cannot be handled
+  ;; with a regexp. This omission does not seem to matter to hideshow...
+  (concat "^[ \t0-9]*\\<end[ \t]*\\("
+          fortran-blocks-re
+          ;; Naked END statement.
+          "\\|!\\|$\\)")
+  "Regexp matching the end of a Fortran \"block\", from the line start.
+Note that only ENDDO is handled for the end of a DO-loop.  Used
+in the Fortran entry in `hs-special-modes-alist'.")
+
+(defconst fortran-start-block-re
+  (concat
+   "^[ \t0-9]*\\("                      ; statement number
+   ;; Structure label for DO, IF, SELECT, WHERE.
+   "\\(\\(\\sw+[ \t]*:[ \t]*\\)?"
+   ;; IF blocks are a nuisance:
+   ;; IF ( ... ) foo   is not a block, but a single statement.
+   ;; IF ( ... ) THEN  can be split over multiple lines.
+   ;; [So can, eg, a DO WHILE (... ), but that is less common, I hope.]
+   ;; The regexp below allows for it to be split over at most 2 lines.
+   ;; That leads to the problem of not matching two consecutive IF
+   ;; statements as one, eg:
+   ;; IF ( ... ) foo
+   ;; IF ( ... ) THEN
+   ;; It simply is not possible to do this in a 100% correct fashion
+   ;; using a regexp - see the functions fortran-end-if,
+   ;; fortran-beginning-if for the hoops we have to go through.
+   ;; An alternative is to match on THEN at a line end, eg:
+   ;;   ".*)[ \t]*then[ \t]*\\($\\|!\\)"
+   ;; This would also match ELSE branches, though. This does not seem
+   ;; right to me, because then one has neighbouring blocks that are
+   ;; not nested in each other.
+   "\\(if[ \t]*(\\(.*\\|"
+   ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
+   "do\\|select[ \t]*case\\|where\\)\\)\\|"
+   (regexp-opt '("interface" "function" "map" "program"
+                 "structure" "subroutine" "union"))
+   "\\|block[ \t]*data\\)[ \t]*")
+  "Regexp matching the start of a Fortran \"block\", from the line start.
+A simple regexp cannot do this in fully correct fashion, so this
+tries to strike a compromise between complexity and flexibility.
+Used in the Fortran entry in `hs-special-modes-alist'.")
+
+(add-to-list 'hs-special-modes-alist
+	     `(fortran-mode ,fortran-start-block-re ,fortran-end-block-re
+                            "^[cC*!]" fortran-end-of-block nil))
+
+
 (defvar fortran-mode-syntax-table
   (let ((table (make-syntax-table)))
     ;; We might like `;' to be punctuation (g77 multi-statement
@@ -422,7 +504,8 @@
     (modify-syntax-entry ?/  "."  table)
     (modify-syntax-entry ?\' "\"" table)
     (modify-syntax-entry ?\" "\"" table)
-    ;; Consistent with GNU Fortran -- see the manual.
+    ;; Consistent with GNU Fortran's default -- see the manual.
+    ;; The F77 standard imposes no rule on this issue.
     (modify-syntax-entry ?\\ "\\" table)
     ;; This might be better as punctuation, as for C, but this way you
     ;; can treat floating-point numbers as symbols.
@@ -446,6 +529,8 @@
     (define-key map "\C-c;"    'fortran-comment-region)
     (define-key map "\M-;"     'fortran-indent-comment)
     (define-key map "\M-\n"    'fortran-split-line)
+    (define-key map "\M-\C-n"  'fortran-end-of-block)
+    (define-key map "\M-\C-p"  'fortran-beginning-of-block)
     (define-key map "\M-\C-q"  'fortran-indent-subprogram)
     (define-key map "\C-c\C-w" 'fortran-window-create-momentarily)
     (define-key map "\C-c\C-r" 'fortran-column-ruler)
@@ -606,7 +691,7 @@
 
 Variables controlling indentation style and extra features:
 
-`comment-start'
+`fortran-comment-line-start'
   To use comments starting with `!', set this to the string \"!\".
 `fortran-do-indent'
   Extra indentation within DO blocks (default 3).
@@ -696,7 +781,8 @@
        '((fortran-font-lock-keywords
           fortran-font-lock-keywords-1
           fortran-font-lock-keywords-2
-          fortran-font-lock-keywords-3)
+          fortran-font-lock-keywords-3
+          fortran-font-lock-keywords-4)
          nil t ((?/ . "$/") ("_$" . "w"))
          fortran-beginning-of-subprogram))
   (set (make-local-variable 'font-lock-syntactic-keywords)
@@ -1059,6 +1145,84 @@
     (if (not not-last-statement)
  	'last-statement)))
 
+(defun fortran-looking-at-if-then ()
+  "Return non-nil if at the start of a line with an IF ... THEN statement."
+  ;; cf f90-looking-at-if-then.
+  (let ((p (point))
+        (i (fortran-beginning-if)))
+    (if i
+        (save-excursion
+          (goto-char i)
+          (beginning-of-line)
+          (= (point) p)))))
+
+;; Used in hs-special-modes-alist.
+(defun fortran-end-of-block (&optional num)
+  "Move point forward to the end of the current code block.
+With optional argument NUM, go forward that many balanced blocks.
+If NUM is negative, go backward to the start of a block.  Does
+not check for consistency of block types.  Interactively, pushes
+mark before moving point."
+  (interactive "p")
+  (if (interactive-p) (push-mark (point) t))
+  (and num (< num 0) (fortran-beginning-of-block (- num)))
+  (let ((case-fold-search t)
+        (count (or num 1)))
+    (end-of-line)
+    (while (and (> count 0)
+                (re-search-forward
+                 (concat "\\(" fortran-blocks-re
+                         (if fortran-check-all-num-for-matching-do
+                             "\\|^[ \t]*[0-9]+" "")
+                         "\\|continue\\|end\\)\\>")
+                 nil 'move))
+      (beginning-of-line)
+      (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re))
+              (fortran-looking-at-if-then)
+            (looking-at fortran-start-block-re))
+          (setq count (1+ count))
+        (if (or (looking-at fortran-end-block-re)
+                (and (or (looking-at "^[0-9 \t]*continue")
+                         (and fortran-check-all-num-for-matching-do
+                              (looking-at "[ \t]*[0-9]+")))
+                     (fortran-check-for-matching-do)))
+            (setq count (1- count))))
+      (end-of-line))
+    (if (> count 0) (error "Missing block end"))))
+
+(defun fortran-beginning-of-block (&optional num)
+  "Move point backwards to the start of the current code block.
+With optional argument NUM, go backward that many balanced
+blocks.  If NUM is negative, go forward to the end of a block.
+Does not check for consistency of block types.  Interactively,
+pushes mark before moving point."
+  (interactive "p")
+  (if (interactive-p) (push-mark (point) t))
+  (and num (< num 0) (fortran-end-of-block (- num)))
+  (let ((case-fold-search t)
+        (count (or num 1)))
+    (beginning-of-line)
+    (while (and (> count 0)
+                (re-search-backward
+                 (concat "\\(" fortran-blocks-re
+                         (if fortran-check-all-num-for-matching-do
+                             "\\|^[ \t]*[0-9]+" "")
+                         "\\|continue\\|end\\)\\>")
+                 nil 'move))
+      (beginning-of-line)
+      (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re))
+              (fortran-looking-at-if-then)
+            (looking-at fortran-start-block-re))
+          (setq count (1- count))
+        (if (or (looking-at fortran-end-block-re)
+                (and (or (looking-at "^[0-9 \t]*continue")
+                         (and fortran-check-all-num-for-matching-do
+                              (looking-at "[ \t]*[0-9]+")))
+                     (fortran-check-for-matching-do)))
+            (setq count (1+ count)))))
+    ;; Includes an un-named main program block.
+    (if (> count 0) (error "Missing block start"))))
+
 
 (defun fortran-blink-match (regex keyword find-begin)
   "From a line matching REGEX, blink matching KEYWORD statement line.
@@ -1679,8 +1843,9 @@
                             (1+ (point)))))
                   (if (re-search-forward "\\S\"\\s\"\\S\"" eol t)
                       (backward-char 2))
-                  ;; If the current string is longer than 72 - 6 chars,
-                  ;; break it at the fill column (else infinite loop).
+                  ;; If the current string is longer than (fill-column
+                  ;; - 6) chars, break it at the fill column (else
+                  ;; infinite loop).
                   (if (> (- (point) start)
                          (- fill-column 6 fortran-continuation-indent))
                       fcpoint
--- a/lisp/progmodes/gdb-ui.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/gdb-ui.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1299,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)
@@ -1310,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 ()
@@ -1435,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/gud.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/gud.el	Thu Mar 31 09:58:14 2005 +0000
@@ -531,6 +531,9 @@
 
 (defvar gdb-first-prompt t)
 
+(defvar gud-filter-pending-text nil
+  "Non-nil means this is text that has been saved for later in `gud-filter'.")
+
 ;;;###autoload
 (defun gdb (command-line)
   "Run gdb on program FILE in buffer *gud-FILE*.
@@ -562,6 +565,7 @@
   (setq comint-prompt-regexp "^(.*gdb[+]?) *")
   (setq paragraph-start comint-prompt-regexp)
   (setq gdb-first-prompt t)
+  (setq gud-filter-pending-text nil)
   (run-hooks 'gdb-mode-hook))
 
 ;; One of the nice features of GDB is its impressive support for
@@ -2445,9 +2449,6 @@
   "Non-nil means don't process anything from the debugger right now.
 It is saved for when this flag is not set.")
 
-(defvar gud-filter-pending-text nil
-  "Non-nil means this is text that has been saved for later in `gud-filter'.")
-
 ;; These functions are responsible for inserting output from your debugger
 ;; into the buffer.  The hard work is done by the method that is
 ;; the value of gud-marker-filter.
@@ -2516,19 +2517,22 @@
 	      (gud-filter proc ""))))))
 
 (defvar gud-minor-mode-type nil)
+(defvar gud-overlay-arrow-position nil)
+(put 'gud-overlay-arrow-position 'overlay-arrow-string "=>")
+(add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position)
 
 (defun gud-sentinel (proc msg)
   (cond ((null (buffer-name (process-buffer proc)))
 	 ;; buffer killed
 	 ;; Stop displaying an arrow in a source file.
-	 (setq overlay-arrow-position nil)
+	 (setq gud-overlay-arrow-position nil)
 	 (set-process-buffer proc nil)
 	 (if (memq gud-minor-mode-type '(gdbmi gdba))
 	     (gdb-reset)
 	   (gud-reset)))
 	((memq (process-status proc) '(signal exit))
 	 ;; Stop displaying an arrow in a source file.
-	 (setq overlay-arrow-position nil)
+	 (setq gud-overlay-arrow-position nil)
 	 (with-current-buffer gud-comint-buffer
 	   (if (memq gud-minor-mode-type '(gdbmi gdba))
 	       (gdb-reset)
@@ -2611,13 +2615,13 @@
 	      (goto-line line)
 	      (setq pos (point))
 	      (setq overlay-arrow-string "=>")
-	      (or overlay-arrow-position
-		  (setq overlay-arrow-position (make-marker)))
-	      (set-marker overlay-arrow-position (point) (current-buffer)))
+	      (or gud-overlay-arrow-position
+		  (setq gud-overlay-arrow-position (make-marker)))
+	      (set-marker gud-overlay-arrow-position (point) (current-buffer)))
 	    (cond ((or (< pos (point-min)) (> pos (point-max)))
 		   (widen)
 		   (goto-char pos))))
-	  (if window (set-window-point window overlay-arrow-position))))))
+	  (if window (set-window-point window gud-overlay-arrow-position))))))
 
 ;; The gud-call function must do the right thing whether its invoking
 ;; keystroke is from the GUD buffer itself (via major-mode binding)
--- a/lisp/progmodes/idlw-shell.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/idlw-shell.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/idlwave.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/python.el	Thu Mar 31 09:58:14 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)
@@ -1098,28 +1098,40 @@
 (defvar python-preoutput-continuation nil
   "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.")
 
+(defvar python-preoutput-leftover nil)
+
 ;; Using this stops us getting lines in the buffer like
 ;; >>> ... ... >>>
 ;; Also look for (and delete) an `_emacs_ok' string and call
 ;; `python-preoutput-continuation' if we get it.
 (defun python-preoutput-filter (s)
   "`comint-preoutput-filter-functions' function: ignore prompts not at bol."
+  (when python-preoutput-leftover
+    (setq s (concat python-preoutput-leftover s))
+    (setq python-preoutput-leftover nil))
   (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>"))
-				     " " string-end))
-			    s)
-	      (/= (let ((inhibit-field-text-motion t))
-		    (line-beginning-position))
-		  (point)))
+                                     " " string-end))
+                            s)
+              (/= (let ((inhibit-field-text-motion t))
+                    (line-beginning-position))
+                  (point)))
+         "")
+        ((string= s "_emacs_ok\n")
+         (when python-preoutput-continuation
+           (funcall python-preoutput-continuation)
+           (setq python-preoutput-continuation nil))
+         "")
+        ((string-match "_emacs_out \\(.*\\)\n" s)
+         (setq python-preoutput-result (match-string 1 s))
+         "")
+	((string-match ".*\n" s)
+	 s)
+	((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s)))
+	     (let ((end (min (length "_emacs_out ") (length s))))
+	       (eq t (compare-strings s nil end "_emacs_out " nil end))))
+	 (setq python-preoutput-leftover s)
 	 "")
-	((string= s "_emacs_ok\n")
-	 (when python-preoutput-continuation
-	   (funcall python-preoutput-continuation)
-	   (setq python-preoutput-continuation nil))
-	 "")
-	((string-match "_emacs_out \\(.*\\)\n" s)
-	 (setq python-preoutput-result (match-string 1 s))
-	 "")
-	(t s)))
+        (t s)))
 
 ;;;###autoload
 (defun run-python (&optional cmd noshow)
@@ -1359,7 +1371,9 @@
   (let ((proc (python-proc)))
     (python-send-string string)
     (setq python-preoutput-result nil)
-    (accept-process-output proc 5)
+    (while (progn
+	     (accept-process-output proc 5)
+	     python-preoutput-leftover))
     python-preoutput-result))
 
 ;; Fixme: try to make it work with point in the arglist.  Also, is
@@ -1562,7 +1576,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 +1717,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/sh-script.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/vhdl-mode.el	Thu Mar 31 09:58:14 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/which-func.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/which-func.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,7 @@
 ;;; which-func.el --- print current function in mode line
 
-;; Copyright (C) 1994, 1997, 1998, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1997, 1998, 2001, 2003, 2005
+;;           Free Software Foundation, Inc.
 
 ;; Author:   Alex Rezinsky <alexr@msil.sps.mot.com>
 ;;           (doesn't seem to be responsive any more)
@@ -251,7 +252,7 @@
     (when (and (null name)
 	       (boundp 'imenu--index-alist) (null imenu--index-alist)
 	       (null which-function-imenu-failed))
-      (imenu--make-index-alist)
+      (imenu--make-index-alist t)
       (unless imenu--index-alist
 	(make-local-variable 'which-function-imenu-failed)
 	(setq which-function-imenu-failed t)))
@@ -291,5 +292,5 @@
 
 (provide 'which-func)
 
-;;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827
+;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827
 ;;; which-func.el ends here
--- a/lisp/progmodes/xscheme.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/progmodes/xscheme.el	Thu Mar 31 09:58:14 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/ps-print.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/ps-print.el	Thu Mar 31 09:58:14 2005 +0000
@@ -6114,6 +6114,19 @@
 
 (defvar ps-current-effect 0)
 
+(defvar ps-print-translation-table
+  (let ((tbl (make-char-table 'translation-table nil)))
+    (if (and (boundp 'ucs-mule-8859-to-mule-unicode)
+	   (char-table-p ucs-mule-8859-to-mule-unicode))
+	(map-char-table
+	 #'(lambda (k v) 
+	     (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v))
+		 (aset tbl k v)))
+	 ucs-mule-8859-to-mule-unicode))
+    tbl)
+  "Translation table for PostScript printing.
+The default value is a table that translates non-Latin-1 Latin characters
+to the equivalent Latin-1 characters.")
 
 (defun ps-plot-region (from to font &optional fg-color bg-color effects)
   (or (equal font ps-current-font)
--- a/lisp/register.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/register.el	Thu Mar 31 09:58:14 2005 +0000
@@ -277,7 +277,7 @@
 Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
 START and END are buffer positions indicating what to copy."
   (interactive "cCopy to register: \nr\nP")
-  (set-register register (buffer-substring start end))
+  (set-register register (filter-buffer-substring start end))
   (if delete-flag (delete-region start end)))
 
 (defun append-to-register (register start end &optional delete-flag)
@@ -289,7 +289,7 @@
   (or (stringp (get-register register))
       (error "Register does not contain text"))
   (set-register register (concat (get-register register)
-			    (buffer-substring start end)))
+			    (filter-buffer-substring start end)))
   (if delete-flag (delete-region start end)))
 
 (defun prepend-to-register (register start end &optional delete-flag)
@@ -300,7 +300,7 @@
   (interactive "cPrepend to register: \nr\nP")
   (or (stringp (get-register register))
       (error "Register does not contain text"))
-  (set-register register (concat (buffer-substring start end)
+  (set-register register (concat (filter-buffer-substring start end)
 			    (get-register register)))
   (if delete-flag (delete-region start end)))
 
--- a/lisp/reveal.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/reveal.el	Thu Mar 31 09:58:14 2005 +0000
@@ -163,8 +163,8 @@
   (let ((map (make-sparse-keymap)))
     ;; Override the default move-beginning-of-line and move-end-of-line
     ;; which skips valuable invisible text.
-    (define-key map [?\C-a] 'beginning-of-line)
-    (define-key map [?\C-e] 'end-of-line)
+    (define-key map [remap move-beginning-of-line] 'beginning-of-line)
+    (define-key map [remap move-end-of-line] 'end-of-line)
     map))
 
 ;;;###autoload
--- a/lisp/simple.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/simple.el	Thu Mar 31 09:58:14 2005 +0000
@@ -35,6 +35,13 @@
   (autoload 'widget-convert "wid-edit")
   (autoload 'shell-mode "shell"))
 
+(defcustom idle-update-delay 0.5
+  "*Idle time delay before updating various things on the screen.
+Various Emacs features that update auxiliary information when point moves
+wait this many seconds after Emacs becomes idle before doing an update."
+  :type 'number
+  :group 'display
+  :version "22.1")
 
 (defgroup killing nil
   "Killing and yanking commands."
@@ -105,6 +112,8 @@
   :group 'next-error
   :version "22.1")
 
+(defvar next-error-highlight-timer nil)
+
 (defvar next-error-last-buffer nil
   "The most recent next-error buffer.
 A buffer becomes most recent when its compilation, grep, or
@@ -2216,6 +2225,42 @@
   (reset-this-command-lengths)
   (restore-overriding-map))
 
+(defvar buffer-substring-filters nil
+  "List of filter functions for `filter-buffer-substring'.
+Each function must accept a single argument, a string, and return
+a string.  The buffer substring is passed to the first function
+in the list, and the return value of each function is passed to
+the next.  The return value of the last function is used as the
+return value of `filter-buffer-substring'.
+
+If this variable is nil, no filtering is performed.")
+
+(defun filter-buffer-substring (beg end &optional delete)
+  "Return the buffer substring between BEG and END, after filtering.
+The buffer substring is passed through each of the filter
+functions in `buffer-substring-filters', and the value from the
+last filter function is returned.  If `buffer-substring-filters'
+is nil, the buffer substring is returned unaltered.
+
+If DELETE is non-nil, the text between BEG and END is deleted
+from the buffer.
+
+Point is temporarily set to BEG before caling
+`buffer-substring-filters', in case the functions need to know
+where the text came from.
+
+This function should be used instead of `buffer-substring' or
+`delete-and-extract-region' when you want to allow filtering to
+take place.  For example, major or minor modes can use
+`buffer-substring-filters' to extract characters that are special
+to a buffer, and should not be copied into other buffers."
+  (save-excursion
+    (goto-char beg)
+    (let ((string (if delete (delete-and-extract-region beg end)
+                    (buffer-substring beg end))))
+      (dolist (filter buffer-substring-filters string)
+        (setq string (funcall filter string))))))
+
 ;;;; Window system cut and paste hooks.
 
 (defvar interprogram-cut-function nil
@@ -2392,7 +2437,7 @@
 text.  See `insert-for-yank'."
   (interactive "r")
   (condition-case nil
-      (let ((string (delete-and-extract-region beg end)))
+      (let ((string (filter-buffer-substring beg end t)))
 	(when string			;STRING is nil if BEG = END
 	  ;; Add that string to the kill ring, one way or another.
 	  (if (eq last-command 'kill-region)
@@ -2428,8 +2473,8 @@
 system cut and paste."
   (interactive "r")
   (if (eq last-command 'kill-region)
-      (kill-append (buffer-substring beg end) (< end beg))
-    (kill-new (buffer-substring beg end)))
+      (kill-append (filter-buffer-substring beg end) (< end beg))
+    (kill-new (filter-buffer-substring beg end)))
   (if transient-mark-mode
       (setq deactivate-mark t))
   nil)
@@ -2954,7 +2999,7 @@
 mark position to be lost.
 
 Normally, when a new mark is set, the old one should go on the stack.
-This is why most applications should use push-mark, not set-mark.
+This is why most applications should use `push-mark', not `set-mark'.
 
 Novice Emacs Lisp programmers often try to use the mark for the wrong
 purposes.  The mark saves a location for the user's convenience.
@@ -5182,14 +5227,6 @@
       (message "Delete key deletes %s"
 	       (if normal-erase-is-backspace "forward" "backward"))))
 
-(defcustom idle-update-delay 0.5
-  "*Idle time delay before updating various things on the screen.
-Various Emacs features that update auxiliary information when point moves
-wait this many seconds after Emacs becomes idle before doing an update."
-  :type 'number
-  :group 'display
-  :version "22.1")
-
 (defvar vis-mode-saved-buffer-invisibility-spec nil
   "Saved value of `buffer-invisibility-spec' when Visible mode is on.")
 
--- a/lisp/term.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/term.el	Thu Mar 31 09:58:14 2005 +0000
@@ -2571,7 +2571,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)
@@ -3026,7 +3035,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)
@@ -3035,7 +3044,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
@@ -3683,12 +3692,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/term/bobcat.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/term/xterm.el	Thu Mar 31 09:58:14 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/fill.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/fill.el	Thu Mar 31 09:58:14 2005 +0000
@@ -539,6 +539,17 @@
 	    ;; Make sure we take SOMETHING after the fill prefix if any.
 	    (fill-find-break-point linebeg)))))
 
+;; Like text-properties-at but don't include `composition' property.
+(defun fill-text-properties-at (pos)
+  (let ((l (text-properties-at pos))
+	prop-list)
+    (while l
+      (unless (eq (car l) 'composition)
+	(setq prop-list
+	      (cons (car l) (cons (cadr l) prop-list))))
+      (setq l (cddr l)))
+    prop-list))
+
 (defun fill-newline ()
   ;; Replace whitespace here with one newline, then
   ;; indent to left margin.
@@ -546,7 +557,7 @@
   (insert ?\n)
   ;; Give newline the properties of the space(s) it replaces
   (set-text-properties (1- (point)) (point)
-		       (text-properties-at (point)))
+		       (fill-text-properties-at (point)))
   (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?")
        (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|)
 	   (match-end 2))
--- a/lisp/textmodes/ispell.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/ispell.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/org.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,14 +1,14 @@
 ;; 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) 2004, 2005 Free Software Foundation
+;;
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 3.04
-
+;; Version: 3.05
+;;
 ;; This file is part of GNU Emacs.
-
+;;
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation; either version 2, or (at your option)
@@ -75,10 +75,18 @@
 ;; -------------
 ;; The documentation of Org-mode can be found in the TeXInfo file.
 ;; This distribution also contains a PDF version of it.  At the homepage
-;; of Org-mode, you can find and read online the same text as HTML.
+;; of Org-mode, you can read online the same text online as HTML.
 ;;
 ;; Changes:
 ;; -------
+;; Version 3.05
+;;    - Agenda entries from the diary are linked to the diary file, so
+;;      adding and editing diary entries can be done directly from the agenda.
+;;    - Many calendar/diary commands available directly from agenda.
+;;    - Field copying in tables with S-RET does increment.
+;;    - C-c C-x C-v extracts the visible part of the buffer for printing.
+;;    - Moving subtrees up and down preserves the whitespace at the tree end.
+;;
 ;; Version 3.04
 ;;    - Table editor optimized to need fewer realignments, and to keep
 ;;      table shape when typing in fields.
@@ -213,7 +221,7 @@
 
 ;;; Customization variables
 
-(defvar org-version "3.04"
+(defvar org-version "3.05"
   "The version number of the file org.el.")
 (defun org-version ()
   (interactive)
@@ -241,7 +249,13 @@
   :group 'org)
 
 (defcustom org-startup-folded t
-  "Non-nil means, entering Org-mode will switch to OVERVIEW."
+  "Non-nil means, entering Org-mode will switch to OVERVIEW.
+This can also be configured on a per-file basis by adding one of
+the following lines anywhere in the buffer:
+
+   #+STARTUP: fold
+   #+STARTUP: nofold
+"
   :group 'org-startup
   :type 'boolean)
 
@@ -255,7 +269,13 @@
 (defcustom org-startup-with-deadline-check nil
   "Non-nil means, entering Org-mode will run the deadline check.
 This means, if you start editing an org file, you will get an
-immediate reminder of any due deadlines."
+immediate reminder of any due deadlines.
+This can also be configured on a per-file basis by adding one of
+the following lines anywhere in the buffer:
+
+   #+STARTUP: dlcheck
+   #+STARTUP: nodlcheck
+"
   :group 'org-startup
   :type 'boolean)
 
@@ -534,6 +554,11 @@
   :group 'org-agenda
   :type 'boolean)
 
+(defcustom org-fit-agenda-window t
+  "Non-nil means, change windo size of agenda to fit content."
+  :group 'org-agenda
+  :type 'boolean)
+
 (defcustom org-agenda-show-all-dates t
   "Non-nil means, `org-agenda' shows every day in the selected range.
 When nil, only the days which actually have entries are shown."
@@ -892,7 +917,7 @@
 very good at guessing when a re-align will be necessary, but you can always
 force one with `C-c C-c'.
 
-I you would like to use the optimized version in Org-mode, but the un-optimized
+If you would like to use the optimized version in Org-mode, but the un-optimized
 version in OrgTbl-mode, see the variable `orgtbl-optimized'.
 
 This variable can be used to turn on and off the table editor during a session,
@@ -971,6 +996,11 @@
   :group 'org-table
   :type 'boolean)
 
+(defcustom org-table-copy-increment t
+  "Non-nil means, increment when copying current field with \\[org-table-copy-down]."
+  :group 'org-table
+  :type 'boolean)
+
 (defcustom org-table-tab-recognizes-table.el t
   "Non-nil means, TAB will automatically notice a table.el table.
 When it sees such a table, it moves point into it and - if necessary -
@@ -1260,7 +1290,7 @@
   "Face used for level 7 headlines."
   :group 'org-faces)
 
-(defface org-level-8-face ;;font-lock-string-face
+(defface org-level-8-face ;; font-lock-string-face
   '((((type tty) (class color)) (:foreground "green"))
     (((class color) (background light)) (:foreground "RosyBrown"))
     (((class color) (background dark)) (:foreground "LightSalmon"))
@@ -1276,8 +1306,24 @@
   "Face for deadlines and TODO keyords."
   :group 'org-faces)
 
-;; Inheritance does not work for xemacs, unfortunately.
-;; We just copy the definitions and waste some space....
+(defcustom org-fontify-done-headline nil
+  "Non-nil means, change the face of a headline if it is marked DONE.
+Normally, only the TODO/DONE keyword indicates the state of a headline.
+When this is non-nil, the headline after the keyword is set to the
+`org-headline-done-face' as an additional indication."
+  :group 'org-faces
+  :type 'boolean)
+
+(defface org-headline-done-face ;; font-lock-string-face
+  '((((type tty) (class color)) (:foreground "green"))
+    (((class color) (background light)) (:foreground "RosyBrown"))
+    (((class color) (background dark)) (:foreground "LightSalmon"))
+    (t (:italic t)))
+  "Face used to indicate that a headline is DONE.  See also the variable
+`org-fontify-done-headline'."
+  :group 'org-faces)
+
+;; Inheritance does not yet work for xemacs. So we just copy...
 
 (defface org-deadline-announce-face
   '((((type tty) (class color)) (:foreground "blue" :weight bold))
@@ -1341,11 +1387,11 @@
     ))
 (defvar org-n-levels (length org-level-faces))
 
-
 ;; Tell the compiler about dynamically scoped variables,
 ;; and variables from other packages
 (eval-when-compile
   (defvar zmacs-regions)
+  (defvar original-date)
   (defvar org-transient-mark-mode)
   (defvar org-old-auto-fill-inhibit-regexp)
   (defvar orgtbl-mode-menu)
@@ -1521,8 +1567,11 @@
           (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>")
                 '(1 'org-warning-face t))
           '("^#.*" (0 'font-lock-comment-face t))
-          (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>")
-                '(1 'org-done-face t))
+          (if org-fontify-done-headline
+              (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>")
+                    '(1 'org-done-face t) '(2 'org-headline-done-face t))
+            (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>")
+                  '(1 'org-done-face t)))
           '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)"
             (1 'org-table-face t))
           '("^[ \t]*\\(:.*\\)" (1 'org-table-face t)))))
@@ -1563,7 +1612,7 @@
 (defvar org-cycle-global-status nil)
 (defvar org-cycle-subtree-status nil)
 (defun org-cycle (&optional arg)
-  "Visibility cycling for org-mode.
+  "Visibility cycling for Org-mode.
 
 - When this function is called with a prefix argument, rotate the entire
   buffer through 3 states (global cycling)
@@ -1579,6 +1628,9 @@
                zoom in further.
   3. SUBTREE:  Show the entire subtree, including body text.
 
+- When there is a numeric prefix, go ARG levels up and do a `show-subtree',
+  keeping cursor position.
+
 - When point is not at the beginning of a headline, execute
   `indent-relative', like TAB normally does.  See the option
   `org-cycle-emulate-tab' for details.
@@ -1587,8 +1639,9 @@
   no headline in line 1, this function will act as if called with prefix arg."
   (interactive "P")
 
-  (if (and (bobp) (not (looking-at outline-regexp)))
-      ; special case:  use global cycling
+  (if (or (and (bobp) (not (looking-at outline-regexp)))
+          (equal arg '(4)))
+      ;; special case:  use global cycling
       (setq arg t))
 
   (cond
@@ -1600,7 +1653,7 @@
           (org-table-justify-field-maybe)
           (org-table-next-field))))
 
-   (arg ;; Global cycling
+   ((eq arg t) ;; Global cycling
 
     (cond
      ((and (eq last-command this-command)
@@ -1621,18 +1674,27 @@
 	    (if (bobp) (throw 'exit nil))))
 	(message "CONTENTS...done"))
       (setq org-cycle-global-status 'contents))
+
      ((and (eq last-command this-command)
 	   (eq org-cycle-global-status 'contents))
       ;; We just showed the table of contents - now show everything
       (show-all)
       (message "SHOW ALL")
       (setq org-cycle-global-status 'all))
+
      (t
       ;; Default action: go to overview
       (hide-sublevels 1)
       (message "OVERVIEW")
       (setq org-cycle-global-status 'overview))))
 
+   ((integerp arg)
+    ;; Show-subtree, ARG levels up from here.
+    (save-excursion
+      (org-back-to-heading)
+      (outline-up-heading arg)
+      (show-subtree)))
+
    ((save-excursion (beginning-of-line 1) (looking-at outline-regexp))
     ;; At a heading: rotate between three different views
     (org-back-to-heading)
@@ -1970,7 +2032,7 @@
       (save-excursion (outline-end-of-heading)
 		      (setq folded (org-invisible-p)))
       (outline-end-of-subtree))
-    (if (equal (char-after) ?\n) (forward-char 1))
+    (outline-next-heading)
     (setq end (point))
     ;; Find insertion point, with error handling
     (goto-char beg)
@@ -1982,7 +2044,10 @@
     (if (> arg 0)
 	;; Moving forward - still need to move over subtree
 	(progn (outline-end-of-subtree)
-	       (if (equal (char-after) ?\n) (forward-char 1))))
+               (outline-next-heading)
+               (if (not (or (looking-at (concat "^" outline-regexp))
+                            (bolp)))
+                   (newline))))
     (move-marker ins-point (point))
     (setq txt (buffer-substring beg end))
     (delete-region beg end)
@@ -1993,7 +2058,7 @@
 
 (defvar org-subtree-clip ""
   "Clipboard for cut and paste of subtrees.
-This is actually only a cpoy of the kill, because we use the normal kill
+This is actually only a copy of the kill, because we use the normal kill
 ring.  We need it to check if the kill was created by `org-copy-subtree'.")
 
 (defvar org-subtree-clip-folded nil
@@ -2380,7 +2445,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
@@ -2906,6 +2971,14 @@
 (define-key org-agenda-mode-map "p" 'org-agenda-priority)
 (define-key org-agenda-mode-map "," 'org-agenda-priority)
 (define-key org-agenda-mode-map "i" 'org-agenda-diary-entry)
+(define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar)
+(define-key org-agenda-mode-map "C" 'org-agenda-convert-date)
+(define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon)
+(define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon)
+(define-key org-agenda-mode-map "s" 'org-agenda-sunrise-sunset)
+(define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset)
+(define-key org-agenda-mode-map "h" 'org-agenda-holidays)
+(define-key org-agenda-mode-map "H" 'org-agenda-holidays)
 (define-key org-agenda-mode-map "+" 'org-agenda-priority-up)
 (define-key org-agenda-mode-map "-" 'org-agenda-priority-down)
 (define-key org-agenda-mode-map [(right)] 'org-agenda-later)
@@ -2951,6 +3024,12 @@
      :style toggle :selected org-agenda-include-diary :active t]
     "--"
     ["New Diary Entry" org-agenda-diary-entry t]
+    ("Calendar commands"
+     ["Goto calendar" org-agenda-goto-calendar t]
+     ["Phases of the Moon" org-agenda-phases-of-moon t]
+     ["Sunrise/Sunset" org-agenda-sunrise-sunset t]
+     ["Holidays" org-agenda-holidays t]
+     ["Convert" org-agenda-convert-date t])
     "--"
     ["Quit" org-agenda-quit t]
     ["Exit and Release Buffers" org-agenda-exit t]
@@ -3110,7 +3189,7 @@
                          (d (- nt n1)))
                     (- sd (+ (if (< d 0) 7 0) d)))))
          (day-numbers (list start))
-         s e rtn rtnall file date d start-pos)
+         s e rtn rtnall file date d start-pos end-pos)
     (setq org-agenda-redo-command 
           (list 'org-agenda include-all start-day ndays))
     ;; Make the list of days
@@ -3146,7 +3225,9 @@
             s (point))
       (if (or (= d today)
               (and (not start-pos) (= d sd)))
-          (setq start-pos (point)))
+          (setq start-pos (point))
+        (if (and start-pos (not end-pos))
+            (setq end-pos (point))))
       (setq files org-agenda-files
             rtnall nil)
       (while (setq file (pop files))
@@ -3173,6 +3254,17 @@
             (put-text-property s (1- (point)) 'day d))))            
     (goto-char (point-min))
     (setq buffer-read-only t)
+    (if org-fit-agenda-window
+        (fit-window-to-buffer nil (/ (* (frame-height) 3) 4)
+                              (/ (frame-height) 2)))
+    (unless (and (pos-visible-in-window-p (point-min))
+                 (pos-visible-in-window-p (point-max)))
+      (goto-char (1- (point-max)))
+      (recenter -1)
+      (if (not (pos-visible-in-window-p (or start-pos 1)))
+          (progn
+            (goto-char (or start-pos 1))
+            (recenter 1))))
     (goto-char (or start-pos 1))
     (if (not org-select-agenda-window) (select-window win))
     (message "")))
@@ -3285,10 +3377,10 @@
   "Set the mode name to indicate all the small mode seetings."
   (setq mode-name
         (concat "Org-Agenda"
-                (if (equal org-agenda-ndays 1) " Day" "")
-                (if (equal org-agenda-ndays 7) " Week" "")
-                (if org-agenda-follow-mode " Follow" "")
-                (if org-agenda-include-diary " Diary" "")))
+                (if (equal org-agenda-ndays 1) " Day"    "")
+                (if (equal org-agenda-ndays 7) " Week"   "")
+                (if org-agenda-follow-mode     " Follow" "")
+                (if org-agenda-include-diary   " Diary"  "")))
   (force-mode-line-update))
 
 (defun org-agenda-post-command-hook ()
@@ -3299,26 +3391,33 @@
 (defun org-get-entries-from-diary (date)
   "Get the (emacs calendar) diary entries for DATE."
   (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*")
-         (diary-display-hook '(sort-diary-entries fancy-diary-display))
+         (diary-display-hook '(fancy-diary-display))
+         (list-diary-entries-hook 
+          (cons 'org-diary-default-entry list-diary-entries-hook))
          entries
-         (disable-org-agenda t))
+         (disable-org-diary t))
     (save-excursion
       (save-window-excursion
         (list-diary-entries date 1)))
     (if (not (get-buffer fancy-diary-buffer))
         (setq entries nil)
       (save-excursion
-        (set-buffer fancy-diary-buffer)
+        (switch-to-buffer fancy-diary-buffer)
         (setq buffer-read-only nil)
         (if (= (point-max) 1)
             ;; No entries
             (setq entries nil)
-          ;; Omit the date
-          (beginning-of-line 3)
-          (delete-region (point-min) (point))
+          ;; Omit the date and other unnecessary stuff
+          (org-agenda-cleanup-fancy-diary)
+          ;; Add prefix to each line and extend the text properties
+          (goto-char (point-min))
           (while (and (re-search-forward "^" nil t) (not (eobp)))
-            (replace-match "  Diary:     "))
-          (setq entries (buffer-substring (point-min) (- (point-max) 1))))
+            (replace-match "  Diary:     ")
+            (add-text-properties (point-at-bol) (point)
+                                 (text-properties-at (point))))
+          (if (= (point-max) 1)
+              (setq entries nil)
+            (setq entries (buffer-substring (point-min) (- (point-max) 1)))))
         (set-buffer-modified-p nil)
         (kill-buffer fancy-diary-buffer)))
     (when entries
@@ -3337,6 +3436,49 @@
                x)
              entries)))))
 
+(defun org-agenda-cleanup-fancy-diary ()
+  "Remove unwanted stuff in buffer created by fancy-diary-display.
+This gets rid of the date, the underline under the date, and
+the dummy entry installed by org-mode to ensure non-empty diary for each
+date."
+  (goto-char (point-min))
+  (if (looking-at ".*?:[ \t]*")
+      (progn
+        (replace-match "")
+        (re-search-forward "\n=+$" nil t)
+        (replace-match "")
+        (while (re-search-backward "^ +" nil t) (replace-match "")))
+    (re-search-forward "\n=+$" nil t)
+    (delete-region (point-min) (min (point-max) (1+ (match-end 0)))))
+  (if (re-search-forward "^Org-mode dummy\n?" nil t)
+      (replace-match "")))
+
+;; Advise the add-to-diary-list function to allow org to jump to
+;; diary entires. Wrapped into eval-after-load to avoid loading
+;; advice unnecessarily
+(eval-after-load "diary-lib"
+  '(defadvice add-to-diary-list (before org-mark-diary-entry activate)
+     "Make the position visible."
+     (if (and (boundp 'disable-org-diary)  ;; called from org-agenda
+              (stringp string)
+              (buffer-file-name))
+         (add-text-properties
+          0 (length string)
+          (list 'mouse-face 'highlight
+                'keymap org-agenda-keymap
+                'help-echo 
+                (format
+                 "mouse-2 or RET jump to diary file %s"
+                 (abbreviate-file-name (buffer-file-name)))
+                'org-agenda-diary-link t
+                'org-marker (org-agenda-new-marker (point-at-bol)))
+          string))))
+
+(defun org-diary-default-entry ()
+  "Add a dummy entry to the diary.
+Needed to avoid empty dates which mess up holiday display."
+  (add-to-diary-list original-date "Org-mode dummy" ""))
+
 (defun org-add-file (&optional file)
   "Add current file to the list of files in variable `org-agenda-files'.
 These are the files which are being checked for agenda entries.
@@ -3468,7 +3610,7 @@
          file rtn results)
     ;; If this is called during org-agenda, don't return any entries to
     ;; the calendar.  Org Agenda will list these entries itself.
-    (if (boundp 'disable-org-agenda) (setq files nil))
+    (if (boundp 'disable-org-diary) (setq files nil))
     (while (setq file (pop files))
       (setq rtn (apply 'org-agenda-get-day-entries file date args))
       (setq results (append results rtn)))
@@ -3864,7 +4006,6 @@
   (let* ((pri (get-text-property (point-at-bol) 'priority)))
     (message "Priority is %d" (if pri pri -1000))))
 
-
 (defun org-agenda-goto ()
   "Go to the Org-mode file which contains the item at point."
   (interactive)
@@ -3875,10 +4016,11 @@
     (switch-to-buffer-other-window buffer)
     (widen)
     (goto-char pos)
-    (org-show-hidden-entry)
-    (save-excursion
-      (and (outline-next-heading)
-           (org-flag-heading nil)))))  ; show the next heading
+    (when (eq major-mode 'org-mode)
+      (org-show-hidden-entry)
+      (save-excursion
+        (and (outline-next-heading)
+             (org-flag-heading nil))))))  ; show the next heading
 
 (defun org-agenda-switch-to ()
   "Go to the Org-mode file which contains the item at point."
@@ -3891,10 +4033,11 @@
     (delete-other-windows)
     (widen)
     (goto-char pos)
-    (org-show-hidden-entry)
-    (save-excursion
-      (and (outline-next-heading)
-           (org-flag-heading nil)))))  ; show the next heading
+    (when (eq major-mode 'org-mode)
+      (org-show-hidden-entry)
+      (save-excursion
+        (and (outline-next-heading)
+             (org-flag-heading nil))))))  ; show the next heading
 
 (defun org-agenda-goto-mouse (ev)
   "Go to the Org-mode file which contains the deadline at the mouse click."
@@ -3923,12 +4066,18 @@
   (mouse-set-point ev)
   (org-agenda-show))
 
+(defun org-agenda-check-no-diary ()
+  "Check if the entry is a diary link and abort if yes."
+  (if (get-text-property (point) 'org-agenda-diary-link)
+      (org-agenda-error)))
+
 (defun org-agenda-error ()
   (error "Command not allowed in this line."))
 
 (defun org-agenda-todo ()
   "Cycle TODO state of line at point, also in Org-mode file."
   (interactive)
+  (org-agenda-check-no-diary)
   (let* ((props (text-properties-at (point)))
          (col (current-column))
          (marker (or (get-text-property (point) 'org-marker)
@@ -3971,6 +4120,7 @@
 (defun org-agenda-priority (&optional force-direction)
   "Set the priority of line at point, also in Org-mode file."
   (interactive)
+  (org-agenda-check-no-diary)
   (let* ((props (text-properties-at (point)))
          (col (current-column))
          (marker (or (get-text-property (point) 'org-marker)
@@ -4003,6 +4153,7 @@
 (defun org-agenda-date-later (arg &optional what)
   "Change the date of this item to one day later."
   (interactive "p")
+  (org-agenda-check-no-diary)
   (let* ((marker (or (get-text-property (point) 'org-marker)
                      (org-agenda-error)))
          (buffer (marker-buffer marker))
@@ -4022,8 +4173,9 @@
   (org-agenda-date-later (- arg) what))
 
 (defun org-agenda-date-today (arg)
-  "Change the date of this item to one day later."
+  "Change the date of this item to today."
   (interactive "p")
+  (org-agenda-check-no-diary)
   (let* ((marker (or (get-text-property (point) 'org-marker)
                      (org-agenda-error)))
          (buffer (marker-buffer marker))
@@ -4084,7 +4236,91 @@
                      (get-text-property point 'day))))
             (call-interactively cmd))
         (fset 'calendar-cursor-to-date oldf)))))
-  
+
+
+(defun org-agenda-execute-calendar-command (cmd)
+  "Execute a calendar command from the agenda, with the date associated to
+the cursor position."
+  (require 'diary-lib)
+  (unless (get-text-property (point) 'day)
+    (error "Don't know which date to use for calendar command"))
+  (let* ((oldf (symbol-function 'calendar-cursor-to-date))
+         (point (point))
+         (mark (or (mark t) (point)))
+         (date (calendar-gregorian-from-absolute
+                (get-text-property point 'day)))
+         (displayed-day (extract-calendar-day date))
+         (displayed-month (extract-calendar-month date))
+         (displayed-year (extract-calendar-year date)))
+      (unwind-protect
+          (progn
+            (fset 'calendar-cursor-to-date
+                  (lambda (&optional error)
+                    (calendar-gregorian-from-absolute 
+                     (get-text-property point 'day))))
+            (call-interactively cmd))
+        (fset 'calendar-cursor-to-date oldf))))
+
+(defun org-agenda-phases-of-moon ()
+  "Display the phases of the moon for 3 month around cursor date."
+  (interactive)
+  (org-agenda-execute-calendar-command 'calendar-phases-of-moon))
+
+(defun org-agenda-holidays ()
+  "Display the holidays for 3 month around cursor date."
+  (interactive)
+  (org-agenda-execute-calendar-command 'list-calendar-holidays))
+
+(defun org-agenda-sunrise-sunset (arg)
+  "Display sunrise and sunset for the cursor date.
+Latitude and longitude can be specified with the variables
+`calendar-latitude' and `calendar-longitude'.  When called with prefix
+argument, location will be prompted for."
+  (interactive "P")
+  (let ((calendar-longitude (if arg nil calendar-longitude))
+        (calendar-latitude  (if arg nil calendar-latitude))
+        (calendar-location-name nil))
+    (org-agenda-execute-calendar-command 'calendar-sunrise-sunset)))
+
+(defun org-agenda-goto-calendar ()
+  "Open the Emacs calendar with the date at the cursor."
+  (interactive)
+  (let* ((day (or (get-text-property (point) 'day)
+                  (error "Don't know which date to open in calendar")))
+         (date (calendar-gregorian-from-absolute day)))
+    (calendar)
+    (calendar-goto-date date)))
+
+(defun org-agenda-convert-date ()
+  (interactive)
+  (let ((day (get-text-property (point) 'day))
+        date s)
+    (unless day
+      (error "Don't know which date to convert"))
+    (setq date (calendar-gregorian-from-absolute day))
+    (require 'cal-julian)
+    (require 'cal-hebrew)
+    (require 'cal-islam)
+    (require 'cal-french)
+    (require 'cal-mayan)
+    (require 'cal-coptic)
+    (require 'cal-persia)
+    (require 'cal-china)
+    (setq s (concat 
+             "Gregorian:  " (calendar-date-string date) "\n"
+             "Julian:     " (calendar-julian-date-string date) "\n"
+             "Astronomic: " (calendar-astro-date-string date) " (at noon UTC)\n"
+             "Hebrew:     " (calendar-hebrew-date-string date) "\n"
+             "Islamic:    " (calendar-islamic-date-string date) "\n"
+             "French:     " (calendar-french-date-string date) "\n"
+             "Maya:       " (calendar-mayan-date-string date) "\n"
+             "Coptic:     " (calendar-coptic-date-string date) "\n"
+             "Persian:    " (calendar-persian-date-string date) "\n"
+             "Chineese:   " (calendar-chinese-date-string date) "\n"))
+    (with-output-to-temp-buffer "*Dates*"
+      (princ s))
+    (fit-window-to-buffer (get-buffer-window "*Dates*"))))
+
 ;;; Link Stuff
 
 (defun org-find-file-at-mouse (ev)
@@ -5087,14 +5323,23 @@
       (skip-chars-backward "^|\n\r")
       (if (looking-at " ") (forward-char 1)))))
 
-(defun org-table-copy-from-above (n)
-  "Copy into the current column the nearest non-empty field from above.
-With prefix argument N, take the Nth non-empty field."
+(defun org-table-copy-down (n)
+  "Copy a field down in the current column.
+If the field at the cursor is empty, copy into it the content of the nearest
+non-empty field above.  With argument N, use the Nth non-empty field.
+If the current fields is not empty, it is copied down to the next row, and
+the cursor is moved with it.  Therefore, repeating this command causes the
+column to be filled row-by-row.  
+If the variable `org-table-copy-increment' is non-nil and the field is an
+integer, it will be incremented while copying."
   (interactive "p")
-  (let ((colpos (org-table-current-column))
-        (beg (org-table-begin))
-        txt)
+  (let* ((colpos (org-table-current-column))
+         (field (org-table-get-field))
+         (non-empty (string-match "[^ \t]" field))
+         (beg (org-table-begin))
+         txt)
     (org-table-check-inside-data-field)
+    (if non-empty (progn (org-table-next-row) (org-table-blank-field)))
     (if (save-excursion
           (setq txt
                 (catch 'exit
@@ -5103,10 +5348,13 @@
                                                     beg t))
                     (org-table-goto-column colpos t)
                     (if (and (looking-at
-                              "|[ \t]*\\([^| \t][^|]*[^| \t]\\)[ \t]*|")
+                              "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|")
                              (= (setq n (1- n)) 0))
                         (throw 'exit (match-string 1)))))))
         (progn
+          (if (and org-table-copy-increment
+                   (string-match "^[0-9]+$" txt))
+              (setq txt (format "%d" (+ (string-to-int txt) 1))))
           (insert txt)
           (org-table-align))
       (error "No non-empty field found"))))
@@ -5902,13 +6150,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)))
@@ -6039,7 +6287,7 @@
          ([(shift tab)]        org-table-previous-field)
          ("\C-c\C-c"           org-table-align)
          ([(return)]           org-table-next-row)
-         ([(shift return)]     org-table-copy-from-above)
+         ([(shift return)]     org-table-copy-down)
          ([(meta return)]      org-table-wrap-region)
          ("\C-c\C-q"           org-table-wrap-region)
          ("\C-c?"              org-table-current-column)
@@ -6157,7 +6405,7 @@
     "--"
     ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"]
     ["Copy field from above"
-     org-table-copy-from-above :active (org-at-table-p) :keys "S-RET"]
+     org-table-copy-down :active (org-at-table-p) :keys "S-RET"]
     "--"
     ("Column"
      ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-<left>"]
@@ -6678,7 +6926,57 @@
       (setq char (nth (- umax level) (reverse org-ascii-underline)))
       (if org-export-with-section-numbers
           (setq title (concat (org-section-number level) " " title)))
-      (insert title "\n" (make-string (length title) char) "\n"))))
+      (insert title "\n" (make-string (string-width title) char) "\n"))))
+
+(defun org-export-copy-visible (&optional arg)
+  "Copy the visible part of the buffer to another buffer, for printing.
+Also removes the first line of the buffer it is specifies a mode,
+and all options lines."
+  (interactive "P")
+  (let* ((filename (concat (file-name-sans-extension (buffer-file-name))
+                           ".txt"))
+         (buffer (find-file-noselect filename))
+         (ore (concat 
+               (org-make-options-regexp
+                '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP"
+                  "TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE"))
+               (if org-noutline-p "\\(\n\\|$\\)" "")))
+         s e)
+    (save-excursion
+      (set-buffer buffer)
+      (erase-buffer)
+      (text-mode))
+    (save-excursion
+      (setq s (goto-char (point-min)))
+      (while (not (= (point) (point-max)))
+        (goto-char (org-find-invisible))
+        (append-to-buffer buffer s (point))
+        (setq s (goto-char (org-find-visible)))))
+    (switch-to-buffer-other-window buffer)
+    (newline)
+    (goto-char (point-min))
+    (if (looking-at ".*-\\*- mode:.*\n")
+        (replace-match ""))
+    (while (re-search-forward ore nil t)
+      (replace-match ""))
+    (goto-char (point-min))))
+
+(defun org-find-visible ()
+  (if (featurep 'noutline)
+      (let ((s (point)))
+        (while (and (not (= (point-max) (setq s (next-overlay-change s))))
+                    (get-char-property s 'invisible)))
+        s)
+    (skip-chars-forward "^\n")
+    (point)))
+(defun org-find-invisible ()
+  (if (featurep 'noutline)
+      (let ((s (point)))
+        (while (and (not (= (point-max) (setq s (next-overlay-change s))))
+                    (not (get-char-property s 'invisible))))
+        s)
+    (skip-chars-forward "^\r")
+    (point)))
 
 ;; HTML
 
@@ -7423,7 +7721,7 @@
 (define-key org-mode-map [(shift tab)]    'org-shifttab)
 (define-key org-mode-map "\C-c\C-c"       'org-ctrl-c-ctrl-c)
 (define-key org-mode-map [(return)]       'org-return)
-(define-key org-mode-map [(shift return)] 'org-table-copy-from-above)
+(define-key org-mode-map [(shift return)] 'org-table-copy-down)
 (define-key org-mode-map [(meta return)]  'org-meta-return)
 (define-key org-mode-map [(control up)]   'org-move-line-up)
 (define-key org-mode-map [(control down)] 'org-move-line-down)
@@ -7436,6 +7734,10 @@
 (define-key org-mode-map "\C-c\C-q"       'org-table-wrap-region)
 (define-key org-mode-map "\C-c\C-xa"      'org-export-as-ascii)
 (define-key org-mode-map "\C-c\C-x\C-a"   'org-export-as-ascii)
+(define-key org-mode-map "\C-c\C-xv"      'org-export-copy-visible)
+(define-key org-mode-map "\C-c\C-x\C-v"   'org-export-copy-visible)
+(define-key org-mode-map "\C-c\C-xo"      'org-export-as-opml)
+(define-key org-mode-map "\C-c\C-x\C-o"   'org-export-as-opml)
 (define-key org-mode-map "\C-c\C-xt"      'org-insert-export-options-template)
 (define-key org-mode-map "\C-c:"          'org-toggle-fixed-width-section)
 (define-key org-mode-map "\C-c\C-xh"      'org-export-as-html)
@@ -7444,7 +7746,7 @@
 
 ;; FIXME:  Do we really need to save match data in these commands?
 ;; I would like to remove it in order to minimize impact.
-;; Self-insert already does not preserve it.  How much resources does this take???
+;; Self-insert already does not preserve it. How much resources used by this???
 
 (defsubst org-table-p ()
   (if (and (eq major-mode 'org-mode) font-lock-mode)
@@ -7469,28 +7771,7 @@
 
 ;; FIXME:
 ;; The following two functions might still be optimized to trigger
-;; re-alignment less frequently.  Right now they raise the flag each time
-;; (through before-change-functions).  Here is how this could be minimized:
-;; Basically, check if the non-white field width before deletion is
-;; equal to the column width.  If yes, the delete should trigger a
-;; re-align.  I have not implemented this so far because it is not so
-;; easy, requires grabbing the field etc.  So it may finally have some
-;; impact on typing performance which we don't want.
-
-;; The defsubst is only a draft, untested...
-
-;; Maybe it is not so important to get rid of realigns - maybe the most
-;; important aspect is to keep the table look noce as long as possible,
-;; which is already achieved...
-
-;(defsubst org-check-delete-triggers-realign ()
-;  (let ((pos (point)))
-;    (skip-chars-backward "^|\n")
-;    (and (looking-at " *\\(.*?\\) *|")
-;         (= (nth (1- (org-table-current-column))
-;                 org-table-last-column-widths)
-;            (- (match-end 1) (match-beginning 1)))
-;         (setq org-table-may-need-update t))))
+;; re-alignment less frequently.
 
 (defun org-delete-backward-char (N)
   "Like `delete-backward-char', insert whitespace at field end in tables.
@@ -7769,7 +8050,7 @@
      ["Next row" org-return (org-at-table-p)]
      "--"
      ["Blank field" org-table-blank-field (org-at-table-p)]
-     ["Copy field from above" org-table-copy-from-above (org-at-table-p)]
+     ["Copy field from above" org-table-copy-down (org-at-table-p)]
      "--"
      ("Column"
       ["Move column left" org-metaleft (org-at-table-p)]
@@ -7807,8 +8088,10 @@
     "--"
     ("Export"
      ["ASCII" org-export-as-ascii t]
+     ["Extract visible text" org-export-copy-visible t]
      ["HTML"  org-export-as-html t]
      ["HTML, and open" org-export-as-html-and-open t]
+     ["OPML" org-export-as-opml nil]
      "--"
      ["Option template" org-insert-export-options-template t]
      ["Toggle fixed width" org-toggle-fixed-width-section t])
@@ -8098,3 +8381,5 @@
 
 ;;; org.el ends here
 
+
+
--- a/lisp/textmodes/refbib.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/refbib.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/refer.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex-cite.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex-index.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex-parse.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex-ref.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex-vars.el	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/reftex.el	Thu Mar 31 09:58:14 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/textmodes/sgml-mode.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/sgml-mode.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1802,7 +1802,7 @@
 
 <p>Paragraphs only need an opening tag.  Line breaks and multiple spaces are
 ignored unless the text is <pre>preformatted.</pre>  Text can be marked as
-<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal  M-g  or
+<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-o or
 Edit/Text Properties/Face commands.
 
 Pages can have <a name=\"SOMENAME\">named points</a> and can link other points
--- a/lisp/textmodes/tex-mode.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/textmodes/tex-mode.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1562,8 +1562,9 @@
 	    (concat
 	     (if file
 		 (if star (concat (substring cmd 0 star)
-				  file (substring cmd (1+ star)))
-		   (concat cmd " " file))
+				  (shell-quote-argument file)
+				  (substring cmd (1+ star)))
+		   (concat cmd " " (shell-quote-argument file)))
 	       cmd)
 	     (if background "&" ""))))
       ;; Switch to buffer before checking for subproc output in it.
@@ -1886,8 +1887,8 @@
 	    (prog1 (file-name-directory (expand-file-name file))
 	      (setq file (file-name-nondirectory file))))
 	  (root (file-name-sans-extension file))
-	  (fspec (list (cons ?r (comint-quote-filename root))
-		       (cons ?f (comint-quote-filename file))))
+	  (fspec (list (cons ?r (shell-quote-argument root))
+		       (cons ?f (shell-quote-argument file))))
 	  (default (tex-compile-default fspec)))
      (list default-directory
 	   (completing-read
@@ -1908,14 +1909,14 @@
          (compile-command
           (if star
 	      (concat (substring command 0 star)
-		      (comint-quote-filename file)
+		      (shell-quote-argument file)
 		      (substring command (1+ star)))
             (concat command " "
 		    tex-start-options
 		    (if (< 0 (length tex-start-commands))
 			(concat
 			 (shell-quote-argument tex-start-commands) " "))
-		    (comint-quote-filename file)))))
+		    (shell-quote-argument file)))))
     (tex-send-tex-command compile-command dir)))
 
 (defun tex-send-tex-command (cmd &optional dir)
--- a/lisp/thumbs.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/thumbs.el	Thu Mar 31 09:58:14 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/tooltip.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/tooltip.el	Thu Mar 31 09:58:14 2005 +0000
@@ -130,7 +130,7 @@
 
 (defcustom tooltip-gud-display
   '((eq (tooltip-event-buffer tooltip-gud-event)
-	(marker-buffer overlay-arrow-position)))
+	(marker-buffer gud-overlay-arrow-position)))
   "List of forms determining where GUD tooltips are displayed.
 
 Forms in the list are combined with AND.  The default is to display
--- a/lisp/vc-cvs.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/vc-cvs.el	Thu Mar 31 09:58:14 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/lisp/vc.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/vc.el	Thu Mar 31 09:58:14 2005 +0000
@@ -1,7 +1,7 @@
 ;;; vc.el --- drive a version-control system from within Emacs
 
 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   2000, 2001, 2003, 2004  Free Software Foundation, Inc.
+;;   2000, 2001, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 ;; Author:     FSF (see below for full credits)
 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
@@ -962,8 +962,10 @@
 	    ;; start-process does not support remote execution
 	    (setq okstatus nil))
 	(if (eq okstatus 'async)
-	    (let ((proc (apply 'start-process command (current-buffer) command
-			       squeezed)))
+	    (let ((proc
+		   (let ((process-connection-type nil))
+		     (apply 'start-process command (current-buffer) command
+			    squeezed))))
               (unless (active-minibuffer-window)
                 (message "Running %s in the background..." command))
 	      ;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
--- a/lisp/wdired.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/wdired.el	Thu Mar 31 09:58:14 2005 +0000
@@ -330,7 +330,8 @@
   (set-buffer-modified-p nil)
   (setq buffer-undo-list nil)
   (run-hooks 'wdired-mode-hook)
-  (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished")))
+  (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \
+or \\[wdired-abort-changes] to abort changes")))
 
 
 ;; Protect the buffer so only the filenames can be changed, and put
--- a/lisp/window.el	Tue Mar 29 00:48:14 2005 +0000
+++ b/lisp/window.el	Thu Mar 31 09:58:14 2005 +0000
@@ -397,20 +397,13 @@
 
 (defun window-buffer-height (window)
   "Return the height (in screen lines) of the buffer that WINDOW is displaying."
-  (save-excursion
-    (set-buffer (window-buffer window))
-    (goto-char (point-min))
-    (let ((ignore-final-newline
-           ;; If buffer ends with a newline, ignore it when counting height
-           ;; unless point is after it.
-           (and (not (eobp)) (eq ?\n (char-after (1- (point-max)))))))
-      (+ 1 (nth 2 (compute-motion (point-min)
-                                  '(0 . 0)
-                                  (- (point-max) (if ignore-final-newline 1 0))
-                                  (cons 0 100000000)
-                                  nil
-                                  nil
-                                  window))))))
+  (with-current-buffer (window-buffer window)
+    (max 1
+	 (count-screen-lines (point-min) (point-max)
+			     ;; If buffer ends with a newline, ignore it when
+			     ;; counting height unless point is after it.
+			     (eobp)
+			     window))))
 
 (defun count-screen-lines (&optional beg end count-final-newline window)
   "Return the number of screen lines in the region.
--- a/lispref/ChangeLog	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,53 @@
+2005-03-29  Chong Yidong  <cyd@stupidchicken.com>
+
+	* text.texi (Buffer Contents): Add filter-buffer-substring and
+	buffer-substring-filters.
+
+2005-03-26  Chong Yidong  <cyd@stupidchicken.com>
+
+	* anti.texi (Antinews): Mention `G' interactive code.
+
+	* tips.texi (Compilation Tips): Mention benchmark.el.
+
+2005-03-27  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* modes.texi (Other Font Lock Variables): `font-lock-fontify-block'
+	is now bound to M-o M-o.
+
+	* keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o.
+
+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
--- a/lispref/Makefile.in	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/Makefile.in	Thu Mar 31 09:58:14 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/anti.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/anti.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -238,6 +238,10 @@
 @code{test-completion} is no longer available.
 
 @item
+The @samp{G} interactive code character is no longer supported.
+Use @samp{F} instead.
+
+@item
 Arbitrary Lisp functions can no longer be recorded into
 @code{buffer-undo-list}.  As a consequence, @code{yank-undo-function}
 is obsolete, and has been removed.
--- a/lispref/calendar.texi	Tue Mar 29 00:48:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/display.texi	Thu Mar 31 09:58:14 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,10 +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.
-Other faces used to display bitmaps in the fringe implicitly inherits from
-this face.
+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)}
@@ -2008,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
@@ -2833,12 +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, instead of the
-default @code{fringe} face.  When specified, @var{face} implicitly
-inherits from the @code{fringe} face, so normally @var{face} only
-specifies the foreground color for 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
@@ -2928,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 @var{face} implicitly inherits from the @code{fringe} face,
-so normally @var{face} should specifu 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
@@ -2991,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
@@ -3050,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/elisp.texi	Thu Mar 31 09:58:14 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/keymaps.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/keymaps.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -456,16 +456,16 @@
 key.
 
 @item
-@cindex @kbd{M-g}
+@cindex @kbd{M-o}
 @vindex facemenu-keymap
-@code{facemenu-keymap} is the global keymap used for the @kbd{M-g}
+@code{facemenu-keymap} is the global keymap used for the @kbd{M-o}
 prefix key.
 
 @c Emacs 19 feature
 @item
-The other Emacs prefix keys are @kbd{C-x @@}, @kbd{C-x a i}, @kbd{C-x
-@key{ESC}} and @kbd{@key{ESC} @key{ESC}}.  They use keymaps that have no
-special names.
+The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i},
+@kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}.  They use keymaps
+that have no special names.
 @end itemize
 
   The keymap binding of a prefix key is used for looking up the event
--- a/lispref/makefile.w32-in	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/makefile.w32-in	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/markers.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/minibuf.texi	Thu Mar 31 09:58:14 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/modes.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/modes.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -2349,7 +2349,7 @@
 @defvar font-lock-mark-block-function
 If this variable is non-@code{nil}, it should be a function that is
 called with no arguments, to choose an enclosing range of text for
-refontification for the command @kbd{M-g M-g}
+refontification for the command @kbd{M-o M-o}
 (@code{font-lock-fontify-block}).
 
 The function should report its choice by placing the region around it.
--- a/lispref/os.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/os.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/positions.texi	Thu Mar 31 09:58:14 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/text.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/text.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -207,6 +207,41 @@
 properties, just the characters themselves.  @xref{Text Properties}.
 @end defun
 
+@defun filter-buffer-substring start end &optional delete
+This function passes the buffer text between @var{start} and @var{end}
+through the filter functions specified by the variable
+@code{buffer-substring-filters}, and returns the value from the last
+filter function.  If @code{buffer-substring-filters} is @code{nil},
+the value is the unaltered text from the buffer, what
+@code{buffer-substring} would return.
+
+If @var{delete} is non-@code{nil}, this function deletes the text
+between @var{start} and @var{end} after copying it, like
+@code{delete-and-extract-region}.
+
+Lisp code should use this function instead of @code{buffer-substring}
+or @code{delete-and-extract-region} when copying into user-accessible
+data structures such as the kill-ring, X clipboard, and registers.
+Major and minor modes can add functions to
+@code{buffer-substring-filters} to alter such text as it is copied out
+of the buffer.
+@end defun
+
+@defvar buffer-substring-filters
+This variable should be a list of functions that accept a single
+argument, a string, and return a string.
+@code{filter-buffer-substring} passes the buffer substring to the
+first function in this list, and the return value of each function is
+passed to the next function.  The return value of the last function is
+used as the return value of @code{filter-buffer-substring}.
+
+As a special convention, point is set to the start of the buffer text
+being operated on (i.e., the @var{start} argument for
+@code{filter-buffer-substring}) before these functions are called.
+
+If this variable is @code{nil}, no filtering is performed.
+@end defvar
+
 @defun buffer-string
 This function returns the contents of the entire accessible portion of
 the current buffer as a string.  It is equivalent to
--- a/lispref/tips.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/tips.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -452,6 +452,13 @@
 @file{elp.el} for instructions.
 
 @item
+@cindex @file{benchmark.el}
+@cindex benchmarking
+Check the speed of individual Emacs Lisp forms using the
+@file{benchmark} library.  See the functions @code{benchmark-run} and
+@code{benchmark-run-compiled} in @file{benchmark.el}.
+
+@item
 Use iteration rather than recursion whenever possible.
 Function calls are slow in Emacs Lisp even when a compiled function
 is calling another compiled function.
--- a/lispref/vol1.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/vol1.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/lispref/vol2.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,227 @@
+2005-03-30  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* programs.texi (Fortran Motion): Fix previous change.
+
+2005-03-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* emacs-mime.texi (Display Customization): Markup fixes.
+	(rfc2047): Update.
+
+2005-03-23  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-faq.texi: Replaced with auto-generated version.
+
+2005-03-29  Richard M. Stallman  <rms@gnu.org>
+
+	* mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info.
+
+2005-03-29  Chong Yidong  <cyd@stupidchicken.com>
+
+	* text.texi (Refill): Refer to Long Lines Mode.
+	(Longlines): New node.
+	(Auto Fill): Don't index "word wrap" here.
+	(Filling): Add Longlines to menu.
+	
+2005-03-29  Richard M. Stallman  <rms@gnu.org>
+
+	* xresources.texi: Minor fixes.
+
+	* misc.texi (Emacs Server): Fix Texinfo usage.
+
+	* emacs.texi (Top): Don't use a real section heading for
+	"Detailed Node Listing".  Fake it instead.
+
+	* basic.texi (Position Info): Minor cleanup.
+
+	* mule.texi (Input Methods): Minor cleanup.
+
+2005-03-29  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* programs.texi (ForIndent Vars): `fortran-if-indent' does other
+	constructs as well.
+	(Fortran Motion): Add fortran-end-of-block,
+	fortran-beginning-of-block.
+
+2005-03-29  Kenichi Handa  <handa@m17n.org>
+
+	* mule.texi (Input Methods): Refer to the command C-u C-x =.
+
+	* basic.texi (Position Info): Update the description about the
+	command C-u C-x =.
+
+2005-03-28  Richard M. Stallman  <rms@gnu.org>
+
+	* emacs.texi (Top): Use @section for the detailed node listing.
+
+	* calendar.texi: Minor fixes to previous change.
+
+	* programs.texi (Fortran): Small fixes to previous changes.
+
+	* emacs.texi (Top): Update list of subnodes of Dired.
+	Likewise for building.texi.
+
+	* files.texi (File Conveniences): Delete Auto Image File mode.
+
+2005-03-28  Chong Yidong  <cyd@stupidchicken.com>
+
+	* building.texi (Flymake): New node.
+
+	* custom.texi (Function Keys): Document kp- event types and
+	keypad-setup package.
+
+	* dired.texi (Wdired): New node.
+
+	* files.texi (File Conveniences): Reorder entries.
+	Explain how to turn on Auto-image-file mode.
+	Document Thumbs mode.
+
+	* mule.texi (Specify Coding): Document recode-region and
+	recode-file-name.
+
+	* programs.texi (Program Modes): Add Conf mode and DNS mode.
+
+2005-03-27  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* commands.texi (Keys): M-o is now a prefix key.
+
+2005-03-27  Glenn Morris  <gmorris@ast.cam.ac.uk>
+
+	* programs.texi: Reformat and update copyright years.
+	(Fortran): Update section.
+
+2005-03-26  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* files.texi: Several small changes in addition to:
+	(Visiting): Change xref for Dialog Boxes to ref.
+	(Version Headers): Replace references to obsolete var
+	`vc-header-alist' with `vc-BACKEND-header'.
+	(Customizing VC): Update value of `vc-handled-backends'.
+
+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.
--- a/man/basic.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/basic.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -677,36 +677,57 @@
 @cindex character set of character at point
 @cindex font of character at point
 @cindex text properties at point
-  @w{@kbd{C-u C-x =}} displays additional information about a
-character, including the character set name and the codes that
-identify the character within that character set; @acronym{ASCII} characters are
-identified as belonging to the @code{ascii} character set.  It also
-shows the character's syntax, categories, and encodings both
-internally in the buffer and externally if you save the file.  It also
-shows the character's text properties (@pxref{Text Properties,,,
+  @w{@kbd{C-u C-x =}} displays these additional information about a
+character.
+
+@itemize @bullet
+@item
+The character set name, and the codes that identify the character
+within that character set; @acronym{ASCII} characters are identified
+as belonging to the @code{ascii} character set.
+
+@item
+The character's syntax and categories.
+
+@item
+The character's encodings, both internally in the buffer, and externally
+if you were to save the file.
+
+@item
+What to type to input the character in the current input method
+(if it supports the character).
+
+@item
+If you are running Emacs on a window system, the font name and glyph
+code for the character.  If you are running Emacs on a terminal, the
+code(s) sent to the terminal.
+
+@item
+The character's text properties (@pxref{Text Properties,,,
 elisp, the Emacs Lisp Reference Manual}), and any overlays containing it
 (@pxref{Overlays,,, elisp, the same manual}).
+@end itemize
 
   Here's an example showing the Latin-1 character A with grave accent,
-in a buffer whose coding system is @code{iso-2022-7bit}, whose
+in a buffer whose coding system is @code{iso-latin-1}, whose
 terminal coding system is @code{iso-latin-1} (so the terminal actually
 displays the character as @samp{@`A}), and which has font-lock-mode
 (@pxref{Font Lock}) enabled:
 
 @smallexample
-    character: @`A (04300, 2240, 0x8c0)
-      charset: latin-iso8859-1
-	       (Right-Hand Part of Latin Alphabet 1@dots{}
-   code point: 64
-       syntax: w 	which means: word
-     category: l:Latin
-  buffer code: 0x81 0xC0
-    file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit)
-terminal code: C0
+  character: @`A (04300, 2240, 0x8c0, U+00C0)
+    charset: latin-iso8859-1
+             (Right-Hand Part of Latin Alphabet 1@dots{}
+ code point: 64
+     syntax: w 	which means: word
+   category: l:Latin
+   to input: type "`A"
+buffer code: 0x81 0xC0
+  file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit)
+    display: terminal code 0xC0
 
-Text properties
-  font-lock-face: font-lock-variable-name-face
-  fontified: t
+There are text properties here:
+  fontified            t
 @end smallexample
 
 @node Arguments
--- a/man/building.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/building.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -18,6 +18,7 @@
 * Compilation Shell::   Customizing your shell properly
                           for use in the compilation buffer.
 * Grep Searching::      Searching with grep.
+* Flymake::             Finding syntax errors on the fly.
 * Debuggers::	        Running symbolic debuggers for non-Lisp programs.
 * Executing Lisp::      Various modes for editing Lisp programs,
                           with different facilities for running
@@ -337,6 +338,31 @@
 @code{grep}, so as to search every file in a directory tree.  See also
 the @code{find-grep-dired} command, in @ref{Dired and Find}.
 
+@node Flymake
+@section Finding Syntax Errors On The Fly
+@cindex checking syntax
+
+  Flymake mode is a minor mode that performs on-the-fly syntax
+checking for many programming and markup languages, including C, C++,
+Perl, HTML, and @TeX{}/La@TeX{}.  It is somewhat analogous to Flyspell
+mode, which performs spell checking for ordinary human languages in a
+similar fashion (@pxref{Spelling}).  As you edit a file, Flymake mode
+runs an appropriate syntax checking tool in the background, using a
+temporary copy of the buffer.  It then parses the error and warning
+messages, and highlights the erroneous lines in the buffer.  The
+syntax checking tool used depends on the language; for example, for
+C/C++ files this is usually the C compiler.  Flymake can also use
+build tools such as @code{make} for checking complicated projects.
+
+  To activate Flymake mode, type @kbd{M-x flymake-mode}.  You can move
+to the errors spotted by Flymake mode with @kbd{M-x
+flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}.  To
+display any error messages associated with the current line, use
+@kbd{M-x flymake-display-err-menu-for-current-line}.
+
+  For more details about using Flymake, see @ref{Top, Flymake,
+Flymake, flymake, The Flymake Manual}.
+
 @node Debuggers
 @section Running Debuggers Under Emacs
 @cindex debuggers
--- a/man/calc.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/calc.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/calendar.texi	Thu Mar 31 09:58:14 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,31 @@
 
 @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}, creating the calendar displays holidays in this way.
 
 @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}, creating or updating the calendar marks holidays
+automatically.
 
 @kindex a @r{(Calendar mode)}
 @findex list-calendar-holidays
@@ -924,9 +934,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 +961,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,6 +997,7 @@
 
 @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
@@ -997,18 +1008,25 @@
 
   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
-the menu that appears.
+the menu that appears.  If the variable
+@code{view-diary-entries-initially} is non-@code{nil}, creating the
+calendar also lists diary entries for the current date (provided the
+current date is visible).
 
 @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}, creating or updating the calendar marks diary dates
+automatically.
 
 @kindex s @r{(Calendar mode)}
 @findex show-all-diary-entries
@@ -1016,21 +1034,18 @@
 the @kbd{s} command.
 
   Display of selected diary entries uses the selective display feature
-to hide entries that don't apply.
-
-  The diary buffer as you see it is an illusion, so simply printing the
-buffer does not print what you see on your screen.  There is a special
-command to print hard copy of the diary buffer @emph{as it appears};
-this command is @kbd{M-x print-diary-entries}.  It sends the data
-directly to the printer.  You can customize it like @code{lpr-region}
-(@pxref{Hardcopy}).
+to hide entries that don't apply.  The diary buffer as you see it is
+an illusion, so simply printing the buffer does not print what you see
+on your screen.  There is a special command to print hard copy of the
+diary buffer @emph{as it appears}; this command is @kbd{M-x
+print-diary-entries}.  It sends the data directly to the printer.  You
+can customize it like @code{lpr-region} (@pxref{Hardcopy}).
 
 @findex diary
   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 +1350,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 +1358,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 +1398,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 +1469,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/cl.texi	Thu Mar 31 09:58:14 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/commands.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/commands.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -169,8 +169,8 @@
 
   All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h},
 @kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x
-n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x
-6}, @key{ESC}, and @kbd{M-g}.  (@key{F1} and @key{F2} are aliases for
+n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 6},
+@key{ESC}, @kbd{M-o} and @kbd{M-g}.  (@key{F1} and @key{F2} are aliases for
 @kbd{C-h} and @kbd{C-x 6}.)  But this list is not cast in concrete; it
 is just a matter of Emacs's standard key bindings.  If you customize
 Emacs, you can make new prefix keys, or eliminate these.  @xref{Key
--- a/man/custom.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/custom.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -1636,6 +1636,27 @@
 (global-set-key [H-M-right] 'forward-word)
 @end example
 
+@cindex keypad
+  Many keyboards have a ``numeric keypad'' on the right hand side.
+The numeric keys in the keypad double up as cursor motion keys,
+toggled by a key labelled @samp{Num Lock}.  By default, Emacs
+translates these keys to the corresponding keys in the main keyboard
+(@pxref{Keyboard Translations}).  For example, when @samp{Num Lock} is
+on, the key labelled @samp{8} on the numeric keypad produces
+@code{kp-8}, which is translated to @kbd{8}; when @samp{Num Lock} is
+off, the same key produces @code{kp-up}, which is translated to
+@key{UP}.  If you rebind a key such as @kbd{8} or @key{UP}, it affects
+the equivalent keypad key too.  However, if you rebind a @samp{kp-}
+key directly, that won't affect its non-keypad equivalent.
+
+  Emacs provides a convenient method for binding the numeric keypad
+keys, using the variables @code{keypad-setup},
+@code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and
+@code{keypad-numlock-shifted-setup}.  These can be found in the
+@samp{keyboard} customization group (@pxref{Easy Customization}).  You
+can rebind the keys to perform other tasks, such as issuing numeric
+prefix arguments.
+
 @node Named ASCII Chars
 @subsection Named @acronym{ASCII} Control Characters
 
--- a/man/dired-x.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/dired-x.texi	Thu Mar 31 09:58:14 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/dired.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/dired.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -39,6 +39,7 @@
 * Hiding Subdirectories::     Making subdirectories visible or invisible.
 * Updating: Dired Updating.   Discarding lines for files of no interest.
 * Find: Dired and Find.	      Using `find' to choose the files for Dired.
+* Wdired::                    Operating on files by editing the Dired buffer.
 * Misc: Misc Dired Features.  Various other features.
 @end menu
 
@@ -1103,6 +1104,39 @@
 Reverting the buffer with @kbd{g} deletes all inserted subdirectories,
 and erases all flags and marks.
 
+@node Wdired
+@section Editing the Dired Buffer
+
+@cindex wdired mode
+@findex wdired-change-to-wdired-mode
+  Wdired is a special mode that allows you to perform file operations
+by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
+for ``writable''.)  To enter Wdired mode, type @kbd{M-x
+wdired-change-to-wdired-mode} while in a Dired buffer.  Alternatively,
+use @samp{Edit File Names} in the @samp{Immediate} menu bar menu.
+
+@findex wdired-finish-edit
+  While in Wdired mode, you can rename files by editing the file names
+displayed in the Dired buffer.  All the ordinary Emacs editing
+commands, including rectangle operations and @code{query-replace}, are
+available for this.  Once you are done editing, type @kbd{C-c C-c}
+(@code{wdired-finish-edit}).  This applies your changes and switches
+back to ordinary Dired mode.
+
+  Apart from simply renaming files, you can move a file to another
+directory by typing in the new file name (either absolute or
+relative).  To mark a file for deletion, delete the entire filename.
+To change the target of a symbolic link, just edit the target name
+displayed next to the link name.
+
+  The rest of the text in the buffer, such as the file sizes and
+modification dates, is marked read-only, so you can't edit it.
+However, if you set @code{wdired-allow-to-change-permissions} to
+@code{t}, the file permission bits can also be edited.  For example,
+you can change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file
+world-writable.  These changes also take effect when you type @kbd{C-c
+C-c}.
+
 @node Misc Dired Features
 @section Other Dired Features
 
--- a/man/display.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/display.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -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-mime.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/emacs-mime.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -387,15 +387,15 @@
 
 @item mm-enable-external
 @vindex mm-enable-external
-Indicate whether external MIME handlers should be used.
+Indicate whether external @acronym{MIME} handlers should be used.
 
-If @code{t}, all defined external MIME handlers are used.  If
+If @code{t}, all defined external @acronym{MIME} handlers are used.  If
 @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}).
 If it is the symbol @code{ask}, you are prompted before the external
 @acronym{MIME} handler is invoked.
 
 When you launch an attachment through mailcap (@pxref{mailcap}) an
-attempt is made to use a safe viewer with the safest options--this isn't
+attempt is made to use a safe viewer with the safest options---this isn't
 the case if you save it to disk and launch it in a different way
 (command line or double-clicking).  Anyhow, if you want to be sure not
 to launch any external programs, set this variable to @code{nil} or
@@ -1327,8 +1327,8 @@
 Quoted-Printable-like encoding) and @code{B} (base64).  This alist
 specifies which charset should use which encoding.
 
-@item rfc2047-encoding-function-alist
-@vindex rfc2047-encoding-function-alist
+@item rfc2047-encode-function-alist
+@vindex rfc2047-encode-function-alist
 This is an alist of encoding / function pairs.  The encodings are
 @code{Q}, @code{B} and @code{nil}.
 
@@ -1336,6 +1336,11 @@
 @vindex rfc2047-encoded-word-regexp
 When decoding words, this library looks for matches to this regexp.
 
+@item rfc2047-encode-encoded-words
+@vindex rfc2047-encode-encoded-words
+The boolean variable specifies whether encoded words
+(e.g. @samp{=?hello?=}) should be encoded again.
+
 @end table
 
 Those were the variables, and these are this functions:
@@ -1366,6 +1371,24 @@
 @findex rfc2047-decode-string
 Decode a string and return the results.
 
+@item rfc2047-encode-parameter
+@findex rfc2047-encode-parameter
+Encode a parameter in the RFC2047-like style.  This is a replacement for
+the @code{rfc2231-encode-string} function.  @xref{rfc2231}.
+
+When attaching files as @acronym{MIME} parts, we should use the RFC2231
+encoding to specify the file names containing non-@acronym{ASCII}
+characters.  However, many mail softwares don't support it in practice
+and recipients won't be able to extract files with correct names.
+Instead, the RFC2047-like encoding is acceptable generally.  This
+function provides the very RFC2047-like encoding, resigning to such a
+regrettable trend.  To use it, put the following line in your
+@file{~/.gnus.el} file:
+
+@lisp
+(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
+@end lisp
+
 @end table
 
 
--- a/man/emacs-xtra.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/emacs-xtra.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/emacs.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -224,11 +224,13 @@
 * Contributing::        How to contribute improvements to Emacs.
 * Service::	        How to get help for your own Emacs needs.
 
+
+Detailed Node Listing
+---------------------
+
 Here are some other nodes which are really inferiors of the ones
 already listed, mentioned here so you can get to them in one step:
 
- --- The Detailed Node Listing ---
-
 The Organization of the Screen
 
 * Point::	        The place in the text where editing commands operate.
@@ -563,6 +565,8 @@
 * Compilation Mode::    The mode for visiting compiler errors.
 * Compilation Shell::   Customizing your shell properly
                           for use in the compilation buffer.
+* Grep Searching::      Searching with grep.
+* Flymake::             Finding syntax errors on the fly.
 * Debuggers::		Running symbolic debuggers for non-Lisp programs.
 * Executing Lisp::	Various modes for editing Lisp programs,
 			  with different facilities for running
@@ -676,6 +680,9 @@
 * Hiding Subdirectories::    Making subdirectories visible or invisible.
 * Dired Updating::           Discarding lines for files of no interest.
 * Dired and Find::	     Using `find' to choose the files for Dired.
+* Dired and Find::           Using `find' to choose the files for Dired.
+* Wdired::                   Operating on files by editing the Dired buffer.
+* Misc Dired Features::      Various other features.
 
 The Calendar and the Diary
 
@@ -709,7 +716,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/files.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -238,13 +238,13 @@
 of prompting for the file name in the minibuffer.  On Unix and
 GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and
 Motif toolkits; on MS-Windows, the GUI version does that by default.
-For information on how to customize this, see @xref{Dialog Boxes}.
+For information on how to customize this, see @ref{Dialog Boxes}.
 
   Secondly, Emacs supports the ``drag and drop'' protocol on the X
 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
@@ -1263,6 +1272,10 @@
 SCCS only if for some reason you cannot use RCS, or one of the
 higher-level systems such as CVS or GNU Arch.
 
+In the following, we discuss mainly RCS, SCCS and CVS.  Nearly
+everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS
+as well.
+
 @node VC Concepts
 @subsubsection Concepts of Version Control
 
@@ -1463,9 +1476,9 @@
 since you began editing it, and when this happens, his changes will be
 effectively removed when you check in your version (though they will
 remain in the master file, so they will not be entirely lost).  You must
-therefore verify the current version is unchanged, before you check in your
-changes.  We hope to eliminate this risk and provide automatic merging
-with RCS in a future Emacs version.
+therefore verify that the current version is unchanged, before you
+check in your changes.  We hope to eliminate this risk and provide
+automatic merging with RCS in a future Emacs version.
 
   In addition, locking is possible with RCS even in this mode, although
 it is not required; @kbd{C-x v v} with an unmodified file locks the
@@ -1689,13 +1702,10 @@
 that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}).
 On the other hand, if there are no files already registered,
 Emacs uses the first system from @code{vc-handled-backends} that could
-register the file---for example, you cannot register a file under CVS if
-its directory is not already part of a CVS tree.
-
-  With the default value of @code{vc-handled-backends}, this means
-that Emacs uses RCS if there are any files under RCS control, CVS if
-there are any files under CVS, SCCS if any files are under SCCS, or
-RCS as the ultimate default.
+register the file (for example, you cannot register a file under CVS if
+its directory is not already part of a CVS tree); with the default
+value of @code{vc-handled-backends}, this means that Emacs uses RCS in
+this situation.
 
   If locking is in use, @kbd{C-x v i} leaves the file unlocked and
 read-only.  Type @kbd{C-x v v} if you wish to start editing it.  After
@@ -1883,7 +1893,8 @@
 If it operates on more than one file, it handles each file according to
 its current state; thus, it might lock one file, but check in another
 file.  This could be confusing; it is up to you to avoid confusing
-behavior by marking a set of files that are in a similar state.
+behavior by marking a set of files that are in a similar state.  If no
+files are marked, @kbd{v v} operates on the file in the current line.
 
   If any files call for check-in, @kbd{v v} reads a single log entry,
 then uses it for all the files being checked in.  This is convenient for
@@ -1911,8 +1922,7 @@
 features.  Each such independent line of development is called a
 @dfn{branch}.  VC allows you to create branches, switch between
 different branches, and merge changes from one branch to another.
-Please note, however, that branches are only supported for RCS at the
-moment.
+Please note, however, that branches are not supported for SCCS.
 
   A file's main line of development is usually called the @dfn{trunk}.
 The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc.  At
@@ -2255,7 +2265,8 @@
 correspond to those of CVS.  Technically, this is not a problem, but
 it can become difficult to keep track of what is in the CVS repository
 and what is not.  So we suggest that you return from time to time to
-CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}.
+CVS-only operation, by committing your local changes back to the
+repository using @kbd{C-u C-x v v cvs @key{RET}}.
 
 @node Snapshots
 @subsection Snapshots
@@ -2543,13 +2554,11 @@
 Insert headers in a file for use with your version-control system.
 @end table
 
-@vindex vc-header-alist
+@vindex vc-@var{backend}-header
   The default header string is @samp{@w{$}Id$} for RCS and
 @samp{@w{%}W%} for SCCS.  You can specify other headers to insert by
-setting the variable @code{vc-header-alist}.  Its value is a list of
-elements of the form @code{(@var{program} . @var{string})} where
-@var{program} is @code{RCS} or @code{SCCS} and @var{string} is the
-string to use.
+setting the variables @code{vc-@var{backend}-header} where
+@var{backend} is @code{rcs} or @code{sccs}.
 
   Instead of a single string, you can specify a list of strings; then
 each string in the list is inserted as a separate header on a line of
@@ -2577,8 +2586,8 @@
 @var{regexp} matches the buffer name, @var{format} is inserted as part
 of the header.  A header line is inserted for each element that matches
 the buffer name, and for each string specified by
-@code{vc-header-alist}.  The header line is made by processing the
-string from @code{vc-header-alist} with the format taken from the
+@code{vc-@var{backend}-header}.  The header line is made by processing the
+string from @code{vc-@var{backend}-header} with the format taken from the
 element.  The default value for @code{vc-static-header-alist} is as follows:
 
 @example
@@ -2615,10 +2624,10 @@
 @vindex vc-handled-backends
 The variable @code{vc-handled-backends} determines which version
 control systems VC should handle.  The default value is @code{(RCS CVS
-SCCS)}, so it contains all three version systems that are currently
-supported.  If you want VC to ignore one or more of these systems,
-exclude its name from the list.  To disable VC entirely, set this
-variable to @code{nil}.
+SVN SCCS Arch MCVS)}, so it contains all six version systems that are
+currently supported.  If you want VC to ignore one or more of these
+systems, exclude its name from the list.  To disable VC entirely, set
+this variable to @code{nil}.
 
 The order of systems in the list is significant: when you visit a file
 registered in more than one system (@pxref{Local Version Control}),
@@ -2771,8 +2780,9 @@
 @key{RET}}, @pxref{Merging}).
 
 @vindex vc-cvs-global-switches
-  The variable @code{vc-cvs-global-switches} should be a string
-specifying switches to pass to CVS for all CVS operations.
+  The variable @code{vc-cvs-global-switches}, if non-@code{nil},
+should be a string specifying switches to pass to CVS for all CVS
+operations.
 
   When @code{vc-cvs-stay-local} is @code{t}, VC also makes local
 version backups, so that simple diff and revert operations are
@@ -2891,7 +2901,7 @@
   With a numeric argument, @code{compare-windows} ignores changes in
 whitespace.  If the variable @code{compare-ignore-case} is
 non-@code{nil}, the comparison ignores differences in case as well.
-If the variable @code{compare-ignore-whitespace} is non-nil,
+If the variable @code{compare-ignore-whitespace} is non-@code{nil},
 @code{compare-windows} normally ignores changes in whitespace, and a
 prefix argument turns that off.
 
@@ -3289,6 +3299,10 @@
 @node File Conveniences
 @section Convenience Features for Finding Files
 
+  In this section, we introduce some convenient facilities for finding
+recently-opened files, reading file names from a buffer, and viewing
+image files.
+
 @findex recentf-mode
 @vindex recentf-mode
 @findex recentf-save-list
@@ -3299,25 +3313,22 @@
 @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list}
 edits it.
 
-@findex auto-image-file-mode
-@findex mode, auto-image-file
-@cindex images, visiting
-@cindex visiting image files
-@vindex image-file-name-regexps
-@vindex image-file-name-extensions
-  When Auto-image-file minor mode is enabled, visiting an image file
-displays it as an image, not as text.  Likewise, inserting an image
-file into a buffer inserts it as an image.  This works only when Emacs
-can display the relevant image type.  The variables
-@code{image-file-name-extensions} or @code{image-file-name-regexps}
-control which file names are recognized as containing images.
-
   The @kbd{M-x ffap} command generalizes @code{find-file} with more
 powerful heuristic defaults (@pxref{FFAP}), often based on the text at
 point.  Partial Completion mode offers other features extending
 @code{find-file}, which can be used with @code{ffap}.
 @xref{Completion Options}.
 
+@findex thumbs-mode
+@findex mode, thumbs
+  Thumbs mode is a major mode for viewing directories containing many
+image files.  To use it, type @kbd{M-x thumbs} and specify the
+directory to view.  The images in that directory will be displayed in
+a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a
+thumbnail to view the full-size image.  Thumbs mode requires the
+@file{convert} program, which is part of the ImageMagick software
+package.
+
 @ignore
    arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250
 @end ignore
--- a/man/frames.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/frames.texi	Thu Mar 31 09:58:14 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-faq.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/gnus-faq.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -1,210 +1,203 @@
-@c Insert  "\input texinfo" at 1st line before texing this file alone.
-@c -*-texinfo-*-
-@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c \input texinfo @c -*-texinfo-*-
+@c Uncomment 1st line before texing this file alone.
+@c %**start of header
+@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c
+@c Do not modify this file, it was generated from gnus-faq.xml, available from
+@c <URL:http://my.gnus.org/FAQ/>.
+@c
 @setfilename gnus-faq.info
-
-@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top
+@settitle Frequently Asked Questions
+@c %**end of header
+@c
 
 @node Frequently Asked Questions
-@comment  node-name,  next,  previous,  up
-
-@c @chapter Frequently Asked Questions
 @section Frequently Asked Questions
-@cindex FAQ
-@cindex Frequently Asked Questions
-
-@c - Uncomment @chapter, comment @section
-@c - run (texinfo-every-node-update)
-@c - revert it.
 
 @menu
-* FAQ - Introduction::                    About Gnus and this FAQ.
-* FAQ 1 - Installation::                  Installation of Gnus.
-* FAQ 2 - Startup / Group buffer::        Start up questions and the first
-                                          buffer Gnus shows you.
-* FAQ 3 - Getting messages::              Making Gnus read your mail and news.
-* FAQ 4 - Reading messages::              How to efficiently read messages.
-* FAQ 5 - Composing messages::            Composing mails or Usenet postings.
-* FAQ 6 - Old messages::                  Importing, archiving, searching
-                                          and deleting messages.
-* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline.
-* FAQ 8 - Getting help::                  When this FAQ isn't enough.
-* FAQ 9 - Tuning Gnus::                   How to make Gnus faster.
-* FAQ - Glossary::                        Terms used in the FAQ explained.
+* FAQ - Changes::                           
+* FAQ - Introduction::                       About Gnus and this FAQ.
+* FAQ 1 - Installation FAQ::                 Installation of Gnus.
+* FAQ 2 - Startup / Group buffer::           Start up questions and the
+                                             first buffer Gnus shows you.
+* FAQ 3 - Getting Messages::                 Making Gnus read your mail
+                                             and news.
+* FAQ 4 - Reading messages::                 How to efficiently read
+                                             messages.
+* FAQ 5 - Composing messages::               Composing mails or Usenet
+                                             postings.
+* FAQ 6 - Old messages::                     Importing, archiving,
+                                             searching and deleting messages.
+* FAQ 7 - Gnus in a dial-up environment::    Reading mail and news while
+                                             offline.
+* FAQ 8 - Getting help::                     When this FAQ isn't enough.
+* FAQ 9 - Tuning Gnus::                      How to make Gnus faster.
+* FAQ - Glossary::                           Terms used in the FAQ
+                                             explained.
 @end menu
 
-
 @subheading Abstract
 
- This is the new Gnus Frequently Asked Questions list.  If you have a
-Web browser, the official hypertext version is at
-@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from
-@uref{http://sourceforge.net/projects/gnus/}.
- 
-
- Please submit features and suggestions to the 
- @email{faq-discuss@@my.gnus.org,FAQ discussion list}.
- The list is protected against junk mail with
- @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As
- a subscriber, your submissions will automatically pass. You can
- also subscribe to the list by sending a blank email to
- @email{faq-discuss-subscribe@@my.gnus.org}
- and
- @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse
- the archive, browse the archive}. 
- 
-@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions
-@comment  node-name,  next,  previous,  up
-@heading Introduction
+This is the new Gnus Frequently Asked Questions list.
+If you have a Web browser, the official hypertext version is at
+@uref{http://my.gnus.org/FAQ/},
+the Docbook source is available from
+@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}.
+
+Please submit features and suggestions to the 
+@email{faq-discuss@@my.gnus.org, FAQ discussion list}.
+The list is protected against junk mail with
+@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As
+a subscriber, your submissions will automatically pass.  You can
+also subscribe to the list by sending a blank email to
+@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org}
+and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse
+the archive}.
+
+@node FAQ - Changes
+@subheading Changes
+
+
+
+@itemize @bullet
+
+@item
+Updated FAQ to reflect release of Gnus 5.10 and start of
+No Gnus development.
+@end itemize
+
+@node FAQ - Introduction
+@subheading Introduction
 
 This is the Gnus Frequently Asked Questions list.
 
 Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
- as a part of Emacs. It's been around in some form for almost a decade
- now, and has been distributed as a standard part of Emacs for much of
- that time. Gnus 5 is the latest (and greatest) incarnation. The
- original version was called GNUS, and was written by Masanobu UMEDA.
- When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
- decided to rewrite Gnus.
-
- Its biggest strength is the fact that it is extremely
- customizable. It is somewhat intimidating at first glance, but
- most of the complexity can be ignored until you're ready to take
- advantage of it. If you receive a reasonable volume of e-mail
- (you're on various mailing lists), or you would like to read
- high-volume mailing lists but cannot keep up with them, or read
- high volume newsgroups or are just bored, then Gnus is what you
- want.
-
- This FAQ was maintained by Justin Sheehy until March 2002. He
- would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
- job with this FAQ before him. We would like to do the same - thanks,
- Justin!
- 
-
- If you have a Web browser, the official hypertext version is at:@*
- @uref{http://my.gnus.org/FAQ/}.
- This version is much nicer than the unofficial hypertext
- versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
- State, and other FAQ archives. See the resources question below
- if you want information on obtaining it in another format.
- 
-
- The information contained here was compiled with the assistance
- of the Gnus development mailing list, and any errors or
- misprints are the my.gnus.org team's fault, sorry.
-
-
-@ifnottex
-@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions
-@end ifnottex
-@subsection Installation
+as a part of Emacs. It's been around in some form for almost a decade
+now, and has been distributed as a standard part of Emacs for much of
+that time. Gnus 5 is the latest (and greatest) incarnation. The
+original version was called GNUS, and was written by Masanobu UMEDA.
+When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
+decided to rewrite Gnus.
+
+Its biggest strength is the fact that it is extremely
+customizable. It is somewhat intimidating at first glance, but
+most of the complexity can be ignored until you're ready to take
+advantage of it. If you receive a reasonable volume of e-mail
+(you're on various mailing lists), or you would like to read
+high-volume mailing lists but cannot keep up with them, or read
+high volume newsgroups or are just bored, then Gnus is what you
+want.
+
+This FAQ was maintained by Justin Sheehy until March 2002. He
+would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
+job with this FAQ before him. We would like to do the same - thanks,
+Justin!
+
+If you have a Web browser, the official hypertext version is at:
+@uref{http://my.gnus.org/FAQ/}.
+This version is much nicer than the unofficial hypertext
+versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
+State, and other FAQ archives. See the resources question below
+if you want information on obtaining it in another format.
+
+The information contained here was compiled with the assistance
+of the Gnus development mailing list, and any errors or
+misprints are the my.gnus.org team's fault, sorry.
+
+@node FAQ 1 - Installation FAQ
+@subsection Installation FAQ
 
 @menu
-* [1.1]::   What is the latest version of Gnus?
-* [1.2]::   What's new in 5.10?
-* [1.3]::   Where and how to get Gnus?
-* [1.4]::   What to do with the tarball now? 
-* [1.5]::   Which version of Emacs do I need?
-* [1.6]::   How do I run Gnus on both Emacs and XEmacs?
+* [1.1]::    What is the latest version of Gnus?
+* [1.2]::    What's new in 5.10?
+* [1.3]::    Where and how to get Gnus?
+* [1.4]::    What to do with the tarball now?
+* [1.5]::    I sometimes read references to No Gnus and Oort Gnus, what
+             are those?
+* [1.6]::    Which version of Emacs do I need?
+* [1.7]::    How do I run Gnus on both Emacs and XEmacs?
 @end menu
 
-
-@ifnottex
-@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.1: 
+@node [1.1]
+@subsubheading Question 1.1
 
 What is the latest version of Gnus?
 
-Answer: 
-
- Jingle please: Gnus 5.10 is released, get it while it's
- hot! As well as the step in version number is rather
- small, Gnus 5.10 has tons of new features which you
- shouldn't miss, however if you are cautious, you might
- prefer to stay with 5.8.8 respectively 5.9 (they are
- basically the same) until some bugfix releases are out.
- 
-@ifnottex
-@node [1.2], [1.3], [1.1], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.2: 
+@subsubheading Answer
+
+Jingle please: Gnus 5.10 is released, get it while it's
+hot! As well as the step in version number is rather
+small, Gnus 5.10 has tons of new features which you
+shouldn't miss. The current release (5.10.6) should be at
+least as stable as the latest release of the 5.8 series.
+
+@node [1.2]
+@subsubheading Question 1.2
 
 What's new in 5.10?
 
-Answer: 
-
- First of all, you should have a look into the file
- GNUS-NEWS in the toplevel directory of the Gnus tarball,
- there the most important changes are listed. Here's a
- short list of the changes I find especially
- important/interesting:
- 
-
- 
-
-@itemize @bullet{}
+@subsubheading Answer
+
+First of all, you should have a look into the file
+GNUS-NEWS in the toplevel directory of the Gnus tarball,
+there the most important changes are listed. Here's a
+short list of the changes I find especially
+important/interesting:
+
+@itemize @bullet
+
+@item
+Major rewrite of the Gnus agent, Gnus agent is now
+active by default.
+
+@item
+Many new article washing functions for dealing with
+ugly formatted articles.
+
+@item
+Anti Spam features.
+
+@item
+Message-utils now included in Gnus.
 
 @item
- Major rewrite of the Gnus agent, Gnus agent is now
- active by default.
- 
-@item
- Many new article washing functions for dealing with
- ugly formatted articles.
- 
-@item
- Anti Spam features.
- 
-@item
- message-utils now included in Gnus.
- 
-@item
- New format specifiers for summary lines, e.g. %B for
- a complex trn-style thread tree.
- 
+New format specifiers for summary lines, e.g. %B for
+a complex trn-style thread tree.
 @end itemize
- 
-@ifnottex
-@node [1.3], [1.4], [1.2], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.3: 
+
+@node [1.3]
+@subsubheading Question 1.3
 
 Where and how to get Gnus?
 
-Answer: 
-
- The latest released version of Gnus isn't included in
- Emacs 21 and until now it also isn't available through the
- package system of XEmacs 21.4, therefor you should get the
- Gnus tarball from
- @uref{http://www.gnus.org/dist/gnus.tar.gz}
- or via anonymous FTP from 
- @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
- 
-@ifnottex
-@node [1.4], [1.5], [1.3], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.4: 
-
- What to do with the tarball now?
- 
-
-Answer: 
-
- Untar it via @samp{tar xvzf gnus.tar.gz} and do the common 
- @samp{./configure; make; make install} circle.
- (under MS-Windows either get the Cygwin environment from
- @uref{http://www.cygwin.com}
- which allows you to do what's described above or unpack the
- tarball with some packer (e.g. Winace from
- @uref{http://www.winace.com})
- and use the batch-file make.bat included in the tarball to install
- Gnus. If you don't want to (or aren't allowed to) install Gnus
- system-wide, you can install it in your home directory and add the
- following lines to your ~/.xemacs/init.el or ~/.emacs:
- 
+@subsubheading Answer
+
+The latest released version of Gnus isn't included in
+Emacs 21, therefor you should get the Gnus tarball from
+@uref{http://www.gnus.org/dist/gnus.tar.gz}
+or via anonymous FTP from 
+@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
+If you use XEmacs instead of Emacs you can use XEmacs'
+package system instead.
+
+@node [1.4]
+@subsubheading Question 1.4
+
+What to do with the tarball now?
+
+@subsubheading Answer
+
+Untar it via @samp{tar xvzf gnus.tar.gz} and do the common 
+@samp{./configure; make; make install} circle.
+(under MS-Windows either get the Cygwin environment from
+@uref{http://www.cygwin.com}
+which allows you to do what's described above or unpack the
+tarball with some packer (e.g. Winace from
+@uref{http://www.winace.com})
+and use the batch-file make.bat included in the tarball to install
+Gnus.) If you don't want to (or aren't allowed to) install Gnus
+system-wide, you can install it in your home directory and add the
+following lines to your ~/.xemacs/init.el or ~/.emacs:
 
 @example
 (add-to-list 'load-path "/path/to/gnus/lisp")
@@ -212,436 +205,395 @@
     (add-to-list 'Info-directory-list "/path/to/gnus/texi/")
   (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/"))
 @end example
-
 @noindent
- Make sure that you don't have any Gnus related stuff
- before this line, on MS Windows use something like
- "C:/path/to/lisp" (yes, "/").
- 
-@ifnottex
-@node [1.5], [1.6], [1.4], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.5: 
+
+Make sure that you don't have any Gnus related stuff
+before this line, on MS Windows use something like
+"C:/path/to/lisp" (yes, "/").
+
+@node [1.5]
+@subsubheading Question 1.5
+
+I sometimes read references to No Gnus and Oort Gnus,
+what are those?
+
+@subsubheading Answer
+
+Oort Gnus was the name of the development version of
+Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is
+the name of the current development version which will
+once become Gnus 5.12 or Gnus 6. (If you're wondering why
+not 5.11, the odd version numbers are normally used for
+the Gnus versions bundled with Emacs)
+
+@node [1.6]
+@subsubheading Question 1.6
 
 Which version of Emacs do I need?
 
-Answer: 
-
- Gnus 5.10 requires an Emacs version that is greater
- than or equal to Emacs 20.7 or XEmacs 21.1.
- 
-@ifnottex
-@node [1.6],  , [1.5], FAQ 1 - Installation
-@end ifnottex
-@subsubheading Question 1.6: 
+@subsubheading Answer
+
+Gnus 5.10 requires an Emacs version that is greater
+than or equal to Emacs 20.7 or XEmacs 21.1. The
+development versions of Gnus (aka No Gnus) require Emacs
+21 or XEmacs 21.4.
+
+@node [1.7]
+@subsubheading Question 1.7
 
 How do I run Gnus on both Emacs and XEmacs?
 
-Answer: 
-
- You can't use the same copy of Gnus in both as the Lisp
- files are byte-compiled to a format which is different
- depending on which Emacs did the compilation. Get one copy
- of Gnus for Emacs and one for XEmacs.
- 
-@ifnottex
-@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions
-@end ifnottex
+@subsubheading Answer
+
+You can't use the same copy of Gnus in both as the Lisp
+files are byte-compiled to a format which is different
+depending on which Emacs did the compilation. Get one copy
+of Gnus for Emacs and one for XEmacs.
+
+@node FAQ 2 - Startup / Group buffer
 @subsection Startup / Group buffer
 
 @menu
-* [2.1]::   Every time I start Gnus I get a message
-            "Gnus auto-save file exists. Do you want to read it?", 
-            what does this mean and how to prevent it? 
-* [2.2]::   Gnus doesn't remember which groups I'm subscribed to, what's this? 
-* [2.3]::   How to change the format of the lines in Group buffer? 
-* [2.4]::   My group buffer becomes a bit crowded, is there a way to sort my
-            groups into categories so I can easier browse through them?
-* [2.5]::   How to manually sort the groups in Group buffer? How to sort the
-            groups in a topic? 
+* [2.1]::    Every time I start Gnus I get a message "Gnus auto-save
+             file exists. Do you want to read it?", what does this mean and
+             how to prevent it?
+* [2.2]::    Gnus doesn't remember which groups I'm subscribed to,
+             what's this?
+* [2.3]::    How to change the format of the lines in Group buffer?
+* [2.4]::    My group buffer becomes a bit crowded, is there a way to
+             sort my groups into categories so I can easier browse through
+             them?
+* [2.5]::    How to manually sort the groups in Group buffer? How to
+             sort the groups in a topic?
 @end menu
 
-@ifnottex
-@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.1: 
-
- Every time I start Gnus I get a message "Gnus auto-save
- file exists. Do you want to read it?", what does this mean
- and how to prevent it?
- 
-
-Answer: 
-
- This message means that the last time you used Gnus, it
- wasn't properly exited and therefor couldn't write its
- informations to disk (e.g. which messages you read), you
- are now asked if you want to restore those informations
- from the auto-save file.
- 
-
- To prevent this message make sure you exit Gnus
- via @samp{q} in group buffer instead of
- just killing Emacs.
- 
-@ifnottex
-@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question: 2.2 
-
- Gnus doesn't remember which groups I'm subscribed to,
- what's this?
- 
-
-Answer: 
-
- You get the message described in the q/a pair above while
- starting Gnus, right? It's an other symptom for the same
- problem, so read the answer above.
- 
-@ifnottex
-@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.3: 
-
- How to change the format of the lines in Group buffer?
- 
-
-Answer: 
-
- You've got to tweak the value of the variable
- gnus-group-line-format. See the manual node "Group Line
- Specification" for information on how to do this. An
- example for this (guess from whose .gnus :-)):
- 
+@node [2.1]
+@subsubheading Question 2.1
+
+Every time I start Gnus I get a message "Gnus auto-save
+file exists. Do you want to read it?", what does this mean
+and how to prevent it?
+
+@subsubheading Answer
+
+This message means that the last time you used Gnus, it
+wasn't properly exited and therefor couldn't write its
+informations to disk (e.g. which messages you read), you
+are now asked if you want to restore those informations
+from the auto-save file.
+
+To prevent this message make sure you exit Gnus
+via @samp{q} in group buffer instead of
+just killing Emacs.
+
+@node [2.2]
+@subsubheading Question 2.2
+
+Gnus doesn't remember which groups I'm subscribed to,
+what's this?
+
+@subsubheading Answer
+
+You get the message described in the q/a pair above while
+starting Gnus, right? It's an other symptom for the same
+problem, so read the answer above.
+
+@node [2.3]
+@subsubheading Question 2.3
+
+How to change the format of the lines in Group buffer?
+
+@subsubheading Answer
+
+You've got to tweak the value of the variable
+gnus-group-line-format. See the manual node "Group Line
+Specification" for information on how to do this. An
+example for this (guess from whose .gnus :-)):
 
 @example
-
 (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n")
-            
 @end example
- 
-@ifnottex
-@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.4: 
-
- My group buffer becomes a bit crowded, is there a way to
- sort my groups into categories so I can easier browse
- through them?
- 
-
-Answer: 
-
- Gnus offers the topic mode, it allows you to sort your
- groups in, well, topics, e.g. all groups dealing with
- Linux under the topic linux, all dealing with music under
- the topic music and all dealing with scottish music under
- the topic scottish which is a subtopic of music.
- 
-
- To enter topic mode, just hit t while in Group buffer. Now
- you can use @samp{T n} to create a topic
- at point and @samp{T m} to move a group to
- a specific topic. For more commands see the manual or the
- menu. You might want to include the %P specifier at the
- beginning of your gnus-group-line-format variable to have
- the groups nicely indented.
- 
-@ifnottex
-@node [2.5],  , [2.4], FAQ 2 - Startup / Group buffer
-@end ifnottex
-@subsubheading Question 2.5: 
-
- How to manually sort the groups in Group buffer? How to
- sort the groups in a topic?
- 
-
-Answer: 
-
- Move point over the group you want to move and
- hit @samp{C-k}, now move point to the
- place where you want the group to be and
- hit @samp{C-y}.
- 
-@ifnottex
-@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions
-@end ifnottex
-@subsection Getting messages
+@noindent
+
+@node [2.4]
+@subsubheading Question 2.4
+
+My group buffer becomes a bit crowded, is there a way to
+sort my groups into categories so I can easier browse
+through them?
+
+@subsubheading Answer
+
+Gnus offers the topic mode, it allows you to sort your
+groups in, well, topics, e.g. all groups dealing with
+Linux under the topic linux, all dealing with music under
+the topic music and all dealing with scottish music under
+the topic scottish which is a subtopic of music.
+
+To enter topic mode, just hit t while in Group buffer. Now
+you can use @samp{T n} to create a topic
+at point and @samp{T m} to move a group to
+a specific topic. For more commands see the manual or the
+menu. You might want to include the %P specifier at the
+beginning of your gnus-group-line-format variable to have
+the groups nicely indented.
+
+@node [2.5]
+@subsubheading Question 2.5
+
+How to manually sort the groups in Group buffer? How to
+sort the groups in a topic?
+
+@subsubheading Answer
+
+Move point over the group you want to move and
+hit @samp{C-k}, now move point to the
+place where you want the group to be and
+hit @samp{C-y}.
+
+@node FAQ 3 - Getting Messages
+@subsection Getting Messages
 
 @menu
-* [3.1]::   I just installed Gnus, started it via M-x gnus but it only says
-            "nntp (news) open error", what to do? 
-* [3.2]::   I'm working under Windows and have no idea what ~/.gnus means. 
-* [3.3]::   My news server requires authentication, how to store user name
-            and password on disk? 
-* [3.4]::   Gnus seems to start up OK, but I can't find out how to
-            subscribe to a group. 
-* [3.5]::   Gnus doesn't show all groups / Gnus says I'm not allowed to
-            post on this server as well as I am, what's that?
-* [3.6]::   I want Gnus to fetch news from several servers, is this possible? 
-* [3.7]::   And how about local spool files? 
-* [3.8]::   OK, reading news works now, but I want to be able to read my mail
-            with Gnus, too. How to do it? 
-* [3.9]::   And what about IMAP? 
-* [3.10]::  At the office we use one of those MS Exchange servers,
-            can I use Gnus to read my mail from it? 
-* [3.11]::  Can I tell Gnus not to delete the mails on the server
-            it retrieves via POP3? 
+* [3.1]::     I just installed Gnus, started it via  @samp{M-x gnus} 
+              but it only says "nntp (news) open error", what to do?
+* [3.2]::     I'm working under Windows and have no idea what ~/.gnus.el
+              means.
+* [3.3]::     My news server requires authentication, how to store user
+              name and password on disk?
+* [3.4]::     Gnus seems to start up OK, but I can't find out how to
+              subscribe to a group.
+* [3.5]::     Gnus doesn't show all groups / Gnus says I'm not allowed
+              to post on this server as well as I am, what's that?
+* [3.6]::     I want Gnus to fetch news from several servers, is this
+              possible?
+* [3.7]::     And how about local spool files?
+* [3.8]::     OK, reading news works now, but I want to be able to read
+              my mail with Gnus, too. How to do it?
+* [3.9]::     And what about IMAP?
+* [3.10]::    At the office we use one of those MS Exchange servers, can
+              I use Gnus to read my mail from it?
+* [3.11]::    Can I tell Gnus not to delete the mails on the server it
+              retrieves via POP3?
 @end menu
 
-@ifnottex
-@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.1: 
-
- I just installed Gnus, started it via 
- @samp{M-x gnus} 
- but it only says "nntp (news) open error", what to do?
- 
-
-Answer: 
-
- You've got to tell Gnus where to fetch the news from. Read
- the documentation for information on how to do this. As a
- first start, put those lines in ~/.gnus:
- 
+@node [3.1]
+@subsubheading Question 3.1
+
+I just installed Gnus, started it via 
+@samp{M-x gnus} 
+but it only says "nntp (news) open error", what to do?
+
+@subsubheading Answer
+
+You've got to tell Gnus where to fetch the news from. Read
+the documentation for information on how to do this. As a
+first start, put those lines in ~/.gnus.el:
 
 @example
 (setq gnus-select-method '(nntp "news.yourprovider.net"))
 (setq user-mail-address "you@@yourprovider.net")
 (setq user-full-name "Your Name")
 @end example
- 
-@ifnottex
-@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.2: 
-
- I'm working under Windows and have no idea what ~/.gnus means.
- 
-
-Answer: 
-
- The ~/ means the home directory where Gnus and Emacs look for the
-configuration files. However, you don't really need to know what this
-means, it suffices that Emacs knows what it means :-) You can type
-@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on
-Windows), and Emacs will open the right file for you. (It will most
-likely be new, and thus empty.)  However, I'd discourage you from
-doing so, since the directory Emacs chooses will most certainly not be
-what you want, so let's do it the correct way.  The first thing you've
-got to do is to create a suitable directory (no blanks in directory
-name please) e.g. @file{c:\myhome}. Then you must set the environment
-variable HOME to this directory. To do this under Win9x or Me include
-the line
- 
+@noindent
+
+@node [3.2]
+@subsubheading Question 3.2
+
+I'm working under Windows and have no idea what ~/.gnus.el means.
+
+@subsubheading Answer
+
+The ~/ means the home directory where Gnus and Emacs look
+for the configuration files.  However, you don't really
+need to know what this means, it suffices that Emacs knows
+what it means :-) You can type 
+@samp{C-x C-f ~/.gnus.el RET } 
+(yes, with the forward slash, even on Windows), and
+Emacs will open the right file for you.  (It will most
+likely be new, and thus empty.)
+However, I'd discourage you from doing so, since the
+directory Emacs chooses will most certainly not be what
+you want, so let's do it the correct way. 
+The first thing you've got to do is to
+create a suitable directory (no blanks in directory name
+please) e.g. c:\myhome. Then you must set the environment
+variable HOME to this directory.  To do this under Win9x
+or Me include the line
 
 @example
-
 SET HOME=C:\myhome
-            
 @end example
-
 @noindent
- in your autoexec.bat and reboot. Under NT, 2000 and XP,
- hit Winkey+Pause/Break to enter system options (if it
- doesn't work, go to Control Panel -> System). There you'll
- find the possibility to set environment variables, create
- a new one with name HOME and value @file{c:\myhome}, a reboot is
- not necessary.
- 
-
- Now to create ~/.gnus, say
- @samp{C-x C-f ~/.gnus RET C-x C-s}.
- in Emacs. 
- 
-@ifnottex
-@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.3: 
-
- My news server requires authentication, how to store
- user name and password on disk?
- 
-
-Answer: 
-
- Create a file ~/.authinfo which includes for each server a line like this
- 
+
+in your autoexec.bat and reboot.  Under NT, 2000 and XP,
+hit Winkey+Pause/Break to enter system options (if it
+doesn't work, go to Control Panel -> System). There you'll
+find the possibility to set environment variables, create
+a new one with name HOME and value C:\myhome, a reboot is
+not necessary.
+
+Now to create ~/.gnus.el, say
+@samp{C-x C-f ~/.gnus.el RET C-x C-s}.
+in Emacs.
+
+@node [3.3]
+@subsubheading Question 3.3
+
+My news server requires authentication, how to store
+user name and password on disk?
+
+@subsubheading Answer
+
+Create a file ~/.authinfo which includes for each server a line like this
 
 @example
 machine news.yourprovider.net login YourUserName password YourPassword
 @end example
-
 @noindent
 .
- Make sure that the file isn't readable to others if you
- work on a OS which is capable of doing so. (Under Unix
- say 
-
+Make sure that the file isn't readable to others if you
+work on a OS which is capable of doing so.  (Under Unix
+say 
 @example
 chmod 600 ~/.authinfo
 @end example
-
 @noindent
- in a shell.)
- 
-@ifnottex
-@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.4: 
-
- Gnus seems to start up OK, but I can't find out how to
- subscribe to a group.
- 
-
-Answer: 
-
- If you know the name of the group say @samp{U
- name.of.group RET} in group buffer (use the
- tab-completion Luke). Otherwise hit ^ in group buffer,
- this brings you to the server buffer. Now place point (the
- cursor) over the server which carries the group you want,
- hit @samp{RET}, move point to the group
- you want to subscribe to and say @samp{u}
- to subscribe to it.
- 
-@ifnottex
-@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.5: 
-
- Gnus doesn't show all groups / Gnus says I'm not allowed to
- post on this server as well as I am, what's that?
- 
-
-Answer: 
-
- Some providers allow restricted anonymous access and full
- access only after authorization. To make Gnus send authinfo
- to those servers append 
- 
+
+in a shell.)
+
+@node [3.4]
+@subsubheading Question 3.4
+
+Gnus seems to start up OK, but I can't find out how to
+subscribe to a group.
+
+@subsubheading Answer
+
+If you know the name of the group say @samp{U
+name.of.group RET} in group buffer (use the
+tab-completion Luke). Otherwise hit ^ in group buffer,
+this brings you to the server buffer. Now place point (the
+cursor) over the server which carries the group you want,
+hit @samp{RET}, move point to the group
+you want to subscribe to and say @samp{u}
+to subscribe to it.
+
+@node [3.5]
+@subsubheading Question 3.5
+
+Gnus doesn't show all groups / Gnus says I'm not allowed to
+post on this server as well as I am, what's that?
+
+@subsubheading Answer
+
+Some providers allow restricted anonymous access and full
+access only after authorization. To make Gnus send authinfo
+to those servers append 
 
 @example
 force yes
 @end example
- 
-
 @noindent
- to the line for those servers in ~/.authinfo.
  
-@ifnottex
-@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.6: 
-
- I want Gnus to fetch news from several servers, is this possible?
- 
-
-Answer: 
-
- Of course. You can specify more sources for articles in the
- variable gnus-secondary-select-methods. Add something like
- this in ~/.gnus:
- 
+to the line for those servers in ~/.authinfo.
+
+@node [3.6]
+@subsubheading Question 3.6
+
+I want Gnus to fetch news from several servers, is this possible?
+
+@subsubheading Answer
+
+Of course. You can specify more sources for articles in the
+variable gnus-secondary-select-methods. Add something like
+this in ~/.gnus.el:
 
 @example
-(add-to-list 'gnus-secondary-select-methods 
+(add-to-list 'gnus-secondary-select-methods
              '(nntp "news.yourSecondProvider.net"))
-(add-to-list 'gnus-secondary-select-methods 
-             '(nntp "news.yourThirdProvider.net"))          
+(add-to-list 'gnus-secondary-select-methods
+             '(nntp "news.yourThirdProvider.net"))
 @end example
- 
-@ifnottex
-@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.7: 
-
- And how about local spool files?
- 
-
-Answer: 
-
- No problem, this is just one more select method called
- nnspool, so you want this:
- 
+@noindent
+
+@node [3.7]
+@subsubheading Question 3.7
+
+And how about local spool files?
+
+@subsubheading Answer
+
+No problem, this is just one more select method called
+nnspool, so you want this:
 
 @example
 (add-to-list 'gnus-secondary-select-methods '(nnspool ""))
 @end example
-
 @noindent
- Or this if you don't want an NNTP Server as primary news source:
- 
+
+Or this if you don't want an NNTP Server as primary news source:
 
 @example
 (setq gnus-select-method '(nnspool ""))
 @end example
-
 @noindent
- Gnus will look for the spool file in /usr/spool/news, if you
- want something different, change the line above to something like this:
- 
+
+Gnus will look for the spool file in /usr/spool/news, if you
+want something different, change the line above to something like this:
 
 @example
 (add-to-list 'gnus-secondary-select-methods
-             '(nnspool "" (nnspool-directory "/usr/local/myspoolddir")))
+             '(nnspool ""
+		       (nnspool-directory "/usr/local/myspoolddir")))
 @end example
-
 @noindent
- This sets the spool directory for this server only.
- You might have to specify more stuff like the program used
- to post articles, see the Gnus manual on how to do this.
- 
-@ifnottex
-@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.8: 
-
- OK, reading news works now, but I want to be able to read my mail
- with Gnus, too. How to do it?
- 
-
-Answer: 
-
- That's a bit harder since there are many possible sources
- for mail, many possible ways for storing mail and many
- different ways for sending mail. The most common cases are
- these: 1: You want to read your mail from a pop3 server and
- send them directly to a SMTP Server 2: Some program like
- fetchmail retrieves your mail and stores it on disk from
- where Gnus shall read it. Outgoing mail is sent by
- Sendmail, Postfix or some other MTA. Sometimes, you even
- need a combination of the above cases.
- 
-
- However, the first thing to do is to tell Gnus in which way
- it should store the mail, in Gnus terminology which back end
- to use. Gnus supports many different back ends, the most
- commonly used one is nnml. It stores every mail in one file
- and is therefor quite fast. However you might prefer a one
- file per group approach if your file system has problems with
- many small files, the nnfolder back end is then probably the
- choice for you. To use nnml add the following to ~/.gnus:
- 
+
+This sets the spool directory for this server only.
+You might have to specify more stuff like the program used
+to post articles, see the Gnus manual on how to do this.
+
+@node [3.8]
+@subsubheading Question 3.8
+
+OK, reading news works now, but I want to be able to read my mail
+with Gnus, too. How to do it?
+
+@subsubheading Answer
+
+That's a bit harder since there are many possible sources
+for mail, many possible ways for storing mail and many
+different ways for sending mail. The most common cases are
+these: 1: You want to read your mail from a pop3 server and
+send them directly to a SMTP Server 2: Some program like
+fetchmail retrieves your mail and stores it on disk from
+where Gnus shall read it. Outgoing mail is sent by
+Sendmail, Postfix or some other MTA. Sometimes, you even
+need a combination of the above cases.
+
+However, the first thing to do is to tell Gnus in which way
+it should store the mail, in Gnus terminology which back end
+to use. Gnus supports many different back ends, the most
+commonly used one is nnml. It stores every mail in one file
+and is therefor quite fast. However you might prefer a one
+file per group approach if your file system has problems with
+many small files, the nnfolder back end is then probably the
+choice for you.  To use nnml add the following to ~/.gnus.el:
 
 @example
 (add-to-list 'gnus-secondary-select-methods '(nnml ""))
 @end example
-
 @noindent
- As you might have guessed, if you want nnfolder, it's
- 
+
+As you might have guessed, if you want nnfolder, it's
 
 @example
 (add-to-list 'gnus-secondary-select-methods '(nnfolder ""))
 @end example
- 
-
- Now we need to tell Gnus, where to get it's mail from. If
- it's a POP3 server, then you need something like this:
- 
+@noindent
+
+Now we need to tell Gnus, where to get it's mail from. If
+it's a POP3 server, then you need something like this:
 
 @example
 (eval-after-load "mail-source"
@@ -649,75 +601,68 @@
                                     :user "yourUserName"
                                     :password "yourPassword")))
 @end example
-
 @noindent
- Make sure ~/.gnus isn't readable to others if you store
- your password there. If you want to read your mail from a
- traditional spool file on your local machine, it's
- 
+
+Make sure ~/.gnus.el isn't readable to others if you store
+your password there. If you want to read your mail from a
+traditional spool file on your local machine, it's
 
 @example
 (eval-after-load "mail-source"
-  '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")))
+  '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
 @end example
-
 @noindent
- If it's a Maildir, with one file per message as used by
- postfix, Qmail and (optionally) fetchmail it's
- 
+
+If it's a Maildir, with one file per message as used by
+postfix, Qmail and (optionally) fetchmail it's
 
 @example
 (eval-after-load "mail-source"
   '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
                                         :subdirs ("cur" "new")))
 @end example
-
 @noindent
- And finally if you want to read your mail from several files
- in one directory, for example because procmail already split your
- mail, it's
- 
+
+And finally if you want to read your mail from several files
+in one directory, for example because procmail already split your
+mail, it's
 
 @example
 (eval-after-load "mail-source"
-  '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/"
-                                          :suffix ".prcml"))
+  '(add-to-list 'mail-sources
+		'(directory :path "/path/to/procmail-dir/"
+			    :suffix ".prcml")))
 @end example
-
 @noindent
- Where :suffix ".prcml" tells Gnus only to use files with the
- suffix .prcml.
- 
-
- OK, now you only need to tell Gnus how to send mail. If you
- want to send mail via sendmail (or whichever MTA is playing
- the role of sendmail on your system), you don't need to do
- anything. However, if you want to send your mail to an
- SMTP Server you need the following in your ~/.gnus
- 
+
+Where :suffix ".prcml" tells Gnus only to use files with the
+suffix .prcml.
+
+OK, now you only need to tell Gnus how to send mail. If you
+want to send mail via sendmail (or whichever MTA is playing
+the role of sendmail on your system), you don't need to do
+anything. However, if you want to send your mail to an
+SMTP Server you need the following in your ~/.gnus.el
 
 @example
 (setq send-mail-function 'smtpmail-send-it)
 (setq message-send-mail-function 'smtpmail-send-it)
 (setq smtpmail-default-smtp-server "smtp.yourProvider.net")
 @end example
- 
-@ifnottex
-@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.9: 
-
- And what about IMAP?
- 
-
-Answer: 
-
- There are two ways of using IMAP with Gnus. The first one is
- to use IMAP like POP3, that means Gnus fetches the mail from
- the IMAP server and stores it on disk. If you want to do
- this (you don't really want to do this) add the following to
- ~/.gnus
- 
+@noindent
+
+@node [3.9]
+@subsubheading Question 3.9
+
+And what about IMAP?
+
+@subsubheading Answer
+
+There are two ways of using IMAP with Gnus. The first one is
+to use IMAP like POP3, that means Gnus fetches the mail from
+the IMAP server and stores it on disk. If you want to do
+this (you don't really want to do this) add the following to
+~/.gnus.el
 
 @example
 (add-to-list 'mail-sources '(imap :server "mail.mycorp.com"
@@ -728,249 +673,215 @@
                                   :mailbox "INBOX"
                                   :fetchflag "\\Seen"))
 @end example
-
 @noindent
- You might have to tweak the values for stream and/or
- authentification, see the Gnus manual node "Mail Source
- Specifiers" for possible values.
- 
-
- If you want to use IMAP the way it's intended, you've got to
- follow a different approach. You've got to add the nnimap
- back end to your select method and give the information
- about the server there.
- 
+
+You might have to tweak the values for stream and/or
+authentification, see the Gnus manual node "Mail Source
+Specifiers" for possible values.
+
+If you want to use IMAP the way it's intended, you've got to
+follow a different approach.  You've got to add the nnimap
+back end to your select method and give the information
+about the server there.
 
 @example
-(add-to-list 
- 'gnus-secondary-select-methods
- '(nnimap "Give the baby a name"
-          (nnimap-address "imap.yourProvider.net")
-          (nnimap-port 143)
-          (nnimap-list-pattern "archive.*")))
+(add-to-list 'gnus-secondary-select-methods
+	     '(nnimap "Give the baby a name"
+		      (nnimap-address "imap.yourProvider.net")
+		      (nnimap-port 143)
+		      (nnimap-list-pattern "archive.*")))
 @end example
-
 @noindent
- Again, you might have to specify how to authenticate to the
- server if Gnus can't guess the correct way, see the Manual
- Node "IMAP" for detailed information.
- 
-@ifnottex
-@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.10: 
-
- At the office we use one of those MS Exchange servers, can I use
- Gnus to read my mail from it?
- 
-
-Answer: 
-
- Offer your administrator a pair of new running shoes for
- activating IMAP on the server and follow the instructions
- above.
- 
-@ifnottex
-@node [3.11],  , [3.10], FAQ 3 - Getting messages
-@end ifnottex
-@subsubheading Question 3.11: 
-
- Can I tell Gnus not to delete the mails on the server it
- retrieves via POP3?
- 
-
-Answer: 
-
- First of all, that's not the way POP3 is intended to work,
- if you have the possibility, you should use the IMAP
- Protocol if you want your messages to stay on the
- server. Nevertheless there might be situations where you
- need the feature, but sadly Gnus itself has no predefined
- functionality to do so.
- 
-
- However this is Gnus county so there are possibilities to
- achieve what you want. The easiest way is to get an external
- program which retrieves copies of the mail and stores them
- on disk, so Gnus can read it from there. On Unix systems you
- could use e.g. fetchmail for this, on MS Windows you can use
- Hamster, an excellent local news and mail server.
- 
-
- The other solution would be, to replace the method Gnus
- uses to get mail from POP3 servers by one which is capable
- of leaving the mail on the server. If you use XEmacs, get
- the package mail-lib, it includes an enhanced pop3.el,
- look in the file, there's documentation on how to tell
- Gnus to use it and not to delete the retrieved mail. For
- GNU Emacs look for the file epop3.el which can do the same
- (If you know the home of this file, please send me an
- e-mail). You can also tell Gnus to use an external program
- (e.g. fetchmail) to fetch your mail, see the info node
- "Mail Source Specifiers" in the Gnus manual on how to do
- it.
- 
-
-@ifnottex
-@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions
-@end ifnottex
+
+Again, you might have to specify how to authenticate to the
+server if Gnus can't guess the correct way, see the Manual
+Node "IMAP" for detailed information.
+
+@node [3.10]
+@subsubheading Question 3.10
+
+At the office we use one of those MS Exchange servers, can I use
+Gnus to read my mail from it?
+
+@subsubheading Answer
+
+Offer your administrator a pair of new running shoes for
+activating IMAP on the server and follow the instructions
+above.
+
+@node [3.11]
+@subsubheading Question 3.11
+
+Can I tell Gnus not to delete the mails on the server it
+retrieves via POP3?
+
+@subsubheading Answer
+
+First of all, that's not the way POP3 is intended to work,
+if you have the possibility, you should use the IMAP
+Protocol if you want your messages to stay on the
+server. Nevertheless there might be situations where you
+need the feature, but sadly Gnus itself has no predefined
+functionality to do so.
+
+However this is Gnus county so there are possibilities to
+achieve what you want. The easiest way is to get an external
+program which retrieves copies of the mail and stores them
+on disk, so Gnus can read it from there. On Unix systems you
+could use e.g. fetchmail for this, on MS Windows you can use
+Hamster, an excellent local news and mail server.
+
+The other solution would be, to replace the method Gnus
+uses to get mail from POP3 servers by one which is capable
+of leaving the mail on the server. If you use XEmacs, get
+the package mail-lib, it includes an enhanced pop3.el,
+look in the file, there's documentation on how to tell
+Gnus to use it and not to delete the retrieved mail. For
+GNU Emacs look for the file epop3.el which can do the same
+(If you know the home of this file, please send me an
+e-mail). You can also tell Gnus to use an external program
+(e.g. fetchmail) to fetch your mail, see the info node
+"Mail Source Specifiers" in the Gnus manual on how to do
+it.
+
+@node FAQ 4 - Reading messages
 @subsection Reading messages
 
 @menu
-* [4.1]::   When I enter a group, all read messages are gone.
-            How to view them again? 
-* [4.2]::   How to tell Gnus to show an important message every time
-            I enter a group, even when it's read? 
-* [4.3]::   How to view the headers of a message? 
-* [4.4]::   How to view the raw unformatted message? 
-* [4.5]::   How can I change the headers Gnus displays by default at the
-            top of the article buffer? 
-* [4.6]::   I'd like Gnus NOT to render HTML-mails but show me the
-            text part if it's available. How to do it? 
-* [4.7]::   Can I use some other browser than w3 to render my HTML-mails? 
-* [4.8]::   Is there anything I can do to make poorly formatted mails
-            more readable? 
-* [4.9]::   Is there a way to automatically ignore posts by specific authors
-            or with specific words in the subject? And can I highlight more
-            interesting ones in some way? 
-* [4.10]::  How can I disable threading in some (e.g. mail-) groups, or set
-            other variables specific for some groups? 
-* [4.11]::  Can I highlight messages written by me and follow-ups to those? 
-* [4.12]::  The number of total messages in a group which Gnus displays in
-            group buffer is by far to high, especially in mail groups.
-            Is this a bug? 
-* [4.13]::  I don't like the layout of summary and article buffer,
-            how to change it?  Perhaps even a three pane display? 
-* [4.14]::  I don't like the way the Summary buffer looks, how to tweak it? 
-* [4.15]::  How to split incoming mails in several groups? 
+* [4.1]::     When I enter a group, all read messages are gone. How to
+              view them again?
+* [4.2]::     How to tell Gnus to show an important message every time I
+              enter a group, even when it's read?
+* [4.3]::     How to view the headers of a message?
+* [4.4]::     How to view the raw unformatted message?
+* [4.5]::     How can I change the headers Gnus displays by default at
+              the top of the article buffer?
+* [4.6]::     I'd like Gnus NOT to render HTML-mails but show me the
+              text part if it's available. How to do it?
+* [4.7]::     Can I use some other browser than w3 to render my
+              HTML-mails?
+* [4.8]::     Is there anything I can do to make poorly formatted mails
+              more readable?
+* [4.9]::     Is there a way to automatically ignore posts by specific
+              authors or with specific words in the subject? And can I highlight
+              more interesting ones in some way?
+* [4.10]::    How can I disable threading in some (e.g. mail-) groups,
+              or set other variables specific for some groups?
+* [4.11]::    Can I highlight messages written by me and follow-ups to
+              those?
+* [4.12]::    The number of total messages in a group which Gnus
+              displays in group buffer is by far to high, especially in mail
+              groups. Is this a bug?
+* [4.13]::    I don't like the layout of summary and article buffer, how
+              to change it? Perhaps even a three pane display?
+* [4.14]::    I don't like the way the Summary buffer looks, how to
+              tweak it?
+* [4.15]::    How to split incoming mails in several groups?
 @end menu
 
-@ifnottex
-@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.1: 
-
- When I enter a group, all read messages are gone. How to view them again?
- 
-
-Answer: 
-
- If you enter the group by saying 
- @samp{RET}
- in group buffer with point over the group, only unread and ticked messages are loaded. Say
- @samp{C-u RET}
- instead to load all available messages. If you want only the e.g. 300 newest say
- @samp{C-u 300 RET}
- 
-
- Loading only unread messages can be annoying if you have threaded view enabled, say
- 
+@node [4.1]
+@subsubheading Question 4.1
+
+When I enter a group, all read messages are gone. How to view them again?
+
+@subsubheading Answer
+
+If you enter the group by saying  
+@samp{RET}
+in group buffer with point over the group, only unread and ticked messages are loaded. Say
+@samp{C-u RET}
+instead to load all available messages. If you want only the e.g. 300 newest say
+@samp{C-u 300 RET}
+
+Loading only unread messages can be annoying if you have threaded view enabled, say
 
 @example
 (setq gnus-fetch-old-headers 'some)
 @end example
- 
-
 @noindent
- in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load
- all articles (Warning: Both settings enlarge the amount of data which is 
- fetched when you enter a group and slow down the process of entering a group).
- 
-
- If you already use Gnus 5.10, you can say 
- @samp{/o N} 
- In summary buffer to load the last N messages, this feature is not available in 5.8.8
- 
-
- If you don't want all old messages, but the parent of the message you're just reading,
- you can say @samp{^}, if you want to retrieve the whole thread
- the message you're just reading belongs to, @samp{A T} is your friend.
- 
-@ifnottex
-@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.2: 
-
- How to tell Gnus to show an important message every time I
- enter a group, even when it's read?
- 
-
-Answer: 
-
- You can tick important messages. To do this hit
- @samp{u} while point is in summary buffer
- over the message. When you want to remove the mark, hit
- either @samp{d} (this deletes the tick
- mark and set's unread mark) or @samp{M c}
- (which deletes all marks for the message).
- 
-@ifnottex
-@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.3: 
-
- How to view the headers of a message?
- 
-
-Answer: 
-
- Say @samp{t} 
- to show all headers, one more
- @samp{t} 
- hides them again.
  
-@ifnottex
-@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.4: 
-
- How to view the raw unformatted message?
- 
-
-Answer: 
-
- Say 
- @samp{C-u g} 
- to show the raw message
- @samp{g} 
- returns to normal view.
- 
-@ifnottex
-@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.5: 
-
- How can I change the headers Gnus displays by default at
- the top of the article buffer?
- 
-
-Answer: 
-
- The variable gnus-visible-headers controls which headers
- are shown, its value is a regular expression, header lines
- which match it are shown. So if you want author, subject,
- date, and if the header exists, Followup-To and MUA / NUA
- say this in ~/.gnus:
- 
+in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load
+all articles (Warning: Both settings enlarge the amount of data which is 
+fetched when you enter a group and slow down the process of entering a group).
+
+If you already use Gnus 5.10, you can say 
+@samp{/o N} 
+In summary buffer to load the last N messages, this feature is not available in 5.8.8
+
+If you don't want all old messages, but the parent of the message you're just reading,
+you can say @samp{^}, if you want to retrieve the whole thread
+the message you're just reading belongs to, @samp{A T} is your friend.
+
+@node [4.2]
+@subsubheading Question 4.2
+
+How to tell Gnus to show an important message every time I
+enter a group, even when it's read?
+
+@subsubheading Answer
+
+You can tick important messages. To do this hit
+@samp{u} while point is in summary buffer
+over the message. When you want to remove the mark, hit
+either @samp{d} (this deletes the tick
+mark and set's unread mark) or @samp{M c}
+(which deletes all marks for the message).
+
+@node [4.3]
+@subsubheading Question 4.3
+
+How to view the headers of a message?
+
+@subsubheading Answer
+
+Say @samp{t} 
+to show all headers, one more
+@samp{t} 
+hides them again.
+
+@node [4.4]
+@subsubheading Question 4.4
+
+How to view the raw unformatted message?
+
+@subsubheading Answer
+
+Say 
+@samp{C-u g} 
+to show the raw message
+@samp{g} 
+returns to normal view.
+
+@node [4.5]
+@subsubheading Question 4.5
+
+How can I change the headers Gnus displays by default at
+the top of the article buffer?
+
+@subsubheading Answer
+
+The variable gnus-visible-headers controls which headers
+are shown, its value is a regular expression, header lines
+which match it are shown. So if you want author, subject,
+date, and if the header exists, Followup-To and MUA / NUA
+say this in ~/.gnus.el:
+
 @example
-(setq gnus-visible-headers 
-      "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\
-\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)")
+(setq gnus-visible-headers
+      '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To"
+	"^User-Agent" "^X-Newsreader" "^X-Mailer"))
 @end example
- 
-@ifnottex
-@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.6: 
-
- I'd like Gnus NOT to render HTML-mails but show me the
- text part if it's available. How to do it?
- 
-
-Answer: 
-
- Say
- 
+@noindent
+
+@node [4.6]
+@subsubheading Question 4.6
+
+I'd like Gnus NOT to render HTML-mails but show me the
+text part if it's available. How to do it?
+
+@subsubheading Answer
+
+Say
 
 @example
 (eval-after-load "mm-decode"
@@ -978,240 +889,206 @@
       (add-to-list 'mm-discouraged-alternatives "text/html")
       (add-to-list 'mm-discouraged-alternatives "text/richtext")))
 @end example
-
 @noindent
- in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add
- 
+
+in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add
 
 @example
 (setq mm-automatic-display (remove "text/html" mm-automatic-display))
 @end example
-
 @noindent
- too.
- 
-@ifnottex
-@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.7: 
-
- Can I use some other browser than w3 to render my HTML-mails?
- 
-
-Answer: 
-
- Only if you use Gnus 5.10 or younger. In this case you've got the
- choice between w3, w3m, links, lynx and html2text, which
- one is used can be specified in the variable
- mm-text-html-renderer, so if you want links to render your
- mail say
- 
+
+too.
+
+@node [4.7]
+@subsubheading Question 4.7
+
+Can I use some other browser than w3 to render my HTML-mails?
+
+@subsubheading Answer
+
+Only if you use Gnus 5.10 or younger. In this case you've got the
+choice between w3, w3m, links, lynx and html2text, which
+one is used can be specified in the variable
+mm-text-html-renderer, so if you want links to render your
+mail say
 
 @example
 (setq mm-text-html-renderer 'links)
 @end example
- 
-@ifnottex
-@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.8: 
-
- Is there anything I can do to make poorly formatted mails
- more readable?
- 
-
-Answer: 
-
- Gnus offers you several functions to "wash" incoming mail,
- you can find them if you browse through the menu, item Article->Washing. The most
- interesting ones are probably "Wrap long lines" (
- @samp{W w}
- ), "Decode ROT13" (
- @samp{W r}
- ) and "Outlook Deuglify" which repairs the dumb quoting used
- by many users of Microsoft products (
- @samp{W Y f} gives you full deuglify.
- See @samp{W Y C-h} or
- have a look at the menus for other deuglifications).
- Outlook deuglify is only available since Gnus 5.10.
- 
-@ifnottex
-@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.9: 
-
- Is there a way to automatically ignore posts by specific
- authors or with specific words in the subject? And can I
- highlight more interesting ones in some way?
- 
-
-Answer: 
-
- You want Scoring. Scoring means, that you define rules
- which assign each message an integer value. Depending on
- the value the message is highlighted in summary buffer (if
- it's high, say +2000) or automatically marked read (if the
- value is low, say -800) or some other action happens.
- 
-
- There are basically three ways of setting up rules which assign
- the scoring-value to messages. The first and easiest way is to set
- up rules based on the article you are just reading. Say you're
- reading a message by a guy who always writes nonsense and you want
- to ignore his messages in the future. Hit
- @samp{L}, to set up a rule which lowers the score.
- Now Gnus asks you which the criteria for lowering the Score shall
- be. Hit @samp{?} twice to see all possibilities,
- we want @samp{a} which means the author (the from
- header). Now Gnus wants to know which kind of matching we want.
- Hit either @samp{e} for an exact match or
- @samp{s} for substring-match and delete afterwards
- everything but the name to score down all authors with the given
- name no matter which email address is used. Now you need to tell
- Gnus when to apply the rule and how long it should last, hit e.g.
- @samp{p} to apply the rule now and let it last
- forever. If you want to raise the score instead of lowering it say
- @samp{I} instead of @samp{L}.
- 
-
- You can also set up rules by hand. To do this say @samp{V
- f} in summary buffer. Then you are asked for the name
- of the score file, it's name.of.group.SCORE for rules valid in
- only one group or all.Score for rules valid in all groups. See the
- Gnus manual for the exact syntax, basically it's one big list
- whose elements are lists again. the first element of those lists
- is the header to score on, then one more list with what to match,
- which score to assign, when to expire the rule and how to do the
- matching. If you find me very interesting, you could e.g. add the
- following to your all.Score:
- 
+@noindent
+
+@node [4.8]
+@subsubheading Question 4.8
+
+Is there anything I can do to make poorly formatted mails
+more readable?
+
+@subsubheading Answer
+
+Gnus offers you several functions to "wash" incoming mail, you can
+find them if you browse through the menu, item
+Article->Washing. The most interesting ones are probably "Wrap
+long lines" (@samp{W w}), "Decode ROT13"
+(@samp{W r}) and "Outlook Deuglify" which repairs
+the dumb quoting used by many users of Microsoft products
+(@samp{W Y f} gives you full deuglify.
+See @samp{W Y C-h} or have a look at the menus for
+other deuglifications).  Outlook deuglify is only available since
+Gnus 5.10.
+
+@node [4.9]
+@subsubheading Question 4.9
+
+Is there a way to automatically ignore posts by specific
+authors or with specific words in the subject? And can I
+highlight more interesting ones in some way?
+
+@subsubheading Answer
+
+You want Scoring. Scoring means, that you define rules
+which assign each message an integer value. Depending on
+the value the message is highlighted in summary buffer (if
+it's high, say +2000) or automatically marked read (if the
+value is low, say -800) or some other action happens.
+
+There are basically three ways of setting up rules which assign
+the scoring-value to messages. The first and easiest way is to set
+up rules based on the article you are just reading. Say you're
+reading a message by a guy who always writes nonsense and you want
+to ignore his messages in the future. Hit
+@samp{L}, to set up a rule which lowers the score.
+Now Gnus asks you which the criteria for lowering the Score shall
+be. Hit @samp{?} twice to see all possibilities,
+we want @samp{a} which means the author (the from
+header). Now Gnus wants to know which kind of matching we want.
+Hit either @samp{e} for an exact match or
+@samp{s} for substring-match and delete afterwards
+everything but the name to score down all authors with the given
+name no matter which email address is used. Now you need to tell
+Gnus when to apply the rule and how long it should last, hit e.g.
+@samp{p} to apply the rule now and let it last
+forever. If you want to raise the score instead of lowering it say
+@samp{I} instead of @samp{L}.
+
+You can also set up rules by hand. To do this say @samp{V
+f} in summary buffer. Then you are asked for the name
+of the score file, it's name.of.group.SCORE for rules valid in
+only one group or all.Score for rules valid in all groups. See the
+Gnus manual for the exact syntax, basically it's one big list
+whose elements are lists again. the first element of those lists
+is the header to score on, then one more list with what to match,
+which score to assign, when to expire the rule and how to do the
+matching. If you find me very interesting, you could e.g. add the
+following to your all.Score:
 
 @example
 (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s))
  ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s)))
 @end example
-
 @noindent
- This would add 999 to the score of messages written by me
- and 500 to the score of messages which are a (possibly
- indirect) answer to a message written by me. Of course
- nobody with a sane mind would do this :-)
- 
-
- The third alternative is adaptive scoring. This means Gnus
- watches you and tries to find out what you find
- interesting and what annoying and sets up rules
- which reflect this. Adaptive scoring can be a huge help
- when reading high traffic groups. If you want to activate
- adaptive scoring say
- 
+
+This would add 999 to the score of messages written by me
+and 500 to the score of messages which are a (possibly
+indirect) answer to a message written by me. Of course
+nobody with a sane mind would do this :-)
+
+The third alternative is adaptive scoring. This means Gnus
+watches you and tries to find out what you find
+interesting and what annoying and sets up rules
+which reflect this. Adaptive scoring can be a huge help
+when reading high traffic groups. If you want to activate
+adaptive scoring say
 
 @example
 (setq gnus-use-adaptive-scoring t)
 @end example
-
 @noindent
- in ~/.gnus.
- 
-@ifnottex
-@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.10: 
-
- How can I disable threading in some (e.g. mail-) groups, or
- set other variables specific for some groups?
- 
-
-Answer: 
-
- While in group buffer move point over the group and hit
- @samp{G c}, this opens a buffer where you
- can set options for the group. At the bottom of the buffer
- you'll find an item that allows you to set variables
- locally for the group. To disable threading enter
- gnus-show-threads as name of variable and nil as
- value. Hit button done at the top of the buffer when
- you're ready.
- 
-@ifnottex
-@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.11: 
-
- Can I highlight messages written by me and follow-ups to
- those?
- 
-
-Answer: 
-
- Stop those "Can I ..." questions, the answer is always yes
- in Gnus Country :-). It's a three step process: First we
- make faces (specifications of how summary-line shall look
- like) for those postings, then we'll give them some
- special score and finally we'll tell Gnus to use the new
- faces. You can find detailed instructions on how to do it on
- @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org}
- 
-@ifnottex
-@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.12: 
-
- The number of total messages in a group which Gnus
- displays in group buffer is by far to high, especially in
- mail groups. Is this a bug?
- 
-
-Answer: 
-
- No, that's a matter of design of Gnus, fixing this would
- mean reimplementation of major parts of Gnus'
- back ends. Gnus thinks "highest-article-number -
- lowest-article-number = total-number-of-articles". This
- works OK for Usenet groups, but if you delete and move
- many messages in mail groups, this fails. To cure the
- symptom, enter the group via @samp{C-u RET} 
- (this makes Gnus get all messages), then
- hit @samp{M P b} to mark all messages and
- then say @samp{B m name.of.group} to move
- all messages to the group they have been in before, they
- get new message numbers in this process and the count is
- right again (until you delete and move your mail to other
- groups again).
- 
-@ifnottex
-@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.13: 
-
- I don't like the layout of summary and article buffer, how
- to change it? Perhaps even a three pane display?
- 
-
-Answer: 
-
- You can control the windows configuration by calling the
- function gnus-add-configuration. The syntax is a bit
- complicated but explained very well in the manual node
- "Window Layout". Some popular examples:
- 
-
- Instead 25% summary 75% article buffer 35% summary and 65%
- article (the 1.0 for article means "take the remaining
- space"):
- 
+
+in ~/.gnus.el.
+
+@node [4.10]
+@subsubheading Question 4.10
+
+How can I disable threading in some (e.g. mail-) groups, or
+set other variables specific for some groups?
+
+@subsubheading Answer
+
+While in group buffer move point over the group and hit
+@samp{G c}, this opens a buffer where you
+can set options for the group. At the bottom of the buffer
+you'll find an item that allows you to set variables
+locally for the group. To disable threading enter
+gnus-show-threads as name of variable and nil as
+value. Hit button done at the top of the buffer when
+you're ready.
+
+@node [4.11]
+@subsubheading Question 4.11
+
+Can I highlight messages written by me and follow-ups to
+those?
+
+@subsubheading Answer
+
+Stop those "Can I ..." questions, the answer is always yes
+in Gnus Country :-). It's a three step process: First we
+make faces (specifications of how summary-line shall look
+like) for those postings, then we'll give them some
+special score and finally we'll tell Gnus to use the new
+faces. You can find detailed instructions on how to do it on
+@uref{http://my.gnus.org/node/view/224, my.gnus.org}
+
+@node [4.12]
+@subsubheading Question 4.12
+
+The number of total messages in a group which Gnus
+displays in group buffer is by far to high, especially in
+mail groups. Is this a bug?
+
+@subsubheading Answer
+
+No, that's a matter of design of Gnus, fixing this would
+mean reimplementation of major parts of Gnus'
+back ends. Gnus thinks "highest-article-number -
+lowest-article-number = total-number-of-articles". This
+works OK for Usenet groups, but if you delete and move
+many messages in mail groups, this fails. To cure the
+symptom, enter the group via @samp{C-u RET} 
+(this makes Gnus get all messages), then
+hit @samp{M P b} to mark all messages and
+then say @samp{B m name.of.group} to move
+all messages to the group they have been in before, they
+get new message numbers in this process and the count is
+right again (until you delete and move your mail to other
+groups again).
+
+@node [4.13]
+@subsubheading Question 4.13
+
+I don't like the layout of summary and article buffer, how
+to change it? Perhaps even a three pane display?
+
+@subsubheading Answer
+
+You can control the windows configuration by calling the
+function gnus-add-configuration. The syntax is a bit
+complicated but explained very well in the manual node
+"Window Layout". Some popular examples:
+
+Instead 25% summary 75% article buffer 35% summary and 65%
+article (the 1.0 for article means "take the remaining
+space"):
 
 @example
-(gnus-add-configuration 
- '(article (vertical 1.0
-                     (summary .35 point)
-                     (article 1.0))))
+(gnus-add-configuration
+ '(article (vertical 1.0 (summary .35 point) (article 1.0))))
 @end example
- 
-
- A three pane layout, Group buffer on the left, summary
- buffer top-right, article buffer bottom-right:
- 
+@noindent
+
+A three pane layout, Group buffer on the left, summary
+buffer top-right, article buffer bottom-right:
 
 @example
 (gnus-add-configuration
@@ -1228,46 +1105,40 @@
 	       (vertical 25
 			 (group 1.0))
 	       (vertical 1.0
-			 (summary 1.0 point)))))	      
+			 (summary 1.0 point)))))
 @end example
- 
-@ifnottex
-@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.14: 
-
- I don't like the way the Summary buffer looks, how to tweak it?
- 
-
-Answer: 
-
- You've got to play around with the variable
- gnus-summary-line-format. It's value is a string of
- symbols which stand for things like author, date, subject
- etc. A list of the available specifiers can be found in the
- manual node "Summary Buffer Lines" and the often forgotten
- node "Formatting Variables" and it's sub-nodes. There
- you'll find useful things like positioning the cursor and
- tabulators which allow you a summary in table form, but
- sadly hard tabulators are broken in 5.8.8.
- 
-
- Since 5.10, Gnus offers you some very nice new specifiers,
- e.g. %B which draws a thread-tree and %&user-date which
- gives you a date where the details are dependent of the
- articles age. Here's an example which uses both:
- 
+@noindent
+
+@node [4.14]
+@subsubheading Question 4.14
+
+I don't like the way the Summary buffer looks, how to tweak it?
+
+@subsubheading Answer
+
+You've got to play around with the variable
+gnus-summary-line-format. It's value is a string of
+symbols which stand for things like author, date, subject
+etc. A list of the available specifiers can be found in the
+manual node "Summary Buffer Lines" and the often forgotten
+node "Formatting Variables" and it's sub-nodes. There
+you'll find useful things like positioning the cursor and
+tabulators which allow you a summary in table form, but
+sadly hard tabulators are broken in 5.8.8.
+
+Since 5.10, Gnus offers you some very nice new specifiers,
+e.g. %B which draws a thread-tree and %&user-date which
+gives you a date where the details are dependent of the
+articles age. Here's an example which uses both:
 
 @example
-(setq gnus-summary-line-format 
-      ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")
+(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")
 @end example
-
 @noindent
- resulting in:
- 
-
-@smallexample
+
+resulting in:
+
+@example
 :O     Re: [Richard Stallman] rfc2047.el          |  13 |Lars Magne Ingebrigt |Sat 23:06
 :O     Re: Revival of the ding-patches list       |  13 |Lars Magne Ingebrigt |Sat 23:12
 :R  >  Re: Find correct list of articles for a gro|  25 |Lars Magne Ingebrigt |Sat 23:16
@@ -1280,54 +1151,48 @@
 :R  >  Re: Gnus still doesn't count messages prope|  23 |Lars Magne Ingebrigt |Sat 23:57
 :O  \->  ...                                      |  18 |Kai Grossjohann      | 0:35
 :O    \->  ...                                    |  13 |Lars Magne Ingebrigt | 0:56
-@end smallexample
- 
-@ifnottex
-@node [4.15],  , [4.14], FAQ 4 - Reading messages
-@end ifnottex
-@subsubheading Question 4.15: 
-
- How to split incoming mails in several groups?
- 
-
-Answer: 
-
- Gnus offers two possibilities for splitting mail, the easy
- nnmail-split-methods and the more powerful Fancy Mail
- Splitting. I'll only talk about the first one, refer to
- the manual, node "Fancy Mail Splitting" for the latter.
- 
-
- The value of nnmail-split-methods is a list, each element
- is a list which stands for a splitting rule. Each rule has
- the form "group where matching articles should go to",
- "regular expression which has to be matched", the first
- rule which matches wins. The last rule must always be a
- general rule (regular expression .*) which denotes where
- articles should go which don't match any other rule. If
- the folder doesn't exist yet, it will be created as soon
- as an article lands there. By default the mail will be
- send to all groups whose rules match. If you 
- don't want that (you probably don't want), say
- 
+@end example
+@noindent
+
+@node [4.15]
+@subsubheading Question 4.15
+
+How to split incoming mails in several groups?
+
+@subsubheading Answer
+
+Gnus offers two possibilities for splitting mail, the easy
+nnmail-split-methods and the more powerful Fancy Mail
+Splitting. I'll only talk about the first one, refer to
+the manual, node "Fancy Mail Splitting" for the latter.
+
+The value of nnmail-split-methods is a list, each element
+is a list which stands for a splitting rule. Each rule has
+the form "group where matching articles should go to",
+"regular expression which has to be matched", the first
+rule which matches wins. The last rule must always be a
+general rule (regular expression .*) which denotes where
+articles should go which don't match any other rule. If
+the folder doesn't exist yet, it will be created as soon
+as an article lands there.  By default the mail will be
+send to all groups whose rules match. If you 
+don't want that (you probably don't want), say
 
 @example
 (setq nnmail-crosspost nil)
 @end example
-
 @noindent
- in ~/.gnus.
- 
-
- An example might be better than thousand words, so here's
- my nnmail-split-methods. Note that I send duplicates in a
- special group and that the default group is spam, since I
- filter all mails out which are from some list I'm
- subscribed to or which are addressed directly to me
- before. Those rules kill about 80% of the Spam which
- reaches me (Email addresses are changed to prevent spammers
- from using them):
- 
+
+in ~/.gnus.el.
+
+An example might be better than thousand words, so here's
+my nnmail-split-methods. Note that I send duplicates in a
+special group and that the default group is spam, since I
+filter all mails out which are from some list I'm
+subscribed to or which are addressed directly to me
+before. Those rules kill about 80% of the Spam which
+reaches me (Email addresses are changed to prevent spammers
+from using them):
 
 @example
 (setq nnmail-split-methods
@@ -1336,133 +1201,114 @@
     ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*")
     ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*")
     ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*")
-    ("Hamster-src"
-     "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
+    ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
     ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$")
     ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*")
-    ("EK"
-     "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*")
-    ("Spam"
-     "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
-    ("Spam"
-     "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
-    ("Spam"
-     "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
+    ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*")
+    ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
+    ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
+    ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
     ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)")
-    ("Spam"
-     "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
-    ("Spam"
-     "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
+    ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
+    ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
     ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$")
     ("Spam" "^Received: from link2buy.com")
     ("Spam" "^CC: .*azzrael@@t-online.bla")
     ("Spam" "^X-Mailer-Version: 1.50 BETA")
     ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*")
-    ("Inbox"
-     "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)")
+    ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)")
     ("Spam" "")))
 @end example
- 
-
-@ifnottex
-@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions
-@end ifnottex
+@noindent
+
+@node FAQ 5 - Composing messages
 @subsection Composing messages
 
 @menu
-* [5.1]::   What are the basic commands I need to know for sending mail and
-            postings? 
-* [5.2]::   How to enable automatic word-wrap when composing messages? 
-* [5.3]::   How to set stuff like From, Organization, Reply-To, signature...? 
-* [5.4]::   Can I set things like From, Signature etc group based on the
-            group I post too? 
-* [5.5]::   Is there a spell-checker? Perhaps even on-the-fly spell-checking? 
-* [5.6]::   Can I set the dictionary based on the group I'm posting to? 
-* [5.7]::   Is there some kind of address-book, so I needn't remember all
-            those email addresses? 
-* [5.8]::   Sometimes I see little images at the top of article buffer.
-            What's that and how can I send one with my postings, too? 
-* [5.9]::   Sometimes I accidentally hit r instead of f in newsgroups.
-            Can Gnus warn me, when I'm replying by mail in newsgroups? 
-* [5.10]::  How to tell Gnus not to generate a sender header? 
-* [5.11]::  I want Gnus to locally store copies of my send mail and news,
-            how to do it? 
-* [5.12]::  People tell me my Message-IDs are not correct,
-            why aren't they and how to fix it? 
+* [5.1]::     What are the basic commands I need to know for sending
+              mail and postings?
+* [5.2]::     How to enable automatic word-wrap when composing messages?
+* [5.3]::     How to set stuff like From, Organization, Reply-To,
+              signature...?
+* [5.4]::     Can I set things like From, Signature etc group based on
+              the group I post too?
+* [5.5]::     Is there a spell-checker? Perhaps even on-the-fly
+              spell-checking?
+* [5.6]::     Can I set the dictionary based on the group I'm posting
+              to?
+* [5.7]::     Is there some kind of address-book, so I needn't remember
+              all those email addresses?
+* [5.8]::     Sometimes I see little images at the top of article
+              buffer. What's that and how can I send one with my postings, too?
+* [5.9]::     Sometimes I accidentally hit r instead of f in newsgroups.
+              Can Gnus warn me, when I'm replying by mail in newsgroups?
+* [5.10]::    How to tell Gnus not to generate a sender header?
+* [5.11]::    I want Gnus to locally store copies of my send mail and
+              news, how to do it?
+* [5.12]::    People tell me my Message-IDs are not correct, why aren't
+              they and how to fix it?
 @end menu
 
-@ifnottex
-@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.1: 
-
- What are the basic commands I need to know for sending mail and postings?
- 
-
-Answer: 
-
- To start composing a new mail hit @samp{m}
- either in Group or Summary buffer, for a posting, it's
- either @samp{a} in Group buffer and
- filling the Newsgroups header manually
- or @samp{a} in the Summary buffer of the
- group where the posting shall be send to. Replying by mail
- is
- @samp{r} if you don't want to cite the
- author, or import the cited text manually and
- @samp{R} to cite the text of the original
- message. For a follow up to a newsgroup, it's
- @samp{f} and @samp{F}
- (analog to @samp{r} and
- @samp{R}).
- 
-
- Enter new headers above the line saying "--text follows
- this line--", enter the text below the line. When ready
- hit @samp{C-c C-c}, to send the message,
- if you want to finish it later hit @samp{C-c
- C-d} to save it in the drafts group, where you
- can start editing it again by saying @samp{D
- e}.
- 
-@ifnottex
-@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.2: 
-
- How to enable automatic word-wrap when composing messages?
- 
-
-Answer: 
-
- Say
- 
+@node [5.1]
+@subsubheading Question 5.1
+
+What are the basic commands I need to know for sending mail and postings?
+
+@subsubheading Answer
+
+To start composing a new mail hit @samp{m}
+either in Group or Summary buffer, for a posting, it's
+either @samp{a} in Group buffer and
+filling the Newsgroups header manually
+or @samp{a} in the Summary buffer of the
+group where the posting shall be send to. Replying by mail
+is
+@samp{r} if you don't want to cite the
+author, or import the cited text manually and
+@samp{R} to cite the text of the original
+message. For a follow up to a newsgroup, it's
+@samp{f} and @samp{F}
+(analogously to @samp{r} and
+@samp{R}).
+
+Enter new headers above the line saying "--text follows
+this line--", enter the text below the line. When ready
+hit @samp{C-c C-c}, to send the message,
+if you want to finish it later hit @samp{C-c
+C-d} to save it in the drafts group, where you
+can start editing it again by saying @samp{D
+e}.
+
+@node [5.2]
+@subsubheading Question 5.2
+
+How to enable automatic word-wrap when composing messages?
+
+@subsubheading Answer
+
+Say
 
 @example
 (add-hook 'message-mode-hook
-      (lambda ()
-           (setq fill-column 72)
-           (turn-on-auto-fill)))
+	  (lambda ()
+	    (setq fill-column 72)
+	    (turn-on-auto-fill)))
 @end example
-
 @noindent
- in ~/.gnus. You can reformat a paragraph by hitting
- @samp{M-q} (as usual)
- 
-@ifnottex
-@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.3: 
-
- How to set stuff like From, Organization, Reply-To, signature...?
- 
-
-Answer: 
-
- There are other ways, but you should use posting styles
- for this. (See below why).
- This example should make the syntax clear:
- 
+
+in ~/.gnus.el. You can reformat a paragraph by hitting
+@samp{M-q} (as usual)
+
+@node [5.3]
+@subsubheading Question 5.3
+
+How to set stuff like From, Organization, Reply-To, signature...?
+
+@subsubheading Answer
+
+There are other ways, but you should use posting styles
+for this. (See below why).
+This example should make the syntax clear:
 
 @example
 (setq gnus-posting-styles
@@ -1474,146 +1320,121 @@
      ("X-SampleHeader" "foobar")
      (eval (setq some-variable "Foo bar")))))
 @end example
-
 @noindent
- The ".*" means that this settings are the default ones
- (see below), valid values for the first element of the
- following lists are signature, signature-file,
- organization, address, name or body. The attribute name
- can also be a string. In that case, this will be used as
- a header name, and the value will be inserted in the
- headers of the article; if the value is `nil', the header
- name will be removed. You can also say (eval (foo bar)),
- then the function foo will be evaluated with argument bar
- and the result will be thrown away.
- 
-@ifnottex
-@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.4: 
-
- Can I set things like From, Signature etc group based on the group I post too?
- 
-
-Answer: 
-
- That's the strength of posting styles. Before, we used ".*"
- to set the default for all groups. You can use a regexp
- like "^gmane" and the following settings are only applied
- to postings you send to the gmane hierarchy, use
- ".*binaries" instead and they will be applied to postings
- send to groups containing the string binaries in their
- name etc.
- 
-
- You can instead of specifying a regexp specify a function
- which is evaluated, only if it returns true, the
- corresponding settings take effect. Two interesting
- candidates for this are message-news-p which returns t if
- the current Group is a newsgroup and the corresponding
- message-mail-p.
- 
-
- Note that all forms that match are applied, that means in
- the example below, when I post to
- gmane.mail.spam.spamassassin.general, the settings under
- ".*" are applied and the settings under message-news-p and
- those under "^gmane" and those under
- "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because
- of this put general settings at the top and specific ones
- at the bottom.
- 
+
+The ".*" means that this settings are the default ones
+(see below), valid values for the first element of the
+following lists are signature, signature-file,
+organization, address, name or body.  The attribute name
+can also be a string.  In that case, this will be used as
+a header name, and the value will be inserted in the
+headers of the article; if the value is `nil', the header
+name will be removed. You can also say (eval (foo bar)),
+then the function foo will be evaluated with argument bar
+and the result will be thrown away.
+
+@node [5.4]
+@subsubheading Question 5.4
+
+Can I set things like From, Signature etc group based on the group I post too?
+
+@subsubheading Answer
+
+That's the strength of posting styles. Before, we used ".*"
+to set the default for all groups. You can use a regexp
+like "^gmane" and the following settings are only applied
+to postings you send to the gmane hierarchy, use
+".*binaries" instead and they will be applied to postings
+send to groups containing the string binaries in their
+name etc.
+
+You can instead of specifying a regexp specify a function
+which is evaluated, only if it returns true, the
+corresponding settings take effect. Two interesting
+candidates for this are message-news-p which returns t if
+the current Group is a newsgroup and the corresponding
+message-mail-p.
+
+Note that all forms that match are applied, that means in
+the example below, when I post to
+gmane.mail.spam.spamassassin.general, the settings under
+".*" are applied and the settings under message-news-p and
+those under "^gmane" and those under
+"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because
+of this put general settings at the top and specific ones
+at the bottom.
 
 @example
 (setq gnus-posting-styles
   '((".*"  ;;default
      (name "Frank Schmitt")
      (organization "Hamme net, kren mer och nimmi")
-     (signature-file "~/.signature"))
+     (signature-file "~/.signature")    )
     ((message-news-p)  ;;Usenet news?
      (address "mySpamTrap@@Frank-Schmitt.bla")
-     ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla"))
+     ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")    )
     ((message-mail-p)  ;;mail?
-     (address "usedForMails@@Frank-Schmitt.bla"))
+     (address "usedForMails@@Frank-Schmitt.bla")    )
     ("^gmane" ;;this is mail, too in fact
      (address "usedForMails@@Frank-Schmitt.net")
-     ("Reply-To" nil))
+     ("Reply-To" nil)    )
     ("^gmane.mail.spam.spamassassin.general$"
      (eval (setq mail-envelope-from "Azzrael@@rz-online.de"))
-     (address "Azzrael@@rz-online.de"))))
+     (address "Azzrael@@rz-online.de")) ))
 @end example
- 
-@ifnottex
-@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.5: 
-
- Is there a spell-checker? Perhaps even on-the-fly spell-checking?
- 
-
-Answer: 
-
-You can use ispell.el to spell-check stuff in Emacs. So the first
-thing to do is to make sure that you've got either
-@itemize @bullet
-@item
-@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell}
-or 
-@item
-@uref{http://aspell.sourceforge.net/,aspell} 
-@end itemize
 @noindent
-installed and in your Path.
-
-Then you need
-@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el}
-and for on-the-fly spell-checking
-@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}.
-Ispell.el is shipped with Gnus Emacs and available through the Emacs
-package system, flyspell.el is shipped with Emacs and part of XEmacs
-text-modes package which is available through the package system, so
-there should be no need to install them manually.
- 
-
- Ispell.el assumes you use ispell, if you choose aspell say
- 
+
+@node [5.5]
+@subsubheading Question 5.5
+
+Is there a spell-checker? Perhaps even on-the-fly spell-checking?
+
+@subsubheading Answer
+
+You can use ispell.el to spell-check stuff in Emacs. So the
+first thing to do is to make sure that you've got either
+@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell}
+or @uref{http://aspell.sourceforge.net/, aspell}
+installed and in your Path. Then you need 
+@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el}
+and for on-the-fly spell-checking 
+@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}.
+Ispell.el is shipped with Emacs and available through the XEmacs package system, 
+flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is 
+available through the package system, so there should be no need to install them 
+manually.
+
+Ispell.el assumes you use ispell, if you choose aspell say
 
 @example
 (setq ispell-program-name "aspell")
 @end example
+@noindent
  
-
-@noindent
- in your Emacs configuration file.
- 
-
- If you want your outgoing messages to be spell-checked, say
- 
+in your Emacs configuration file.
+
+If you want your outgoing messages to be spell-checked, say
 
 @example
 (add-hook 'message-send-hook 'ispell-message)
 @end example
-
 @noindent
- In your ~/.gnus, if you prefer on-the-fly spell-checking say
- 
+
+In your ~/.gnus.el, if you prefer on-the-fly spell-checking say
 
 @example
 (add-hook 'message-mode-hook (lambda () (flyspell-mode 1)))
 @end example
- 
-@ifnottex
-@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.6: 
-
- Can I set the dictionary based on the group I'm posting to?
- 
-
-Answer: 
-
- Yes, say something like
- 
+@noindent
+
+@node [5.6]
+@subsubheading Question 5.6
+
+Can I set the dictionary based on the group I'm posting to?
+
+@subsubheading Answer
+
+Yes, say something like
 
 @example
 (add-hook 'gnus-select-group-hook
@@ -1625,55 +1446,47 @@
              (t
               (ispell-change-dictionary "english")))))
 @end example
- 
-
 @noindent
- in ~/.gnus. Change "^de\\." and "deutsch8" to something
- that suits your needs.
  
-@ifnottex
-@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.7:
-
- Is there some kind of address-book, so I needn't remember
- all those email addresses?
- 
-
-Answer: 
-
- There's an very basic solution for this, mail aliases.
- You can store your mail addresses in a ~/.mailrc file using a simple
- alias syntax:
- 
+in ~/.gnus.el. Change "^de\\." and "deutsch8" to something
+that suits your needs.
+
+@node [5.7]
+@subsubheading Question 5.7
+
+Is there some kind of address-book, so I needn't remember
+all those email addresses?
+
+@subsubheading Answer
+
+There's an very basic solution for this, mail aliases.
+You can store your mail addresses in a ~/.mailrc file using a simple
+alias syntax:
 
 @example
 alias al	"Al <al@@english-heritage.bla>"
 @end example
-
 @noindent
- Then typing your alias (followed by a space or punctuation
- character) on a To: or Cc: line in the message buffer will
- cause Gnus to insert the full address for you. See the
- node "Mail Aliases" in Message (not Gnus) manual for
- details.
- 
-
- However, what you really want is the Insidious Big Brother 
- Database bbdb. Get it through the XEmacs package system or from
- @uref{http://bbdb.sourceforge.net/,bbdb's homepage}.
- Now place the following in ~/.gnus, to activate bbdb for Gnus:
- 
+
+Then typing your alias (followed by a space or punctuation
+character) on a To: or Cc: line in the message buffer will
+cause Gnus to insert the full address for you. See the
+node "Mail Aliases" in Message (not Gnus) manual for
+details.
+
+However, what you really want is the Insidious Big Brother 
+Database bbdb. Get it through the XEmacs package system or from
+@uref{http://bbdb.sourceforge.net/, bbdb's homepage}.
+Now place the following in ~/.gnus.el, to activate bbdb for Gnus:
 
 @example
 (require 'bbdb)
 (bbdb-initialize 'gnus 'message)
 @end example
-
 @noindent
- Now you probably want some general bbdb configuration,
- place them in ~/.emacs:
- 
+
+Now you probably want some general bbdb configuration,
+place them in ~/.emacs:
 
 @example
 (require 'bbdb)
@@ -1689,56 +1502,50 @@
 ;;No popup-buffers
 (setq bbdb-use-pop-up nil)
 @end example
-
 @noindent
- Now you should be ready to go. Say @samp{M-x bbdb RET
- RET} to open a bbdb buffer showing all
- entries. Say @samp{c} to create a new
- entry, @samp{b} to search your BBDB and
- @samp{C-o} to add a new field to an
- entry. If you want to add a sender to the BBDB you can
- also just hit `:' on the posting in the summary buffer and
- you are done. When you now compose a new mail,
- hit @samp{TAB} to cycle through know
- recipients.
- 
-@ifnottex
-@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.8: 
-
- Sometimes I see little images at the top of article
- buffer. What's that and how can I send one with my
- postings, too?
- 
-
-Answer: 
-
- Those images are called X-Faces. They are 48*48 pixel b/w
- pictures, encoded in a header line. If you want to include
- one in your posts, you've got to convert some image to a
- X-Face. So fire up some image manipulation program (say
- Gimp), open the image you want to include, cut out the
- relevant part, reduce color depth to 1 bit, resize to
- 48*48 and save as bitmap. Now you should get the compface
- package from 
- @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}.
- and create the actual X-face by saying
- 
+
+Now you should be ready to go. Say @samp{M-x bbdb RET
+RET} to open a bbdb buffer showing all
+entries. Say @samp{c} to create a new
+entry, @samp{b} to search your BBDB and
+@samp{C-o} to add a new field to an
+entry. If you want to add a sender to the BBDB you can
+also just hit `:' on the posting in the summary buffer and
+you are done. When you now compose a new mail,
+hit @samp{TAB} to cycle through know
+recipients.
+
+@node [5.8]
+@subsubheading Question 5.8
+
+Sometimes I see little images at the top of article
+buffer. What's that and how can I send one with my
+postings, too?
+
+@subsubheading Answer
+
+Those images are called X-Faces. They are 48*48 pixel b/w
+pictures, encoded in a header line. If you want to include
+one in your posts, you've got to convert some image to a
+X-Face. So fire up some image manipulation program (say
+Gimp), open the image you want to include, cut out the
+relevant part, reduce color depth to 1 bit, resize to
+48*48 and save as bitmap. Now you should get the compface
+package from 
+@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}.
+and create the actual X-face by saying
 
 @example
-cat file.xbm | xbm2ikon |compface > file.face
-cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted
+cat file.xbm | xbm2ikon | compface > file.face
+cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted
 @end example
-
 @noindent
-If you can't use compface, there's an online X-face converter at@*
-@uref{http://www.dairiki.org/xface/}.  If you use MS Windows, you
-could also use the WinFace program from
+
+If you can't use compface, there's an online X-face converter at 
+@uref{http://www.dairiki.org/xface/}.
+If you use MS Windows, you could also use the WinFace program from
 @uref{http://www.xs4all.nl/~walterln/winface/}.
-
-Now you only have to tell Gnus to include the X-face in your postings
-by saying
+Now you only have to tell Gnus to include the X-face in your postings by saying
 
 @example
 (setq message-default-headers
@@ -1747,33 +1554,28 @@
           (insert-file-contents "~/.xemacs/xface")
           (buffer-string)))
 @end example
-
 @noindent
- in ~/.gnus.
- 
-@ifnottex
-@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.9: 
-
- Sometimes I accidentally hit r instead of f in
- newsgroups. Can Gnus warn me, when I'm replying by mail in
- newsgroups?
- 
-
-Answer: 
-
- Put this in ~/.gnus:
- 
+
+in ~/.gnus.el.
+
+@node [5.9]
+@subsubheading Question 5.9
+
+Sometimes I accidentally hit r instead of f in
+newsgroups. Can Gnus warn me, when I'm replying by mail in
+newsgroups?
+
+@subsubheading Answer
+
+Put this in ~/.gnus.el:
 
 @example
 (setq gnus-confirm-mail-reply-to-news t)
 @end example
-
 @noindent
- if you already use Gnus 5.10, if you still use 5.8.8 or
- 5.9 try this instead:
- 
+
+if you already use Gnus 5.10, if you still use 5.8.8 or
+5.9 try this instead:
 
 @example
 (eval-after-load "gnus-msg"
@@ -1785,44 +1587,37 @@
                  (y-or-n-p "Really reply by mail to article author? "))
          ad-do-it))))
 @end example
- 
-@ifnottex
-@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.10: 
-
- How to tell Gnus not to generate a sender header?
- 
-
-Answer: 
-
- Since 5.10 Gnus doesn't generate a sender header by
- default. For older Gnus' try this in ~/.gnus:
- 
+@noindent
+
+@node [5.10]
+@subsubheading Question 5.10
+
+How to tell Gnus not to generate a sender header?
+
+@subsubheading Answer
+
+Since 5.10 Gnus doesn't generate a sender header by
+default. For older Gnus' try this in ~/.gnus.el:
 
 @example
 (eval-after-load "message"
       '(add-to-list 'message-syntax-checks '(sender . disabled)))
 @end example
- 
- 
-@ifnottex
-@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.11: 
-
- I want gnus to locally store copies of my send mail and
- news, how to do it?
- 
-
-Answer: 
-
- You must set the variable gnus-message-archive-group to do
- this. You can set it to a string giving the name of the
- group where the copies shall go or like in the example
- below use a function which is evaluated and which returns
- the group to use.
- 
+@noindent
+
+@node [5.11]
+@subsubheading Question 5.11
+
+I want Gnus to locally store copies of my send mail and
+news, how to do it?
+
+@subsubheading Answer
+
+You must set the variable gnus-message-archive-group to do
+this. You can set it to a string giving the name of the
+group where the copies shall go or like in the example
+below use a function which is evaluated and which returns
+the group to use.
 
 @example
 (setq gnus-message-archive-group
@@ -1830,31 +1625,31 @@
 	      "nnml:Send-News"
 	    "nnml:Send-Mail")))
 @end example
- 
- 
-@ifnottex
-@node [5.12],  , [5.11], FAQ 5 - Composing messages
-@end ifnottex
-@subsubheading Question 5.12: 
-
- People tell me my Message-IDs are not correct, why
- aren't they and how to fix it?
- 
-
-Answer: 
-
- The message-ID is an unique identifier for messages you
- send. To make it unique, Gnus need to know which machine
- name to put after the "@@". If the name of the machine
- where Gnus is running isn't suitable (it probably isn't
- at most private machines) you can tell Gnus what to use
- by saying
+@noindent
+
+@node [5.12]
+@subsubheading Question 5.12
+
+People tell me my Message-IDs are not correct, why
+aren't they and how to fix it?
+
+@subsubheading Answer
+
+The message-ID is an unique identifier for messages you
+send. To make it unique, Gnus need to know which machine
+name to put after the "@@". If the name of the machine
+where Gnus is running isn't suitable (it probably isn't
+at most private machines) you can tell Gnus what to use
+by saying:
+
 @example
 (setq message-user-fqdn "yourmachine.yourdomain.tld")
 @end example
 @noindent
- in ~/.gnus.  If you use Gnus 5.9 or ealier, you can use this
-instead (works for newer versions a well):
+
+in ~/.gnus.el.  If you use Gnus 5.9 or ealier, you can use this
+instead (works for newer versions a well): 
+
 @example
 (eval-after-load "message"
   '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
@@ -1865,110 +1660,97 @@
          "Return user's fully qualified domain name."
          fqdn))))
 @end example
-
- If you have no idea what to insert for
- "yourmachine.yourdomain.tld", you've got several
- choices. You can either ask your provider if he allows
- you to use something like
- yourUserName.userfqdn.provider.net, or you can use
- somethingUnique.yourdomain.tld if you own the domain
- yourdomain.tld, or you can register at a service which
- gives private users a FQDN for free, e.g. 
- @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
- (Sorry but this website is in German, if you know of an
- English one offering the same, drop me a note).
- 
-
- Finally you can tell Gnus not to generate a Message-ID
- for News at all (and letting the server do the job) by saying
- 
+@noindent
+
+If you have no idea what to insert for
+"yourmachine.yourdomain.tld", you've got several
+choices. You can either ask your provider if he allows
+you to use something like
+yourUserName.userfqdn.provider.net, or you can use
+somethingUnique.yourdomain.tld if you own the domain
+yourdomain.tld, or you can register at a service which
+gives private users a FQDN for free, e.g.  
+@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
+(Sorry but this website is in German, if you know of an
+English one offering the same, drop me a note).
+
+Finally you can tell Gnus not to generate a Message-ID
+for News at all (and letting the server do the job) by saying
 
 @example
 (setq message-required-news-headers
   (remove' Message-ID message-required-news-headers))
 @end example
-
 @noindent
- you can also tell Gnus not to generate Message-IDs for mail by saying
- 
+
+you can also tell Gnus not to generate Message-IDs for mail by saying
 
 @example
 (setq message-required-mail-headers
   (remove' Message-ID message-required-mail-headers))
 @end example
-
 @noindent
- , however some mail servers don't generate proper
- Message-IDs, too, so test if your Mail Server behaves
- correctly by sending yourself a Mail and looking at the Message-ID.
- 
-
-@ifnottex
-@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions
-@end ifnottex
+
+, however some mail servers don't generate proper
+Message-IDs, too, so test if your Mail Server behaves
+correctly by sending yourself a Mail and looking at the Message-ID.
+
+@node FAQ 6 - Old messages
 @subsection Old messages
 
 @menu
-* [6.1]::   How to import my old mail into Gnus? 
-* [6.2]::   How to archive interesting messages? 
-* [6.3]::   How to search for a specific message? 
-* [6.4]::   How to get rid of old unwanted mail? 
-* [6.5]::   I want that all read messages are expired (at least in some
-            groups). How to do it? 
-* [6.6]::   I don't want expiration to delete my mails but to move them
-            to another group. 
+* [6.1]::    How to import my old mail into Gnus?
+* [6.2]::    How to archive interesting messages?
+* [6.3]::    How to search for a specific message?
+* [6.4]::    How to get rid of old unwanted mail?
+* [6.5]::    I want that all read messages are expired (at least in some
+             groups). How to do it?
+* [6.6]::    I don't want expiration to delete my mails but to move them
+             to another group.
 @end menu
 
-@ifnottex
-@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.1: 
-
- How to import my old mail into Gnus?
- 
-
-Answer: 
-
- The easiest way is to tell your old mail program to
- export the messages in mbox format. Most Unix mailers
- are able to do this, if you come from the MS Windows
- world, you may find tools at
- @uref{http://mbx2mbox.sourceforge.net/}.
- 
-
- Now you've got to import this mbox file into Gnus. To do
- this, create a nndoc group based on the mbox file by
- saying @samp{G f /path/file.mbox RET} in
- Group buffer. You now have read-only access to your
- mail. If you want to import the messages to your normal
- Gnus mail groups hierarchy, enter the nndoc group you've
- just created by saying @samp{C-u RET}
- (thus making sure all messages are retrieved), mark all
- messages by saying @samp{M P b} and
- either copy them to the desired group by saying
- @samp{B c name.of.group RET} or send them
- through nnmail-split-methods (respool them) by saying
- @samp{B r}.
- 
-@ifnottex
-@node [6.2], [6.3], [6.1], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.2: 
-
- How to archive interesting messages?
- 
-
-Answer: 
-
- If you stumble across an interesting message, say in
- gnu.emacs.gnus and want to archive it there are several
- solutions. The first and easiest is to save it to a file
- by saying @samp{O f}. However, wouldn't
- it be much more convenient to have more direct access to
- the archived message from Gnus? If you say yes, put this
- snippet by Frank Haun <pille3003@@fhaun.de> in
- ~/.gnus:
- 
+@node [6.1]
+@subsubheading Question 6.1
+
+How to import my old mail into Gnus?
+
+@subsubheading Answer
+
+The easiest way is to tell your old mail program to
+export the messages in mbox format. Most Unix mailers
+are able to do this, if you come from the MS Windows
+world, you may find tools at
+@uref{http://mbx2mbox.sourceforge.net/}.
+
+Now you've got to import this mbox file into Gnus. To do
+this, create a nndoc group based on the mbox file by
+saying @samp{G f /path/file.mbox RET} in
+Group buffer. You now have read-only access to your
+mail. If you want to import the messages to your normal
+Gnus mail groups hierarchy, enter the nndoc group you've
+just created by saying @samp{C-u RET}
+(thus making sure all messages are retrieved), mark all
+messages by saying @samp{M P b} and
+either copy them to the desired group by saying
+@samp{B c name.of.group RET} or send them
+through nnmail-split-methods (respool them) by saying
+@samp{B r}.
+
+@node [6.2]
+@subsubheading Question 6.2
+
+How to archive interesting messages?
+
+@subsubheading Answer
+
+If you stumble across an interesting message, say in
+gnu.emacs.gnus and want to archive it there are several
+solutions. The first and easiest is to save it to a file
+by saying @samp{O f}. However, wouldn't
+it be much more convenient to have more direct access to
+the archived message from Gnus? If you say yes, put this
+snippet by Frank Haun <pille3003@@fhaun.de> in
+~/.gnus.el:
 
 @example
 (defun my-archive-article (&optional n)
@@ -1987,624 +1769,531 @@
             (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name)))))
     (gnus-summary-copy-article n archive-name)))
 @end example
-
 @noindent
- You can now say @samp{M-x
- my-archive-article} in summary buffer to
- archive the article under the cursor in a nnml
- group. (Change nnml to your preferred back end)
- 
-
- Of course you can also make sure the cache is enabled by saying
- 
+
+You can now say @samp{M-x
+my-archive-article} in summary buffer to
+archive the article under the cursor in a nnml
+group. (Change nnml to your preferred back end)
+
+Of course you can also make sure the cache is enabled by saying
 
 @example
 (setq gnus-use-cache t)
 @end example
-
 @noindent
- then you only have to set either the tick or the dormant
- mark for articles you want to keep, setting the read
- mark will remove them from cache.
- 
-@ifnottex
-@node [6.3], [6.4], [6.2], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.3: 
-
- How to search for a specific message?
- 
-
-Answer: 
-
- There are several ways for this, too. For a posting from
- a Usenet group the easiest solution is probably to ask
- @uref{http://groups.google.com,groups.google.com},
- if you found the posting there, tell Google to display
- the raw message, look for the message-id, and say
- @samp{M-^ the@@message.id RET} in a
- summary buffer.
- Since Gnus 5.10 there's also a Gnus interface for
- groups.google.com which you can call with
- @samp{G W}) in group buffer.
- 
-
- Another idea which works for both mail and news groups
- is to enter the group where the message you are
- searching is and use the standard Emacs search
- @samp{C-s}, it's smart enough to look at
- articles in collapsed threads, too. If you want to
- search bodies, too try @samp{M-s}
- instead. Further on there are the
- gnus-summary-limit-to-foo functions, which can help you,
- too.
- 
-
- Of course you can also use grep to search through your
- local mail, but this is both slow for big archives and
- inconvenient since you are not displaying the found mail
- in Gnus. Here comes nnir into action. Nnir is a front end
- to search engines like swish-e or swish++ and
- others. You index your mail with one of those search
- engines and with the help of nnir you can search trough
- the indexed mail and generate a temporary group with all
- messages which met your search criteria. If this sound
- cool to you get nnir.el from the contrib directory of the Gnus
- distribution or
- @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain}
- Instructions on how to use it are at the top of the file.
- 
-@ifnottex
-@node [6.4], [6.5], [6.3], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.4: 
-
- How to get rid of old unwanted mail?
- 
-
-Answer: 
-
- You can of course just mark the mail you don't need
- anymore by saying @samp{#} with point
- over the mail and then say @samp{B DEL}
- to get rid of them forever. You could also instead of
- actually deleting them, send them to a junk-group by
- saying @samp{B m nnml:trash-bin} which
- you clear from time to time, but both are not the intended
- way in Gnus.
- 
-
- In Gnus, we let mail expire like news expires on a news
- server. That means you tell Gnus the message is
- expirable (you tell Gnus "I don't need this mail
- anymore") by saying @samp{E} with point
- over the mail in summary buffer. Now when you leave the
- group, Gnus looks at all messages which you marked as
- expirable before and if they are old enough (default is
- older than a week) they are deleted. 
- 
-@ifnottex
-@node [6.5], [6.6], [6.4], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.5: 
-
- I want that all read messages are expired (at least in
- some groups). How to do it?
- 
-
-Answer: 
-
- If you want all read messages to be expired (e.g. in
- mailing lists where there's an online archive), you've
- got two choices: auto-expire and
- total-expire. Auto-expire means, that every article
- which has no marks set and is selected for reading is
- marked as expirable, Gnus hits @samp{E}
- for you every time you read a message. Total-expire
- follows a slightly different approach, here all article
- where the read mark is set are expirable.
- 
-
- To activate auto-expire, include auto-expire in the
- Group parameters for the group. (Hit @samp{G
- c} in summary buffer with point over the
- group to change group parameters). For total-expire add
- total-expire to the group-parameters.
- 
-
- Which method you choose is merely a matter of taste:
- Auto-expire is faster, but it doesn't play together with
- Adaptive Scoring, so if you want to use this feature,
- you should use total-expire.
- 
-
- If you want a message to be excluded from expiration in
- a group where total or auto expire is active, set either
- tick (hit @samp{u}) or dormant mark (hit
- @samp{u}), when you use auto-expire, you
- can also set the read mark (hit
- @samp{d}).
- 
-@ifnottex
-@node [6.6],  , [6.5], FAQ 6 - Old messages
-@end ifnottex
-@subsubheading Question 6.6: 
-
- I don't want expiration to delete my mails but to move them
- to another group.
- 
-
-Answer: 
-
- Say something like this in ~/.gnus:
- 
+
+then you only have to set either the tick or the dormant
+mark for articles you want to keep, setting the read
+mark will remove them from cache.
+
+@node [6.3]
+@subsubheading Question 6.3
+
+How to search for a specific message?
+
+@subsubheading Answer
+
+There are several ways for this, too. For a posting from
+a Usenet group the easiest solution is probably to ask
+@uref{http://groups.google.com, groups.google.com},
+if you found the posting there, tell Google to display
+the raw message, look for the message-id, and say
+@samp{M-^ the@@message.id RET} in a
+summary buffer.
+Since Gnus 5.10 there's also a Gnus interface for
+groups.google.com which you can call with
+@samp{G W}) in group buffer.
+
+Another idea which works for both mail and news groups
+is to enter the group where the message you are
+searching is and use the standard Emacs search
+@samp{C-s}, it's smart enough to look at
+articles in collapsed threads, too. If you want to
+search bodies, too try @samp{M-s}
+instead. Further on there are the
+gnus-summary-limit-to-foo functions, which can help you,
+too.
+
+Of course you can also use grep to search through your
+local mail, but this is both slow for big archives and
+inconvenient since you are not displaying the found mail
+in Gnus. Here comes nnir into action. Nnir is a front end
+to search engines like swish-e or swish++ and
+others. You index your mail with one of those search
+engines and with the help of nnir you can search trough
+the indexed mail and generate a temporary group with all
+messages which met your search criteria. If this sound
+cool to you get nnir.el from
+@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/}
+or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}.
+Instructions on how to use it are at the top of the file.
+
+@node [6.4]
+@subsubheading Question 6.4
+
+How to get rid of old unwanted mail?
+
+@subsubheading Answer
+
+You can of course just mark the mail you don't need
+anymore by saying @samp{#} with point
+over the mail and then say @samp{B DEL}
+to get rid of them forever. You could also instead of
+actually deleting them, send them to a junk-group by
+saying @samp{B m nnml:trash-bin} which
+you clear from time to time, but both are not the intended
+way in Gnus.
+
+In Gnus, we let mail expire like news expires on a news
+server. That means you tell Gnus the message is
+expirable (you tell Gnus "I don't need this mail
+anymore") by saying @samp{E} with point
+over the mail in summary buffer. Now when you leave the
+group, Gnus looks at all messages which you marked as
+expirable before and if they are old enough (default is
+older than a week) they are deleted.
+
+@node [6.5]
+@subsubheading Question 6.5
+
+I want that all read messages are expired (at least in
+some groups). How to do it?
+
+@subsubheading Answer
+
+If you want all read messages to be expired (e.g. in
+mailing lists where there's an online archive), you've
+got two choices: auto-expire and
+total-expire. Auto-expire means, that every article
+which has no marks set and is selected for reading is
+marked as expirable, Gnus hits @samp{E}
+for you every time you read a message. Total-expire
+follows a slightly different approach, here all article
+where the read mark is set are expirable.
+
+To activate auto-expire, include auto-expire in the
+Group parameters for the group. (Hit @samp{G
+c} in summary buffer with point over the
+group to change group parameters). For total-expire add
+total-expire to the group-parameters.
+
+Which method you choose is merely a matter of taste:
+Auto-expire is faster, but it doesn't play together with
+Adaptive Scoring, so if you want to use this feature,
+you should use total-expire.
+
+If you want a message to be excluded from expiration in
+a group where total or auto expire is active, set either
+tick (hit @samp{u}) or dormant mark (hit
+@samp{u}), when you use auto-expire, you
+can also set the read mark (hit
+@samp{d}).
+
+@node [6.6]
+@subsubheading Question 6.6
+
+I don't want expiration to delete my mails but to move them
+to another group.
+
+@subsubheading Answer
+
+Say something like this in ~/.gnus.el:
 
 @example
 (setq nnmail-expiry-target "nnml:expired")
 @end example
-
 @noindent
- (If you want to change the value of nnmail-expiry-target
- on a per group basis see the question "How can I disable
- threading in some (e.g. mail-) groups, or set other
- variables specific for some groups?")
- 
-
-@ifnottex
-@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions
-@end ifnottex
+
+(If you want to change the value of nnmail-expiry-target
+on a per group basis see the question "How can I disable
+threading in some (e.g. mail-) groups, or set other
+variables specific for some groups?")
+
+@node FAQ 7 - Gnus in a dial-up environment
 @subsection Gnus in a dial-up environment
 
 @menu
-* [7.1]::   I don't have a permanent connection to the net, how can I
-            minimize the time I've got to be connected? 
-* [7.2]::   So what was this thing about the Agent? 
-* [7.3]::   I want to store article bodies on disk, too. How to do it? 
-* [7.4]::   How to tell Gnus not to try to send mails / postings while
-            I'm offline? 
+* [7.1]::    I don't have a permanent connection to the net, how can I
+             minimize the time I've got to be connected?
+* [7.2]::    So what was this thing about the Agent?
+* [7.3]::    I want to store article bodies on disk, too. How to do it?
+* [7.4]::    How to tell Gnus not to try to send mails / postings while
+             I'm offline?
 @end menu
 
-
-@ifnottex
-@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.1: 
-
- I don't have a permanent connection to the net, how can
- I minimize the time I've got to be connected?
- 
-
-Answer: 
-
- You've got basically two options: Either you use the
- Gnus Agent (see below) for this, or you can install
- programs which fetch your news and mail to your local
- disk and Gnus reads the stuff from your local
- machine.
- 
-
- If you want to follow the second approach, you need a
- program which fetches news and offers them to Gnus, a
- program which does the same for mail and a program which
- receives the mail you write from Gnus and sends them
- when you're online.
- 
-
-Let's talk about Unix systems first: For the news part, the easiest
-solution is a small nntp server like
-@uref{http://www.leafnode.org/,Leafnode} or
-@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also
-install a full featured news server like
-@uref{http://www.isc.org/products/INN/,inn}.
-
-Then you want to fetch your Mail, popular choices are
-@itemize @bullet
-@item
-@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and
-@item
-@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}.
-@end itemize
-You should tell those to write the mail to your disk and Gnus to read
-it from there. Last but not least the mail sending part: This can be
-done with every MTA like @uref{http://www.sendmail.org/,sendmail},
-@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim}
-or @uref{http://www.qmail.org/,qmail}.
- 
-
- On windows boxes I'd vote for 
- @uref{http://www.tglsoft.de/,Hamster}, 
- it's a small freeware, open-source program which fetches
- your mail and news from remote servers and offers them
- to Gnus (or any other mail and/or news reader) via nntp
- respectively POP3 or IMAP. It also includes a smtp
- server for receiving mails from Gnus.
- 
-@ifnottex
-@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.2: 
-
- So what was this thing about the Agent?
- 
-
-Answer: 
-
- The Gnus agent is part of Gnus, it allows you to fetch
- mail and news and store them on disk for reading them
- later when you're offline. It kind of mimics offline
- newsreaders like e.g. Forte Agent. If you want to use
- the Agent place the following in ~/.gnus if you are
- still using 5.8.8 or 5.9 (it's the default since 5.10):
- 
+@node [7.1]
+@subsubheading Question 7.1
+
+I don't have a permanent connection to the net, how can
+I minimize the time I've got to be connected?
+
+@subsubheading Answer
+
+You've got basically two options: Either you use the
+Gnus Agent (see below) for this, or you can install
+programs which fetch your news and mail to your local
+disk and Gnus reads the stuff from your local
+machine.
+
+If you want to follow the second approach, you need a
+program which fetches news and offers them to Gnus, a
+program which does the same for mail and a program which
+receives the mail you write from Gnus and sends them
+when you're online.
+
+Let's talk about Unix systems first: For the news part,
+the easiest solution is a small nntp server like 
+@uref{http://www.leafnode.org/, Leafnode} or
+@uref{http://infa.abo.fi/~patrik/sn/, sn},
+of course you can also install a full featured news
+server like 
+@uref{http://www.isc.org/products/INN/, inn}. 
+Then you want to fetch your Mail, popular choices
+are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail}
+and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}.
+You should tell those to write the mail to your disk and
+Gnus to read it from there. Last but not least the mail
+sending part: This can be done with every MTA like
+@uref{http://www.sendmail.org/, sendmail},
+@uref{http://www.qmail.org/, postfix},
+@uref{http://www.exim.org/, exim} or
+@uref{http://www.qmail.org/, qmail}.
+
+On windows boxes I'd vote for 
+@uref{http://www.tglsoft.de/, Hamster}, 
+it's a small freeware, open-source program which fetches
+your mail and news from remote servers and offers them
+to Gnus (or any other mail and/or news reader) via nntp
+respectively POP3 or IMAP. It also includes a smtp
+server for receiving mails from Gnus.
+
+@node [7.2]
+@subsubheading Question 7.2
+
+So what was this thing about the Agent?
+
+@subsubheading Answer
+
+The Gnus agent is part of Gnus, it allows you to fetch
+mail and news and store them on disk for reading them
+later when you're offline. It kind of mimics offline
+newsreaders like e.g. Forte Agent. If you want to use
+the Agent place the following in ~/.gnus.el if you are
+still using 5.8.8 or 5.9 (it's the default since 5.10):
 
 @example
 (setq gnus-agent t)
 @end example
- 
-
- Now you've got to select the servers whose groups can be
- stored locally. To do this, open the server buffer
- (that is press @samp{^} while in the
- group buffer). Now select a server by moving point to
- the line naming that server. Finally, agentize the
- server by typing @samp{J a}. If you
- make a mistake, or change your mind, you can undo this
- action by typing @samp{J r}. When
- you're done, type 'q' to return to the group buffer.
- Now the next time you enter a group on a agentized
- server, the headers will be stored on disk and read from
- there the next time you enter the group.
- 
-@ifnottex
-@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.3: 
-
- I want to store article bodies on disk, too. How to do it?
- 
-
-Answer: 
-
- You can tell the agent to automatically fetch the bodies
- of articles which fulfill certain predicates, this is
- done in a special buffer which can be reached by
- saying @samp{J c} in group
- buffer. Please refer to the documentation for
- information which predicates are possible and how
- exactly to do it. 
- 
-
- Further on you can tell the agent manually which
- articles to store on disk. There are two ways to do
- this: Number one: In the summary buffer, process mark a
- set of articles that shall be stored in the agent by
- saying @samp{#} with point over the
- article and then type @samp{J s}. The
- other possibility is to set, again in the summary
- buffer, downloadable (%) marks for the articles you
- want by typing @samp{@@} with point over
- the article and then typing @samp{J u}.
- What's the difference? Well, process marks are erased as
- soon as you exit the summary buffer while downloadable
- marks are permanent. You can actually set downloadable
- marks in several groups then use fetch session ('J s' in
- the GROUP buffer) to fetch all of those articles. The
- only downside is that fetch session also fetches all of
- the headers for every selected group on an agentized
- server. Depending on the volume of headers, the initial
- fetch session could take hours.
- 
-@ifnottex
-@node [7.4],  , [7.3], FAQ 7 - Gnus in a dial-up environment
-@end ifnottex
-@subsubheading Question 7.4: 
-
- How to tell Gnus not to try to send mails / postings
- while I'm offline?
- 
-
-Answer: 
-
- All you've got to do is to tell Gnus when you are online
- (plugged) and when you are offline (unplugged), the rest
- works automatically. You can toggle plugged/unplugged
- state by saying @samp{J j} in group
- buffer. To start Gnus unplugged say @samp{M-x
- gnus-unplugged} instead of
- @samp{M-x gnus}. Note that for this to
- work, the agent must be active.
- 
-
-@ifnottex
-@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions
-@end ifnottex
+@noindent
+
+Now you've got to select the servers whose groups can be
+stored locally.  To do this, open the server buffer
+(that is press @samp{^} while in the
+group buffer).  Now select a server by moving point to
+the line naming that server.  Finally, agentize the
+server by typing @samp{J a}.  If you
+make a mistake, or change your mind, you can undo this
+action by typing @samp{J r}.  When
+you're done, type 'q' to return to the group buffer.
+Now the next time you enter a group on a agentized
+server, the headers will be stored on disk and read from
+there the next time you enter the group.
+
+@node [7.3]
+@subsubheading Question 7.3
+
+I want to store article bodies on disk, too. How to do it?
+
+@subsubheading Answer
+
+You can tell the agent to automatically fetch the bodies
+of articles which fulfill certain predicates, this is
+done in a special buffer which can be reached by
+saying @samp{J c} in group
+buffer. Please refer to the documentation for
+information which predicates are possible and how
+exactly to do it.
+
+Further on you can tell the agent manually which
+articles to store on disk. There are two ways to do
+this: Number one: In the summary buffer, process mark a
+set of articles that shall be stored in the agent by
+saying @samp{#} with point over the
+article and then type @samp{J s}. The
+other possibility is to set, again in the summary
+buffer, downloadable (%) marks for the articles you
+want by typing @samp{@@} with point over
+the article and then typing @samp{J u}.
+What's the difference? Well, process marks are erased as
+soon as you exit the summary buffer while downloadable
+marks are permanent.  You can actually set downloadable
+marks in several groups then use fetch session ('J s' in
+the GROUP buffer) to fetch all of those articles.  The
+only downside is that fetch session also fetches all of
+the headers for every selected group on an agentized
+server.  Depending on the volume of headers, the initial
+fetch session could take hours.
+
+@node [7.4]
+@subsubheading Question 7.4
+
+How to tell Gnus not to try to send mails / postings
+while I'm offline?
+
+@subsubheading Answer
+
+All you've got to do is to tell Gnus when you are online
+(plugged) and when you are offline (unplugged), the rest
+works automatically. You can toggle plugged/unplugged
+state by saying @samp{J j} in group
+buffer. To start Gnus unplugged say @samp{M-x
+gnus-unplugged} instead of
+@samp{M-x gnus}. Note that for this to
+work, the agent must be active.
+
+@node FAQ 8 - Getting help
 @subsection Getting help
 
 @menu
-* [8.1]::   How to find information and help inside Emacs? 
-* [8.2]::   I can't find anything in the Gnus manual about X
-            (e.g. attachments, PGP, MIME...), is it not documented? 
-* [8.3]::   Which websites should I know? 
-* [8.4]::   Which mailing lists and newsgroups are there? 
-* [8.5]::   Where to report bugs? 
-* [8.6]::   I need real-time help, where to find it? 
+* [8.1]::    How to find information and help inside Emacs?
+* [8.2]::    I can't find anything in the Gnus manual about X (e.g.
+             attachments, PGP, MIME...), is it not documented?
+* [8.3]::    Which websites should I know?
+* [8.4]::    Which mailing lists and newsgroups are there?
+* [8.5]::    Where to report bugs?
+* [8.6]::    I need real-time help, where to find it?
 @end menu
 
-@ifnottex
-@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.1: 
-
- How to find information and help inside Emacs?
- 
-
-Answer: 
-
- The first stop should be the Gnus manual (Say
- @samp{C-h i d m Gnus RET} to start the
- Gnus manual, then walk through the menus or do a
- full-text search with @samp{s}). Then
- there are the general Emacs help commands starting with
- C-h, type @samp{C-h ? ?} to get a list
- of all available help commands and their meaning. Finally
- @samp{M-x apropos-command} lets you
- search through all available functions and @samp{M-x
- apropos} searches the bound variables.
- 
-@ifnottex
-@node [8.2], [8.3], [8.1], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.2: 
-
- I can't find anything in the Gnus manual about X
- (e.g. attachments, PGP, MIME...), is it not documented?
- 
-
-Answer: 
-
- There's not only the Gnus manual but also the manuals
- for message, emacs-mime, sieve and pgg. Those packages
- are distributed with Gnus and used by Gnus but aren't
- really part of core Gnus, so they are documented in
- different info files, you should have a look in those
- manuals, too.
- 
-@ifnottex
-@node [8.3], [8.4], [8.2], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.3: 
-
- Which websites should I know?
- 
-
-Answer: 
-
- The two most important ones are the
- @uref{http://www.gnus.org,official Gnus website}.
- and it's sister site 
- @uref{http://my.gnus.org,my.gnus.org (MGO)},
- hosting an archive of lisp snippets, howtos, a (not
- really finished) tutorial and this FAQ.
- 
-
- Tell me about other sites which are interesting.
- 
-@ifnottex
-@node [8.4], [8.5], [8.3], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.4: 
-
- Which mailing lists and newsgroups are there?
- 
-
-Answer: 
-
- There's the newsgroup gnu.emacs.gnus (pull it from
- e.g. news.gnus.org) which deals with general questions
- and the ding mailing list (ding@@gnus.org) dealing with
- development of Gnus. You can read the ding list via
- NNTP, too under the name gnus.ding from news.gnus.org.
- 
-
- If you want to stay in the big8,
- news.software.newssreaders is also read by some Gnus
- users (but chances for qualified help are much better in
- the above groups) and if you speak German, there's
- de.comm.software.gnus.
- 
-@ifnottex
-@node [8.5], [8.6], [8.4], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.5: 
-
- Where to report bugs?
- 
-
-Answer: 
-
-Say @samp{M-x gnus-bug}, this will start a message to the
-@email{bugs@@gnus.org,gnus bug mailing list} including information
-about your environment which make it easier to help you.
- 
-@ifnottex
-@node [8.6],  , [8.5], FAQ 8 - Getting help
-@end ifnottex
-@subsubheading Question 8.6: 
-
- I need real-time help, where to find it?
- 
-
-Answer: 
-
- Point your IRC client to irc.my.gnus.org channel
- #mygnus. Don't be afraid if people there speak German,
- they are willing and capable of switching to
- English when people from outside Germany enter.
- 
-
-@ifnottex
-@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions
-@end ifnottex
+@node [8.1]
+@subsubheading Question 8.1
+
+How to find information and help inside Emacs?
+
+@subsubheading Answer
+
+The first stop should be the Gnus manual (Say
+@samp{C-h i d m Gnus RET} to start the
+Gnus manual, then walk through the menus or do a
+full-text search with @samp{s}). Then
+there are the general Emacs help commands starting with
+C-h, type @samp{C-h ? ?} to get a list
+of all available help commands and their meaning. Finally
+@samp{M-x apropos-command} lets you
+search through all available functions and @samp{M-x
+apropos} searches the bound variables.
+
+@node [8.2]
+@subsubheading Question 8.2
+
+I can't find anything in the Gnus manual about X
+(e.g. attachments, PGP, MIME...), is it not documented?
+
+@subsubheading Answer
+
+There's not only the Gnus manual but also the manuals
+for message, emacs-mime, sieve and pgg. Those packages
+are distributed with Gnus and used by Gnus but aren't
+really part of core Gnus, so they are documented in
+different info files, you should have a look in those
+manuals, too.
+
+@node [8.3]
+@subsubheading Question 8.3
+
+Which websites should I know?
+
+@subsubheading Answer
+
+The two most important ones are the
+@uref{http://www.gnus.org, official Gnus website}.
+and it's sister site 
+@uref{http://my.gnus.org, my.gnus.org (MGO)},
+hosting an archive of lisp snippets, howtos, a (not
+really finished) tutorial and this FAQ.
+
+Tell me about other sites which are interesting.
+
+@node [8.4]
+@subsubheading Question 8.4
+
+Which mailing lists and newsgroups are there?
+
+@subsubheading Answer
+
+There's the newsgroup gnu.emacs.gnus (pull it from
+e.g. news.gnus.org) which deals with general questions and the
+ding mailing list (ding@@gnus.org) dealing with development of
+Gnus. You can read the ding list via NNTP, too under the name
+gmane.emacs.gnus.general from news.gmane.org.
+
+If you want to stay in the big8,
+news.software.newssreaders is also read by some Gnus
+users (but chances for qualified help are much better in
+the above groups) and if you speak German, there's
+de.comm.software.gnus.
+
+@node [8.5]
+@subsubheading Question 8.5
+
+Where to report bugs?
+
+@subsubheading Answer
+
+Say @samp{M-x gnus-bug}, this will start
+a message to the 
+@email{bugs@@gnus.org, gnus bug mailing list}
+including information about your environment which make
+it easier to help you.
+
+@node [8.6]
+@subsubheading Question 8.6
+
+I need real-time help, where to find it?
+
+@subsubheading Answer
+
+Point your IRC client to irc.my.gnus.org channel
+#mygnus. Don't be afraid if people there speak German,
+they are willing and capable of switching to
+English when people from outside Germany enter.
+
+@node FAQ 9 - Tuning Gnus
 @subsection Tuning Gnus
 
 @menu
-* [9.1]::   Starting Gnus is really slow, how to speed it up? 
-* [9.2]::   How to speed up the process of entering a group? 
-* [9.3]::   Sending mail becomes slower and slower, what's up? 
+* [9.1]::    Starting Gnus is really slow, how to speed it up?
+* [9.2]::    How to speed up the process of entering a group?
+* [9.3]::    Sending mail becomes slower and slower, what's up?
 @end menu
 
-@ifnottex
-@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.1: 
-
- Starting Gnus is really slow, how to speed it up?
- 
-
-Answer: 
-
- The reason for this could be the way Gnus reads it's
- active file, see the node "The Active File" in the Gnus
- manual for things you might try to speed the process up.
- An other idea would be to byte compile your ~/.gnus (say
- @samp{M-x byte-compile-file RET ~/.gnus
- RET} to do it). Finally, if you have require
- statements in your .gnus, you could replace them with
- eval-after-load, which loads the stuff not at startup
- time, but when it's needed. Say you've got this in your
- ~/.gnus:
- 
+@node [9.1]
+@subsubheading Question 9.1
+
+Starting Gnus is really slow, how to speed it up?
+
+@subsubheading Answer
+
+The reason for this could be the way Gnus reads it's
+active file, see the node "The Active File" in the Gnus
+manual for things you might try to speed the process up.
+An other idea would be to byte compile your ~/.gnus.el (say
+@samp{M-x byte-compile-file RET ~/.gnus.el
+RET} to do it). Finally, if you have require
+statements in your .gnus, you could replace them with
+eval-after-load, which loads the stuff not at startup
+time, but when it's needed. Say you've got this in your
+~/.gnus.el:
 
 @example
 (require 'message)
 (add-to-list 'message-syntax-checks '(sender . disabled))
 @end example
-
 @noindent
- then as soon as you start Gnus, message.el is loaded. If
- you replace it with
- 
+
+then as soon as you start Gnus, message.el is loaded. If
+you replace it with
 
 @example
 (eval-after-load "message"
       '(add-to-list 'message-syntax-checks '(sender . disabled)))
 @end example
-
 @noindent
- it's loaded when it's needed.
- 
-@ifnottex
-@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.2: 
-
- How to speed up the process of entering a group?
- 
-
-Answer: 
-
- A speed killer is setting the variable
- gnus-fetch-old-headers to anything different from nil,
- so don't do this if speed is an issue. To speed up
- building of summary say
- 
+
+it's loaded when it's needed.
+
+@node [9.2]
+@subsubheading Question 9.2
+
+How to speed up the process of entering a group?
+
+@subsubheading Answer
+
+A speed killer is setting the variable
+gnus-fetch-old-headers to anything different from nil,
+so don't do this if speed is an issue. To speed up
+building of summary say
 
 @example
 (gnus-compile)
 @end example
-
 @noindent
- at the bottom of your ~/.gnus, this will make gnus
- byte-compile things like
- gnus-summary-line-format. 
- then you could increase the value of gc-cons-threshold
- by saying something like
- 
+
+at the bottom of your ~/.gnus.el, this will make gnus
+byte-compile things like
+gnus-summary-line-format. 
+then you could increase the value of gc-cons-threshold
+by saying something like
 
 @example
 (setq gc-cons-threshold 3500000)
 @end example
-
 @noindent
- in ~/.emacs. If you don't care about width of CJK
- characters or use Gnus 5.10 or younger together with a
- recent GNU Emacs, you should say
- 
+
+in ~/.emacs. If you don't care about width of CJK
+characters or use Gnus 5.10 or younger together with a
+recent GNU Emacs, you should say
 
 @example
-(setq gnus-use-correct-string-widths nil) 
+(setq gnus-use-correct-string-widths nil)
 @end example
- 
-
 @noindent
- in ~/.gnus (thanks to Jesper harder for the last
- two suggestions). Finally if you are still using 5.8.8
- or 5.9 and experience speed problems with summary
- buffer generation, you definitely should update to
- 5.10 since there quite some work on improving it has
- been done.
  
-@ifnottex
-@node [9.3],  , [9.2], FAQ 9 - Tuning Gnus
-@end ifnottex
-@subsubheading Question 9.3: 
-
- Sending mail becomes slower and slower, what's up?
- 
-
-Answer: 
-
- The reason could be that you told Gnus to archive the
- messages you wrote by setting
- gnus-message-archive-group. Try to use a nnml group
- instead of an archive group, this should bring you back
- to normal speed.
- 
-
-@ifnottex
-@node FAQ - Glossary,  , FAQ 9 - Tuning Gnus, Frequently Asked Questions
-@end ifnottex
+in ~/.gnus.el (thanks to Jesper harder for the last
+two suggestions). Finally if you are still using 5.8.8
+or 5.9 and experience speed problems with summary
+buffer generation, you definitely should update to
+5.10 since there quite some work on improving it has
+been done.
+
+@node [9.3]
+@subsubheading Question 9.3
+
+Sending mail becomes slower and slower, what's up?
+
+@subsubheading Answer
+
+The reason could be that you told Gnus to archive the
+messages you wrote by setting
+gnus-message-archive-group. Try to use a nnml group
+instead of an archive group, this should bring you back
+to normal speed.
+
+@node FAQ - Glossary
 @subsection Glossary
 
 @table @dfn
 
-@item ~/.gnus
- When the term ~/.gnus is used it just means your Gnus
- configuration file. You might as well call it ~/.gnus.el or
- specify another name.
- 
+@item ~/.gnus.el
+When the term ~/.gnus.el is used it just means your Gnus
+configuration file. You might as well call it ~/.gnus or
+specify another name.
 
 @item Back End
- In Gnus terminology a back end is a virtual server, a layer
- between core Gnus and the real NNTP-, POP3-, IMAP- or
- whatever-server which offers Gnus a standardized interface
- to functions like "get message", "get Headers" etc.
- 
+In Gnus terminology a back end is a virtual server, a layer
+between core Gnus and the real NNTP-, POP3-, IMAP- or
+whatever-server which offers Gnus a standardized interface
+to functions like "get message", "get Headers" etc.
 
 @item Emacs
- When the term Emacs is used in this FAQ, it means either GNU
- Emacs or XEmacs.
- 
+When the term Emacs is used in this FAQ, it means either GNU
+Emacs or XEmacs.
 
 @item Message
- In this FAQ message means a either a mail or a posting to a
- Usenet Newsgroup or to some other fancy back end, no matter
- of which kind it is.
- 
+In this FAQ message means a either a mail or a posting to a
+Usenet Newsgroup or to some other fancy back end, no matter
+of which kind it is.
 
 @item MUA
- MUA is an acronym for Mail User Agent, it's the program you
- use to read and write e-mails.
- 
+MUA is an acronym for Mail User Agent, it's the program you
+use to read and write e-mails.
 
 @item NUA
- NUA is an acronym for News User Agent, it's the program you
- use to read and write Usenet news.
- 
+NUA is an acronym for News User Agent, it's the program you
+use to read and write Usenet news.
+
 @end table
 
-@c @bye
-
 @ignore
-   arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8
+arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8
 @end ignore
--- a/man/gnus.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/gnus.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/help.texi	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/idlwave.texi	Thu Mar 31 09:58:14 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/message.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/message.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -8,7 +8,7 @@
 @copying
 This file documents Message, the Emacs message composition mode.
 
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 
 Free Software Foundation, Inc.
 
 @quotation
--- a/man/misc.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/misc.texi	Thu Mar 31 09:58:14 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 @key{RET}
+server-name @key{RET} foo @key{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	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/mule.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -428,6 +428,9 @@
 because it stops waiting for more characters to combine, and starts
 searching for what you have already entered.
 
+  To find out how to input the character after point using the current
+input method, type @kbd{C-u C-x =}.  @xref{Position Info}.
+
 @vindex input-method-verbose-flag
 @vindex input-method-highlight-flag
   The variables @code{input-method-highlight-flag} and
@@ -928,6 +931,9 @@
 @item C-x @key{RET} X @var{coding} @key{RET}
 Use coding system @var{coding} for transferring @emph{one}
 selection---the next one---to or from the window system.
+
+@item M-x recode-region
+Convert the region from a previous coding system to a new one.
 @end table
 
 @kindex C-x RET f
@@ -1056,6 +1062,12 @@
   The default for translation of process input and output depends on the
 current language environment.
 
+@findex recode-region
+  If a piece of text has already been inserted into a buffer using the
+wrong coding system, you can decode it again using @kbd{M-x
+recode-region}.  This prompts you for the old coding system and the
+desired coding system, and acts on the text in the region.
+
 @vindex file-name-coding-system
 @cindex file names with non-@acronym{ASCII} characters
 @findex set-file-name-coding-system
@@ -1084,6 +1096,12 @@
 name, or it may get an error.  If such a problem happens, use @kbd{C-x
 C-w} to specify a new file name for that buffer.
 
+@findex recode-file-name
+  If a mistake occurs when encoding a file name, use the command
+command @kbd{M-x recode-file-name} to change the file name's coding
+system.  This prompts for an existing file name, its old coding
+system, and the coding system to which you wish to convert.
+
 @vindex locale-coding-system
 @cindex decoding non-@acronym{ASCII} keyboard input on X
   The variable @code{locale-coding-system} specifies a coding system
@@ -1333,62 +1351,52 @@
 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
+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.
+
+@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
+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}.
-
-@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.
+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}.
 
 @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.
+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.
 
 @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.
+library is loaded, the @key{ALT} modifier key, if the keyboard has
+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 the keyboard has keys for the Latin-1 ``dead accent characters,''
+they too are defined to compose with the following character, once
+@code{iso-transl} is loaded.
 
-@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}.
+Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations.
 @end itemize
 
 @node Charsets
--- a/man/org.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/org.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -3,8 +3,8 @@
 @setfilename ../info/org
 @settitle Org Mode Manual
 
-@set VERSION 3.04
-@set DATE December 2004
+@set VERSION 3.05
+@set DATE April 2005
 
 @dircategory Emacs
 @direntry
@@ -34,7 +34,7 @@
 @copying
 This manual is for Org-mode (version @value{VERSION}).
 
-Copyright @copyright{} 2004 Free Software Foundation
+Copyright @copyright{} 2004, 2005 Free Software Foundation
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -184,7 +184,8 @@
 large files well structured.  Visibility cycling and structure editing
 help to work with the tree.  Tables are easily created with a built-in
 table editor.  Org-mode supports ToDo items, deadlines, time stamps,
-and scheduling.  It dynamically compiles entries into an agenda.
+and scheduling.  It dynamically compiles entries into an agenda that
+utilizes and smoothly integrates much of the Emacs calendar and diary.
 Plain text URL-like links connect to websites, emails, usenet
 messages, BBDB entries, and any files related to the projects.  For
 printing and sharing of notes, an Org-mode file can be exported as a
@@ -203,15 +204,14 @@
 @r{@bullet{} as a full agenda and planner with deadlines and work scheduling}
 @end example
 
-The Org-mode table editor can be used integrated into any major mode
-by activating the minor Ortbl-mode.
+The Org-mode table editor can be integrated into any major mode by
+activating the minor Orgtbl-mode.
 
 There is a website for Org-mode which provides links to the newest
 version of Org-mode, as well as additional information, screen shots
 and example files.  This page is located at
 @uref{http://www.astro.uva.nl/~dominik/Tools/org/}.
 
-
 @page
 
 @node Installation,  , Summary, Introduction
@@ -352,6 +352,18 @@
 Show all.
 @end table
 
+When Emacs firsts visits a Org-mode file, the global state is set to
+OVERVIEW, i.e. only the top level headlines are visible.  This can be
+configured through the variable @code{org-startup-folded}, or on a
+per-file basis by adding one of the following lines anywhere in the
+buffer:
+
+@example
+#+STARTUP: fold
+#+STARTUP: nofold
+@end example
+
+
 @node Motion, Structure editing, Visibility cycling, Document Structure
 @section Motion
 @cindex motion, between headlines
@@ -473,6 +485,17 @@
 Other commands are using this feature as well.  For example @kbd{C-c
 C-v} creates a sparse TODO tree (@pxref{TODO basics}).
 
+@kindex C-c C-x v
+@cindex printing sparse trees
+@cindex visible text, printing
+To print a sparse tree, you can use the Emacs command
+@code{ps-print-buffer-with-faces} which does not print invisible parts
+of the document @footnote{this does not work under XEmacs, because
+XEmacs uses selective display for outlining, not text properties}.
+Or you can use the command @kbd{C-c C-x v} to copy the visible part of
+the document to another file (extension @file{.txt}) which then can be
+printed in any desired way.
+
 @node TODO items, Tables, Document Structure, Top
 @chapter TODO items
 @cindex TODO items
@@ -611,7 +634,7 @@
 @end lisp
 
 In this case, different keywords do not indicate a sequence, but
-rather different levels.  This changes the behavior of the command
+rather different types.  This changes the behavior of the command
 @kbd{C-c C-t} slightly.  When used several times in succession, it
 will still cycle through all names.  But when when you return to the
 item after some time and execute @kbd{C-c C-t} again, it will switch
@@ -745,11 +768,6 @@
 necessary.  At the beginning or end of a line, @key{RET} still does
 NEWLINE, so it can be used to split a table.
 
-@kindex S-@key{RET}         
-@item S-@key{RET}         
-Copy from first non-empty
- field above current field.
-
 @tsubheading{Column and row editing}
 @kindex M-@key{left}
 @kindex M-@key{right}
@@ -796,7 +814,7 @@
 blank all fields in the rectangle.
 @kindex C-c C-h C-y
 @item C-c C-h C-y
-Paste a rectangluar region into a table.
+Paste a rectangular region into a table.
 The upper right corner ends up in the current field.  All involved fields
 will be overwritten.  If the rectangle does not fit into the present table,
 the table is enlarged as needed.  The process ignores horizontal separator
@@ -828,6 +846,14 @@
 the active region.  The result is displayed in the echo area and can
 be inserted with @kbd{C-y}.
 
+@kindex S-@key{RET}         
+@item S-@key{RET}         
+When current field is empty, copy from first non-empty field above.
+When not empty, copy current field down to next row and move cursor
+along with it.  Depending on the variable
+@code{org-table-copy-increment}, integer field values will be
+incremented during copy.
+
 @cindex formula, in tables
 @cindex calculations, in tables
 @kindex C-c =
@@ -1063,7 +1089,7 @@
 If not, a headline is constructed from the current date and some
 additional data.  If the variable @code{org-adapt-indentation} is
 non-nil, the entire text is also indented so that it starts in the
-same column as the headline (after the asterixes).
+same column as the headline (after the asterisks).
 
 @node Timestamps, Timeline and Agenda, Hyperlinks, Top
 @chapter Timestamps
@@ -1404,11 +1430,12 @@
 @node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda
 @section Commands in the agenda buffer
 
-Entries in the agenda buffer are linked back to the org file.  You are
-not allowed to edit the agenda buffer itself, but commands are provided
-to edit the org-files ``remotely'' from the agenda buffer.  In this
-way, all information is stored only once, and you don't risk that your
-agenda and note files diverge.
+Entries in the agenda buffer are linked back to the org file or diary
+file where they originate.  You are not allowed to edit the agenda
+buffer itself, but commands are provided to show and jump to the
+original entry location, and to edit the org-files ``remotely'' from
+the agenda buffer.  In this way, all information is stored only once,
+and you don't risk that your agenda and note files diverge.
 
 Some commands can be executed with mouse clicks on agenda lines.  For
 the other commands, the cursor needs to be in the desired line.  Most
@@ -1468,7 +1495,7 @@
 Display the following @code{org-agenda-ndays} days.  For example, if
 the display covers a week, switch to the following week.  With prefix
 arg, go forward that many times @code{org-agenda-ndays} days.  Not
-available in timlines.
+available in timelines.
 
 @kindex @key{left}
 @item @key{left}
@@ -1536,6 +1563,29 @@
 entry in the diary, just like @kbd{i d} etc. would do in the calendar.
 The date is taken from the cursor position.
 
+@tsubheading{Calendar commands}
+@kindex c
+@item c
+Open the Emacs calendar and move to the date at the agenda cursor.
+
+@kindex C
+@item C
+Convert the date at cursor into many other cultural and historic
+calendars.
+
+@kindex M
+@item M
+Show the phases of the moon for three month around current date.
+
+@kindex S
+@item S
+Show sunrise and sunset times.  The location must be set with calendar
+variables, see documentation of the Emacs calendar.
+
+@kindex H
+@item H
+Show holidays for three month around the cursor date.
+
 @tsubheading{Quit and Exit}
 @kindex q
 @item q
@@ -1564,8 +1614,9 @@
 the diary.
 
 The interaction between Org-mode and diary works both ways: You can
-list entries from the diary in the Org-mode agenda, or you can display
-entries from the org agenda in the Emacs diary.
+list entries from the diary in the Org-mode agenda, from which many
+calendar and diary commands are directly accessible.  Or you can
+display entries from the org agenda in the Emacs diary.
 
 @menu
 * Diary to agenda::             Agenda incorporates the diary
@@ -1584,7 +1635,15 @@
 @end lisp
 @noindent
 
-@noindent After that, everything will happen automatically.
+@noindent After that, everything will happen automatically.  All diary
+entries including holidays, anniversaries etc will be included in the
+agenda buffer created by Org-mode.  @key{SPC}, @key{TAB}, and
+@key{RET} can be used from the agenda buffer to jump to the diary
+file, in order to edit existing diary entries.  Also the @kbd{i}
+command to insert new entries for the current date works in the agenda
+buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to
+display Sunrise/Sunset times, show lunar phases and to convert to
+other calendars, respectively.
 
 @node Agenda to diary,  , Diary to agenda, Calendar/Diary integration
 @subsection Including the agenda into the diary
--- a/man/programs.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/programs.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -1,5 +1,6 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc.
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000,
+@c               2001, 2005  Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Programs, Building, Text, Top
 @chapter Editing Programs
@@ -80,17 +81,19 @@
 @cindex Shell-script mode
 @cindex Delphi mode
 @cindex PostScript mode
+@cindex Conf mode
+@cindex DNS mode
   The existing programming language major modes include Lisp, Scheme (a
 variant of Lisp) and the Scheme-based DSSSL expression language, Ada,
 ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed
 format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s
 companion for font creation), Modula2, Objective-C, Octave, Pascal,
-Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL.  There is
-also a major mode for makefiles, called Makefile mode.  An alternative
-mode for Perl is called CPerl mode.  Modes are available for the
-scripting languages of the common GNU and Unix shells, VMS DCL, and
+Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL.  An
+alternative mode for Perl is called CPerl mode.  Modes are available for
+the scripting languages of the common GNU and Unix shells, VMS DCL, and
 MS-DOS/MS-Windows @samp{BAT} files.  There are also major modes for
-editing various sorts of configuration files.
+editing makefiles, DNS master files, and various sorts of configuration
+files.
 
 @kindex DEL @r{(programming modes)}
 @findex c-electric-backspace
@@ -1801,11 +1804,11 @@
 @cindex Fortran mode
 @cindex mode, Fortran
 
-  Fortran mode provides special motion commands for Fortran statements and
-subprograms, and indentation commands that understand Fortran conventions
-of nesting, line numbers and continuation statements.  Fortran mode has
-its own Auto Fill mode that breaks long lines into proper Fortran
-continuation lines.
+  Fortran mode provides special motion commands for Fortran statements
+and subprograms, and indentation commands that understand Fortran
+conventions of nesting, line numbers and continuation statements.
+Fortran mode has support for Auto Fill mode that breaks long lines into
+proper Fortran continuation lines.
 
   Special commands for comments are provided because Fortran comments
 are unlike those of other languages.  Built-in abbrevs optionally save
@@ -1817,18 +1820,18 @@
 @cindex Fortran77 and Fortran90
 @findex f90-mode
 @findex fortran-mode
-  Fortran mode is meant for editing Fortran77 ``fixed format'' source
-code.  For editing the modern Fortran90 ``free format'' source code,
-use F90 mode (@code{f90-mode}).  Emacs normally uses Fortran mode for
-files with extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode
-for the extension @samp{.f90}.  GNU Fortran supports both kinds of
-format.
+  Fortran mode is meant for editing Fortran77 ``fixed format'' (and also
+``tab format'') source code.  For editing the modern Fortran90 or
+Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}).
+Emacs normally uses Fortran mode for files with extension @samp{.f},
+@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and
+@samp{.f95}.  GNU Fortran supports both kinds of format.
 
 @menu
 * Motion: Fortran Motion.	 Moving point by statements or subprograms.
 * Indent: Fortran Indent.	 Indentation commands for Fortran.
 * Comments: Fortran Comments.	 Inserting and aligning comments.
-* Autofill: Fortran Autofill.	 Auto fill minor mode for Fortran.
+* Autofill: Fortran Autofill.	 Auto fill support for Fortran.
 * Columns: Fortran Columns.	 Measuring columns for valid Fortran.
 * Abbrev: Fortran Abbrev.	 Built-in abbrevs for Fortran keywords.
 @end menu
@@ -1837,8 +1840,9 @@
 @subsection Motion Commands
 
   In addition to the normal commands for moving by and operating on
-``defuns'' (Fortran subprograms---functions and subroutines), Fortran
-mode provides special commands to move by statements.
+``defuns'' (Fortran subprograms---functions and subroutines, as well as
+modules for F90 mode), Fortran mode provides special commands to move by
+statements and other program units.
 
 @table @kbd
 @kindex C-c C-n @r{(Fortran mode)}
@@ -1873,21 +1877,24 @@
 (@code{f90-previous-block}).  This is like @code{f90-next-block}, but
 moves backwards.
 
-@kindex C-M-n @r{(F90 mode)}
+@kindex C-M-n @r{(Fortran mode)}
+@findex fortran-end-of-block
 @findex f90-end-of-block
 @item C-M-n
-Move to the end of the current code block (@code{f90-end-of-block}).
-This is for F90 mode only.  With a numeric agument, move forward that
-number of blocks.  This command checks for consistency of block types
-and labels (if present), but it does not check the outermost block
-since that may be incomplete.  The mark is set before moving point.
+Move to the end of the current code block
+(@code{fortran-end-of-block}/@code{f90-end-of-block}).  With a numeric
+agument, move forward that number of blocks.  The mark is set before
+moving point.  The F90 mode version of this command checks for
+consistency of block types and labels (if present), but it does not
+check the outermost block since that may be incomplete.
 
-@kindex C-M-p @r{(F90 mode)}
+@kindex C-M-p @r{(Fortran mode)}
+@findex fortran-beginning-of-block
 @findex f90-beginning-of-block
 @item C-M-p
 Move to the start of the current code block
-(@code{f90-beginning-of-block}). This is like @code{f90-end-of-block},
-but moves backwards.
+(@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This
+is like @code{fortran-end-of-block}, but moves backwards.
 @end table
 
 @node Fortran Indent
@@ -1896,7 +1903,7 @@
   Special commands and features are needed for indenting Fortran code in
 order to make sure various syntactic entities (line numbers, comment line
 indicators and continuation line flags) appear in the columns that are
-required for standard Fortran.
+required for standard, fixed (or tab) format Fortran.
 
 @menu
 * Commands: ForIndent Commands.  Commands for indenting and filling Fortran.
@@ -1911,7 +1918,7 @@
 
 @table @kbd
 @item C-M-j
-Break the current line and set up a continuation line
+Break the current line at point and set up a continuation line
 (@code{fortran-split-line}).
 @item M-^
 Join this line to the previous line (@code{fortran-join-line}).
@@ -1953,30 +1960,39 @@
 @cindex Fortran continuation lines
 
 @vindex fortran-continuation-string
-  Most modern Fortran compilers allow two ways of writing continuation
-lines.  If the first non-space character on a line is in column 5, then
-that line is a continuation of the previous line.  We call this
-@dfn{fixed format}.  (In GNU Emacs we always count columns from 0.)  The
-variable @code{fortran-continuation-string} specifies what character to
-put on column 5.  A line that starts with a tab character followed by
-any digit except @samp{0} is also a continuation line.  We call this
-style of continuation @dfn{tab format}.
+  Most Fortran77 compilers allow two ways of writing continuation lines.
+If the first non-space character on a line is in column 5, then that
+line is a continuation of the previous line.  We call this @dfn{fixed
+format}.  (In GNU Emacs we always count columns from 0; but note that
+the Fortran standard counts from 1.)  The variable
+@code{fortran-continuation-string} specifies what character to put in
+column 5.  A line that starts with a tab character followed by any digit
+except @samp{0} is also a continuation line.  We call this style of
+continuation @dfn{tab format}.  (Fortran90 introduced ``free format'',
+with another style of continuation lines).
 
 @vindex indent-tabs-mode @r{(Fortran mode)}
-  Fortran mode can make either style of continuation line, but you
-must specify which one you prefer.  The value of the variable
-@code{indent-tabs-mode} controls the choice: @code{nil} for fixed
-format, and non-@code{nil} for tab format.  You can tell which style
-is presently in effect by the presence or absence of the string
-@samp{Tab} in the mode line.
+@vindex fortran-analyze-depth
+@vindex fortran-tab-mode-default
+  Fortran mode can use either style of continuation line.  When you
+enter Fortran mode, it tries to deduce the proper continuation style
+automatically from the buffer contents.  It does this by scanning up to
+@code{fortran-analyze-depth} (default 100) lines from the start of the
+buffer.  The first line that begins with either a tab character or six
+spaces determines the choice.  If the scan fails (for example, if the
+buffer is new and therefore empty), the value of
+@code{fortran-tab-mode-default} (@code{nil} for fixed format, and
+non-@code{nil} for tab format) is used.  @samp{/t} in the mode line
+indicates tab format is selected.  Fortran mode sets the value of
+@code{indent-tabs-mode} accordingly (@pxref{Just Spaces}).
 
-  If the text on a line starts with the conventional Fortran
-continuation marker @samp{$}, or if it begins with any non-whitespace
-character in column 5, Fortran mode treats it as a continuation line.
-When you indent a continuation line with @key{TAB}, it converts the line
-to the current continuation style.  When you split a Fortran statement
-with @kbd{C-M-j}, the continuation marker on the newline is created
-according to the continuation style.
+  If the text on a line starts with the Fortran continuation marker
+@samp{$}, or if it begins with any non-whitespace character in column
+5, Fortran mode treats it as a continuation line.  When you indent a
+continuation line with @key{TAB}, it converts the line to the current
+continuation style.  When you split a Fortran statement with
+@kbd{C-M-j}, the continuation marker on the newline is created according
+to the continuation style.
 
   The setting of continuation style affects several other aspects of
 editing in Fortran mode.  In fixed format mode, the minimum column
@@ -1986,17 +2002,6 @@
 column number for the statement body is 8, and the whitespace before
 column 8 must always consist of one tab character.
 
-@vindex fortran-tab-mode-default
-@vindex fortran-analyze-depth
-  When you enter Fortran mode for an existing file, it tries to deduce the
-proper continuation style automatically from the file contents.  The first
-line that begins with either a tab character or six spaces determines the
-choice.  The variable @code{fortran-analyze-depth} specifies how many lines
-to consider (at the beginning of the file); if none of those lines
-indicates a style, then the variable @code{fortran-tab-mode-default}
-specifies the style.  If it is @code{nil}, that specifies fixed format, and
-non-@code{nil} specifies tab format.
-
 @node ForIndent Num
 @subsubsection Line Numbers
 
@@ -2007,9 +2012,11 @@
 @vindex fortran-line-number-indent
   Line numbers of four digits or less are normally indented one space.
 The variable @code{fortran-line-number-indent} controls this; it
-specifies the maximum indentation a line number can have.  Line numbers
-are right-justified to end in column 4 unless that would require more
-than this maximum indentation.  The default value of the variable is 1.
+specifies the maximum indentation a line number can have.  The default
+value of the variable is 1.  Fortran mode tries to prevent line number
+digits passing column 4, reducing the indentation below the specified
+maximum if necessary.  If @code{fortran-line-number-indent} has the
+value 5, line numbers are right-justified to end in column 4.
 
 @vindex fortran-electric-line-number
   Simply inserting a line number is enough to indent it according to
@@ -2062,54 +2069,59 @@
 Extra indentation within each level of @samp{do} statement (default 3).
 
 @item fortran-if-indent
-Extra indentation within each level of @samp{if} statement (default 3).
-This value is also used for extra indentation within each level of the
-Fortran 90 @samp{where} statement.
+Extra indentation within each level of @samp{if}, @samp{select case}, or
+@samp{where} statements (default 3).
 
 @item fortran-structure-indent
-Extra indentation within each level of @samp{structure}, @samp{union}, or
-@samp{map} statements (default 3).
+Extra indentation within each level of @samp{structure}, @samp{union},
+@samp{map}, or @samp{interface} statements (default 3).
 
 @item fortran-continuation-indent
 Extra indentation for bodies of continuation lines (default 5).
 
 @item fortran-check-all-num-for-matching-do
-If this is @code{nil}, indentation assumes that each @samp{do} statement
-ends on a @samp{continue} statement.  Therefore, when computing
-indentation for a statement other than @samp{continue}, it can save time
-by not checking for a @samp{do} statement ending there.  If this is
-non-@code{nil}, indenting any numbered statement must check for a
-@samp{do} that ends there.  The default is @code{nil}.
+In Fortran77, a numbered @samp{do} statement is ended by any statement
+with a matching line number.  It is common (but not compulsory) to use a
+@samp{continue} statement for this purpose.  If this variable has a
+non-@code{nil} value, indenting any numbered statement must check for a
+@samp{do} that ends there.  If you always end @samp{do} statements with
+a @samp{continue} line (or if you use the more modern @samp{enddo}),
+then you can speed up indentation by setting this variable to
+@code{nil}.  The default is @code{nil}.
 
 @item fortran-blink-matching-if
-If this is @code{t}, indenting an @samp{endif} statement moves the
-cursor momentarily to the matching @samp{if} statement to show where it
-is.  The default is @code{nil}.
+If this is @code{t}, indenting an @samp{endif} (or @samp{enddo}
+statement moves the cursor momentarily to the matching @samp{if} (or
+@samp{do}) statement to show where it is.  The default is @code{nil}.
 
 @item fortran-minimum-statement-indent-fixed
-Minimum indentation for fortran statements when using fixed format
+Minimum indentation for Fortran statements when using fixed format
 continuation line style.  Statement bodies are never indented less than
 this much.  The default is 6.
 
 @item fortran-minimum-statement-indent-tab
-Minimum indentation for fortran statements for tab format continuation line
+Minimum indentation for Fortran statements for tab format continuation line
 style.  Statement bodies are never indented less than this much.  The
 default is 8.
 @end table
 
+The variables controlling the indentation of comments are described in
+the following section.
+
 @node Fortran Comments
 @subsection Fortran Comments
 
-  The usual Emacs comment commands assume that a comment can follow a line
-of code.  In Fortran, the standard comment syntax requires an entire line
-to be just a comment.  Therefore, Fortran mode replaces the standard Emacs
-comment commands and defines some new variables.
+  The usual Emacs comment commands assume that a comment can follow a
+line of code.  In Fortran77, the standard comment syntax requires an
+entire line to be just a comment.  Therefore, Fortran mode replaces the
+standard Emacs comment commands and defines some new variables.
 
+@vindex fortran-comment-line-start
   Fortran mode can also handle the Fortran90 comment syntax where comments
 start with @samp{!} and can follow other text.  Because only some Fortran77
 compilers accept this syntax, Fortran mode will not insert such comments
 unless you have said in advance to do so.  To do this, set the variable
-@code{comment-start} to @samp{"!"} (@pxref{Variables}).
+@code{fortran-comment-line-start} to @samp{"!"}.
 
 @table @kbd
 @item M-;
@@ -2123,6 +2135,7 @@
 into real code (@code{fortran-comment-region}).
 @end table
 
+@findex fortran-indent-comment
   @kbd{M-;} in Fortran mode is redefined as the command
 @code{fortran-indent-comment}.  Like the usual @kbd{M-;} command, this
 recognizes any kind of existing comment and aligns its text appropriately;
@@ -2178,14 +2191,6 @@
 lines are directives.  Matching lines are never indented, and receive
 distinctive font-locking.
 
-@vindex comment-line-start
-@vindex comment-line-start-skip
-  Fortran mode introduces two variables @code{comment-line-start} and
-@code{comment-line-start-skip}, which play for full-line comments the same
-roles played by @code{comment-start} and @code{comment-start-skip} for
-ordinary text-following comments.  Normally these are set properly by
-Fortran mode, so you do not need to change them.
-
   The normal Emacs comment command @kbd{C-x ;} has not been redefined.  If
 you use @samp{!} comments, this command can be used with them.  Otherwise
 it is useless in Fortran mode.
@@ -2204,34 +2209,28 @@
 clear from the context which one is meant.
 
 @node Fortran Autofill
-@subsection Fortran Auto Fill Mode
+@subsection Auto Fill in Fortran Mode
 
-  Fortran Auto Fill mode is a minor mode which automatically splits
-Fortran statements as you insert them when they become too wide.
-Splitting a statement involves making continuation lines using
-@code{fortran-continuation-string} (@pxref{ForIndent Cont}).  This
-splitting happens when you type @key{SPC}, @key{RET}, or @key{TAB}, and
-also in the Fortran indentation commands.
-
-@findex fortran-auto-fill-mode
-  @kbd{M-x fortran-auto-fill-mode} toggles Fortran Auto Fill mode,
-which is a variant of normal Auto Fill mode (@pxref{Filling}) designed
-for Fortran programs.  Fortran Auto Fill mode is a buffer-local minor
-mode (@pxref{Minor Modes}).  When Fortran Auto Fill mode is in effect,
-the word @samp{Fill} appears in the mode line inside the parentheses.
+  Fortran mode has specialized support for Auto Fill mode, which is a
+minor mode that automatically splits statements as you insert them when
+they become too wide.  Splitting a statement involves making
+continuation lines using @code{fortran-continuation-string}
+(@pxref{ForIndent Cont}).  This splitting happens when you type
+@key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran indentation
+commands.  You activate Auto Fill in Fortran mode in the normal way
+(@pxref{Auto Fill}).
 
 @vindex fortran-break-before-delimiters
-   Fortran Auto Fill mode breaks lines at spaces or delimiters when the
-lines get longer than the desired width (the value of @code{fill-column}).
-The delimiters that Fortran Auto Fill mode may break at are @samp{,},
-@samp{'}, @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, and @samp{)}.
-The line break comes after the delimiter if the variable
-@code{fortran-break-before-delimiters} is @code{nil}.  Otherwise (and by
-default), the break comes before the delimiter.
+   Auto Fill breaks lines at spaces or delimiters when the lines get
+longer than the desired width (the value of @code{fill-column}).  The
+delimiters (besides whitespace) that Auto Fill can break at are
+@samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>},
+and @samp{,}.  The line break comes after the delimiter if the
+variable @code{fortran-break-before-delimiters} is @code{nil}.
+Otherwise (and by default), the break comes before the delimiter.
 
-  To enable this mode permanently, add a hook function to
-@code{fortran-mode-hook} to execute @code{(fortran-auto-fill-mode 1)}.
-@xref{Hooks}.
+  To enable Auto Fill in all Fortran buffers, add
+@code{turn-on-auto-fill} to @code{fortran-mode-hook}.  @xref{Hooks}.
 
 @node Fortran Columns
 @subsection Checking Columns in Fortran
@@ -2280,7 +2279,7 @@
 @findex fortran-window-create-momentarily
   @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily
 splits the current window horizontally, making a window 72 columns
-wide, so you can see which lines that is too long.  Type a space to
+wide, so you can see any lines that are too long.  Type a space to
 restore the normal width.
 
 @kindex C-u C-c C-w @r{(Fortran mode)}
--- a/man/reftex.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/reftex.texi	Thu Mar 31 09:58:14 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/text.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/text.texi	Thu Mar 31 09:58:14 2005 +0000
@@ -403,13 +403,13 @@
 * Fill Prefix::	        Filling paragraphs that are indented
                           or in a comment, etc.
 * Adaptive Fill::       How Emacs can determine the fill prefix automatically.
+* Longlines::           Editing text with very long lines.
 @end menu
 
 @node Auto Fill
 @subsection Auto Fill Mode
 @cindex Auto Fill mode
 @cindex mode, Auto Fill
-@cindex word wrap
 
   @dfn{Auto Fill} mode is a minor mode in which lines are broken
 automatically when they become too wide.  Breaking happens only when
@@ -474,16 +474,19 @@
 to typical word processor behavior.  This works by running a
 paragraph-filling command at suitable times.
 
-  When you are typing text, only characters which normally trigger
-auto filling, like the space character, will trigger refilling.  This
-is to avoid making it too slow.  Apart from self-inserting characters,
-other commands which modify the text cause refilling.
-
-  The current implementation is preliminary and probably not robust.
-We expect to improve on it.
-
   To toggle the use of Refill mode in the current buffer, type
-@kbd{M-x refill-mode}.
+@kbd{M-x refill-mode}.  When you are typing text, only characters
+which normally trigger auto filling, like the space character, will
+trigger refilling.  This is to avoid making it too slow.  Apart from
+self-inserting characters, other commands which modify the text cause
+refilling.
+
+  The current implementation is preliminary and not robust.  You can
+get better ``line wrapping'' behavior using Longlines mode.
+@xref{Longlines}.  However, Longlines mode has an important
+side-effect: the newlines that it inserts for you are not saved to
+disk, so the files that you make with Longlines mode will appear to be
+completely unfilled if you edit them without Longlines mode.
 
 @node Fill Commands
 @subsection Explicit Fill Commands
@@ -745,6 +748,56 @@
 line.  If it returns @code{nil}, that means it sees no fill prefix in
 that line.
 
+@node Longlines
+@subsection Long Lines Mode
+@cindex refilling text, word processor style
+@cindex modes, Long Lines
+@cindex word wrap
+@cindex Long Lines minor mode
+
+  Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you
+edit ``unfilled'' text files, which Emacs would normally display as a
+bunch of extremely long lines.  Many text editors, such as those built
+into many web browsers, normally do word wrapping.
+
+@findex longlines-mode
+  To enable Long Lines mode, type @kbd{M-x longlines-mode}.  If the
+text is full of long lines, this will ``wrap'' them
+immediately---i.e., break up to fit in the window.  As you edit the
+text, Long Lines mode automatically re-wraps lines by inserting or
+deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft
+Newlines}.)  These soft newlines won't show up when you save the
+buffer into a file, or when you copy the text into the kill ring,
+clipboard, or a register.
+
+@findex longlines-auto-wrap
+  Word wrapping is @emph{not} the same as ordinary filling
+(@pxref{Fill Commands}).  It does not contract multiple spaces into a
+single space, recognize fill prefixes (@pxref{Fill Prefix}), or
+perform adaptive filling (@pxref{Adaptive Fill}).  The reason for this
+is that a wrapped line is still, conceptually, a single line.  Each
+soft newline is equivalent to exactly one space in that long line, and
+vice versa.  However, you can still call filling functions such as
+@kbd{M-q}, and these will work as expected, inserting soft newlines
+that won't show up on disk or when the text is copied.  You can even
+rely entirely on the normal fill commands by turning off automatic
+line wrapping, with @kbd{C-u M-x longlines-auto-wrap}.  To turn
+automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}.
+
+@findex longlines-show-hard-newlines
+  Whenever you type @kbd{RET}, you are inserting a hard newline.  If
+you want to see where all the hard newlines are, type @kbd{M-x
+longlines-show-hard-newlines}.  This will mark each hard newline with
+a special symbol.  The same command with a prefix argument turns this
+display off.
+
+  Long Lines mode does not change normal text files that are already
+filled, since the existing newlines are considered hard newlines.
+Before Long Lines can do anything, you need to transform each
+paragraph into a long line.  One way is to set @code{fill-column} to a
+large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs,
+and then set @code{fill-column} back to its original value.
+
 @node Case
 @section Case Conversion Commands
 @cindex case conversion
@@ -1053,30 +1106,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 +1149,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 +1188,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 +1344,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/xresources.texi	Tue Mar 29 00:48:14 2005 +0000
+++ b/man/xresources.texi	Thu Mar 31 09:58:14 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).
@@ -48,7 +52,8 @@
 and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}.
 The menu and scrollbars are native widgets on MS-Windows, so they are
 only customizable via the system-wide settings in the Display Control
-Panel.
+Panel.  You can also set resources using the @samp{-xrm} command line
+option (see below.)
 
   Programs define named resources with particular meanings.  They also
 define how to group resources into named classes.  For instance, in
@@ -58,6 +63,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 +96,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 +279,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 +570,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 +604,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 specify the class and the style in double-quotes, and put
+these commands at the top level in the GTK customization file, like
+this:
 
 @smallexample
 style "menufont"
@@ -662,18 +683,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 +705,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 +779,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 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 +797,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 +841,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 +867,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 +958,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/ChangeLog	Thu Mar 31 09:58:14 2005 +0000
@@ -1,3 +1,54 @@
+2005-03-30  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (display_line): Allow multiple overlay arrows in window.
+
+2005-03-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP.
+	(file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p.
+	(Ffile_name_absolute_p): Use it.
+	(search_embedded_absfilename): New fun, extracted from
+	Fsubstitute_in_file_name.  Use file_name_absolute_p.
+	Free the pw data after use.
+	(Fsubstitute_in_file_name): Use it.
+	After cutting a prefix, re-check file-name-handler.
+
+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 +68,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 +102,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/alloc.c	Thu Mar 31 09:58:14 2005 +0000
@@ -1502,7 +1502,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/callproc.c	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/coding.c	Thu Mar 31 09:58:14 2005 +0000
@@ -9357,8 +9357,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/dired.c	Thu Mar 31 09:58:14 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.
@@ -115,7 +115,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;
@@ -908,6 +907,7 @@
 #endif
   char modes[10];
   Lisp_Object handler;
+  struct gcpro gcpro1;
 
   filename = Fexpand_file_name (filename, Qnil);
 
@@ -923,7 +923,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/editfns.c	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/editfns.c	Thu Mar 31 09:58:14 2005 +0000
@@ -1,6 +1,6 @@
 /* Lisp functions pertaining to editing.
-   Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004
-	Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997, 1998,
+     1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
--- a/src/fileio.c	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/fileio.c	Thu Mar 31 09:58:14 2005 +0000
@@ -1018,7 +1018,7 @@
 DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
        doc: /* Convert filename NAME to absolute, and canonicalize it.
 Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative
- (does not start with slash); if DEFAULT-DIRECTORY is nil or missing,
+\(does not start with slash); if DEFAULT-DIRECTORY is nil or missing,
 the current buffer's value of default-directory is used.
 File name components that are `.' are removed, and
 so are file name components followed by `..', along with the `..' itself;
@@ -1468,7 +1468,7 @@
 	     indirectly by prepending newdir to nm if necessary, and using
 	     cwd (or the wd of newdir's drive) as the new newdir. */
 
-	  if (IS_DRIVE (newdir[0]) && newdir[1] == ':')
+	  if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
 	    {
 	      drive = newdir[0];
 	      newdir += 2;
@@ -1491,7 +1491,7 @@
 	}
 
       /* Strip off drive name from prefix, if present. */
-      if (IS_DRIVE (newdir[0]) && newdir[1] == ':')
+      if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
 	{
 	  drive = newdir[0];
 	  newdir += 2;
@@ -1725,7 +1725,7 @@
 DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
   "Convert FILENAME to absolute, and canonicalize it.\n\
 Second arg DEFAULT is directory to start with if FILENAME is relative\n\
- (does not start with slash); if DEFAULT is nil or missing,\n\
+\(does not start with slash); if DEFAULT is nil or missing,\n\
 the current buffer's value of default-directory is used.\n\
 Filenames containing `.' or `..' as components are simplified;\n\
 initial `~/' expands to your home directory.\n\
@@ -2044,6 +2044,75 @@
 }
 #endif
 
+/* If /~ or // appears, discard everything through first slash.  */
+static int
+file_name_absolute_p (filename)
+     const unsigned char *filename;
+{
+  return
+    (IS_DIRECTORY_SEP (*filename) || *filename == '~'
+#ifdef VMS
+     /* ??? This criterion is probably wrong for '<'.  */
+     || index (filename, ':') || index (filename, '<')
+     || (*filename == '[' && (filename[1] != '-'
+			      || (filename[2] != '.' && filename[2] != ']'))
+	 && filename[1] != '.')
+#endif /* VMS */
+#ifdef DOS_NT
+     || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1])
+	 && IS_DIRECTORY_SEP (filename[2]))
+#endif
+     );
+}
+
+static unsigned char *
+search_embedded_absfilename (nm, endp)
+     unsigned char *nm, *endp;
+{
+  unsigned char *p, *s;
+
+  for (p = nm + 1; p < endp; p++)
+    {
+      if ((0
+#ifdef VMS
+	   || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
+#endif /* VMS */
+	   || IS_DIRECTORY_SEP (p[-1]))
+	  && file_name_absolute_p (p)
+#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN)
+	  /* // at start of file name is meaningful in Apollo,
+	     WindowsNT and Cygwin systems.  */
+	  && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm)
+#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
+	      )
+	{
+	  for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
+#ifdef VMS
+			      && *s != ':'
+#endif /* VMS */
+			      ); s++);
+	  if (p[0] == '~' && s > p + 1)	/* we've got "/~something/" */
+	    {
+	      unsigned char *o = alloca (s - p + 1);
+	      struct passwd *pw;
+	      bcopy (p, o, s - p);
+	      o [s - p] = 0;
+
+	      /* If we have ~user and `user' exists, discard
+		 everything up to ~.  But if `user' does not exist, leave
+		 ~user alone, it might be a literal file name.  */
+	      if ((pw = getpwnam (o + 1)))
+		return p;
+	      else
+		xfree (pw);
+	    }
+	  else
+	    return p;
+	}
+    }
+  return NULL;
+}
+
 DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
        Ssubstitute_in_file_name, 1, 1, 0,
        doc: /* Substitute environment variables referred to in FILENAME.
@@ -2065,7 +2134,6 @@
   int total = 0;
   int substituted = 0;
   unsigned char *xnm;
-  struct passwd *pw;
   Lisp_Object handler;
 
   CHECK_STRING (filename);
@@ -2085,61 +2153,17 @@
   endp = nm + SBYTES (filename);
 
   /* If /~ or // appears, discard everything through first slash.  */
-
-  for (p = nm; p != endp; p++)
-    {
-      if ((p[0] == '~'
-#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN)
-	   /* // at start of file name is meaningful in Apollo,
-	      WindowsNT and Cygwin systems.  */
-	   || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm)
-#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
-	   || IS_DIRECTORY_SEP (p[0])
-#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
-	   )
-	  && p != nm
-	  && (0
-#ifdef VMS
-	      || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
-#endif /* VMS */
-	      || IS_DIRECTORY_SEP (p[-1])))
-	{
-	  for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
-#ifdef VMS
-			      && *s != ':'
-#endif /* VMS */
-			      ); s++);
-	  if (p[0] == '~' && s > p + 1)	/* we've got "/~something/" */
-	    {
-	      o = (unsigned char *) alloca (s - p + 1);
-	      bcopy ((char *) p, o, s - p);
-	      o [s - p] = 0;
-
-	      pw = (struct passwd *) getpwnam (o + 1);
-	    }
-	  /* If we have ~/ or ~user and `user' exists, discard
-	     everything up to ~.  But if `user' does not exist, leave
-	     ~user alone, it might be a literal file name.  */
-	  if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw)
-	    {
-	      nm = p;
-	      substituted = 1;
-	    }
-	}
-#ifdef DOS_NT
-      /* see comment in expand-file-name about drive specifiers */
-      else if (IS_DRIVE (p[0]) && p[1] == ':'
-	       && p > nm && IS_DIRECTORY_SEP (p[-1]))
-	{
-	  nm = p;
-	  substituted = 1;
-	}
-#endif /* DOS_NT */
-    }
+  p = search_embedded_absfilename (nm, endp);
+  if (p)
+    /* Start over with the new string, so we check the file-name-handler
+       again.  Important with filenames like "/home/foo//:/hello///there"
+       which whould substitute to "/:/hello///there" rather than "/there".  */
+    return Fsubstitute_in_file_name
+      (make_specified_string (p, -1, endp - p,
+			      STRING_MULTIBYTE (filename)));
 
 #ifdef VMS
-  return make_specified_string (nm, -1, strlen (nm),
-				STRING_MULTIBYTE (filename));
+  return filename;
 #else
 
   /* See if any variables are substituted into the string
@@ -2266,22 +2290,11 @@
   *x = 0;
 
   /* If /~ or // appears, discard everything through first slash.  */
-
-  for (p = xnm; p != x; p++)
-    if ((p[0] == '~'
-#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN)
-	 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm)
-#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
-	 || IS_DIRECTORY_SEP (p[0])
-#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
-	 )
-	&& p != xnm && IS_DIRECTORY_SEP (p[-1]))
-      xnm = p;
-#ifdef DOS_NT
-    else if (IS_DRIVE (p[0]) && p[1] == ':'
-	     && p > xnm && IS_DIRECTORY_SEP (p[-1]))
-      xnm = p;
-#endif
+  while ((p = search_embedded_absfilename (xnm, x)))
+    /* This time we do not start over because we've already expanded envvars
+       and replaced $$ with $.  Maybe we should start over as well, but we'd
+       need to quote some $ to $$ first.  */
+    xnm = p;
 
   return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename));
 
@@ -2964,24 +2977,8 @@
      (filename)
      Lisp_Object filename;
 {
-  const unsigned char *ptr;
-
   CHECK_STRING (filename);
-  ptr = SDATA (filename);
-  if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~'
-#ifdef VMS
-/* ??? This criterion is probably wrong for '<'.  */
-      || index (ptr, ':') || index (ptr, '<')
-      || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']'))
-	  && ptr[1] != '.')
-#endif /* VMS */
-#ifdef DOS_NT
-      || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2]))
-#endif
-      )
-    return Qt;
-  else
-    return Qnil;
+  return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil;
 }
 
 /* Return nonzero if file FILENAME exists and can be executed.  */
--- a/src/lisp.h	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/lisp.h	Thu Mar 31 09:58:14 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.
 
@@ -452,7 +452,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/minibuf.c	Thu Mar 31 09:58:14 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.
@@ -2080,6 +2080,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.
@@ -2142,7 +2144,7 @@
       return Qnil;
     }
  exit:
-  return Fthrow (Qexit, Qnil);
+  return Fexit_minibuffer ();
   /* NOTREACHED */
 }
 
@@ -2539,14 +2541,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/process.c	Thu Mar 31 09:58:14 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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/w32term.c	Thu Mar 31 09:58:14 2005 +0000
@@ -282,6 +282,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 *));
@@ -2967,6 +2971,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
@@ -4811,27 +4890,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/w32term.h	Thu Mar 31 09:58:14 2005 +0000
@@ -278,8 +278,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	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/xdisp.c	Thu Mar 31 09:58:14 2005 +0000
@@ -463,7 +463,7 @@
 
 Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook;
 
-/* Nonzero if overlay arrow has been displayed once in this window.  */
+/* Nonzero if an overlay arrow has been displayed in this window.  */
 
 static int overlay_arrow_seen;
 
@@ -15362,10 +15362,9 @@
      mark this glyph row as the one containing the overlay arrow.
      This is clearly a mess with variable size fonts.  It would be
      better to let it be displayed like cursors under X.  */
-  if (! overlay_arrow_seen
-      && (overlay_arrow_string
-	    = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap),
-	  !NILP (overlay_arrow_string)))
+  if ((overlay_arrow_string
+       = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap),
+       !NILP (overlay_arrow_string)))
     {
       /* Overlay arrow in window redisplay is a fringe bitmap.  */
       if (STRINGP (overlay_arrow_string))
--- a/src/xmenu.c	Tue Mar 29 00:48:14 2005 +0000
+++ b/src/xmenu.c	Thu Mar 31 09:58:14 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);