Używam sr-speedbar z emacsem, i często dzielę ramkę na 2-3 różne okna, i za każdym razem, gdy klikam plik na sr-speedbar, zawsze otwiera nowy bufor w najniższym oknie. Staram się zachować dolne prawe okno jako stosunkowo mały ansi-termin, a emacs nalega na otwieranie nowych buforów w oknie krótkich terminów, a nie w znacznie większym obszarze, który chciałbym użyć do edycji buforów.
Czy istnieje sposób, w jaki mogę skonfigurować logikę tworzenia bufora, aby preferowała wyższe okna niż niższe okna?
Próbowałem już wziąć moje najniższe okno i oznaczyć je jako chronione, a to właśnie sprawiło, że emacs podzielił je na dwie nieuzasadnione małe porcje. Potem spróbowałem włączyć naprawioną wielkość okna i zamiast emacs otwierał bufor nad tym oknem, po prostu dał mi błąd, że okno było zbyt małe, aby je podzielić. Dobrze, myślę, że przestało zapychać moje najniższe okno, ale głupie, że zamiast tego powstrzymuje mnie od otwierania nowych buforów.
Idealnie, chciałbym móc zmusić emacsa do wybrania okna w prawym górnym rogu w celu wyświetlenia nowo utworzonych buforów, nie próbując dzielić okna w prawym dolnym rogu.
Odpowiedzi:
Zakładam, że używasz Emacsa 24; Nie testowałem tej odpowiedzi w żadnej wcześniejszej wersji i nie wiem, kiedy do Emacsa dodano koncepcję dedykowanych okien. Widziałem wzmianki o jego użyciu, które pochodzą z 2011 roku, więc zakładam, że Emacs 23 (przynajmniej) również ma taką możliwość.
Możesz uniemożliwić Emacsowi otwieranie nowego bufora w danym oknie, dedykując okno jego buforowi .
W najprostszym przypadku możesz to zrobić, wybierając okno, które chcesz poświęcić, upewniając się, że aktualnie wyświetla bufor, któremu chcesz go poświęcić, a następnie robiąc to
M-: (set-window-dedicated-p (selected-window) t)
. Zapobiegnie to temu, że Emacs weźmie pod uwagę tak zmodyfikowane okno przy podejmowaniu decyzji, w którym oknie ma zostać wyświetlony bufor. Aby usunąć dedykację, oceń to samo wyrażenie, zastępując drugi argument słowemnil
.Możesz uniemożliwić Emacsowi próbę podzielenia okna, które wyświetla dany bufor, ustawiając zmienną lokalną dla bufora zmienną wielkość okna ustaloną na wartość inną niż zero.
W najprostszym przypadku możesz to zrobić, wybierając okno i wykonując czynności
M-: (setq window-size-fixed t)
. Aby naprawić tylko wysokość lub szerokość okien wyświetlających bufor, oceń to samo wyrażenie, przekazując'height
lub'width
jako drugi argument; aby usunąć ograniczenie, zamień drugi argument nanil
.W ogólnym przypadku uznałem twój problem za wystarczająco interesujący, aby zhakować rozwiązanie , które możesz upuścić na ścieżkę ładowania
(require)
i użyć:źródło
W ostatnich wydaniach Emacsa
display-buffer-alist
dodano opcję . Zapewnia precyzyjną kontrolę nad wyświetlaniem bufora, używanymi oknami itp. Jednak ponieważ pozwala robić tak wiele rzeczy, jest również dość złożony i trudny do opisania. Zapoznaj się z dokumentacją:C-h v display-buffer-alist
.źródło