2009-09-04 19 views
12

Da quando ho installato emacs su una nuova macchina ho visto un brutto comportamento. Sfortunatamente, i miei vecchi file .emacs sono piuttosto frammentati e non riesco a determinare se ho avuto l'elisp che si è preso cura di questo.Troppe schermate divise che si aprono in Emacs!

Il problema è questo: ha usato per essere che quando ho eseguito un comando che avrebbe aperto un nuovo buffer, come grep'ing, o facendo clic su un nome di file nei risultati di ricerca, una delle due cose sarebbe accaduto:

  1. Se solo un buffer sta mostrando, lo schermo si dividerà una volta
  2. Se più di un buffer sta mostrando, la finestra del buffer dopo la finestra di buffer corrente avrebbe aperto il file desiderato

voglio questo comportamento indietro . Quello che sto ottenendo ora è il seguente:

Emacs continuerà a dividere la finestra finché non saranno aperte quattro finestre di buffer. Se faccio continuamente clic su più risultati di grep, la finestra del buffer in cui si aprono scorre le altre tre finestre di buffer (non di grep-results). Mi piacerebbe se continuassero ad aprirsi nella stessa posizione: la "prossima" finestra del buffer accanto/sotto i risultati - stessa finestra buffer ogni volta.

Qualche idea su come ottenere questo comportamento?

+0

voglio anche questo, il nuovo comportamento mi fa impazzire. –

risposta

9

Considerare l'impostazione di split-height-threshold su un valore superiore all'altezza del fotogramma; ciò impedirà la divisione verticale indesiderata.

(setq split-height-threshold 999) 

Se si preferisce divisione verticale su divisione orizzontale, personalizzare invece split-width-threshold.

Per un controllo più dettagliato di come viene visualizzato un nuovo buffer, personalizzare display-buffer-function; ciò consentirà di sostituire completamente la funzione predefinita display-buffer che determina la politica di visualizzazione del buffer.

+1

In realtà, impostarlo su 'nil' è il modo prescritto per disabilitare la divisione verticale ..." Se questo è nil, 'split-window-sensibly 'non è autorizzato a dividere verticalmente una finestra ." Grazie per il puntatore! – blalor

+0

+1 per il miglioramento critico di blalor su questa risposta. –

1

ho incontrato questo quando si passa da emacs 22 a 23.

ho scoperto che l'impostazione display-buffer-reuse-frames a non-nil (come suggerito dal aiuto per display-buffer) aiutato, se si dispone già di un file aperto in un buffer.

3

Questo è quello che ho usato per un po ':

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

Funziona per me. Un avvertimento è che non presta attenzione ai frame in modalità compilata e li tiene aperti chiudendo altri, quelli più importanti. – jupp0r

Problemi correlati