From: Leo Liu Date: Fri, 29 Aug 2014 02:48:17 +0000 (+0800) Subject: * files.el (minibuffer-with-setup-hook): Allow (:append FUN) to X-Git-Tag: emacs-25.0.90~2635^2~679^2~408 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fd53ccaafc951fd19eda444ec2054e35f8db69e1;p=emacs.git * files.el (minibuffer-with-setup-hook): Allow (:append FUN) to append to minibuffer-setup-hook. Fixes: debbugs:18341 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e41633548c6..531196aeda6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-08-29 Leo Liu + + * files.el (minibuffer-with-setup-hook): Allow (:append FUN) to + append to minibuffer-setup-hook. (Bug#18341) + 2014-08-28 Stefan Monnier * progmodes/cc-defs.el: Expose c-lanf-defconst's expressions to the diff --git a/lisp/files.el b/lisp/files.el index edbf647530c..486dee638a9 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1375,6 +1375,9 @@ return value, which may be passed as the REQUIRE-MATCH arg to (defmacro minibuffer-with-setup-hook (fun &rest body) "Temporarily add FUN to `minibuffer-setup-hook' while executing BODY. +FUN can also be (:append FUN1), in which case FUN1 is appended to +`minibuffer-setup-hook'. + BODY should use the minibuffer at most once. Recursive uses of the minibuffer are unaffected (FUN is not called additional times). @@ -1383,20 +1386,23 @@ This macro actually adds an auxiliary function that calls FUN, rather than FUN itself, to `minibuffer-setup-hook'." (declare (indent 1) (debug t)) (let ((hook (make-symbol "setup-hook")) - (funsym (make-symbol "fun"))) + (funsym (make-symbol "fun")) + (append nil)) + (when (eq (car-safe fun) :append) + (setq append '(t) fun (cadr fun))) `(let ((,funsym ,fun) ,hook) (setq ,hook - (lambda () - ;; Clear out this hook so it does not interfere - ;; with any recursive minibuffer usage. - (remove-hook 'minibuffer-setup-hook ,hook) - (funcall ,funsym))) + (lambda () + ;; Clear out this hook so it does not interfere + ;; with any recursive minibuffer usage. + (remove-hook 'minibuffer-setup-hook ,hook) + (funcall ,funsym))) (unwind-protect - (progn - (add-hook 'minibuffer-setup-hook ,hook) - ,@body) - (remove-hook 'minibuffer-setup-hook ,hook))))) + (progn + (add-hook 'minibuffer-setup-hook ,hook ,@append) + ,@body) + (remove-hook 'minibuffer-setup-hook ,hook))))) (defun find-file-read-args (prompt mustmatch) (list (read-file-name prompt nil default-directory mustmatch)