Podczas przełączania buforów, zapobiegaj automatycznemu przełączaniu ramki przez emacsa

13

Kiedy przełączam bufory, emacs przełączy się na istniejącą ramkę, jeśli bufor już tam jest otwarty.

Odkryłem, jak temu zapobiec, przełączając się z ido, używając:

(setq ido-default-buffer-method 'selected-window)

Ale to nie wystarczy: na przykład, jeśli wystąpi błąd lisp, emacs automatycznie przełączy się na bufor * Backtrace * i przełączy ramki, jeśli jest już otwarty.

Czy istnieje sposób, aby całkowicie nie przełączać emacsa na istniejącą ramkę?

MonsieurBanana
źródło

Odpowiedzi:

3

Wydaje się, że nie ma takiej możliwości.

Funkcja znaleźć bufor nie pozwalają na określenie, czy patrzeć na wszystkich klatek lub tylko w bieżącej ramce:

(get-buffer-window &optional BUFFER-OR-NAME ALL-FRAMES)

Jednak implementacja switch-to-bufferprzechodzi 0 dla ALL-FRAMESargumentu, co oznacza, że ​​będzie on wyglądał we wszystkich ramkach.

Przypuszczam, że możesz skorzystać :aroundz porady, get-buffer-windowaby zastąpić ten argument, jeśli naprawdę chciałbyś globalnie zapobiec temu zachowaniu ... ale podejrzewam, że to zepsułoby inne rzeczy.

glucas
źródło
Tego się obawiałem. Mogę wypróbować dodatkowe porady dotyczące get-buffer-window, ale nie przepadam za doradzaniem często używanym funkcjom.
MonsieurBanana
Tak, wydaje się, że może powodować problemy. Możesz sprawdzić popwinpakiet jako sposób radzenia sobie ze specjalnymi buforami - nie jestem pewien, czy to plus znaleziona konfiguracja ido może być wystarczająca.
glucas
1
Właściwie mogłem przegapić łódź tutaj. Powinieneś rzucić okiem na sekcje instrukcji Emacsa na temat „Wybieranie okna” i „Wyświetl funkcje działania”. W szczególności użycie inhibit-switch-framewydaje się przydatne. (Nie miałem jeszcze okazji eksperymentować z tymi opcjami.)
glucas
Dzięki, że wątek SE jest bardzo pomocny. Dokumentacja display-bufferi display-buffer-alistboli mnie głowa, ale to tylko kwestia czasu, aż znajdę rozwiązanie.
MonsieurBanana