कैसे Emacs पर कई गोले चलाने के लिए


147

मैं विंडोज़ 7 पर Emacs 23.3.1 का उपयोग कर रहा हूं। मुझे पता है कि मैं एमएसी शेल का उपयोग करके एमएसीएस से शेल चला सकता हूं। मैं एक ही समय में कई शेल विंडो रखना चाहूंगा, लेकिन एमएक्स शेल को दूसरी बार टाइप करने से मुझे एक ही शेल विंडो खुलती है।

क्या विभिन्न शेल विंडो होने का कोई तरीका है?

जवाबों:


210

C-u M-x shell करूंगा।

यह नए शेल के लिए एक नाम के लिए संकेत देगा, बस डिफ़ॉल्ट के लिए रिटर्न मारा जाएगा (जो कुछ इस तरह होगा *shell*<2>

साथ ही एस्केल के साथ काम करता है।

एक और ट्रिक, यदि आप एस्केल का उपयोग करते हैं: जैसे कि M-x eshellआपको वापस ले जाता है *eshell*(एक नया एशेल शुरू करने के बजाय), यदि आप एक संख्यात्मक उपसर्ग तर्क का उपयोग करते हैं तो यह आपको उस एशेल बफर में ले जाएगा। उदाहरण के लिए, C-3M-xeshellआपको ले जाएगा *eshell*<3>। अफसोस की बात है कि अगर आप शेल (एशेल के बजाय) का उपयोग करते हैं, तो यह ट्रिक काम नहीं करता है (मेरे Emacs 24.0.50.1 कम से कम)।


1
ठीक है, यह काम करता है। Cu Mx शेल मुझसे नए शेल का नाम पूछता है। धन्यवाद!
S4M

1
कोई समस्या नहीं S4M। मैंने एशेल के लिए एक टिप जोड़ा; जैसा कि आपने शेल के बारे में पूछा, मुझे नहीं पता कि क्या आप इसे उपयोगी पाएंगे, लेकिन एक ही प्रश्न वाले उपयोगकर्ताओं को इसे उपयोगी मान सकते हैं।
मैट कर्टिस

धन्यवाद, मैट। Cu का यहां क्या मतलब है / क्या करते हैं?
टिम

4
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 का अर्थ है एक नया सत्र बनाना।
मैट कर्टिस

34

आप अपने शेल के बफर का नाम बदल सकते हैं M-x rename-buffer। तब आप दूसरा शेल लॉन्च कर पाएंगे।


2
मैं मैट कर्टिस के समाधान के साथ जाना पसंद करता हूं। एक नए नाम के तहत एक शेल चलाना मुझे वर्तमान नाम बदलने की तुलना में आसान लगता है और फिर एक नया रन होता है।
S4M


5

यह आपके गोले के लिए स्क्रीन जैसी इंटरफ़ेस का उपयोग करने के लिए भी उपयोगी हो सकता है। मैंने अपना लिखा है, लेकिन वहाँ अन्य लोग हैं, जैसे EmacsScreen


5

चार साल से अधिक समय के बाद, मैं देखता हूं कि कुछ लोग अभी भी कभी-कभी इस मुद्दे को देख रहे हैं, इसलिए मैं एक त्वरित फ़ंक्शन प्रकाशित करूंगा, जो मैंने एक शेल को लोड करने और उसका नाम पूछने के लिए लिखा था। इस तरह आप एक शेल "सॉर्ट-फाइल्स" को नाम दे सकते हैं यदि यह फाइल को छांटने के लिए समर्पित है और दूसरा "हाइव" है यदि यह हाइव प्रश्नों को चलाने के लिए समर्पित है। मैं उस रोज़ का उपयोग करता हूं (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 "*"))))

4

यह आपके द्वारा उपयोग किए जा रहे बफ़र में एक नई शेल आवृत्ति को स्वचालित करेगा; इसे एमएस या किसी और दिन और तत्काल आनंद की तरह बांधें:

(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)
  )
)

फिर से उपयोग करने की सिफारिश करने के लिए कई लोगों ने धन्यवाद दिया, भले ही परिणाम और भी भयानक कोष्ठक हो ...: \


1
यदि आपको letस्थानीय उपयोग के लिए इरादा है तो आपको -Bind चर की आवश्यकता है । यह है के रूप में आप अब के लिए वैश्विक मान हैं currentbufऔर newbuf
फिल्स

मेरे शेल-शेल फ़ंक्शन के साथ नए-शेल फ़ंक्शन की तुलना कैसे होती है?
एम

1
@ S4M यह मुख्य रूप से वरीयता का मुद्दा है, मैं आलसी हूं और अपने शेल को तुरंत चाहता हूं, वर्तमान में सक्रिय विंडो में और सामने एक बफ़रनाम टाइप किए बिना।
bjsdaiyu

@ टिप के लिए धन्यवाद, मैं लिस्प के साथ बिल्कुल परिचित नहीं हूं इसलिए इसे स्थानीय असाइनमेंट का उपयोग करके फिर से बनाया जाएगा। :-)
bjsdaiyu

हम्म, मुझे लगता है कि आप मेरे कार्य को ले सकते हैं और एक डिफ़ॉल्ट नाम जोड़ सकते हैं जो कि शेल_ एन की तरह कुछ होगा , जहां एन, एन-थ शेल खोल होगा, जबकि क्यूई -शेल शेल के लिए एक नाम का संकेत देगा।
एम

0

यह हर बार एक नया शेल खोलेगा जब आप फ़ंक्शन को इनवॉइस करते हैं और यदि आवश्यक हो तो इसे स्वचालित रूप से नाम बदलें। जोड़ा गया प्लस यदि आप फ़ाइलों को दूरस्थ रूप से संपादित कर रहे हैं (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)
  ))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.