Comment exécuter automatiquement un processus inférieur lors du premier chargement du mode principal?

9

Disons que nous travaillons avec Python (ou Matlab) avec la société. Sans un processus inférieur, les messages de l'entreprise

Completion needs an inferior Python process running

Cependant, la solution évidente pour exécuter automatiquement un processus inférieur

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

exécuterait un nouveau processus python chaque fois que j'ouvrirais un fichier .py (cela devient plus cher avec Matlab)

Existe-t-il un hook qui ne s'exécute que la première fois qu'un mode majeur est exécuté? Ou existe-t-il un moyen de détecter si un processus inférieur à python / matlab est déjà en cours d'exécution? Ou existe-t-il une autre façon de résoudre ce problème de l'exécution automatique d'un processus inférieur avec un mode majeur mais une seule fois?

Pushpendre
la source

Réponses:

14

Pour info, certains modes n'ouvrent qu'un seul processus inférieur. Par exemple, run-pythonn'ouvrira un processus inférieur que s'il n'y a pas déjà un processus inférieur en cours d'exécution. Ce que vous avez suggéré run-pythonfait réellement ce que vous voulez.

Pour les autres modes (Matlab?), Vous pouvez utiliser une fonction qui se décroche, comme ceci:

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

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

Notez que sur Emacs 24.5 (et plus ancien?), run-pythonPrend un CMDargument obligatoire , donc la solution sera:

(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
la source
Il semble que la run-pythonfonction prend un arg nécessaire: (run-python CMD &optional DEDICATED SHOW). Cela fonctionne bien de manière interactive, mais lorsque ce crochet s'exécute, j'obtiens une Wrong number of argumentserreur.
gsingh2011
1
Merci, l'argument est facultatif dans Emacs 25, mais pas dans 24.5. J'ai mis à jour la réponse avec une solution fixe pour Emacs 24.5
bmag