changeset 89983:0796fc36c2bd

Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-43 Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-553 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-557 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-558 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-559 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-561 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-30 Update from CVS
author Miles Bader <miles@gnu.org>
date Tue, 21 Sep 2004 09:34:12 +0000
parents 56440e073a4d (current diff) e5942074bdbd (diff)
children 8592df97bf76
files admin/ChangeLog etc/ChangeLog etc/NEWS leim/ChangeLog leim/quail/uni-input.el lisp/ChangeLog lisp/battery.el lisp/bindings.el lisp/calc/calc-units.el lisp/calc/calc.el lisp/cmuscheme.el lisp/descr-text.el lisp/ediff-init.el lisp/eshell/esh-ext.el lisp/files.el lisp/gnus/ChangeLog lisp/gnus/binhex.el lisp/gnus/flow-fill.el lisp/gnus/gnus-agent.el lisp/gnus/gnus-art.el lisp/gnus/gnus-cite.el lisp/gnus/gnus-group.el lisp/gnus/gnus-int.el lisp/gnus/gnus-msg.el lisp/gnus/gnus-score.el lisp/gnus/gnus-srvr.el lisp/gnus/gnus-start.el lisp/gnus/gnus-sum.el lisp/gnus/gnus-util.el lisp/gnus/gnus.el lisp/gnus/imap.el lisp/gnus/mail-source.el lisp/gnus/message.el lisp/gnus/mm-decode.el lisp/gnus/mm-util.el lisp/gnus/mml.el lisp/gnus/nnimap.el lisp/gnus/nnmail.el lisp/gnus/uudecode.el lisp/ibuf-ext.el lisp/indent.el lisp/mail/supercite.el lisp/net/net-utils.el lisp/progmodes/make-mode.el lisp/progmodes/sh-script.el lisp/simple.el lisp/startup.el lisp/subr.el lisp/term.el lisp/textmodes/enriched.el lispref/ChangeLog lispref/commands.texi man/ChangeLog man/building.texi man/calc.texi man/custom.texi src/ChangeLog src/alloc.c src/buffer.c src/xdisp.c src/xterm.c
diffstat 73 files changed, 1471 insertions(+), 807 deletions(-) [+]
line wrap: on
line diff
--- a/admin/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/admin/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,13 @@
+2004-09-20  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* FOR-RELEASE (Indications): Rearrange checklists for Emacs and
+	Elisp manuals.
+
+2004-09-18  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* FOR-RELEASE (Indications): Clean up and update checklists for
+	Emacs and Elisp manuals.
+
 2004-09-11  Kim F. Storm  <storm@cua.dk>
 
 	* FOR-RELEASE (New features): Remove Gnus 5.10 entry (Done!).
--- a/admin/FOR-RELEASE	Sun Sep 19 04:06:19 2004 +0000
+++ b/admin/FOR-RELEASE	Tue Sep 21 09:34:12 2004 +0000
@@ -44,156 +44,112 @@
 
 ** Check the Emacs manual.
 
-Write you name/initials in the DONE column when you have
-proof-read the corresponding manual section.
+Each manual section should be proof-read by at least two people.
+After each file name, on the same line or the following line, come the
+names of the people who have checked it.
+
 
-DONE	SECTION
----------------------------------------------
-	man/abbrevs.texi
-	man/ack.texi
-	man/ada-mode.texi
-	man/anti.texi
-	man/autotype.texi
-	man/back.texi
-	man/basic.texi
-	man/buffers.texi
-	man/building.texi
-	man/calc.texi
-	man/calendar.texi
-	man/cc-mode.texi
-	man/cl.texi
-	man/cmdargs.texi
-	man/commands.texi
-	man/custom.texi
-	man/dired.texi
-	man/dired-x.texi
-	man/display.texi
-	man/doclicense.texi
-	man/ebrowse.texi
-	man/ediff.texi
-	man/emacs-mime.texi
-	man/emacs.texi
-	man/emacs-xtra.texi
-	man/entering.texi
-	man/eshell.texi
-	man/eudc.texi
-	man/faq.texi
-	man/files.texi
-	man/fixit.texi
-	man/flymake.texi
-	man/forms.texi
-	man/frames.texi
-	man/glossary.texi
-	man/gnus-faq.texi
-	man/gnus.texi
-	man/gnu.texi
-	man/help.texi
-	man/idlwave.texi
-	man/indent.texi
-	man/info.texi
-	man/killing.texi
-	man/kmacro.texi
-	man/macos.texi
-	man/maintaining.texi
-	man/major.texi
-	man/mark.texi
-	man/message.texi
-	man/mh-e.texi
-	man/mini.texi
-	man/misc.texi
-	man/msdog.texi
-	man/mule.texi
-	man/m-x.texi
-	man/pcl-cvs.texi
-	man/pgg.texi
-	man/picture.texi
-	man/programs.texi
-	man/reftex.texi
-	man/regs.texi
-	man/rmail.texi
-	man/screen.texi
-	man/sc.texi
-	man/search.texi
-	man/sending.texi
-	man/ses.texi
-	man/sieve.texi
-	man/smtpmail.texi
-	man/speedbar.texi
-	man/texinfo.tex
-	man/text.texi
-	man/tramp.texi
-	man/trampver.texi
-	man/trouble.texi
-	man/viper.texi
-	man/vip.texi
-	man/widget.texi
-	man/windows.texi
-	man/woman.texi
-	man/xresources.texi
+SECTION             READERS
+-----------------------------
+man/abbrevs.texi
+man/anti.texi
+man/basic.texi      "Luc Teirlinck"
+man/buffers.texi    "Luc Teirlinck"
+man/building.texi   "Ted Zlatanov" <tzz@lifelogs.com>
+man/calendar.texi
+man/cmdargs.texi
+man/commands.texi   "Luc Teirlinck"
+man/custom.texi
+man/dired.texi
+man/display.texi    "Luc Teirlinck"
+man/emacs.texi      "Luc Teirlinck"
+man/entering.texi   "Luc Teirlinck"
+man/files.texi      "Luc Teirlinck"
+man/fixit.texi      "Luc Teirlinck"
+man/frames.texi     "Luc Teirlinck"
+man/glossary.texi
+man/help.texi       "Luc Teirlinck"
+man/indent.texi     "Luc Teirlinck"
+man/killing.texi    "Luc Teirlinck"
+man/kmacro.texi     "Luc Teirlinck"
+man/macos.texi
+man/maintaining.texi
+man/major.texi      "Luc Teirlinck"
+man/mark.texi       "Luc Teirlinck"
+man/mini.texi       "Luc Teirlinck"
+man/misc.texi
+man/msdog.texi
+man/mule.texi       "Luc Teirlinck"
+man/m-x.texi        "Luc Teirlinck"
+man/picture.texi
+man/programs.texi
+man/regs.texi       "Luc Teirlinck"
+man/rmail.texi
+man/screen.texi     "Luc Teirlinck"
+man/search.texi     "Luc Teirlinck"
+man/sending.texi
+man/text.texi
+man/trouble.texi
+man/windows.texi    "Luc Teirlinck"
+man/xresources.texi
 
 ** Check the Emacs Lisp manual.
 
-Write you name/initials in the DONE column when you have
-proof-read the corresponding manual section.
+Each manual section should be proof-read by at least two people.
+After each file name, on the same line or the following line, come the
+names of the people who have checked it.
 
-DONE	SECTION
----------------------------------------------
-	lispref/abbrevs.texi
-	lispref/advice.texi
-	lispref/anti.texi
-	lispref/back.texi
-	lispref/backups.texi
-	lispref/buffers.texi
-	lispref/calendar.texi
-	lispref/commands.texi
-	lispref/compile.texi
-	lispref/control.texi
-	lispref/customize.texi
-	lispref/debugging.texi
-	lispref/display.texi
-	lispref/doclicense.texi
-	lispref/edebug.texi
-	lispref/elisp-covers.texi
-	lispref/elisp.texi
-	lispref/errors.texi
-	lispref/eval.texi
-	lispref/files.texi
-	lispref/frames.texi
-	lispref/front-cover-1.texi
-	lispref/functions.texi
-	lispref/gpl.texi
-	lispref/hash.texi
-	lispref/help.texi
-	lispref/hooks.texi
-	lispref/index.texi
-	lispref/internals.texi
-	lispref/intro.texi
-	lispref/keymaps.texi
-	lispref/lay-flat.texi
-	lispref/lists.texi
-	lispref/loading.texi
-	lispref/locals.texi
-	lispref/macros.texi
-	lispref/maps.texi
-	lispref/markers.texi
-	lispref/minibuf.texi
-	lispref/modes.texi
-	lispref/nonascii.texi
-	lispref/numbers.texi
-	lispref/objects.texi
-	lispref/os.texi
-	lispref/positions.texi
-	lispref/processes.texi
-	lispref/searching.texi
-	lispref/sequences.texi
-	lispref/streams.texi
-	lispref/strings.texi
-	lispref/symbols.texi
-	lispref/syntax.texi
-	lispref/text.texi
-	lispref/tips.texi
-	lispref/variables.texi
-	lispref/windows.texi
+SECTION                  READERS
+----------------------------------
+lispref/abbrevs.texi     "Luc Teirlinck"
+lispref/advice.texi
+lispref/anti.texi
+lispref/backups.texi     "Luc Teirlinck"
+lispref/buffers.texi     "Luc Teirlinck"
+lispref/calendar.texi
+lispref/commands.texi    "Luc Teirlinck"
+lispref/compile.texi     "Luc Teirlinck"
+lispref/control.texi     "Luc Teirlinck"
+lispref/customize.texi
+lispref/debugging.texi
+lispref/display.texi
+lispref/edebug.texi
+lispref/elisp.texi       "Luc Teirlinck"
+lispref/errors.texi      "Luc Teirlinck"
+lispref/eval.texi        "Luc Teirlinck"
+lispref/files.texi       "Luc Teirlinck"
+lispref/frames.texi      "Luc Teirlinck"
+lispref/functions.texi	 "Luc Teirlinck"
+lispref/hash.texi	 "Luc Teirlinck"
+lispref/help.texi	 "Luc Teirlinck"
+lispref/hooks.texi
+lispref/internals.texi	 "Luc Teirlinck"
+lispref/intro.texi	 "Luc Teirlinck"
+lispref/keymaps.texi	 "Luc Teirlinck"
+lispref/lists.texi	 "Luc Teirlinck"
+lispref/loading.texi     "Luc Teirlinck"
+lispref/locals.texi
+lispref/macros.texi      "Luc Teirlinck"
+lispref/maps.texi
+lispref/markers.texi     "Luc Teirlinck"
+lispref/minibuf.texi     "Luc Teirlinck"
+lispref/modes.texi
+lispref/nonascii.texi    "Luc Teirlinck"
+lispref/numbers.texi	 "Luc Teirlinck"
+lispref/objects.texi	 "Luc Teirlinck"
+lispref/os.texi		 "Luc Teirlinck"
+lispref/positions.texi	 "Luc Teirlinck"
+lispref/processes.texi
+lispref/searching.texi	 "Luc Teirlinck"
+lispref/sequences.texi	 "Luc Teirlinck"
+lispref/streams.texi	 "Luc Teirlinck"
+lispref/strings.texi	 "Luc Teirlinck"
+lispref/symbols.texi	 "Luc Teirlinck"
+lispref/syntax.texi	 "Luc Teirlinck"
+lispref/text.texi
+lispref/tips.texi	 "Luc Teirlinck"
+lispref/variables.texi	 "Luc Teirlinck"
+lispref/windows.texi     "Luc Teirlinck"
 
 
 Local variables:
--- a/etc/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/etc/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,8 @@
+2004-09-16  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* e/eterm.ti: Change the strings for smso and rmso.
+          e/eterm: Regenerate.
+
 2004-09-09  Thien-Thi Nguyen  <ttn@gnu.org>
 
 	* MORE.STUFF (EDB): Update entry.
--- a/etc/NEWS	Sun Sep 19 04:06:19 2004 +0000
+++ b/etc/NEWS	Tue Sep 21 09:34:12 2004 +0000
@@ -174,6 +174,10 @@
 * Changes in Emacs 21.4
 
 +++
+** In processing a local variables list, Emacs strips the prefix and
+suffix are from every line before processing all the lines.
+
++++
 ** `apply-macro-to-region-lines' now operates on all lines that begin
 in the region, rather than on all complete lines in the region.
 
@@ -319,6 +323,7 @@
 
 ** Compilation mode enhancements:
 
++++
 *** New user option `compilation-environment'.
 This option allows you to specify environment variables for inferior
 compilation processes without affecting the environment that all
@@ -1571,6 +1576,8 @@
 **** The `::' qualifier triggers C++ parsing in C file.
 Previously, only the `template' and `class' keywords had this effect.
 
+**** The gnucc __attribute__ keyword is now recognised and ignored.
+
 **** New language HTML.
 Title and h1, h2, h3 are tagged.  Also, tags are generated when name= is
 used inside an anchor and whenever id= is used.
@@ -1579,7 +1586,8 @@
 If you want the old behavior instead, thus avoiding to increase the
 size of the tags file, use the --no-globals option.
 
-**** In Lua, all functions are tagged.
+**** New language Lua.
+All functions are tagged.
 
 **** In Perl, packages are tags.
 Subroutine tags are named from their package.  You can jump to sub tags
@@ -1590,7 +1598,7 @@
 
 **** New language PHP.
 Tags are functions, classes and defines.
-If the --members option is specified to etags, tags are vars also.
+If the --members option is specified to etags, tags are variables also.
 
 **** New default keywords for TeX.
 The new keywords are def, newcommand, renewcommand, newenvironment and
@@ -2314,6 +2322,9 @@
 
 * Lisp Changes in Emacs 21.4
 
+** Major mode functions now run the new normal hook
+`after-change-major-mode-hook', at their very end, after the mode hooks.
+
 +++
 ** `auto-save-file-format' has been renamed to
 `buffer-auto-save-file-format' and made into a permanent local.
--- a/etc/e/eterm.ti	Sun Sep 19 04:06:19 2004 +0000
+++ b/etc/e/eterm.ti	Tue Sep 21 09:34:12 2004 +0000
@@ -12,8 +12,8 @@
 	smcup=\E7\E[?47h,rmcup=\E[2J\E[?47l\E8,
 	ht=\t,khome=\E[1~,kend=\E[4~,knp=\E[6~,kpp=\E[5~,
 	kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
-	smso=\E[7m,rmso=\E[m,
-	smul=\E[4m,rmul=\E[m,
+ 	smso=\E[7m,rmso=\E[27m,
+	smul=\E[4m,rmul=\E[24m,
 	rev=\E[7m,bold=\E[1m,sgr0=\E[m,
 	invis=\E[8m,op=\E[39;49m,
 	setab=\E[%p1%{40}%+%dm, setaf=\E[%p1%{30}%+%dm,
--- a/leim/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/leim/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,15 @@
+2004-09-21  Kenichi Handa  <handa@m17n.org>
+
+	* quail/uni-input.el: Move the call of register-input-method to
+	leim-ext.el.
+	(ucs-input-insert-char): New function.
+	(ucs-input-method): Use ucs-input-insert-char.
+	(ucs-input-activate): Call quail-hide-guidance instead of
+	quail-hide-guidance-buf.
+
+	* leim-ext.el: Add autoload for 'ucs-input-activate and
+	register-input-method for "ucs".
+
 2004-08-21  David Kastrup  <dak@gnu.org>
 
 	* quail/greek.el ("greek-babel"): Add accent/breathing/uppercase
--- a/leim/leim-ext.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/leim/leim-ext.el	Tue Sep 21 09:34:12 2004 +0000
@@ -34,4 +34,14 @@
 (eval-after-load "quail/PY-b5"
   '(quail-defrule "ling2" ?$(0!r(B nil t))
 
+(autoload 'ucs-input-activate "quail/uni-input"
+  "Activate UCS input method.
+With arg, activate UCS input method if and only if arg is positive.
+
+While this input method is active, the variable
+`input-method-function' is bound to the function `ucs-input-method'.")
+
+(register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+"
+		       "Unicode input as hex in the form Uxxxx.")
+
 ;; arch-tag: 75cfdfc7-de85-44f9-b408-ff67d1ec664e
--- a/leim/quail/uni-input.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/leim/quail/uni-input.el	Tue Sep 21 09:34:12 2004 +0000
@@ -40,14 +40,16 @@
 
 (require 'quail)
 
+(defun ucs-input-insert-char (char)
+  (insert char)
+  (move-overlay quail-overlay (overlay-start quail-overlay) (point)))
+
 (defun ucs-input-method (key)
   (if (or buffer-read-only
 	  (and (/= key ?U) (/= key ?u)))
       (list key)
     (quail-setup-overlays nil)
-    (let ((current-prefix-arg)
-	  (last-command-char key))
-      (call-interactively 'self-insert-command))
+    (ucs-input-insert-char key)
     (let ((modified-p (buffer-modified-p))
 	  (buffer-undo-list t)
 	  (input-method-function nil)
@@ -68,9 +70,7 @@
 					  ?b ?c ?d ?e ?f ?A ?B ?C ?D ?E ?F)))
 		      (progn
 			(push key events)
-			(let ((last-command-char key)
-			      (current-prefix-arg))
-			  (call-interactively 'self-insert-command)))
+			(ucs-input-insert-char key))
 		    (let ((last-command-char key)
 			  (current-prefix-arg))
 		      (condition-case nil
@@ -98,7 +98,7 @@
 	  (< (prefix-numeric-value arg) 0))
       (unwind-protect
 	  (progn
-	    (quail-hide-guidance-buf)
+	    (quail-hide-guidance)
 	    (quail-delete-overlays)
 	    (setq describe-current-input-method-function nil))
 	(kill-local-variable 'input-method-function))
@@ -124,8 +124,9 @@
 
 Input as Unicode: U<hex> or u<hex>, where <hex> is a four-digit hex number.")))
 
-(register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+"
-		       "Unicode input as hex in the form Uxxxx.")
+;; The file ../leim-ext.el contains the following call.
+;; (register-input-method "ucs" "UTF-8" 'ucs-input-activate "U+"
+;; 		       "Unicode input as hex in the form Uxxxx.")
 
 (provide 'uni-input)
 
--- a/lisp/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,124 @@
+2004-09-21  Kenichi Handa  <handa@m17n.org>
+
+	* descr-text.el (describe-char): Checking of quail activation
+	fixed.
+
+2004-09-20  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* subr.el (run-mode-hooks): Run `after-change-major-mode-hook'
+	after the mode hooks instead of before.  Doc fix.
+
+2004-09-20  Jason Rumney  <jasonr@gnu.org>
+
+	* startup.el (command-line) [windows-nt]: Try .emacs first, then
+	_emacs, but revert to .emacs if neither exists in home directory.
+
+2004-09-20  John Paul Wallington  <jpw@gnu.org>
+
+	* bindings.el (completion-ignored-extensions): Add .dfsl.
+
+2004-09-20  Richard M. Stallman  <rms@gnu.org>
+
+	* bindings.el (scroll-left): Make it disabled.
+
+	* files.el (enable-local-eval): Doc fix.
+
+	* indent.el (move-to-left-margin): Special case for minibuffer.
+
+	* term.el (term-emulate-terminal): Turn off undo for output.
+	Use with-current-buffer and save-selected-window.
+
+	* eshell/esh-ext.el (eshell-explicit-command-char): Doc fix.
+
+	* progmodes/make-mode.el (makefile-fill-paragraph):
+	Don't insist on spaces when looking for comments.  # is enough.
+
+	* files.el (hack-local-variables): Copy the variables list
+	to another buffer, strip prefixes and suffixes there, then read.
+	(enable-local-eval): Doc fix.
+	(ignored-local-variables): Initialize to nil.
+	(risky-local-variable-p): Don't check ignored-local-variables here.
+	(hack-one-local-variable): Ignore var if in ignored-local-variables.
+
+2004-09-20  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* progmodes/sh-script.el (sh-mode-default-syntax-table): Set syntax
+	of = to "." (punctuation).
+
+2004-09-19  Stefan  <monnier@iro.umontreal.ca>
+
+	* subr.el (event-basic-type): Fix mask (extend to 22bits).
+
+2004-09-18  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* textmodes/enriched.el (enriched-rerun-flag): New variable.
+	(enriched-before-change-major-mode): New function.
+	Add it to `change-major-mode-hook'.
+	(enriched-after-change-major-mode): New function.
+	Add it to `after-change-major-mode-hook'.
+	(enriched-mode): Make it work correctly if called from
+	`after-change-major-mode-hook'.
+	No longer set `indent-line-function'.
+
+	* simple.el (fundamental-mode): Run `after-change-major-mode-hook'.
+
+	* subr.el (after-change-major-mode-hook): New variable.
+	(run-mode-hooks): Implement it.
+
+2004-09-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* battery.el (battery-linux-proc-apm): Use string-to-number.
+	(battery-linux-proc-acpi): Ignore all hidden files in the battery dir.
+	Use dolist (and less indentation).  Use erase-buffer.
+	Pre-initialize `design-capacity', `warn', and `low'.
+	(battery-format): Use replace-regexp-in-string.
+
+2004-09-18  Ralph Schleicher  <rs@nunatak.allgaeu.org>
+
+	* battery.el: Delete superfluous empty lines.
+	(battery-linux-proc-acpi): Attempt to gather information from all
+	battery subdirectories regardless of their file name.
+	(battery-linux-proc-apm): Replace all occurrences of
+	battery-hex-to-int-2 with string-to-int (base 16).
+	(battery-hex-to-int-2, battery-hex-to-int): Delete functions.
+	(battery-hex-map): Delete variable.
+
+2004-09-18  John Paul Wallington  <jpw@gnu.org>
+
+	* calc/calc-units.el (calc-quick-units): Fix overzealous
+	s/or/unless/.
+
+2004-09-17  Romain Francoise  <romain@orebokech.com>
+
+	* ibuf-ext.el (define-ibuffer-filter filename):
+	Expand dired-directory since buffer-file-name is absolute.
+
+2004-09-17  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* ediff-init.el (ediff-current-diff-face-A)
+	(ediff-current-diff-face-B, ediff-current-diff-face-C)
+	(ediff-current-diff-face-Ancestor)
+	(ediff-fine-diff-face-A, ediff-fine-diff-face-B)
+	(ediff-fine-diff-face-C, ediff-fine-diff-face-Ancestor)
+	(ediff-even-diff-face-A, ediff-even-diff-face-B)
+	(ediff-even-diff-face-C, ediff-even-diff-face-Ancestor)
+	(ediff-odd-diff-face-A, ediff-odd-diff-face-B)
+	(ediff-odd-diff-face-C, ediff-odd-diff-face-Ancestor):
+	Use min-colors.
+
+	* term.el (term-down): Perform vertical motion if DOWN is negative.
+	(term-exec-1): Set both TERMCAP and TERMINFO unconditionally.
+	(term-termcap-format): Synchronyze with the eterm terminfo entry
+	in etc/e/eterm.ti.
+	(term-handle-colors-array): If the current foreground or
+	background are zero (i.e. unspecified), use the foreground and
+	background of the default face for reverse video.
+	(term-ansi-at-eval-string, term-ansi-default-fg)
+	(term-ansi-default-bg, term-ansi-current-temp): Delete unused variable.
+	(term-mem): Delete ununsed function.
+	(term-protocol-version): Increment.
+	(term-current-face): Set to default.
+
 2004-09-15  Thien-Thi Nguyen  <ttn@gnu.org>
 
 	* vc.el (annotate-time): Document point handling.
@@ -153,6 +274,11 @@
 	* desktop.el (desktop-clear-preserve-buffers):
 	Remove make-obsolete-variable.
 
+2004-09-08  Richard M. Stallman  <rms@gnu.org>
+
+	* buff-menu.el (list-buffers-noselect): Call format-mode-line
+	with the buffer as argument.
+
 2004-09-08  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* vc-arch.el (vc-arch-state): Fix parsing for `names' method.
--- a/lisp/battery.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/battery.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1,6 +1,7 @@
 ;;; battery.el --- display battery status information
 
-;; Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2000, 2001, 2003, 2004
+;;           Free Software Foundation, Inc.
 
 ;; Author: Ralph Schleicher <rs@nunatak.allgaeu.org>
 ;; Keywords: hardware
@@ -31,9 +32,9 @@
 ;;; Code:
 
 (require 'timer)
+(eval-when-compile (require 'cl))
 
 
-
 (defgroup battery nil
   "Display battery status information."
   :prefix "battery-"
@@ -182,20 +183,20 @@
 	  (re-search-forward battery-linux-proc-apm-regexp)
 	  (setq driver-version (match-string 1))
 	  (setq bios-version (match-string 2))
-	  (setq tem (battery-hex-to-int-2 (match-string 3)))
+	  (setq tem (string-to-number (match-string 3) 16))
 	  (if (not (logand tem 2))
 	      (setq bios-interface "not supported")
 	    (setq bios-interface "enabled")
 	    (cond ((logand tem 16) (setq bios-interface "disabled"))
 		  ((logand tem 32) (setq bios-interface "disengaged")))
-	    (setq tem (battery-hex-to-int-2 (match-string 4)))
+	    (setq tem (string-to-number (match-string 4) 16))
 	    (cond ((= tem 0) (setq line-status "off-line"))
 		  ((= tem 1) (setq line-status "on-line"))
 		  ((= tem 2) (setq line-status "on backup")))
-	    (setq tem (battery-hex-to-int-2 (match-string 6)))
+	    (setq tem (string-to-number (match-string 6) 16))
 	    (if (= tem 255)
 		(setq battery-status "N/A")
-	      (setq tem (battery-hex-to-int-2 (match-string 5)))
+	      (setq tem (string-to-number (match-string 5) 16))
 	      (cond ((= tem 0) (setq battery-status "high"
 				     battery-status-symbol ""))
 		    ((= tem 1) (setq battery-status "low"
@@ -243,54 +244,52 @@
 %m Remaining time in minutes
 %h Remaining time in hours
 %t Remaining time in the form `h:min'"
-  (let (capacity design-capacity rate rate-type charging-state warn low
-		 minutes hours)
-    (when (file-directory-p "/proc/acpi/battery/")
-      ;; ACPI provides information about each battery present in the system in
-      ;; a separate subdirectory.  We are going to merge the available
-      ;; information together since displaying for a variable amount of
-      ;; batteries seems overkill for format-strings.
-      (mapc
-       (lambda (dir)
-	 (with-temp-buffer
-	   (insert-file-contents (expand-file-name "state" dir))
-	   (when (re-search-forward "present: +yes$" nil t)
-	     (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
-		  (or (null charging-state) (string= charging-state
-						     "unknown"))
-		  ;; On most multi-battery systems, most of the time only one
-		  ;; battery is "charging"/"discharging", the others are
-		  ;; "unknown".
-		  (setq charging-state (match-string 1)))
-	     (when (re-search-forward "present rate: +\\([0-9]+\\) \\(m[AW]\\)$"
-				      nil t)
-	       (setq rate (+ (or rate 0) (string-to-int (match-string 1)))
-		     rate-type (or (and rate-type
-					(if (string= rate-type (match-string 2))
-					    rate-type
-					  (error
-					   "Inconsistent rate types (%s vs. %s)"
-					   rate-type (match-string 2))))
-				   (match-string 2))))
-	     (when (re-search-forward "remaining capacity: +\\([0-9]+\\) m[AW]h$"
-				      nil t)
-	       (setq capacity
-		     (+ (or capacity 0) (string-to-int (match-string 1))))))
-	   (goto-char (point-max))
-	   (insert-file-contents (expand-file-name "info" dir))
-	   (when (re-search-forward "present: +yes$" nil t)
-	     (when (re-search-forward "design capacity: +\\([0-9]+\\) m[AW]h$"
-				      nil t)
-	       (setq design-capacity (+ (or design-capacity 0)
-					(string-to-int (match-string 1)))))
-	     (when (re-search-forward "design capacity warning: +\\([0-9]+\\) m[AW]h$"
-				      nil t)
-	       (setq warn (+ (or warn 0) (string-to-int (match-string 1)))))
-	     (when (re-search-forward "design capacity low: +\\([0-9]+\\) m[AW]h$"
-				      nil t)
-	       (setq low (+ (or low 0)
-			    (string-to-int (match-string 1))))))))
-       (directory-files "/proc/acpi/battery/" t "\\(BAT\\|CMB\\)")))
+  (let ((design-capacity 0)
+	(warn 0)
+	(low 0)
+	capacity rate rate-type charging-state minutes hours)
+    ;; ACPI provides information about each battery present in the system in
+    ;; a separate subdirectory.  We are going to merge the available
+    ;; information together since displaying for a variable amount of
+    ;; batteries seems overkill for format-strings.
+    (with-temp-buffer
+      (dolist (dir (ignore-errors (directory-files "/proc/acpi/battery/"
+						   t "\\`[^.]")))
+	(erase-buffer)
+	(ignore-errors (insert-file-contents (expand-file-name "state" dir)))
+	(when (re-search-forward "present: +yes$" nil t)
+	  (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
+	       (member charging-state '("unknown" nil))
+	       ;; On most multi-battery systems, most of the time only one
+	       ;; battery is "charging"/"discharging", the others are
+	       ;; "unknown".
+	       (setq charging-state (match-string 1)))
+	  (when (re-search-forward "present rate: +\\([0-9]+\\) \\(m[AW]\\)$"
+				   nil t)
+	    (setq rate (+ (or rate 0) (string-to-number (match-string 1)))
+		  rate-type (or (and rate-type
+				     (if (string= rate-type (match-string 2))
+					 rate-type
+				       (error
+					"Inconsistent rate types (%s vs. %s)"
+					rate-type (match-string 2))))
+				(match-string 2))))
+	  (when (re-search-forward "remaining capacity: +\\([0-9]+\\) m[AW]h$"
+				   nil t)
+	    (setq capacity
+		  (+ (or capacity 0) (string-to-number (match-string 1))))))
+	(goto-char (point-max))
+	(ignore-errors (insert-file-contents (expand-file-name "info" dir)))
+	(when (re-search-forward "present: +yes$" nil t)
+	  (when (re-search-forward "design capacity: +\\([0-9]+\\) m[AW]h$"
+				   nil t)
+	    (incf design-capacity (string-to-number (match-string 1))))
+	  (when (re-search-forward
+		 "design capacity warning: +\\([0-9]+\\) m[AW]h$" nil t)
+	    (incf warn (string-to-number (match-string 1))))
+	  (when (re-search-forward "design capacity low: +\\([0-9]+\\) m[AW]h$"
+				   nil t)
+	    (incf low (string-to-number (match-string 1)))))))
     (and capacity rate
 	 (setq minutes (if (zerop rate) 0
 			 (floor (* (/ (float (if (string= charging-state
@@ -327,8 +326,8 @@
 					 rate-type)) "N/A"))
 	  (cons ?B (or charging-state "N/A"))
 	  (cons ?b (or (and (string= charging-state "charging") "+")
-		       (and low (< capacity low) "!")
-		       (and warn (< capacity warn) "-")
+		       (and (< capacity low) "!")
+		       (and (< capacity warn) "-")
 		       ""))
 	  (cons ?h (or (and hours (number-to-string hours)) "N/A"))
 	  (cons ?m (or (and minutes (number-to-string minutes)) "N/A"))
@@ -346,54 +345,16 @@
 
 (defun battery-format (format alist)
   "Substitute %-sequences in FORMAT."
-  (let ((index 0)
-	(length (length format))
-	(result "")
-	char flag elem)
-    (while (< index length)
-      (setq char (aref format index))
-      (if (not flag)
-	  (if (char-equal char ?%)
-	      (setq flag t)
-	    (setq result (concat result (char-to-string char))))
-	(cond ((char-equal char ?%)
-	       (setq result (concat result "%")))
-	      ((setq elem (assoc char alist))
-	       (setq result (concat result (cdr elem)))))
-	(setq flag nil))
-      (setq index (1+ index)))
-    (or (null flag)
-	(setq result (concat result "%")))
-    result))
-
-(defconst battery-hex-map '((?0 .  0) (?1 .  1) (?2 .  2) (?3 .  3)
-			    (?4 .  4) (?5 .  5) (?6 .  6) (?7 .  7)
-			    (?8 .  8) (?9 .  9) (?a . 10) (?b . 11)
-			    (?c . 12) (?d . 13) (?e . 14) (?f . 15)))
-
-(defun battery-hex-to-int (string)
-  "Convert a hexadecimal number (a string) into a number."
-  (save-match-data
-    (and (string-match "^[ \t]+" string)
-	 (setq string (substring string (match-end 0))))
-    (and (string-match "^0[xX]" string)
-	 (setq string (substring string (match-end 0)))))
-  (battery-hex-to-int-2 string))
-
-(defun battery-hex-to-int-2 (string)
-  (let ((index 0)
-	(length (length string))
-	(value 0)
-	(elem nil))
-    (while (and (< index length)
-		(setq elem (assoc (downcase (aref string index))
-				  battery-hex-map)))
-      (setq value (+ (* 16 value) (cdr elem))
-	    index (1+ index)))
-    value))
+  (replace-regexp-in-string
+   "%."
+   (lambda (str)
+     (let ((char (aref str 1)))
+       (if (eq char ?%) "%"
+	 (or (cdr (assoc char alist)) ""))))
+   format t t))
 
 
 (provide 'battery)
 
-;;; arch-tag: 65916f50-4754-4b6b-ac21-0b510f545a37
+;; arch-tag: 65916f50-4754-4b6b-ac21-0b510f545a37
 ;;; battery.el ends here
--- a/lisp/bindings.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/bindings.el	Tue Sep 21 09:34:12 2004 +0000
@@ -517,7 +517,7 @@
 	 ;; CMUCL
 	 ".x86f" ".sparcf"
          ;; Other CL implementations (Allegro, LispWorks, OpenMCL)
-         ".fasl" ".ufsl" ".fsl" ".dxl" ".pfsl"
+         ".fasl" ".ufsl" ".fsl" ".dxl" ".pfsl" ".dfsl"
 	 ;; Libtool
 	 ".lo" ".la"
 	 ;; Gettext
@@ -720,6 +720,7 @@
 (define-key global-map [C-up]		'backward-paragraph)
 (define-key global-map [C-down]		'forward-paragraph)
 (define-key global-map [C-prior]	'scroll-right)
+(put 'scroll-left 'disabled t)
 (define-key global-map [C-next]		'scroll-left)
 (define-key global-map [M-next]		'scroll-other-window)
 (define-key global-map [M-prior]	'scroll-other-window-down)
--- a/lisp/calc/calc-units.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/calc/calc-units.el	Tue Sep 21 09:34:12 2004 +0000
@@ -297,11 +297,11 @@
 	  (units (calc-var-value 'var-Units))
 	  (expr (calc-top-n 1)))
      (unless (and (>= num 0) (<= num 9))
-       (errunless "Bad unit number"))
+       (error "Bad unit number"))
      (unless (math-vectorp units)
-       (errunless "No \"quick units\" are defined"))
+       (error "No \"quick units\" are defined"))
      (unless (< pos (length units))
-       (errunless "Unit number %d not defined" pos))
+       (error "Unit number %d not defined" pos))
      (if (math-units-in-expr-p expr nil)
 	 (calc-enter-result 1 (format "cun%d" num)
 			    (math-convert-units expr (nth pos units)))
--- a/lisp/calc/calc.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/calc/calc.el	Tue Sep 21 09:34:12 2004 +0000
@@ -427,7 +427,7 @@
   (calc-display-strings nil
    "If non-nil, display vectors of byte-sized integers as strings.")
 
-  (calc-matrix-just 'center
+  (calc-matrix-just center
    "If nil, vector elements are left-justified.
 If `right', vector elements are right-justified.
 If `center', vector elements are centered.")
@@ -447,7 +447,7 @@
   (calc-vector-brackets "[]"
    "If non-nil, surround displayed vectors with these characters.")
 
-  (calc-matrix-brackets '(R O)
+  (calc-matrix-brackets (R O)
    "A list of code-letter symbols that control \"big\" matrix display.
 If `R' is present, display inner brackets for matrices.
 If `O' is present, display outer brackets for matrices (above/below).
@@ -542,10 +542,10 @@
   (calc-assoc-selections t
    "If non-nil, selection hides deep structure of associative formulas.")
 
-  (calc-display-working-message 'lots
+  (calc-display-working-message lots
    "If non-nil, display \"Working...\" for potentially slow Calculator commands.")
 
-  (calc-auto-why 'maybe
+  (calc-auto-why maybe
    "If non-nil, automatically execute a \"why\" command to explain odd results.")
 
   (calc-timing nil
@@ -554,16 +554,16 @@
   (calc-mode-save-mode local)
 
   (calc-standard-date-formats
-   '("N"
-     "<H:mm:SSpp >Www Mmm D, YYYY"
-     "D Mmm YYYY<, h:mm:SS>"
-     "Www Mmm BD< hh:mm:ss> YYYY"
-     "M/D/Y< H:mm:SSpp>"
-     "D.M.Y< h:mm:SS>"
-     "M-D-Y< H:mm:SSpp>"
-     "D-M-Y< h:mm:SS>"
-     "j<, h:mm:SS>"
-     "YYddd< hh:mm:ss>"))
+   ("N"
+    "<H:mm:SSpp >Www Mmm D, YYYY"
+    "D Mmm YYYY<, h:mm:SS>"
+    "Www Mmm BD< hh:mm:ss> YYYY"
+    "M/D/Y< H:mm:SSpp>"
+    "D.M.Y< h:mm:SS>"
+    "M-D-Y< H:mm:SSpp>"
+    "D-M-Y< h:mm:SS>"
+    "j<, h:mm:SS>"
+    "YYddd< hh:mm:ss>"))
 
   (calc-autorange-units nil)
   
--- a/lisp/cmuscheme.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/cmuscheme.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1,6 +1,6 @@
 ;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el
 
-;; Copyright (C) 1988, 1994, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 1997, 2004  Free Software Foundation, Inc.
 
 ;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
 ;; Maintainer: FSF
@@ -140,9 +140,9 @@
   (define-key map [switch]
     '("Switch to Scheme" . switch-to-scheme))
   (define-key map [com-def-go]
-    '("Compile Definitiion & Go" . scheme-compile-definition-and-go))
+    '("Compile Definition & Go" . scheme-compile-definition-and-go))
   (define-key map [com-def]
-    '("Compile Definitiion" . scheme-compile-definition))
+    '("Compile Definition" . scheme-compile-definition))
   (define-key map [send-def-go]
     '("Evaluate Last Definition & Go" . scheme-send-definition-and-go))
   (define-key map [send-def]
@@ -437,5 +437,5 @@
 
 (provide 'cmuscheme)
 
-;;; arch-tag: e8795f4a-c496-45a2-97b4-8e0f2a2c57d2
+;; arch-tag: e8795f4a-c496-45a2-97b4-8e0f2a2c57d2
 ;;; cmuscheme.el ends here
--- a/lisp/descr-text.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/descr-text.el	Tue Sep 21 09:34:12 2004 +0000
@@ -517,7 +517,8 @@
 		    (push (format "%s;" (pop props)) ps))
 		  (list (cons "Properties" (nreverse ps)))))
 	    ("to input"
-	     ,@(let ((key-list (and current-input-method
+	     ,@(let ((key-list (and (eq input-method-function
+					'quail-input-method)
 				    (quail-find-key char))))
 		 (if (consp key-list)
 		     (list "type"
--- a/lisp/ediff-init.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/ediff-init.el	Tue Sep 21 09:34:12 2004 +0000
@@ -902,9 +902,15 @@
 
 
 (defface ediff-current-diff-face-A
-  '((((type tty))    (:foreground "blue3" :background "yellow3"))
-    (((class color)) (:foreground "firebrick" :background "pale green"))
-    (t	     	     (:inverse-video t)))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "firebrick" :background "pale green"))
+	(((class color))
+	 (:foreground "blue3" :background "yellow3"))
+	(t		     (:inverse-video t)))
+    '((((type tty))    (:foreground "blue3" :background "yellow3"))
+      (((class color)) (:foreground "firebrick" :background "pale green"))
+      (t	     	     (:inverse-video t))))
   "Face for highlighting the selected difference in buffer A."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -925,10 +931,17 @@
 
 
 (defface ediff-current-diff-face-B
-  '((((type tty))    (:foreground "magenta3" :background "yellow3"
-				  :weight bold))
-    (((class color)) (:foreground "DarkOrchid" :background "Yellow"))
-    (t	     	     (:inverse-video t)))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "DarkOrchid" :background "Yellow"))
+	(((class color))
+	 (:foreground "magenta3" :background "yellow3"
+		      :weight bold))
+	(t		     (:inverse-video t)))
+    '((((type tty))    (:foreground "magenta3" :background "yellow3"
+				    :weight bold))
+      (((class color)) (:foreground "DarkOrchid" :background "Yellow"))
+      (t	     	     (:inverse-video t))))
   "Face for highlighting the selected difference in buffer B."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -948,9 +961,15 @@
 
 
 (defface ediff-current-diff-face-C
-  '((((type tty))    (:foreground "cyan3" :background "yellow3" :weight bold))
-    (((class color)) (:foreground "Navy" :background "Pink"))
-    (t	     	     (:inverse-video t)))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "Navy" :background "Pink"))
+	(((class color))
+	 (:foreground "cyan3" :background "yellow3" :weight bold))
+	(t		     (:inverse-video t)))
+    '((((type tty))    (:foreground "cyan3" :background "yellow3" :weight bold))
+      (((class color)) (:foreground "Navy" :background "Pink"))
+      (t	     	     (:inverse-video t))))
   "Face for highlighting the selected difference in buffer C."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -970,9 +989,15 @@
 
 
 (defface ediff-current-diff-face-Ancestor
-  '((((type tty))    (:foreground "black" :background "magenta3"))
-    (((class color)) (:foreground "Black" :background "VioletRed"))
-    (t (:inverse-video t)))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "Black" :background "VioletRed"))
+	(((class color))
+	 (:foreground "black" :background "magenta3"))
+	(t (:inverse-video t)))
+    '((((type tty))    (:foreground "black" :background "magenta3"))
+      (((class color)) (:foreground "Black" :background "VioletRed"))
+      (t (:inverse-video t))))
   "Face for highlighting the selected difference in buffer Ancestor."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -992,9 +1017,15 @@
 
 
 (defface ediff-fine-diff-face-A
-  '((((type tty))    (:foreground "white" :background "sky blue" :weight bold))
-    (((class color)) (:foreground "Navy" :background "sky blue"))
-    (t (:underline t :stipple "gray3")))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "Navy" :background "sky blue"))
+	(((class color))
+	 (:foreground "white" :background "sky blue" :weight bold))
+	(t (:underline t :stipple "gray3")))
+    '((((type tty))    (:foreground "white" :background "sky blue" :weight bold))
+      (((class color)) (:foreground "Navy" :background "sky blue"))
+      (t (:underline t :stipple "gray3"))))
   "Face for highlighting the refinement of the selected diff in buffer A."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1007,9 +1038,15 @@
 (ediff-hide-face 'ediff-fine-diff-face-A)
 
 (defface ediff-fine-diff-face-B
-  '((((type tty))    (:foreground "magenta3" :background "cyan3"))
-    (((class color)) (:foreground "Black" :background "cyan"))
-    (t	     	     (:underline t :stipple "gray3")))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "Black" :background "cyan"))
+	(((class color))
+	 (:foreground "magenta3" :background "cyan3"))
+	(t		     (:underline t :stipple "gray3")))
+    '((((type tty))    (:foreground "magenta3" :background "cyan3"))
+      (((class color)) (:foreground "Black" :background "cyan"))
+      (t	     	     (:underline t :stipple "gray3"))))
   "Face for highlighting the refinement of the selected diff in buffer B."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1022,11 +1059,20 @@
 (ediff-hide-face 'ediff-fine-diff-face-B)
 
 (defface ediff-fine-diff-face-C
-  '((((type tty))    (:foreground "yellow3" :background "Turquoise"
-				  :weight bold))
-    (((type pc))     (:foreground "white" :background "Turquoise"))
-    (((class color)) (:foreground "Black" :background "Turquoise"))
-    (t (:underline t :stipple "gray3")))
+  (if ediff-emacs-p
+      '((((type pc))
+	 (:foreground "white" :background "Turquoise"))
+	(((class color) (min-colors 16))
+	 (:foreground "Black" :background "Turquoise"))
+	(((class color))
+	 (:foreground "yellow3" :background "Turquoise"
+		      :weight bold))
+	(t (:underline t :stipple "gray3")))
+    '((((type tty))    (:foreground "yellow3" :background "Turquoise"
+				    :weight bold))
+      (((type pc))     (:foreground "white" :background "Turquoise"))
+      (((class color)) (:foreground "Black" :background "Turquoise"))
+      (t (:underline t :stipple "gray3"))))
   "Face for highlighting the refinement of the selected diff in buffer C."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1039,9 +1085,15 @@
 (ediff-hide-face 'ediff-fine-diff-face-C)
 
 (defface ediff-fine-diff-face-Ancestor
-  '((((type tty))    (:foreground "red3" :background "green"))
-    (((class color)) (:foreground "Black" :background "Green"))
-    (t	     	     (:underline t :stipple "gray3")))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "Black" :background "Green"))
+	(((class color))
+	 (:foreground "red3" :background "green"))
+	(t		     (:underline t :stipple "gray3")))
+    '((((type tty))    (:foreground "red3" :background "green"))
+      (((class color)) (:foreground "Black" :background "Green"))
+      (t	     	     (:underline t :stipple "gray3"))))
   "Face for highlighting the refinement of the selected diff in the ancestor buffer.
 At present, this face is not used and no fine differences are computed for the
 ancestor buffer."
@@ -1065,11 +1117,20 @@
 	(t "Stipple")))
 
 (defface ediff-even-diff-face-A
-  `((((type tty))    (:foreground "red3" :background "light grey"
-				  :weight bold))
-    (((type pc))     (:foreground "green3" :background "light grey"))
-    (((class color)) (:foreground "Black" :background "light grey"))
-    (t	     	     (:italic t :stipple ,stipple-pixmap)))
+  (if ediff-emacs-p
+      `((((type pc))
+	 (:foreground "green3" :background "light grey"))
+	(((class color) (min-colors 16))
+	 (:foreground "Black" :background "light grey"))
+	(((class color))
+	 (:foreground "red3" :background "light grey"
+		      :weight bold))
+	(t		     (:italic t :stipple ,stipple-pixmap)))
+    `((((type tty))    (:foreground "red3" :background "light grey"
+				    :weight bold))
+      (((type pc))     (:foreground "green3" :background "light grey"))
+      (((class color)) (:foreground "Black" :background "light grey"))
+      (t	     	     (:italic t :stipple ,stipple-pixmap))))
   "Face for highlighting even-numbered non-current differences in buffer A."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1082,9 +1143,15 @@
 (ediff-hide-face 'ediff-even-diff-face-A)
 
 (defface ediff-even-diff-face-B
-  `((((type tty))    (:foreground "blue3" :background "Grey" :weight bold))
-    (((class color)) (:foreground "White" :background "Grey"))
-    (t	     	     (:italic t :stipple ,stipple-pixmap)))
+  (if ediff-emacs-p
+      `((((class color) (min-colors 16)) 
+	 (:foreground "White" :background "Grey"))
+	(((class color))    
+	 (:foreground "blue3" :background "Grey" :weight bold))
+	(t		     (:italic t :stipple ,stipple-pixmap)))
+    `((((type tty))    (:foreground "blue3" :background "Grey" :weight bold))
+      (((class color)) (:foreground "White" :background "Grey"))
+      (t	     	     (:italic t :stipple ,stipple-pixmap))))
   "Face for highlighting even-numbered non-current differences in buffer B."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1097,11 +1164,20 @@
 (ediff-hide-face 'ediff-even-diff-face-B)
 
 (defface ediff-even-diff-face-C
-  `((((type tty))    (:foreground "yellow3" :background "light grey"
-				  :weight bold))
-    (((type pc))     (:foreground "yellow3" :background "light grey"))
-    (((class color)) (:foreground "Black" :background "light grey"))
-    (t	     	     (:italic t :stipple ,stipple-pixmap)))
+  (if ediff-emacs-p
+      `((((type pc))
+	 (:foreground "yellow3" :background "light grey"))
+	(((class color) (min-colors 16))
+	 (:foreground "Black" :background "light grey"))
+	(((class color))
+	 (:foreground "yellow3" :background "light grey"
+		      :weight bold))
+	(t		     (:italic t :stipple ,stipple-pixmap)))
+    `((((type tty))    (:foreground "yellow3" :background "light grey"
+				    :weight bold))
+      (((type pc))     (:foreground "yellow3" :background "light grey"))
+      (((class color)) (:foreground "Black" :background "light grey"))
+      (t	     	     (:italic t :stipple ,stipple-pixmap))))
   "Face for highlighting even-numbered non-current differences in buffer C."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1114,11 +1190,20 @@
 (ediff-hide-face 'ediff-even-diff-face-C)
 
 (defface ediff-even-diff-face-Ancestor
-  `((((type tty))    (:foreground "cyan3" :background "light grey"
-				  :weight bold))
-    (((type pc))     (:foreground "cyan3" :background "light grey"))
-    (((class color)) (:foreground "White" :background "Grey"))
-    (t (:italic t :stipple ,stipple-pixmap)))
+  (if ediff-emacs-p
+      `((((type pc))
+	 (:foreground "cyan3" :background "light grey"))
+	(((class color) (min-colors 16))
+	 (:foreground "White" :background "Grey"))
+	(((class color))
+	 (:foreground "cyan3" :background "light grey"
+		      :weight bold))
+	(t (:italic t :stipple ,stipple-pixmap)))
+    `((((type tty))    (:foreground "cyan3" :background "light grey"
+				    :weight bold))
+      (((type pc))     (:foreground "cyan3" :background "light grey"))
+      (((class color)) (:foreground "White" :background "Grey"))
+      (t (:italic t :stipple ,stipple-pixmap))))
   "Face for highlighting even-numbered non-current differences in the ancestor buffer."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1138,10 +1223,18 @@
     (Ancestor . ediff-even-diff-face-Ancestor)))
 
 (defface ediff-odd-diff-face-A
-  '((((type tty))    (:foreground "red3" :background "black" :weight bold))
-    (((type pc))     (:foreground "green3" :background "gray40"))
-    (((class color)) (:foreground "White" :background "Grey"))
-    (t	     	     (:italic t :stipple "gray1")))
+  (if ediff-emacs-p
+      '((((type pc))
+	 (:foreground "green3" :background "gray40"))
+	(((class color) (min-colors 16))
+	 (:foreground "White" :background "Grey"))
+	(((class color))
+	 (:foreground "red3" :background "black" :weight bold))
+	(t		     (:italic t :stipple "gray1")))
+    '((((type tty))    (:foreground "red3" :background "black" :weight bold))
+      (((type pc))     (:foreground "green3" :background "gray40"))
+      (((class color)) (:foreground "White" :background "Grey"))
+      (t	     	     (:italic t :stipple "gray1"))))
   "Face for highlighting odd-numbered non-current differences in buffer A."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1155,10 +1248,18 @@
 
 
 (defface ediff-odd-diff-face-B
-  '((((type tty))    (:foreground "cyan3" :background "black" :weight bold))
-    (((type pc))     (:foreground "White" :background "gray40"))
-    (((class color)) (:foreground "Black" :background "light grey"))
-    (t	     	     (:italic t :stipple "gray1")))
+  (if ediff-emacs-p
+      '((((type pc))
+	 (:foreground "White" :background "gray40"))
+	(((class color) (min-colors 16))
+	 (:foreground "Black" :background "light grey"))
+	(((class color))
+	 (:foreground "cyan3" :background "black" :weight bold))
+	(t		     (:italic t :stipple "gray1")))
+    '((((type tty))    (:foreground "cyan3" :background "black" :weight bold))
+      (((type pc))     (:foreground "White" :background "gray40"))
+      (((class color)) (:foreground "Black" :background "light grey"))
+      (t	     	     (:italic t :stipple "gray1"))))
   "Face for highlighting odd-numbered non-current differences in buffer B."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1171,10 +1272,18 @@
 (ediff-hide-face 'ediff-odd-diff-face-B)
 
 (defface ediff-odd-diff-face-C
-  '((((type tty))    (:foreground "yellow3" :background "black" :weight bold))
-    (((type pc))     (:foreground "yellow3" :background "gray40"))
-    (((class color)) (:foreground "White" :background "Grey"))
-    (t	     	     (:italic t :stipple "gray1")))
+  (if ediff-emacs-p
+      '((((type pc))
+	 (:foreground "yellow3" :background "gray40"))
+	(((class color) (min-colors 16))
+	 (:foreground "White" :background "Grey"))
+	(((class color))
+	 (:foreground "yellow3" :background "black" :weight bold))
+	(t		     (:italic t :stipple "gray1")))
+    '((((type tty))    (:foreground "yellow3" :background "black" :weight bold))
+      (((type pc))     (:foreground "yellow3" :background "gray40"))
+      (((class color)) (:foreground "White" :background "Grey"))
+      (t	     	     (:italic t :stipple "gray1"))))
   "Face for highlighting odd-numbered non-current differences in buffer C."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
@@ -1187,9 +1296,15 @@
 (ediff-hide-face 'ediff-odd-diff-face-C)
 
 (defface ediff-odd-diff-face-Ancestor
-  '((((type tty))    (:foreground "green3" :background "black" :weight bold))
-    (((class color)) (:foreground "cyan3" :background "gray40"))
-    (t	     	     (:italic t :stipple "gray1")))
+  (if ediff-emacs-p
+      '((((class color) (min-colors 16))
+	 (:foreground "cyan3" :background "gray40"))
+	(((class color))
+	 (:foreground "green3" :background "black" :weight bold))
+	(t		     (:italic t :stipple "gray1")))
+    '((((type tty))    (:foreground "green3" :background "black" :weight bold))
+      (((class color)) (:foreground "cyan3" :background "gray40"))
+      (t	     	     (:italic t :stipple "gray1"))))
   "Face for highlighting odd-numbered non-current differences in the ancestor buffer."
   :group 'ediff-highlighting)
 ;; An internal variable.  Ediff takes the face from here.  When unhighlighting,
--- a/lisp/eshell/esh-ext.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/eshell/esh-ext.el	Tue Sep 21 09:34:12 2004 +0000
@@ -150,8 +150,8 @@
 
 (defcustom eshell-explicit-command-char ?*
   "*If this char occurs before a command name, call it externally.
-That is, although vi may be an alias, *vi will always call the
-external version.  UNIX users may prefer this variable to be \."
+That is, although `vi' may be an alias, `\vi' will always call the
+external version."
   :type 'character
   :group 'eshell-ext)
 
--- a/lisp/files.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/files.el	Tue Sep 21 09:34:12 2004 +0000
@@ -439,10 +439,7 @@
   "*Control processing of the \"variable\" `eval' in a file's local variables.
 The value can be t, nil or something else.
 A value of t means obey `eval' variables;
-nil means ignore them; anything else means query.
-
-The command \\[normal-mode] always obeys local-variables lists
-and ignores this variable."
+nil means ignore them; anything else means query."
   :type '(choice (const :tag "Obey" t)
 		 (const :tag "Ignore" nil)
 		 (other :tag "Query" other))
@@ -2110,9 +2107,7 @@
 						   buffer-file-name)
 						(concat "buffer "
 							(buffer-name))))))))))
-	  (let ((continue t)
-		prefix prefixlen suffix beg
-		mode-specified
+	  (let (prefix prefixlen suffix beg
 		(enable-local-eval enable-local-eval))
 	    ;; The prefix is what comes before "local variables:" in its line.
 	    ;; The suffix is what comes after "local variables:" in its line.
@@ -2129,46 +2124,66 @@
 	    (if prefix (setq prefixlen (length prefix)
 			     prefix (regexp-quote prefix)))
 	    (if suffix (setq suffix (concat (regexp-quote suffix) "$")))
-	    (while continue
-	      ;; Look at next local variable spec.
-	      (if selective-display (re-search-forward "[\n\C-m]")
-		(forward-line 1))
-	      ;; Skip the prefix, if any.
-	      (if prefix
-		  (if (looking-at prefix)
-		      (forward-char prefixlen)
-		    (error "Local variables entry is missing the prefix")))
-	      ;; Find the variable name; strip whitespace.
-	      (skip-chars-forward " \t")
-	      (setq beg (point))
-	      (skip-chars-forward "^:\n")
-	      (if (eolp) (error "Missing colon in local variables entry"))
-	      (skip-chars-backward " \t")
-	      (let* ((str (buffer-substring beg (point)))
-		     (var (read str))
-		    val)
-		;; Setting variable named "end" means end of list.
-		(if (string-equal (downcase str) "end")
-		    (setq continue nil)
-		  ;; Otherwise read the variable value.
-		  (skip-chars-forward "^:")
-		  (forward-char 1)
-		  (setq val (read (current-buffer)))
-		  (skip-chars-backward "\n")
+	    (forward-line 1)
+	    (let ((startpos (point))
+		  endpos
+		  (thisbuf (current-buffer)))
+	      (save-excursion
+		(if (not (re-search-forward
+			  (concat (or prefix "")
+				  "[ \t]*End:[ \t]*"
+				  (or suffix ""))
+			  nil t))
+		    (error "Local variables list is not properly terminated"))
+		(beginning-of-line)
+		(setq endpos (point)))
+
+	      (with-temp-buffer
+		(insert-buffer-substring thisbuf startpos endpos)
+		(goto-char (point-min))
+		(subst-char-in-region (point) (point-max)
+				      ?\^m ?\n)
+		(while (not (eobp))
+		  ;; Discard the prefix, if any.
+		  (if prefix
+		      (if (looking-at prefix)
+			  (delete-region (point) (match-end 0))
+			(error "Local variables entry is missing the prefix")))
+		  (end-of-line)
+		  ;; Discard the suffix, if any.
+		  (if suffix
+		      (if (looking-back suffix)
+			  (delete-region (match-beginning 0) (point))
+			(error "Local variables entry is missing the suffix")))
+		  (forward-line 1))
+		(goto-char (point-min))
+		  
+		(while (not (eobp))
+		  ;; Find the variable name; strip whitespace.
 		  (skip-chars-forward " \t")
-		  (or (if suffix (looking-at suffix) (eolp))
-		      (error "Local variables entry is terminated incorrectly"))
-		  (if mode-only
-		      (if (eq var 'mode)
-			  (setq mode-specified t))
-		    ;; Set the variable.  "Variables" mode and eval are funny.
-		    (hack-one-local-variable var val))))))))
+		  (setq beg (point))
+		  (skip-chars-forward "^:\n")
+		  (if (eolp) (error "Missing colon in local variables entry"))
+		  (skip-chars-backward " \t")
+		  (let* ((str (buffer-substring beg (point)))
+			 (var (read str))
+			 val)
+		    ;; Read the variable value.
+		    (skip-chars-forward "^:")
+		    (forward-char 1)
+		    (setq val (read (current-buffer)))
+		    (if mode-only
+			(if (eq var 'mode)
+			    (setq mode-specified t))
+		      ;; Set the variable.  "Variables" mode and eval are funny.
+		      (with-current-buffer thisbuf
+			(hack-one-local-variable var val))))
+		  (forward-line 1)))))))
     (unless mode-only
       (run-hooks 'hack-local-variables-hook))
     mode-specified))
 
-(defvar ignored-local-variables
-  '(enable-local-eval)
+(defvar ignored-local-variables ()
   "Variables to be ignored in a file's local variable spec.")
 
 ;; Get confirmation before setting these variables as locals in a file.
@@ -2234,8 +2249,7 @@
 If VAL is nil or omitted, the question is whether any value might be
 dangerous."
   (let ((safep (get sym 'safe-local-variable)))
-    (or (memq sym ignored-local-variables)
-	(get sym 'risky-local-variable)
+    (or (get sym 'risky-local-variable)
 	(and (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$\\|-predicate$\\|font-lock-keywords$\\|font-lock-keywords-[0-9]+$\\|font-lock-syntactic-keywords$\\|-frame-alist$\\|-mode-alist$\\|-map$\\|-map-alist$"
 			   (symbol-name sym))
 	     (not safep))
@@ -2309,6 +2323,8 @@
 	((eq var 'coding)
 	 ;; We have already handled coding: tag in set-auto-coding.
 	 nil)
+	((memq var ignored-local-variables)
+	 nil)
 	;; "Setting" eval means either eval it or do nothing.
 	;; Likewise for setting hook variables.
 	((risky-local-variable-p var val)
--- a/lisp/gnus/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,6 +1,156 @@
+2004-09-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness.
+
+2004-09-20  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* uudecode.el (uudecode-use-external): Add :version.
+
+	* smime.el (smime-CA-file, smime-encrypt-cipher)
+	(smime-dns-server): Add :version.
+
+	* smiley.el (gnus-smiley-file-types): Add :version.
+
+	* sha1.el (sha1-use-external): Add :version.
+
+	* pgg-def.el (pgg-query-keyserver): Add :version.
+
+	* nnmail.el (nnmail-fancy-expiry-targets)
+	(nnmail-mail-splitting-charset, nnmail-mail-splitting-decodes):
+
+	* nnimap.el (nnimap-split-download-body, nnimap-dont-close)
+	(nnimap-retrieve-groups-asynchronous): Add :version.
+	(nnimap-close-asynchronous): Add :version.  Fixed typo in doc string.
+
+	* mml.el (mml-content-disposition-parameters)
+	(mml-insert-mime-headers-always): Add :version.
+
+	* mm-util.el (mm-coding-system-priorities):
+
+	* mm-decode.el (mm-inline-text-html-with-images)
+	(mm-keep-viewer-alive-types, mm-external-terminal-program)
+	(mm-verify-option): Add :version.
+	(mm-text-html-renderer): Change :version.
+
+	* message.el (message-fcc-externalize-attachments)
+	(message-required-headers, message-draft-headers)
+	(message-subject-trailing-was-query)
+	(message-subject-trailing-was-ask-regexp)
+	(message-subject-trailing-was-regexp, message-mark-insert-begin)
+	(message-mark-insert-end, message-archive-header)
+	(message-archive-note, message-cross-post-default)
+	(message-cross-post-note, message-followup-to-note)
+	(message-cross-post-note-function, message-use-mail-followup-to)
+	(message-subscribed-address-functions)
+	(message-subscribed-address-file, message-subscribed-addresses)
+	(message-subscribed-regexps, message-allow-no-recipients)
+	(message-yank-cited-prefix, message-signature-insert-empty-line)
+	(message-hidden-headers, message-hierarchical-addresses)
+	(message-mail-user-agent, message-use-idna)
+	(message-valid-fqdn-regexp)
+	(message-strip-special-text-properties, message-header-synonyms)
+	(message-beginning-of-line, message-tab-body-function): Add :version.
+	(message-insert-canlock, message-wide-reply-confirm-recipients):
+	Change :version.
+
+	* mail-source.el (mail-source-ignore-errors): Add :group, :type
+	and :version.
+	(mail-source-delete-old-incoming-confirm)
+	(mail-source-movemail-program): Add :version.
+
+	* gnus.el (gnus-parameters, gnus-user-agent): Add :version.
+	(gnus-agent-cache, gnus-agent): Change :version.
+
+	* gnus-util.el (gnus-use-byte-compile): Change :version.
+
+	* gnus-sum.el (gnus-summary-make-false-root-always)
+	(gnus-summary-default-high-score)
+	(gnus-summary-default-low-score, gnus-auto-goto-ignores)
+	(gnus-forwarded-mark, gnus-unseen-mark, gnus-no-mark)
+	(gnus-read-all-available-headers, gnus-article-emulate-mime)
+	(gnus-sum-thread-tree-root, gnus-sum-thread-tree-false-root)
+	(gnus-sum-thread-tree-single-indent)
+	(gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent)
+	(gnus-sum-thread-tree-leaf-with-other)
+	(gnus-sum-thread-tree-single-leaf): Add :version.
+	(gnus-summary-display-arrow, gnus-summary-muttprint-program)
+	(gnus-article-loose-mime): Change :version.
+
+	* gnus-start.el (gnus-backup-startup-file)
+	(gnus-save-startup-file-via-temp-buffer): Add :version.
+
+	* gnus-srvr.el (gnus-server-browse-in-group-buffer)
+	(gnus-server-offline-face): Add :version.
+
+	* gnus-score.el (gnus-adaptive-word-length-limit):
+
+	* gnus-msg.el (gnus-gcc-externalize-attachments)
+	(gnus-debug-files, gnus-debug-exclude-variables)
+	(gnus-discouraged-post-methods): Change :version.
+	(gnus-confirm-mail-reply-to-news)
+	(gnus-confirm-treat-mail-like-news): Add :version.
+
+	* gnus-int.el (gnus-server-unopen-status): Add :version.
+
+	* gnus-group.el (gnus-group-jump-to-group-prompt)
+	(gnus-large-ephemeral-newsgroup)
+	(gnus-fetch-old-ephemeral-headers): Add :version.
+
+	* gnus-fun.el (gnus-x-face-directory)
+	(gnus-convert-pbm-to-x-face-command)
+	(gnus-convert-image-to-x-face-command)
+	(gnus-convert-image-to-face-command): Add :version.
+
+	* gnus-delay.el (gnus-delay-default-hour): Add :version.
+
+	* gnus-cite.el (gnus-cite-blank-line-after-header)
+	(gnus-article-boring-faces): 
+
+	* gnus-art.el (gnus-buttonized-mime-types)
+	(gnus-inhibit-mime-unbuttonizing)
+	(gnus-treat-display-face)
+	(gnus-treat-body-boundary): Change :version.
+	(gnus-body-boundary-delimiter, gnus-picon-databases)
+	(gnus-treat-strip-cr, gnus-treat-leading-whitespace)
+	(gnus-treat-date-english, gnus-treat-fold-headers)
+	(gnus-article-skip-boring, gnus-treat-fold-newsgroups)
+	(gnus-treat-mail-picon, gnus-treat-wash-html)
+	(gnus-article-encrypt-protocol)
+	(gnus-use-idna, gnus-article-over-scroll)
+	(gnus-mime-display-multipart-alternative-as-mixed)
+	(gnus-mime-display-multipart-related-as-mixed)
+	(gnus-button-valid-fqdn-regexp, gnus-button-man-handler)
+	(gnus-ctan-url, gnus-button-ctan-handler)
+	(gnus-button-handle-ctan-bogus-regexp)
+	(gnus-button-ctan-directory-regexp)
+	(gnus-button-mid-or-mail-regexp, gnus-button-prefer-mid-or-mail)
+	(gnus-button-mid-or-mail-heuristic-alist, gnus-button-tex-level)
+	(gnus-button-man-level, gnus-button-emacs-level)
+	(gnus-button-message-level, gnus-button-browse-level): Add :version.
+
+	* gnus-agent.el (gnus-agent-fetched-hook): Add :version.
+	(gnus-agent-go-online): Change :version.
+	(gnus-agent-expire-unagentized-dirs)
+	(gnus-agent-auto-agentize-methods): Add :version.
+
+	* flow-fill.el (fill-flowed-display-column)
+	(fill-flowed-encode-column): Add :version.
+
+	* deuglify.el (gnus-outlook-deuglify-unwrap-min)
+	(gnus-outlook-deuglify-unwrap-max)
+	(gnus-outlook-deuglify-cite-marks)
+	(gnus-outlook-deuglify-unwrap-stop-chars)
+	(gnus-outlook-deuglify-no-wrap-chars)
+	(gnus-outlook-deuglify-attrib-cut-regexp)
+	(gnus-outlook-deuglify-attrib-verb-regexp)
+	(gnus-outlook-deuglify-attrib-end-regexp)
+	(gnus-outlook-display-hook): Add :version.
+
+	* binhex.el (binhex-use-external): Add :version.
+
 2004-09-16  Reiner Steib  <Reiner.Steib@gmx.de>
 
-	* gnus-sum.el (gnus-fetch-old-headers): Added custom choices `t'
+	* gnus-sum.el (gnus-fetch-old-headers): Add custom choices `t'
 	and `invisible'.
 
 2004-09-13  Simon Josefsson  <jas@extundo.com>
@@ -9,7 +159,7 @@
 
 2004-09-13  Reiner Steib  <Reiner.Steib@gmx.de>
 
-	* gnus-sum.el (gnus-summary-copy-article): Fixed doc string.
+	* gnus-sum.el (gnus-summary-copy-article): Fix doc string.
 
 2004-09-10  Miles Bader  <miles@gnu.ai.mit.edu>
 
@@ -17,10 +167,10 @@
 
 2004-09-10  Teodor Zlatanov  <tzz@lifelogs.com>
 
-	* nnimap.el (nnimap-open-connection): allow 'imaps' as a synonym
+	* nnimap.el (nnimap-open-connection): Allow 'imaps' as a synonym
 	for the 'imap' port in netrc files
 
-	* gnus-registry.el (gnus-registry-trim): watch out for negatives
+	* gnus-registry.el (gnus-registry-trim): Watch out for negatives
 	in gnus-registry-trim
 
 2004-09-10  Simon Josefsson  <jas@extundo.com>
@@ -30,10 +180,9 @@
 2004-09-08  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* nntp.el (nntp): New customization group.
-	(nntp-authinfo-file): Added customization group.
+	(nntp-authinfo-file): Add customization group.
 
-	* mml2015.el (mml2015-unabbrev-trust-alist): Added customization
-	group.
+	* mml2015.el (mml2015-unabbrev-trust-alist): Add customization group.
 
 	* mml-sec.el (mml-signencrypt-style-alist): Ditto.
 
--- a/lisp/gnus/binhex.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/binhex.el	Tue Sep 21 09:34:12 2004 +0000
@@ -50,6 +50,7 @@
 (defcustom binhex-use-external
   (executable-find binhex-decoder-program)
   "*Use external binhex program."
+  :version "21.4"
   :group 'gnus-extract
   :type 'boolean)
 
--- a/lisp/gnus/deuglify.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/deuglify.el	Tue Sep 21 09:34:12 2004 +0000
@@ -235,46 +235,54 @@
 ;;;###autoload
 (defcustom gnus-outlook-deuglify-unwrap-min 45
   "Minimum length of the cited line above the (possibly) wrapped line."
+  :version "21.4"
   :type 'integer
   :group 'gnus-outlook-deuglify)
 
 ;;;###autoload
 (defcustom gnus-outlook-deuglify-unwrap-max 95
   "Maximum length of the cited line after unwrapping."
+  :version "21.4"
   :type 'integer
   :group 'gnus-outlook-deuglify)
 
 (defcustom gnus-outlook-deuglify-cite-marks ">|#%"
   "Characters that indicate cited lines."
+  :version "21.4"
   :type 'string
   :group 'gnus-outlook-deuglify)
 
 (defcustom gnus-outlook-deuglify-unwrap-stop-chars nil ;; ".?!" or nil
   "Characters that inhibit unwrapping if they are the last one on the cited line above the possible wrapped line."
+  :version "21.4"
   :type '(radio (const :format "None  " nil)
 		(string :size 0 :value ".?!"))
   :group 'gnus-outlook-deuglify)
 
 (defcustom gnus-outlook-deuglify-no-wrap-chars "`"
   "Characters that inhibit unwrapping if they are the first one in the possibly wrapped line."
+  :version "21.4"
   :type 'string
   :group 'gnus-outlook-deuglify)
 
 (defcustom  gnus-outlook-deuglify-attrib-cut-regexp
   "\\(On \\|Am \\)?\\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\),[^,]+, "
   "Regular expression matching the beginning of an attribution line that should be cut off."
+  :version "21.4"
   :type 'string
   :group 'gnus-outlook-deuglify)
 
 (defcustom gnus-outlook-deuglify-attrib-verb-regexp
   "wrote\\|writes\\|says\\|schrieb\\|schreibt\\|meinte\\|skrev\\|a écrit\\|schreef\\|escribió"
   "Regular expression matching the verb used in an attribution line."
+  :version "21.4"
   :type 'string
   :group 'gnus-outlook-deuglify)
 
 (defcustom  gnus-outlook-deuglify-attrib-end-regexp
   ": *\\|\\.\\.\\."
   "Regular expression matching the end of an attribution line."
+  :version "21.4"
   :type 'string
   :group 'gnus-outlook-deuglify)
 
@@ -282,6 +290,7 @@
 (defcustom gnus-outlook-display-hook nil
   "A hook called after an deuglified article has been prepared.
 It is run after `gnus-article-prepare-hook'."
+  :version "21.4"
   :type 'hook
   :group 'gnus-outlook-deuglify)
 
--- a/lisp/gnus/flow-fill.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/flow-fill.el	Tue Sep 21 09:34:12 2004 +0000
@@ -56,6 +56,7 @@
 (defcustom fill-flowed-display-column 'fill-column
   "Column beyond which format=flowed lines are wrapped, when displayed.
 This can be a Lisp expression or an integer."
+  :version "21.4"
   :group 'mime-display
   :type '(choice (const :tag "Standard `fill-column'" fill-column)
 		 (const :tag "Fit Window" (- (window-width) 5))
@@ -66,6 +67,7 @@
   "Column beyond which format=flowed lines are wrapped, in outgoing messages.
 This can be a Lisp expression or an integer.
 RFC 2646 suggests 66 characters for readability."
+  :version "21.4"
   :group 'mime-display
   :type '(choice (const :tag "Standard fill-column" fill-column)
 		 (const :tag "RFC 2646 default (66)" 66)
--- a/lisp/gnus/gnus-agent.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-agent.el	Tue Sep 21 09:34:12 2004 +0000
@@ -60,6 +60,7 @@
 
 (defcustom gnus-agent-fetched-hook nil
   "Hook run when finished fetching articles."
+  :version "21.4"
   :group 'gnus-agent
   :type 'hook)
 
@@ -125,7 +126,7 @@
 (defcustom gnus-agent-go-online 'ask
   "Indicate if offline servers go online when you plug in.
 If this is `ask' the hook will query the user."
-  :version "21.1"
+  :version "21.3"
   :type '(choice (const :tag "Always" t)
 		 (const :tag "Never" nil)
 		 (const :tag "Ask" ask))
@@ -178,6 +179,7 @@
 Have gnus-agent-expire scan the directories under
 \(gnus-agent-directory) for groups that are no longer agentized.
 When found, offer to remove them."
+  :version "21.4"
   :type 'boolean
   :group 'gnus-agent)
 
@@ -185,6 +187,7 @@
   "Initially, all servers from these methods are agentized.
 The user may remove or add servers using the Server buffer.
 See Info node `(gnus)Server Buffer'."
+  :version "21.4"
   :type '(repeat symbol)
   :group 'gnus-agent)
 
--- a/lisp/gnus/gnus-art.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-art.el	Tue Sep 21 09:34:12 2004 +0000
@@ -213,6 +213,7 @@
 signatures, but will never scroll down to show you a page consisting
 only of boring text.  Boring text is controlled by
 `gnus-article-boring-faces'."
+  :version "21.4"
   :type 'boolean
   :group 'gnus-article-hiding)
 
@@ -744,7 +745,7 @@
 To see e.g. security buttons you could set this to
 `(\"multipart/signed\")'.
 This variable is only used when `gnus-inhibit-mime-unbuttonizing' is nil."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-article-mime
   :type '(repeat regexp))
 
@@ -753,13 +754,14 @@
 When nil (the default value), then some MIME parts do not get buttons,
 as described by the variables `gnus-buttonized-mime-types' and
 `gnus-unbuttonized-mime-types'."
-  :version "21.3"
+  :version "21.4"
   :type 'boolean)
 
 (defcustom gnus-body-boundary-delimiter "_"
   "String used to delimit header and body.
 This variable is used by `gnus-article-treat-body-boundary' which can
 be controlled by `gnus-treat-body-boundary'."
+  :version "21.4"
   :group 'gnus-article-various
   :type '(choice (item :tag "None" :value nil)
 		 string))
@@ -768,6 +770,7 @@
   "Defines the location of the faces database.
 For information on obtaining this database of pretty pictures, please
 see http://www.cs.indiana.edu/picons/ftp/index.html"
+  :version "21.4"
   :type '(repeat directory)
   :link '(url-link :tag "download"
 		   "http://www.cs.indiana.edu/picons/ftp/index.html")
@@ -908,6 +911,7 @@
   "Remove carriage returns.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -924,6 +928,7 @@
   "Remove leading whitespace in headers.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -1043,6 +1048,7 @@
   "Display the Date in a format that can be read aloud in English.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-head-custom)
@@ -1126,6 +1132,7 @@
   "Fold headers.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -1134,6 +1141,7 @@
   "Fold the Newsgroups and Followup-To headers.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -1199,7 +1207,7 @@
 See Info node `(gnus)Customizing Articles' and Info node
 `(gnus)X-Face' for details."
   :group 'gnus-article-treat
-  :version "21.1"
+  :version "21.4"
   :link '(custom-manual "(gnus)Customizing Articles")
   :link '(custom-manual "(gnus)X-Face")
   :type gnus-article-treat-head-custom)
@@ -1260,6 +1268,7 @@
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' and Info node
 `(gnus)Picons' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :group 'gnus-picon
   :link '(custom-manual "(gnus)Customizing Articles")
@@ -1275,7 +1284,7 @@
   "Draw a boundary at the end of the headers.
 Valid values are nil and `head'.
 See Info node `(gnus)Customizing Articles' for details."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-head-custom)
@@ -1293,6 +1302,7 @@
   "Format as HTML.
 Valid values are nil, t, `head', `last', an integer or a predicate.
 See Info node `(gnus)Customizing Articles' for details."
+  :version "21.4"
   :group 'gnus-article-treat
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
@@ -1341,6 +1351,7 @@
 (defcustom gnus-article-encrypt-protocol "PGP"
   "The protocol used for encrypt articles.
 It is a string, such as \"PGP\". If nil, ask user."
+  :version "21.4"
   :type 'string
   :group 'mime-security)
 
@@ -1352,11 +1363,13 @@
 			      (executable-find idna-program))
   "Whether IDNA decoding of headers is used when viewing messages.
 This requires GNU Libidn, and by default only enabled if it is found."
+  :version "21.4"
   :group 'gnus-article-headers
   :type 'boolean)
 
 (defcustom gnus-article-over-scroll nil
   "If non-nil, allow scrolling the article buffer even when there no more text."
+  :version "21.4"
   :group 'gnus-article
   :type 'boolean)
 
@@ -4606,6 +4619,7 @@
 
 (defcustom gnus-mime-display-multipart-alternative-as-mixed nil
   "Display \"multipart/alternative\" parts as  \"multipart/mixed\"."
+  :version "21.4"
   :group 'gnus-article-mime
   :type 'boolean)
 
@@ -4615,6 +4629,7 @@
 If displaying \"text/html\" is discouraged \(see
 `mm-discouraged-alternatives'\) images or other material inside a
 \"multipart/related\" part might be overlooked when this variable is nil."
+  :version "21.4"
   :group 'gnus-article-mime
   :type 'boolean)
 
@@ -5719,6 +5734,7 @@
 (defcustom gnus-button-valid-fqdn-regexp
   message-valid-fqdn-regexp
   "Regular expression that matches a valid FQDN."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type 'regexp)
 
@@ -5726,6 +5742,7 @@
   "Function to use for displaying man pages.
 The function must take at least one argument with a string naming the
 man page."
+  :version "21.4"
   :type '(choice (function-item :tag "Man" manual-entry)
 		 (function-item :tag "Woman" woman)
 		 (function :tag "Other"))
@@ -5736,6 +5753,7 @@
 If the default site is too slow, try to find a CTAN mirror, see
 <URL:http://tug.ctan.org/tex-archive/CTAN.sites?action=/index.html>.  See also
 the variable `gnus-button-handle-ctan'."
+  :version "21.4"
   :group 'gnus-article-buttons
   :link '(custom-manual "(gnus)Group Parameters")
   :type '(choice (const "http://www.tex.ac.uk/tex-archive/")
@@ -5746,12 +5764,14 @@
 (defcustom gnus-button-ctan-handler 'browse-url
   "Function to use for displaying CTAN links.
 The function must take one argument, the string naming the URL."
+  :version "21.4"
   :type '(choice (function-item :tag "Browse Url" browse-url)
 		 (function :tag "Other"))
   :group 'gnus-article-buttons)
 
 (defcustom gnus-button-handle-ctan-bogus-regexp "^/?tex-archive/\\|^/"
   "Bogus strings removed from CTAN URLs."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type '(choice (const "^/?tex-archive/\\|/")
 		 (regexp :tag "Other")))
@@ -5765,6 +5785,7 @@
    "\\)")
   "Regular expression for ctan directories.
 It should match all directories in the top level of `gnus-ctan-url'."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type 'regexp)
 
@@ -5774,6 +5795,7 @@
 	  gnus-button-valid-fqdn-regexp
 	  ">?\\)\\b")
   "Regular expression that matches a message ID or a mail address."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type 'regexp)
 
@@ -5785,6 +5807,7 @@
 symbol `ask', always query the user what do do.  If it is a function, this
 function will be called with the string as it's only argument.  The function
 must return `mid', `mail', `invalid' or `ask'."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type '(choice (function-item :tag "Heuristic function"
 				gnus-button-mid-or-mail-heuristic)
@@ -5848,6 +5871,7 @@
 
 A negative RATE indicates a message IDs, whereas a positive indicates a mail
 address.  The REGEXP is processed with `case-fold-search' set to nil."
+  :version "21.4"
   :group 'gnus-article-buttons
   :type '(repeat (cons (number :tag "Rate")
 		       (regexp :tag "Regexp"))))
@@ -6032,6 +6056,7 @@
 specific groups.  Setting it higher in TeX groups is probably a good idea.
 See Info node `(gnus)Group Parameters' and the variable `gnus-parameters' on
 how to set variables in specific groups."
+  :version "21.4"
   :group 'gnus-article-buttons
   :link '(custom-manual "(gnus)Group Parameters")
   :type 'integer)
@@ -6043,6 +6068,7 @@
 specific groups.  Setting it higher in Unix groups is probably a good idea.
 See Info node `(gnus)Group Parameters' and the variable `gnus-parameters' on
 how to set variables in specific groups."
+  :version "21.4"
   :group 'gnus-article-buttons
   :link '(custom-manual "(gnus)Group Parameters")
   :type 'integer)
@@ -6054,6 +6080,7 @@
 specific groups.  Setting it higher in Emacs or Gnus related groups is
 probably a good idea.  See Info node `(gnus)Group Parameters' and the variable
 `gnus-parameters' on how to set variables in specific groups."
+  :version "21.4"
   :group 'gnus-article-buttons
   :link '(custom-manual "(gnus)Group Parameters")
   :type 'integer)
@@ -6063,6 +6090,7 @@
 The higher the number, the more buttons will appear and the more false
 positives are possible."
   ;; mail addresses, MIDs, URLs for news, ...
+  :version "21.4"
   :group 'gnus-article-buttons
   :type 'integer)
 
@@ -6071,6 +6099,7 @@
 The higher the number, the more buttons will appear and the more false
 positives are possible."
   ;; stuff handled by `browse-url' or `gnus-button-embedded-url'
+  :version "21.4"
   :group 'gnus-article-buttons
   :type 'integer)
 
--- a/lisp/gnus/gnus-cite.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-cite.el	Tue Sep 21 09:34:12 2004 +0000
@@ -278,6 +278,7 @@
 
 (defcustom gnus-cite-blank-line-after-header t
   "If non-nil, put a blank line between the citation header and the button."
+  :version "21.4"
   :group 'gnus-cite
   :type 'boolean)
 
@@ -289,6 +290,7 @@
 If an article has more pages below the one you are looking at, but
 nothing on those pages is a word of at least three letters that is not
 in a boring face, then the pages will be skipped."
+  :version "21.4"
   :type '(repeat face)
   :group 'gnus-article-hiding)
 
--- a/lisp/gnus/gnus-delay.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-delay.el	Tue Sep 21 09:34:12 2004 +0000
@@ -60,6 +60,7 @@
 
 (defcustom gnus-delay-default-hour 8
   "*If deadline is given as date, then assume this time of day."
+  :version "21.4"
   :type 'integer
   :group 'gnus-delay)
 
--- a/lisp/gnus/gnus-fun.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-fun.el	Tue Sep 21 09:34:12 2004 +0000
@@ -31,11 +31,13 @@
 
 (defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
   "*Directory where X-Face PBM files are stored."
+  :version "21.4"
   :group 'gnus-fun
   :type 'directory)
 
 (defcustom gnus-convert-pbm-to-x-face-command "pbmtoxbm %s | compface"
   "Command for converting a PBM to an X-Face."
+  :version "21.4"
   :group 'gnus-fun
   :type 'string)
 
@@ -43,6 +45,7 @@
   "Command for converting an image to an X-Face.
 By default it takes a GIF filename and output the X-Face header data
 on stdout."
+  :version "21.4"
   :group 'gnus-fun
   :type 'string)
 
@@ -50,6 +53,7 @@
   "Command for converting an image to an Face.
 By default it takes a JPEG filename and output the Face header data
 on stdout."
+  :version "21.4"
   :group 'gnus-fun
   :type 'string)
 
--- a/lisp/gnus/gnus-group.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-group.el	Tue Sep 21 09:34:12 2004 +0000
@@ -435,6 +435,7 @@
 If non-nil, the value should be a string, e.g. \"nnml:\",
 in which case `gnus-group-jump-to-group' offers \"Group: nnml:\"
 in the minibuffer prompt."
+  :version "21.4"
   :group 'gnus-group-various
   :type '(choice (string :tag "Prompt string")
 		 (const :tag "Empty" nil)))
@@ -1959,12 +1960,14 @@
 If the number of articles in a newsgroup is greater than this value,
 confirmation is required for selecting the newsgroup.  If it is nil, no
 confirmation is required."
+  :version "21.4"
   :group 'gnus-group-select
   :type '(choice (const :tag "No limit" nil)
 		 integer))
 
 (defcustom gnus-fetch-old-ephemeral-headers nil
   "Same as `gnus-fetch-old-headers', but only used for ephemeral newsgroups."
+  :version "21.4"
   :group 'gnus-thread
   :type '(choice (const :tag "off" nil)
 		 (const some)
--- a/lisp/gnus/gnus-int.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-int.el	Tue Sep 21 09:34:12 2004 +0000
@@ -46,6 +46,7 @@
 `denied', set the server denied; `offline', set the server offline;
 nil, ask user.  If the server is not covered by Gnus agent, set the
 server denied."
+  :version "21.4"
   :group 'gnus-start
   :type '(choice (const :tag "Ask" nil)
 		 (const :tag "Deny server" denied)
--- a/lisp/gnus/gnus-msg.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-msg.el	Tue Sep 21 09:34:12 2004 +0000
@@ -142,7 +142,7 @@
 
 (defcustom gnus-gcc-mark-as-read nil
   "If non-nil, automatically mark Gcc articles as read."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-message
   :type 'boolean)
 
@@ -154,7 +154,7 @@
 If it is `all', attach files as external parts;
 if a regexp and matches the Gcc group name, attach files as external parts;
 if nil, attach files as normal parts."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-message
   :type '(choice (const nil :tag "None")
 		 (const all :tag "Any")
@@ -212,7 +212,7 @@
     "gnus-agent.el" "gnus-cache.el" "gnus-srvr.el"
     "mm-util.el" "mm-decode.el" "nnmail.el" "message.el")
   "Files whose variables will be reported in `gnus-bug'."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-message
   :type '(repeat (string :tag "File")))
 
@@ -220,7 +220,7 @@
   '(mm-mime-mule-charset-alist
     nnmail-split-fancy message-minibuffer-local-map)
   "Variables that should not be reported in `gnus-bug'."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-message
   :type '(repeat (symbol :tag "Variable")))
 
@@ -228,7 +228,7 @@
   '(nndraft nnml nnimap nnmaildir nnmh nnfolder nndir)
   "A list of back ends that are not used in \"real\" newsgroups.
 This variable is used only when `gnus-post-method' is `current'."
-  :version "21.3"
+  :version "21.4"
   :group 'gnus-group-foreign
   :type '(repeat (symbol :tag "Back end")))
 
@@ -260,6 +260,7 @@
 parameter which should return non-nil iff a confirmation is needed, or
 a regexp, in which case a confirmation is asked for iff the group name
 matches the regexp."
+  :version "21.4"
   :group 'gnus-message
   :type '(choice (const :tag "No" nil)
 		 (const :tag "Yes" t)
@@ -272,6 +273,7 @@
 when replying by mail.  See the `gnus-confirm-mail-reply-to-news' variable
 for fine-tuning this.
 If nil, Gnus will never ask for confirmation if replying to mail."
+  :version "21.4"
   :group 'gnus-message
   :type 'boolean)
 
--- a/lisp/gnus/gnus-score.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-score.el	Tue Sep 21 09:34:12 2004 +0000
@@ -237,6 +237,7 @@
 
 (defcustom gnus-adaptive-word-length-limit nil
   "*Words of a length lesser than this limit will be ignored when doing adaptive scoring."
+  :version "21.4"
   :group 'gnus-score-adapt
   :type '(radio (const :format "Unlimited " nil)
 		(integer :format "Maximum length: %v\n" :size 0)))
--- a/lisp/gnus/gnus-srvr.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-srvr.el	Tue Sep 21 09:34:12 2004 +0000
@@ -71,6 +71,7 @@
 (defcustom gnus-server-browse-in-group-buffer nil
   "Whether server browsing should take place in the group buffer.
 If nil, a faster, but more primitive, buffer is used instead."
+  :version "21.4"
   :group 'gnus-server-visual
   :type 'boolean)
 
@@ -224,6 +225,7 @@
 
 (defcustom gnus-server-offline-face 'gnus-server-offline-face
   "Face name to use on OFFLINE servers."
+  :version "21.4"
   :group 'gnus-server-visual
   :type 'face)
 
--- a/lisp/gnus/gnus-start.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-start.el	Tue Sep 21 09:34:12 2004 +0000
@@ -47,6 +47,7 @@
   "Whether to create backup files.
 This variable takes the same values as the `version-control'
 variable."
+  :version "21.4"
   :group 'gnus-start
   :type '(choice (const :tag "Never" never)
 		 (const :tag "If existing" nil)
@@ -57,6 +58,7 @@
 the buffer or write directly to the file.  The buffer is faster
 because all of the contents are written at once.  The direct write
 uses considerably less memory."
+  :version "21.4"
   :group 'gnus-start
   :type '(choice (const :tag "Write via buffer" t)
                  (const :tag "Write directly to file" nil)))
--- a/lisp/gnus/gnus-sum.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-sum.el	Tue Sep 21 09:34:12 2004 +0000
@@ -118,6 +118,7 @@
 
 (defcustom gnus-summary-make-false-root-always nil
   "Always make a false dummy root."
+  :version "21.4"
   :group 'gnus-thread
   :type 'boolean)
 
@@ -218,6 +219,7 @@
   "*Default threshold for a high scored article.
 An article will be highlighted as high scored if its score is greater
 than this score."
+  :version "21.4"
   :group 'gnus-score-default
   :type 'integer)
 
@@ -225,6 +227,7 @@
   "*Default threshold for a low scored article.
 An article will be highlighted as low scored if its score is smaller
 than this score."
+  :version "21.4"
   :group 'gnus-score-default
   :type 'integer)
 
@@ -320,6 +323,7 @@
 line of the first unseen article or, if all article have been seen, on the
 subject line of the first unread article), or a function to be called to
 place point on some subject line."
+  :version "21.4"
   :group 'gnus-group-select
   :type '(choice (const best)
 		 (const unread)
@@ -363,6 +367,7 @@
 
 NOTE: The list of unfetched articles will always be nil when plugged
 and, when unplugged, a subset of the undownloaded article list."
+  :version "21.4"
   :group 'gnus-summary-maneuvering
   :type '(choice (const :tag "None" nil)
                  (const :tag "Undownloaded when unplugged" undownloaded)
@@ -490,6 +495,7 @@
 
 (defcustom gnus-forwarded-mark ?F
   "*Mark used for articles that have been forwarded."
+  :version "21.4"
   :group 'gnus-summary-marks
   :type 'character)
 
@@ -510,11 +516,13 @@
 
 (defcustom gnus-unseen-mark ?.
   "*Mark used for articles that haven't been seen."
+  :version "21.4"
   :group 'gnus-summary-marks
   :type 'character)
 
 (defcustom gnus-no-mark ?               ;Whitespace
   "*Mark used for articles that have no other secondary mark."
+  :version "21.4"
   :group 'gnus-summary-marks
   :type 'character)
 
@@ -895,7 +903,7 @@
   (and (fboundp 'display-graphic-p)
        (display-graphic-p))
   "*If non-nil, display an arrow highlighting the current article."
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-summary
   :type 'boolean)
 
@@ -1073,22 +1081,23 @@
 This is mostly relevant for slow back ends where the user may
 wish to widen the summary buffer to include all headers
 that were fetched.  Say, for nnultimate groups."
+  :version "21.4"
   :group 'gnus-summary
   :type '(choice boolean regexp))
 
 (defcustom gnus-summary-muttprint-program "muttprint"
   "Command (and optional arguments) used to run Muttprint."
-  :version "21.3"
+  :version "21.4"
   :group 'gnus-summary
   :type 'string)
 
 (defcustom gnus-article-loose-mime nil
   "If non-nil, don't require MIME-Version header.
 Some brain-damaged MUA/MTA, e.g. Lotus Domino 5.0.6 clients, does not
-supply the MIME-Version header or deliberately strip it From the mail.
+supply the MIME-Version header or deliberately strip it from the mail.
 Set it to non-nil, Gnus will treat some articles as MIME even if
 the MIME-Version header is missed."
-  :version "21.3"
+  :version "21.4"
   :type 'boolean
   :group 'gnus-article-mime)
 
@@ -1097,6 +1106,7 @@
 This means that Gnus will search message bodies for text that look
 like uuencoded bits, yEncoded bits, and so on, and present that using
 the normal Gnus MIME machinery."
+  :version "21.4"
   :type 'boolean
   :group 'gnus-article-mime)
 
@@ -4591,32 +4601,39 @@
 (defcustom gnus-sum-thread-tree-root "> "
   "With %B spec, used for the root of a thread.
 If nil, use subject instead."
+  :version "21.4"
   :type '(radio (const :format "%v  " nil) (string :size 0))
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-false-root "> "
   "With %B spec, used for a false root of a thread.
 If nil, use subject instead."
+  :version "21.4"
   :type '(radio (const :format "%v  " nil) (string :size 0))
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-single-indent ""
   "With %B spec, used for a thread with just one message.
 If nil, use subject instead."
+  :version "21.4"
   :type '(radio (const :format "%v  " nil) (string :size 0))
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-vertical "| "
   "With %B spec, used for drawing a vertical line."
+  :version "21.4"
   :type 'string
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-indent "  "
   "With %B spec, used for indenting."
+  :version "21.4"
   :type 'string
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-leaf-with-other "+-> "
   "With %B spec, used for a leaf with brothers."
+  :version "21.4"
   :type 'string
   :group 'gnus-thread)
 (defcustom gnus-sum-thread-tree-single-leaf "\\-> "
   "With %B spec, used for a leaf without brothers."
+  :version "21.4"
   :type 'string
   :group 'gnus-thread)
 
--- a/lisp/gnus/gnus-util.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus-util.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1163,7 +1163,7 @@
 Setting it to nil has no effect after the first time `gnus-byte-compile'
 is run."
   :type 'boolean
-  :version "21.1"
+  :version "21.4"
   :group 'gnus-various)
 
 (defun gnus-byte-compile (form)
--- a/lisp/gnus/gnus.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/gnus.el	Tue Sep 21 09:34:12 2004 +0000
@@ -963,6 +963,7 @@
      (\"mail\\\\.me\" (gnus-use-scoring  t))
      (\"list\\\\..*\" (total-expire . t)
 		  (broken-reply-to . t)))"
+  :version "21.4"
   :group 'gnus-group-various
   :type '(repeat (cons regexp
 		       (repeat sexp))))
@@ -2292,7 +2293,7 @@
 When set, Gnus will prefer using the locally stored content rather
 than re-fetching it from the server.  You also need to enable
 `gnus-agent' for this to have any affect."
-  :version "21.3"
+  :version "21.4"
   :group 'gnus-agent
   :type 'boolean)
 
@@ -2311,7 +2312,7 @@
 You may customize gnus-agent to disable its use.  However, some
 back ends have started to use the agent as a client-side cache.
 Disabling the agent may result in noticeable loss of performance."
-  :version "21.3"
+  :version "21.4"
   :group 'gnus-agent
   :type 'boolean)
 
@@ -2343,6 +2344,7 @@
 `emacs-gnus' plus system configuration\), `emacs-gnus-type' \(same as
 `emacs-gnus' plus system type\) or a custom string.  If you set it to a
 string, be sure to use a valid format, see RFC 2616."
+  :version "21.4"
   :group 'gnus-message
   :type '(choice
 	  (item :tag "Show Gnus and Emacs versions and system type"
--- a/lisp/gnus/imap.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/imap.el	Tue Sep 21 09:34:12 2004 +0000
@@ -227,7 +227,8 @@
 pipe, or t or `pty' to use a pty.  The value has no effect if the
 system has no ptys or if all ptys are busy: then a pipe is used
 in any case.  The value takes effect when a IMAP server is
-opened, changing it after that has no effect.."
+opened, changing it after that has no effect."
+  :version "21.4"
   :group 'imap
   :type 'boolean)
 
--- a/lisp/gnus/mail-source.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/mail-source.el	Tue Sep 21 09:34:12 2004 +0000
@@ -235,7 +235,10 @@
 (defcustom mail-source-ignore-errors nil
   "*Ignore errors when querying mail sources.
 If nil, the user will be prompted when an error occurs.  If non-nil,
-the error will be ignored.")
+the error will be ignored."
+  :version "21.4"
+  :group 'mail-source
+  :type 'boolean)
 
 (defcustom mail-source-primary-source nil
   "*Primary source for incoming mail.
@@ -281,6 +284,7 @@
   "*If non-nil, ask for for confirmation before deleting old incoming files.
 This variable only applies when `mail-source-delete-incoming' is a positive
 number."
+  :version "21.4"
   :group 'mail-source
   :type 'boolean)
 
@@ -301,6 +305,7 @@
 
 (defcustom mail-source-movemail-program nil
   "If non-nil, name of program for fetching new mail."
+  :version "21.4"
   :group 'mail-source
   :type '(choice (const nil) string))
 
--- a/lisp/gnus/message.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/message.el	Tue Sep 21 09:34:12 2004 +0000
@@ -135,6 +135,7 @@
 
 (defcustom message-fcc-externalize-attachments nil
   "If non-nil, attachments are included as external parts in Fcc copies."
+  :version "21.4"
   :type 'boolean
   :group 'message-sending)
 
@@ -174,7 +175,7 @@
 
 (defcustom message-insert-canlock t
   "Whether to insert a Cancel-Lock header in news postings."
-  :version "21.3"
+  :version "21.4"
   :group 'message-headers
   :type 'boolean)
 
@@ -203,6 +204,7 @@
   "*Headers to be generated or prompted for when sending a message.
 Also see `message-required-news-headers' and
 `message-required-mail-headers'."
+  :version "21.4"
   :group 'message-news
   :group 'message-headers
   :link '(custom-manual "(message)Message Headers")
@@ -210,6 +212,7 @@
 
 (defcustom message-draft-headers '(References From)
   "*Headers to be generated when saving a draft message."
+  :version "21.4"
   :group 'message-news
   :group 'message-headers
   :link '(custom-manual "(message)Message Headers")
@@ -287,6 +290,7 @@
 `message-subject-trailing-was-query' is t, always strip the trailing
 old subject.  In this case, `message-subject-trailing-was-regexp' is
 used."
+  :version "21.4"
   :type '(choice (const :tag "never" nil)
 		 (const :tag "always strip" t)
                  (const ask))
@@ -303,6 +307,7 @@
 `message-subject-trailing-was-regexp' instead.
 
 It is okay to create some false positives here, as the user is asked."
+  :version "21.4"
   :group 'message-various
   :link '(custom-manual "(message)Message Headers")
   :type 'regexp)
@@ -315,6 +320,7 @@
 matched against `message-subject-trailing-was-regexp' in
 `message-strip-subject-trailing-was'.  You should use a regexp creating very
 few false positives here."
+  :version "21.4"
   :group 'message-various
   :link '(custom-manual "(message)Message Headers")
   :type 'regexp)
@@ -327,6 +333,7 @@
 (defcustom message-mark-insert-begin
   "--8<---------------cut here---------------start------------->8---\n"
   "How to mark the beginning of some inserted text."
+  :version "21.4"
   :type 'string
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-various)
@@ -335,6 +342,7 @@
 (defcustom message-mark-insert-end
   "--8<---------------cut here---------------end--------------->8---\n"
   "How to mark the end of some inserted text."
+  :version "21.4"
   :type 'string
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-various)
@@ -344,6 +352,7 @@
   "X-No-Archive: Yes\n"
   "Header to insert when you don't want your article to be archived.
 Archives \(such as groups.google.com\) respect this header."
+  :version "21.4"
   :type 'string
   :link '(custom-manual "(message)Header Commands")
   :group 'message-various)
@@ -353,6 +362,7 @@
   "X-No-Archive: Yes - save http://groups.google.com/"
   "Note to insert why you wouldn't want this posting archived.
 If nil, don't insert any text in the body."
+  :version "21.4"
   :type '(radio (string :format "%t: %v\n" :size 0)
 		(const nil))
   :link '(custom-manual "(message)Header Commands")
@@ -372,6 +382,7 @@
 If nil, `message-cross-post-followup-to' will only do a followup.  Note that
 you can explicitly override this setting by calling
 `message-cross-post-followup-to' with a prefix."
+  :version "21.4"
   :type 'boolean
   :group 'message-various)
 
@@ -379,6 +390,7 @@
 (defcustom message-cross-post-note
   "Crosspost & Followup-To: "
   "Note to insert before signature to notify of cross-post and follow-up."
+  :version "21.4"
   :type 'string
   :group 'message-various)
 
@@ -386,6 +398,7 @@
 (defcustom message-followup-to-note
   "Followup-To: "
   "Note to insert before signature to notify of follow-up only."
+  :version "21.4"
   :type 'string
   :group 'message-various)
 
@@ -396,6 +409,7 @@
 The function will be called with four arguments.  The function should not only
 insert a note, but also ensure old notes are deleted.  See the documentation
 for `message-cross-post-insert-note'."
+  :version "21.4"
   :type 'function
   :group 'message-various)
 
@@ -638,6 +652,7 @@
 If nil, always ignore the header.  If it is the symbol `ask', always
 query the user whether to use the value.  If it is the symbol `use',
 always use the value."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Mailing Lists")
   :type '(choice (const :tag "ignore" nil)
@@ -651,6 +666,7 @@
 regular expressions to match lists.  These functions can be used in
 conjunction with `message-subscribed-regexps' and
 `message-subscribed-addresses'."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Mailing Lists")
   :type '(repeat sexp))
@@ -659,6 +675,7 @@
   "*A file containing addresses the user is subscribed to.
 If nil, do not look at any files to determine list subscriptions.  If
 non-nil, each line of this file should be a mailing list address."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Mailing Lists")
   :type '(radio (file :format "%t: %v\n" :size 0)
@@ -669,6 +686,7 @@
 If nil, do not use any predefined list subscriptions.  This list of
 addresses can be used in conjunction with
 `message-subscribed-address-functions' and `message-subscribed-regexps'."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Mailing Lists")
   :type '(repeat string))
@@ -678,6 +696,7 @@
 If nil, do not use any predefined list subscriptions.  This list of
 regular expressions can be used in conjunction with
 `message-subscribed-address-functions' and `message-subscribed-addresses'."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Mailing Lists")
   :type '(repeat regexp))
@@ -687,6 +706,7 @@
 If it is the symbol `always', the posting is allowed.  If it is the
 symbol `never', the posting is not allowed.  If it is the symbol
 `ask', you are prompted."
+  :version "21.4"
   :group 'message-interface
   :link '(custom-manual "(message)Message Headers")
   :type '(choice (const always)
@@ -843,6 +863,7 @@
   "*Prefix inserted on cited or empty lines of yanked messages.
 Fix `message-cite-prefix-regexp' if it is set to an abnormal value.
 See also `message-yank-prefix'."
+  :version "21.4"
   :type 'string
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
@@ -899,6 +920,7 @@
 ;;;###autoload
 (defcustom message-signature-insert-empty-line t
   "*If non-nil, insert an empty line before the signature separator."
+  :version "21.4"
   :type 'boolean
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
@@ -1079,6 +1101,7 @@
   "Regexp of headers to be hidden when composing new messages.
 This can also be a list of regexps to match headers.  Or a list
 starting with `not' and followed by regexps."
+  :version "21.4"
   :group 'message
   :link '(custom-manual "(message)Message Headers")
   :type '(repeat regexp))
@@ -1354,6 +1377,7 @@
 for a message, the subaddresses will be removed (if present) before
 the mail is sent.  All addresses in this structure should be
 downcased."
+  :version "21.4"
   :group 'message-headers
   :type '(repeat (repeat string)))
 
@@ -1361,6 +1385,7 @@
   "Like `mail-user-agent'.
 Except if it is nil, use Gnus native MUA; if it is t, use
 `mail-user-agent'."
+  :version "21.4"
   :type '(radio (const :tag "Gnus native"
 		       :format "%t\n"
 		       nil)
@@ -1384,7 +1409,7 @@
 recipients?\" before a wide reply to multiple recipients.  If the user
 answers yes, reply to all recipients as usual.  If the user answers
 no, only reply back to the author."
-  :version "21.3"
+  :version "21.4"
   :group 'message-headers
   :link '(custom-manual "(message)Wide Reply")
   :type 'boolean)
@@ -1402,6 +1427,7 @@
 				 (executable-find idna-program)
 				 'ask)
   "Whether to encode non-ASCII in domain names into ASCII according to IDNA."
+  :version "21.4"
   :group 'message-headers
   :link '(custom-manual "(message)IDNA")
   :type '(choice (const :tag "Ask" ask)
@@ -1527,6 +1553,7 @@
 	  "\\)")
   "Regular expression that matches a valid FQDN."
   ;; see also: gnus-button-valid-fqdn-regexp
+  :version "21.4"
   :group 'message-headers
   :type 'regexp)
 
@@ -2336,6 +2363,7 @@
 packages requires these properties to be present in order to work.
 If you use one of these packages, turn this option off, and hope the
 message composition doesn't break too bad."
+  :version "21.4"
   :group 'message-various
   :link '(custom-manual "(message)Various Message Variables")
   :type 'boolean)
@@ -2680,6 +2708,7 @@
 E.g., if this list contains a member list with elements `Cc' and `To',
 then `message-carefully-insert-headers' will not insert a `To' header
 when the message is already `Cc'ed to the recipient."
+  :version "21.4"
   :group 'message-headers
   :link '(custom-manual "(message)Message Headers")
   :type '(repeat sexp))
@@ -5226,6 +5255,7 @@
 (defcustom message-beginning-of-line t
   "Whether \\<message-mode-map>\\[message-beginning-of-line]\
  goes to beginning of header values."
+  :version "21.4"
   :group 'message-buffers
   :link '(custom-manual "(message)Movement")
   :type 'boolean)
@@ -6544,6 +6574,7 @@
 (defcustom message-tab-body-function nil
   "*Function to execute when `message-tab' (TAB) is executed in the body.
 If nil, the function bound in `text-mode-map' or `global-map' is executed."
+  :version "21.4"
   :group 'message
   :link '(custom-manual "(message)Various Commands")
   :type 'function)
--- a/lisp/gnus/mm-decode.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/mm-decode.el	Tue Sep 21 09:34:12 2004 +0000
@@ -115,6 +115,7 @@
 `lynx' : use lynx;
 `html2text' : use html2text;
 nil    : use external viewer."
+  :version "21.4"
   :type '(choice (const w3)
 		 (const w3m)
 		 (const w3m-standalone)
@@ -123,7 +124,6 @@
 		 (const html2text)
 		 (const nil)
 		 (function))
-  :version "21.3"
   :group 'mime-display)
 
 (defvar mm-inline-text-html-renderer nil
@@ -134,6 +134,7 @@
   "If non-nil, Gnus will allow retrieving images in HTML contents with
 the <img> tags.  It has no effect on Emacs/w3.  See also the
 documentation for the `mm-w3m-safe-url-regexp' variable."
+  :version "21.4"
   :type 'boolean
   :group 'mime-display)
 
@@ -280,6 +281,7 @@
     "application/pdf" "application/x-dvi")
   "List of media types for which the external viewer will not be killed
 when selecting a different article."
+  :version "21.4"
   :type '(repeat string)
   :group 'mime-display)
 
@@ -381,6 +383,7 @@
 
 (defcustom mm-external-terminal-program "xterm"
   "The program to start an external terminal."
+  :version "21.4"
   :type 'string
   :group 'mime-display)
 
@@ -413,6 +416,7 @@
   "Option of verifying signed parts.
 `never', not verify; `always', always verify;
 `known', only verify known protocols.  Otherwise, ask user."
+  :version "21.4"
   :type '(choice (item always)
 		 (item never)
 		 (item :tag "only known protocols" known)
@@ -619,11 +623,14 @@
   "Copy the contents of the current buffer to a fresh buffer."
   (save-excursion
     (let ((obuf (current-buffer))
+	  (multibyte enable-multibyte-characters)
 	  beg)
       (goto-char (point-min))
       (search-forward-regexp "^\n" nil t)
       (setq beg (point))
       (set-buffer (generate-new-buffer " *mm*"))
+      ;; Preserve the data's unibyteness (for url-insert-file-contents).
+      (set-buffer-multibyte multibyte)
       (insert-buffer-substring obuf beg)
       (current-buffer))))
 
@@ -1482,5 +1489,5 @@
 
 (provide 'mm-decode)
 
-;;; arch-tag: 4f35d360-56b8-4030-9388-3ed82d359b9b
+;; arch-tag: 4f35d360-56b8-4030-9388-3ed82d359b9b
 ;;; mm-decode.el ends here
--- a/lisp/gnus/mm-util.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/mm-util.el	Tue Sep 21 09:34:12 2004 +0000
@@ -287,6 +287,7 @@
 By default, the coding system with the highest priority is used
 to encode outgoing messages (see `sort-coding-systems').  If this
 variable is set, it overrides the default priority."
+  :version "21.2"
   :type '(repeat (symbol :tag "Coding system"))
   :group 'mime)
 
--- a/lisp/gnus/mml.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/mml.el	Tue Sep 21 09:34:12 2004 +0000
@@ -44,6 +44,7 @@
   '(name access-type expiration size permission format)
   "*A list of acceptable parameters in MML tag.
 These parameters are generated in Content-Type header if exists."
+  :version "21.4"
   :type '(repeat (symbol :tag "Parameter"))
   :group 'message)
 
@@ -51,12 +52,14 @@
   '(filename creation-date modification-date read-date)
   "*A list of acceptable parameters in MML tag.
 These parameters are generated in Content-Disposition header if exists."
+  :version "21.4"
   :type '(repeat (symbol :tag "Parameter"))
   :group 'message)
 
 (defcustom mml-insert-mime-headers-always nil
   "If non-nil, always put Content-Type: text/plain at top of empty parts.
 It is necessary to work against a bug in certain clients."
+  :version "21.4"
   :type 'boolean
   :group 'message)
 
--- a/lisp/gnus/nnimap.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/nnimap.el	Tue Sep 21 09:34:12 2004 +0000
@@ -211,6 +211,7 @@
 used (which currently is nil, unless you use a statistical
 spam.el test); if this variable is another non-nil value bodies
 will be downloaded."
+  :version "21.4"
   :group 'nnimap
   :type '(choice (const :tag "Let system decide" deault)
 		 boolean))
@@ -219,9 +220,10 @@
 
 (defcustom nnimap-close-asynchronous t
   "Close mailboxes asynchronously in `nnimap-close-group'.
-This means that errors cought by nnimap when closing the mailbox will
+This means that errors caught by nnimap when closing the mailbox will
 not prevent Gnus from updating the group status, which may be harmful.
 However, it increases speed."
+  :version "21.4"
   :type 'boolean
   :group 'nnimap)
 
@@ -230,6 +232,7 @@
 This increases the speed of closing mailboxes (quiting group) but may
 decrease the speed of selecting another mailbox later.  Re-selecting
 the same mailbox will be faster though."
+  :version "21.4"
   :type 'boolean
   :group 'nnimap)
 
@@ -242,6 +245,7 @@
 
 In summary, the default is O((1-p)*k+p*n) and changing it to nil makes
 it O(n).  If p is small, then the default is probably faster."
+  :version "21.4"
   :type 'boolean
   :group 'nnimap)
 
--- a/lisp/gnus/nnmail.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/nnmail.el	Tue Sep 21 09:34:12 2004 +0000
@@ -224,6 +224,7 @@
 articles containing the sting \"IMPORTANT\" in the Subject header will
 be expired to the group \"nnfolder:IMPORTANT.YYYY.MMM\"; and
 everything else will be expired to \"nnfolder:Archive-YYYY\"."
+  :version "21.4"
   :group 'nnmail-expire
   :type '(repeat (list (choice :tag "Match against"
 			       (string :tag "Header")
@@ -558,11 +559,13 @@
 
 (defcustom nnmail-mail-splitting-charset nil
   "Default charset to be used when splitting incoming mail."
+  :version "21.4"
   :group 'nnmail
   :type 'symbol)
 
 (defcustom nnmail-mail-splitting-decodes nil
   "Whether the nnmail splitting functionality should MIME decode headers."
+  :version "21.4"
   :group 'nnmail
   :type 'boolean)
 
--- a/lisp/gnus/pgg-def.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/pgg-def.el	Tue Sep 21 09:34:12 2004 +0000
@@ -50,6 +50,7 @@
 
 (defcustom pgg-query-keyserver nil
   "Whether PGG queries keyservers for missing keys when verifying messages."
+  :version "21.4"
   :group 'pgg
   :type 'boolean)
 
--- a/lisp/gnus/sha1.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/sha1.el	Tue Sep 21 09:34:12 2004 +0000
@@ -82,6 +82,7 @@
 			       (error))
   "*Use external SHA1 program.
 If this variable is set to nil, use internal function only."
+  :version "21.4"
   :type 'boolean
   :group 'sha1)
 
--- a/lisp/gnus/smiley.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/smiley.el	Tue Sep 21 09:34:12 2004 +0000
@@ -78,6 +78,7 @@
       (push "xpm" types))
     types)
   "*List of suffixes on picon file names to try."
+  :version "21.4"
   :type '(repeat string)
   :group 'smiley)
 
--- a/lisp/gnus/smime.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/smime.el	Tue Sep 21 09:34:12 2004 +0000
@@ -150,6 +150,7 @@
 (defcustom smime-CA-file nil
   "*Files containing certificates for CAs you trust.
 File should contain certificates in PEM format."
+  :version "21.4"
   :type '(choice (const :tag "none" nil)
 		 file)
   :group 'smime)
@@ -177,6 +178,7 @@
 
 (defcustom smime-encrypt-cipher "-des3"
   "*Cipher algorithm used for encryption."
+  :version "21.4"
   :type '(choice (const :tag "Triple DES" "-des3")
 		 (const :tag "DES"  "-des")
 		 (const :tag "RC2 40 bits" "-rc2-40")
@@ -208,6 +210,7 @@
 (defcustom smime-dns-server nil
   "*DNS server to query certificates from.
 If nil, use system defaults."
+  :version "21.4"
   :type '(choice (const :tag "System defaults")
 		 string)
   :group 'smime)
--- a/lisp/gnus/uudecode.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/gnus/uudecode.el	Tue Sep 21 09:34:12 2004 +0000
@@ -51,6 +51,7 @@
 (defcustom uudecode-use-external
   (executable-find uudecode-decoder-program)
   "*Use external uudecode program."
+  :version "21.4"
   :group 'gnus-extract
   :type 'boolean)
 
--- a/lisp/ibuf-ext.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/ibuf-ext.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1018,7 +1018,8 @@
   (ibuffer-awhen (with-current-buffer buf
 		   (or buffer-file-name
 		       (and (boundp 'dired-directory)
-			    dired-directory)))
+			    dired-directory
+			    (expand-file-name dired-directory))))
     (string-match qualifier it)))
 
 ;;;###autoload (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext.el")
--- a/lisp/indent.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/indent.el	Tue Sep 21 09:34:12 2004 +0000
@@ -164,14 +164,18 @@
   (interactive (list (prefix-numeric-value current-prefix-arg) t))
   (beginning-of-line n)
   (skip-chars-forward " \t")
-  (let ((lm (current-left-margin))
-	(cc (current-column)))
-    (cond ((> cc lm)
-	   (if (> (move-to-column lm force) lm)
-	       ;; If lm is in a tab and we are not forcing, move before tab
-	       (backward-char 1)))
-	  ((and force (< cc lm))
-	   (indent-to-left-margin)))))
+  (if (minibufferp (current-buffer))
+      (if (save-excursion (beginning-of-line) (bobp))
+	  (goto-char (minibuffer-prompt-end))
+	(beginning-of-line))
+    (let ((lm (current-left-margin))
+	  (cc (current-column)))
+      (cond ((> cc lm)
+	     (if (> (move-to-column lm force) lm)
+		 ;; If lm is in a tab and we are not forcing, move before tab
+		 (backward-char 1)))
+	    ((and force (< cc lm))
+	     (indent-to-left-margin))))))
 
 ;; This used to be the default indent-line-function,
 ;; used in Fundamental Mode, Text Mode, etc.
--- a/lisp/mail/supercite.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/mail/supercite.el	Tue Sep 21 09:34:12 2004 +0000
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1993, 1997, 2003 Free Software Foundation, Inc.
 
-;; Author: 1993 Barry A. Warsaw, Century Computing, Inc. <bwarsaw@cen.com>
+;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
 ;; Maintainer:    FSF
 ;; Created:       February 1993
 ;; Last Modified: 1993/09/22 18:58:46
--- a/lisp/net/net-utils.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/net/net-utils.el	Tue Sep 21 09:34:12 2004 +0000
@@ -567,7 +567,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;; Full list is available at:
-;; ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers
+;; http://www.iana.org/assignments/port-numbers
 (defvar network-connection-service-alist
   (list
     (cons 'echo          7)
--- a/lisp/progmodes/make-mode.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/progmodes/make-mode.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1028,7 +1028,7 @@
   (save-excursion
     (beginning-of-line)
     (cond
-     ((looking-at "^#+ ")
+     ((looking-at "^#+")
       ;; Found a comment.  Set the fill prefix, and find the paragraph
       ;; boundaries by searching for lines that look like comment-only
       ;; lines.
--- a/lisp/progmodes/sh-script.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/progmodes/sh-script.el	Tue Sep 21 09:34:12 2004 +0000
@@ -421,6 +421,7 @@
 	?^ "_"
 	?~ "_"
 	?, "_"
+	?= "."
 	?< "."
 	?> ".")
   "Default syntax table for shell mode.")
--- a/lisp/simple.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/simple.el	Tue Sep 21 09:34:12 2004 +0000
@@ -282,7 +282,8 @@
   "Major mode not specialized for anything in particular.
 Other major modes are defined by comparison with this one."
   (interactive)
-  (kill-all-local-variables))
+  (kill-all-local-variables)
+  (run-hooks 'after-change-major-mode-hook))
 
 ;; Making and deleting lines.
 
--- a/lisp/startup.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/startup.el	Tue Sep 21 09:34:12 2004 +0000
@@ -810,9 +810,14 @@
 			    ((eq system-type 'ms-dos)
 			     (concat "~" init-file-user "/_emacs"))
 			    ((eq system-type 'windows-nt)
+			     ;; Prefer .emacs on Windows.
 			     (if (directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
 				 "~/.emacs"
-			       "~/_emacs"))
+			       ;; Also support _emacs for compatibility.
+			       (if (directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
+				   "~/_emacs"
+				 ;; But default to .emacs if _emacs does not exist.
+				 "~/.emacs")))
 			    ((eq system-type 'vax-vms)
 			     "sys$login:.emacs")
 			    (t
--- a/lisp/subr.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/subr.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1,7 +1,7 @@
 ;;; subr.el --- basic lisp subroutines for Emacs
 
-;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001, 2002, 03, 2004
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1992, 1994, 1995, 1999, 2000, 2001, 2002, 2003,
+;;   2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: internal
@@ -683,7 +683,7 @@
       (setq event (car event)))
   (if (symbolp event)
       (car (get event 'event-symbol-elements))
-    (let ((base (logand event (1- (lsh 1 18)))))
+    (let ((base (logand event (1- ?\A-\^@))))
       (downcase (if (< base 32) (logior base 64) base)))))
 
 (defsubst mouse-movement-p (object)
@@ -1937,9 +1937,15 @@
 (make-variable-buffer-local 'delayed-mode-hooks)
 (put 'delay-mode-hooks 'permanent-local t)
 
+(defvar after-change-major-mode-hook nil
+  "Mode independent hook run at the end of major mode functions.
+This is run just before the mode dependent hooks.")
+
 (defun run-mode-hooks (&rest hooks)
   "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
 Execution is delayed if `delay-mode-hooks' is non-nil.
+If `delay-mode-hooks' is nil, run `after-change-major-mode-hook'
+after running the mode hooks.
 Major mode functions should use this."
   (if delay-mode-hooks
       ;; Delaying case.
@@ -1948,7 +1954,8 @@
     ;; Normal case, just run the hook as before plus any delayed hooks.
     (setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
     (setq delayed-mode-hooks nil)
-    (apply 'run-hooks hooks)))
+    (apply 'run-hooks hooks)
+    (run-hooks 'after-change-major-mode-hook)))
 
 (defmacro delay-mode-hooks (&rest body)
   "Execute BODY, but delay any `run-mode-hooks'.
@@ -2644,5 +2651,5 @@
   (put symbol 'abortfunc (or abortfunc 'kill-buffer))
   (put symbol 'hookvar (or hookvar 'mail-send-hook)))
 
-;;; arch-tag: f7e0e6e5-70aa-4897-ae72-7a3511ec40bc
+;; arch-tag: f7e0e6e5-70aa-4897-ae72-7a3511ec40bc
 ;;; subr.el ends here
--- a/lisp/term.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/term.el	Tue Sep 21 09:34:12 2004 +0000
@@ -396,7 +396,7 @@
 
 ;; This is passed to the inferior in the EMACS environment variable,
 ;; so it is important to increase it if there are protocol-relevant changes.
-(defconst term-protocol-version "0.95")
+(defconst term-protocol-version "0.96")
 
 (eval-when-compile
   (require 'ange-ftp))
@@ -457,7 +457,7 @@
 ;;		we want suppressed.
 (defvar term-terminal-parameter)
 (defvar term-terminal-previous-parameter)
-(defvar term-current-face 'term-default)
+(defvar term-current-face 'default)
 (defvar term-scroll-start 0) ;; Top-most line (inclusive) of scrolling region.
 (defvar term-scroll-end) ;; Number of line (zero-based) after scrolling region.
 (defvar term-pager-count nil) ;; If nil, paging is disabled.
@@ -1363,11 +1363,14 @@
 (defvar term-termcap-format
   "%s%s:li#%d:co#%d:cl=\\E[H\\E[J:cd=\\E[J:bs:am:xn:cm=\\E[%%i%%d;%%dH\
 :nd=\\E[C:up=\\E[A:ce=\\E[K:ho=\\E[H:pt\
-:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=\\n\
+:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=^J\
 :te=\\E[2J\\E[?47l\\E8:ti=\\E7\\E[?47h\
 :dc=\\E[P:DC=\\E[%%dP:IC=\\E[%%d@:im=\\E[4h:ei=\\E[4l:mi:\
 :so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:md=\\E[1m:mr=\\E[7m:me=\\E[m\
-:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC"
+:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC\
+:kl=\\EOD:kd=\\EOB:kr=\\EOC:ku=\\EOA:kN=\\E[6~:kP=\\E[5~:@7=\\E[4~:kh=\\E[1~\
+:mk=\\E[8m:cb=\\E[1K:op=\\E[39;49m:Co#8:pa#64:AB=\\E[4%%dm:AF=\\E[3%%dm:cr=^M\
+:bl=^G:do=^J:le=^H:ta=^I:se=\E[27m:ue=\E24m:"
 ;;; : -undefine ic
   "termcap capabilities supported")
 
@@ -1384,10 +1387,9 @@
 	 (nconc
 	  (list
 	   (format "TERM=%s" term-term-name)
-	   (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
-	       (format "TERMINFO=%s" data-directory)
-	    (format term-termcap-format "TERMCAP="
-		    term-term-name term-height term-width))
+	   (format "TERMINFO=%s" data-directory)
+	   (format term-termcap-format "TERMCAP="
+		   term-term-name term-height term-width)
 	   ;; Breaks `./configure' of w3 and url which try to run $EMACS.
 	   (format "EMACS=%s (term:%s)" emacs-version term-protocol-version)
 	   (format "LINES=%d" term-height)
@@ -1407,18 +1409,6 @@
 	   ".."
 	   command switches)))
 
-;;; This should be in Emacs, but it isn't.
-(defun term-mem (item list &optional elt=)
-  "Test to see if ITEM is equal to an item in LIST.
-Option comparison function ELT= defaults to equal."
-  (let ((elt= (or elt= (function equal)))
-	(done nil))
-    (while (and list (not done))
-      (if (funcall elt= item (car list))
-	  (setq done list)
-	  (setq list (cdr list))))
-    done))
-
 
 ;;; Input history processing in a buffer
 ;;; ===========================================================================
@@ -2643,314 +2633,310 @@
 ;;; It emulates (most of the features of) a VT100/ANSI-style terminal.
 
 (defun term-emulate-terminal (proc str)
-  (let* ((previous-buffer (current-buffer))
-	 (i 0) char funny count save-point save-marker old-point temp win
-	 (selected (selected-window))
-	 last-win
-	 (str-length (length str)))
-    (unwind-protect
-	(progn
-	  (set-buffer (process-buffer proc))
-
-;;; Let's handle the messages. -mm
-
-	  (setq str (term-handle-ansi-terminal-messages str))
-	  (setq str-length (length str))
-
-	  (if (marker-buffer term-pending-delete-marker)
-	      (progn
-		;; Delete text following term-pending-delete-marker.
-		(delete-region term-pending-delete-marker (process-mark proc))
-		(set-marker term-pending-delete-marker nil)))
-
-	  (if (eq (window-buffer) (current-buffer))
-	      (progn
-		(setq term-vertical-motion (symbol-function 'vertical-motion))
-		(term-check-size proc))
-	    (setq term-vertical-motion
-		  (symbol-function 'buffer-vertical-motion)))
-
-	  (setq save-marker (copy-marker (process-mark proc)))
-
-	  (if (/= (point) (process-mark proc))
-	      (progn (setq save-point (point-marker))
-		     (goto-char (process-mark proc))))
-
-	  (save-restriction
-	    ;; If the buffer is in line mode, and there is a partial
-	    ;; input line, save the line (by narrowing to leave it
-	    ;; outside the restriction ) until we're done with output.
-	    (if (and (> (point-max) (process-mark proc))
-		     (term-in-line-mode))
-		(narrow-to-region (point-min) (process-mark proc)))
-
-	    (if term-log-buffer
-		(princ str term-log-buffer))
-	    (cond ((eq term-terminal-state 4) ;; Have saved pending output.
-		   (setq str (concat term-terminal-parameter str))
-		   (setq term-terminal-parameter nil)
-		   (setq str-length (length str))
-		   (setq term-terminal-state 0)))
-
-	    (while (< i str-length)
-	      (setq char (aref str i))
-	      (cond ((< term-terminal-state 2)
-		     ;; Look for prefix of regular chars
-		     (setq funny
-			   (string-match "[\r\n\000\007\033\t\b\032\016\017]"
-					 str i))
-		     (if (not funny) (setq funny str-length))
-		     (cond ((> funny i)
-			    (cond ((eq term-terminal-state 1)
-				   (term-move-columns 1)
-				   (setq term-terminal-state 0)))
-			    (setq count (- funny i))
-			    (setq temp (- (+ (term-horizontal-column) count)
-					  term-width))
-			    (cond ((<= temp 0)) ;; All count chars fit in line.
-				  ((> count temp) ;; Some chars fit.
-				   ;; This iteration, handle only what fits.
-				   (setq count (- count temp))
-				   (setq funny (+ count i)))
-				  ((or (not (or term-pager-count
-						term-scroll-with-delete))
-				       (>  (term-handle-scroll 1) 0))
-				   (term-adjust-current-row-cache 1)
-				   (setq count (min count term-width))
-				   (setq funny (+ count i))
-				   (setq term-start-line-column
-					 term-current-column))
-				  (t ;; Doing PAGER processing.
-				   (setq count 0 funny i)
-				   (setq term-current-column nil)
-				   (setq term-start-line-column nil)))
-			    (setq old-point (point))
-
-			    ;; Insert a string, check how many columns
-			    ;; we moved, then delete that many columns
-			    ;; following point if not eob nor insert-mode.
-			    (let ((old-column (current-column))
-				  columns pos)
-			      (insert (substring str i funny))
-			      (setq term-current-column (current-column)
-				    columns (- term-current-column old-column))
-			      (when (not (or (eobp) term-insert-mode))
-				(setq pos (point))
-				(term-move-columns columns)
-				(delete-region pos (point))))
-			    (setq term-current-column nil)
-
-			    (put-text-property old-point (point)
-					       'face term-current-face)
-			    ;; If the last char was written in last column,
-			    ;; back up one column, but remember we did so.
-			    ;; Thus we emulate xterm/vt100-style line-wrapping.
-			    (cond ((eq temp 0)
-				   (term-move-columns -1)
-				   (setq term-terminal-state 1)))
-			    (setq i (1- funny)))
-			   ((and (setq term-terminal-state 0)
-			    (eq char ?\^I)) ; TAB
-			    ;; FIXME:  Does not handle line wrap!
-			    (setq count (term-current-column))
-			    (setq count (+ count 8 (- (mod count 8))))
-			    (if (< (move-to-column count nil) count)
-				(term-insert-char char 1))
-			    (setq term-current-column count))
-			   ((eq char ?\r)
-			    ;; Optimize CRLF at end of buffer:
-			    (cond ((and (< (setq temp (1+ i)) str-length)
-					(eq (aref str temp) ?\n)
-					(= (point) (point-max))
-					(not (or term-pager-count
-						 term-kill-echo-list
-						 term-scroll-with-delete)))
-				   (insert ?\n)
-				   (term-adjust-current-row-cache 1)
-				   (setq term-start-line-column 0)
-				   (setq term-current-column 0)
-				   (setq i temp))
-				  (t ;; Not followed by LF or can't optimize:
-				   (term-vertical-motion 0)
-				   (setq term-current-column term-start-line-column))))
-			   ((eq char ?\n)
-			    (if (not (and term-kill-echo-list
-					  (term-check-kill-echo-list)))
-				(term-down 1 t)))
-			   ((eq char ?\b)
-			    (term-move-columns -1))
-			   ((eq char ?\033) ; Escape
-			    (setq term-terminal-state 2))
-			   ((eq char 0)) ; NUL: Do nothing
-			   ((eq char ?\016)) ; Shift Out - ignored
-			   ((eq char ?\017)) ; Shift In - ignored
-			   ((eq char ?\^G)
-			    (beep t)) ; Bell
-			   ((eq char ?\032)
-			    (let ((end (string-match "\r?$" str i)))
-			      (if end
-				  (funcall term-command-hook
-					   (prog1 (substring str (1+ i) end)
-					     (setq i (match-end 0))))
-				(setq term-terminal-parameter
-				      (substring str i))
-				(setq term-terminal-state 4)
-				(setq i str-length))))
-			   (t ; insert char FIXME: Should never happen
-			    (term-move-columns 1)
-			    (backward-delete-char 1)
-			    (insert char))))
-		    ((eq term-terminal-state 2) ; Seen Esc
-		     (cond ((eq char ?\133) ;; ?\133 = ?[
+  (with-current-buffer (process-buffer proc)
+    (let* ((i 0) char funny count save-point save-marker old-point temp win
+	   (buffer-undo-list t)
+	   (selected (selected-window))
+	   last-win
+	   (str-length (length str)))
+      (save-selected-window
+
+	;; Let's handle the messages. -mm
+
+	(setq str (term-handle-ansi-terminal-messages str))
+	(setq str-length (length str))
+
+	(if (marker-buffer term-pending-delete-marker)
+	    (progn
+	      ;; Delete text following term-pending-delete-marker.
+	      (delete-region term-pending-delete-marker (process-mark proc))
+	      (set-marker term-pending-delete-marker nil)))
+
+	(if (eq (window-buffer) (current-buffer))
+	    (progn
+	      (setq term-vertical-motion (symbol-function 'vertical-motion))
+	      (term-check-size proc))
+	  (setq term-vertical-motion
+		(symbol-function 'buffer-vertical-motion)))
+
+	(setq save-marker (copy-marker (process-mark proc)))
+
+	(if (/= (point) (process-mark proc))
+	    (progn (setq save-point (point-marker))
+		   (goto-char (process-mark proc))))
+
+	(save-restriction
+	  ;; If the buffer is in line mode, and there is a partial
+	  ;; input line, save the line (by narrowing to leave it
+	  ;; outside the restriction ) until we're done with output.
+	  (if (and (> (point-max) (process-mark proc))
+		   (term-in-line-mode))
+	      (narrow-to-region (point-min) (process-mark proc)))
+
+	  (if term-log-buffer
+	      (princ str term-log-buffer))
+	  (cond ((eq term-terminal-state 4) ;; Have saved pending output.
+		 (setq str (concat term-terminal-parameter str))
+		 (setq term-terminal-parameter nil)
+		 (setq str-length (length str))
+		 (setq term-terminal-state 0)))
+
+	  (while (< i str-length)
+	    (setq char (aref str i))
+	    (cond ((< term-terminal-state 2)
+		   ;; Look for prefix of regular chars
+		   (setq funny
+			 (string-match "[\r\n\000\007\033\t\b\032\016\017]"
+				       str i))
+		   (if (not funny) (setq funny str-length))
+		   (cond ((> funny i)
+			  (cond ((eq term-terminal-state 1)
+				 (term-move-columns 1)
+				 (setq term-terminal-state 0)))
+			  (setq count (- funny i))
+			  (setq temp (- (+ (term-horizontal-column) count)
+					term-width))
+			  (cond ((<= temp 0)) ;; All count chars fit in line.
+				((> count temp)	;; Some chars fit.
+				 ;; This iteration, handle only what fits.
+				 (setq count (- count temp))
+				 (setq funny (+ count i)))
+				((or (not (or term-pager-count
+					      term-scroll-with-delete))
+				     (>  (term-handle-scroll 1) 0))
+				 (term-adjust-current-row-cache 1)
+				 (setq count (min count term-width))
+				 (setq funny (+ count i))
+				 (setq term-start-line-column
+				       term-current-column))
+				(t ;; Doing PAGER processing.
+				 (setq count 0 funny i)
+				 (setq term-current-column nil)
+				 (setq term-start-line-column nil)))
+			  (setq old-point (point))
+
+			  ;; Insert a string, check how many columns
+			  ;; we moved, then delete that many columns
+			  ;; following point if not eob nor insert-mode.
+			  (let ((old-column (current-column))
+				columns pos)
+			    (insert (substring str i funny))
+			    (setq term-current-column (current-column)
+				  columns (- term-current-column old-column))
+			    (when (not (or (eobp) term-insert-mode))
+			      (setq pos (point))
+			      (term-move-columns columns)
+			      (delete-region pos (point))))
+			  (setq term-current-column nil)
+
+			  (put-text-property old-point (point)
+					     'face term-current-face)
+			  ;; If the last char was written in last column,
+			  ;; back up one column, but remember we did so.
+			  ;; Thus we emulate xterm/vt100-style line-wrapping.
+			  (cond ((eq temp 0)
+				 (term-move-columns -1)
+				 (setq term-terminal-state 1)))
+			  (setq i (1- funny)))
+			 ((and (setq term-terminal-state 0)
+			       (eq char ?\^I)) ; TAB
+			  ;; FIXME:  Does not handle line wrap!
+			  (setq count (term-current-column))
+			  (setq count (+ count 8 (- (mod count 8))))
+			  (if (< (move-to-column count nil) count)
+			      (term-insert-char char 1))
+			  (setq term-current-column count))
+			 ((eq char ?\r)
+			  ;; Optimize CRLF at end of buffer:
+			  (cond ((and (< (setq temp (1+ i)) str-length)
+				      (eq (aref str temp) ?\n)
+				      (= (point) (point-max))
+				      (not (or term-pager-count
+					       term-kill-echo-list
+					       term-scroll-with-delete)))
+				 (insert ?\n)
+				 (term-adjust-current-row-cache 1)
+				 (setq term-start-line-column 0)
+				 (setq term-current-column 0)
+				 (setq i temp))
+				(t ;; Not followed by LF or can't optimize:
+				 (term-vertical-motion 0)
+				 (setq term-current-column term-start-line-column))))
+			 ((eq char ?\n)
+			  (if (not (and term-kill-echo-list
+					(term-check-kill-echo-list)))
+			      (term-down 1 t)))
+			 ((eq char ?\b)
+			  (term-move-columns -1))
+			 ((eq char ?\033) ; Escape
+			  (setq term-terminal-state 2))
+			 ((eq char 0))	       ; NUL: Do nothing
+			 ((eq char ?\016))     ; Shift Out - ignored
+			 ((eq char ?\017))     ; Shift In - ignored
+			 ((eq char ?\^G)
+			  (beep t))	; Bell
+			 ((eq char ?\032)
+			  (let ((end (string-match "\r?$" str i)))
+			    (if end
+				(funcall term-command-hook
+					 (prog1 (substring str (1+ i) end)
+					   (setq i (match-end 0))))
+			      (setq term-terminal-parameter
+				    (substring str i))
+			      (setq term-terminal-state 4)
+			      (setq i str-length))))
+			 (t   ; insert char FIXME: Should never happen
+			  (term-move-columns 1)
+			  (backward-delete-char 1)
+			  (insert char))))
+		  ((eq term-terminal-state 2)	  ; Seen Esc
+		   (cond ((eq char ?\133)	  ;; ?\133 = ?[
 
 ;;; Some modifications to cope with multiple settings like ^[[01;32;43m -mm
 ;;; Note that now the init value of term-terminal-previous-parameter has
 ;;; been changed to -1
 
-			    (make-local-variable 'term-terminal-parameter)
-			    (make-local-variable 'term-terminal-previous-parameter)
-			    (make-local-variable 'term-terminal-previous-parameter-2)
-			    (make-local-variable 'term-terminal-previous-parameter-3)
-			    (make-local-variable 'term-terminal-previous-parameter-4)
-			    (make-local-variable 'term-terminal-more-parameters)
-			    (setq term-terminal-parameter 0)
-			    (setq term-terminal-previous-parameter -1)
-			    (setq term-terminal-previous-parameter-2 -1)
-			    (setq term-terminal-previous-parameter-3 -1)
-			    (setq term-terminal-previous-parameter-4 -1)
-			    (setq term-terminal-more-parameters 0)
-			    (setq term-terminal-state 3))
-			   ((eq char ?D) ;; scroll forward
-			    (term-handle-deferred-scroll)
-			    (term-down 1 t)
-			    (setq term-terminal-state 0))
-			   ((eq char ?M) ;; scroll reversed
-			    (term-insert-lines 1)
-			    (setq term-terminal-state 0))
-			   ((eq char ?7) ;; Save cursor
-			    (term-handle-deferred-scroll)
-			    (setq term-saved-cursor
-				  (cons (term-current-row)
-					(term-horizontal-column)))
-			    (setq term-terminal-state 0))
-			   ((eq char ?8) ;; Restore cursor
-			    (if term-saved-cursor
-				(term-goto (car term-saved-cursor)
-					   (cdr term-saved-cursor)))
-			    (setq term-terminal-state 0))
-			   ((setq term-terminal-state 0))))
-		    ((eq term-terminal-state 3) ; Seen Esc [
-		     (cond ((and (>= char ?0) (<= char ?9))
-			    (setq term-terminal-parameter
-				  (+ (* 10 term-terminal-parameter) (- char ?0))))
-			   ((eq char ?\;)
+			  (make-local-variable 'term-terminal-parameter)
+			  (make-local-variable 'term-terminal-previous-parameter)
+			  (make-local-variable 'term-terminal-previous-parameter-2)
+			  (make-local-variable 'term-terminal-previous-parameter-3)
+			  (make-local-variable 'term-terminal-previous-parameter-4)
+			  (make-local-variable 'term-terminal-more-parameters)
+			  (setq term-terminal-parameter 0)
+			  (setq term-terminal-previous-parameter -1)
+			  (setq term-terminal-previous-parameter-2 -1)
+			  (setq term-terminal-previous-parameter-3 -1)
+			  (setq term-terminal-previous-parameter-4 -1)
+			  (setq term-terminal-more-parameters 0)
+			  (setq term-terminal-state 3))
+			 ((eq char ?D) ;; scroll forward
+			  (term-handle-deferred-scroll)
+			  (term-down 1 t)
+			  (setq term-terminal-state 0))
+			 ((eq char ?M) ;; scroll reversed
+			  (term-insert-lines 1)
+			  (setq term-terminal-state 0))
+			 ((eq char ?7) ;; Save cursor
+			  (term-handle-deferred-scroll)
+			  (setq term-saved-cursor
+				(cons (term-current-row)
+				      (term-horizontal-column)))
+			  (setq term-terminal-state 0))
+			 ((eq char ?8) ;; Restore cursor
+			  (if term-saved-cursor
+			      (term-goto (car term-saved-cursor)
+					 (cdr term-saved-cursor)))
+			  (setq term-terminal-state 0))
+			 ((setq term-terminal-state 0))))
+		  ((eq term-terminal-state 3) ; Seen Esc [
+		   (cond ((and (>= char ?0) (<= char ?9))
+			  (setq term-terminal-parameter
+				(+ (* 10 term-terminal-parameter) (- char ?0))))
+			 ((eq char ?\;)
 ;;; Some modifications to cope with multiple settings like ^[[01;32;43m -mm
-			    (setq term-terminal-more-parameters 1)
-			    (setq term-terminal-previous-parameter-4
-					  term-terminal-previous-parameter-3)
-			    (setq term-terminal-previous-parameter-3
-					  term-terminal-previous-parameter-2)
-			    (setq term-terminal-previous-parameter-2
-					  term-terminal-previous-parameter)
-			    (setq term-terminal-previous-parameter
-					  term-terminal-parameter)
-			    (setq term-terminal-parameter 0))
-			   ((eq char ??)) ; Ignore ?
-			   (t
-			    (term-handle-ansi-escape proc char)
-			    (setq term-terminal-more-parameters 0)
-			    (setq term-terminal-previous-parameter-4 -1)
-			    (setq term-terminal-previous-parameter-3 -1)
-			    (setq term-terminal-previous-parameter-2 -1)
-			    (setq term-terminal-previous-parameter -1)
-			    (setq term-terminal-state 0)))))
-	      (if (term-handling-pager)
-		  ;; Finish stuff to get ready to handle PAGER.
-		  (progn
-		    (if (> (% (current-column) term-width) 0)
+			  (setq term-terminal-more-parameters 1)
+			  (setq term-terminal-previous-parameter-4
+				term-terminal-previous-parameter-3)
+			  (setq term-terminal-previous-parameter-3
+				term-terminal-previous-parameter-2)
+			  (setq term-terminal-previous-parameter-2
+				term-terminal-previous-parameter)
+			  (setq term-terminal-previous-parameter
+				term-terminal-parameter)
+			  (setq term-terminal-parameter 0))
+			 ((eq char ??)) ; Ignore ?
+			 (t
+			  (term-handle-ansi-escape proc char)
+			  (setq term-terminal-more-parameters 0)
+			  (setq term-terminal-previous-parameter-4 -1)
+			  (setq term-terminal-previous-parameter-3 -1)
+			  (setq term-terminal-previous-parameter-2 -1)
+			  (setq term-terminal-previous-parameter -1)
+			  (setq term-terminal-state 0)))))
+	    (if (term-handling-pager)
+		;; Finish stuff to get ready to handle PAGER.
+		(progn
+		  (if (> (% (current-column) term-width) 0)
+		      (setq term-terminal-parameter
+			    (substring str i))
+		    ;; We're at column 0.  Goto end of buffer; to compensate,
+		    ;; prepend a ?\r for later.  This looks more consistent.
+		    (if (zerop i)
 			(setq term-terminal-parameter
-			      (substring str i))
-		      ;; We're at column 0.  Goto end of buffer; to compensate,
-		      ;; prepend a ?\r for later.  This looks more consistent.
-		      (if (zerop i)
-			  (setq term-terminal-parameter
-				(concat "\r" (substring str i)))
-			(setq term-terminal-parameter (substring str (1- i)))
-			(aset term-terminal-parameter 0 ?\r))
-		      (goto-char (point-max)))
-		    (setq term-terminal-state 4)
-		    (make-local-variable 'term-pager-old-filter)
-		    (setq term-pager-old-filter (process-filter proc))
-		    (set-process-filter proc term-pager-filter)
-		    (setq i str-length)))
-	      (setq i (1+ i))))
-
-	  (if (>= (term-current-row) term-height)
-	      (term-handle-deferred-scroll))
-
-	  (set-marker (process-mark proc) (point))
-	  (if save-point
-	      (progn (goto-char save-point)
-		     (set-marker save-point nil)))
-
-	  ;; Check for a pending filename-and-line number to display.
-	  ;; We do this before scrolling, because we might create a new window.
-	  (if (and term-pending-frame
-		   (eq (window-buffer selected) (current-buffer)))
-	      (progn (term-display-line (car term-pending-frame)
-					(cdr term-pending-frame))
-		     (setq term-pending-frame nil)
-		 ;; We have created a new window, so check the window size.
-		     (term-check-size proc)))
-
-	  ;; Scroll each window displaying the buffer but (by default)
-	  ;; only if the point matches the process-mark we started with.
-	  (setq win selected)
-	  ;; Avoid infinite loop in strange case where minibuffer window
-	  ;; is selected but not active.
-	  (while (window-minibuffer-p win)
-	    (setq win (next-window win nil t)))
-	  (setq last-win win)
-	  (while (progn
-		   (setq win (next-window win nil t))
-		   (if (eq (window-buffer win) (process-buffer proc))
-		       (let ((scroll term-scroll-to-bottom-on-output))
-			 (select-window win)
-			 (if (or (= (point) save-marker)
-				 (eq scroll t) (eq scroll 'all)
-				 ;; Maybe user wants point to jump to the end.
-				 (and (eq selected win)
-				      (or (eq scroll 'this) (not save-point)))
-				 (and (eq scroll 'others)
-				      (not (eq selected win))))
-			     (progn
-			       (goto-char term-home-marker)
-			       (recenter 0)
-			       (goto-char (process-mark proc))
-			       (if (not (pos-visible-in-window-p (point) win))
-				   (recenter -1))))
-			 ;; Optionally scroll so that the text
-			 ;; ends at the bottom of the window.
-			 (if (and term-scroll-show-maximum-output
-				  (>= (point) (process-mark proc)))
-			     (save-excursion
-			       (goto-char (point-max))
-			       (recenter -1)))))
-		   (not (eq win last-win))))
+			      (concat "\r" (substring str i)))
+		      (setq term-terminal-parameter (substring str (1- i)))
+		      (aset term-terminal-parameter 0 ?\r))
+		    (goto-char (point-max)))
+		  (setq term-terminal-state 4)
+		  (make-local-variable 'term-pager-old-filter)
+		  (setq term-pager-old-filter (process-filter proc))
+		  (set-process-filter proc term-pager-filter)
+		  (setq i str-length)))
+	    (setq i (1+ i))))
+
+	(if (>= (term-current-row) term-height)
+	    (term-handle-deferred-scroll))
+
+	(set-marker (process-mark proc) (point))
+	(if save-point
+	    (progn (goto-char save-point)
+		   (set-marker save-point nil)))
+
+	;; Check for a pending filename-and-line number to display.
+	;; We do this before scrolling, because we might create a new window.
+	(if (and term-pending-frame
+		 (eq (window-buffer selected) (current-buffer)))
+	    (progn (term-display-line (car term-pending-frame)
+				      (cdr term-pending-frame))
+		   (setq term-pending-frame nil)
+		   ;; We have created a new window, so check the window size.
+		   (term-check-size proc)))
+
+	;; Scroll each window displaying the buffer but (by default)
+	;; only if the point matches the process-mark we started with.
+	(setq win selected)
+	;; Avoid infinite loop in strange case where minibuffer window
+	;; is selected but not active.
+	(while (window-minibuffer-p win)
+	  (setq win (next-window win nil t)))
+	(setq last-win win)
+	(while (progn
+		 (setq win (next-window win nil t))
+		 (if (eq (window-buffer win) (process-buffer proc))
+		     (let ((scroll term-scroll-to-bottom-on-output))
+		       (select-window win)
+		       (if (or (= (point) save-marker)
+			       (eq scroll t) (eq scroll 'all)
+			       ;; Maybe user wants point to jump to the end.
+			       (and (eq selected win)
+				    (or (eq scroll 'this) (not save-point)))
+			       (and (eq scroll 'others)
+				    (not (eq selected win))))
+			   (progn
+			     (goto-char term-home-marker)
+			     (recenter 0)
+			     (goto-char (process-mark proc))
+			     (if (not (pos-visible-in-window-p (point) win))
+				 (recenter -1))))
+		       ;; Optionally scroll so that the text
+		       ;; ends at the bottom of the window.
+		       (if (and term-scroll-show-maximum-output
+				(>= (point) (process-mark proc)))
+			   (save-excursion
+			     (goto-char (point-max))
+			     (recenter -1)))))
+		 (not (eq win last-win))))
 
 ;;; Stolen from comint.el and adapted -mm
-	  (if (> term-buffer-maximum-size 0)
-		  (save-excursion
-			(goto-char (process-mark (get-buffer-process (current-buffer))))
-			(forward-line (- term-buffer-maximum-size))
-			(beginning-of-line)
-			(delete-region (point-min) (point))))
+	(if (> term-buffer-maximum-size 0)
+	    (save-excursion
+	      (goto-char (process-mark (get-buffer-process (current-buffer))))
+	      (forward-line (- term-buffer-maximum-size))
+	      (beginning-of-line)
+	      (delete-region (point-min) (point))))
 ;;;
 
-	  (set-marker save-marker nil))
-      ;; unwind-protect cleanup-forms follow:
-      (set-buffer previous-buffer)
-      (select-window selected))))
+	(set-marker save-marker nil)))))
 
 (defun term-handle-deferred-scroll ()
   (let ((count (- (term-current-row) term-height)))
@@ -2988,6 +2974,14 @@
    ((eq parameter 8)
     (setq term-ansi-current-invisible 1))
 
+;;; Reset reverse (i.e. terminfo rmso)
+   ((eq parameter 24)
+    (setq term-ansi-current-reverse 0))
+
+;;; Reset underline (i.e. terminfo rmul)
+   ((eq parameter 27)
+    (setq term-ansi-current-underline 0))
+
 ;;; Foreground
    ((and (>= parameter 30) (<= parameter 37))
     (setq term-ansi-current-color (- parameter 29)))
@@ -3042,9 +3036,13 @@
 		    )
 	    (setq term-current-face
 		  (list :background
-			(elt ansi-term-color-vector term-ansi-current-color)
+			(if (= term-ansi-current-color 0)
+			    (face-foreground 'default)
+			    (elt ansi-term-color-vector term-ansi-current-color))
 			:foreground
-			(elt ansi-term-color-vector term-ansi-current-bg-color)))
+			(if (= term-ansi-current-bg-color 0)
+			    (face-background 'default)
+			(elt ansi-term-color-vector term-ansi-current-bg-color))))
 	    (if (= term-ansi-current-bold 1)
 		(setq term-current-face
 		      (append '(:weight bold) term-current-face)))
@@ -3501,7 +3499,7 @@
     (if (and check-for-scroll (or term-scroll-with-delete term-pager-count))
 	(setq down (term-handle-scroll down)))
     (term-adjust-current-row-cache down)
-    (if (/= (point) (point-max))
+    (if (or (/= (point) (point-max)) (< down 0))
 	(setq down (- down (term-vertical-motion down))))
     ;; Extend buffer with extra blank lines if needed.
     (cond ((> down 0)
--- a/lisp/textmodes/enriched.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/textmodes/enriched.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1,6 +1,6 @@
 ;;; enriched.el --- read and save files in text/enriched format
 
-;; Copyright (c) 1994, 1995, 1996, 2002 Free Software Foundation, Inc.
+;; Copyright (c) 1994, 1995, 1996, 2002, 2004 Free Software Foundation, Inc.
 
 ;; Author: Boris Goldowsky <boris@gnu.org>
 ;; Keywords: wp, faces
@@ -141,7 +141,6 @@
 
 ;;; Internal variables
 
-
 (defcustom enriched-mode-hook nil
   "Hook run after entering/leaving Enriched mode.
 If you set variables in this hook, you should arrange for them to be restored
@@ -155,6 +154,11 @@
 The value is a list of \(VAR VALUE VAR VALUE...).")
 (make-variable-buffer-local 'enriched-old-bindings)
 
+;; Technical internal variable.  Bound to t if `enriched-mode' is
+;; being rerun by a major mode to allow it to restore buffer-local
+;; variables and to correctly update `enriched-old-bindings'.
+(defvar enriched-rerun-flag nil)
+
 ;;;
 ;;; Define the mode
 ;;;
@@ -181,23 +185,21 @@
 	 (while enriched-old-bindings
 	   (set (pop enriched-old-bindings) (pop enriched-old-bindings))))
 
-	((memq 'text/enriched buffer-file-format)
+	((and (memq 'text/enriched buffer-file-format)
+	      (not enriched-rerun-flag))
 	 ;; Mode already on; do nothing.
 	 nil)
 
 	(t				; Turn mode on
-	 (push 'text/enriched buffer-file-format)
+	 (add-to-list 'buffer-file-format 'text/enriched)
 	 ;; Save old variable values before we change them.
 	 ;; These will be restored if we exit Enriched mode.
 	 (setq enriched-old-bindings
 	       (list 'buffer-display-table buffer-display-table
-		     'indent-line-function indent-line-function
 		     'default-text-properties default-text-properties))
-	 (make-local-variable 'indent-line-function)
 	 (make-local-variable 'default-text-properties)
-	 (setq indent-line-function 'indent-to-left-margin ;WHY??  -sm
-	       buffer-display-table  enriched-display-table)
-	 (use-hard-newlines 1 nil)
+	 (setq buffer-display-table  enriched-display-table)
+	 (use-hard-newlines 1 (if enriched-rerun-flag 'never nil))
 	 (let ((sticky (plist-get default-text-properties 'front-sticky))
 	       (p enriched-par-props))
 	   (dolist (x p)
@@ -207,6 +209,20 @@
 		     (plist-put default-text-properties
 				'front-sticky sticky)))))))
 
+(defun enriched-before-change-major-mode ()
+  (when enriched-mode
+    (while enriched-old-bindings
+      (set (pop enriched-old-bindings) (pop enriched-old-bindings)))))
+
+(add-hook 'change-major-mode-hook 'enriched-before-change-major-mode)
+
+(defun enriched-after-change-major-mode ()
+  (when enriched-mode
+    (let ((enriched-rerun-flag t))
+      (enriched-mode 1))))
+
+(add-hook 'after-change-major-mode-hook 'enriched-after-change-major-mode)
+
 ;;;
 ;;; Keybindings
 ;;;
--- a/lisp/url/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/url/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,7 @@
+2004-09-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* url-handlers.el (url-insert-file-contents): Decode contents.
+
 2004-04-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* url-util.el (url-debug): Use with-current-buffer.
--- a/lisp/url/url-handlers.el	Sun Sep 19 04:06:19 2004 +0000
+++ b/lisp/url/url-handlers.el	Tue Sep 21 09:34:12 2004 +0000
@@ -1,6 +1,6 @@
 ;;; url-handlers.el --- file-name-handler stuff for URL loading
 
-;; Copyright (c) 1996,97,98,1999,2004  Free Software Foundation, Inc.
+;; Copyright (c) 1996, 1997, 1998, 1999, 2004  Free Software Foundation, Inc.
 ;; Copyright (c) 1993 - 1996 by William M. Perry <wmperry@cs.indiana.edu>
 
 ;; Keywords: comm, data, processes, hypermedia
@@ -170,8 +170,7 @@
 	(handle nil))
     (if (not buffer)
 	(error "Opening input file: No such file or directory, %s" url))
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (setq handle (mm-dissect-buffer t)))
     (mm-save-part-to-file handle newname)
     (kill-buffer buffer)
@@ -194,18 +193,22 @@
     (if (not buffer)
 	(error "Opening input file: No such file or directory, %s" url))
     (if visit (setq buffer-file-name url))
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (setq handle (mm-dissect-buffer t))
       (set-buffer (mm-handle-buffer handle))
-      (if beg
-	  (setq data (buffer-substring beg end))
-	(setq data (buffer-string))))
+      (setq data (if beg (buffer-substring beg end)
+		   (buffer-string))))
     (kill-buffer buffer)
     (mm-destroy-parts handle)
     (if replace (delete-region (point-min) (point-max)))
     (save-excursion
-      (insert data))
+      (let ((start (point)))
+	(insert data)
+	;; FIXME: for text/plain data, we sometimes receive a `charset'
+	;; annotation which we could use as a hint of the locale in use
+	;; at the remote site.  Not sure how/if that should be done.  --Stef
+	(decode-coding-inserted-region
+	 start (point) buffer-file-name visit beg end replace)))
     (list url (length data))))
 
 (defun url-file-name-completion (url directory)
--- a/lispref/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/lispref/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,8 @@
+2004-09-20  Richard M. Stallman  <rms@gnu.org>
+
+	* commands.texi (Key Sequence Input):
+	Clarify downcasing in read-key-sequence.
+
 2004-09-08  Juri Linkov  <juri@jurta.org>
 
 	* minibuf.texi (Minibuffer History): Add `history-delete-duplicates'.
--- a/lispref/commands.texi	Sun Sep 19 04:06:19 2004 +0000
+++ b/lispref/commands.texi	Tue Sep 21 09:34:12 2004 +0000
@@ -2063,10 +2063,10 @@
 
 @cindex upper case key sequence
 @cindex downcasing in @code{lookup-key}
-If an input character is an upper-case letter and has no key binding,
-but its lower-case equivalent has one, then @code{read-key-sequence}
-converts the character to lower case.  Note that @code{lookup-key} does
-not perform case conversion in this way.
+If an input character is upper-case (or has the shift modifier) and
+has no key binding, but its lower-case equivalent has one, then
+@code{read-key-sequence} converts the character to lower case.  Note
+that @code{lookup-key} does not perform case conversion in this way.
 
 The function @code{read-key-sequence} also transforms some mouse events.
 It converts unbound drag events into click events, and discards unbound
--- a/man/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/man/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,13 @@
+2004-09-20  Richard M. Stallman  <rms@gnu.org>
+
+	* custom.texi (Hooks): Explain using setq to clear out a hook.
+	(File Variables): Explain multiline string constants.
+	(Non-ASCII Rebinding): Explain when you need to update
+	non-ASCII char codes in .emacs.
+
+	* building.texi (Compilation): Explain how to make a silent
+	subprocess that won't be terminated.  Explain compilation-environment.
+
 2004-09-13  Kim F. Storm  <storm@cua.dk>
 
 	* mini.texi (Repetition): Rename isearch-resume-enabled to
--- a/man/building.texi	Sun Sep 19 04:06:19 2004 +0000
+++ b/man/building.texi	Tue Sep 21 09:34:12 2004 +0000
@@ -128,6 +128,21 @@
 wait $pid                     # @r{Wait for subprocess}
 @end example
 
+  If the background process does not output to the compilation buffer,
+so you only need to prevent it from being killed when the main
+compilation process terminates, this is sufficient:
+
+@example
+nohup @var{command}; sleep 1
+@end example
+
+@vindex compilation-environment
+  You can control the environment passed to the compilation command
+with the variable @code{compilation-environment}.  Its value is a list
+of environment variable settings; each element should be a string of
+the form @code{"@var{envvarname}=@var{value}"}.  These environment
+variable settings override the usual ones.
+
 @node Grep Searching
 @section Searching with Grep under Emacs
 
--- a/man/calc.texi	Sun Sep 19 04:06:19 2004 +0000
+++ b/man/calc.texi	Tue Sep 21 09:34:12 2004 +0000
@@ -544,6 +544,9 @@
 are shown as @kbd{M-x}.  Other notations are @key{RET} for the
 Return key, @key{SPC} for the space bar, @key{TAB} for the Tab key,
 @key{DEL} for the Delete key, and @key{LFD} for the Line-Feed key.
+The @key{DEL} key is called Backspace on some keyboards, it is
+whatever key you would use to correct a simple typing error when
+regularly using Emacs.
 
 (If you don't have the @key{LFD} or @key{TAB} keys on your keyboard,
 the @kbd{C-j} and @kbd{C-i} keys are equivalent to them, respectively.
--- a/man/custom.texi	Sun Sep 19 04:06:19 2004 +0000
+++ b/man/custom.texi	Tue Sep 21 09:34:12 2004 +0000
@@ -785,11 +785,13 @@
 are not called at all.  The documentation of each abnormal hook variable
 explains in detail what is peculiar about it.
 
-  The recommended way to add a hook function to a hook (either normal or
-abnormal) is by calling @code{add-hook}.  You can use any valid Lisp
-function as the hook function, provided it can handle the proper number
-of arguments (zero arguments, in the case of a normal hook).  Of course,
-not every Lisp function is @emph{useful} in any particular hook.
+  You can set a hook variable with @code{setq} like any other Lisp
+variable, but the recommended way to add a hook function to a hook
+(either normal or abnormal) is by calling @code{add-hook}.  You can
+specify any valid Lisp function as the hook function, provided it can
+handle the proper number of arguments (zero arguments, in the case of
+a normal hook).  Of course, not every Lisp function is @emph{useful}
+in any particular hook.
 
   For example, here's how to set up a hook to turn on Auto Fill mode
 when entering Text mode and other modes based on Text mode:
@@ -830,6 +832,11 @@
 ``asking for trouble.''  However, the order is predictable: the most
 recently added hook functions are executed first.
 
+  If you play with adding various different versions of a hook
+function by calling @code{add-hook} over and over, remember that all
+the versions you added will remain in the hook variable together.
+To clear them out, you can do @code{(setq @var{hook-variable} nil)}.
+
 @node Locals
 @subsection Local Variables
 
@@ -998,8 +1005,22 @@
 that the file is intended as input for.  The example above is for a
 language where comment lines start with @samp{;;; } and end with
 @samp{***}; the local values for @code{comment-start} and
-@code{comment-end} customize the rest of Emacs for this unusual syntax.
-Don't use a prefix (or a suffix) if you don't need one.
+@code{comment-end} customize the rest of Emacs for this unusual
+syntax.  Don't use a prefix (or a suffix) if you don't need one.
+
+  If you write a multi-line string value, you should put the prefix
+and suffix on each line, even lines that start or end within the
+string.  They will be stripped off for processing the list.  If you
+want to split a long string across multiple lines of the file, you can
+use backslash-newline, which is ignored in Lisp string constants.
+Here's an example of doing this:
+
+@example
+# Local Variables:
+# compile-command: "cc foo.c -Dfoo=bar -Dhack=whatever \
+#   -Dmumble=blaah"
+# End:
+@end example
 
   Two ``variable names'' have special meanings in a local variables
 list: a value for the variable @code{mode} really sets the major mode,
@@ -1635,15 +1656,14 @@
 Type @kbd{C-q} followed by the key you want to bind, to insert @var{char}.
 
 Since this puts a non-@acronym{ASCII} character in the @file{.emacs},
-you should specify for that file a coding system that supports
-that character.  @xref{Init Syntax}.
+you should specify a coding system for that file that supports the
+character in question.  @xref{Init Syntax}.
 
-@strong{Warning:} if you change the keyboard encoding, such that the code that
-@kbd{C-q} inserts becomes different, you'll need to edit the
-Lisp expression accordingly.
-
-@strong{Warning:} @kbd{C-q} will insert the wrong code if you visit
-the file @file{.emacs} in a unibyte buffer, so don't do that.
+@strong{Warning:} if you change the keyboard encoding, or change
+between multibyte and unibyte mode, or anything that would alter which
+code @kbd{C-q} would insert for that character, you'll need to edit
+the Lisp expression accordingly, to use the character code generated
+by @kbd{C-q} in the new mode.
 
 @node Mouse Buttons
 @subsection Rebinding Mouse Buttons
--- a/src/ChangeLog	Sun Sep 19 04:06:19 2004 +0000
+++ b/src/ChangeLog	Tue Sep 21 09:34:12 2004 +0000
@@ -1,3 +1,15 @@
+2004-09-18  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xterm.c (x_term_init): Work around a bug in some X servers.
+
+2004-09-18  Richard M. Stallman  <rms@gnu.org>
+
+	* buffer.c (syms_of_buffer) <default-major-mode>: Doc fix.
+
+	* xdisp.c (try_window_reusing_current_matrix):
+	Handle the case where we reach the old displayed text,
+	out of sync with the old line boundary.
+
 2004-09-14  Stefan  <monnier@iro.umontreal.ca>
 
 	* fileio.c (Finsert_file_contents): Fix case of replacement in a
--- a/src/alloc.c	Sun Sep 19 04:06:19 2004 +0000
+++ b/src/alloc.c	Tue Sep 21 09:34:12 2004 +0000
@@ -186,8 +186,11 @@
 
 #ifndef HAVE_SHM
 
-/* Force it into data space!  Initialize it to a nonzero value;
-   otherwise some compilers put it into BSS.  */
+/* Initialize it to a nonzero value to force it into data space
+   (rather than bss space).  That way unexec will remap it into text
+   space (pure), on some systems.  We have not implemented the
+   remapping on more recent systems because this is less important
+   nowadays than in the days of small memories and timesharing.  */
 
 EMACS_INT pure[PURESIZE / sizeof (EMACS_INT)] = {1,};
 #define PUREBEG (char *) pure
--- a/src/buffer.c	Sun Sep 19 04:06:19 2004 +0000
+++ b/src/buffer.c	Tue Sep 21 09:34:12 2004 +0000
@@ -5446,7 +5446,14 @@
 
   DEFVAR_LISP_NOPRO ("default-major-mode", &buffer_defaults.major_mode,
 		     doc: /* *Major mode for new buffers.  Defaults to `fundamental-mode'.
-nil here means use current buffer's major mode.  */);
+nil here means use current buffer's major mode, provided it is not
+marked as "special".
+
+When a mode is used by default, `find-file' switches to it
+before it reads the contents into the buffer and before
+it finishes setting up the buffer.  Thus, the mode and
+its hooks should not expect certain variables such as
+`buffer-read-only' and `buffer-file-coding-system' to be set up.  */);
 
   DEFVAR_PER_BUFFER ("major-mode", &current_buffer->major_mode,
 		     make_number (Lisp_Symbol),
--- a/src/xdisp.c	Sun Sep 19 04:06:19 2004 +0000
+++ b/src/xdisp.c	Tue Sep 21 09:34:12 2004 +0000
@@ -12504,10 +12504,36 @@
       last_text_row = last_reused_text_row = NULL;
 
       while (it.current_y < it.last_visible_y
-	     && IT_CHARPOS (it) < CHARPOS (start)
 	     && !fonts_changed_p)
-	if (display_line (&it))
-	  last_text_row = it.glyph_row - 1;
+	{
+	  /* If we have reached into the characters in the START row,
+	     that means the line boundaries have changed.  So we
+	     can't start copying with the row START.  Maybe it will
+	     work to start copying with the following row.  */
+	  while (IT_CHARPOS (it) > CHARPOS (start))
+	    {
+	      /* Advance to the next row as the "start".  */
+	      start_row++;
+	      start = start_row->start.pos;
+	      /* If there are no more rows to try, or just one, give up.  */
+	      if (start_row == MATRIX_MODE_LINE_ROW (w->current_matrix) - 1
+		  || w->vscroll || MATRIX_ROW_PARTIALLY_VISIBLE_P (start_row)
+		  || CHARPOS (start) == ZV)
+		{
+		  clear_glyph_matrix (w->desired_matrix);
+		  return 0;
+		}
+
+	      start_vpos = MATRIX_ROW_VPOS (start_row, w->current_matrix);
+	    }
+	  /* If we have reached alignment,
+	     we can copy the rest of the rows.  */
+	  if (IT_CHARPOS (it) == CHARPOS (start))
+	    break;
+
+	  if (display_line (&it))
+	    last_text_row = it.glyph_row - 1;
+	}
 
       /* A value of current_y < last_visible_y means that we stopped
 	 at the previous window start, which in turn means that we
@@ -12515,12 +12541,12 @@
       if (it.current_y < it.last_visible_y)
 	{
 	  /* IT.vpos always starts from 0; it counts text lines.  */
-	  nrows_scrolled = it.vpos;
+	  nrows_scrolled = it.vpos - (start_row - MATRIX_FIRST_TEXT_ROW (w->current_matrix));
 
 	  /* Find PT if not already found in the lines displayed.  */
 	  if (w->cursor.vpos < 0)
 	    {
-	      int dy = it.current_y - first_row_y;
+	      int dy = it.current_y - start_row->y;
 
 	      row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
 	      row = row_containing_pos (w, PT, row, NULL, dy);
@@ -12540,7 +12566,7 @@
 	     scroll_run_hook will clear the cursor, and use the
 	     current matrix to get the height of the row the cursor is
 	     in.  */
-	  run.current_y = first_row_y;
+	  run.current_y = start_row->y;
 	  run.desired_y = it.current_y;
 	  run.height = it.last_visible_y - it.current_y;
 
@@ -15435,6 +15461,10 @@
 	    Lisp_Object oprops, aelt;
 	    oprops = Ftext_properties_at (make_number (0), elt);
 
+	    /* If the starting string's properties are not what
+	       we want, translate the string.  Also, if the string
+	       is risky, do that anyway.  */
+
 	    if (NILP (Fequal (props, oprops)) || risky)
 	      {
 		/* If the starting string has properties,
--- a/src/xterm.c	Sun Sep 19 04:06:19 2004 +0000
+++ b/src/xterm.c	Tue Sep 21 09:34:12 2004 +0000
@@ -10611,10 +10611,12 @@
     int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
     double pixels = DisplayHeight (dpyinfo->display, screen_number);
     double mm = DisplayHeightMM (dpyinfo->display, screen_number);
-    dpyinfo->resy = pixels * 25.4 / mm;
+    /* Mac OS X 10.3's Xserver sometimes reports 0.0mm.  */
+    dpyinfo->resy = (mm < 1) ? 100 : pixels * 25.4 / mm;
     pixels = DisplayWidth (dpyinfo->display, screen_number);
+    /* Mac OS X 10.3's Xserver sometimes reports 0.0mm.  */
     mm = DisplayWidthMM (dpyinfo->display, screen_number);
-    dpyinfo->resx = pixels * 25.4 / mm;
+    dpyinfo->resx = (mm < 1) ? 100 : pixels * 25.4 / mm;
   }
 
   dpyinfo->Xatom_wm_protocols