emacs: как захватить стандартный вывод из команды dired-do-shell?

Есть ли в Emacs способ захватить стандартный вывод команды dired-do-shell-command, скажем, для команды kill-ring?

Не зная как, я в конечном итоге иду к буферу Messages и получаю оттуда стандартный вывод вручную.


person user1011471    schedule 22.04.2015    source источник


Ответы (1)


В справке по этой команде сказано, что вывод направляется в буфер с именем *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* буфере.

person juanleon    schedule 23.04.2015
comment
Спасибо! Я использовал это, чтобы связать ваше решение с моей настройкой: кольцо для копирования)) (add-hook 'dired-mode-hook 'my-dired-mode-keys) - person user1011471; 23.04.2015