Jak automatycznie uruchomić gorszy proces przy pierwszym ładowaniu trybu głównego?


9

Powiedzmy, że współpracujemy z Pythonem (lub Matlabem) z firmą. Bez gorszego procesu firma przekazuje to

Completion needs an inferior Python process running

Jednak oczywistym rozwiązaniem jest automatyczne uruchomienie gorszego procesu

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

uruchamiałby nowy proces python za każdym razem, gdy otwieram plik .py (staje się to droższe w Matlabie)

Czy istnieje hak uruchamiany tylko przy pierwszym uruchomieniu trybu głównego? Czy istnieje sposób na wykrycie, czy gorszy proces python / matlab już działa? Czy istnieje inny sposób rozwiązania tego problemu polegającego na automatycznym uruchamianiu gorszego procesu w trybie głównym, ale tylko raz?

Odpowiedzi:


14

Do Twojej wiadomości, niektóre tryby otwierają tylko jeden gorszy proces. Na przykład run-pythonotworzy gorszy proces tylko wtedy, gdy nie działa jeszcze gorszy proces. To, co zasugerowałeś, run-pythonfaktycznie robi to, czego chcesz.

W przypadku innych trybów (Matlab?) Możesz użyć funkcji, która się odblokowuje, na przykład:

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

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

Zauważ, że w Emacsie 24.5 (i starszych?) run-pythonPobiera obowiązkowy CMDargument, więc rozwiązaniem będzie:

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

Wydaje się, że run-pythonfunkcja przyjmuje wymaganą Arg (run-python CMD &optional DEDICATED SHOW). Działa dobrze interaktywnie, ale gdy ten hak zostanie wykonany, pojawia się Wrong number of argumentsbłąd.
gsingh2011

1
Dzięki, argument jest opcjonalny w Emacsie 25, ale nie w 24.5. Zaktualizowałem odpowiedź ustalonym rozwiązaniem dla Emacsa 24.5
bmag
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.