# HG changeset patch # User Juri Linkov # Date 1208893811 0 # Node ID 5e8b311c9c8ec4b5cdb04905b79fd8d1d9473e12 # Parent 43cd713cec4452e34727f52ab6352e4bb3b58b30 (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 -r 43cd713cec44 -r 5e8b311c9c8e lisp/simple.el --- 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)