Como executar automaticamente um processo inferior ao carregar o modo principal pela primeira vez?


9

Digamos que estamos trabalhando com Python (ou Matlab) com empresa. Sem um processo inferior, as mensagens da empresa que

Completion needs an inferior Python process running

No entanto, a solução óbvia para executar automaticamente um processo inferior

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

executaria um novo processo python toda vez que eu abrir um arquivo .py (isso se torna mais caro com o Matlab)

Existe um gancho que é executado apenas na primeira vez em que um modo principal é executado? Ou existe uma maneira de detectar se um processo inferior ao python / matlab já está em execução? Ou existe outra maneira de resolver esse problema de executar um processo inferior automaticamente com um modo principal, mas apenas uma vez?

Respostas:


14

Para sua informação, alguns modos abrem apenas um processo inferior. Por exemplo, run-pythonabrirá um processo inferior apenas se ainda não houver um processo inferior em execução. O que você sugeriu run-pythonrealmente faz o que você quer.

Para outros modos (Matlab?), Você pode usar uma função que se desengata, assim:

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

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

Observe que no Emacs 24.5 (e mais antigo?), É run-pythonnecessário um CMDargumento obrigatório , portanto a solução 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)

Parece que a run-pythonfunção recebe um argumento necessário: (run-python CMD &optional DEDICATED SHOW). Funciona bem interativamente, mas quando esse gancho é executado, recebo um Wrong number of argumentserro.
gsingh2011

11
Obrigado, o argumento é opcional no Emacs 25, mas não no 24.5. Atualizei a resposta com uma solução fixa para o Emacs 24.5
bmag 18/07/16
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.