Ao alternar buffers, evite que o emacs alterne automaticamente o quadro

13

Quando alterno os buffers, o emacs muda para um quadro existente se o buffer já estiver aberto lá.

Eu descobri como evitar isso ao alternar com ido usando:

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

Mas não é suficiente: por exemplo, se houver um erro lisp, o emacs alternará automaticamente para o buffer * Backtrace * e alternará os quadros, se já estiver aberto.

Existe uma maneira de impedir que o emacs completamente mude para um quadro existente?

MonsieurBanana
fonte

Respostas:

3

Não parece haver uma opção para isso.

A função de encontrar um buffer não permitem especificar se a olhar em todos os quadros ou apenas no quadro atual:

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

No entanto, a implementação das switch-to-bufferpassagens 0 para o ALL-FRAMESargumento, o que significa que ele procurará em todos os quadros.

Suponho que você poderia usar :aroundconselhos get-buffer-windowpara substituir esse argumento, se realmente quisesse impedir globalmente esse comportamento ... mas suspeito que isso iria quebrar outras coisas.

glucas
fonte
Era o que eu temia. Eu posso tentar o conselho adicional sobre get-buffer-window, mas não gosto muito de aconselhar funções amplamente usadas.
MonsieurBanana
Sim, parece provável que cause problemas. Você pode querer verificar o popwinpacote como uma maneira de lidar com buffers especiais - não tenho certeza se isso mais a configuração ido que você já encontrou pode ser suficiente.
glucas
1
Na verdade, eu posso ter perdido o barco aqui. Você deve dar uma olhada nas seções do manual do Emacs em 'Escolha da janela' e 'Exibir funções de ação'. Em particular, o uso de inhibit-switch-frameparece útil. (Eu não tive a chance de experimentar com estas opções ainda.)
glucas
Obrigado, esse segmento SE é muito útil. A documentação display-buffere display-buffer-alistfaz minha cabeça doer, mas é apenas uma questão de tempo até encontrar uma solução.
MonsieurBanana