Come eseguire automaticamente un processo inferiore quando si carica la modalità principale per la prima volta?


9

Diciamo che stiamo lavorando con Python (o Matlab) con la compagnia. Senza un processo inferiore, la compagnia lo comunica

Completion needs an inferior Python process running

Tuttavia, la soluzione ovvia per eseguire automaticamente un processo inferiore

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

eseguirà un nuovo processo Python ogni volta che apro un file .py (questo diventa più costoso con Matlab)

Esiste un hook che viene eseguito solo la prima volta che viene eseguita una modalità principale? O c'è un modo per rilevare se un processo inferiore di python / matlab è già in esecuzione? Oppure c'è un altro modo per risolvere questo problema di eseguire automaticamente un processo inferiore con una modalità principale, ma solo una volta?

Risposte:


14

Cordiali saluti, alcune modalità aprono solo un processo inferiore. Ad esempio, run-pythonaprirà un processo inferiore solo se non è già in esecuzione un processo inferiore. Quello che hai suggerito in run-pythonrealtà fa quello che vuoi.

Per altre modalità (Matlab?), Potresti usare una funzione che si sgancia da sola, in questo modo:

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

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

Nota che su Emacs 24.5 (e precedenti?), run-pythonAccetta un CMDargomento obbligatorio , quindi la soluzione sarà:

(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)

Sembra che la run-pythonfunzione richiede un ARG richiesta: (run-python CMD &optional DEDICATED SHOW). Funziona bene in modo interattivo, ma quando viene eseguito questo hook ottengo un Wrong number of argumentserrore.
gsingh2011,

1
Grazie, l'argomento è facoltativo in Emacs 25, ma non in 24.5. Ho aggiornato la risposta con una soluzione fissa per Emacs 24.5
bmag
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.