emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Minibuffer default values list


From: Juri Linkov
Subject: Re: Minibuffer default values list
Date: Mon, 03 Dec 2007 02:34:55 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux)

> The "pre-hook" should be a single function, not a hook,
> and ideally should only run when trying to move into the future,
> for the reasons I gave.

In the patch below I added a new one-function variable
`minibuffer-default-set-function' run before `goto-history-element'
reads the value of `minibuffer-default' when moving into the future.

Note that `shell-command' still depends on dired, but this can be avoided
by moving `dired-read-shell-command-default' to mailcap.el.

Also I added another dependence on dired, and I think for a good reason:
when M-! is typed in the dired buffer, then it gets the dired file
under point and provides its commands to the list of future values.

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.889
diff -c -r1.889 simple.el
*** lisp/simple.el      15 Nov 2007 16:42:43 -0000      1.889
--- lisp/simple.el      3 Dec 2007 00:34:45 -0000
***************
*** 1298,1307 ****
--- 1298,1316 ----
  
  (defvar minibuffer-temporary-goal-position nil)
  
+ (defvar minibuffer-default-set-function nil
+   "*Function run by `goto-history-element' before using `minibuffer-default'.
+ This is useful to dynamically set the value of `minibuffer-default'
+ before `goto-history-element' reads it when moves into the future.")
+ 
  (defun goto-history-element (nabs)
    "Puts element of the minibuffer history in the minibuffer.
  The argument NABS specifies the absolute history position."
    (interactive "p")
+   (when (and (functionp minibuffer-default-set-function)
+            (< nabs (if (stringp minibuffer-default) -1 0)))
+     (setq minibuffer-default (funcall minibuffer-default-set-function)
+         minibuffer-default-set-function nil))
    (let ((minimum (if minibuffer-default
                     (- (if (listp minibuffer-default)
                            (length minibuffer-default)
***************
*** 1962,1971 ****
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive (list (read-from-minibuffer "Shell command: "
!                                          nil nil nil 'shell-command-history)
!                    current-prefix-arg
!                    shell-command-default-error-buffer))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
         (find-file-name-handler (directory-file-name default-directory)
--- 1972,1991 ----
  In an interactive call, the variable `shell-command-default-error-buffer'
  specifies the value of ERROR-BUFFER."
  
!   (interactive
!    (let* ((filename
!          (cond (buffer-file-name (file-relative-name buffer-file-name))
!                ((eq major-mode 'dired-mode) (dired-get-filename t))))
!         (default filename)
!         (minibuffer-default-set-function
!          (lambda ()
!            (if filename
!                (cons filename
!                      (dired-read-shell-command-default (list filename)))))))
!      (list (read-from-minibuffer "Shell command: " nil nil nil
!                                'shell-command-history default)
!          current-prefix-arg
!          shell-command-default-error-buffer)))
    ;; Look for a handler in case default-directory is a remote file name.
    (let ((handler
         (find-file-name-handler (directory-file-name default-directory)

Index: lisp/dired-aux.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/dired-aux.el,v
retrieving revision 1.160
diff -c -r1.160 dired-aux.el
*** lisp/dired-aux.el   22 Nov 2007 13:49:34 -0000      1.160
--- lisp/dired-aux.el   3 Dec 2007 00:34:48 -0000
***************
*** 517,528 ****
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (dired-mark-pop-up
!    nil 'shell files
!    (function read-string)
!    (format prompt (dired-mark-prompt arg files))
!    nil 'shell-command-history
!    (dired-read-shell-command-default files)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.
--- 517,529 ----
  ;;ARG is the prefix arg and may be used to indicate in the prompt which
  ;;  files are affected.
  ;;This is an extra function so that you can redefine it, e.g., to use gmhist."
!   (let ((minibuffer-default-set-function
!        (lambda () (dired-read-shell-command-default files))))
!     (dired-mark-pop-up
!      nil 'shell files
!      (function read-string)
!      (format prompt (dired-mark-prompt arg files))
!      nil 'shell-command-history)))
  
  ;; The in-background argument is only needed in Emacs 18 where
  ;; shell-command doesn't understand an appended ampersand `&'.

-- 
Juri Linkov
http://www.jurta.org/emacs/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]