Emacs显然可以处理多个异步子进程,否则像org-babel这样的多语言编程环境就不可能了。
但是,当我在Dired并启动异步shell命令来查看pdf文件(& evince),然后尝试在第二个pdf文件上执行相同操作时,我收到以下消息:
“命令正在运行 - 杀了它?是或否?”
在Dired中有没有办法并行运行多个异步shell命令?
答案 0 :(得分:12)
当您使用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)
请注意,我确实建议使用shell命令Emacs命令,因为它是由dired调用的。
答案 1 :(得分:2)
我认为dired-do-async-shell-command
不可能,但如果您只想打开某个文件,我建议使用OpenWith某个外部应用程序,它允许运行任意数量的外部进程。
答案 2 :(得分:0)
我刚刚设置了以下内容,它会删除dired-run-shell-command的当前定义,以将专用缓冲区名称传递给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)