Mercurial > emacs
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)