2009-09-04 10 views
12

Seit ich Emacs auf einer neuen Maschine installiert habe, habe ich ein hässliches Verhalten gesehen. Leider sind meine alten .emacs-Dateien eher fragmentiert, und ich kann nicht feststellen, ob ich elisp hatte, der sich darum gekümmert hat.Zu viele geteilte Bildschirme in Emacs öffnen!

Das Problem ist folgendes: es früher so, dass, wenn ich einen Befehl ausgeführt, die einen neuen Puffer, wie Sie grep öffnen würde, oder einen Dateinamen Ergebnisse in den Such klicken, eines von zwei Dingen passieren würde:

  1. Wenn nur ein Puffer zeigt, wird der Bildschirm geteilt einmal
  2. Wenn mehr als ein Puffer zeigt, die Pufferfenster nach dem aktuellen Pufferfenster würde die gewünschte öffnen Datei

ich dieses Verhalten will zurück . Was ich jetzt bekomme, ist folgendes:

Emacs wird das Fenster weiter aufteilen, bis vier Pufferfenster geöffnet sind. Wenn ich kontinuierlich auf mehrere grep-Ergebnisse klicke, durchläuft das Pufferfenster, in dem sie geöffnet werden, die drei anderen (nicht grep-Ergebnisse) Pufferfenster. Ich würde es gerne, wenn sie nur an der gleichen Stelle geöffnet bleiben: das "nächste" Pufferfenster neben/unter den Ergebnissen - immer dasselbe Pufferfenster.

Haben Sie irgendwelche Gedanken, wie Sie dieses Verhalten erreichen können?

+0

ich dies zu wollen, das neue Verhalten mir Nüsse antreibt. –

Antwort

9

Den Wert split-height-threshold auf einen größeren Wert als die Rahmenhöhe einstellen; das verhindert unerwünschte vertikale Teilung.

Wenn Sie eine vertikale Teilung über eine horizontale Teilung bevorzugen, passen Sie stattdessen split-width-threshold an.

Für detailliertere Kontrolle darüber, wie ein neuer Puffer angezeigt wird, passen Sie display-buffer-function an; Dadurch können Sie die Standardfunktion display-buffer, die die Pufferanzeige-Richtlinie vorschreibt, vollständig ersetzen.

+1

Tatsächlich ist es die vorgeschriebene Art, das vertikale Teilen zu deaktivieren, wenn man es auf "nil" setzt ... "Wenn dies nil ist, darf' split-window-sensibly' ein Fenster vertikal teilen. "Danke für den Zeiger! – blalor

+0

+1 für Blalors kritische Verbesserung dieser Antwort. –

1

begegnete ich dies, wenn sie von Emacs 22 bis 23

Schale fand ich, dass display-buffer-reuse-frames auf Nicht-Null-Einstellung (wie durch die Hilfe für display-buffer vorgeschlagen) geholfen, wenn Sie bereits eine Datei in einem Puffer geöffnet haben.

3

Dies ist, was ich habe für eine Weile:

;;;--------------------------------------------------------------------- 
;;; 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

Funktioniert für mich. Ein Nachteil ist, dass es Frames im Kompilierungsmodus nicht beachtet und sie offen hält, während andere, wichtigere Frames geschlossen werden. – jupp0r