जवाबों:
C-u M-x shell करूंगा।
यह नए शेल के लिए एक नाम के लिए संकेत देगा, बस डिफ़ॉल्ट के लिए रिटर्न मारा जाएगा (जो कुछ इस तरह होगा *shell*<2>
।
साथ ही एस्केल के साथ काम करता है।
एक और ट्रिक, यदि आप एस्केल का उपयोग करते हैं: जैसे कि M-x eshellआपको वापस ले जाता है *eshell*
(एक नया एशेल शुरू करने के बजाय), यदि आप एक संख्यात्मक उपसर्ग तर्क का उपयोग करते हैं तो यह आपको उस एशेल बफर में ले जाएगा। उदाहरण के लिए, C-3M-xeshellआपको ले जाएगा *eshell*<3>
। अफसोस की बात है कि अगर आप शेल (एशेल के बजाय) का उपयोग करते हैं, तो यह ट्रिक काम नहीं करता है (मेरे Emacs 24.0.50.1 कम से कम)।
C-u
कमांड चलाता है universal-argument
। यह अगले कमांड में एक तर्क को इंजेक्ट करने का एक तरीका है। आप इसके बारे में अधिक पढ़ सकते हैं C-h k C-u
( C-h k
रन describe-key
, बहुत काम!)
C-h f eshell
( C-h f
रन describe-function
) दिखाता है कि फ़ंक्शन eshell
एक वैकल्पिक तर्क लेता है। Quote: एक संख्यात्मक उपसर्ग arg (as C-u 42 M-x eshell RET
) उस संख्या के साथ सत्र में स्विच करता है, यदि आवश्यक हो तो इसे बनाता है। एक nonnumeric उपसर्ग arg का अर्थ है एक नया सत्र बनाना।
यह आपके गोले के लिए स्क्रीन जैसी इंटरफ़ेस का उपयोग करने के लिए भी उपयोगी हो सकता है। मैंने अपना लिखा है, लेकिन वहाँ अन्य लोग हैं, जैसे EmacsScreen ।
चार साल से अधिक समय के बाद, मैं देखता हूं कि कुछ लोग अभी भी कभी-कभी इस मुद्दे को देख रहे हैं, इसलिए मैं एक त्वरित फ़ंक्शन प्रकाशित करूंगा, जो मैंने एक शेल को लोड करने और उसका नाम पूछने के लिए लिखा था। इस तरह आप एक शेल "सॉर्ट-फाइल्स" को नाम दे सकते हैं यदि यह फाइल को छांटने के लिए समर्पित है और दूसरा "हाइव" है यदि यह हाइव प्रश्नों को चलाने के लिए समर्पित है। मैं उस रोज़ का उपयोग करता हूं (24 emacs पर):
(defun create-shell ()
"creates a shell with a given name"
(interactive);; "Prompt\n shell name:")
(let ((shell-name (read-string "shell name: " nil)))
(shell (concat "*" shell-name "*"))))
यह आपके द्वारा उपयोग किए जा रहे बफ़र में एक नई शेल आवृत्ति को स्वचालित करेगा; इसे एमएस या किसी और दिन और तत्काल आनंद की तरह बांधें:
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name "*shell*"))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
फिर से उपयोग करने की सिफारिश करने के लिए कई लोगों ने धन्यवाद दिया, भले ही परिणाम और भी भयानक कोष्ठक हो ...: \
let
स्थानीय उपयोग के लिए इरादा है तो आपको -Bind चर की आवश्यकता है । यह है के रूप में आप अब के लिए वैश्विक मान हैं currentbuf
और newbuf
।
यह हर बार एक नया शेल खोलेगा जब आप फ़ंक्शन को इनवॉइस करते हैं और यदि आवश्यक हो तो इसे स्वचालित रूप से नाम बदलें। जोड़ा गया प्लस यदि आप फ़ाइलों को दूरस्थ रूप से संपादित कर रहे हैं (dired / tramp ...), तो यह दूरस्थ होस्ट पर एक शेल खोलेगा और दूरस्थ होस्टनाम के साथ स्वचालित रूप से इसका नाम बदल देगा:
(defun ggshell (&optional buffer)
(interactive)
(let* (
(tramp-path (when (tramp-tramp-file-p default-directory)
(tramp-dissect-file-name default-directory)))
(host (tramp-file-name-real-host tramp-path))
(user (if (tramp-file-name-user tramp-path)
(format "%s@" (tramp-file-name-user tramp-path)) ""))
(new-buffer-nameA (format "*shell:%s*" host))
(new-buffer-nameB (generate-new-buffer-name new-buffer-nameA))
(currentbuf (get-buffer-window (current-buffer)))
)
(generate-new-buffer new-buffer-nameB)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf new-buffer-nameB)
(shell new-buffer-nameB)
))