メジャーモードを初めてロードするときに、劣ったプロセスを自動的に実行するにはどうすればよいですか?


9

会社でPython(またはMatlab)を使用しているとしましょう。劣ったプロセスがなければ、会社は

Completion needs an inferior Python process running

ただし、劣ったプロセスを自動的に実行する明白な解決策

 (add-hook 'python-mode 'run-python)

.pyファイルを開くたびに新しいpythonプロセスを実行します(Matlabを使用するとコストが高くなります)

メジャーモードが初めて実行されるときにのみ実行されるフックはありますか?または、python / matlabの下位プロセスがすでに実行されているかどうかを検出する方法はありますか?または、メジャーモードで1回だけ下位プロセスを自動的に実行するというこの問題を解決する別の方法はありますか?

回答:


14

参考までに、いくつかのモードでは、1つの劣ったプロセスしか開きません。たとえば、run-pythonは、実行中の下位プロセスがまだない場合にのみ、下位プロセスを開きます。あなたが提案run-pythonしたものは、実際にあなたが望むことをします。

他のモード(Matlab?)の場合、次のように、それ自体をアンフックする関数を使用できます。

(defun run-python-once ()
  (remove-hook 'python-mode-hook 'run-python-once)
  (run-python))

(add-hook 'python-mode-hook 'run-python-once)

Emacs 24.5(およびそれ以前のバージョン)ではrun-python必須のCMD引数を取るため、解決策は次のようになります。

(defun run-python-once ()
  (remove-hook 'python-mode-hook 'run-python-once)
  (run-python (python-shell-parse-command)))

(add-hook 'python-mode-hook 'run-python-once)

ように思えるrun-python関数が必要な引数をとります(run-python CMD &optional DEDICATED SHOW)。インタラクティブに問題なく動作しますが、このフックを実行するとWrong number of argumentsエラーが発生します。
gsingh2011 2016

1
おかげで、引数はEmacs 25ではオプションですが、24.5ではオプションではありません。私はEmacs 24.5の解決策を修正して答えを更新しました
bmag
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.