2009-09-04 3 views
12

Depuis que j'ai installé Emacs sur une nouvelle machine, j'ai vu un comportement moche. Malheureusement, mes anciens fichiers .emacs sont plutôt fragmentés et je ne peux pas déterminer si j'avais l'habitude d'avoir un élisp qui s'occupait de ça.Trop d'écrans partagés s'ouvrent dans Emacs!

Le problème est le suivant: il l'habitude d'être que lorsque je fis une commande qui ouvrirait un nouveau tampon tel que grep'ing, ou en cliquant sur un nom de fichier dans les résultats de recherche, l'une des deux choses se passerait-il:

  1. Si un seul tampon est affiché, l'écran se divisera une fois
  2. Si plus d'un tampon est affiché, la fenêtre de tampon après la fenêtre tampon en cours ouvrirait le fichier souhaité

Je veux que ce comportement de retour . Ce que j'obtiens maintenant est le suivant:

Emacs continuera à diviser la fenêtre jusqu'à ce que quatre fenêtres de tampon soient ouvertes. Si je clique continuellement sur plusieurs résultats grep, la fenêtre tampon où ils s'ouvrent parcourt les trois autres fenêtres de tampon (résultats non-grep). Je voudrais qu'ils continuent juste à ouvrir au même endroit: la fenêtre de tampon "suivant" à côté/en dessous des résultats - même fenêtre tampon à chaque fois.

Des réflexions sur la façon d'obtenir ce comportement?

+0

Je veux cela aussi, le nouveau comportement me rend fou. –

Répondre

9

Envisager de définir split-height-threshold sur une valeur supérieure à la hauteur du cadre; Cela empêchera la division verticale indésirable.

(setq split-height-threshold 999) 

Si vous préférez division verticale sur horizontale divisée, personnaliser split-width-threshold à la place.

Pour un contrôle plus précis de l'affichage d'un nouveau tampon, personnalisez display-buffer-function; cela vous permettra de remplacer complètement la fonction par défaut display-buffer qui dicte la politique d'affichage du tampon.

+1

En fait, le mettre à 'nil' est la façon prescrite de désactiver la division verticale ..." Si c'est nul, 'split-window-sensibly 'n'est pas autorisé à diviser une fenêtre verticalement." Merci pour le pointeur! – blalor

+0

+1 pour l'amélioration critique de blalor sur cette réponse. –

1

j'ai rencontré lors du passage de ce emacs 22 à 23.

J'ai trouvé que la mise display-buffer-reuse-frames à la non-nulle (comme le suggère l'aide pour display-buffer) aidé, si vous avez déjà un fichier ouvert dans un tampon.

3

C'est ce que je l'ai utilisé pendant un certain temps:

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

Fonctionne pour moi. Un inconvénient est qu'il ne fait pas attention aux cadres en mode compilation et les garde ouverts tout en fermant d'autres, plus importants. – jupp0r