2009-09-04 17 views
12

जब से मैंने एक नई मशीन पर emacs स्थापित किया है, मैंने एक बदसूरत व्यवहार देखा है। दुर्भाग्यवश, मेरी पुरानी .emacs फ़ाइलें बल्कि खंडित हैं और मैं यह निर्धारित नहीं कर सकता कि क्या मुझे इस बात का ख्याल रखना था।Emacs में बहुत अधिक विभाजित स्क्रीन खोलने!

समस्या यह है: यह है कि जब मैं एक आदेश है कि इस तरह grep'ing, या खोज परिणामों के भीतर एक फ़ाइल नाम क्लिक करने के रूप में एक नया बफर खोलेगा, प्रदर्शन दो चीजों में से एक होगा इस्तेमाल किया:

  1. तो केवल एक ही बफर दिखा रहा है, स्क्रीन एक बार यदि एक से अधिक बफर दिखा रहा है, बफर खिड़की वर्तमान बफर खिड़की के बाद बंट जाएगा
  2. वांछित फ़ाइल को खोलने होगा

मैं इस व्यवहार को वापस चाहते हैं । अब मुझे जो मिल रहा है वह निम्नलिखित है:

Emacs खिड़की को तब तक विभाजित रखेगा जब तक कि चार बफर विंडो खुली न हों। यदि मैं लगातार कई grep परिणामों पर क्लिक करता हूं, बफर विंडो जहां वे तीन अन्य (गैर-grep-results) बफर विंडो के माध्यम से चक्र खोलते हैं। मुझे यह अच्छा लगेगा अगर वे एक ही स्थान पर खुलते रहे: परिणामों के बगल में/नीचे "अगली" बफर विंडो - हर बार एक ही बफर विंडो।

इस व्यवहार को प्राप्त करने के तरीके पर कोई विचार?

+0

मैं यह भी चाहते हैं, नए व्यवहार मुझे पागल ड्राइव। –

उत्तर

9

फ्रेम ऊंचाई की तुलना में split-height-threshold को एक बड़े मूल्य पर सेट करने पर विचार करें; जो अवांछित लंबवत विभाजन को रोक देगा।

(setq split-height-threshold 999) 

आप क्षैतिज विभाजन से अधिक खड़ी विभाजन पसंद करते हैं, split-width-threshold बजाय अनुकूलित।

नया बफर कैसे प्रदर्शित किया जाता है, इसके बारे में अधिक बढ़िया नियंत्रण के लिए, display-buffer-function को कस्टमाइज़ करें; जो आपको डिफ़ॉल्ट display-buffer फ़ंक्शन को पूरी तरह से प्रतिस्थापित करने की अनुमति देगा जो बफर प्रदर्शन नीति को निर्देशित करता है।

+1

दरअसल, इसे 'शून्य' पर सेट करना लंबवत विभाजन को अक्षम करने का निर्धारित तरीका है ... "यदि यह शून्य है, तो 'split-window-sensibly' को विंडो लंबवत रूप से विभाजित करने की अनुमति नहीं है।" सूचक के लिए धन्यवाद! – blalor

+0

इस उत्तर पर ब्लैलर के महत्वपूर्ण सुधार के लिए +1। –

1

जब मैंने पाया कि (जैसा कि display-buffer के लिए मदद द्वारा सुझाए गए) गैर-शून्य करने के लिए display-buffer-reuse-frames स्थापित करने में मदद की है, अगर आप पहले से ही एक फ़ाइल एक बफर में खोले गए 23

को Emacs 22 से स्विच मैं इस का सामना करना पड़ा।

3

यह है कि मैं क्या थोड़ी देर के लिए प्रयोग कर रहे है:

;;;--------------------------------------------------------------------- 
;;; display-buffer 

;; The default behaviour of `display-buffer' is to always create a new 
;; window. As I normally use a large display sporting a number of 
;; side-by-side windows, this is a bit obnoxious. 
;; 
;; The code below will make Emacs reuse existing windows, with the 
;; exception that if have a single window open in a large display, it 
;; will be split horisontally. 

(setq pop-up-windows nil) 

(defun my-display-buffer-function (buf not-this-window) 
    (if (and (not pop-up-frames) 
      (one-window-p) 
      (or not-this-window 
       (not (eq (window-buffer (selected-window)) buf))) 
      (> (frame-width) 162)) 
     (split-window-horizontally)) 
    ;; Note: Some modules sets `pop-up-windows' to t before calling 
    ;; `display-buffer' -- Why, oh, why! 
    (let ((display-buffer-function nil) 
     (pop-up-windows nil)) 
    (display-buffer buf not-this-window))) 

(setq display-buffer-function 'my-display-buffer-function) 
+0

मेरे लिए काम करता है। एक चेतावनी यह है कि यह संकलन-मोड फ्रेम पर ध्यान नहीं देता है और अन्य, अधिक महत्वपूर्ण लोगों को बंद करते समय उन्हें खुला रखता है। – jupp0r