shell-command-mode: New major mode for async-shell-command
* etc/NEWS: Mention the additions. * lisp/shell.el (shell-command-mode): New major mode (bug#71049). * lisp/simple.el (async-shell-command-mode): New variable, with default value pointing to that mode. (shell-command): Refer to it here. (async-shell-command): Update docstring. * lisp/net/tramp.el (tramp-handle-shell-command): Use the new variable when available.
This commit is contained in:
parent
d91ad9be5a
commit
a154f0aa73
4 changed files with 30 additions and 10 deletions
5
etc/NEWS
5
etc/NEWS
|
@ -1902,6 +1902,11 @@ than regular expressions, but less complexity than context-free
|
|||
grammars. The Info manual "(elisp) Parsing Expression Grammars" has
|
||||
documentation and examples.
|
||||
|
||||
** New major mode 'shell-command-mode'.
|
||||
This mode is used by default for the output of 'async-shell-command'.
|
||||
To revert to the previous behavior, set the (also new) variable
|
||||
'async-shell-command-mode' to 'shell-mode'. Any hooks or mode-specific
|
||||
variables used should be adapted appropriately.
|
||||
|
||||
* Incompatible Lisp Changes in Emacs 30.1
|
||||
|
||||
|
|
|
@ -5259,8 +5259,13 @@ support symbolic links."
|
|||
;; Display output.
|
||||
(with-current-buffer output-buffer
|
||||
(setq mode-line-process '(":%s"))
|
||||
(unless (eq major-mode 'shell-mode)
|
||||
(shell-mode))
|
||||
(cond
|
||||
((boundp 'async-shell-command-mode)
|
||||
;; Emacs 30+
|
||||
(unless (eq major-mode async-shell-command-mode)
|
||||
(funcall async-shell-command-mode)))
|
||||
((not (eq major-mode 'shell-mode))
|
||||
(shell-mode)))
|
||||
(set-process-filter p #'comint-output-filter)
|
||||
(set-process-sentinel p #'shell-command-sentinel)
|
||||
(when error-file
|
||||
|
|
|
@ -838,6 +838,13 @@ Sentinels will always get the two parameters PROCESS and EVENT."
|
|||
(with-current-buffer buf
|
||||
(insert (format "\nProcess %s %s\n" process event))))))
|
||||
|
||||
(define-derived-mode shell-command-mode comint-mode "Shell"
|
||||
"Major mode for the output of asynchronous `shell-command'."
|
||||
(setq-local font-lock-defaults '(shell-font-lock-keywords t))
|
||||
;; See comments in `shell-mode'.
|
||||
(setq-local ansi-color-apply-face-function #'shell-apply-ansi-color)
|
||||
(setq list-buffers-directory (expand-file-name default-directory)))
|
||||
|
||||
;;;###autoload
|
||||
(defun shell (&optional buffer file-name)
|
||||
"Run an inferior shell, with I/O through BUFFER (which defaults to `*shell*').
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(declare-function widget-convert "wid-edit" (type &rest args))
|
||||
(declare-function shell-mode "shell" ())
|
||||
|
||||
;;; From compile.el
|
||||
(defvar compilation-current-error)
|
||||
|
@ -4488,9 +4487,10 @@ to execute it asynchronously.
|
|||
|
||||
The output appears in OUTPUT-BUFFER, which could be a buffer or
|
||||
the name of a buffer, and defaults to `shell-command-buffer-name-async'
|
||||
if nil or omitted. That buffer is in shell mode. Note that, unlike
|
||||
with `shell-command', OUTPUT-BUFFER can only be a buffer, a buffer's
|
||||
name (a string), or nil.
|
||||
if nil or omitted. That buffer is in major mode specified by the
|
||||
variable `async-shell-command-mode'. Note that, unlike with
|
||||
`shell-command', OUTPUT-BUFFER can only be a buffer, a buffer's name
|
||||
(a string), or nil.
|
||||
|
||||
You can customize `async-shell-command-buffer' to specify what to do
|
||||
when the buffer specified by `shell-command-buffer-name-async' is
|
||||
|
@ -4534,6 +4534,9 @@ a shell (with its need to quote arguments)."
|
|||
(declare-function comint-output-filter "comint" (process string))
|
||||
(declare-function comint-term-environment "comint" ())
|
||||
|
||||
(defvar async-shell-command-mode 'shell-command-mode
|
||||
"Major mode to use for the output of asynchronous `shell-command'.")
|
||||
|
||||
(defun shell-command (command &optional output-buffer error-buffer)
|
||||
"Execute string COMMAND in inferior shell; display output, if any.
|
||||
With prefix argument, insert the COMMAND's output at point.
|
||||
|
@ -4544,9 +4547,9 @@ directory in the prompt.
|
|||
|
||||
If COMMAND ends in `&', execute it asynchronously.
|
||||
The output appears in the buffer whose name is specified
|
||||
by `shell-command-buffer-name-async'. That buffer is in shell
|
||||
mode. You can also use `async-shell-command' that automatically
|
||||
adds `&'.
|
||||
by `shell-command-buffer-name-async'. That buffer is in major mode
|
||||
specified by the variable `async-shell-command-mode'. You can also use
|
||||
`async-shell-command' that automatically adds `&'.
|
||||
|
||||
Otherwise, COMMAND is executed synchronously. The output appears in
|
||||
the buffer named by `shell-command-buffer-name'. If the output is
|
||||
|
@ -4722,7 +4725,7 @@ impose the use of a shell (with its need to quote arguments)."
|
|||
(setq proc
|
||||
(start-process-shell-command "Shell" buffer command)))
|
||||
(setq mode-line-process '(":%s"))
|
||||
(shell-mode)
|
||||
(funcall async-shell-command-mode)
|
||||
(setq-local revert-buffer-function
|
||||
(lambda (&rest _)
|
||||
(async-shell-command command buffer)))
|
||||
|
|
Loading…
Add table
Reference in a new issue