changeset 61043:9306183f7d44

(minibuffer-with-setup-hook): New macro. (find-file-read-args): Use it to avoid let-binding minibuffer-with-setup-hook (which breaks turning on/off file-name-shadow-mode while in the prompt).
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 28 Mar 2005 19:58:58 +0000
parents 31060527396c
children 17207b620cf3
files lisp/files.el
diffstat 1 files changed, 22 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/files.el	Mon Mar 28 19:33:45 2005 +0000
+++ b/lisp/files.el	Mon Mar 28 19:58:58 2005 +0000
@@ -928,20 +928,31 @@
 (defvar find-file-default nil
   "Used within `find-file-read-args'.")
 
+(defmacro minibuffer-with-setup-hook (fun &rest body)
+  "Add FUN to `minibuffer-setup-hook' while executing BODY.
+BODY should use the minibuffer at most once.
+Recursive uses of the minibuffer will not be affected."
+  (declare (indent 1) (debug t))
+  (let ((hook (make-symbol "setup-hook")))
+    `(let ((,hook
+	    (lambda ()
+	      ;; Clear out this hook so it does not interfere
+	      ;; with any recursive minibuffer usage.
+	      (remove-hook 'minibuffer-setup-hook ,hook)
+	      (,fun))))
+       (unwind-protect
+	   (progn
+	     (add-hook 'minibuffer-setup-hook ,hook)
+	     ,@body)
+	 (remove-hook 'minibuffer-setup-hook ,hook)))))
+
 (defun find-file-read-args (prompt mustmatch)
   (list (let ((find-file-default
 	       (and buffer-file-name
-		    (abbreviate-file-name buffer-file-name)))
-	      (munge-default-fun
-	       (lambda ()
-		 (setq minibuffer-default find-file-default)
-		 ;; Clear out this hook so it does not interfere
-		 ;; with any recursive minibuffer usage.
-		 (pop minibuffer-setup-hook)))
-	      (minibuffer-setup-hook
-	       minibuffer-setup-hook))
-	  (add-hook 'minibuffer-setup-hook munge-default-fun)
-	  (read-file-name prompt nil default-directory mustmatch))
+		    (abbreviate-file-name buffer-file-name))))
+	  (minibuffer-with-setup-hook
+	      (lambda () (setq minibuffer-default find-file-default))
+	    (read-file-name prompt nil default-directory mustmatch)))
 	t))
 
 (defun find-file (filename &optional wildcards)