Mercurial > emacs
changeset 94251:5e8b311c9c8e
(minibuffer-default-add-shell-commands): New function.
Use declare-function for mailcap-file-default-commands from "mailcap".
(shell-command): Set local minibuffer-default-add-function to
minibuffer-default-add-shell-commands in minibuffer-with-setup-hook
before calling read-shell-command. Set 4th arg default-value of
read-shell-command to relative buffer-file-name in file buffers.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 22 Apr 2008 19:50:11 +0000 |
parents | 43cd713cec44 |
children | 5bdeba83b319 |
files | lisp/simple.el |
diffstat | 1 files changed, 30 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/simple.el Tue Apr 22 19:49:26 2008 +0000 +++ b/lisp/simple.el Tue Apr 22 19:50:11 2008 +0000 @@ -1957,6 +1957,25 @@ is run interactively. A value of nil means that output to stderr and stdout will be intermixed in the output stream.") +(declare-function mailcap-file-default-commands "mailcap" (files)) + +(defun minibuffer-default-add-shell-commands () + "Return a list of all commands associted with the current file. +This function is used to add all related commands retieved by `mailcap' +to the end of the list of defaults just after the default value." + (interactive) + (let* ((filename (if (listp minibuffer-default) + (car minibuffer-default) + minibuffer-default)) + (commands (and filename (require 'mailcap nil t) + (mailcap-file-default-commands (list filename))))) + (setq commands (mapcar (lambda (command) + (concat command " " filename)) + commands)) + (if (listp minibuffer-default) + (append minibuffer-default commands) + (cons minibuffer-default commands)))) + (defun minibuffer-complete-shell-command () "Dynamically complete shell command at point." (interactive) @@ -2031,9 +2050,17 @@ In an interactive call, the variable `shell-command-default-error-buffer' specifies the value of ERROR-BUFFER." - (interactive (list (read-shell-command "Shell command: ") - current-prefix-arg - shell-command-default-error-buffer)) + (interactive + (list + (minibuffer-with-setup-hook + (lambda () + (set (make-local-variable 'minibuffer-default-add-function) + 'minibuffer-default-add-shell-commands)) + (read-shell-command "Shell command: " nil nil + (and buffer-file-name + (file-relative-name buffer-file-name)))) + 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)