Wie kann ein minderwertiger Prozess automatisch ausgeführt werden, wenn der Hauptmodus zum ersten Mal geladen wird?

9

Angenommen, wir arbeiten mit Python (oder Matlab) zusammen. Ohne einen minderwertigen Prozess meldet das Unternehmen dies

Completion needs an inferior Python process running

Die naheliegende Lösung, um automatisch einen minderwertigen Prozess auszuführen

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

würde jedes Mal, wenn ich eine .py-Datei öffne, einen neuen Python-Prozess ausführen (dies wird mit Matlab teurer)

Gibt es einen Hook, der nur ausgeführt wird, wenn ein Hauptmodus zum ersten Mal ausgeführt wird? Oder gibt es eine Möglichkeit zu erkennen, ob bereits ein minderwertiger Python / Matlab-Prozess ausgeführt wird? Oder gibt es eine andere Möglichkeit, dieses Problem zu lösen, indem ein minderwertiger Prozess automatisch mit einem Hauptmodus ausgeführt wird, jedoch nur einmal?

Pushpendre
quelle

Antworten:

14

Zu Ihrer Information, einige Modi öffnen nur einen minderwertigen Prozess. Zum Beispiel run-pythonwird ein minderwertiger Prozess nur geöffnet, wenn noch kein minderwertiger Prozess ausgeführt wird. Was Sie vorgeschlagen haben, macht run-pythontatsächlich das, was Sie wollen.

Für andere Modi (Matlab?) Können Sie eine Funktion verwenden, die sich wie folgt selbst aushakt:

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

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

Beachten Sie, dass für Emacs 24.5 (und älter?) run-pythonEin obligatorisches CMDArgument erforderlich ist. Die Lösung lautet also:

(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)
bmag
quelle
Es scheint, dass die run-pythonFunktion ein erforderliches Argument benötigt : (run-python CMD &optional DEDICATED SHOW). Es funktioniert interaktiv gut, aber wenn dieser Hook ausgeführt wird, erhalte ich eine Wrong number of argumentsFehlermeldung.
Gsingh2011
1
Danke, das Argument ist in Emacs 25 optional, aber nicht in 24.5. Ich habe die Antwort mit einer festen Lösung für Emacs 24.5
bmag