सबसे पहले, मुझे एक देशी elisp ssh क्लाइंट से अनजान है (और कल्पना न करें कि एक लिखने के लिए प्रेरणा का एक बड़ा सौदा है), इसलिए आपको निश्चित रूप से बाहरी एसएसएच क्लाइंट प्रक्रिया के साथ बातचीत करने की आवश्यकता होगी।
जैसा कि आप ssh इंटरैक्टिव का उपयोग करना चाहते हैं, एसएसएच प्रक्रिया को कनेक्शन के स्थानीय पक्ष पर टर्मिनल की आवश्यकता होती है।
इसलिए प्रश्न बन जाता है: क्या Emacs एक टर्मिनल लागू करता है जिसके लिए एक एसएसएच प्रक्रिया संलग्न की जा सकती है?
उत्तर है: yes - term.el एक मजबूत टर्मिनल कार्यान्वयन प्रदान करता है, जिसके माध्यम से एसएसएच को बिना खोल के आवश्यकता के सीधे चलाया जा सकता है।
आप एम एक्सterm
आरईटी आप एक प्रोग्राम के लिए प्रेरित किया जाएगा चलाते हैं। (यह एक खोल करने के लिए चूक, लेकिन यह निश्चित रूप से इस प्रक्रिया का एकमात्र प्रकार आप चला सकते हैं नहीं है।)
अज्ञात कारणों से, इंटरैक्टिव term
(और ansi-term
) कार्यों निर्दिष्ट कार्यक्रम है, जो renders करने के लिए तर्क गुजर का समर्थन नहीं करते यदि आप ssh [email protected]
जैसे कुछ चलाने की कामना करते हैं तो उन्हें कम उपयोगी। आप इसके बजाय तर्कों को संभालने वाली एक स्क्रिप्ट निर्दिष्ट कर सकते हैं, लेकिन हम इसे elisp में भी प्रबंधित कर सकते हैं:
term
फ़ंक्शन वास्तव में एक साधारण आवरण है जो प्रोग्राम शुरू करने के लिए make-term
पर कॉल करता है और फिर उचित मोड सेट करता है। make-term
प्रोग्राम तर्क स्वीकार करते हैं, term
की परिभाषा को कॉपी करने और संशोधित करने के लिए यह काफी सरल है।
(defun my-ssh (user host port)
"Connect to a remote host by SSH."
(interactive "sUser: \nsHost: \nsPort (default 22): ")
(let* ((port (if (equal port "") "22" port))
(switches (list host "-l" user "-p" port)))
(set-buffer (apply 'make-term "ssh" "ssh" nil switches))
(term-mode)
(term-char-mode)
(switch-to-buffer "*ssh*")))
या शायद यह बेहतर है:
यहाँ एक बहुत ही सरल कार्यान्वयन है
(defun my-ssh (args)
"Connect to a remote host by SSH."
(interactive "sssh ")
(let ((switches (split-string-and-unquote args)))
(set-buffer (apply 'make-term "ssh" "ssh" nil switches))
(term-mode)
(term-char-mode)
(switch-to-buffer "*ssh*")))
जाहिर है सुधार की गुंजाइश नहीं है, लेकिन मुझे लगता है कि काफी उपयोगी के रूप में है।
आपको यह सुनिश्चित करना चाहिए कि आप term-mode
के quirks से परिचित हैं।देखें:
- एम:
(info "(emacs) Terminal emulator")
आरईटी
- एम:
(info "(emacs) Terminal Mode")
आरईटी
- सी एचच
term-mode
आरईटी
दोनों 'एम-एक्स खोल' और ट्रम्प * डू * आपके प्रश्न से संबंधित हैं जैसा कि बताया गया है। तो कृपया समझदारी से समझाएं कि यह क्या नहीं है। मैं समझता हूं कि आप ट्रम्प की तुलना में अधिक कुछ करना चाहते हैं, लेकिन आप क्या करना चाहते हैं कि 'एम-एक्स शैल' आपको ऐसा करने नहीं देता है? – Stefan
मैं 'एम-एक्स एसएसएच' या एसएसएच कनेक्शन बनाने के समान कुछ टाइप करना चाहता हूं, जैसे कि मैं सीधे डेटाबेस में कनेक्शन बनाने के लिए 'एम-एक्स एसक्यूएल-पोस्टग्रेस्क्ल' टाइप कर सकता हूं। 'एम-एक्स खोल' सिर्फ एक खोल खोलता है, जिसमें से मैं * एसएसएच, या जो कुछ भी कर सकता हूं। मैं पूछ रहा था कि क्या Emacs के भीतर से ssh * सीधे * का कोई तरीका है। – SabreWolfy
आप वास्तव में एसएसएच पर क्या करना चाहते हैं जो रिमोट फाइलों को संपादित नहीं कर रहा है या रिमोट टर्मिनल खोल रहा है? – Tyler