changeset 83085:c0e839b60d0b

Merged in changes from CVS HEAD Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-173 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-174 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-125
author Karoly Lorentey <lorentey@elte.hu>
date Sun, 28 Mar 2004 06:08:38 +0000
parents 0d3eea319893 (current diff) 7830fa922e7e (diff)
children 347ce3d5d79c
files lisp/ChangeLog lisp/faces.el lisp/vc-hooks.el lisp/vc.el src/xdisp.c
diffstat 33 files changed, 623 insertions(+), 446 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Fri Mar 26 04:35:08 2004 +0000
+++ b/etc/NEWS	Sun Mar 28 06:08:38 2004 +0000
@@ -104,6 +104,11 @@
 
 ** M-x diff uses diff-mode instead of compilation-mode.
 
+** New command `strokes-global-set-stroke-string'.
+This is like `strokes-global-set-stroke', but it allows you to bind
+the stroke directly to a string to insert.  This is convenient for
+using strokes as an input method.
+
 ---
 ** The saveplace.el package now filters out unreadable files.
 When you exit Emacs, the saved positions in visited files no longer
--- a/lisp/ChangeLog	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/ChangeLog	Sun Mar 28 06:08:38 2004 +0000
@@ -1,15 +1,111 @@
+2004-03-27  Francis J. Wright  <F.J.Wright@qmul.ac.uk>
+
+	* woman.el (woman-change-fonts): Rename local variable
+	woman-font-alist to font-alist to avoid a compiler warning.
+
+2004-03-27  Dave Love  <fx@gnu.org>
+
+	* emacs-lisp/rx.el (rx): Doc fix.
+	Fix copyright years.
+
+	* strokes.el (strokes-global-set-stroke-string): New function.
+	(strokes-list-strokes): Cope with strings, not just commands.  Set
+	foreground colour of image.
+	(strokes-global-set-stroke): Doc fix.
+
+2004-03-26  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* buff-menu.el (Buffer-menu-revert-function): Make it suitable for
+	Auto Revert mode.
+	(Buffer-menu-files-only): New variable.
+	(Buffer-menu-toggle-files-only): New function.
+	(Buffer-menu-mode-map): Bind it to `T'.
+	(Buffer-menu-mode): Mention `T' in docstring.
+	Set buffer-stale-function.
+	(list-buffers-noselect): Mark buffer non-modified and set
+	Buffer-menu-files-only.
+
+	* dired.el (buffer-stale-function): Remove no longer needed defvar.
+
+	* autorevert.el (auto-revert-handler): Print revert message
+	before, rather than after, reverting.
+	(buffer-stale-function): Move to files.el.
+
+	* files.el (buffer-stale-function): Moved here from autorevert.el.
+
+2004-03-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* vc.el (vc-maybe-resolve-conflicts): Don't prompt the user.
+
+	* calc/calc.el (calc-mode-map): Use mapc.
+
+	* apropos.el (apropos-mode): Don't autoload.
+	(apropos-symbols-internal): New fun.  Extracted from `apropos'.
+	(apropos): Use it.
+	(apropos-print): Add optional `text' argument.
+	(apropos-describe-plist): Use help-buffer and hexlp-setup-xref.
+	Don't assume point-min == 1.
+
+	* bs.el (bs-buffer-list): Use buffer-local-value.
+	(bs--set-toggle-to-show): Use with-current-buffer.
+
+	* buff-menu.el (Buffer-menu-sort, Buffer-menu-make-sort-button):
+	New funs.
+	(list-buffers-noselect): Use them.  Adjust :align-to to new style.
+
+	* cvs-status.el (cvs-tree-use-jisx0208): Use char-displayable-p.
+
+	* dabbrev.el (dabbrev-expand): Fix regexp construction.
+	(dabbrev--find-expansion): Use pop.
+	(dabbrev--search): Use match-string-no-properties.
+
+	* dired.el (dired-mode): Use run-mode-hooks.
+	(dired-move-to-end-of-filename): Use match-string.
+
+	* ediff-init.el (ediff-hide-face): Check that facemenu-unlisted-faces
+	is bound before using it.
+	(ediff-verbose-p): Make it into a var since it's not constant.
+
+	* electric.el (Electric-pop-up-window): Avoid popping up a new frame.
+
+	* faces.el (read-face-font): Don't cons up unnecessarily.
+	(header-line, tool-bar): Share common parts.
+
+	* files.el (file-relative-name): Use compare-strings.
+
+	* finder.el (finder-mode): Follow coding convention.
+
+	* subr.el (read-number): New function.
+
+	* ses.el (ses-read-number): Move to subr.el.
+	(ses-set-header-row): Use read-number.
+
+2004-03-26  Andre Spiegel  <spiegel@gnu.org>
+
+	* vc-hooks.el (vc-arg-list): New function, which handles both
+	compiled and uncompiled code.
+	(vc-default-workfile-unchanged-p): Use it.
+
+	* vc.el (vc-print-log): Undo prev change, use new function
+	vc-arg-list from vc-hooks.el.
+
 2004-03-26  Masatake YAMATO  <jet@gyve.org>
 
 	* simple.el (completion-setup-function): Emphasize the
-	first uncommon characters in the completions;and de-emphasize
+	first uncommon characters in the completions; and de-emphasize
 	the common prefix substrings.
 	(completion-emphasis): New face.
 	(completion-de-emphasis): New face.
 
+2004-03-25  Juanma Barranquero  <lektu@terra.es>
+
+	* progmodes/cperl-mode.el (cperl-indent-alist, cperl-where-am-i):
+	Comment out (it's unused and unfinished code).
+
 2004-03-25  Sam Steingold  <sds@gnu.org>
 
-	* vc.el (vc-print-log): Fixed a bug in the last patch:
-	backend-function may be a byte-compiled object, not a lambda
+	* vc.el (vc-print-log): Fix a bug in the last patch:
+	backend-function may be a byte-compiled object, not a lambda.
 
 2004-03-25  Juri Linkov  <juri@jurta.org>
 
@@ -28,6 +124,14 @@
 	* jit-lock.el (jit-lock): Remove links to removed Support Modes
 	Info node.
 
+	* eshell/eshell.el (eshell): Fix broken info-link.
+
+	* eshell/em-alias.el (eshell-alias, eshell-bad-command-tolerance):
+	* eshell/em-banner.el (eshell-banner):
+	* eshell/em-smart.el (eshell-smart):
+	* eshell/esh-cmd.el (eshell-cmd):
+	Comment out broken info-links to incomplete Info manual.
+
 	* info-xref.el: Fix commentary.
 
 2004-03-25  Kevin Ryde  <user42@zip.com.au>
--- a/lisp/apropos.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/apropos.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; apropos.el --- apropos commands for users and programmers
 
-;; Copyright (C) 1989, 1994, 1995, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1989,94,1995,2001,02,03,2004  Free Software Foundation, Inc.
 
 ;; Author: Joe Wells <jbw@bigbird.bu.edu>
 ;; Rewritten: Daniel Pfeiffer <occitan@esperanto.org>
@@ -58,6 +58,7 @@
 ;;; Code:
 
 (require 'button)
+(eval-when-compile (require 'cl))
 
 (defgroup apropos nil
   "Apropos commands for users and programmers"
@@ -348,7 +349,6 @@
   "Return t if DOC is really matched by the current keywords."
   (apropos-true-hit doc apropos-all-words))
 
-;;;###autoload
 (define-derived-mode apropos-mode fundamental-mode "Apropos"
   "Major mode for following hyperlinks in output of apropos commands.
 
@@ -452,37 +452,42 @@
 time-consuming.  Returns list of symbols and documentation found."
   (interactive "sApropos symbol (regexp or words): \nP")
   (setq apropos-regexp (apropos-rewrite-regexp apropos-regexp))
-  (setq apropos-accumulator
-	(apropos-internal apropos-regexp
+  (apropos-symbols-internal
+   (apropos-internal apropos-regexp
 			  (and (not do-all)
 			       (not apropos-do-all)
 			       (lambda (symbol)
 				 (or (fboundp symbol)
 				     (boundp symbol)
 				     (facep symbol)
-				     (symbol-plist symbol))))))
-  (let ((tem apropos-accumulator))
-    (while tem
-      (if (get (car tem) 'apropos-inhibit)
-	  (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
-      (setq tem (cdr tem))))
-  (let ((p apropos-accumulator)
-	symbol doc properties)
-    (while p
-      (setcar p (list
-		 (setq symbol (car p))
-		 (apropos-score-symbol symbol)
-		 (when (fboundp symbol)
-		   (if (setq doc (condition-case nil
-				     (documentation symbol t)
-				   (void-function
-				    "(alias for undefined function)")
-				   (error
-				    "(error retrieving function documentation)")))
-		       (substring doc 0 (string-match "\n" doc))
-		     "(not documented)"))
-		 (when (boundp symbol)
-		   (apropos-documentation-property
+				     (symbol-plist symbol)))))
+   (or do-all apropos-do-all)))
+
+(defun apropos-symbols-internal (symbols keys &optional text)
+  ;; Filter out entries that are marked as apropos-inhibit.
+  (let ((all nil))
+    (dolist (symbol symbols)
+      (unless (get symbol 'apropos-inhibit)
+	(push symbol all)))
+    (setq symbols all))
+  (let ((apropos-accumulator
+	 (mapcar
+	  (lambda (symbol)
+	    (let (doc properties)
+	      (list
+	       symbol
+	       (apropos-score-symbol symbol)
+	       (when (fboundp symbol)
+		 (if (setq doc (condition-case nil
+				   (documentation symbol t)
+				 (void-function
+				  "(alias for undefined function)")
+				 (error
+				  "(can't retrieve function documentation)")))
+		     (substring doc 0 (string-match "\n" doc))
+		   "(not documented)"))
+	       (when (boundp symbol)
+		 (apropos-documentation-property
 		    symbol 'variable-documentation t))
 		 (when (setq properties (symbol-plist symbol))
 		   (setq doc (list (car properties)))
@@ -492,16 +497,14 @@
 		 (when (get symbol 'widget-type)
 		   (apropos-documentation-property
 		    symbol 'widget-documentation t))
-		 (when (facep symbol)
-		   (apropos-documentation-property
-		    symbol 'face-documentation t))
-		 (when (get symbol 'custom-group)
+	       (when (facep symbol)
+		 (apropos-documentation-property
+		  symbol 'face-documentation t))
+	       (when (get symbol 'custom-group)
 		   (apropos-documentation-property
-		    symbol 'group-documentation t))))
-      (setq p (cdr p))))
-  (apropos-print
-   (or do-all apropos-do-all)
-   nil))
+		    symbol 'group-documentation t)))))
+	  symbols)))
+    (apropos-print keys nil text)))
 
 
 ;;;###autoload
@@ -755,7 +758,7 @@
     function))
 
 
-(defun apropos-print (do-keys spacing)
+(defun apropos-print (do-keys spacing &optional text)
   "Output result of apropos searching into buffer `*Apropos*'.
 The value of `apropos-accumulator' is the list of items to output.
 Each element should have the format
@@ -764,8 +767,8 @@
 alphabetically by symbol name; but this function also sets
 `apropos-accumulator' to nil before returning.
 
-If SPACING is non-nil, it should be a string;
-separate items with that string."
+If SPACING is non-nil, it should be a string; separate items with that string.
+If non-nil TEXT is a string that will be printed as a heading."
   (if (null apropos-accumulator)
       (message "No apropos matches for `%s'" apropos-orig-regexp)
     (setq apropos-accumulator
@@ -794,6 +797,7 @@
 		" or variable,\n"
 		(substitute-command-keys
 		 "and type \\[apropos-follow] to get full documentation.\n\n"))
+	(if text (insert text "\n\n"))
 	(while (consp p)
 	  (when (and spacing (not (bobp)))
 	    (princ spacing))
@@ -907,13 +911,15 @@
 
 (defun apropos-describe-plist (symbol)
   "Display a pretty listing of SYMBOL's plist."
-  (with-output-to-temp-buffer "*Help*"
+  (help-setup-xref (list 'apropos-describe-plist symbol) (interactive-p))
+  (with-output-to-temp-buffer (help-buffer)
     (set-buffer standard-output)
     (princ "Symbol ")
     (prin1 symbol)
     (princ "'s plist is\n (")
     (if apropos-symbol-face
-	(put-text-property 8 (- (point) 14) 'face apropos-symbol-face))
+	(put-text-property (+ (point-min) 7) (- (point) 14)
+			   'face apropos-symbol-face))
     (insert (apropos-format-plist symbol "\n  "))
     (princ ")")
     (print-help-return-message)))
--- a/lisp/autorevert.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/autorevert.el	Sun Mar 28 06:08:38 2004 +0000
@@ -198,19 +198,6 @@
 This variable becomes buffer local when set in any fashion.")
 (make-variable-buffer-local 'global-auto-revert-ignore-buffer)
 
-(defvar buffer-stale-function nil
-  "Function to check whether a non-file buffer needs reverting.
-This should be a function with one optional argument NOCONFIRM.
-Auto Revert Mode sets NOCONFIRM to t.  The function should return
-non-nil if the buffer should be reverted.  The buffer is current
-when this function is called.
-
-The idea behind the NOCONFIRM argument is that the same function
-can also be used to ask the user whether the buffer should be
-reverted.  In such a situation one has to be less careful about,
-say, reverting remote files, than if the function is called at
-regular intervals by Auto Revert Mode.")
-
 ;; Internal variables:
 
 (defvar auto-revert-buffer-list '()
@@ -349,8 +336,8 @@
     (let (revert)
       (cond
        ((auto-revert-vc-buffer-p)
-	(when (auto-revert-handler-vc)
-	  (setq revert 'vc)))
+ 	(when (auto-revert-handler-vc)
+ 	  (setq revert 'vc)))
        ((or (and (buffer-file-name)
 		 (file-readable-p (buffer-file-name))
 		 (not (verify-visited-file-modtime (current-buffer))))
@@ -361,11 +348,11 @@
 		 (funcall buffer-stale-function t)))
 	(setq revert t)))
       (when revert
+	(when auto-revert-verbose
+	  (message "Reverting buffer `%s'." (buffer-name)))
 	(revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
-	(if (eq revert 'vc)
-	    (vc-mode-line buffer-file-name))
-	(if auto-revert-verbose
-	    (message "Reverting buffer `%s'." (buffer-name)))))))
+ 	(if (eq revert 'vc)
+ 	    (vc-mode-line buffer-file-name))))))
 
 (defun auto-revert-buffers ()
   "Revert buffers as specified by Auto-Revert and Global Auto-Revert Mode.
--- a/lisp/bs.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/bs.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; bs.el --- menu for selecting and displaying buffers
 
-;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
 ;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
 ;; Maintainer: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
 ;; Keywords: convenience
@@ -546,9 +546,7 @@
 	     (extern-must-show-from-fun (and bs-must-show-function
 					     (funcall bs-must-show-function
 						      (car list))))
-	     (show-flag (save-excursion
-			  (set-buffer (car list))
-			  bs-buffer-show-mark)))
+	     (show-flag (buffer-local-value 'bs-buffer-show-mark (car list))))
 	(if (or (eq show-flag 'always)
 		(and (or bs--show-all (not (eq show-flag 'never)))
 		     (not int-show-never)
@@ -865,9 +863,7 @@
   "Set value `bs-buffer-show-mark' of buffer BUFFER to WHAT.
 Redisplay current line and display a message describing
 the status of buffer on current line."
-  (save-excursion
-    (set-buffer buffer)
-    (setq bs-buffer-show-mark what))
+  (with-current-buffer buffer (setq bs-buffer-show-mark what))
   (bs--update-current-line)
   (bs--set-window-height)
   (bs--show-config-message what))
--- a/lisp/buff-menu.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/buff-menu.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; buff-menu.el --- buffer menu main function and support functions
 
-;; Copyright (C) 1985, 86, 87, 93, 94, 95, 2000, 2001, 2002, 2003
+;; Copyright (C) 1985, 86, 87, 93, 94, 95, 2000, 2001, 2002, 03, 2004
 ;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -47,22 +47,22 @@
 
 ;;; Code:
 
-;;;Trying to preserve the old window configuration works well in
-;;;simple scenarios, when you enter the buffer menu, use it, and exit it.
-;;;But it does strange things when you switch back to the buffer list buffer
-;;;with C-x b, later on, when the window configuration is different.
-;;;The choice seems to be, either restore the window configuration
-;;;in all cases, or in no cases.
-;;;I decided it was better not to restore the window config at all. -- rms.
+;;Trying to preserve the old window configuration works well in
+;;simple scenarios, when you enter the buffer menu, use it, and exit it.
+;;But it does strange things when you switch back to the buffer list buffer
+;;with C-x b, later on, when the window configuration is different.
+;;The choice seems to be, either restore the window configuration
+;;in all cases, or in no cases.
+;;I decided it was better not to restore the window config at all. -- rms.
 
-;;;But since then, I changed buffer-menu to use the selected window,
-;;;so q now once again goes back to the previous window configuration.
+;;But since then, I changed buffer-menu to use the selected window,
+;;so q now once again goes back to the previous window configuration.
 
-;;;(defvar Buffer-menu-window-config nil
-;;;  "Window configuration saved from entry to `buffer-menu'.")
+;;(defvar Buffer-menu-window-config nil
+;;  "Window configuration saved from entry to `buffer-menu'.")
 
-; Put buffer *Buffer List* into proper mode right away
-; so that from now on even list-buffers is enough to get a buffer menu.
+;; Put buffer *Buffer List* into proper mode right away
+;; so that from now on even list-buffers is enough to get a buffer menu.
 
 (defgroup Buffer-menu nil
   "Show a menu of all buffers in a buffer."
@@ -89,7 +89,7 @@
   :type 'number
   :group 'Buffer-menu)
 
-; This should get updated & resorted when you click on a column heading
+;; This should get updated & resorted when you click on a column heading
 (defvar Buffer-menu-sort-column nil
   "*2 for sorting by buffer names.  5 for sorting by file names.
 nil for default sorting by visited order.")
@@ -99,6 +99,14 @@
 (defvar Buffer-menu-mode-map nil
   "Local keymap for `Buffer-menu-mode' buffers.")
 
+(defvar Buffer-menu-files-only nil
+  "Non-nil if the current buffer-menu lists only file buffers.
+This variable determines whether reverting the buffer lists only
+file buffers.  It affects both manual reverting and reverting by
+Auto Revert Mode.")
+
+(make-variable-buffer-local 'Buffer-menu-files-only)
+
 (if Buffer-menu-mode-map
     ()
   (setq Buffer-menu-mode-map (make-keymap))
@@ -131,6 +139,7 @@
   (define-key Buffer-menu-mode-map "b" 'Buffer-menu-bury)
   (define-key Buffer-menu-mode-map "g" 'Buffer-menu-revert)
   (define-key Buffer-menu-mode-map "V" 'Buffer-menu-view)
+  (define-key Buffer-menu-mode-map "T" 'Buffer-menu-toggle-files-only)
   (define-key Buffer-menu-mode-map [mouse-2] 'Buffer-menu-mouse-select)
 )
 
@@ -167,13 +176,16 @@
 \\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
 \\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line.
 \\[Buffer-menu-revert] -- update the list of buffers.
+\\[Buffer-menu-toggle-files-only] -- toggle whether the menu displays only file buffers.
 \\[Buffer-menu-bury] -- bury the buffer listed on this line."
   (kill-all-local-variables)
   (use-local-map Buffer-menu-mode-map)
   (setq major-mode 'Buffer-menu-mode)
   (setq mode-name "Buffer Menu")
-  (make-local-variable 'revert-buffer-function)
-  (setq revert-buffer-function 'Buffer-menu-revert-function)
+  (set (make-local-variable 'revert-buffer-function)
+       'Buffer-menu-revert-function)
+  (set (make-local-variable 'buffer-stale-function)
+       #'(lambda (&optional noconfirm) t))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (run-hooks 'buffer-menu-mode-hook))
@@ -184,7 +196,21 @@
   (revert-buffer))
 
 (defun Buffer-menu-revert-function (ignore1 ignore2)
-  (list-buffers))
+  ;; We can not use save-excursion here.  The buffer gets erased.
+  (let ((old-point (point)))
+    (list-buffers-noselect Buffer-menu-files-only)
+    (goto-char old-point)))
+
+(defun Buffer-menu-toggle-files-only (arg)
+  "Toggle whether the current buffer-menu displays only file buffers.
+With a positive ARG display only file buffers.  With zero or
+negative ARG, display other buffers as well."
+  (interactive "P")
+  (setq Buffer-menu-files-only
+	(cond ((not arg) (not Buffer-menu-files-only))
+	      ((> (prefix-numeric-value arg) 0) t)))
+  (revert-buffer))
+
 
 (defun Buffer-menu-buffer (error-if-non-existent-p)
   "Return buffer described by this line of buffer menu."
@@ -547,6 +573,29 @@
 		       ? )
 	  size))
 
+(defun Buffer-menu-sort (column)
+  "Sort the buffer menu by COLUMN."
+  (interactive "P")
+  (when column
+    (setq column (prefix-numeric-value column))
+    (if (< column 2) (setq column 2))
+    (if (> column 5) (setq column 5)))
+  (setq Buffer-menu-sort-column column)
+  (Buffer-menu-revert))
+
+(defun Buffer-menu-make-sort-button (name column)
+  (if (equal column Buffer-menu-sort-column) (setq column nil))
+  (propertize name
+	      'help-echo (if column
+			     (concat "mouse-2: sort by " (downcase name))
+			   "mouse-2: sort by visited order")
+	      'mouse-face 'highlight
+	      'keymap (let ((map (make-sparse-keymap)))
+			(define-key map [header-line mouse-2]
+			  `(lambda () (interactive)
+			     (Buffer-menu-sort ,column)))
+			map)))
+
 (defun list-buffers-noselect (&optional files-only)
   "Create and return a buffer with a list of names of existing buffers.
 The buffer is named `*Buffer List*'.
@@ -557,29 +606,25 @@
   (let* ((old-buffer (current-buffer))
 	 (standard-output standard-output)
 	 (mode-end (make-string (- Buffer-menu-mode-width 2) ? ))
-	 (header (concat (propertize "CRM " 'face 'fixed-pitch)
-			 (Buffer-menu-buffer+size "Buffer" "Size")
-			 "  Mode" mode-end "File\n"))
-	 list desired-point name file mode)
+	 (header (concat " " (propertize "CRM " 'face 'fixed-pitch)
+			 (Buffer-menu-buffer+size
+			  (Buffer-menu-make-sort-button "Buffer" 2)
+			  (Buffer-menu-make-sort-button "Size" 3))
+			 "  "
+			 (Buffer-menu-make-sort-button "Mode" 4) mode-end
+			 (Buffer-menu-make-sort-button "File" 5) "\n"))
+	 list desired-point name file)
     (when Buffer-menu-use-header-line
-      (let ((spaces
-	     (- (car (window-inside-edges))
-		(car (window-edges))))
-	    (pos 0))
+      (let ((pos 0))
 	;; Turn spaces in the header into stretch specs so they work
 	;; regardless of the header-line face.
 	(while (string-match "[ \t]+" header pos)
 	  (setq pos (match-end 0))
 	  (put-text-property (match-beginning 0) pos 'display
 			     ;; Assume fixed-size chars
-			     (list 'space :align-to (+ spaces pos))
-			     header))
-	;; Add the leading space
-	(setq header (concat (propertize (make-string (floor spaces) ? )
-					 'display (list 'space :width spaces))
+			     (list 'space :align-to (1- pos))
 			     header))))
-    (save-excursion
-      (set-buffer (get-buffer-create "*Buffer List*"))
+    (with-current-buffer (get-buffer-create "*Buffer List*")
       (setq buffer-read-only nil)
       (erase-buffer)
       (setq standard-output (current-buffer))
@@ -662,6 +707,8 @@
       ;; current buffer is not displayed for some reason.
       (and desired-point
 	   (goto-char desired-point))
+      (setq Buffer-menu-files-only files-only)
+      (set-buffer-modified-p nil)
       (current-buffer))))
 
 ;;; arch-tag: e7dfcfc9-6cb2-46e4-bf55-8ef1936d83c6
--- a/lisp/calc/calc-ext.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/calc/calc-ext.el	Sun Mar 28 06:08:38 2004 +0000
@@ -591,6 +591,9 @@
   (define-key calc-mode-map "v}" 'calc-matrix-brackets)
   (define-key calc-mode-map "v(" 'calc-vector-parens)
   (define-key calc-mode-map "v)" 'calc-matrix-brackets)
+  ;; We can't rely on the automatic upper->lower conversion because
+  ;; in the global map V is explicitly bound, so we need to bind it
+  ;; explicitly as well :-(  --stef
   (define-key calc-mode-map "V" (lookup-key calc-mode-map "v"))
 
   (define-key calc-mode-map "z" 'nil)
--- a/lisp/calc/calc.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/calc/calc.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; calc.el --- the GNU Emacs calculator
 
-;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
 ;; Maintainers: D. Goel <deego@gnufans.org>
@@ -733,13 +733,13 @@
     (define-key map "\M-\C-m" 'calc-last-args-stub)
     (define-key map "\C-j" 'calc-over)
 
-    (mapcar (lambda (x) (define-key map (char-to-string x) 'undefined))
-	    "lOW")
-    (mapcar (lambda (x) (define-key map (char-to-string x) 'calc-missing-key))
-	    (concat "ABCDEFGHIJKLMNPQRSTUVXZabcdfghjkmoprstuvwxyz"
-		    ":\\|!()[]<>{},;=~`\C-k\M-k\C-w\M-w\C-y\C-_"))
-    (mapcar (lambda (x) (define-key map (char-to-string x) 'calcDigit-start))
-	    "_0123456789.#@")
+    (mapc (lambda (x) (define-key map (char-to-string x) 'undefined))
+	  "lOW")
+    (mapc (lambda (x) (define-key map (char-to-string x) 'calc-missing-key))
+	  (concat "ABCDEFGHIJKLMNPQRSTUVXZabcdfghjkmoprstuvwxyz"
+		  ":\\|!()[]<>{},;=~`\C-k\M-k\C-w\M-w\C-y\C-_"))
+    (mapc (lambda (x) (define-key map (char-to-string x) 'calcDigit-start))
+	  "_0123456789.#@")
     map))
 
 (defvar calc-digit-map
@@ -2952,8 +2952,7 @@
     (if (eq calc-language 'big)
 	(setq s (concat s "\n"))
       (when calc-line-numbering
-	(aset s 0 ?1)
-	(aset s 1 ?:)))
+	(setq s (concat "1:" (substring s 2)))))
     (setcar (cdr entry) (calc-count-lines s))
     s))
 
--- a/lisp/cvs-status.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/cvs-status.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; cvs-status.el --- major mode for browsing `cvs status' output
 
-;; Copyright (C) 1999, 2000  Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 03, 2004  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <monnier@cs.yale.edu>
 ;; Keywords: pcl-cvs cvs status tree tools
@@ -385,7 +385,7 @@
 ;;;;
 
 (defvar cvs-tree-use-jisx0208
-  nil ;; (and (char-display-font 'japanese-jisx0208) t)
+  (and (char-displayable-p (make-char 'japanese-jisx0208 40 44)) t)
   "*Non-nil if we should use the graphical glyphs from `japanese-jisx0208'.
 Otherwise, default to ASCII chars like +, - and |.")
 
--- a/lisp/dabbrev.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/dabbrev.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; dabbrev.el --- dynamic abbreviation package
 
-;; Copyright (C) 1985, 86, 92, 94, 96, 1997, 2000, 01, 2003
+;; Copyright (C) 1985, 86, 92, 94, 96, 1997, 2000, 01, 03, 2004
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Don Morrison
@@ -529,7 +529,7 @@
 		;; Take the following word, with intermediate separators,
 		;; as our expansion this time.
 		(re-search-forward
-		 (concat "\\(\\(" dabbrev--abbrev-char-regexp "\\)+\\)"))
+		 (concat "\\(?:" dabbrev--abbrev-char-regexp "\\)+"))
 		(setq expansion (buffer-substring-no-properties
 				 dabbrev--last-expansion-location (point)))
 
@@ -793,10 +793,7 @@
        ;; Walk through the buffers till we find a match.
        (let (expansion)
 	 (while (and (not expansion) dabbrev--friend-buffer-list)
-	   (setq dabbrev--last-buffer
-		 (car dabbrev--friend-buffer-list))
-	   (setq dabbrev--friend-buffer-list
-		 (cdr dabbrev--friend-buffer-list))
+	   (setq dabbrev--last-buffer (pop dabbrev--friend-buffer-list))
 	   (set-buffer dabbrev--last-buffer)
 	   (dabbrev--scanning-message)
 	   (setq dabbrev--last-expansion-location (point-min))
@@ -1000,8 +997,7 @@
 	      nil
 	    ;; We have a truly valid match.  Find the end.
 	    (re-search-forward pattern2)
-	    (setq found-string (buffer-substring-no-properties
-				(match-beginning 0) (match-end 0)))
+	    (setq found-string (match-string-no-properties 0))
 	    (setq result found-string)
 	    (and ignore-case (setq found-string (downcase found-string)))
 	    ;; Ignore this match if it's already in the table.
@@ -1010,9 +1006,7 @@
 		 (string= found-string table-string))
 		(setq found-string nil)))
 	  ;; Prepare to continue searching.
-	  (if reverse
-	      (goto-char (match-beginning 0))
-	    (goto-char (match-end 0))))
+	  (goto-char (if reverse (match-beginning 0) (match-end 0))))
 	;; If we found something, use it.
 	(when found-string
 	  ;; Put it into `dabbrev--last-table'
--- a/lisp/dired.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/dired.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1227,8 +1227,6 @@
 ;; Dired mode is suitable only for specially formatted data.
 (put 'dired-mode 'mode-class 'special)
 
-(defvar buffer-stale-function)
-
 (defun dired-mode (&optional dirname switches)
   "\
 Mode for \"editing\" directory listings.
@@ -1323,7 +1321,7 @@
   (set (make-local-variable 'font-lock-defaults)
        '(dired-font-lock-keywords t nil nil beginning-of-line))
   (dired-sort-other dired-actual-switches t)
-  (run-hooks 'dired-mode-hook)
+  (run-mode-hooks 'dired-mode-hook)
   (when (featurep 'x-dnd)
     (make-variable-buffer-local 'x-dnd-test-function)
     (make-variable-buffer-local 'x-dnd-protocol-alist)
@@ -1720,12 +1718,9 @@
 				(string-match
 				 "[xst]" ;; execute bit set anywhere?
 				 (concat
-				  (buffer-substring (match-beginning 2)
-						    (match-end 2))
-				  (buffer-substring (match-beginning 3)
-						    (match-end 3))
-				  (buffer-substring (match-beginning 4)
-						    (match-end 4))))))
+				  (match-string 2)
+				  (match-string 3)
+				  (match-string 4)))))
 	    (or no-error (error "No file on this line"))))
 	;; Move point to end of name:
 	(if symlink
@@ -2897,10 +2892,10 @@
     (concat result (substring string start))))
 
 (defun dired-sort-other (switches &optional no-revert)
-  ;; Specify new ls SWITCHES for current dired buffer.  Values matching
-  ;; `dired-sort-by-date-regexp' or `dired-sort-by-name-regexp' set the
-  ;; minor mode accordingly, others appear literally in the mode line.
-  ;; With optional second arg NO-REVERT, don't refresh the listing afterwards.
+  "Specify new ls SWITCHES for current dired buffer.
+Values matching `dired-sort-by-date-regexp' or `dired-sort-by-name-regexp'
+set the minor mode accordingly, others appear literally in the mode line.
+With optional second arg NO-REVERT, don't refresh the listing afterwards."
   (dired-sort-R-check switches)
   (setq dired-actual-switches switches)
   (if (eq major-mode 'dired-mode) (dired-sort-set-modeline))
--- a/lisp/ediff-init.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/ediff-init.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff
 
-;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 04 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 
@@ -895,7 +895,8 @@
 	 (sit-for 1)))))
 
 (defun ediff-hide-face (face)
-  (if (and (ediff-has-face-support-p) ediff-emacs-p)
+  (if (and (ediff-has-face-support-p) (boundp 'add-to-list)
+	   (boundp 'facemenu-unlisted-faces))
       (add-to-list 'facemenu-unlisted-faces face)))
 
 
@@ -1288,7 +1289,7 @@
 ;;; Misc
 
 ;; if nil, this silences some messages
-(defconst ediff-verbose-p t)
+(defvar ediff-verbose-p t)
 
 (defcustom ediff-autostore-merges  'group-jobs-only
   "*Save the results of merge jobs automatically.
--- a/lisp/electric.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/electric.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; electric.el --- window maker and Command loop for `electric' modes
 
-;; Copyright (C) 1985, 1986, 1995 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1995, 2004 Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: FSF
@@ -144,12 +144,12 @@
 	 (buf (get-buffer buffer))
 	 (one-window (one-window-p t))
 	 (pop-up-windows t)
+	 (pop-up-frames nil)
 	 (target-height)
 	 (lines))
     (if (not buf)
 	(error "Buffer %s does not exist" buffer)
-      (save-excursion
-	(set-buffer buf)
+      (with-current-buffer buf
 	(setq lines (count-lines (point-min) (point-max)))
 	(setq target-height
 	      (min (max (if max-height (min max-height (1+ lines)) (1+ lines))
--- a/lisp/emacs-lisp/rx.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/emacs-lisp/rx.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; rx.el --- sexp notation for regular expressions
 
-;; Copyright (C) 2001, 03, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: FSF
@@ -802,6 +802,9 @@
 `(backref N)'
      matches what was matched previously by submatch N.
 
+`(backref N)'
+    matches what was matched previously by submatch N.
+
 `(eval FORM)'
      evaluate FORM and insert result.  If result is a string,
      `regexp-quote' it.
@@ -811,7 +814,6 @@
 
   (rx-to-string regexp))
 
-
 (provide 'rx)
 
 ;;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b
--- a/lisp/eshell/em-alias.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/eshell/em-alias.el	Sun Mar 28 06:08:38 2004 +0000
@@ -28,7 +28,7 @@
 (defgroup eshell-alias nil
   "Command aliases allow for easy definition of alternate commands."
   :tag "Command aliases"
-  :link '(info-link "(eshell)Command aliases")
+  ;; :link '(info-link "(eshell)Command aliases")
   :group 'eshell-module)
 
 ;;; Commentary:
@@ -103,7 +103,7 @@
 (defcustom eshell-bad-command-tolerance 3
   "*The number of failed commands to ignore before creating an alias."
   :type 'integer
-  :link '(custom-manual "(eshell)Auto-correction of bad commands")
+  ;; :link '(custom-manual "(eshell)Auto-correction of bad commands")
   :group 'eshell-alias)
 
 ;;;
--- a/lisp/eshell/em-banner.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/eshell/em-banner.el	Sun Mar 28 06:08:38 2004 +0000
@@ -30,7 +30,7 @@
 It exists so that others wishing to create their own Eshell extension
 modules may have a simple template to begin with."
   :tag "Login banner"
-  :link '(info-link "(eshell)Login banner")
+  ;; :link '(info-link "(eshell)Login banner")
   :group 'eshell-module)
 
 ;;; Commentary:
--- a/lisp/eshell/em-smart.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/eshell/em-smart.el	Sun Mar 28 06:08:38 2004 +0000
@@ -33,7 +33,7 @@
 Most likely you will have to turn this option on and play around with
 it to get a real sense of how it works."
   :tag "Smart display of output"
-  :link '(info-link "(eshell)Smart display of output")
+  ;; :link '(info-link "(eshell)Smart display of output")
   :group 'eshell-module)
 
 ;;; Commentary:
--- a/lisp/eshell/esh-cmd.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/eshell/esh-cmd.el	Sun Mar 28 06:08:38 2004 +0000
@@ -30,7 +30,7 @@
 pressing <RET>.  There are several different kinds of commands,
 however."
   :tag "Command invocation"
-  :link '(info-link "(eshell)Command invocation")
+  ;; :link '(info-link "(eshell)Command invocation")
   :group 'eshell)
 
 ;;; Commentary:
--- a/lisp/eshell/eshell.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/eshell/eshell.el	Sun Mar 28 06:08:38 2004 +0000
@@ -34,7 +34,7 @@
 bash, zsh, rc, 4dos; since Emacs itself is capable of handling most of
 the tasks accomplished by such tools."
   :tag "The Emacs shell"
-  :link '(info-link "(eshell)The Emacs shell")
+  :link '(info-link "(eshell)Top")
   :version "21.1"
   :group 'applications)
 
--- a/lisp/faces.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/faces.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1071,7 +1071,7 @@
 If optional argument FRAME Is nil or omitted, use the selected frame."
   (let ((completion-ignore-case t))
     (completing-read (format "Set font attributes of face `%s' from font: " face)
-		     (mapcar 'list (x-list-fonts "*" nil frame)))))
+		     (x-list-fonts "*" nil frame))))
 
 
 (defun read-all-face-attributes (face &optional frame)
@@ -1866,7 +1866,9 @@
 (put 'modeline-inactive 'face-alias 'mode-line-inactive)
 
 (defface header-line
-  '((((type tty))
+  '((t
+     :inherit mode-line)
+    (((type tty))
      ;; This used to be `:inverse-video t', but that doesn't look very
      ;; good when combined with inverse-video mode-lines and multiple
      ;; windows.  Underlining looks better, and is more consistent with
@@ -1876,41 +1878,37 @@
      ;; highlighting; this may be too confusing in general, although it
      ;; happens to look good with the only current use of header-lines,
      ;; the info browser. XXX
+     :inverse-video nil	       ;Override the value inherited from mode-line.
      :underline t)
     (((class color grayscale) (background light))
      :background "grey90" :foreground "grey20"
-     :box nil
-     :inherit mode-line)
+     :box nil)
     (((class color grayscale) (background dark))
      :background "grey20" :foreground "grey90"
-     :box nil
-     :inherit mode-line)
+     :box nil)
     (((class mono) (background light))
      :background "white" :foreground "black"
      :inverse-video nil
      :box nil
-     :underline t
-     :inherit mode-line)
+     :underline t)
     (((class mono) (background dark))
      :background "black" :foreground "white"
      :inverse-video nil
      :box nil
-     :underline t
-     :inherit mode-line))
+     :underline t))
   "Basic header-line face."
   :version "21.1"
   :group 'basic-faces)
 
 
 (defface tool-bar
-  '((((type x w32 mac) (class color))
+  '((t
      :box (:line-width 1 :style released-button)
-     :background "grey75" :foreground "black")
+     :foreground "black")
+    (((type x w32 mac) (class color))
+     :background "grey75")
     (((type x) (class mono))
-     :box (:line-width 1 :style released-button)
-     :background "grey" :foreground "black")
-    (t
-     ()))
+     :background "grey"))
   "Basic tool-bar face."
   :version "21.1"
   :group 'basic-faces)
--- a/lisp/files.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/files.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; files.el --- file input and output commands for Emacs
 
-;; Copyright (C) 1985,86,87,92,93,94,95,96,97,98,99,2000,01,02,2003
+;; Copyright (C) 1985,86,87,92,93,94,95,96,97,98,99,2000,01,02,03,2004
 ;;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -2905,9 +2905,9 @@
 	  (or
 	   ;; Test for different drives on DOS/Windows
 	   (and
+	    ;; Should `cygwin' really be included here?  --stef
 	    (memq system-type '(ms-dos cygwin windows-nt))
-	    (not (string-equal (substring filename  0 2)
-			       (substring directory 0 2))))
+	    (not (eq t (compare-strings filename 0 2 directory 0 2))))
 	   ;; Test for different remote file handlers
 	   (not (eq hf hd))
 	   ;; Test for different remote file system identification
@@ -2925,21 +2925,22 @@
 	  filename
         (let ((ancestor ".")
 	      (filename-dir (file-name-as-directory filename)))
-          (while
-	      (and
-	       (not (string-match (concat "\\`" (regexp-quote directory))
-				  filename-dir))
-	       (not (string-match (concat "\\`" (regexp-quote directory))
-				  filename)))
+          (while (not
+		  (or
+		   (eq t (compare-strings filename-dir nil (length directory)
+					  directory nil nil case-fold-search))
+		   (eq t (compare-strings filename nil (length directory)
+					  directory nil nil case-fold-search))))
             (setq directory (file-name-directory (substring directory 0 -1))
 		  ancestor (if (equal ancestor ".")
 			       ".."
 			     (concat "../" ancestor))))
           ;; Now ancestor is empty, or .., or ../.., etc.
-          (if (string-match (concat "^" (regexp-quote directory)) filename)
+          (if (eq t (compare-strings filename nil (length directory)
+				     directory nil nil case-fold-search))
 	      ;; We matched within FILENAME's directory part.
 	      ;; Add the rest of FILENAME onto ANCESTOR.
-	      (let ((rest (substring filename (match-end 0))))
+	      (let ((rest (substring filename (length directory))))
 		(if (and (equal ancestor ".") (not (equal rest "")))
 		    ;; But don't bother with ANCESTOR if it would give us `./'.
 		    rest
@@ -3453,6 +3454,18 @@
 
 The function you specify is responsible for updating (or preserving) point.")
 
+(defvar buffer-stale-function nil
+  "Function to check whether a non-file buffer needs reverting.
+This should be a function with one optional argument NOCONFIRM.
+Auto Revert Mode sets NOCONFIRM to t.  The function should return
+non-nil if the buffer should be reverted.  The buffer is current
+when this function is called.
+
+The idea behind the NOCONFIRM argument is that it should be
+non-nil if the buffer is going to be reverted without asking the
+user.  In such situations, one has to be careful with potentially
+time consuming operations.")
+
 (defvar before-revert-hook nil
   "Normal hook for `revert-buffer' to run before reverting.
 If `revert-buffer-function' is used to override the normal revert
--- a/lisp/finder.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/finder.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; finder.el --- topic & keyword-based code finder
 
-;; Copyright (C) 1992, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1992,97,98,1999,2001,2004  Free Software Foundation, Inc.
 
 ;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
 ;; Created: 16 Jun 1992
@@ -95,17 +95,16 @@
     (wp		. "word processing")
     ))
 
-(defvar finder-mode-map nil)
-(or finder-mode-map
-    (let ((map (make-sparse-keymap)))
-      (define-key map " "	'finder-select)
-      (define-key map "f"	'finder-select)
-      (define-key map [mouse-2]	'finder-mouse-select)
-      (define-key map "\C-m"	'finder-select)
-      (define-key map "?"	'finder-summary)
-      (define-key map "q"	'finder-exit)
-      (define-key map "d"	'finder-list-keywords)
-      (setq finder-mode-map map)))
+(defvar finder-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map " "	'finder-select)
+    (define-key map "f"	'finder-select)
+    (define-key map [mouse-2]	'finder-mouse-select)
+    (define-key map "\C-m"	'finder-select)
+    (define-key map "?"	'finder-summary)
+    (define-key map "q"	'finder-exit)
+    (define-key map "d"	'finder-list-keywords)
+    map))
 
 
 ;;; Code for regenerating the keyword list.
@@ -336,13 +335,13 @@
 \\[finder-select]	more help for the item on the current line
 \\[finder-exit]	exit Finder mode and kill the Finder buffer."
   (interactive)
+  (kill-all-local-variables)
   (use-local-map finder-mode-map)
   (set-syntax-table emacs-lisp-mode-syntax-table)
   (setq mode-name "Finder")
   (setq major-mode 'finder-mode)
-  (make-local-variable 'finder-headmark)
-  (setq finder-headmark nil)
-  (run-hooks 'finder-mode-hook))
+  (set (make-local-variable 'finder-headmark) nil)
+  (run-mode-hooks 'finder-mode-hook))
 
 (defun finder-summary ()
   "Summarize basic Finder commands."
--- a/lisp/gnus/ChangeLog	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/gnus/ChangeLog	Sun Mar 28 06:08:38 2004 +0000
@@ -1,3 +1,7 @@
+2004-03-27  Juanma Barranquero  <lektu@terra.es>
+
+	* gnus-srvr.el (gnus-server-prepare): Remove spurious call to `cdr'.
+
 2004-03-22  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* gnus-art.el: Use inhibit-read-only instead of buffer-read-only.
--- a/lisp/gnus/gnus-srvr.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/gnus/gnus-srvr.el	Sun Mar 28 06:08:38 2004 +0000
@@ -219,7 +219,7 @@
     (while alist
       (unless (member (cdar alist) done)
 	(push (cdar alist) done)
-	(cdr (setq server (pop alist)))
+	(setq server (pop alist))
 	(when (and server (car server) (cdr server))
 	  (gnus-server-insert-server-line (car server) (cdr server))))
       (when (member (cdar alist) done)
--- a/lisp/progmodes/cperl-mode.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/progmodes/cperl-mode.el	Sun Mar 28 06:08:38 2004 +0000
@@ -2693,168 +2693,168 @@
 				 (cperl-calculate-indent))
 			     (current-indentation))))))))))))))
 
-(defvar cperl-indent-alist
-  '((string nil)
-    (comment nil)
-    (toplevel 0)
-    (toplevel-after-parenth 2)
-    (toplevel-continued 2)
-    (expression 1))
-  "Alist of indentation rules for CPerl mode.
-The values mean:
-  nil: do not indent;
-  number: add this amount of indentation.
-
-Not finished, not used.")
-
-(defun cperl-where-am-i (&optional parse-start start-state)
-  ;; Unfinished
-  "Return a list of lists ((TYPE POS)...) of good points before the point.
-POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'.
-
-Not finished, not used."
-  (save-excursion
-    (let* ((start-point (point))
-	   (s-s (cperl-get-state))
-	   (start (nth 0 s-s))
-	   (state (nth 1 s-s))
-	   (prestart (nth 3 s-s))
-	   (containing-sexp (car (cdr state)))
-	   (case-fold-search nil)
-	   (res (list (list 'parse-start start) (list 'parse-prestart prestart))))
-      (cond ((nth 3 state)		; In string
-	     (setq res (cons (list 'string nil (nth 3 state)) res))) ; What started string
-	    ((nth 4 state)		; In comment
-	     (setq res (cons '(comment) res)))
-	    ((null containing-sexp)
-	     ;; Line is at top level.
-	     ;; Indent like the previous top level line
-	     ;; unless that ends in a closeparen without semicolon,
-	     ;; in which case this line is the first argument decl.
-	     (cperl-backward-to-noncomment (or parse-start (point-min)))
-	     ;;(skip-chars-backward " \t\f\n")
-	     (cond
-	      ((or (bobp)
-		   (memq (preceding-char) (append ";}" nil)))
-	       (setq res (cons (list 'toplevel start) res)))
-	      ((eq (preceding-char) ?\) )
-	       (setq res (cons (list 'toplevel-after-parenth start) res)))
-	      (t
-	       (setq res (cons (list 'toplevel-continued start) res)))))
-	    ((/= (char-after containing-sexp) ?{)
-	     ;; line is expression, not statement:
-	     ;; indent to just after the surrounding open.
-	     ;; skip blanks if we do not close the expression.
-	     (setq res (cons (list 'expression-blanks
-				   (progn
-				     (goto-char (1+ containing-sexp))
-				     (or (looking-at "[ \t]*\\(#\\|$\\)")
-					 (skip-chars-forward " \t"))
-				     (point)))
-			     (cons (list 'expression containing-sexp) res))))
-	    ((progn
-	       ;; Containing-expr starts with \{.  Check whether it is a hash.
-	       (goto-char containing-sexp)
-	       (not (cperl-block-p)))
-	     (setq res (cons (list 'expression-blanks
-				   (progn
-				     (goto-char (1+ containing-sexp))
-				     (or (looking-at "[ \t]*\\(#\\|$\\)")
-					 (skip-chars-forward " \t"))
-				     (point)))
-			     (cons (list 'expression containing-sexp) res))))
-	    (t
-	     ;; Statement level.
-	     (setq res (cons (list 'in-block containing-sexp) res))
-	     ;; Is it a continuation or a new statement?
-	     ;; Find previous non-comment character.
-	     (cperl-backward-to-noncomment containing-sexp)
-	     ;; Back up over label lines, since they don't
-	     ;; affect whether our line is a continuation.
-	     ;; Back up comma-delimited lines too ?????
-	     (while (or (eq (preceding-char) ?\,)
-			(save-excursion (cperl-after-label)))
-	       (if (eq (preceding-char) ?\,)
-		   ;; Will go to beginning of line, essentially
-		   ;; Will ignore embedded sexpr XXXX.
-		   (cperl-backward-to-start-of-continued-exp containing-sexp))
-	       (beginning-of-line)
-	       (cperl-backward-to-noncomment containing-sexp))
-	     ;; Now we get the answer.
-	     (if (not (memq (preceding-char) (append ";}{" '(nil)))) ; Was ?\,
-		 ;; This line is continuation of preceding line's statement.
-		 (list (list 'statement-continued containing-sexp))
-	       ;; This line starts a new statement.
-	       ;; Position following last unclosed open.
-	       (goto-char containing-sexp)
-	       ;; Is line first statement after an open-brace?
-	       (or
-		;; If no, find that first statement and indent like
-		;; it.  If the first statement begins with label, do
-		;; not believe when the indentation of the label is too
-		;; small.
-		(save-excursion
-		  (forward-char 1)
-		  (let ((colon-line-end 0))
-		    (while (progn (skip-chars-forward " \t\n" start-point)
-				  (and (< (point) start-point)
-				       (looking-at
-					"#\\|[a-zA-Z_][a-zA-Z0-9_]*:[^:]")))
-		      ;; Skip over comments and labels following openbrace.
-		      (cond ((= (following-char) ?\#)
-			     ;;(forward-line 1)
-			     (end-of-line))
-			    ;; label:
-			    (t
-			     (save-excursion (end-of-line)
-					     (setq colon-line-end (point)))
-			     (search-forward ":"))))
-		    ;; Now at the point, after label, or at start
-		    ;; of first statement in the block.
-		    (and (< (point) start-point)
-			 (if (> colon-line-end (point))
-			     ;; Before statement after label
-			     (if (> (current-indentation)
-				    cperl-min-label-indent)
-				 (list (list 'label-in-block (point)))
-			       ;; Do not believe: `max' is involved
-			       (list
-				(list 'label-in-block-min-indent (point))))
-			   ;; Before statement
-			   (list 'statement-in-block (point))))))
-		;; If no previous statement,
-		;; indent it relative to line brace is on.
-		;; For open brace in column zero, don't let statement
-		;; start there too.  If cperl-indent-level is zero,
-		;; use cperl-brace-offset + cperl-continued-statement-offset instead.
-		;; For open-braces not the first thing in a line,
-		;; add in cperl-brace-imaginary-offset.
-
-		;; If first thing on a line:  ?????
-		(+ (if (and (bolp) (zerop cperl-indent-level))
-		       (+ cperl-brace-offset cperl-continued-statement-offset)
-		     cperl-indent-level)
-		   ;; Move back over whitespace before the openbrace.
-		   ;; If openbrace is not first nonwhite thing on the line,
-		   ;; add the cperl-brace-imaginary-offset.
-		   (progn (skip-chars-backward " \t")
-			  (if (bolp) 0 cperl-brace-imaginary-offset))
-		   ;; If the openbrace is preceded by a parenthesized exp,
-		   ;; move to the beginning of that;
-		   ;; possibly a different line
-		   (progn
-		     (if (eq (preceding-char) ?\))
-			 (forward-sexp -1))
-		     ;; Get initial indentation of the line we are on.
-		     ;; If line starts with label, calculate label indentation
-		     (if (save-excursion
-			   (beginning-of-line)
-			   (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
-			 (if (> (current-indentation) cperl-min-label-indent)
-			     (- (current-indentation) cperl-label-offset)
-			   (cperl-calculate-indent))
-		       (current-indentation))))))))
-      res)))
+;; (defvar cperl-indent-alist
+;;   '((string nil)
+;;     (comment nil)
+;;     (toplevel 0)
+;;     (toplevel-after-parenth 2)
+;;     (toplevel-continued 2)
+;;     (expression 1))
+;;   "Alist of indentation rules for CPerl mode.
+;; The values mean:
+;;   nil: do not indent;
+;;   number: add this amount of indentation.
+
+;; Not finished, not used.")
+
+;; (defun cperl-where-am-i (&optional parse-start start-state)
+;;   ;; Unfinished
+;;   "Return a list of lists ((TYPE POS)...) of good points before the point.
+;; ;; POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'.
+
+;; ;; Not finished, not used."
+;;   (save-excursion
+;;     (let* ((start-point (point))
+;; 	   (s-s (cperl-get-state))
+;; 	   (start (nth 0 s-s))
+;; 	   (state (nth 1 s-s))
+;; 	   (prestart (nth 3 s-s))
+;; 	   (containing-sexp (car (cdr state)))
+;; 	   (case-fold-search nil)
+;; 	   (res (list (list 'parse-start start) (list 'parse-prestart prestart))))
+;;       (cond ((nth 3 state)		; In string
+;; 	     (setq res (cons (list 'string nil (nth 3 state)) res))) ; What started string
+;; 	    ((nth 4 state)		; In comment
+;; 	     (setq res (cons '(comment) res)))
+;; 	    ((null containing-sexp)
+;; 	     ;; Line is at top level.
+;; 	     ;; Indent like the previous top level line
+;; 	     ;; unless that ends in a closeparen without semicolon,
+;; 	     ;; in which case this line is the first argument decl.
+;; 	     (cperl-backward-to-noncomment (or parse-start (point-min)))
+;; 	     ;;(skip-chars-backward " \t\f\n")
+;; 	     (cond
+;; 	      ((or (bobp)
+;; 		   (memq (preceding-char) (append ";}" nil)))
+;; 	       (setq res (cons (list 'toplevel start) res)))
+;; 	      ((eq (preceding-char) ?\) )
+;; 	       (setq res (cons (list 'toplevel-after-parenth start) res)))
+;; 	      (t
+;; 	       (setq res (cons (list 'toplevel-continued start) res)))))
+;; 	    ((/= (char-after containing-sexp) ?{)
+;; 	     ;; line is expression, not statement:
+;; 	     ;; indent to just after the surrounding open.
+;; 	     ;; skip blanks if we do not close the expression.
+;; 	     (setq res (cons (list 'expression-blanks
+;; 				   (progn
+;; 				     (goto-char (1+ containing-sexp))
+;; 				     (or (looking-at "[ \t]*\\(#\\|$\\)")
+;; 					 (skip-chars-forward " \t"))
+;; 				     (point)))
+;; 			     (cons (list 'expression containing-sexp) res))))
+;; 	    ((progn
+;; 	       ;; Containing-expr starts with \{.  Check whether it is a hash.
+;; 	       (goto-char containing-sexp)
+;; 	       (not (cperl-block-p)))
+;; 	     (setq res (cons (list 'expression-blanks
+;; 				   (progn
+;; 				     (goto-char (1+ containing-sexp))
+;; 				     (or (looking-at "[ \t]*\\(#\\|$\\)")
+;; 					 (skip-chars-forward " \t"))
+;; 				     (point)))
+;; 			     (cons (list 'expression containing-sexp) res))))
+;; 	    (t
+;; 	     ;; Statement level.
+;; 	     (setq res (cons (list 'in-block containing-sexp) res))
+;; 	     ;; Is it a continuation or a new statement?
+;; 	     ;; Find previous non-comment character.
+;; 	     (cperl-backward-to-noncomment containing-sexp)
+;; 	     ;; Back up over label lines, since they don't
+;; 	     ;; affect whether our line is a continuation.
+;; 	     ;; Back up comma-delimited lines too ?????
+;; 	     (while (or (eq (preceding-char) ?\,)
+;; 			(save-excursion (cperl-after-label)))
+;; 	       (if (eq (preceding-char) ?\,)
+;; 		   ;; Will go to beginning of line, essentially
+;; 		   ;; Will ignore embedded sexpr XXXX.
+;; 		   (cperl-backward-to-start-of-continued-exp containing-sexp))
+;; 	       (beginning-of-line)
+;; 	       (cperl-backward-to-noncomment containing-sexp))
+;; 	     ;; Now we get the answer.
+;; 	     (if (not (memq (preceding-char) (append ";}{" '(nil)))) ; Was ?\,
+;; 		 ;; This line is continuation of preceding line's statement.
+;; 		 (list (list 'statement-continued containing-sexp))
+;; 	       ;; This line starts a new statement.
+;; 	       ;; Position following last unclosed open.
+;; 	       (goto-char containing-sexp)
+;; 	       ;; Is line first statement after an open-brace?
+;; 	       (or
+;; 		;; If no, find that first statement and indent like
+;; 		;; it.  If the first statement begins with label, do
+;; 		;; not believe when the indentation of the label is too
+;; 		;; small.
+;; 		(save-excursion
+;; 		  (forward-char 1)
+;; 		  (let ((colon-line-end 0))
+;; 		    (while (progn (skip-chars-forward " \t\n" start-point)
+;; 				  (and (< (point) start-point)
+;; 				       (looking-at
+;; 					"#\\|[a-zA-Z_][a-zA-Z0-9_]*:[^:]")))
+;; 		      ;; Skip over comments and labels following openbrace.
+;; 		      (cond ((= (following-char) ?\#)
+;; 			     ;;(forward-line 1)
+;; 			     (end-of-line))
+;; 			    ;; label:
+;; 			    (t
+;; 			     (save-excursion (end-of-line)
+;; 					     (setq colon-line-end (point)))
+;; 			     (search-forward ":"))))
+;; 		    ;; Now at the point, after label, or at start
+;; 		    ;; of first statement in the block.
+;; 		    (and (< (point) start-point)
+;; 			 (if (> colon-line-end (point))
+;; 			     ;; Before statement after label
+;; 			     (if (> (current-indentation)
+;; 				    cperl-min-label-indent)
+;; 				 (list (list 'label-in-block (point)))
+;; 			       ;; Do not believe: `max' is involved
+;; 			       (list
+;; 				(list 'label-in-block-min-indent (point))))
+;; 			   ;; Before statement
+;; 			   (list 'statement-in-block (point))))))
+;; 		;; If no previous statement,
+;; 		;; indent it relative to line brace is on.
+;; 		;; For open brace in column zero, don't let statement
+;; 		;; start there too.  If cperl-indent-level is zero,
+;; 		;; use cperl-brace-offset + cperl-continued-statement-offset instead.
+;; 		;; For open-braces not the first thing in a line,
+;; 		;; add in cperl-brace-imaginary-offset.
+
+;; 		;; If first thing on a line:  ?????
+;; 		(+ (if (and (bolp) (zerop cperl-indent-level))
+;; 		       (+ cperl-brace-offset cperl-continued-statement-offset)
+;; 		     cperl-indent-level)
+;; 		   ;; Move back over whitespace before the openbrace.
+;; 		   ;; If openbrace is not first nonwhite thing on the line,
+;; 		   ;; add the cperl-brace-imaginary-offset.
+;; 		   (progn (skip-chars-backward " \t")
+;; 			  (if (bolp) 0 cperl-brace-imaginary-offset))
+;; 		   ;; If the openbrace is preceded by a parenthesized exp,
+;; 		   ;; move to the beginning of that;
+;; 		   ;; possibly a different line
+;; 		   (progn
+;; 		     (if (eq (preceding-char) ?\))
+;; 			 (forward-sexp -1))
+;; 		     ;; Get initial indentation of the line we are on.
+;; 		     ;; If line starts with label, calculate label indentation
+;; 		     (if (save-excursion
+;; 			   (beginning-of-line)
+;; 			   (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
+;; 			 (if (> (current-indentation) cperl-min-label-indent)
+;; 			     (- (current-indentation) cperl-label-offset)
+;; 			   (cperl-calculate-indent))
+;; 		       (current-indentation))))))))
+;;       res)))
 
 (defun cperl-calculate-indent-within-comment ()
   "Return the indentation amount for line, assuming that
--- a/lisp/ses.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/ses.el	Sun Mar 28 06:08:38 2004 +0000
@@ -2658,27 +2658,6 @@
 ;;;; Other user commands
 ;;;----------------------------------------------------------------------------
 
-;; This should be used by `call-interactively'.
-(defun ses-read-number (prompt &optional default)
-  (let ((n nil))
-    (when default
-      (setq prompt
-	    (if (string-match "\\(\\):[^:]*" prompt)
-		(replace-match (format " [%s]" default) t t prompt 1)
-	      (concat prompt (format " [%s] " default)))))
-    (while
-	(progn
-	  (let ((str (read-from-minibuffer prompt nil nil nil nil
-					   (number-to-string default))))
-	    (setq n (cond
-		     ((zerop (length str)) default)
-		     ((stringp str) (read str)))))
-	  (unless (numberp n)
-	    (message "Please enter a number.")
-	    (sit-for 1)
-	    t)))
-    n))
-
 (defun ses-unset-header-row ()
   "Select the default header row."
   (interactive)
@@ -2694,7 +2673,7 @@
    (list (if (numberp current-prefix-arg) current-prefix-arg
 	   (let ((currow (1+ (car (ses-sym-rowcol ses--curcell)))))
 	     (if current-prefix-arg
-		 (ses-read-number "Header row: " currow)
+		 (read-number "Header row: " currow)
 	       currow)))))
   (if (or (< row 0) (> row ses--numrows))
       (error "Invalid header-row"))
--- a/lisp/strokes.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/strokes.el	Sun Mar 28 06:08:38 2004 +0000
@@ -78,7 +78,7 @@
 
 ;;       however, if you would probably just have the user enter in the
 ;;       stroke interactively and then set the stroke to whatever he/she
-;;       entered. The Lisp function to interactively read a stroke is
+;;       entered.  The Lisp function to interactively read a stroke is
 ;;       `strokes-read-stroke'.  This is especially helpful when you're
 ;;       on a fast computer that can handle a 9x9 stroke grid.
 
@@ -435,7 +435,9 @@
 Operated just like `global-set-key', except for strokes.
 COMMAND is a symbol naming an interactively-callable function.  STROKE
 is a list of sampled positions on the stroke grid as described in the
-documentation for the `strokes-define-stroke' function."
+documentation for the `strokes-define-stroke' function.
+
+See also `strokes-global-set-stroke-string'."
   (interactive
    (list
     (and (or strokes-mode (strokes-mode t))
@@ -444,6 +446,22 @@
     (read-command "Command to map stroke to: ")))
   (strokes-define-stroke strokes-global-map stroke command))
 
+(defun strokes-global-set-stroke-string (stroke string)
+  "Interactively give STROKE the global binding as STRING.
+Operated just like `global-set-key', except for strokes.  STRING
+is a string to be inserted by the stroke.  STROKE is a list of
+sampled positions on the stroke grid as described in the
+documentation for the `strokes-define-stroke' function.
+
+Compare `strokes-global-set-stroke'."
+  (interactive
+   (list
+    (and (or strokes-mode (strokes-mode t))
+	 (strokes-read-complex-stroke
+	  "Draw with mouse button 1 (or 2).  End with button 3..."))
+    (read-string "String to map stroke to: ")))
+  (strokes-define-stroke strokes-global-map stroke string))
+
 ;;(defun global-unset-stroke (stroke); FINISH THIS DEFUN!
 ;;  "delete all strokes matching STROKE from `strokes-global-map',
 ;; letting the user input
@@ -1319,7 +1337,9 @@
      "-------                                     ------")
     (loop for def in strokes-map do
 	  (let ((stroke (car def))
-		(command-name (symbol-name (cdr def))))
+		(command-name (if (symbolp (cdr def))
+				  (symbol-name (cdr def))
+				(prin1-to-string (cdr def)))))
 	    (strokes-xpm-for-stroke stroke " *strokes-xpm*")
 	    (newline 2)
 	    (insert-char ?\  45)
@@ -1327,9 +1347,13 @@
 	    (insert command-name)
 	    (beginning-of-line)
 	    (forward-char 45)
-	    (insert-image (create-image (with-current-buffer " *strokes-xpm*"
-					  (buffer-string))
-					'xpm t)))
+	    (insert-image
+	     (create-image (with-current-buffer " *strokes-xpm*"
+			     (buffer-string))
+			   'xpm t
+			   :color-symbols
+			   `(("foreground"
+			      . ,(frame-parameter nil 'foreground-color))))))
 	  finally do (kill-region (1+ (point)) (point-max)))
     (view-buffer "*Strokes List*" nil)
     (set (make-local-variable 'view-mode-map)
--- a/lisp/subr.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/subr.el	Sun Mar 28 06:08:38 2004 +0000
@@ -1,6 +1,6 @@
 ;;; subr.el --- basic lisp subroutines for Emacs
 
-;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001, 2002, 2003
+;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001, 2002, 03, 2004
 ;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -1307,6 +1307,27 @@
 		  (setq pass new-pass))))))
       (message nil)
       (or pass default ""))))
+
+;; This should be used by `call-interactively' for `n' specs.
+(defun read-number (prompt &optional default)
+  (let ((n nil))
+    (when default
+      (setq prompt
+	    (if (string-match "\\(\\):[^:]*" prompt)
+		(replace-match (format " [%s]" default) t t prompt 1)
+	      (concat prompt (format " [%s] " default)))))
+    (while
+	(progn
+	  (let ((str (read-from-minibuffer prompt nil nil nil nil
+					   (number-to-string default))))
+	    (setq n (cond
+		     ((zerop (length str)) default)
+		     ((stringp str) (read str)))))
+	  (unless (numberp n)
+	    (message "Please enter a number.")
+	    (sit-for 1)
+	    t)))
+    n))
 
 ;;; Atomic change groups.
 
--- a/lisp/vc-hooks.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/vc-hooks.el	Sun Mar 28 06:08:38 2004 +0000
@@ -6,7 +6,7 @@
 ;; Author:     FSF (see vc.el for full credits)
 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
 
-;; $Id: vc-hooks.el,v 1.163 2004/03/23 20:59:19 monnier Exp $
+;; $Id: vc-hooks.el,v 1.164 2004/03/26 06:06:39 spiegel Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -267,6 +267,15 @@
   ;; BEWARE!! `file' is evaluated twice!!
   `(vc-call-backend (vc-backend ,file) ',fun ,file ,@args))
 
+(defun vc-arg-list (backend fun)
+  "Return the argument list of BACKEND function FUN."
+  (let ((f (symbol-function (vc-find-backend-function backend fun))))
+    (if (listp f)
+        ;; loaded from .el file
+        (cadr f)
+      ;; loaded from .elc file
+      (aref f 0))))
+
 
 (defsubst vc-parse-buffer (pattern i)
   "Find PATTERN in the current buffer and return its Ith submatch."
@@ -463,15 +472,12 @@
 (defun vc-default-workfile-unchanged-p (backend file)
   "Check if FILE is unchanged by diffing against the master version.
 Return non-nil if FILE is unchanged."
-  (let ((diff-args-length
-         (length (cadr (symbol-function
-                        (vc-find-backend-function backend 'diff))))))
-    (zerop (if (> diff-args-length 4) 
-               ;; If the implementation supports it, let the output
-               ;; go to *vc*, not *vc-diff*, since this is an internal call.
-               (vc-call diff file nil nil "*vc*")
-             ;; for backward compatibility
-             (vc-call diff file)))))
+  (zerop (if (> (length (vc-arg-list backend 'diff)) 4)
+             ;; If the implementation supports it, let the output
+             ;; go to *vc*, not *vc-diff*, since this is an internal call.
+             (vc-call diff file nil nil "*vc*")
+           ;; for backward compatibility
+           (vc-call diff file))))
 
 (defun vc-workfile-version (file)
   "Return the version level of the current workfile FILE.
--- a/lisp/vc.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/vc.el	Sun Mar 28 06:08:38 2004 +0000
@@ -7,7 +7,7 @@
 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
 ;; Keywords: tools
 
-;; $Id: vc.el,v 1.371 2004/03/25 15:39:03 sds Exp $
+;; $Id: vc.el,v 1.373 2004/03/26 16:17:12 monnier Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -1989,9 +1989,7 @@
   (vc-resynch-buffer file t (not (buffer-modified-p)))
   (if (zerop status) (message "Merge successful")
     (smerge-mode 1)
-    (if (y-or-n-p "Conflicts detected.  Resolve them now? ")
-	(vc-resolve-conflicts name-A name-B)
-      (message "File contains conflict markers"))))
+    (message "File contains conflicts.")))
 
 ;;;###autoload
 (defalias 'vc-resolve-conflicts 'smerge-ediff)
@@ -2334,19 +2332,12 @@
 If FOCUS-REV is non-nil, leave the point at that revision."
   (interactive)
   (vc-ensure-vc-buffer)
-  (let* ((file buffer-file-name)
-         (backend-function
-          (symbol-function
-           (vc-find-backend-function (vc-backend file) 'print-log)))
-         (print-log-args
-          (if (byte-code-function-p backend-function)
-              (aref backend-function 0)
-              (cadr backend-function))))
+  (let ((file buffer-file-name))
     (or focus-rev (setq focus-rev (vc-workfile-version file)))
     ;; Don't switch to the output buffer before running the command,
     ;; so that any buffer-local settings in the vc-controlled
     ;; buffer can be accessed by the command.
-    (if (cdr print-log-args)
+    (if (> (length (vc-arg-list (vc-backend file) 'print-log)) 1)
         (progn
           (vc-call print-log file "*vc-change-log*")
           (set-buffer "*vc-change-log*"))
--- a/lisp/woman.el	Fri Mar 26 04:35:08 2004 +0000
+++ b/lisp/woman.el	Sun Mar 28 06:08:38 2004 +0000
@@ -3239,7 +3239,7 @@
   ;; Paragraph .LP/PP/HP/IP/TP and font .B/.BI etc. macros reset font.
   ;; Should .SH/.SS reset font?
   ;; Font size setting macros (?) should reset font.
-  (let ((woman-font-alist woman-font-alist) ; for local updating
+  (let ((font-alist woman-font-alist) ; for local updating
 	(previous-pos (point))
 	(previous-font 'default)
 	(current-font 'default))
@@ -3270,15 +3270,15 @@
 	  ;; Get font name:
 	  (or font
 	      (let ((fontstring (match-string 0)))
-		(setq font (assoc fontstring woman-font-alist)
-		      ;; NB: woman-font-alist contains VARIABLE NAMES.
+		(setq font (assoc fontstring font-alist)
+		      ;; NB: font-alist contains VARIABLE NAMES.
 		      font (if font
 			       (cdr font)
 			     (WoMan-warn "Unknown font %s." fontstring)
 			     ;; Output this message once only per call ...
-			     (setq woman-font-alist
+			     (setq font-alist
 				   (cons (cons fontstring 'woman-unknown-face)
-					 woman-font-alist))
+					 font-alist))
 			     'woman-unknown-face)
 		      )))
 	  ;; Delete font control line or escape sequence:
--- a/src/ChangeLog	Fri Mar 26 04:35:08 2004 +0000
+++ b/src/ChangeLog	Sun Mar 28 06:08:38 2004 +0000
@@ -1,19 +1,21 @@
+2004-03-26  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (syms_of_xdisp): Include `void-variable' in list_of_error
+	to catch errors in calc_pixel_width_or_height during redisplay.
+
 2004-03-26  Masatake YAMATO  <jet@gyve.org>
 
-	* insdel.c (adjust_markers_for_insert): Call
-	fix_start_end_in_overlays.
-
-	* buffer.c (fix_start_end_in_overlays): Rename
-	fix_overlays_in_range.
+	* buffer.c (fix_start_end_in_overlays): Rename fix_overlays_in_range.
+
+	* lisp.h (fix_start_end_in_overlays): Likewise.
+
+	* insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
 
 	* editfns.c (Ftranspose_regions): Likewise.
 
-	* lisp.h (top_level): Likewise.
-
 2004-03-20  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
 
-	* xterm.c (handle_one_xevent): Do not pass key press events to
-	GTK.
+	* xterm.c (handle_one_xevent): Do not pass key press events to GTK.
 
 2004-03-19  Richard M. Stallman  <rms@gnu.org>
 
@@ -65,8 +67,7 @@
 
 2004-03-14  Steven Tamm <steventamm@mac.com>
 
-	* Makefile.in (XMENU_OBJ): Do not include xmenu.o if
-	HAVE_CARBON is defined.
+	* Makefile.in (XMENU_OBJ) [HAVE_CARBON]: Do not include xmenu.o.
 
 2004-03-14  Kim F. Storm  <storm@cua.dk>
 
--- a/src/xdisp.c	Fri Mar 26 04:35:08 2004 +0000
+++ b/src/xdisp.c	Sun Mar 28 06:08:38 2004 +0000
@@ -315,7 +315,7 @@
 extern Lisp_Object Voverflow_newline_into_fringe;
 
 /* Test if overflow newline into fringe.  Called with iterator IT
-   at or past right window margin, and with IT->current_x set.  */ 
+   at or past right window margin, and with IT->current_x set.  */
 
 #define IT_OVERFLOW_NEWLINE_INTO_FRINGE(it)	\
   (!NILP (Voverflow_newline_into_fringe)	\
@@ -407,7 +407,7 @@
 
 /* List of variables (symbols) which hold markers for overlay arrows.
    The symbols on this list are examined during redisplay to determine
-   where to display overlay arrows.  */ 
+   where to display overlay arrows.  */
 
 Lisp_Object Voverlay_arrow_variable_list;
 
@@ -8363,7 +8363,7 @@
 	  /* Redisplay the tool-bar if we changed it.  */
 	  if (! NILP (Fequal (old_tool_bar, f->tool_bar_items)))
 	    w->update_mode_line = Qt;
-	  
+
 	  UNGCPRO;
 
 	  unbind_to (count, Qnil);
@@ -9462,7 +9462,7 @@
 	continue;
 
       val = find_symbol_value (var);
-      
+
       if (MARKERP (val)
 	  && current_buffer == XMARKER (val)->buffer
 	  && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val)))
@@ -11352,7 +11352,7 @@
      which reflect the whole buffer size, with special markers
      indicating narrowing, and scrollbars which reflect only the
      visible region.
-     
+
      Note that mini-buffers sometimes aren't displaying any text.  */
   if (!MINI_WINDOW_P (w)
       || (w == XWINDOW (minibuf_window)
@@ -11364,7 +11364,7 @@
       /* I don't think this is guaranteed to be right.  For the
 	 moment, we'll pretend it is.  */
       end = BUF_Z (buf) - XFASTINT (w->window_end_pos) - BUF_BEGV (buf);
-      
+
       if (end < start)
 	end = start;
       if (whole < (end - start))
@@ -16701,7 +16701,7 @@
 /* Calculate a width or height in pixels from a specification using
    the following elements:
 
-   SPEC ::= 
+   SPEC ::=
      NUM      - a (fractional) multiple of the default font width/height
      (NUM)    - specifies exactly NUM pixels
      UNIT     - a fixed number of pixels, see below.
@@ -16711,7 +16711,7 @@
      (- SPEC SPEC ...)  - subtract pixel values
      (- SPEC)           - negate pixel value
 
-   NUM ::= 
+   NUM ::=
      INT or FLOAT   - a number constant
      SYMBOL         - use symbol's (buffer local) variable binding.
 
@@ -16737,15 +16737,15 @@
    Examples:
 
    Pixels corresponding to 5 inches:
-     (5 . in)     
-		
+     (5 . in)
+
    Total width of non-text areas on left side of window (if scroll-bar is on left):
      '(space :width (+ left-fringe left-margin scroll-bar))
 
    Align to first text column (in header line):
      '(space :align-to 0)
 
-   Align to middle of text area minus half the width of variable `my-image' 
+   Align to middle of text area minus half the width of variable `my-image'
    containing a loaded image:
      '(space :align-to (0.5 . (- text my-image)))
 
@@ -18313,7 +18313,7 @@
 	   && calc_pixel_width_or_height (&tem, it, prop, font, 1, &align_to))
     {
       if (it->glyph_row == NULL || !it->glyph_row->mode_line_p)
-	align_to = (align_to < 0 
+	align_to = (align_to < 0
 		    ? 0
 		    : align_to - window_box_left_offset (it->w, TEXT_AREA));
       else if (align_to < 0)
@@ -20196,7 +20196,7 @@
 	  int x0, y0;
 
 	  /* Need an even number of coordinates, and at least 3 edges.  */
-	  if (n < 6 || n & 1) 
+	  if (n < 6 || n & 1)
 	    return 0;
 
 	  /* Count edge segments intersecting line from (X,Y) to (X,infinity).
@@ -20246,13 +20246,13 @@
 	return XCAR (map);
       map = XCDR (map);
     }
-  
+
   return Qnil;
 }
 
 DEFUN ("lookup-image-map", Flookup_image_map, Slookup_image_map,
        3, 3, 0,
-       doc: /* Lookup in image map MAP coordinates X and Y.  
+       doc: /* Lookup in image map MAP coordinates X and Y.
 An image map is an alist where each element has the format (AREA ID PLIST).
 An AREA is specified as either a rectangle, a circle, or a polygon:
 A rectangle is a cons (rect . ((x0 . y0) . (x1 . y1))) specifying the
@@ -21125,13 +21125,13 @@
   cursor_glyph = get_phys_cursor_glyph (w);
   if (cursor_glyph)
     {
-      /* r is relative to W's box, but w->phys_cursor.x is relative 
+      /* r is relative to W's box, but w->phys_cursor.x is relative
 	 to left edge of W's TEXT area.  Adjust it.  */
       cr.x = window_box_left_offset (w, TEXT_AREA) + w->phys_cursor.x;
       cr.y = w->phys_cursor.y;
       cr.width = cursor_glyph->pixel_width;
       cr.height = w->phys_cursor_height;
-      /* ++KFS: W32 version used W32-specific IntersectRect here, but 
+      /* ++KFS: W32 version used W32-specific IntersectRect here, but
 	 I assume the effect is the same -- and this is portable.  */
       return x_intersect_rectangles (&cr, r, &result);
     }
@@ -21151,7 +21151,7 @@
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   
   /* We could do better, if we knew what type of scroll-bar the adjacent
-     windows (on either side) have...  But we don't :-( 
+     windows (on either side) have...  But we don't :-(
      However, I think this works ok.  ++KFS 2003-04-25 */
 
   /* Redraw borders between horizontally adjacent windows.  Don't
@@ -21642,7 +21642,9 @@
   Qinhibit_free_realized_faces = intern ("inhibit-free-realized-faces");
   staticpro (&Qinhibit_free_realized_faces);
 
-  list_of_error = Fcons (intern ("error"), Qnil);
+  list_of_error = Fcons (Fcons (intern ("error"),
+				Fcons (intern ("void-variable"), Qnil)),
+			 Qnil);
   staticpro (&list_of_error);
 
   Qlast_arrow_position = intern ("last-arrow-position");
@@ -21698,7 +21700,7 @@
   DEFVAR_LISP ("void-text-area-pointer", &Vvoid_text_area_pointer,
     doc: /* *The pointer shape to show in void text areas.
 Nil means to show the text pointer.  Other options are `arrow', `text',
-`hand', `vdrag', `hdrag', `modeline', and `hourglass'.  */); 
+`hand', `vdrag', `hdrag', `modeline', and `hourglass'.  */);
   Vvoid_text_area_pointer = Qarrow;
 
   DEFVAR_LISP ("inhibit-redisplay", &Vinhibit_redisplay,