Несколько асинхронных команд оболочки в Emacs-Dired? - PullRequest
6 голосов
/ 01 августа 2011

Emacs, очевидно, может обрабатывать несколько асинхронных подпроцессов, иначе, например, многоязыковая среда программирования, такая как org-babel, была бы невозможна.

Однако, когда я в Diredи запустить асинхронную команду оболочки для просмотра файла PDF (и evince), а затем попытаться сделать то же самое для второго файла PDF, я получаю следующее сообщение:

"Команда выполняется - убить ее?Да или Нет? "

Есть ли способ запустить несколько асинхронных команд оболочки параллельно в режиме Dired?

Ответы [ 3 ]

12 голосов
/ 01 августа 2011

Когда вы используете dired-do-async-shell-command Emacs создает буфер *Async Shell Command*. Если вам нужна другая асинхронная команда, вам нужно переименовать этот буфер, например, используя M-x rename-uniquely

Вы можете попытаться изменить состав dired-do-async-shell-command, сообщив:

 (defadvice shell-command (after shell-in-new-buffer (command &optional output-buffer error-buffer))
    (when (get-buffer "*Async Shell Command*")
      (with-current-buffer "*Async Shell Command*"
         (rename-uniquely))))
 (ad-activate 'shell-command)

обратите внимание, что я действительно советую команду Emacs команды shell-command, потому что она вызывается dired.

2 голосов
/ 01 августа 2011

Я не думаю, что это возможно с dired-do-async-shell-command, но если вы просто хотите открыть какой-то файл, это определенное внешнее приложение, я предлагаю использовать OpenWith , что позволяет запускать любое количество внешних процессов.

0 голосов
/ 19 апреля 2012

Я только что установил следующее, которое стирает текущее определение команды dired-run-shell-command для передачи выделенного имени буфера в команду-команду:

(defun dired-run-shell-command (command)
       (let ((handler
          (find-file-name-handler (directory-file-name default-directory)
                      'shell-command)))
     (if handler (apply handler 'shell-command (list command))
       (shell-command command
              (generate-new-buffer-name
               (concat "*Shell Command Output: '" command "'*")))))
       ;; Return nil for sake of nconc in dired-bunch-files.
       nil)
...