Bagaimana cara menjalankan proses inferior secara otomatis saat memuat mode utama untuk pertama kalinya?

9

Katakanlah kita bekerja dengan Python (atau Matlab) dengan perusahaan. Tanpa proses yang lebih rendah, pesan perusahaan itu

Completion needs an inferior Python process running

Namun, solusi yang jelas untuk secara otomatis menjalankan proses yang lebih rendah

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

akan menjalankan proses python baru setiap kali saya membuka file .py (ini menjadi lebih mahal dengan Matlab)

Apakah ada pengait yang dijalankan hanya saat mode utama pertama kali dijalankan? Atau apakah ada cara untuk mendeteksi jika proses inferior python / matlab sudah berjalan? Atau adakah cara lain untuk menyelesaikan masalah ini dengan menjalankan proses yang lebih rendah secara otomatis dengan mode utama tetapi hanya sekali?

Pushpendre
sumber

Jawaban:

14

FYI, beberapa mode hanya membuka satu proses yang lebih rendah. Misalnya, run-pythonakan membuka proses inferior hanya jika belum ada proses inferior yang berjalan. Apa yang Anda sarankan run-pythonsebenarnya melakukan apa yang Anda inginkan.

Untuk mode lain (Matlab?), Anda bisa menggunakan fungsi yang melepaskan kaitnya sendiri, seperti:

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

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

Perhatikan bahwa pada Emacs 24.5 (dan yang lebih lama?), run-pythonDiperlukan CMDargumen wajib , jadi solusinya adalah:

(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
sumber
Sepertinya run-pythonfungsi mengambil arg diperlukan: (run-python CMD &optional DEDICATED SHOW). Ini berfungsi dengan baik secara interaktif, tetapi ketika kait ini dijalankan saya mendapatkan Wrong number of argumentskesalahan.
gsingh2011
1
Terima kasih, argumen ini opsional dalam Emacs 25, tetapi tidak dalam 24.5. Saya memperbarui jawabannya dengan solusi tetap untuk Emacs 24.5
bmag