पहली बार प्रमुख मोड लोड करने पर स्वचालित रूप से अवर प्रक्रिया कैसे चलती है?


9

मान लें कि हम कंपनी के साथ पायथन (या मैटलैब) के साथ काम कर रहे हैं। एक अवर प्रक्रिया कंपनी संदेश के बिना

Completion needs an inferior Python process running

हालाँकि, स्पष्ट समाधान स्वचालित रूप से एक अवर प्रक्रिया को चलाने के लिए है

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

मैं एक .py फ़ाइल खोलने पर हर बार एक नई अजगर प्रक्रिया चलाऊंगा (यह मतलाब के साथ और अधिक महंगा हो जाता है)

क्या कोई हुक है जो केवल पहली बार चला जाता है एक प्रमुख मोड चलाया जाता है? या क्या यह पता लगाने का एक तरीका है कि क्या पहले से ही एक अजगर / मतलबी अवर प्रक्रिया चल रही है? या फिर एक प्रमुख मोड के साथ एक अवर प्रक्रिया को चलाने की इस समस्या को हल करने का एक और तरीका है लेकिन केवल एक बार?

जवाबों:


14

FYI करें, कुछ मोड केवल एक अवर प्रक्रिया खोलते हैं। उदाहरण के लिए, run-pythonएक अवर प्रक्रिया तभी खुलेगी जब पहले से ही कोई अवर प्रक्रिया नहीं चल रही हो। आपने run-pythonवास्तव में जो सुझाव दिया है वह वही करता है जो आप चाहते हैं।

अन्य तरीकों के लिए (मतलाब?), आप एक ऐसे फ़ंक्शन का उपयोग कर सकते हैं जो खुद को अनहुक करता है, जैसे:

(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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.