2012-06-13 12 views
6

Wie erkenne ich, dass ein Emacs-Fenster bereits geteilt wurde?Erkennen des Emacs-Fensters ist bereits aufgeteilt

In meiner .emacs Datei, die ich habe:

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

, die ich zwei Puffer Side-by-Side haben kann, die jeweils genau 80 Zeichen breit.

Ab und zu ändere ich meine .emacs-Datei und möchte sie neu laden, also starte ich M-x load-file in meiner .emacs-Datei und das Fenster, in dem ich mich befinde, wird neu aufgeteilt.

Gibt es eine Art von Befehl, den ich anrufen kann, um zu überprüfen, ob der Frame bereits aufgeteilt wurde und nur (split-window-horizontally) aufrufen, wenn nicht? Etwas wie:

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

oder

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

Antwort

10

window-list kehren Sie eine Liste der Fenster (für den aktuellen Rahmen), so sollten Sie in der Lage zu tun:

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

prüfen aus der relevant documentation for windows.

+0

funktioniert perfekt, danke! Und danke für den Dokumentationszeiger. Ich habe diese Seite gefunden: http://www.gnu.org/software/emacs/manual/html_node/elisp/Splitting-Windows.html#Splitting-Windows, aber es scheint keine nützlichen Informationen zu enthalten. – sligocki

-3

Dies ist eine sinnlose Fragen, Fenster sind nicht aufgeteilt.

Ja, es gibt Funktionen namens Split-Window ..., aber was sie tun, ist nur die Größe des Fensters zu reduzieren, und erstellen Sie eine neue in dem so freigegebenen Raum.

Sie können nicht einfach (= 1 (length (window-list)))) verwenden, da Sie pro Frame mindestens ein Fenster haben (das simili-Fenster des Minibuffers nicht mitgerechnet).

Sie könnten versuchen:

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

aber das macht man nicht sagen, ob es mehrere Fenster in dem ausgewählten Frame sind, das ist, was Sie wirklich fragen, da offensichtlich könnte es ein anderer Rahmen, die mehrere enthält Fenster.

Also, wenn Sie die Frage richtig fragen: „Wie kann ich wissen, ob der ausgewählte Rahmen mehr als ein Fenster enthält“, können Sie leicht die Antwort finden:

(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

Funktion: Fensterliste & optionales Rahmen-Minibuffer-Fenster. Diese Funktion gibt eine Liste von Live-Fenstern zurück, die zum Frame Frame gehören. Wenn frame oder nil weggelassen wird, wird standardmäßig der ausgewählte Frame verwendet. Es gibt nur die Fenster in diesem Frame zurück. Ich probierte '(= (Länge (Fensterliste)) 1)' mit zwei Frames und es funktioniert gut. – sligocki

+2

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

Verwandte Themen