Esa ventanita que flota sobre tu Emacs: los child-frames (y por qué solo existen en la GUI)
La escena
Estás escribiendo tranquilo y, zas, aparece un recuadro flotando encima del texto: la lista de autocompletado, o una ayuda de atajos, o un panel con información. No te ha partido la ventana en dos como hace Emacs normalmente; está por encima, como un popup de cualquier programa moderno. Y piensas: "¿desde cuándo Emacs hace esto?".
Desde hace tiempo, resulta. Pero es de esas features que no anuncian y descubres por accidente.
Qué es un child-frame
Emacs siempre ha tenido frames (lo que el resto del mundo llama "ventanas del sistema operativo") y windows (las subdivisiones internas, los paneles en los que parte la pantalla). Lo clásico: un frame partido en windows, en mosaico, sin solaparse nunca.
Un child-frame rompe esa norma. Es un frame de pleno derecho —puede contener cualquier buffer, comportarse como cualquier ventana— pero con una particularidad: está anclado a otro frame como hijo, y se dibuja flotando encima de él, posicionado al píxel. O sea: una mini-ventana superpuesta, colocada con precisión donde haga falta (junto al cursor, centrada, en una esquina).
Llegaron en Emacs 26, allá por
2018. Son relativamente recientes para lo viejo que es Emacs —de ahí que
a mucha gente con años de uso le suenen a nuevo—. Técnicamente, un
child-frame no es más que un frame normal cuyo parámetro
parent-frame apunta a otro. Esa línea cambia todo: deja de
ser una ventana del SO independiente y pasa a ser un satélite flotante
del frame padre.
Para qué sirven (y quién los usa)
La gracia es no partirte el layout. Antes, un popup en Emacs te robaba espacio dividiendo la pantalla; al cerrarlo, tu disposición de ventanas quedaba tocada. Con child-frames, el popup flota: aparece encima, haces lo tuyo, desaparece, y tu layout no se ha enterado.
Hay una librería, posframe, que es la base sobre la que
casi todos construyen. Y encima de ella, un montón de paquetes que
seguramente ya usas sin saber que flotan gracias a esto:
- El autocompletado elegante (p. ej.
company-boxocorfucon su popup de info): la lista de candidatos que sale junto al cursor. - La ayuda de atajos
(
which-keyen su variante posframe): ese panel que te recuerda las teclas. - Buscadores y menús centrados (variantes "posframe" de los frameworks de completado): la cajita de búsqueda flotando en medio de la pantalla.
Todos comparten el mismo truco: un child-frame que aparece, hace su papel y se va.
Cómo se quitan (la tecla mágica)
Por si alguno se queda colgado y te agobia: la tecla universal de
Emacs para "cancela lo que sea" es
C-g (Ctrl+G). Un toque
suele bastar; si queda algo, otro C-g, o ESC
un par de veces. No tocan tu fichero ni tu disposición: aparecen, los
espantas, y a seguir.
El detalle que lo explica todo: GUI sí, terminal no
Aquí está lo bonito, y la pregunta que cierra el círculo: los child-frames solo existen en la versión gráfica de Emacs. En la terminal (TUI), no.
El motivo es físico, no un capricho. Un child-frame es una mini-ventana posicionada al píxel y dibujada encima de otra. Eso exige un sistema gráfico que sepa pintar capas superpuestas. Una terminal no es eso: es una rejilla de caracteres, filas y columnas, sin píxeles ni capas. No puede pintar nada "flotando". Así que la feature, sencillamente, no aplica.
¿Y entonces en terminal te quedas sin esas comodidades? No. Los mismos paquetes se adaptan y lo dibujan plano:
- El autocompletado que flota en GUI cae a un desplegable en línea, pegado al cursor.
- La ayuda de atajos sale en una ventana abajo, no flotando.
Misma función, distinto dibujo: flotando en la GUI, aplanado en la terminal. Y lo más curioso si trabajas como yo —un daemon de Emacs al que te conectas a la vez por una ventana gráfica y por terminales—: es el mismo Emacs, la misma sesión, pintándose de dos maneras según por dónde lo mires. Por la GUI ves los flotantes; por una terminal, todo plano. No cambia el motor, cambia el lienzo.
La moraleja
Emacs lleva medio siglo acumulando capacidades en silencio. Que no conozcas una no significa que sea nueva o exótica: significa que aún te queda capó por abrir.
Los child-frames son justo eso: una pieza potente, discreta, que sostiene media experiencia "moderna" de Emacs sin presentarse. La próxima vez que te flote un recuadro encima del texto, ya sabes que no es brujería —es un frame hijo haciendo su trabajo— y que, si te asomas por una terminal, el mismo truco se dibuja en plano. Dos lienzos, un solo editor.
— doomguru
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario