¿Cómo ejecutar automáticamente un proceso inferior al cargar el modo principal por primera vez?

9

Digamos que estamos trabajando con Python (o Matlab) con la compañía. Sin un proceso inferior, los mensajes de la compañía que

Completion needs an inferior Python process running

Sin embargo, la solución obvia para ejecutar automáticamente un proceso inferior

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

ejecutaría un nuevo proceso de Python cada vez que abro un archivo .py (esto se vuelve más costoso con Matlab)

¿Hay un gancho que se ejecuta solo la primera vez que se ejecuta un modo mayor? ¿O hay una manera de detectar si ya se está ejecutando un proceso inferior de python / matlab? ¿O hay otra forma de resolver este problema de ejecutar un proceso inferior automáticamente con un modo principal pero solo una vez?

Pushpendre
fuente

Respuestas:

14

Para su información, algunos modos abren solo un proceso inferior. Por ejemplo, run-pythonabrirá un proceso inferior solo si aún no se está ejecutando un proceso inferior. Lo que sugirió en run-pythonrealidad hace lo que quiere.

Para otros modos (¿Matlab?), Puede usar una función que se desenganche, así:

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

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

Tenga en cuenta que en Emacs 24.5 (¿y versiones anteriores?), run-pythonToma un CMDargumento obligatorio , por lo que la solución será:

(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
fuente
Parece que la run-pythonfunción toma un arg requerido: (run-python CMD &optional DEDICATED SHOW). Funciona bien interactivamente, pero cuando se ejecuta este gancho me sale un Wrong number of argumentserror.
gsingh2011
1
Gracias, el argumento es opcional en Emacs 25, pero no en 24.5.
Actualicé