YouTube Odysee

§Introducción

Hay un meme en el internet que pretende burlarse de la dificultad de utilizar vim (vi / nvim). Y este reza algo así:

«Ya abrí vim. ¿Ahora cómo salgo?»

Lo mismo podría decirse de Emacs:

«Ya abrí emacs. ¿Ahora cómo hago esto?»

§Utilidad

Broma aparte, esto puede suceder también en Emacs, sobre todo si estamos utilizándolo en la terminal (TTY) o si tu manejador de ventanas no pone botones de cierre en sus ventanas. Por ello es importante que sepas cómo salir de Emacs, en caso de que el botón de cerrar de la ventana no esté disponible (por cualquier motivo).

También es importante saber cómo guardar tu archivo, una vez que hayas realizado los cambios que querías.

Hoy explicaremos un poco esto.

§Interfaz de usuario

Anteriormente mostré cuál es la apariencia de una ventana de Emacs.

Ahora veremos cuáles son sus elementos.

§Barra de título

Esta en realidad no es parte de Emacs, sino que es un elemento gráfico que agrega el manejador de ventanas que estés utilizando. Algunos manejadores de ventanas no agregan esta barra, de modo que es posible que se vea más parecido a como se ve en mi pantalla al demostrarles.

En Gnome, la barra de título se encuentra en la parte superior de la ventana, y contiene un botón para cerrar la ventana (de Gnome).

emacs-title-bar.png

Cabe aclarar que en la terminal, Emacs no tiene barra de título.

§Barra de menú

Como muchas aplicaciones modernas (o no tanto), Emacs provee una barra de menú. Esta se irá actualizando con distintos menús pertenecientes a los modos que se activen o desactiven en el buffer actual.

La apariencia de la barra de menú es muy similar a las de otras aplicaciones.

emacs-menu-bar.png

§Barra de herramientas

Y no podía faltar la barra de herramientas. Al igual que la barra de menú, ésta se actualizará a la par de los modos activos para el buffer actual.

emacs-tool-bar.png

Recuerden que en la terminal Emacs no mostrará ninguna barra de herramientas.

§Barra de desplazamiento

La barra de desplazamiento muestra un elemento de interfaz para poder arrastrar con el puntero y cambiar la porción del buffer actual que se despliega en la ventana (de Emacs).

emacs-scroll-bar.png

§Línea de modo (mode-line)

La línea de modo es el equivalente aproximado a lo que en otras aplicaciones sería la barra de estatus (status bar). En ella se despliega información del buffer actual, así como otra información de Emacs. Ésta se actualiza con cada buffer y también dependiendo de las opciones del usuario.

emacs-mode-line.png

§Área de eco (echo-area) o minibuffer

Es ese renglón que parece estar vacío al fondo de la pantalla. Ahí se despliegan los mensajes de Emacs y también se utiliza para ingresar información que Emacs requiera para su funcionamiento.

emacs-echo-area.png

§Marco de Emacs

Un marco (frame) en Emacs hace referencia a lo que desde el manejador de ventanas se conocería como una ventana. Recordemos que Emacs se creó cuando aún no existían estas interfaces gráficas, o no eran muy populares. De modo que diseñó su propia implementación de ventanas dentro de la aplicación.

Cuando estas interfaces gráficas (o de terminal, como tmux) para múltiples ventanas fueron creadas, Emacs ya tenía el concepto de «ventanas» dentro de él mismo, así que para referirse al espacio creado por la interfaz de usuario externa, decidieron llamarle «marco».

Técnicamente hablando el marco no es lo mismo que la ventana del manejador de ventanas, ya que Emacs no tiene acceso a la barra de título (aunque puede customizar el título en sí, y recibe eventos desde ella). Para Emacs, lo que sí es el marco sería todo lo que vimos de su interfaz gráfica, menos la barra de título (que, comoquiera, algunos manejadores de ventanas no utilizan).

emacs-frame.png

§Ventana de Emacs

La ventana de Emacs es el área en la que Emacs despliega el contenido del buffer y la mode-line. Éstas se encuentran dentro del marco, y puede crear múltiples ventanas dentro de un mismo marco.

emacs-window.png

§Operaciones básicas

Ahora que ya estás ligeramente familiarizado con la interfaz de Emacs, podemos avanzar con las operaciones básicas.

§Operaciones básicas de Emacs resumidas

Las operaciones básicas son muy sencillas:

Operación Secuencias de teclado Comando
Abrir archivo C-x C-f find-file
Guardar archivo C-x C-s save-buffer
Guardar como C-x C-w write-file
Cerrar archivo C-x k kill-buffer
Salir de Emacs C-x C-c save-buffers-kill-terminal

§Ahora sí: ¿qué rayos es esto?

Emacs —como ya lo había explicado en el video anterior— surge en una época en la que el mouse (o «ratón») no es muy común, sino que la herramienta más utilizada era el teclado.

Tampoco en aquella época se había establecido lo que hoy conocemos como una interfaz de acceso de usuario estándar (CUA, por sus siglas en inglés: Common User Access), de modo que cada aplicación solía definir la propias, y frecuentemente solían ser bastante peculiares.

§¿Qué son los key chords de Emacs?

Son secuencias de combinaciones de teclas.

Por ejemplo, para abrir un archivo está definida por defecto la siguiente key-chord: C-x C-f, que sería presionar la tecla CTRL y la tecla X (presiona CTRL, mantenla presionada y entonces presiona X, libera ambas), y luego CTRL y F. De hecho la mayoría de los usuarios presionamos CTRL y la dejamos presionada, luego pulsamos (presionar y liberar) X y pulsamos F, y finalmente liberamos CTRL. Suena bastante complicado, pero no lo es tanto con un poco de práctica.

Algunos key-chords pueden ser bastante largos, aunque suelen simplificarse al eliminar en ciertos puntos la necesidad de utilizar los modificadores: CTRL, ALT (META), SHIFT, etcétera.

§Abrir un archivo

Para abrir un archivo, como ya explicamos, se utiliza la secuencia C-x C-f. Esto crea un prompt en el fondo de la pantalla (o ventana) que dice: Find file: ~/ , con el prompt al final (esa área se llama «área de eco» o «minibuffer»). La parte después de los dos puntos es editable, y se espera que escribas la ruta a un archivo que quieras abrir.

También puedes hacer M-x find-file RET y tendrá el mismo efecto que C-x C-f. Esta opción sería META (o ALT en la mayoría de los teclados) junto con X, que te mostrará un prompt en el minibuffer ahí teclearás find-file y finalmente presionarás RET (o enter, intro, return). Definitivamente, C-x C-f es más sencillo.

§Guardar un archivo

Para guardar el contenido del buffer en un archivo, utiliza la secuencia de teclas C-x C-s. Si el buffer está ligado a un archivo, lo guardará en éste sin más problemas. Pero si el buffer no está ligado a un archivo, te mostrará un prompt similar al utilizado para abrir un archivo, pero este dirá: File to save in: ~/ («Archivo en el cual guardar»).

Alternativamente, puedes utilizar M-x save-buffer RET. Con los mismos efectos que la secuencia más corta.

§Guardar como

Si abres un archivo, pero quieres crear una copia con otro nombre y trabajar en la copia guardada, puedes teclear lo siguiente: C-x C-w. Esto siempre te mostrará el prompt para elegir el archivo en el cual quieres guardar el contenido del buffer.

Otra opción para lo mismo sería M-x write-file RET.

§Cerrar un archivo

Cuando hayas terminado de editar el archivo que tienes abierto en el buffer y desplegado en la ventana, querrás cerrar el buffer, o, en el lenguaje de Emacs, «matarlo» (hacer que termine su ciclo de vida). Para ello puedes teclear lo siguiente: C-x k (ojo, que aquí la ’k’ no necesita de CTRL).

En este caso, te preguntará cuál buffer quieres cerrar, dándote la oportunidad de auto completar al presionar TAB dos veces (igual que con los archivos). Pero si dejas el prompt en blanco, seleccionará por defecto el buffer actual. Una vez seleccionado el buffer, solo bastará presionar RET.

En caso de que el contenido del buffer se haya modificado desde la última vez que salvaste su contenido en un archivo, te avisará que el buffer ha sido modificado, y te preguntará si realmente quieres cerrarlo, dándote tres opciones: yes/no/save and then kill («sí/no/guardar y entonces matar»). De nuevo puedes auto completar la respuesta que darás utilizando TAB o puedes teclear la respuesta por tu propia cuenta.

M-x kill-buffer RET es la opción por comandos.

§Salir de Emacs

Para salir de Emacs (y no quedarte atrapado como con vim), puedes utilizar la siguiente secuencia: C-x C-c.

Si tienes archivos que no hayas guardados, te preguntará si quieres guardarlos. Las opciones para responder son más complejas que un simple «sí» o «no»: y, n, !, ., q, C-r, C-f, d or C-h. Te recomiendo que presiones C-h para que te muestre una ventana con la explicación de cada opción.

En esa ventana te muestra más opciones, una de las cuales es C-g, que es la combinación de teclas para cancelar lo que estés haciendo (en general es así en Emacs).

La opción para realizarlo por comandos es M-x kill-emacs RET. Si sabes (o supones) que hay buffers sin guardar, también puedes utilizar M-x save-buffers-kill-emacs RET. Éste último comando, hace casi lo mismo que save-buffers-kill-terminal, pero las diferencias son técnicas y no muy importantes en este momento.

¡Al fin has logrado salir de Emacs como todo un experto!

§¿Qué es eso de M-x?

M-x es la secuencia de teclas para el comando execute-extended-command, que te permite ingresar comandos de Emacs para su ejecución interactiva. (Ya veremos más de eso más adelante).

§¿Por qué no explico cómo utilizar el menú o la barra de herramientas?

Sencillo: Yo no los utilizo. Eso no significa que tú no los debas utilizar.

Como no lo utilizo, no lo conozco, y creo que sería deshonesto de mi parte pretender enseñar algo que yo mismo desconozco. Otra cosa sería si hiciera un video explorando como neófito algunas características, pero ese momento no ha llegado, y para el menú, no sé si llegue en algún momento.

§¿Entonces no lo debemos utilizar?

En mi opinión (y remarco estas palabras), Emacs es más eficiente si se aprende a utilizar sólo con el teclado. Si tu opinión es distinta, ¡adelante!, ¡úsalo!

Si Emacs debiera ser utilizado sin mouse, sin barra de menú y sin barra de herramientas, éstas no existirían en Emacs.

Por otro lado, para alguien recién llegado a Emacs (como lo fui alguna vez) el menú puede ser una buena herramienta para descubrir la funcionalidad de Emacs (además de poder aprender las combinaciones de teclado).

Así que yo no lo voy a enseñar, pero eso no significa que no lo puedas utilizar. Además, no es como que utilizar una barra de menú sea para usuarios avanzados (sólo falta un poco de curiosidad).

§«¡Eso es todo, amigos!»

Al menos por esta ocasión.

Puedes acceder a mis notas en mi repositorio: https://git.sr.ht/~abarocio80/videos/tree/master/item/content/0x0002--elementos-de-la-interfaz-de-usuario-y-operaciones-basicas.org

O en mi página: https://barocio.cc/videos/0x0002--elementos-de-la-interfaz-de-usuario-y-operaciones-basicas.html

Si te interesa este tipo de contenido, suscríbete al canal y activa las notificaciones para que (tarde o temprano) te enteres de los nuevos videos que vaya subiendo.

Si te interesa, también puedes visitar mi página: https://barocio.cc/, donde pongo las notas de mis videos y otro contenido de mi interés.