Saat mengganti buffer, cegah emacs untuk secara otomatis mengganti frame

13

Ketika saya beralih buffer, emacs akan beralih ke bingkai yang ada jika buffer sudah dibuka di sana.

Saya menemukan cara mencegahnya saat beralih dengan ido menggunakan:

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

Tapi itu tidak cukup: untuk contoh jika ada kesalahan lisp emacs akan secara otomatis beralih ke buffer * Backtrace *, dan akan beralih frame jika sudah terbuka.

Apakah ada cara untuk mencegah emac sepenuhnya beralih ke bingkai yang ada?

Monsieur Banana
sumber

Jawaban:

3

Tampaknya tidak ada opsi untuk ini.

Fungsi untuk menemukan buffer memang memungkinkan Anda menentukan apakah akan melihat semua frame atau hanya di frame saat ini:

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

Namun, implementasi switch-to-bufferpass 0 untuk ALL-FRAMESargumen, yang berarti akan terlihat di semua frame.

Saya kira Anda dapat menggunakan :aroundsaran get-buffer-windowuntuk menggantikan argumen itu, jika Anda benar-benar ingin mencegah perilaku ini secara global ... tapi saya menduga itu akan merusak hal-hal lain.

glukas
sumber
Itu yang saya takutkan. Saya mungkin mencoba add-advice di sekitar get-buffer-window, tapi saya tidak terlalu suka menasihati fungsi yang banyak digunakan.
MonsieurBanana
Ya, sepertinya akan menyebabkan masalah. Anda mungkin ingin memeriksa popwinpaket sebagai cara berurusan dengan buffer khusus - tidak yakin apakah itu ditambah konfigurasi ido yang sudah Anda temukan mungkin cukup.
glukas
1
Sebenarnya, saya mungkin ketinggalan perahu di sini. Anda harus melihat bagian manual Emacs pada 'Memilih Jendela' dan 'Menampilkan Fungsi Aksi'. Secara khusus, penggunaan inhibit-switch-frametampaknya bermanfaat. (Saya belum memiliki kesempatan untuk bereksperimen dengan opsi-opsi ini.)
glucas
Terima kasih, utas SE sangat membantu. Dokumentasi untuk display-bufferdan display-buffer-alistmembuat kepala saya sakit, tetapi hanya masalah waktu sampai saya menemukan solusi.
MonsieurBanana