2012-06-13 9 views
6

मैं कैसे पता लगा सकता हूं कि एक Emacs विंडो पहले ही विभाजित हो चुकी है?Emacs विंडो का पता लगाना पहले ही विभाजित है

मेरी .emacs फ़ाइल में, मेरे पास है:

(when (display-graphic-p) 
    (set-frame-size (selected-frame) 166 85) 
    (split-window-horizontally)) 

जो मुझे साइड-बाई-साइड दो बफ़र्स, प्रत्येक वास्तव में 80 वर्ण विस्तृत करने के लिए अनुमति देता है।

प्रत्येक बार थोड़ी देर में मैं अपनी .emacs फ़ाइल बदलता हूं और इसे जगह में फिर से लोड करना चाहता हूं, इसलिए मैं अपने .emacs फ़ाइल पर M-x load-file चलाता हूं और उस विंडो में मैं फिर से विभाजित हो जाता हूं।

क्या कोई ऐसा आदेश है जिसे मैं कॉल कर सकता हूं यह जांचने के लिए कि क्या फ्रेम पहले ही विभाजित हो चुका है और केवल (split-window-horizontally) पर कॉल करें यदि यह नहीं है? कुछ की तरह:

(when (window-is-root) 
    (split-window-horizontally)) 

या

(when (not (window-is-already-split)) 
    (split-window-horizontally)) 

उत्तर

10

window-list आप खिड़कियों की एक सूची (वर्तमान फ्रेम के लिए) वापस आ जाएगी, तो आप ऐसा करने में सक्षम होना चाहिए:

(when (= (length (window-list)) 1) 
    (split-window-horizontally)) 

चेक relevant documentation for windows बाहर।

+0

काम करता है, धन्यवाद:

तो अगर आप सवाल का सही ढंग से पूछते हैं, "मैं कैसे पता कर सकते हैं चयनित फ्रेम से अधिक विंडो में शामिल है कि क्या", आप आसानी से उत्तर मिल सकता है! और दस्तावेज सूचक के लिए भी धन्यवाद। मुझे यह पृष्ठ मिला: http://www.gnu.org/software/emacs/manual/html_node/elisp/Splitting-Windows.html#Splitting- विन्डोज़ लेकिन इसमें कोई उपयोगी जानकारी प्रतीत नहीं हुई। – sligocki

-3

यह एक अर्थहीन प्रश्न है, खिड़कियां विभाजित नहीं हैं।

हां, स्प्लिट-विंडो नामक फ़ंक्शंस हैं ..., लेकिन वे क्या करते हैं केवल खिड़की के आकार को कम करने के लिए, और अंतरिक्ष में एक नया स्थान बनाते हैं।

आप केवल (= 1 (लंबाई (विंडो-सूची)) का उपयोग नहीं कर सकते हैं क्योंकि आपके पास प्रति फ्रेम कम से कम एक विंडो है (मिनीबफर की सिमिल-विंडो की गणना नहीं)।

आप की कोशिश कर सकते:

(< (length (frame-list)) (length (window-list))) 

लेकिन यह है कि आपको बता नहीं है अगर वहाँ चयनित फ्रेम, जो क्या आप वास्तव में, पूछ रहे हैं के बाद से स्पष्ट रूप से यह एक और फ्रेम कि कई शामिल हो सकता है में कई खिड़कियां हैं विंडोज। पूरी तरह से

(require 'cl) 

(defun complement (fun) 
    (byte-compile `(lambda (&rest args) (not (apply ',fun args))))) 

(defun* more-than-one-window-in-frame-p (&optional (frame (selected-frame))) 
    (< 1 (length (remove* frame (window-list) 
         :key (function window-frame) 
         :test (complement (function eql)))))) 
+2

फ़ंक्शन: विंडो-सूची और वैकल्पिक फ्रेम मिनीबफर विंडो। यह फ़ंक्शन फ़्रेम फ्रेम से संबंधित लाइव विंडो की एक सूची देता है। यदि फ्रेम छोड़ा गया है या शून्य है, तो यह चयनित फ्रेम पर डिफ़ॉल्ट है। तो यह केवल इस फ्रेम में खिड़कियां देता है। मैंने कोशिश की '(= (लंबाई (विंडो-सूची)) 1) 'दो फ्रेम के साथ और यह ठीक काम करता है। – sligocki

+2

से: http://www.gnu.org/software/emacs/manual/html_node/elisp/Windows-and-Frames.html#Windows-and-Frames – sligocki

संबंधित मुद्दे