回答:
バックグラウンドプロセスはで開始できますがstart-process
、これはバッファをポップアップしないはずです。
(start-process "process-name" "buffer-name" "program")
プロセス名は必要に応じて重複しないように変更されていますので、心配する必要はありません。将来のデバッグに役立つ名前を付けてください!
を指定する"buffer-name"
と、バッファが作成されますが、すぐには表示されません。これは、プロセスの管理や出力の確認に便利です。バッファーをまったく作成したくない場合はnil
、バッファー名として渡します。
(start-process "process-name" nil "program")
"program"
この場合、プログラム名(nautilus、caja、firefoxなど)のみ"arg1 arg2 ..."
であり、の4番目の位置引数にある必要がありstart-process
ます。私はドキュメントを読んでそれを理解しました:)
Tikhonが述べ(start-process)
たように、進むべき道です。バッファを作成したくないが、それでもバックグラウンドプロセスステータスに反応したい場合は、を使用することもできます(set-process-sentinel)
。これは、projector
パッケージから取った変更された例です。
(set-process-sentinel (start-process "process-name" nil "command") #'output-message-sentinel)
(defun output-message-sentinel (process msg)
(when (memq (process-status process) '(exit signal))
(message (concat (process-name process) " - " msg))))
Emacs関数の説明から:
(set-process-sentinel PROCESS SENTINEL)
Give PROCESS the sentinel SENTINEL; nil for default.
The sentinel is called as a function when the process changes state.
It gets two arguments: the process, and a string describing the change.
プロセス上のGNUマニュアルページ詳細はかなり良いです。
set-process-sentinel
もう少し正確に説明してください。プロセスを管理する機能を持つという一般的なアイデアは得られますが、すべての詳細を完全に理解しているわけではありません。ありがとう!
M-x describe-function
て入力set-process-sentinel
すると、Emacsのドキュメントから簡単な答えが得られます。デフォルトではnil。センチネルは、プロセスの状態が変化したときに関数として呼び出されます。プロセスと、変更を説明する文字列の2つの引数を取得します。
C-h f
...
非同期コマンドの実行方法を変更する必要はありません。Emacsには、単一のデータ構造を変更することにより、バッファがポップアップする場所またはポップアップを制御できる汎用機能がありますdisplay-buffer-alist
。
以下のソリューションでは、アクション関数display-buffer-no-window
(つまり、ポップアップなし)が、名前が始まる任意のバッファーに関連付けられるように設定されていることがわかります(*Asynchronous Shell Command*
複数の作成を要求された場合、emacsは増分サフィックスを追加します)。
他の使用可能な表示オプションのリストを表示するには、C-h f display-buffer
「アクション関数」のリストを入力して探します。
;; Buffers that I don't want popping up by default
(add-to-list 'display-buffer-alist
'("\\*Async Shell Command\\*.*" display-buffer-no-window))
start-process
sudoコマンドに使用できますか?通話を折り返そうとしstart-process
ました(let ((default-directory "/sudo::")) ... )
が、うまくいきませんでした。