6

Emacs は明らかに複数の非同期サブプロセスを処理できます。そうでなければ、例を挙げると、org-babel のような多言語プログラミング環境は不可能です。

ただし、Dired で非同期シェル コマンドを開始して pdf ファイル (& evince) を表示し、2 番目の pdf ファイルで同じことを実行しようとすると、次のメッセージが表示されます。

「コマンドが実行中です - 強制終了しますか? はいまたはいいえ?」

Dired で複数の非同期シェル コマンドを並行して実行する方法はありますか?

4

3 に答える 3

13

dired-do-async-shell-commandEmacsを使用する場合は、*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)

diredによって呼び出されるため、シェルコマンドのEmacsコマンドを本当にお勧めします。

于 2011-08-01T07:45:24.743 に答える
2

では可能ではないと思いdired-do-async-shell-commandますが、特定の外部アプリケーションであるファイルを開きたいだけの場合は、OpenWithを使用することをお勧めします。これにより、任意の数の外部プロセスを実行できます。

于 2011-08-01T07:19:00.110 に答える
0

専用のバッファ名を shell-command に渡すために 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)
于 2012-04-19T07:36:55.497 に答える