From: Juri Linkov Date: Tue, 22 Apr 2008 19:50:11 +0000 (+0000) Subject: (minibuffer-default-add-shell-commands): New function. X-Git-Tag: emacs-pretest-23.0.90~6128 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a98a2fe87a5d0e16a3b518b5278c4818eb43caec;p=emacs.git (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. --- diff --git a/lisp/simple.el b/lisp/simple.el index 44dcbf45be1..4ef352e1cd5 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1957,6 +1957,25 @@ This buffer is used when `shell-command' or `shell-command-on-region' 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 @@ If it is nil, error output is mingled with regular output. 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)