- La gestión de ventanas en Emacs se basa en una estructura flexible donde buffers y ventanas están separados, pero con operaciones básicas algo rudimentarias encima, por lo que el usuario debe combinar herramientas y hábitos para construir su flujo de trabajo
- El texto no se centra en reglas de
display-bufferni en espacios de trabajo basados en pestañas, sino en operaciones manuales dentro de un frame de Emacs: mover el foco, organizar buffers, dividir y eliminar ventanas, y manejar tareas temporales other-window,windmove,winum,ace-window, el mouse,transpose-frame,window-prefix-map,other-window-prefixywinner-modese reparten tareas como navegación cíclica, movimiento direccional, selección por número, selección por pista, transformación de layouts y recuperación- Con
ace-windowy Avy se puede elegir una ventana concreta y luego ejecutar un comando, o saltar directamente a una posición de texto para reducir el cambio de ventanas en sí - La gestión de ventanas en Emacs no es tanto un sistema fijo y complejo, sino más bien un problema abierto;
display-buffer-alist, Popper·Popwin, la manipulación del árbol de ventanas y la integración con WM en mosaico son potentes, pero también implican un costo de configuración alto y puntos ciegos
Qué significa la gestión de ventanas en Emacs
- En Emacs, una ventana (window) es un viewport o panel dentro de un frame, mientras que un buffer (buffer) es un bloque continuo de texto que puede corresponder o no al contenido de un archivo
- Muchos IDE y editores prácticamente fusionan los conceptos de ventana y buffer para reducir la carga cognitiva, pero Emacs los separa para permitir disposiciones más flexibles
- Ver el mismo archivo dos veces es sencillo
- También se pueden manejar de forma natural buffers que no corresponden directamente a un archivo
- Los buffers indirectos de Emacs son algo parecido a una copia “viva” de todo el buffer
- Esta separación tiene un costo para los usuarios nuevos
- Hay que ubicar las ventanas donde uno quiere dentro del frame
- Hay que poner el buffer deseado en la ventana deseada
- Al principio, la carga operativa se nota antes que las ventajas que aporta esta separación
Áreas que este artículo no cubre
- Las reglas automáticas de visualización de buffers para controlar por completo
display-bufferno son el tema central- La API de
display-bufferrequiere conocimientos detallados comowindow-parameters, slots y ventanas dedicadas - Como material relacionado, se pueden consultar el artículo de Mickey Peterson, el video de Protesilaos Stavrou y el manual de Emacs Lisp
- La API de
- Las pestañas, los espacios de trabajo, el aislamiento de buffers y la persistencia de sesiones también quedan fuera del alcance principal
- Entre las herramientas relacionadas están tab-bar, tabspaces, eyebrowse, tab-bookmark, desktop.el, persp-mode.el, perspective, project-tab-groups, beframe y activities.el
- También se dejan fuera del texto las alternativas radicales que funcionan dentro de Emacs como un gestor de ventanas aparte
- El foco real está en las operaciones manuales y cotidianas
- Cambiar el foco entre ventanas
- Mover buffers entre ventanas
- Dividir y eliminar ventanas
- Controlar la ventana de destino durante la ejecución de comandos
Movimiento básico: other-window y la “siguiente ventana”
other-windowes el comando básico de cambio de ventana que se aprende en el tutorial de Emacs, y su tecla predeterminada esC-x o- El orden de selección suele recorrer las ventanas dentro del frame en sentido horario
- Cuando hay pocas ventanas, es simple y suficientemente usable
- A medida que aumentan las ventanas, hay que invocarlo varias veces hasta llegar al lugar deseado
- También hay ajustes prácticos
- Se puede enlazar a una tecla más fácil de presionar, como
M-o - Con argumentos numéricos se pueden saltar varias posiciones o moverse en sentido inverso
- Si se activa
repeat-mode, se pueden ingresar repeticiones comoC-x o o o...oM-o o o...
- Se puede enlazar a una tecla más fácil de presionar, como
- Si se configura el parámetro de ventana
no-other-window,other-windowsalta esa ventana específica- Esta es la razón por la que ventanas laterales tipo gestor de archivos, como
dired-sidebarodirvish-side, quedan fuera de los destinos deother-window
- Esta es la razón por la que ventanas laterales tipo gestor de archivos, como
- El concepto de “siguiente ventana” también es el destino predeterminado de comandos que actúan sobre otra ventana, como
scroll-other-window
Movimiento basado en dirección: windmove
windmovees una biblioteca integrada que mueve el foco de ventana según una dirección- Se parece al movimiento izquierda·derecha·arriba·abajo que esperan los usuarios de Vim
- Los usuarios de
evil-modetambién usan Windmove internamente
windmove-left,windmove-right,windmove-upywindmove-downse pueden enlazar aWASD,HJKL, las flechas, etc.- Los comandos
windmove-swap-states-left/right/up/downintercambian los buffers de las ventanas según la dirección- En ese caso, el foco se mueve junto con el buffer
- También se puede eliminar una ventana en una dirección específica con la familia
windmove-delete-*, pero el texto trata más abajo otros métodos - En entornos con WM en mosaico, se puede integrar el movimiento entre ventanas internas de Emacs y ventanas del SO usando las mismas teclas
- Como ejemplo de integración entre Emacs e i3wm está i3 integration
- Un ejemplo de configuración para qtile se puede ver en emacs-wm.el
Delegar las ventanas de Emacs a ventanas del SO
- frames-only-mode abre todos los buffers en frames nuevos, no en ventanas de Emacs, para que los gestione el gestor de ventanas del SO
- Este enfoque permite tratar los buffers de Emacs al mismo nivel que las ventanas del SO y administrarlos a ambos con las mismas teclas
- Herramientas como Avy,
winum,ace-windowyscroll-other-windowpueden aplicarse no solo a ventanas, sino también a frames completos - Algunos comandos de Emacs asumen que pueden dividir frames a voluntad, por lo que pueden aparecer casos excepcionales
- Esa tendencia se ve especialmente en comandos de org-mode
- No hay experiencia usando
frames-only-modeen compositores Wayland
Seleccionar al instante con números y pistas
- winum muestra números de ventana en la línea de modo y permite seleccionar ventanas por número
- Mientras
other-windowse acerca a O(n) ywindmovedepende de la disposición espacial,winumse acerca a un acceso O(1) cuando conoces el número - Si invocas el comando de selección con un argumento prefix negativo, elimina esa ventana
- Cuando el minibúfer está activo, siempre recibe el número 0
- Funciona a través de frames de Emacs
- Mientras
- La tecla predeterminada
C-x w <n>puede resultar larga, por lo que hay ejemplos de configuración que usan deM-0aM-9para seleccionar ventanas - ace-window se presenta como una herramienta potente para controlar ventanas de Emacs desde el teclado
- Muestra pistas sobre cada ventana y permite seleccionarla presionando la tecla correspondiente
- Al activar
ace-window-display-mode, las pistas pueden mostrarse de forma continua en la línea de modo, como con winum - Al presionar
?, se abre el menú de dispatch
- La fortaleza de
ace-windowestá menos en la selección simple y más en elegir una ventana y luego ejecutar una acción- Eliminar una ventana
- Mover e intercambiar ventanas
- Dividir ventanas
- Mostrar un búfer específico
- Aplicar una operación a otra ventana sin salir de la ventana seleccionada
Mouse y transformación de layouts
- En Emacs, el mouse encaja de forma natural para seleccionar ventanas, ajustar tamaños, usar menús contextuales y hacer drag and drop
context-menu-modey la barra de menú aumentan la capacidad de descubrimiento
- Si ya quitaste las manos del teclado, manejar Emacs con el mouse puede ser el camino de menor resistencia
- También hay operaciones que pueden hacerse con gestos del mouse
- Divisiones verticales y horizontales del frame
- Eliminar ventanas
- Recorrer búferes dentro de una ventana
- Intercambiar ventanas hacia la derecha o la izquierda
- Alternar entre los dos últimos búferes en una ventana
- Al configurar
mouse-autoselect-window, se puede activar el comportamiento focus-follows-mouse - transpose-frame ofrece comandos para rotar o voltear el layout de ventanas de un frame
rotate-frame,flip-frameyflop-framese consideran comandos útiles con frecuencia- Se evalúa que
transpose-frameen sí, al transponer respecto de la diagonal principal, tiene poca utilidad práctica
window-prefix-map y el árbol de ventanas
window-prefix-mapes el conjunto de comandos de gestión de ventanas asociado a la tecla predeterminadaC-x wde Emacssplit-root-window-rightysplit-root-window-belowdividen la ventana raíz del frame- Están vinculados a
C-x w 3yC-x w 2, respectivamente - A diferencia de los comandos de división normales, que subdividen más la ventana actual, son útiles para crear un espacio de trabajo separado
- Están vinculados a
- Las ventanas de Emacs se organizan en una estructura de árbol
- Las ventanas reales son nodos hoja
- Una división convierte una hoja en el nodo padre de dos ventanas
- Es similar a la disposición de gestores de ventanas en mosaico manuales como i3 o bspwm
tab-window-detachytear-off-windowmueven la ventana actual a una pestaña nueva o a un frame nuevo- Sus teclas predeterminadas,
C-x w ^ tyC-x w ^ f, respectivamente, se consideran largas - Pueden reemplazarse con acciones de dispatch de
ace-windowo bindings de mouse
- Sus teclas predeterminadas,
other-window-prefix: cambiar dónde se muestra el siguiente comando
other-window-prefixes un comando integrado vinculado aC-x 4 4, y hace que el búfer que muestra el siguiente comando aparezca en la siguiente ventana- Este comando separa los comandos que muestran búferes, como abrir archivos, cambiar de búfer o saltar a un marcador, de la selección de la ventana de destino
- Reduce la necesidad de memorizar cada vez familias de comandos como
find-file-other-window,find-file-other-tabofind-file-other-frame - Puedes anteponer el prefix a comandos básicos como
find-file,find-file-read-onlyoswitch-to-bufferpara cambiar solo la ubicación de visualización
- Reduce la necesidad de memorizar cada vez familias de comandos como
- En el ejemplo de Forge, permite evitar con
other-window-prefixel problema de que la ventana actual sea reemplazada al presionarRETen la lista de issues - También ofrece un comportamiento uniforme cuando cada paquete —como Magit, Org mode, Notmuch, Elfeed o EWW— tiene una forma distinta de “abrir en otra ventana”
- También hay prefixes relacionados
same-window-prefixfuerza que el búfer del siguiente comando se muestre en la ventana actualother-frame-prefixhace que se abra en un frame nuevoother-tab-prefixhace que se abra en una pestaña nueva
Guardar y restaurar configuraciones de ventanas
window-configuration-to-registeres el comando predeterminado que guarda la configuración actual de ventanas en un registro, y su tecla predeterminada esC-x r wjump-to-registerrestaura la configuración guardada, y su tecla predeterminada esC-x r j- A nivel de Elisp, se puede guardar el resultado de
current-window-configurationen una variable y aplicarlo conset-window-configuration- Si se guarda en disco mediante métodos como
prin1,persistomultisession, se convierte en la semilla de una función para restaurar entre sesiones - Sin embargo, que también se restaure la posición del cursor en cada ventana puede ser un comportamiento normalmente no deseado
- Si se guarda en disco mediante métodos como
- También hay opciones tipo “oops” que acumulan automáticamente configuraciones anteriores
winner-mode: cuando no se usan pestañas, permite deshacer o rehacer cambios en la configuración de ventanas conwinner-undoywinner-redotab-bar-history-mode: proporciona una pila de historial separada por pestañaundelete-frame-modeytab-undo: recuperan frames o pestañas cerrados por accidente
- Usar
winner-undocomo forma de arreglar cada vez que Emacs muestra un búfer en un lugar equivocado es más bien una solución provisoria- El problema de fondo es que las reglas de visualización de búferes no están configuradas como se desea
Optimizar para dos ventanas entre las que se alterna con frecuencia
- En el trabajo real, aunque haya varias ventanas en pantalla, la mayoría de las veces se alterna con frecuencia entre dos ventanas
- Código y REPL
- Código y Grep
- Texto y notas
- Lista y elemento
- Las demás ventanas pueden ser áreas de referencia que se miran con frecuencia pero a las que casi no se cambia, como documentación, información de depuración, logs, salida de comandos, índice, explorador de archivos o vista previa
- Hay un ejemplo de
other-window-mruque usaget-mru-windowpara cambiar a la ventana usada más recientemente- Aunque la segunda ventana se elija con el mouse,
ace-window,winumo cualquier otro método, después se puede ir y volver rápidamente
- Aunque la segunda ventana se elija con el mouse,
- También hay formas de mejorar
other-windowen sí- Hacer que se divida automáticamente si solo hay una ventana
- Recorrer ventanas en orden de uso reciente, como switchy-window
- Hacer que, como
other-window-alternating, la dirección se invierta cada vez que no sea una llamada consecutiva, para que alternar entre dos ventanas resulte natural
Extender ace-window con ejecución de comandos
ace-windowpermite usar por separado solo la etapa de selección de una ventana específica medianteaw-select- Si se realiza la operación deseada sobre la ventana devuelta por
aw-select, se puede crear el patrón “seleccionar ventana → ejecutar operación → conservar la ventana original” - Los comandos de ejemplo son los siguientes
ace-tear-off-window: separa en un frame nuevo la ventana elegida conace-windowace-tab-window-detach: mueve la ventana elegida a una pestaña nueva
ace-window-one-commandpermite ejecutar un único comando arbitrario en la ventana seleccionada- Primero se elige una ventana con
ace-window - Lee una secuencia de teclas y ejecuta el comando correspondiente
- Puede aplicar una operación a otra ventana sin cambiar la ventana seleccionada originalmente
- Primero se elige una ventana con
ace-window-prefixfunciona como una versión más directa deother-window-prefix- Permite elegir directamente con
ace-windowla ventana de destino del búfer que mostrará el siguiente comando - Si hace falta, se puede crear una ventana nueva al vuelo con una acción de
ace-windowy mostrarlo allí - El binding de teclas propuesto es
C-x 4 o
- Permite elegir directamente con
¿Es imprescindible cambiar de ventana?
- El objetivo de cambiar de ventana se divide, en términos generales, en dos casos
- Switch and stay: seguir editando o trabajando en la ventana de destino
- Switch and return: hacer algo breve, como desplazarse, buscar, copiar o borrar, y volver a la ubicación original
- En el primer caso, Avy puede combinar el cambio de ventana y el movimiento del cursor en una sola acción
avy-goto-char-timertrata varias ventanas y frames de Emacs visibles en pantalla como un único conjunto de candidatos para saltar- Al saltar a una cadena específica o a una posición de carácter, la ventana también cambia automáticamente
- Si Avy no atraviesa ventanas y frames, hay que revisar la configuración de
avy-all-windows
pop-global-markes un medio para volver a una ubicación anterior y, si hace falta, también puede ocurrir un cambio de ventana- De forma predeterminada cambia el buffer en la ventana actual, por lo que existe un advice para hacer que use
pop-to-buffer
- De forma predeterminada cambia el buffer en la ventana actual, por lo que existe un advice para hacer que use
- En el segundo caso, se puede automatizar el flujo “cambiar → actuar → volver” envolviéndolo en un comando
ace-window-one-commandes una forma genérica de hacerlo- Las acciones específicas pueden convertirse en comandos dedicados o macros
Desplazamiento, búsqueda y cambio de buffer en otra ventana
scroll-other-windowyscroll-other-window-downdesplazan otra ventana sin salir de la ventana actual- El destino predeterminado es la “siguiente ventana” en sentido horario desde la ventana actual
- Si hay tres o más ventanas, puede desplazarse otra ventana en lugar de la ventana de referencia esperada
- Se puede configurar
other-window-scroll-defaultpara cambiar las reglas de selección del destino de desplazamiento- Si se usa
get-lru-window, se desplaza la ventana usada menos recientemente - Si se usa
get-mru-window, se puede tomar como destino la ventana usada recientemente
- Si se usa
- Al configurar
other-window-scroll-buffer, se puede designar como destino de desplazamiento la ventana que muestra un buffer específico- Se trata principalmente como una opción útil para autores de paquetes
- El ejemplo de
isearch-other-windowinicia una búsqueda en la ventana destino del desplazamiento y, al terminar la búsqueda, vuelve a la ventana original- Hay un ejemplo de uso conjunto de un shell y un buffer de Man
next-buffer,previous-bufferyswitch-to-buffertambién pueden extenderse combinando un argumento prefix conother-window-for-scrollingpara ejecutarlos en otra ventana- Si se crea un keymap para
repeat-mode, conn,pybse puede recorrer de forma continua o seleccionar buffers de otra ventana
- Si se crea un keymap para
master-mode, scroll-all-mode, with-other-window
master-modedesigna el buffer actual como “master” y otro buffer como “slave”, lo que permite enviar acciones al buffer slave sin abandonar la posición actual- En general se evalúa como una alternativa menos transparente que el método anterior de
other-window-scroll-default - Mediante
master-saysse pueden crear teclas que ejecuten acciones arbitrarias, comorecenter, en el buffer slave
- En general se evalúa como una alternativa menos transparente que el método anterior de
scroll-all-modeagrupa el comportamiento de desplazamiento de todas las ventanas dentro del frame- Es útil cuando se quiere ver varias vistas de ventana sincronizadas
- La macro
with-other-windowes un helper de Elisp que ejecuta el código del cuerpo en la ventana elegida porother-window-for-scrolling- Permite crear fácilmente comandos como
isearch-other-windoweisearch-other-window-backwards - Se usa como contraparte en Elisp del
ace-window-one-commandinteractivo
- Permite crear fácilmente comandos como
Estrategias para reducir la cantidad de ventanas
- Las UI de editores modernos suelen converger hacia una ventana principal, una barra de pestañas superior, una barra lateral izquierda de directorios o índice, un panel derecho opcional y una terminal inferior
- En Emacs también se puede crear ese tipo de layout, pero también es posible concentrar la pantalla en un solo buffer y reemplazar el cambio de ventana por cambios de buffer
- Si se relaja la restricción hasta permitir dos ventanas, se conserva la mayor parte de la simplicidad y se puede usar la segunda ventana como referencia en vivo
- La configuración predeterminada de Emacs soporta bastante bien este patrón mediante comandos como
scroll-other-window
- La configuración predeterminada de Emacs soporta bastante bien este patrón mediante comandos como
- También existe la estrategia de ver las ventanas solo como contenedores de texto e ignorarlas
- Saltar directamente con Avy a una posición de texto en pantalla
- Volver sobre ubicaciones anteriores con
mark-ringyglobal-mark-ring - dogears puede ofrecer una UI de retorno más detallada
- Para fijar ubicaciones manualmente se pueden usar
point-to-registeryjump-to-register; para registros más permanentes,bookmark-setybookmark-jump
Reglas de visualización automática y gestión de popups
display-buffer-alistes una variable que, cuando código Elisp intenta mostrar un buffer, empareja buffers con reglas para decidir cómo mostrarlos- En teoría, si se crean reglas de tamaño, posición, rol y foco para cada tipo de buffer que se ve a diario, se resuelve una parte considerable de la gestión de ventanas
- El problema es el costo de configuración
- Predicados de buffers y modos
- Tipos de ventana y slots
- Funciones action de display-buffer
- Parámetros de ventana
- Es difícil expresar con facilidad una intención simple como “no toques mi disposición de ventanas”
- También hay herramientas auxiliares
- Shackle cubre la complejidad de
display-buffer-alisty ofrece una interfaz sencilla en Elisp - Doom Emacs ofrece comandos de conveniencia como
set-popup-rule!
- Shackle cubre la complejidad de
- Popwin y Popper parten de la observación de que no todos los buffers son iguales
- Distinguen entre buffers principales de trabajo y buffers popup temporales
- Muestran documentación, shell, estado de tareas, resultados de compilación, resultados de búsqueda, mensajes, etc. en pequeñas ventanas auxiliares, y permiten cerrarlas o recorrerlas fácilmente
- Popper se centra en subir y bajar con una sola tecla los buffers popup designados
- Popwin es una implementación más antigua y abarcadora, pero también agrupa su propia configuración de
display-buffer - Si solo se quiere abrir y cerrar rápidamente un shell, shell-pop o vterm-toggle pueden ser suficientes
La pieza faltante: manipulación del árbol de ventanas
- Emacs representa las ventanas dentro de un frame como un árbol, pero la mayoría de los comandos de usuario actúan mirando solo la posición espacial, no la estructura del árbol
- Por esta discrepancia, al dividir o borrar pueden aparecer comportamientos distintos de los esperados, o pueden surgir restricciones en las estructuras de división que es posible crear
- Si existiera un paquete hipotético como
window-tree, podría permitir la manipulación a nivel de nodos internos- Dividir, transponer o reflejar solo una parte del frame
- Seleccionar varias ventanas como una composición parcial
- Pasar la parte seleccionada a una pestaña o a un frame
- Duplicar o guardar una composición parcial
- Proteger una branch específica del árbol frente a comandos de la familia
display-buffer
- También hay elementos de Elisp que ya existen
window-treedevuelve el árbol en síframe-root-windowdevuelve la raíz- Existen
window-parent,window-childywindow-*-sibling - Se puede recorrer con
walk-window-treeywalk-windows
- Las carencias también son claras
- No hay funciones básicas para transformar el árbol más allá de split/delete generales
- No existe el concepto de seleccionar una ventana interna, por lo que hay que simularlo mediante la UI
La pieza que falta: integración con gestores de ventanas en mosaico
- El modelo de árbol de ventanas de Emacs es muy similar al de gestores de ventanas en mosaico manuales como i3 o bspwm
- Si usas Emacs dentro de i3, bspwm o tmux, es natural querer moverte entre ventanas internas y externas de Emacs con los mismos atajos de teclado
- Entre los casos existentes están i3-integration de Pavel Korytov y emacs-wm.el para qtile
- Una interfaz de integración más limpia necesita los siguientes elementos
- El gestor de ventanas debe identificar la clase de la ventana activa y ofrecer movimiento y manipulación de ventanas de forma programática
- El método de comunicación puede ser comandos de shell, sockets, IPC basado en servidor, D-Bus en Linux, etc.
- Del lado de Emacs hace falta una interfaz independiente del método de comunicación que imite las operaciones propias de un gestor de ventanas
- Al cambiar de ventana del SO, se debe verificar si la ventana activa es Emacs y, si es necesario, Emacs debe encargarse de la operación dentro del frame interno
Conclusión
- La gestión de ventanas en Emacs ofrece opciones en distintos niveles, desde
other-windowhastaace-window, Avy, Popper ydisplay-buffer-alist - No hace falta usar todos los métodos; como hay muchas alternativas para resolver el mismo problema, puedes elegir una y omitir las demás
- Es probable que las herramientas integradas básicas se mantengan por mucho tiempo, pero el estado de los paquetes de terceros puede cambiar según su desarrollo, abandono u orfandad
- La gestión de ventanas en Emacs se parece más a una estructura abierta que ofrece ingredientes y recetas que a un sistema fijo y complejo
- Con poca configuración ya es posible tener una experiencia básica, y con algunas combinaciones y ajustes en Elisp se puede crear un flujo de trabajo mucho más personalizado
1 comentarios
Opiniones en Hacker News
El artículo es bueno, y las explicaciones y guías también son excelentes. A veces las ventanas divididas en partes iguales no alcanzan, así que puse la siguiente función en
init.ely la vinculé aC-x 7para ajustar la ventana actual y su ventana pareja a un tamaño vertical de 70%/30%La orientación horizontal también la manejo de la misma forma con una vinculación a
C-x 8(defun partial-size-window ()"Set the two split windows to 70% and 30% vertically."(interactive)(let ((size (- (truncate (* .70 (frame-height))) (window-height))))(if (> size 0)(enlarge-window size))))(defun partial-size-window-h ()"Set the two split windows to 70% and 30% horizontally."(interactive)(let ((size (- (truncate (* .70 (frame-width))) (window-width))))(if (> size 0)(enlarge-window-horizontally size))))Fue una buena exploración. Ahora estoy en el móvil y no puedo probarlo de inmediato, pero tengo muchas ganas de probar ace-window,
ace-window-display-modeyframes-only-modeSi soy honesto, aunque llevo unos 40 años usando Emacs, en general solo he usado
next-window, crear una ventana nueva abajo o al lado, y apoyarme entmuxcuando trabajo en servidores remotosC-x 1/2/3yC-x ofueron casi todo lo que uséAun así, la verdad es que es bastante potente y suficiente para mi uso; ojalá varios gestores de ventanas en mosaico fueran más o menos así
C-x oes un poco engorroso, así que tengo la configuración de abajo, pero no siento que estos paquetes adicionales sean imprescindibles(global-set-key (kbd "M-o") #'other-window)Aun así, está bueno tener un artículo de referencia tan profundo, y los textos de Karthik siempre son educativos e interesantes
Para agregar a la nota de Karthink sobre
windmove-mode, se puede configurarwindmove-default-keybindingspara moverse entre ventanas conCtrl-<flecha>(windmove-default-keybindings 'control)Lo tengo en mi configuración y también lo incluí en un starter kit minimalista; de verdad es un cambio radical
https://codeberg.org/ashton314/emacs-bedrock
.emacsy resulta que uso exactamente lo mismo. Lo prefiero porque requiere una tecla menos queC-x Oy es más flexibleTengo configurado Emacs para que no divida un frame en varias ventanas. Es parecido a cómo un navegador web no divide una ventana del navegador en varios viewports
Mi Emacs tampoco crea un segundo frame. La forma de implementarlo ha cambiado año tras año a medida que los métodos antiguos dejaron de funcionar
Con el método actual, en ciertas situaciones sí se divide el frame, por ejemplo cuando Emacs muestra el búfer
*Completions*, pero, si no recuerdo mal, no tuve que llamar manualmente adelete-windowpara eliminar la segunda ventana y siempre desapareció solaYo uso bastante los frames con varias ventanas. En macOS reciente y Emacs reciente, a veces un frame con varias ventanas parece quedarse colgado y no responde al teclado ni al trackpad, incluso después de presionar
Ctrl-Gvarias vecesPero crear un frame nuevo con
C-x 5 2sí funcionaba, y al volver al frame colgado podía cerrarlo conC-x 5 0El artículo es muy profundo, y me gustó mucho que el autor se haya tomado el tiempo de hacer buenos diagramas
Buen artículo; quiero compartir un paquete excelente para usar junto con esto. Para mí, zygospore fue una herramienta indispensable
“zygospore permite deshacer
C-x 1(delete-other-window) volviendo a presionarC-x 1”https://github.com/LouisKottmann/zygospore.el
https://www.emacswiki.org/emacs/WinnerMode
undoAunque sería raro,
C-u C-x 1parece coherenteSi el autor ve esto, quiero decirle que me alegró la pequeña mención a Acme editor
Cuando invoco
hledger-balance-sheet, quiero que no reemplace el.hledger.journalexistente, sino que se abra a la derecha con un 30% de anchoMe gustaría que
.hledger.journalsiguiera abierto a la izquierda y permaneciera seleccionado