From: Matthias <cimosque@free.fr>
Subject: Re: dired: "!" How to see not just result, but !-cmd too?
Date: 20 Jan 2005 14:23:48 +0100 [thread overview]
Message-ID: <yg7r7kgmdy3.fsf@fermat.math.uvsq.fr> (raw)
In-Reply-To: csa996$bie$1@panix2.panix.com
Here is a modified `shell-command': it shows the command in the header
line of the output buffer.
Note that the new code is only four or five lines long (you can use the
`fixme' comments as flags to found it); I've removed the documentation
spec to shorten the code.
(defun 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)
'shell-command)))
(if handler
(funcall handler 'shell-command command output-buffer error-buffer)
(if (and output-buffer
(not (or (bufferp output-buffer) (stringp output-buffer))))
(let ((error-file
(if error-buffer
(make-temp-file
(expand-file-name "scor"
(or small-temporary-file-directory
temporary-file-directory)))
nil)))
(barf-if-buffer-read-only)
(push-mark nil t)
;; We do not use -f for csh; we will not support broken use of
;; .cshrcs. Even the BSD csh manual says to use
;; "if ($?prompt) exit" before things which are not useful
;; non-interactively. Besides, if someone wants their other
;; aliases for shell commands then they can still have them.
(call-process shell-file-name nil
(if error-file
(list t error-file)
t)
nil shell-command-switch command)
(when (and error-file (file-exists-p error-file))
(if (< 0 (nth 7 (file-attributes error-file)))
(with-current-buffer (get-buffer-create error-buffer)
(let ((pos-from-end (- (point-max) (point))))
(or (bobp)
(insert "\f\n"))
;; Do no formatting while reading error file,
;; because that can run a shell command, and we
;; don't want that to cause an infinite recursion.
(format-insert-file error-file nil)
;; Put point after the inserted errors.
(goto-char (- (point-max) pos-from-end)))
(display-buffer (current-buffer))))
(delete-file error-file))
;; This is like exchange-point-and-mark, but doesn't
;; activate the mark. It is cleaner to avoid activation,
;; even though the command loop would deactivate the mark
;; because we inserted text.
(goto-char (prog1 (mark t)
(set-marker (mark-marker) (point)
(current-buffer)))))
;; Preserve the match data in case called from a program.
(save-match-data
(if (string-match "[ \t]*&[ \t]*$" command)
;; Command ending with ampersand means asynchronous.
(let ((buffer (get-buffer-create
(or output-buffer "*Async Shell Command*")))
(directory default-directory)
proc)
;; Remove the ampersand.
(setq command (substring command 0 (match-beginning 0)))
;; If will kill a process, query first.
(setq proc (get-buffer-process buffer))
(if proc
(if (yes-or-no-p "A command is running. Kill it? ")
(kill-process proc)
(error "Shell command in progress")))
(save-excursion
(set-buffer buffer)
(setq buffer-read-only nil)
(erase-buffer)
(display-buffer buffer)
(setq default-directory directory)
(setq proc (start-process "Shell" buffer shell-file-name
shell-command-switch command))
(setq mode-line-process '(":%s"))
(require 'shell) (shell-mode)
;; Fixme: ensure that it is one line only; add the ampersand
(setq header-line-format command)
(set-process-sentinel proc 'shell-command-sentinel)
))
(shell-command-on-region (point) (point) command
output-buffer nil error-buffer)
;; Fixme: ensure that it is one line only
(let ((buffer (or output-buffer "*Shell Command Output*")))
(save-excursion
(set-buffer buffer)
(setq header-line-format command)))))))))
--
Matthias
next prev parent reply other threads:[~2005-01-20 13:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-15 5:21 dired: "!" How to see not just result, but !-cmd too? David Combs
2005-01-17 16:40 ` Kevin Rodgers
2005-01-20 13:23 ` Matthias [this message]
2005-01-20 16:28 ` Kevin Rodgers
2005-01-21 17:38 ` Kevin Rodgers
2005-01-24 12:49 ` Matthias
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=yg7r7kgmdy3.fsf@fermat.math.uvsq.fr \
--to=cimosque@free.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).