Як автоматично запускати нижчий процес при першому завантаженні основного режиму?


9

Скажімо, ми працюємо з Python (або Matlab) з компанією. Без неповноцінного процесу компанія повідомляє, що

Completion needs an inferior Python process running

Однак очевидне рішення автоматично запускати неповноцінний процес

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

буде запускати новий процес python кожного разу, коли я відкриваю файл .py (це стає дорожчим для Matlab)

Чи є гачок, який запускається лише при першому запуску основного режиму? Або є спосіб виявити, чи вже запущений процес, пов'язаний з порушенням пітон / матлаб? Або є інший спосіб вирішити цю проблему автоматичного запуску неповноцінного процесу, але лише один раз?

Відповіді:


14

FYI, деякі режими відкривають лише один нижчий процес. Наприклад, run-pythonвідкриється нижчий процес, лише якщо ще не запущений процес. Те, що ти запропонував, run-pythonнасправді робить те, що ти хочеш.

Для інших режимів (Matlab?) Ви можете використовувати функцію, яка відмикає себе, наприклад:

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

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

Зауважте, що в Emacs 24.5 (і старше?) run-pythonБереться обов'язковий CMDаргумент, тож рішення буде:

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

Схоже , що run-pythonфункція приймає необхідну ARG: (run-python CMD &optional DEDICATED SHOW). Він працює чудово інтерактивно, але коли ця гачка виконується, я отримую Wrong number of argumentsпомилку.
gsingh2011

1
Дякую, аргумент необов’язковий у Emacs 25, але не в 24.5. Я оновив відповідь фіксованим рішенням для Emacs 24.5
bmag
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.