मान लीजिए कि आप कोड में shell
पर कॉल करना चाहते हैं। लिस्प में, सबकुछ पूर्ववत संकेत है जो कोष्ठक से घिरा हुआ है।
(shell)
बंद कोष्ठक के बाद पंक्ति के अंत तक अपने पॉइंटर ले जाना, और लिस्प कोड निष्पादित करने के लिए <C-x C-e>
टाइप करें: तो हम (जैसे कि, खरोंच बफर) एक बफर में दर्ज करें। आपको देखना चाहिए कि shell
फ़ंक्शन को कॉल किया जाता है।
अब, चलिए इसे एक फ़ंक्शन बनाते हैं, इसलिए हम इसमें अन्य चीजें जोड़ सकते हैं। आदेश एक समारोह बनाने के लिए defun
है, और यह नाम समारोह के तर्क सूची (कोष्ठकों में) समारोह के शरीर लेता है, और उसके बाद:
(defun automate-connection()
(shell))
कोड के अंत करने के लिए अपने कर्सर ले जाएँ , <C-x C-e>
मारा, और फ़ंक्शन परिभाषित किया जाएगा।
(automate-connection)
ठीक है, अब हमें कुछ पाठ को खोल बफर में डालने की आवश्यकता है, इसे आप Lisp से कॉल कर सकते हैं।
(defun automate-connection()
(shell)
(insert "TERM=xterm"))
अब, जब हम इसे चलाते हैं, तो हमें शेल बफर में "TERM = xterm" डाल दिया जाता है। लेकिन यह वास्तव में कमांड नहीं भेजता है। आइए एक नई लाइन डालने का प्रयास करें।
(defun automate-connection()
(shell)
(insert "TERM=xterm\n"))
जो एक नई लाइन में डालता है, लेकिन वास्तव में कमांड चलाने में सक्षम नहीं होता है। क्यों नहीं? चलो देखते हैं कि एंटर कुंजी क्या करती है। अपने *shell*
बफर पर जाएं, और <C-h c>
टाइप करें, फिर वापसी कुंजी दबाएं। (<C-h c>
रन describe-key-briefly
, जो दिए गए कुंजी को मारकर बुलाए गए फ़ंक्शन के नाम को प्रिंट करता है)। यह कहता है कि जब आपने आरईटी मारा, तो यह एक नई लाइन नहीं लगा रहा है, लेकिन वास्तव में comint-send-input
पर कॉल कर रहा है। तो चलो कि करते हैं:,
(defun automate-connection()
(shell)
(insert "TERM=xterm")
(comint-send-input))
अब जब आप किसी भी लिस्प कोड से `(को स्वचालित-कनेक्शन) चलाने के लिए, आपके द्वारा भेजे दिए गए बात मिलना चाहिए। मैं इसे अपने अन्य आदेश जोड़ने के लिए पाठक को एक अभ्यास के रूप में छोड़ देता हूं।
लेकिन प्रतीक्षा करें! हम वास्तव में नहीं कर रहे हैं, हम हैं? मुझे लगता है कि आप एक लिस्प स्क्रैच बफर में नहीं जाना चाहते हैं, (automate-connection)
में टाइप करें, फिर उस कोड का मूल्यांकन करें। आप शायद टाइप करना चाहते हैं, और इसे एक दिन कॉल करें।आप उस फ़ंक्शन के साथ डिफ़ॉल्ट रूप से ऐसा नहीं कर सकते जो हमने अभी बनाया है। के रूप में आप चाहते हैं
(defun automate-connection()
(interactive)
(shell)
(insert "TERM=xterm")
(comint-send-input))
अब आप यह कॉल कर सकते हैं, और यह *shell*
बफर, पाठ में डाल खोल देंगे, और बता: बस अपने समारोह में (interactive)
के लिए एक कॉल जोड़ें: सौभाग्य से, यह है कि अनुमति देने के लिए आसान है Emacs उस पाठ को चलाने के लिए खोल बताने के लिए।
यह बेहद सहायक है, धन्यवाद। अब मेरे पास है: '(स्वचालित कनेक्शन() (इंटरैक्टिव) (खोल) (डालें "TERM = xterm \ n ssh -Y -C \ n स्क्रीन -rd") (कॉमेंट-प्रेषण-इनपुट) (एएस-रिमोट) ) ' लेकिन' (ess-remote) 'तब तक नहीं चल रहा है जब तक कि मेरे पास पहले से ही एक आर-इन-शैल प्रक्रिया चल रही न हो। मुझे अनुमान है कि मुझे '(कॉमेंट-सेंड-इनपुट)' और '(एएस-रिमोट)' के बीच कुछ करने की ज़रूरत है –
Solomon