При переключении буферов, запретите автоматическому переключению кадров в emacs

13

Когда я переключаю буферы, emacs переключается на существующий фрейм, если там уже открыт буфер.

Я нашел, как предотвратить это при переключении с помощью ido:

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

Но этого недостаточно: например, если есть ошибка lisp, emacs автоматически переключится на буфер * Backtrace * и переключит кадры, если он уже открыт.

Есть ли способ предотвратить полное переключение emacs на существующий фрейм?

MonsieurBanana
источник

Ответы:

3

Там, кажется, не вариант для этого.

Функция найти буфер делает позволяет указать , следует ли искать во всех кадрах или только в текущем кадре:

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

Однако реализация switch-to-bufferпередает 0 для ALL-FRAMESаргумента, что означает, что он будет выглядеть во всех кадрах.

Я полагаю, вы могли бы использовать :aroundсовет get-buffer-windowдля замены этого аргумента, если вы действительно хотели глобально предотвратить это поведение ... но я подозреваю, что это сломает другие вещи.

glucas
источник
Вот чего я боялся. Я мог бы попробовать add-advice вокруг get-buffer-window, но я не слишком люблю советовать широко используемые функции.
MonsieurBanana
Да, похоже, может вызвать проблемы. Возможно, вы захотите проверить popwinпакет как способ работы со специальными буферами - не уверен, что этого будет достаточно, плюс уже найденный вами конфиг ido.
glucas
1
На самом деле, я мог пропустить лодку здесь. Вы должны взглянуть на разделы руководства Emacs по «Выбор окна» и «Функции действия дисплея». В частности, использование inhibit-switch-frameкажется полезным. (У меня еще не было возможности поэкспериментировать с этими вариантами.)
glucas
Спасибо, что тема SE очень полезна. Документации display-bufferи display-buffer-alistделает меня разболелась голова, но это только вопрос времени , пока я не найду решение.
MonsieurBanana