क्या मैं Emacs के बफ़र्स-मेनू के प्रारूप को कस्टमाइज़ कर सकता हूँ?


2

Emacs बफ़र्स मेनू दो कॉलम दिखाता है: एक बफर नाम के साथ, और एक फ़ाइल नाम के साथ, पूर्ण पथ के साथ। हमारी परियोजनाओं में रास्ते बहुत लंबे हो सकते हैं, एक से अधिक स्क्रीन फैलेगी। इसलिए मैं उन्हें बफ़र्स मेनू में नहीं दिखाना चाहूंगा। इसे कैसे प्राप्त किया जा सकता है? बोनस: इसके बजाय पथ के लिए टूलटिप का उपयोग करें।


आपके विशिष्ट प्रश्न का उत्तर नहीं है (इसलिए टिप्पणी) लेकिन क्या आपने देखा है Ibuffer ?
terdon

नहीं, मैं अब तक lbuffer नहीं जानता था। मैं भी बस पाया बफे मेनू , जो मेनू में प्रदर्शित स्तंभों को एन- और डिसेबल कर सकता है।
Arne

कूल, आप इसे उत्तर के रूप में क्यों पोस्ट नहीं करते?
terdon

मुझे लगता है कि यह सही विकल्प नहीं है। ऐसा लगता है कि बफर-मेनू है (यह सिर्फ बफर सूची प्रदर्शित करने वाला एक बफर है), बफ़र्स-मेनू (जो आपको Ctrl + वाम माउस बटन के साथ मिलता है), बफर-मेनू + (यह बफर सूची प्रदर्शित करने वाला बेहतर बफर है), और आपका lbuffer (यह फिर से एक बफर सूची को प्रदर्शित करने वाला बफर है)। और फिर msb- मोड है, जो मैंने अभी तक कोशिश नहीं की है।
Arne

जवाबों:


2

चूंकि Emacs स्रोतों के साथ आता है, मैंने बस माउस-बफर-मेनू को समायोजित करने के लिए स्वतंत्रता ली। मैंने अपने में यह डाल दिया init.el डिफ़ॉल्ट कार्यान्वयन को ओवरराइड करने के लिए जो बनाता है mouse-buffer-menu-alist। यह फ़ाइल नाम के साथ दूर करता है और केवल बफर नाम दिखाता है। मेरी जरूरतों के लिए यह पर्याप्त है:

(defun mouse-buffer-menu-alist (buffers)
  (let (tail
    (maxlen 0)
    head)
    (setq buffers
      (sort buffers
        (function (lambda (elt1 elt2)
                (string< (buffer-name elt1) (buffer-name elt2))))))
    (setq tail buffers)
    (while tail
      (or (eq ?\s (aref (buffer-name (car tail)) 0))
      (setq maxlen
        (max maxlen
             (length (buffer-name (car tail))))))
      (setq tail (cdr tail)))
    (setq tail buffers)
    (while tail
      (let ((elt (car tail)))
    (if (/= (aref (buffer-name elt) 0) ?\s)
        (setq head
          (cons
           (cons
            (format
             (format "%%-%ds  %%s%%s" maxlen)
             (buffer-name elt)
             (if (buffer-modified-p elt) "*" " ")
             (with-current-buffer elt
               (if buffer-read-only "%" " "))
                     )
            elt)
           head))))
      (setq tail (cdr tail)))
    ;; Compensate for the reversal that the above loop does.
    (nreverse head)))

PS: यह फ़ंक्शन Emacs23 स्रोत से लिया गया है। Emacs24 के लिए यह थोड़ा अलग लग सकता है।
Arne

यह Emacs 24 के साथ ठीक काम करने के लिए लगता है, धन्यवाद!
kcbanner

मुझे सही दिशा में आगे बढ़ाने के लिए धन्यवाद। संयोग से, यदि आपको मेनू में उपसमूह रखना पसंद नहीं है (यह मेरा मामला था, क्योंकि मुझे द्वि-चरणीय प्रक्रिया होने के लिए बफर का चयन पसंद नहीं है), आप माउस-बफर-मेनू-मोड-मल्टी सेट कर सकते हैं बड़ी संख्या में .emacs init फ़ाइल में परिवर्तनशील। Mouse.el स्रोत फ़ाइल में टिप्पणियां देखें।
Colin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.