changeset 83209:c06211125947

Merged in changes from CVS trunk. Patches applied: * 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 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-560 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-561 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-562 Update from CVS: lisp/subr.el (after-change-major-mode-hook): Doc fix. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-563 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-564 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-565 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-30 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-249
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 23 Sep 2004 10:32:54 +0000
parents e318dfc2edc6 (current diff) 95030a5c1bb1 (diff)
children e2877f047180
files admin/FOR-RELEASE lisp/ChangeLog lisp/bindings.el lisp/files.el lisp/progmodes/tcl.el lisp/startup.el lisp/subr.el lisp/url/url-handlers.el man/ChangeLog
diffstat 69 files changed, 1806 insertions(+), 705 deletions(-) [+]
line wrap: on
line diff
--- a/admin/ChangeLog	Mon Sep 20 13:59:19 2004 +0000
+++ b/admin/ChangeLog	Thu Sep 23 10:32:54 2004 +0000
@@ -1,3 +1,8 @@
+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
--- a/admin/FOR-RELEASE	Mon Sep 20 13:59:19 2004 +0000
+++ b/admin/FOR-RELEASE	Thu Sep 23 10:32:54 2004 +0000
@@ -44,109 +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/anti.texi
-LT	man/basic.texi
-LT	man/buffers.texi
-	man/building.texi
-	man/calendar.texi
-	man/cmdargs.texi
-LT	man/commands.texi
-	man/custom.texi
-	man/dired.texi
-LT	man/display.texi
-LT	man/emacs.texi
-LT	man/entering.texi
-LT	man/files.texi
-LT	man/fixit.texi
-LT	man/frames.texi
-	man/glossary.texi
-LT	man/help.texi
-LT	man/indent.texi
-LT	man/killing.texi
-LT	man/kmacro.texi
-	man/macos.texi
-	man/maintaining.texi
-LT	man/major.texi
-LT	man/mark.texi
-LT	man/mini.texi
-	man/misc.texi
-	man/msdog.texi
-LT	man/mule.texi
-LT	man/m-x.texi
-	man/picture.texi
-	man/programs.texi
-LT	man/regs.texi
-	man/rmail.texi
-LT	man/screen.texi
-LT	man/search.texi
-	man/sending.texi
-LT	man/text.texi
-	man/trouble.texi
-LT	man/windows.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
----------------------------------------------
-LT	lispref/abbrevs.texi
-	lispref/advice.texi
-	lispref/anti.texi
-LT	lispref/backups.texi
-LT	lispref/buffers.texi
-	lispref/calendar.texi
-LT	lispref/commands.texi
-LT	lispref/compile.texi
-LT	lispref/control.texi
-	lispref/customize.texi
-	lispref/debugging.texi
-	lispref/display.texi
-	lispref/edebug.texi
-LT	lispref/elisp.texi
-LT	lispref/errors.texi
-LT	lispref/eval.texi
-LT	lispref/files.texi
-LT	lispref/frames.texi
-LT	lispref/functions.texi
-LT	lispref/hash.texi
-LT	lispref/help.texi
-	lispref/hooks.texi
-LT	lispref/internals.texi
-LT	lispref/intro.texi
-LT	lispref/keymaps.texi
-LT	lispref/lists.texi
-LT	lispref/loading.texi
-	lispref/locals.texi
-LT	lispref/macros.texi
-	lispref/maps.texi
-LT	lispref/markers.texi
-LT	lispref/minibuf.texi
-	lispref/modes.texi
-LT	lispref/nonascii.texi
-LT	lispref/numbers.texi
-LT	lispref/objects.texi
-LT	lispref/os.texi
-LT	lispref/positions.texi
-	lispref/processes.texi
-LT	lispref/searching.texi
-LT	lispref/sequences.texi
-LT	lispref/streams.texi
-LT	lispref/strings.texi
-LT	lispref/symbols.texi
-LT	lispref/syntax.texi
-	lispref/text.texi
-LT	lispref/tips.texi
-LT	lispref/variables.texi
-LT	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/NEWS	Mon Sep 20 13:59:19 2004 +0000
+++ b/etc/NEWS	Thu Sep 23 10:32:54 2004 +0000
@@ -99,6 +99,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.
 
@@ -244,6 +248,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
@@ -356,6 +361,7 @@
 	% emacsclient -s foo file1
 	% emacsclient -s bar file2
 
++++
 ** On window systems, lines which are exactly as wide as the window
 (not counting the final newline character) are no longer broken into
 two lines on the display (with just the newline on the second line).
@@ -365,6 +371,7 @@
 The new user option 'overflow-newline-into-fringe' may be set to nil to
 revert to the old behaviour of continuing such lines.
 
++++
 ** The buffer boundaries (i.e. first and last line in the buffer) may
 now be marked with angle bitmaps in the fringes.  In addition, up and
 down arrow bitmaps may be shown at the top and bottom of the left or
@@ -1402,6 +1409,11 @@
 year and day number, and moves to that date. Negative day numbers
 count backward from the end of the year.
 
+** The functions `holiday-easter-etc' and `holiday-advent' now take
+arguments, and only report on the specified holiday rather than all.
+This makes customization of the variable `christian-holidays' simpler,
+but existing customizations may need to be updated.
+
 ** The function `simple-diary-display' now by default sets a header line.
 This can be controlled through the variables `diary-header-line-flag'
 and `diary-header-line-format'.
@@ -2243,8 +2255,7 @@
 * Lisp Changes in Emacs 21.4
 
 ** Major mode functions now run the new normal hook
-`after-change-major-mode-hook', at the end, just before the mode
-dependent hooks.
+`after-change-major-mode-hook', at their very end, after the mode hooks.
 
 +++
 ** `auto-save-file-format' has been renamed to
@@ -2316,9 +2327,11 @@
 if the file is indeed remote.  (Before, the return value was t in
 this case.)
 
++++
 ** The display space :width and :align-to text properties are now
 supported on text terminals.
 
++++
 ** Support for displaying image slices
 
 *** New display property (slice X Y WIDTH HEIGHT) may be used with
@@ -2330,6 +2343,7 @@
 *** New function insert-sliced-image inserts a given image as a
 specified number of evenly sized slices (rows x columns).
 
++++
 ** New line-height and line-spacing properties for newline characters
 
 A newline may now have line-height and line-spacing text or overlay
@@ -2366,10 +2380,10 @@
 total height of the line, i.e. a varying number of pixels are inserted
 after each line to make each line exactly that many pixels high.
 
-
 ** The buffer local line-spacing variable may now have a float value,
 which is used as a height relative to the default frame line height.
 
++++
 ** Enhancements to stretch display properties
 
 The display property stretch specification form `(space PROPS)', where
@@ -2426,6 +2440,7 @@
 The form `(+ EXPR ...)' adds up the value of the expressions.
 The form `(- EXPR ...)' negates or subtracts the value of the expressions.
 
++++
 ** Normally, the cursor is displayed at the end of any overlay and
 text property string that may be present at the current window
 position.  The cursor may now be placed on any character of such
@@ -2443,7 +2458,10 @@
 preferred method for defining default faces in a way that makes a good
 use of the capabilities of the display.
 
-** New function 'define-fringe-bitmap' can now be used to change the
++++
+** Customizable fringe bitmaps
+
+*** New function 'define-fringe-bitmap' can now be used to change the
 built-in fringe bitmaps, as well as create new fringe bitmaps.
 The return value is a number identifying the new fringe bitmap.
 
@@ -2451,15 +2469,15 @@
 bitmap to change with the value of the corresponding symbol, like
 `left-truncation-fringe-bitmap' or `continued-line-fringe-bitmap'.
 
-** New function 'destroy-fringe-bitmap' may be used to destroy a
+*** New function 'destroy-fringe-bitmap' may be used to destroy a
 previously created bitmap, or restore a built-in bitmap.
 
-** New function 'set-fringe-bitmap-face' can now be used to set a
+*** New function 'set-fringe-bitmap-face' can now be used to set a
 specific face to be used for a specific fringe bitmap.  Normally,
 this should be a face derived from the `fringe' face, specifying
 the foreground color as the desired color of the bitmap.
 
-** There are new display properties, left-fringe and right-fringe,
+*** There are new display properties, left-fringe and right-fringe,
 that can be used to show a specific bitmap in the left or right fringe
 bitmap of the display line.
 
@@ -2468,7 +2486,7 @@
 `define-fringe-bitmap', and FACE is an optional face name to be used
 for displaying the bitmap.
 
-** New function `fringe-bitmaps-at-pos' returns a cons (LEFT . RIGHT)
+*** New function `fringe-bitmaps-at-pos' returns a cons (LEFT . RIGHT)
 identifying the current fringe bitmaps in the display line at a given
 buffer position.  A nil value means no bitmap.
 
@@ -2535,18 +2553,23 @@
 whose cdr is the overlay in which the property was found, or nil if
 it was found as a text property or not found at all.
 
++++ (lispref)
+??? (man)
 ** The mouse pointer shape in void text areas (i.e. after the end of a
 line or below the last line in the buffer) of the text window is now
 controlled by the new variable `void-text-area-pointer'.  The default
 is to use the `arrow' (non-text) pointer.  Other choices are `text'
 (or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'.
 
++++
 ** The mouse pointer shape over an image can now be controlled by the
 :pointer image property.
 
++++
 ** The mouse pointer shape over ordinary text or images may now be
 controlled/overriden via the `pointer' text property.
 
++++
 ** Images may now have an associated image map via the :map property.
 
 An image map is an alist where each element has the format (AREA ID PLIST).
--- a/leim/ChangeLog	Mon Sep 20 13:59:19 2004 +0000
+++ b/leim/ChangeLog	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/leim/leim-ext.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/leim/quail/uni-input.el	Thu Sep 23 10:32:54 2004 +0000
@@ -66,14 +66,16 @@
 	       (write (((r0 >> 6) & ?\x3F) | ?\x80))
 	       (write ((r0 & ?\x3F) | ?\x80))))))))))
 
+(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)
@@ -94,9 +96,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
@@ -109,7 +109,7 @@
 						 (cdr (nreverse events)))
 					  16))
 		     (c (decode-char 'ucs n))
-		    (status (make-vector 9 nil)))
+		     (status (make-vector 9 nil)))
 		(if c
 		    (list c)
 		  (aset status 0 n)
@@ -129,7 +129,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))
@@ -155,8 +155,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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/ChangeLog	Thu Sep 23 10:32:54 2004 +0000
@@ -1,3 +1,101 @@
+2004-09-23  H,Ae(Bkon Malmedal  <hmalmedal@yahoo.no>
+
+	* calendar/holidays.el (holiday-advent): Report on a specified day
+	offset from advent, not just advent.
+	(holiday-easter-etc): Report on one specified day offset from
+	easter, not all easter holidays. Various Easter holidays moved to
+	`christian-holidays' variable in calendar.el.
+	* calendar/calendar.el (christian-holidays): Adapt for new
+	behaviour of `holiday-advent' and `holiday-easter-etc' functions.
+
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* image.el (insert-sliced-image): Add doc string.
+
+	* ido.el (ido-choice-list): New dynamic var for `list' context.
+	(ido-context-switch-command): New dynamic var.
+	(ido-define-mode-map): Generalize switch between file/buffer contexts.
+	(ido-read-internal): Handle new `list' context.
+	Handle insert-buffer and insert-file ido-exit values.
+	(ido-buffer-internal): New arg switch-cmd.  Use it to setup
+	ido-context-switch-command. Handle insert-file ido-exit value.
+	(ido-read-buffer): Set ido-context-switch-command to 'ignore
+	unless it is already bound by caller.
+	(ido-file-internal): New arg switch-cmd.  Use it to setup
+	ido-context-switch-command.  Handle insert-buffer ido-exit value.
+	(ido-enter-insert-buffer, ido-enter-insert-file): New commands
+	used for context switching.
+	(ido-all-completions): Handle new `list' context.
+	(ido-make-choice-list): Return choices for `list' context.
+	(ido-find-file-in-dir, ido-display-file, ido-write-file)
+	(ido-display-buffer, ido-kill-buffer): Disable context switching.
+	(ido-insert-buffer, ido-insert-file): Setup context switching.
+	(ido-exhibit): Handle `list' context.
+	(ido-read-file-name): Disable context switching.  Handle fallback.
+	(ido-read-directory-name): Disable context switching.
+	(ido-completing-read): New defun like completing-read.  Setup and
+	use new `list' context.
+
+2004-09-20  Jesper Harder  <harder@ifa.au.dk>
+
+	* progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
+
+2004-09-21  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* subr.el (after-change-major-mode-hook): Doc fix.
+
+2004-09-21  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+
+	* printing.el: Doc fix.  Add a new tip about the use of gsprint instead
+	of ghostscript for monochrome PostScript file in Windows.
+
+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).
@@ -227,6 +325,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/bindings.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/bindings.el	Thu Sep 23 10:32:54 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
@@ -726,6 +726,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-graph.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/calc/calc-graph.el	Thu Sep 23 10:32:54 2004 +0000
@@ -210,13 +210,13 @@
 	      "title \"" (symbol-name (nth 1 ydata)) "\" "
 	      "with dots")
       (setq pstyle (and (eq (car-safe pstyle) 'vec) (nth (1+ num) pstyle)))
-      (setq lstyle (and (eq (car-safe lstyle) 'vec) (nth (1+ num) lstyle)))
-      (calc-graph-set-styles
-       (or (and (Math-num-integerp lstyle) (math-trunc lstyle))
-	   0)
-       (or (and (Math-num-integerp pstyle) (math-trunc pstyle))
-	   (if (eq (car-safe (calc-var-value (nth 2 ydata))) 'vec)
-	       0 -1))))))
+      (setq lstyle (and (eq (car-safe lstyle) 'vec) (nth (1+ num) lstyle))))
+    (calc-graph-set-styles
+     (or (and (Math-num-integerp lstyle) (math-trunc lstyle))
+         0)
+     (or (and (Math-num-integerp pstyle) (math-trunc pstyle))
+         (if (eq (car-safe (calc-var-value (nth 2 ydata))) 'vec)
+             0 -1)))))
 
 (defun calc-graph-lookup (thing)
   (if (and (eq (car-safe thing) 'var)
--- a/lisp/calc/calc.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/calc/calc.el	Thu Sep 23 10:32:54 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.")
@@ -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/calendar/calendar.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/calendar/calendar.el	Thu Sep 23 10:32:54 2004 +0000
@@ -4,6 +4,7 @@
 ;;	2000, 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: calendar
 ;; Human-Keywords: calendar, Gregorian calendar, diary, holidays
 
@@ -1046,13 +1047,43 @@
 (defcustom christian-holidays
   '((if all-christian-calendar-holidays
         (holiday-fixed 1 6 "Epiphany"))
-    (holiday-easter-etc)
+    (holiday-easter-etc 0 "Easter Sunday")
+    (holiday-easter-etc -2 "Good Friday")
+    (holiday-easter-etc -46 "Ash Wednesday")
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -63 "Septuagesima Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -56 "Sexagesima Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -49 "Shrove Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -48 "Shrove Monday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -47 "Shrove Tuesday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -14 "Passion Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -7 "Palm Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc -3 "Maundy Thursday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 35 "Rogation Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 39 "Ascension Day"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 49 "Pentecost (Whitsunday)"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 50 "Whitmonday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 56 "Trinity Sunday"))
+    (if all-christian-calendar-holidays
+        (holiday-easter-etc 60 "Corpus Christi"))
     (if all-christian-calendar-holidays
         (holiday-greek-orthodox-easter))
     (if all-christian-calendar-holidays
         (holiday-fixed 8 15 "Assumption"))
     (if all-christian-calendar-holidays
-        (holiday-advent))
+        (holiday-advent 0 "Advent"))
     (holiday-fixed 12 25 "Christmas")
     (if all-christian-calendar-holidays
         (holiday-julian 12 25 "Eastern Orthodox Christmas")))
--- a/lisp/calendar/holidays.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/calendar/holidays.el	Thu Sep 23 10:32:54 2004 +0000
@@ -1,8 +1,10 @@
 ;;; holidays.el --- holiday functions for the calendar package
 
-;; Copyright (C) 1989, 90, 92, 93, 94, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1997, 2004 Free
+;;   Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
+;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
 ;; Keywords: holidays, calendar
 
 ;; This file is part of GNU Emacs.
@@ -398,86 +400,46 @@
              (string (if date (eval string))))
         (list (list date string)))))))
 
-(defun holiday-advent ()
-  "Date of Advent, if visible in calendar window."
+(defun holiday-advent (n string)
+  "Date of Nth day after advent (named STRING), if visible in calendar window."
   (let ((year displayed-year)
         (month displayed-month))
     (increment-calendar-month month year -1)
     (let ((advent (calendar-gregorian-from-absolute
-                   (calendar-dayname-on-or-before 0
-                    (calendar-absolute-from-gregorian
-                     (list 12 3 year))))))
+                   (+ n
+                      (calendar-dayname-on-or-before
+                       0
+                       (calendar-absolute-from-gregorian
+                        (list 12 3 year)))))))
       (if (calendar-date-is-visible-p advent)
-          (list (list advent "Advent"))))))
+          (list (list advent string))))))
 
-(defun holiday-easter-etc ()
-  "List of dates related to Easter, as visible in calendar window."
- (if (and (> displayed-month 5) (not all-christian-calendar-holidays))
-     nil;; Ash Wednesday, Good Friday, and Easter are not visible.
-   (let* ((century (1+ (/ displayed-year 100)))
-          (shifted-epact        ;; Age of moon for April 5...
-           (% (+ 14 (* 11 (% displayed-year 19));;     ...by Nicaean rule
-                 (-           ;; ...corrected for the Gregorian century rule
-                  (/ (* 3 century) 4))
-                 (/    ;; ...corrected for Metonic cycle inaccuracy.
-                  (+ 5 (* 8 century)) 25)
-                 (* 30 century));;              Keeps value positive.
-              30))
-          (adjusted-epact       ;;  Adjust for 29.5 day month.
-           (if (or (= shifted-epact 0)
-                   (and (= shifted-epact 1) (< 10 (% displayed-year 19))))
-               (1+ shifted-epact)
-             shifted-epact))
-          (paschal-moon       ;; Day after the full moon on or after March 21.
-           (- (calendar-absolute-from-gregorian (list 4 19 displayed-year))
-              adjusted-epact))
-          (abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))
-          (mandatory
+(defun holiday-easter-etc (n string)
+  "Date of Nth day after Easter (named STRING), if visible in calendar window."
+  (let* ((century (1+ (/ displayed-year 100)))
+         (shifted-epact        ;; Age of moon for April 5...
+          (% (+ 14 (* 11 (% displayed-year 19));;     ...by Nicaean rule
+                (-           ;; ...corrected for the Gregorian century rule
+                 (/ (* 3 century) 4))
+                (/    ;; ...corrected for Metonic cycle inaccuracy.
+                 (+ 5 (* 8 century)) 25)
+                (* 30 century));;              Keeps value positive.
+             30))
+         (adjusted-epact       ;;  Adjust for 29.5 day month.
+          (if (or (= shifted-epact 0)
+                  (and (= shifted-epact 1) (< 10 (% displayed-year 19))))
+              (1+ shifted-epact)
+            shifted-epact))
+         (paschal-moon       ;; Day after the full moon on or after March 21.
+          (- (calendar-absolute-from-gregorian (list 4 19 displayed-year))
+             adjusted-epact))
+         (abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))
+         (mandatory
            (list
-            (list (calendar-gregorian-from-absolute abs-easter)
-                  "Easter Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 2))
-                  "Good Friday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 46))
-                  "Ash Wednesday")))
-          (optional
-           (list
-            (list (calendar-gregorian-from-absolute (- abs-easter 63))
-                  "Septuagesima Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 56))
-                  "Sexagesima Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 49))
-                  "Shrove Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 48))
-                  "Shrove Monday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 47))
-                  "Shrove Tuesday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 14))
-                  "Passion Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 7))
-                  "Palm Sunday")
-            (list (calendar-gregorian-from-absolute (- abs-easter 3))
-                  "Maundy Thursday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 35))
-                  "Rogation Sunday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 39))
-                  "Ascension Day")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 49))
-                  "Pentecost (Whitsunday)")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 50))
-                  "Whitmonday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 56))
-                  "Trinity Sunday")
-            (list (calendar-gregorian-from-absolute (+ abs-easter 60))
-                  "Corpus Christi")))
-          (output-list
-           (filter-visible-calendar-holidays mandatory)))
-     (if all-christian-calendar-holidays
-         (setq output-list
-               (append
-                (filter-visible-calendar-holidays optional)
-                output-list)))
-     output-list)))
+            (list (calendar-gregorian-from-absolute (+ abs-easter n))
+                  string)))
+         (output-list (filter-visible-calendar-holidays mandatory)))
+    output-list))
 
 (defun holiday-greek-orthodox-easter ()
   "Date of Easter according to the rule of the Council of Nicaea."
--- a/lisp/descr-text.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/descr-text.el	Thu Sep 23 10:32:54 2004 +0000
@@ -525,7 +525,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/eshell/esh-ext.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/eshell/esh-ext.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/files.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/ChangeLog	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/binhex.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/deuglify.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/flow-fill.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-agent.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-art.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-cite.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-delay.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-fun.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-group.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-int.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-msg.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-score.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-srvr.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-start.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-sum.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus-util.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/gnus.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/imap.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/mail-source.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/message.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/mm-decode.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/mm-util.el	Thu Sep 23 10:32:54 2004 +0000
@@ -317,6 +317,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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/mml.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/nnimap.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/nnmail.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/pgg-def.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/sha1.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/smiley.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/smime.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/gnus/uudecode.el	Thu Sep 23 10:32:54 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/ido.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/ido.el	Thu Sep 23 10:32:54 2004 +0000
@@ -933,7 +933,7 @@
 ;;; Variables with dynamic bindings.
 ;;; Declared here to keep the byte compiler quiet.
 
-;; Stores the current ido item type ('file, 'dir or 'buffer).
+;; Stores the current ido item type ('file, 'dir, 'buffer, or 'list).
 (defvar ido-cur-item)
 
 ;; Stores the current list of items that will be searched through.
@@ -942,6 +942,9 @@
 ;; at the end of the list.  Created by `ido-make-item-list'.
 (defvar ido-cur-list)
 
+;; Stores the choice list for ido-completing-read
+(defvar ido-choice-list)
+
 ;; Stores the list of items which are ignored when building
 ;; `ido-cur-list'.  It is in no specific order.
 (defvar ido-ignored-list)
@@ -992,6 +995,8 @@
 ;; Stores temporary state of literal find file.
 (defvar ido-find-literal)
 
+;; Set to 'ignore to inhibit switching between find-file/switch-buffer.
+(defvar ido-context-switch-command)
 
 ;;; FUNCTIONS
 
@@ -1346,8 +1351,8 @@
     (define-key map "?" 'ido-completion-help)
 
     (when (memq ido-cur-item '(file dir))
-      (define-key map "\C-b" 'ido-enter-switch-buffer)
-      (define-key map "\C-d" 'ido-enter-dired)
+      (define-key map "\C-b" (or ido-context-switch-command 'ido-enter-switch-buffer))
+      (define-key map "\C-d" (or (and ido-context-switch-command 'ignore) 'ido-enter-dired))
       (define-key map "\C-f" 'ido-fallback-command)
       (define-key map [down] 'ido-next-match-dir)
       (define-key map [up]   'ido-prev-match-dir)
@@ -1378,8 +1383,8 @@
       )
 
     (when (eq ido-cur-item 'buffer)
+      (define-key map "\C-f" (or ido-context-switch-command 'ido-enter-find-file))
       (define-key map "\C-b" 'ido-fallback-command)
-      (define-key map "\C-f" 'ido-enter-find-file)
       (define-key map "\C-k" 'ido-kill-buffer-at-head)
       )
 
@@ -1625,6 +1630,9 @@
        ((eq ido-cur-item 'buffer)
 	(setq ido-ignored-list nil
 	      ido-cur-list (ido-make-buffer-list ido-default-item)))
+       ((eq ido-cur-item 'list)
+	(setq ido-ignored-list nil
+	      ido-cur-list (ido-make-choice-list ido-default-item)))
        (t nil))
       (setq ido-rotate-temp nil)
 
@@ -1709,7 +1717,7 @@
        ((eq ido-exit 'keep)
 	(setq ido-keep-item-list t))
 
-       ((memq ido-exit '(dired fallback findfile findbuffer))
+       ((memq ido-exit '(dired fallback find-file switch-to-buffer insert-buffer insert-file))
 	(setq done t))
 
        ((eq ido-exit 'updir)
@@ -1789,19 +1797,23 @@
   (exit-minibuffer))
 
 ;;; MAIN FUNCTIONS
-(defun ido-buffer-internal (method &optional fallback prompt default initial)
+(defun ido-buffer-internal (method &optional fallback prompt default initial switch-cmd)
   ;; Internal function for ido-switch-buffer and friends
   (if (not ido-mode)
       (call-interactively (or fallback 'switch-to-buffer))
-    (let ((buf (ido-read-buffer (or prompt "Buffer: ") default nil initial)))
+    (let* ((ido-context-switch-command switch-cmd)
+	   (buf (ido-read-buffer (or prompt "Buffer: ") default nil initial)))
 
       ;; Choose the buffer name: either the text typed in, or the head
       ;; of the list of matches
 
       (cond
-       ((eq ido-exit 'findfile)
+       ((eq ido-exit 'find-file)
 	(ido-file-internal ido-default-file-method nil nil nil nil ido-text))
 
+       ((eq ido-exit 'insert-file)
+	(ido-file-internal 'insert 'insert-file nil "Insert file: " nil ido-text 'ido-enter-insert-buffer))
+
        ((eq ido-exit 'fallback)
 	(let ((read-buffer-function nil))
 	  (call-interactively (or fallback 'switch-to-buffer))))
@@ -1842,7 +1854,8 @@
 If REQUIRE-MATCH is non-nil, an existing-buffer must be selected.
 If INITIAL is non-nil, it specifies the initial input string."
   (let ((ido-current-directory nil)
-	(ido-directory-nonreadable nil))
+	(ido-directory-nonreadable nil)
+	(ido-context-switch-command (if (boundp 'ido-context-switch-command) ido-context-switch-command 'ignore)))
     (ido-read-internal 'buffer prompt 'ido-buffer-history default require-match initial)))
 
 (defun ido-record-work-directory (&optional dir)
@@ -1886,12 +1899,13 @@
   ;; Add final slash to result in case it was missing from DEFAULT-DIRECTORY.
   (ido-final-slash (expand-file-name (or dir default-directory)) t))
 
-(defun ido-file-internal (method &optional fallback default prompt item initial)
+(defun ido-file-internal (method &optional fallback default prompt item initial switch-cmd)
   ;; Internal function for ido-find-file and friends
   (unless item
     (setq item 'file))
   (let* ((ido-current-directory (ido-expand-directory default))
 	 (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory))
+	 (ido-context-switch-command switch-cmd)
 	 filename)
 
     (cond
@@ -1943,9 +1957,12 @@
 	      (read-file-name-function nil))
 	  (call-interactively (or fallback 'find-file))))
 
-       ((eq ido-exit 'findbuffer)
+       ((eq ido-exit 'switch-to-buffer)
 	(ido-buffer-internal ido-default-buffer-method nil nil nil ido-text))
 
+       ((eq ido-exit 'insert-buffer)
+	(ido-buffer-internal 'insert 'insert-buffer "Insert buffer: " nil ido-text 'ido-enter-insert-file))
+
        ((eq ido-exit 'dired)
 	(dired (concat ido-current-directory (or ido-text ""))))
 
@@ -2227,13 +2244,13 @@
 (defun ido-enter-find-file ()
   "Drop into find-file from buffer switching."
   (interactive)
-  (setq ido-exit 'findfile)
+  (setq ido-exit 'find-file)
   (exit-minibuffer))
 
 (defun ido-enter-switch-buffer ()
   "Drop into ido-switch-buffer from file switching."
   (interactive)
-  (setq ido-exit 'findbuffer)
+  (setq ido-exit 'switch-to-buffer)
   (exit-minibuffer))
 
 (defun ido-enter-dired ()
@@ -2242,6 +2259,18 @@
   (setq ido-exit 'dired)
   (exit-minibuffer))
 
+(defun ido-enter-insert-buffer ()
+  "Drop into insert buffer from insert file."
+  (interactive)
+  (setq ido-exit 'insert-buffer)
+  (exit-minibuffer))
+
+(defun ido-enter-insert-file ()
+  "Drop into insert file from insert buffer."
+  (interactive)
+  (setq ido-exit 'insert-file)
+  (exit-minibuffer))
+
 
 (defun ido-up-directory (&optional clear)
   "Go up one directory level."
@@ -2560,6 +2589,8 @@
       (ido-make-dir-list1 ido-current-directory))
      ((eq ido-cur-item 'buffer)
       (ido-make-buffer-list1))
+     ((eq ido-cur-item 'list)
+      ido-choice-list)
      (t nil))))
 
 
@@ -2722,6 +2753,20 @@
     (run-hooks 'ido-make-buffer-list-hook)
     ido-temp-list))
 
+(defun ido-make-choice-list (default)
+  ;; Return the current list of choices.
+  ;; If DEFAULT is non-nil, and corresponds to an element of choices,
+  ;; it is put to the start of the list.
+  (let ((ido-temp-list ido-choice-list))
+    (if default
+	(progn
+	  (setq ido-temp-list
+		(delete default ido-temp-list))
+	  (setq ido-temp-list
+		(cons default ido-temp-list))))
+    ; (run-hooks 'ido-make-choice-list-hook)
+    ido-temp-list))
+
 (defun ido-to-end (items)
   ;; Move the elements from ITEMS to the end of `ido-temp-list'
   (mapcar
@@ -3277,7 +3322,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'display 'display-buffer))
+  (ido-buffer-internal 'display 'display-buffer nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-kill-buffer ()
@@ -3285,7 +3330,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer))))
+  (ido-buffer-internal 'kill 'kill-buffer "Kill buffer: " (buffer-name (current-buffer)) nil 'ignore))
 
 ;;;###autoload
 (defun ido-insert-buffer ()
@@ -3293,7 +3338,7 @@
 The buffer name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido'."
   (interactive)
-  (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: "))
+  (ido-buffer-internal 'insert 'insert-buffer "Insert buffer: " nil nil 'ido-enter-insert-file))
 
 ;;;###autoload
 (defun ido-switch-buffer-other-frame ()
@@ -3311,7 +3356,7 @@
   (interactive "DDir: ")
   (if (not (equal (substring dir -1) "/"))
       (setq dir (concat dir "/")))
-  (ido-file-internal ido-default-file-method nil dir))
+  (ido-file-internal ido-default-file-method nil dir nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-find-file ()
@@ -3404,7 +3449,7 @@
 The file name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido-find-file'."
   (interactive)
-  (ido-file-internal 'display))
+  (ido-file-internal 'display nil nil nil nil nil 'ignore))
 
 ;;;###autoload
 (defun ido-find-file-other-frame ()
@@ -3426,7 +3471,7 @@
 	(ido-report-no-match nil)
 	(ido-confirm-unique-completion t)
 	(ido-auto-merge-work-directories-length -1))
-    (ido-file-internal 'write 'write-file nil "Write file: ")))
+    (ido-file-internal 'write 'write-file nil "Write file: " nil nil 'ignore)))
 
 ;;;###autoload
 (defun ido-insert-file ()
@@ -3434,7 +3479,7 @@
 The file name is selected interactively by typing a substring.
 For details of keybindings, do `\\[describe-function] ido-find-file'."
   (interactive)
-  (ido-file-internal 'insert 'insert-file nil "Insert file: "))
+  (ido-file-internal 'insert 'insert-file nil "Insert file: " nil nil 'ido-enter-insert-buffer))
 
 ;;;###autoload
 (defun ido-dired ()
@@ -3515,7 +3560,7 @@
 
 	;; Handle explicit directory changes
 	(cond
-	 ((eq ido-cur-item 'buffer)
+	 ((memq ido-cur-item '(buffer list))
 	  )
 
 	 ((= (length contents) 0)
@@ -3830,35 +3875,46 @@
 (defun ido-read-file-name (prompt &optional dir default-filename mustmatch initial predicate)
   "Read file name, prompting with PROMPT and completing in directory DIR.
 See `read-file-name' for additional parameters."
-  (cond
-  ((or (eq predicate 'file-directory-p)
-       (eq (get this-command 'ido) 'dir)
-       (memq this-command ido-read-file-name-as-directory-commands))
-   (ido-read-directory-name prompt dir default-filename mustmatch initial))
-  ((and (not (eq (get this-command 'ido) 'ignore))
-	(not (memq this-command ido-read-file-name-non-ido))
-	(or (null predicate) (eq predicate 'file-exists-p)))
-   (let* (filename
-	  ido-saved-vc-hb
-	  (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))
-	  (ido-current-directory (ido-expand-directory dir))
-	  (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
-	  (ido-work-directory-index -1)
-	  (ido-work-file-index -1)
-	  (ido-find-literal nil))
-     (setq filename
-	   (ido-read-internal 'file prompt 'ido-file-history default-filename mustmatch initial))
-     (if filename
-	 (concat ido-current-directory filename))))
-  (t
-   (let ((read-file-name-function nil))
-     (read-file-name prompt dir default-filename mustmatch initial predicate)))))
+  (let (filename)
+    (cond
+     ((or (eq predicate 'file-directory-p)
+	  (eq (get this-command 'ido) 'dir)
+	  (memq this-command ido-read-file-name-as-directory-commands))
+      (setq filename
+	    (ido-read-directory-name prompt dir default-filename mustmatch initial)))
+     ((and (not (eq (get this-command 'ido) 'ignore))
+	   (not (memq this-command ido-read-file-name-non-ido))
+	   (or (null predicate) (eq predicate 'file-exists-p)))
+      (let* (ido-saved-vc-hb
+	     (ido-context-switch-command 'ignore)
+	     (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))
+	     (ido-current-directory (ido-expand-directory dir))
+	     (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
+	     (ido-work-directory-index -1)
+	     (ido-work-file-index -1)
+	     (ido-find-literal nil))
+	(setq ido-exit nil)
+	(setq filename
+	      (ido-read-internal 'file prompt 'ido-file-history default-filename mustmatch initial))
+	(cond
+	 ((eq ido-exit 'fallback)
+	  (setq filename 'fallback))
+	 (filename
+	  (setq filename
+		(concat ido-current-directory filename))))))
+     (t
+      (setq filename 'fallback)))
+    (if (eq filename 'fallback)
+	(let ((read-file-name-function nil))
+	  (read-file-name prompt dir default-filename mustmatch initial predicate))
+      filename)))
 
 ;;;###autoload
 (defun ido-read-directory-name (prompt &optional dir default-dirname mustmatch initial)
   "Read directory name, prompting with PROMPT and completing in directory DIR.
 See `read-file-name' for additional parameters."
   (let* (filename
+	 (ido-context-switch-command 'ignore)
 	 ido-saved-vc-hb
 	 (ido-current-directory (ido-expand-directory dir))
 	 (ido-directory-nonreadable (not (file-readable-p ido-current-directory)))
@@ -3871,5 +3927,27 @@
 	    ido-current-directory
 	  (concat ido-current-directory filename)))))
 
+;;;###autoload
+(defun ido-completing-read (prompt choices &optional predicate require-match initial-input hist def)
+  "Read a string in the minibuffer with ido-style completion.
+PROMPT is a string to prompt with; normally it ends in a colon and a space.
+CHOICES is a list of strings which are the possible completions.
+PREDICATE is currently ignored; it is included to be compatible
+ with `completing-read'.
+If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
+ the input is (or completes to) an element of CHOICES or is null.
+ If the input is null, `ido-completing-read' returns DEF, or an empty
+ string if DEF is nil, regardless of the value of REQUIRE-MATCH.
+If INITIAL-INPUT is non-nil, insert it in the minibuffer initially,
+ with point positioned at the end.
+HIST, if non-nil, specifies a history list.
+DEF, if non-nil, is the default value."
+  (let ((ido-current-directory nil)
+	(ido-directory-nonreadable nil)
+	(ido-context-switch-command 'ignore)
+	(ido-choice-list choices))
+    (ido-read-internal 'list prompt hist def require-match initial-input)))
+
+
 ;;; arch-tag: b63a3500-1735-41bd-8a01-05373f0864da
 ;;; ido.el ends here
--- a/lisp/image.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/image.el	Thu Sep 23 10:32:54 2004 +0000
@@ -228,6 +228,15 @@
 
 
 (defun insert-sliced-image (image &optional string area rows cols)
+  "Insert IMAGE into current buffer at point.
+IMAGE is displayed by inserting STRING into the current buffer
+with a `display' property whose value is the image.  STRING is
+defaulted if you omit it.
+AREA is where to display the image.  AREA nil or omitted means
+display it in the text area, a value of `left-margin' means
+display it in the left marginal area, a value of `right-margin'
+means display it in the right marginal area.
+The image is automatically split into ROW x COLS slices."
   (unless string (setq string " "))
   (unless (eq (car-safe image) 'image)
     (error "Not an image: %s" image))
--- a/lisp/indent.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/indent.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/mail/supercite.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/net/net-utils.el	Thu Sep 23 10:32:54 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/printing.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/printing.el	Thu Sep 23 10:32:54 2004 +0000
@@ -5,13 +5,13 @@
 
 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
-;; Time-stamp: <2004/07/20 21:44:43 vinicius>
+;; Time-stamp: <2004/09/21 22:51:58 vinicius>
 ;; Keywords: wp, print, PostScript
 ;; Version: 6.8
 ;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
 
 (defconst pr-version "6.8"
-  "printing.el, v 6.8 <2004/07/12 vinicius>
+  "printing.el, v 6.8 <2004/09/21 vinicius>
 
 Please send all bug fixes and enhancements to
 	Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -259,6 +259,17 @@
 ;;    PostScript printer.  So, please, don't include this printer in
 ;;    `pr-txt-printer-alist' (which see).
 ;;
+;; 5. Use gsprint instead of ghostscript to print monochrome PostScript files
+;;    in Windows.  The gsprint utility is faster than ghostscript to print
+;;    monochrome PostScript.
+;;
+;;    The efficiency is similar to print non-monochrome PostScript file.
+;;
+;;    Also the gsprint utility comes together with gsview distribution.
+;;
+;;    For more information about gsprint see
+;;    `http://www.cs.wisc.edu/~ghost/gsview/gsprint.htm'.
+;;
 ;;
 ;; Using `printing'
 ;; ----------------
@@ -922,6 +933,7 @@
 ;;
 ;;    gswin32, gsview32
 ;;                   `http://www.gnu.org/software/ghostscript/ghostscript.html'
+;;    gsprint        `http://www.cs.wisc.edu/~ghost/gsview/gsprint.htm'.
 ;;    enscript       `http://people.ssh.fi/mtr/genscript/'
 ;;    psnup          `http://www.dcs.ed.ac.uk/home/ajcd/psutils/index.html'
 ;;    redmon         `http://www.cs.wisc.edu/~ghost/redmon/'
@@ -930,6 +942,9 @@
 ;; Acknowledgments
 ;; ---------------
 ;;
+;; Thanks to Lennart Borgman <lennart.borgman.073@student.lu.se> for gsprint
+;; suggestion (see tip 5 in section Tips).
+;;
 ;; Thanks to Drew Adams <drew.adams@oracle.com> for suggestions:
 ;;    - directory processing.
 ;;    - `pr-path-alist' variable.
--- a/lisp/progmodes/make-mode.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/progmodes/make-mode.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/progmodes/sh-script.el	Thu Sep 23 10:32:54 2004 +0000
@@ -421,6 +421,7 @@
 	?^ "_"
 	?~ "_"
 	?, "_"
+	?= "."
 	?< "."
 	?> ".")
   "Default syntax table for shell mode.")
--- a/lisp/progmodes/tcl.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/progmodes/tcl.el	Thu Sep 23 10:32:54 2004 +0000
@@ -1,6 +1,6 @@
 ;;; tcl.el --- Tcl code editing commands for Emacs
 
-;; Copyright (C) 1994,98,1999,2000,01,02,2003  Free Software Foundation, Inc.
+;; Copyright (C) 1994,98,1999,2000,01,02,2003,2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Author: Tom Tromey <tromey@redhat.com>
@@ -1104,15 +1104,13 @@
    (list (if current-prefix-arg
 	     (read-string "Run Tcl: " tcl-application)
 	   tcl-application)))
-  (if (not (comint-check-proc "*inferior-tcl*"))
-      (progn
-	(set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
-			   tcl-command-switches))
-	(inferior-tcl-mode)))
-  (make-local-variable 'tcl-application)
-  (setq tcl-application cmd)
+  (unless (comint-check-proc "*inferior-tcl*")
+    (set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
+		       tcl-command-switches))
+    (inferior-tcl-mode))
+  (set (make-local-variable 'tcl-application) cmd)
   (setq inferior-tcl-buffer "*inferior-tcl*")
-  (switch-to-buffer "*inferior-tcl*"))
+  (pop-to-buffer "*inferior-tcl*"))
 
 (defalias 'run-tcl 'inferior-tcl)
 
--- a/lisp/startup.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/startup.el	Thu Sep 23 10:32:54 2004 +0000
@@ -816,9 +816,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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/subr.el	Thu Sep 23 10:32:54 2004 +0000
@@ -1950,12 +1950,13 @@
 (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.")
+  "Normal hook run at the very end of major mode functions.")
 
 (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.
@@ -1964,8 +1965,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)
-    (run-hooks 'after-change-major-mode-hook)
-    (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'.
--- a/lisp/term.el	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/term.el	Thu Sep 23 10:32:54 2004 +0000
@@ -2635,314 +2635,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)))
--- a/lisp/url/ChangeLog	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/url/ChangeLog	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lisp/url/url-handlers.el	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lispref/ChangeLog	Thu Sep 23 10:32:54 2004 +0000
@@ -1,3 +1,30 @@
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* text.texi (Special Properties): Add `cursor', `pointer',
+	`line-height', and `line-spacing' properties.
+
+	* display.texi (Display): Add 'Fringe Bitmaps' and 'Pointer
+	Shapes' to menu.
+	(Standard Faces): Doc fix for fringe face.
+	(Fringes): Add `overflow-newline-into-fringe' and
+	'indicate-buffer-boundaries'.
+	(Fringe Bitmaps, Pointer Shapes): New nodes.
+	(Display Property): Add 'Pixel Specification' and 'Display Fringe
+	Bitmaps' to menu.
+	(Specified Space): Describe pixel width and height.
+	(Pixel Specification): New node.
+	(Other Display Specs): Add `slice' property.
+	(Display Fringe Bitmaps): New node.
+	(Images): Add 'Image Slices' to menu.
+	(Image Descriptors): Add `:pointer' and `:map' properties.
+	(Showing Images): Add slice arg to `insert-image'.  Add
+	'insert-sliced-image'.
+
+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	Mon Sep 20 13:59:19 2004 +0000
+++ b/lispref/commands.texi	Thu Sep 23 10:32:54 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/lispref/display.texi	Mon Sep 20 13:59:19 2004 +0000
+++ b/lispref/display.texi	Thu Sep 23 10:32:54 2004 +0000
@@ -25,7 +25,9 @@
 * Faces::               A face defines a graphics style for text characters:
                           font, colors, etc.
 * Fringes::             Controlling window fringes.
+* Fringe Bitmaps::     Customizing fringe bitmaps.
 * Scroll Bars::         Controlling vertical scroll bars.
+* Pointer Shapes::      Controlling the mouse pointer shape.
 * Display Property::    Enabling special display features.
 * Images::              Displaying images in Emacs buffers.
 * Buttons::             Adding clickable buttons to Emacs buffers.
@@ -1486,7 +1488,7 @@
 
 @item fringe
 @kindex fringe @r{(face name)}
-This face controls the colors of window fringes, the thin areas on
+This face controls the default colors of window fringes, the thin areas on
 either side that are used to display continuation and truncation glyphs.
 
 @item minibuffer-prompt
@@ -2560,7 +2562,7 @@
 
 @defvar fringes-outside-margins
 If the value is non-@code{nil}, the frames appear outside
-the display margins. 
+the display margins.
 @end defvar
 
 @defvar left-fringe-width
@@ -2596,6 +2598,146 @@
 @var{right-width} @var{frames-outside-margins})}.
 @end defun
 
+@defvar overflow-newline-into-fringe
+This variable, if non-@code{nil}, specifies that lines which are
+exactly as wide as the window (not counting the final newline
+character) shall not be broken into two lines on the display (with
+just the newline on the second line).  Instead, the newline now
+overflows into the right fringe, and the cursor will be displayed in
+the fringe when positioned on that newline.
+@end defvar
+
+@defvar indicate-buffer-boundaries
+This buffer-local variable controls how the buffer boundaries and
+window scrolling is indicated in the fringes.
+
+  The buffer boundaries, i.e. first and last line in the buffer, can be
+marked with angle bitmaps in the left or right fringe.  This can be
+combined with up and down arrow bitmaps shown at the top and bottom of
+the left or right fringe if the window can be scrolled in either
+direction.
+
+  If the value is @code{left} or @code{right}, both angle and arrow
+bitmaps are displayed in the left or right fringe, respectively.
+Any other non-@code{nil} value causes the bitmap on the top line to be
+displayed in the left fringe, and the bitmap on the bottom line in the
+right fringe.
+
+  If value is a cons @code{(angles . arrows)}, the car specifies the
+position of the angle bitmaps, and the cdr specifies the position of
+the arrow bitmaps.  For example, @code{(t .  right)} places the top
+angle bitmap in left fringe, the bottom angle bitmap in right fringe,
+and both arrow bitmaps in right fringe.  To show just the angle
+bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}.
+@end defvar
+
+@defvar default-indicate-buffer-boundaries
+The value of this variable is the default value for
+@code{indicate-buffer-boundaries} in buffers that do not override it.
+@end defvar
+
+@node Fringe Bitmaps
+@section Fringe Bitmaps
+@cindex Fringe Bitmaps
+
+  The @dfn{fringe bitmaps} are tiny icons Emacs displays in the fringe
+on a window system to indicate truncated or continued lines, buffer
+boundaries, overlay arrow, etc.  The fringe bitmaps are shared by all
+frames and windows.
+
+  You can redefine the built-in fringe bitmaps, and you can define new
+fringe bitmaps.  Emacs can handle a maximum of 255 different fringe
+bitmaps.
+
+A fringe bitmap is identified by an opaque integer, but Lisp code
+should use the following names defined by @code{(require 'fringe)}:
+
+Truncation and continuation line bitmaps:
+@code{left-truncation-fringe-bitmap},
+@code{right-truncation-fringe-bitmap},
+@code{continued-line-fringe-bitmap},
+@code{continuation-line-fringe-bitmap}.
+
+Buffer indication bitmaps:
+@code{up-arrow-fringe-bitmap},
+@code{down-arrow-fringe-bitmap},
+@code{top-left-angle-fringe-bitmap},
+@code{top-right-angle-fringe-bitmap},
+@code{bottom-left-angle-fringe-bitmap},
+@code{bottom-right-angle-fringe-bitmap},
+@code{left-bracket-fringe-bitmap},
+@code{right-bracket-fringe-bitmap}.
+
+Empty line indication bitmap:
+@code{empty-line-fringe-bitmap}.
+
+Overlay arrow bitmap:
+@code{overlay-arrow-fringe-bitmap}.
+
+Bitmaps for displaying the cursor in right fringe:
+@code{filled-box-cursor-fringe-bitmap},
+@code{hollow-box-cursor-fringe-bitmap},
+@code{hollow-square-fringe-bitmap}, @code{bar-cursor-fringe-bitmap},
+@code{hbar-cursor-fringe-bitmap}.
+
+Fringe bitmap opaque value indicating that no fringe bitmap is present:
+@code{no-fringe-bitmap}.
+
+Fringe bitmap opaque value indicating a reference to an undefined bitmap:
+@code{undef-fringe-bitmap}.
+
+  To display an specific fringe bitmap on a line in an Emacs window,
+use it as a @code{left-fringe} or @code{right-fringe} specifier in the
+@code{display} property of some text that is displayed on that line
+(@pxref{Display Property}).
+
+@defun define-fringe-bitmap bits &optional height width align bitmap
+Define a new fringe bitmap, or change an existing bitmap.
+
+The argument @code{bits} is either a string or a vector of integers,
+where each element (typically) corresponds to one row of the bitmap,
+and each bit of an integer corresponds to one pixel of the bitmap.
+
+The optional argument @code{height} specifies the height of the bitmap.
+If @code{height} is @code{nil}, the length of @code{bits} is used.
+
+The optional argument @code{width} specifies the width of the bitmap;
+it must be an integer between 1 and 16, or @code{nil} which defaults
+to a width of 8 pixels.
+
+The optional argument @code{align} may be one of @code{top},
+@code{center}, or @code{bottom}, indicating the positioning of the
+bitmap relative to the rows where it is used; the default is to center
+the bitmap.
+
+The @code{align} argument may also be a list @code{(ALIGN PERIODIC)}
+where @code{ALIGN} is intepreted as described above, and if
+@code{PERIODIC} is non-@code{nil} it specifies that the @code{bits} should
+be repeated until a bitmap of the specified @code{height} is created.
+
+The optional argument @code{bitmap} specifies the opaque integer that
+identifies an existing bitmap to redefine.
+
+The return value is a new opaque integer identifying the new bitmap number,
+or @code{nil} of there are no more free bitmap slots.
+@end defun
+
+@defun destroy-fringe-bitmap bitmap
+Destroy the fringe bitmap identified by the opaque integer
+@code{bitmap}.  If @code{bitmap} identifies a standard fringe bitmap,
+the original built-in bitmap is restored.
+@end defun
+
+@defun set-fringe-bitmap-face bitmap &optional face
+Set face for a specific fringe bitmap @code{bitmap} to the face
+specified by the argument @code{face}.
+If @code{face} is @code{nil}, reset face to default @code{fringe} face.
+
+Normally, the specified face should be a face derived from the
+@code{fringe} face, only specifying the foreground color as the
+desired color of the fringe bitmap.
+@end defun
+
 @node Scroll Bars
 @section Scroll Bars
 
@@ -2609,7 +2751,7 @@
 @code{set-window-scroll-bars} to specify what to do for a specific window:
 
 @defun set-window-scroll-bars window width &optional vertical-type horizontal-type
-Set width and type of scroll bars of window @var{window}.  
+Set width and type of scroll bars of window @var{window}.
 If @var{window} is @code{nil}, the selected window is used.
 @var{width} specifies the scroll bar width in pixels (@code{nil} means
 use whatever is specified for width for the frame).
@@ -2644,6 +2786,28 @@
 window take note of the new values by calling @code{set-window-buffer}
 specifying the same buffer that is already displayed.
 
+@node Pointer Shapes
+@section Pointer Shapes
+
+Normally, the mouse pointer has the @code{text} shape over text and
+the @code{arrow} shape over window areas which do not correspond to
+any buffer text.
+
+The available pointer shapes are: @code{text} (or @code{nil}),
+@code{arrow}, @code{hand}, @code{vdrag}, @code{hdrag},
+@code{modeline}, and @code{hourglass}.
+
+The mouse pointer shape over text or images can be changed via the
+@code{pointer} text property, and for image with the @code{:pointer}
+and @code{:map} image properties.
+
+@defvar void-text-area-pointer
+@tindex void-text-area-pointer
+This variable specifies the mouse pointer shape in void text areas,
+i.e. the areas after the end of a line or below the last line in the
+buffer.  The default is to use the @code{arrow} (non-text) pointer.
+@end defvar
+
 @node Display Property
 @section The @code{display} Property
 @cindex display specification
@@ -2659,10 +2823,12 @@
 
 @menu
 * Specified Space::      Displaying one space with a specified width.
+* Pixel Specification::  Specifying space width or height in pixels.
 * Other Display Specs::  Displaying an image; magnifying text; moving it
                           up or down on the page; adjusting the width
                           of spaces within text.
 * Display Margins::     Displaying text or images to the side of the main text.
+* Display Fringe Bitmaps::  Displaying a fringe bitmap in a specific line.
 * Conditional Display::  Making any of the above features conditional
                           depending on some Lisp expression.
 @end menu
@@ -2683,9 +2849,10 @@
 
 @table @code
 @item :width @var{width}
-Specifies that the space width should be @var{width} times the normal
-character width.  @var{width} can be an integer or floating point
-number.
+If @var{width} is an integer or floating point number, it specifies
+that the space width should be @var{width} times the normal character
+width.  The @var{width} may also be a @dfn{pixel width} specification
+(@pxref{Pixel Specification}).
 
 @item :relative-width @var{factor}
 Specifies that the width of the stretch should be computed from the
@@ -2694,32 +2861,111 @@
 character, multiplied by @var{factor}.
 
 @item :align-to @var{hpos}
-Specifies that the space should be wide enough to reach @var{hpos}.  The
-value @var{hpos} is measured in units of the normal character width.  It
-may be an integer or a floating point number.
+Specifies that the space should be wide enough to reach @var{hpos}.
+If the value @var{hpos} is an integer or a floating point number, it
+is measured in units of the normal character width.  The @var{hpos}
+may also be a @dfn{pixel width} specification (@pxref{Pixel Specification}).
 @end table
 
+  The @code{:height} and @code{:align-to} properties are also supported
+on non-window systems.
+
   You should use one and only one of the above properties.  You can
 also specify the height of the space, with other properties:
 
 @table @code
 @item :height @var{height}
-Specifies the height of the space, as @var{height},
-measured in terms of the normal line height.
+Specifies the height of the space.
+If @var{height} is an integer or floating point number, it specifies
+that the space height should be @var{height} times the normal character
+height.  The @var{height} may also be a @dfn{pixel height} specification
+(@pxref{Pixel Specification}).
 
 @item :relative-height @var{factor}
 Specifies the height of the space, multiplying the ordinary height
 of the text having this display specification by @var{factor}.
 
 @item :ascent @var{ascent}
-Specifies that @var{ascent} percent of the height of the space should be
-considered as the ascent of the space---that is, the part above the
-baseline.  The value of @var{ascent} must be a non-negative number no
-greater than 100.
+If the value of @var{ascent} is a non-negative number no greater than
+100, it specifies that @var{ascent} percent of the height of the space
+should be considered as the ascent of the space---that is, the part
+above the baseline.  The ascent may also be specified in pixel units
+with a @dfn{pixel ascent} specification (@pxref{Pixel Specification}).
+
 @end table
 
   Don't use both @code{:height} and @code{:relative-height} together.
 
+@node Pixel Specification
+@subsection Pixel Specification for Spaces
+@cindex spaces, pixel specification
+
+  The value of the @code{:width}, @code{:align-to}, @code{:height},
+and @code{:ascent} properties can be a (trivial) expression
+which is evaluated during redisplay.  The result of the evaluation is
+used as an absolute number of pixels.
+
+  The following expressions are supported:
+
+@example
+@group
+  EXPR ::= NUM | (NUM) | UNIT | ELEM | POS | IMAGE | FORM
+  NUM  ::= INTEGER | FLOAT | SYMBOL
+  UNIT ::= in | mm | cm | width | height
+  ELEM ::= left-fringe | right-fringe | left-margin | right-margin
+        |  scroll-bar | text
+  POS  ::= left | center | right
+  FORM ::= (NUM . EXPR) | (OP EXPR ...)
+  OP   ::= + | -
+@end group
+@end example
+
+  The form @var{NUM} specifies a fractional width or height of the
+default frame font size.  The form @code(@var{NUM})} specifies an
+absolute number of pixels.  If a symbol @var{SYMBOL} is specified, its
+buffer-local variable binding is used.
+
+  The @code{in}, @code{mm}, and @code{cm} units specifies the number
+of pixels per inch, milli-meter, and centi-meter, resp.  The
+@code{width} and @code{height} units correspond to the width and
+height of the current face font.  An image specification @var{IMAGE}
+corresponds to the width or height of the image.
+
+  The @code{left-fringe}, @code{right-fringe}, @code{left-margin},
+@code{right-margin}, @code{scroll-bar}, and @code{text} elements
+specify to the width of the corresponding area of the window.
+
+  The @code{left}, @code{center}, and @code{right} positions can be
+used with @code{:align-to} to specify a position relative to the left
+edge, center, or right edge of the text area.
+
+  One of the above window elements (except @code{text}) can also be
+used with @code{:align-to} to specify that the position is relative to
+the left edge of the given area.  Once the base offset for a relative
+position has been set (by the first occurrence of one of these
+symbols), further occurences of these symbols are interpreted as the
+width of the specified area.  For example, to align to the center of
+the left-margin, use
+
+@example
+:align-to (+ left-margin (0.5 . left-margin))
+@end example
+
+  If no specific base offset is set for alignment, it is always relative
+to the left edge of the text area.  For example, @samp{:align-to 0} in a
+header-line aligns with the first text column in the text area.
+
+  The value of the form @code(@var{NUM} . @var{EXPR})} is the value of
+@var{NUM} multiplied by the value of the expression @var{EXPR}.  For
+example, @samp{(2 . in)} specifies a width of 2 inches, while
+@samp{(0.5 . IMAGE)} specifies half the width (or height) of the
+specified image.
+
+  The form @code{(+ @var{EXPR} ...)} adds up the value of the
+expressions.  The form @code{(- @var{EXPR} ...)} negates or subtracts
+the value of the expressions.
+
+
 @node Other Display Specs
 @subsection Other Display Specifications
 
@@ -2729,6 +2975,15 @@
 display specification, it means to display the image instead of the text
 that has the display specification.
 
+@item (slice @var{x} @var{y} @var{width} @var{height})
+This property is used with an @code{image} property to specify a
+@dfn{slice} (a partial area) of the image to display.  The top left
+corner of the slice is specified by @var{y} and @var{x} and the width
+and height of the slice is specified by @var{width} and @var{height}.
+Integer values are taken as pixel values.  A floating point number in
+the range 0.0 - 1.0 is relative to the width or height of the whole
+image.
+
 @item ((margin nil) @var{string})
 @itemx @var{string}
 A display specification of this form means to display @var{string}
@@ -2851,6 +3106,35 @@
 If @var{window} is @code{nil}, the selected window is used.
 @end defun
 
+@node Display Fringe Bitmaps
+@subsection Displaying Bitmaps in the Fringes
+@cindex display fringes
+@cindex margins, fringes
+
+  You can display a bitmap in the left or right fringes for a given
+line in a window using the @code{display} property.
+
+  To put text in the left or right fringe of the window, use a
+display specification of the form @code{(left-fringe @var{bitmap} [@var{face}])}
+or @code{(right-fringe @var{bitmap} [@var{face}])} on one of the
+characters on the corresponding text line.
+
+  The @var{bitmap} is an opaque integer identifying the bitmap, and the
+optional @var{face} is the name of the face whose foreground and
+background color is to be used for displaying the bitmap.
+
+@defun fringe-bitmaps-at-pos &optional pos window
+This function returns the fringe bitmaps of the display row containing
+position @var{pos} in window @var{window}.  The return value is a cons
+@code{(@var{left} .  @var{right})} where @var{left} and @var{right}
+are the fringe bitmap numbers for the bitmaps in the left and right
+fringe, resp.
+
+  Returns @code{nil} if @var{pos} is not visible in window
+@var{window}.  If @var{window} is @code{nil}, use the selected window.
+If @var{pos} is @code{nil}, use value of point in that window.
+@end defun
+
 @node Conditional Display
 @subsection Conditional Display Specifications
 @cindex conditional display specifications
@@ -2943,6 +3227,7 @@
 * Other Image Types::   Various other formats are supported.
 * Defining Images::     Convenient ways to define an image for later use.
 * Showing Images::      Convenient ways to display an image once it is defined.
+* Image Slices::        Displaying image slices.
 * Image Cache::         Internal mechanisms of image display.
 @end menu
 
@@ -3105,6 +3390,44 @@
 If @var{mask} is @code{nil}, remove a mask from the image, if it has
 one.  Images in some formats include a mask which can be removed by
 specifying @code{:mask nil}.
+
+@item :pointer @var{shape}
+This specifies the pointer shape when the mouse pointer is over this
+image.  @xref{Pointer Shapes}, for available pointer shapes.
+
+@item :map @var{map}
+This associates an image map of @dfn{hot spots} with this image.
+
+An image map is an alist where each element has the format
+@code{(@var{area} @var{id} @var{plist})}.  An @var{area} is specified
+as either a rectangle, a circle, or a polygon.
+
+A rectangle is a cons
+@code{(rect . ((@var{x0} . @var{y0}) . (@var{x1} . @var{y1})))}
+which specifies the pixel coordinates of the upper left and bottom right
+corners of the rectangle area.
+
+A circle is a cons
+@code{(circle . ((@var{x0} . @var{y0}) . @var{r}))}
+which specifies the center and the radius of the circle; @var{r} may
+be a float or integer.
+
+A polygon is a cons
+@code(poly . [@var{x0} @var{y0} @var{x1} @var{y1} ...])}
+where each pair in the vector describes one corner in the polygon.
+
+When the mouse pointer is above a hot-spot area of an image, the
+@var{plist} of that hot-spot is consulted; if it contains a @code{help-echo}
+property it defines a tool-tip for the hot-spot, and if it contains
+a @code{pointer} property, it defines the shape of the mouse cursor when
+it is over the hot-spot.
+@xref{Pointer Shapes}, for available pointer shapes.
+
+When you click the mouse when the mouse pointer is over a hot-spot, an
+event is composed by combining the @var{id} of the hot-spot with the
+mouse event, e.g. @samp{[area4 mouse-1]} if the hot-spot's @var{id} is
+@samp{area4}.
+
 @end table
 
 @defun image-mask-p spec &optional frame
@@ -3372,7 +3695,7 @@
 property yourself, but it is easier to use the functions in this
 section.
 
-@defun insert-image image &optional string area
+@defun insert-image image &optional string area slice
 This function inserts @var{image} in the current buffer at point.  The
 value @var{image} should be an image descriptor; it could be a value
 returned by @code{create-image}, or the value of a symbol defined with
@@ -3385,11 +3708,26 @@
 @code{nil} or omitted, the image is displayed at point within the
 buffer's text.
 
+The argument @var{slice} specifies a slice of the image to insert.  If
+@var{slice} is @code{nil} or omitted the whole image is inserted.
+Otherwise, @var{slice} is a list
+@code{(@var{x} @var{y} @var{width} @var{height})}
+which specifies the @var{x} and @var{y} positions and
+@var{width} and @var{height} of the image area to insert.  Integer
+values are taken as pixel values.  A floating point number in the
+range 0.0 - 1.0 is relative to the width or height of the image.
+
 Internally, this function inserts @var{string} in the buffer, and gives
 it a @code{display} property which specifies @var{image}.  @xref{Display
 Property}.
 @end defun
 
+@defun insert-sliced-image image &optional string area rows cols
+This function inserts @var{image} in the current buffer at point like
+@code{insert-image}, but the image is automatically split into
+@var{rows} x @var{cols} equally sized slices.
+@end defun
+
 @defun put-image image pos &optional string area
 This function puts image @var{image} in front of @var{pos} in the
 current buffer.  The argument @var{pos} should be an integer or a
@@ -3498,7 +3836,7 @@
 * Making Buttons::         Adding buttons to Emacs buffers.
 * Manipulating Buttons::   Getting and setting properties of buttons.
 * Button Buffer Commands:: Buffer-wide commands and bindings for buttons.
-* Manipulating Button Types:: 
+* Manipulating Button Types::
 @end menu
 
 @node Button Properties
--- a/lispref/text.texi	Mon Sep 20 13:59:19 2004 +0000
+++ b/lispref/text.texi	Thu Sep 23 10:32:54 2004 +0000
@@ -2974,6 +2974,69 @@
 @code{beginning-of-line} stop moving at a field boundary.
 @xref{Fields}.
 
+@item cursor
+@kindex cursor @r{(text property)}
+Normally, the cursor is displayed at the end of any overlay and text
+property string that may be present at the current window position.
+The cursor may be placed on any character of such strings by giving
+that character a non-@code{nil} @var{cursor} text property.
+
+@item pointer
+@kindex pointer @r{(text property)}
+This specifies a specific pointer shape when the mouse pointer is over
+this text or image.  See the variable @var{void-area-text-pointer}
+for possible pointer shapes.
+
+@item line-height
+@kindex line-height @r{(text property)}
+A newline may have @code{line-height} text or overlay properties that
+controls the height of the corresponding display row.
+
+If the @code{line-height} property value is @samp{0}, the newline does
+not contribute to the height of the display row; instead the height of
+the newline glyph is reduced.  Also, a @code{line-spacing} property on
+this newline is ignored.  This can be used to tile small images or
+image slices without adding blank areas between the images.
+
+If the @code{line-height} property value is a positive integer, the
+value specifies the minimum line height in pixels.  If necessary, the
+line height it increased by increasing the line's ascent.
+
+If the @code{line-height} property value is a floating point number,
+the minimum line height is calculated by multiplying the default frame
+line height by the given value.
+
+If the @code{line-height} property value is a cons @code{(@var{ratio}
+. @var{face})}, the minimum line height is calculated as @var{ratio} *
+height of named face @var{face}.  The @var{ ratio} is an integer or a
+floating point number.  If @var{face} is @code{t}, it specifies the
+current face.
+
+@item line-spacing
+@kindex line-spacing @r{(text property)}
+A newline may also have a @code{line-spacing} text or overlay
+properties that controls the height of the corresponding display row.
+
+If the @code{line-spacing} property value is an positive integer, the
+value is used as additional pixels to insert after the display line;
+this overrides the default frame line-spacing and any buffer local
+value of the @var{line-spacing} variable.
+
+If the @code{line-spacing} property is a floating point number or
+cons, the line spacing is calculated as specified above for the
+@code{line-height} property.
+
+If the @code{line-spacing} value is a cons @code{(total . @var{spacing})}
+where @var{spacing} is any of the forms described above, the value of
+@var{spacing} is used as the total height of the line, i.e. a varying
+number of pixels are inserted after each line to make each line
+exactly that many pixels high.
+
+Using the @code{line-spacing} property overrides the buffer local
+@var{line-spacing} variable.  That value of that variable may be an
+integer that specifies a number of pixels, or a floating point
+number which gives the spacing relative to the default frame line height.
+
 @item modification-hooks
 @cindex change hooks for a character
 @cindex hooks for changing a character
--- a/man/ChangeLog	Mon Sep 20 13:59:19 2004 +0000
+++ b/man/ChangeLog	Thu Sep 23 10:32:54 2004 +0000
@@ -1,3 +1,18 @@
+2004-09-23  Kim F. Storm  <storm@cua.dk>
+
+	* display.texi (Display Custom): Add `overflow-newline-into-fringe',
+	`indicate-buffer-boundaries' and `default-indicate-buffer-boundaries'.
+
+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	Mon Sep 20 13:59:19 2004 +0000
+++ b/man/building.texi	Thu Sep 23 10:32:54 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	Mon Sep 20 13:59:19 2004 +0000
+++ b/man/calc.texi	Thu Sep 23 10:32:54 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.
@@ -4105,7 +4108,13 @@
 display the graph in Emacs itself using rough character graphics.
 Press @kbd{q} when you are done viewing the character graphics.
 
-Next, let's add the line we got from our least-squares fit:
+Next, let's add the line we got from our least-squares fit.
+@ifinfo
+(If you are reading this tutorial on-line while running Calc, typing
+@kbd{g a} may cause the tutorial to disappear from its window and be
+replaced by a buffer named @samp{*Gnuplot Commands*}.  The tutorial
+will reappear when you terminate GNUPLOT by typing @kbd{g q}.) 
+@end ifinfo
 
 @smallexample
 @group
--- a/man/custom.texi	Mon Sep 20 13:59:19 2004 +0000
+++ b/man/custom.texi	Thu Sep 23 10:32:54 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/man/display.texi	Mon Sep 20 13:59:19 2004 +0000
+++ b/man/display.texi	Thu Sep 23 10:32:54 2004 +0000
@@ -990,6 +990,46 @@
 windows, see @ref{Split Window}.  See also @ref{Display,, Display,
 elisp, The Emacs Lisp Reference Manual}.
 
+@vindex overflow-newline-into-fringe
+  If the variable @code{overflow-newline-into-fringe} is
+non-@code{nil} on a window system, it specifies that lines which are
+exactly as wide as the window (not counting the final newline
+character) shall not be broken into two lines on the display (with
+just the newline on the second line).  Instead, the newline
+overflows into the right fringe, and the cursor will be displayed in
+the fringe when positioned on that newline.
+@end defvar
+
+@vindex indicate-buffer-boundaries
+  On a window system, Emacs may indicate the buffer boundaries in the
+fringes.  The buffer boundaries, i.e. first and last line in the
+buffer, can be marked with angle bitmaps in the left or right fringe.
+This can be combined with up and down arrow bitmaps shown at the top
+and bottom of the left or right fringe if the window can be scrolled
+in either direction.
+
+The buffer-local variable @code{indicate-buffer-boundaries} controls
+how the buffer boundaries and window scrolling is indicated in the
+fringes.
+
+If the value is @code{left} or @code{right}, both angle and arrow
+bitmaps are displayed in the left or right fringe, respectively.
+Any other non-@code{nil} value causes the bitmap on the top line to be
+displayed in the left fringe, and the bitmap on the bottom line in the
+right fringe.
+
+If value is a cons @code{(angles . arrows)}, the car specifies the
+position of the angle bitmaps, and the cdr specifies the position of
+the arrow bitmaps.  For example, @code{(t .  right)} places the top
+angle bitmap in left fringe, the bottom angle bitmap in right fringe,
+and both arrow bitmaps in right fringe.  To show just the angle
+bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}.
+
+@vindex default-indicate-buffer-boundaries
+  The value of the variable @code{default-indicate-buffer-boundaries}
+is the default value for @code{indicate-buffer-boundaries} in buffers
+that do not override it.
+
 @vindex baud-rate
   The variable @code{baud-rate} holds the output speed of the
 terminal, as far as Emacs knows.  Setting this variable does not