Al cambiar de búfer, evite que emacs cambie automáticamente el marco

13

Cuando cambio los búferes, emacs cambiará a un marco existente si el búfer ya está abierto allí.

Encontré cómo prevenir eso al cambiar con ido usando:

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

Pero no es suficiente: por ejemplo, si hay un error de lisp, emacs cambiará automáticamente al búfer * Backtrace *, y cambiará marcos si ya está abierto.

¿Hay alguna manera de evitar que completamente emacs cambie a un marco existente?

MonsieurBanana
fuente

Respuestas:

3

No parece haber una opción para esto.

La función para encontrar un búfer le permite especificar si buscar en todos los cuadros o solo en el cuadro actual:

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

Sin embargo, la implementación de switch-to-bufferpasa 0 para el ALL-FRAMESargumento, lo que significa que buscará en todos los marcos.

Supongo que podría usar :aroundconsejos get-buffer-windowpara reemplazar ese argumento, si realmente quisiera prevenir globalmente este comportamiento ... pero sospecho que eso rompería otras cosas.

glucas
fuente
Eso es lo que temía. Podría probar el consejo de agregar alrededor de get-buffer-window, pero no soy muy aficionado a aconsejar funciones ampliamente utilizadas.
MonsieurBanana
Sí, parece probable que cause problemas. Es posible que desee consultar el popwinpaquete como una forma de lidiar con buffers especiales, no estoy seguro de si eso, además de la configuración de ido que ya encontró, podría ser suficiente.
glucas
1
En realidad, puedo haber perdido el bote aquí. Debería echar un vistazo a las secciones del manual de Emacs en 'Elegir ventana' y 'Mostrar funciones de acción'. En particular, el uso de inhibit-switch-frameparece útil. (Todavía no he tenido la oportunidad de experimentar con estas opciones.)
glucas
Gracias, ese hilo SE es muy útil. La documentación display-buffery display-buffer-alisthace que me duela la cabeza, pero es solo cuestión de tiempo hasta que encuentre una solución.
MonsieurBanana