2009-09-04 8 views
12

Desde que instalé emacs en una máquina nueva, he visto un comportamiento desagradable. Desafortunadamente, mis viejos archivos .emacs están bastante fragmentados y no puedo determinar si solía tener elisp que me ocupó de esto.¡Demasiadas pantallas divididas se abren en Emacs!

El problema es el siguiente: lo que solía ser que cuando realicé un comando que abriría un nuevo tampón tal como grep'ing, o haciendo clic en un nombre de archivo en los resultados de búsqueda, una de dos cosas iba a suceder:

  1. Si sólo hay un buffer de muestra, la pantalla se dividirá una vez
  2. Si más de un buffer de muestra, la ventana de memoria intermedia después de la ventana de búfer en abriría el archivo deseado

Quiero este comportamiento vuelta . Lo que estoy obteniendo ahora es lo siguiente:

Emacs seguirá dividiendo la ventana hasta que se abran cuatro ventanas de búfer. Si continuamente hago clic en múltiples resultados de grep, la ventana del búfer donde se abre pasa por las otras tres ventanas de búfer (no grep-results). Me gustaría que siguieran abriendo en la misma ubicación: la "siguiente" ventana de buffer al lado/debajo de los resultados, la misma ventana de buffer cada vez.

¿Alguna idea sobre cómo lograr este comportamiento?

+0

quiero esto también, el nuevo comportamiento me vuelve loco. –

Respuesta

9

Considere la configuración split-height-threshold a un valor mayor que la altura del cuadro; eso evitará la división vertical no deseada.

(setq split-height-threshold 999) 

Si prefiere división vertical sobre división horizontal, personalizar split-width-threshold lugar.

Para obtener un control más preciso de cómo se muestra un nuevo búfer, personalice display-buffer-function; eso le permitirá reemplazar completamente la función predeterminada display-buffer que dicta la política de visualización del búfer.

+1

En realidad, establecerlo en 'nil' es la forma predeterminada de desactivar la división vertical ..." Si esto es nil, 'split-window-sensibly 'no puede dividir una ventana verticalmente." ¡Gracias por el puntero! – blalor

+0

+1 para la mejora crítica de blalor en esta respuesta. –

1

me encontré con esto cuando se cambia de emacs 22 a 23.

He encontrado que la fijación de display-buffer-reuse-frames a no nula (como lo sugiere la ayuda de display-buffer) ayudado, si ya tiene un archivo abierto en un búfer.

3

Esto es lo que he estado usando durante un tiempo:

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

Funciona para mí. Una advertencia es que no presta atención a los marcos en modo de compilación y los mantiene abiertos mientras cierra otros, más importantes. – jupp0r

Cuestiones relacionadas