Есть ли в Emacs способ захватить стандартный вывод команды dired-do-shell-command, скажем, для команды kill-ring?
Не зная как, я в конечном итоге иду к буферу Messages и получаю оттуда стандартный вывод вручную.
Есть ли в Emacs способ захватить стандартный вывод команды dired-do-shell-command, скажем, для команды kill-ring?
Не зная как, я в конечном итоге иду к буферу Messages и получаю оттуда стандартный вывод вручную.
В справке по этой команде сказано, что вывод направляется в буфер с именем *Shell Command Output*
, при условии, что команда не имеет &
. Если это так, этот фрагмент кода будет делать то, что вы хотите:
(defun do-shell-and-copy-to-kill-ring (command &optional arg file-list)
(interactive
(let ((files (dired-get-marked-files t current-prefix-arg)))
(list
(dired-read-shell-command "! on %s: " current-prefix-arg files)
current-prefix-arg
files)))
(dired-do-shell-command command arg file-list)
(with-current-buffer "*Shell Command Output*"
(copy-region-as-kill (point-min) (point-max))))
Для асинхронных команд вам нужно дождаться их и посмотреть в *Async Shell Command*
буфере.