Esa ventanita que flota sobre tu Emacs: los child-frames (y por qué solo existen en la GUI)


14 de junio de 2026

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:

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:

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

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario