shell Emacs खोल का उपयोग करते हुए स्पष्ट शेल की कमान




elisp (5)

क्या एमएसीएस में शेल का उपयोग करते हुए शेल को खाली करने के लिए एक अंतर्निहित कमांड है?

यदि नहीं, तो क्या इसे प्राप्त करने के लिए एक अनिवार्य कार्य है?


या ... आप बफर को छोटा कर सकते हैं।

(let ((eshell-buffer-maximum-lines 0)) (eshell-truncate-buffer))

AFAIK आप स्पष्ट नहीं कर सकते हैं जब आप Mx खोल के रूप में शुरू करते हैं, लेकिन यदि आप Mx शब्द करते हैं तो आपको पूरी तरह कार्यात्मक टर्मिनल मिलता है जहां स्पष्ट रूप से काम करता है। मैं इस पर गलत हो सकता हूं, लेकिन व्यक्तिगत रूप से अब मैं Mx शब्द का उपयोग करता हूं क्योंकि यह पूरी तरह से काम कर रहा है।


यहां प्रस्तावित अधिकांश समाधान EShell मोड में काम नहीं करेंगे!

EShell मोड बफ़र केवल पढ़ा जाता है, इसलिए कमांड को मारने और मिटाने से काम नहीं चलेगा।

अपने सामान्य Ctrl - L का उपयोग एशेल टर्मिनल को साफ़ करने के लिए, इसे अपनी .init फ़ाइल में जोड़ें:

(defun eshell-clear-buffer ()
  "Clear terminal"
  (interactive)
  (let ((inhibit-read-only t))
    (erase-buffer)
    (eshell-send-input)))
(add-hook 'eshell-mode-hook
      '(lambda()
          (local-set-key (kbd "C-l") 'eshell-clear-buffer)))

नोट : मानक Ctrl - L का बेहतर अनुकरण करने के लिए, बफर क्लियर करने के बाद, कमांड प्रारंभिक प्रॉम्प्ट को पुनर्स्थापित करेगा।


अपडेट फरवरी 2015

बस ध्यान दिया जाता है कि अब Emacs (संस्करण 25+) में कमांड comint-clear-buffer , डिफ़ॉल्ट रूप से Cc Mo लिए बाध्य है, जो कि हमें यहाँ की आवश्यकता है, और संभवतः उन उत्तरों के लिए बेहतर है जिन्हें मैंने मूल रूप से नीचे पोस्ट किया था।

विचार करने के लिए विकल्प:

  1. Cl बफर को रिकर्व करेगा। इसे बार-बार दबाने से बफर बंद हो जाता है, इसलिए यह बिंदु बफर के ऊपर, मध्य या नीचे दिखाई देता है। जब यह शीर्ष पर रुक जाता है, तो बफर ऐसा लगता है कि यह साफ हो गया है, हालांकि सभी पाठ अभी भी वहां हैं, देखने से बाहर।

  2. Cx h पूरे बफ़र को चिह्नित करता है, जिसके बाद Cw इसे मारता है। यह अंतिम प्रॉम्प्ट को भी मारता है, लेकिन अगली कमांड दर्ज करने के बाद आपको अपना प्रॉम्प्ट वापस मिल जाता है।

  3. आप erase-buffer का भी उपयोग कर सकते हैं, जो डिफ़ॉल्ट रूप से एक कुंजी से बंधा नहीं है, लेकिन यह आसानी से हो जाता है (आप Mx erase-buffer का भी उपयोग कर सकते हैं:

    (defun my-shell-hook ()
      (local-set-key "\C-cl" 'erase-buffer))

    (add-hook 'shell-mode-hook 'my-shell-hook)

जो इसे Cc l से बांधता है; आप जो चाहें उसे चुन सकते हैं।

  1. समाशोधन के बाद अपने संकेत को फिर से बनाने के लिए एक त्वरित सुधार संभव है:
    (defun my-clear ()
      (interactive)
      (erase-buffer)
      (comint-send-input))

    (defun my-shell-hook ()
      (local-set-key "\C-cl" 'my-clear))

    (add-hook 'shell-mode-hook 'my-shell-hook)

जब आप कुछ समय के लिए emacs का उपयोग कर रहे हैं, तो अंकन और हत्या क्षेत्र स्वाभाविक हो जाते हैं, इसलिए आपको मिल सकता है पहला विकल्प पर्याप्त है। यदि नहीं, तो अंतिम विकल्प निकटतम है जो आप चाहते हैं।

संपादित करें: यह सिर्फ emacs विकि पर पाया गया, यह मेरे विकल्प 4 से बेहतर है:

(defun my-clear ()
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

यदि आप पाते हैं, तो आप मिटा-बफर का उपयोग नहीं कर सकते हैं और दिखाता है कि पाठ केवल पढ़ा जाता है। आप निम्न फ़ंक्शन का उपयोग कर सकते हैं।

  (defun eshell/clear ()
  "Hi, you will clear the eshell buffer."
  (interactive)
  (let ((inhibit-read-only t))
    (erase-buffer)
    (message "erase eshell buffer")))




elisp