2009-09-04 18 views
12

Odkąd zainstalowałem emacs na nowej maszynie, widziałem brzydkie zachowanie. Niestety, moje stare pliki .emacs są raczej podzielone i nie mogę stwierdzić, czy miałem kiedyś do czynienia z elisem, który się tym zajmował.Zbyt wiele podzielonych ekranów otwieranych w Emacs!

Problemem jest to: kiedyś, że kiedy wykonał polecenie, które będzie otworzyć nowy bufor, takie jak grep'ing lub klikając nazwę pliku w wynikach wyszukiwania, jedna z dwóch rzeczy by się stało:

  1. Jeśli tylko jeden bufor pokazuje, ekran zostanie podzielony raz
  2. Jeśli więcej niż jeden bufor jest wyświetlane, okno bufora po bieżącym oknie bufora by otworzyć żądany plik

chcę tego zachowania z powrotem . Dostaję teraz:

Emacs będzie nadal dzielić okno, aż cztery okna bufora będą otwarte. Jeśli ciągle klikam wiele wyników grep, okno bufora, w którym otwierają się, przechodzi przez kolejne trzy okna (inne niż grep-results). Chciałbym, żeby po prostu otwierały się w tej samej lokalizacji: "następne" okno bufora obok/poniżej wyników - to samo okno bufora za każdym razem.

Jakieś przemyślenia na temat sposobu osiągnięcia tego zachowania?

+0

Chcę to zbyt nowa zachowanie doprowadza mnie do szału. –

Odpowiedz

9

Należy rozważyć ustawienie wartości split-height-threshold na wartość większą niż wysokość ramki; które zapobiegną niechcianemu podziałowi pionowemu.

(setq split-height-threshold 999) 

Jeśli preferujesz podział pionowy na podział poziomy, dostosuj zamiast tego split-width-threshold.

Aby uzyskać dokładniejszą kontrolę nad wyświetlaniem nowego bufora, dostosuj display-buffer-function; to pozwoli ci całkowicie zastąpić domyślną funkcję display-buffer, która dyktuje zasady wyświetlania bufora.

+1

W rzeczywistości ustawianie go na 'nil' jest zalecanym sposobem wyłączania podziału pionowego ..." Jeśli jest to zero, "podzielone okno-rozsądnie" nie może pionowo podzielić okna . "Dzięki za wskaźnik! – blalor

+0

+1 dla krytycznej poprawy blalora w tej odpowiedzi. –

1

natknąłem to podczas przełączania z emacs 22 do 23.

Okazało się, że ustawienie display-buffer-reuse-frames do non-zero (jak sugeruje pomoc dla display-buffer) pomógł, jeśli masz już otwarty plik w buforze.

3

To właśnie używam na chwilę:

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

Działa dla mnie. Jedynym zastrzeżeniem jest to, że nie zwraca uwagi na ramki w trybie kompilacji i utrzymuje je otwarte podczas zamykania innych, ważniejszych. – jupp0r

Powiązane problemy