Notxor tiene un blog

Defenestrando la vida


Herramientas para el sistema

Como vengo diciendo en esta introducción a Emacs, nuestro editor viene cargado con un arsenal de herramientas que nos van a facilitar el trabajo con muchos tipos de ficheros o incluso acceder al sistema operativo sobre el que corre sin necesidad de salir de nuestro entorno de trabajo. Vamos a ver algunos, los más socorridos, y por último introduciremos la manera de extender la funcionalidad de Emacs.

Dired

Una de las herramientas que viene cargada en una instalación por defecto de Emacs es Dired, que como su nombre indica es un «editor de directorios». En realidad hace muchas más cosas que editar directorios. Es una auténtica gozada cuando le coges el tranquillo. Sin embargo, como seguramente no te convenceré con buenas palabras, vamos a ver cómo sería trabajar con Dired en una sesión y luego ya me dirás si no es así.

Pulsa C-x d y cuando pregunte ve hasta el directorio donde guardaste nuestro primer fichero org: primer-texto.org. Te aparecerá una lista de ficheros en ese directorio. Quizá sólo tengas ese en él, no importa. Vamos a ver cómo podemos aprovechar Dired para trabajar sobre los ficheros de nuestro disco. Por ejemplo:

  1. Pulsa la tecla +. Verás que en el área de prompt aparece el mensaje Create directory, seguido del path que tiene abierto Dired y espera que tecleemos un nombre.
  2. Escribe, por ejemplo: directorio-prueba. Ahora en Dired ha aparecido un nuevo directorio.
  3. Sitúa el cursor en el fichero primer-texto.org. Fíjate que te sirven las teclas habituales C-n y/o C-p, pero también n y p, sin tener pulsada la tecla control.
  4. Pulsa S-c (mayúsculas+c): En el área de prompt aparecerá un mensaje preguntando dónde copia el fichero primer-texto.org.
  5. Escribe ahora el nombre del directorio que creamos en los pasos 1 y 2.

No estás impresionado, me consta... ¡copiar ficheros a estas alturas! Bueno, vamos con otra intentona. Si estás situado en el fichero primer-texto.org, que lo acabamos de copiar a otro sitio, pulsa <RET>. Esto debería visitar el fichero y permitirte modificarlo. Haz en él algunas modificaciones, las que consideres oportunas, cuando hayas acabado guarda los cambios (C-x C-s) y cierra el buffer (C-x k). ¿Estás en Dired de nuevo? Si no es así, cambia al buffer de Dired y sitúa el cursor en el fichero que acabas de modificar. Pulsa =. Ahora te preguntará en el área de prompt con un mensaje que lo mismo es un poco críptico (Diff nombre-fichero width:) que introduzcas el nombre de otro fichero. Vamos a escribir el fichero que copiamos antes. ¿Lo tienes? ¿qué muestra? Efectivamente todas las modificaciones que le hemos hecho al fichero vienen marcadas con un código de colores, analizando el contenido de los archivos. Para más especificaciones, mira la ayuda para el comando diff del sistema operativo. Como veo que sigues sin estar impresionado, voy a probar otra cosa:

  1. Sitúa el cursor en el directorio que creamos antes y pulsa la tecla c (antes utilizamos la c mayúscula, ahora la c minúscula).
  2. En el área de prompt aparecerá un mensaje de Compress to:. Escribe el nombre que quieras, por ejemplo: prueba.zip o prueba.tar.gz (observa que según la extensión que le demos, utilizará una compresión u otra).
  3. Navega con el cursor hasta el nuevo fichero comprimido creado y visítalo... ¿lo abre? ¿Ves su interior? ¿Puedes visitar algún fichero que esté dentro?

Ya no sé cómo impresionarte más, pero voy a hacer un último intento, a ver:

  1. Sitúa el cursor en nuestro fichero primer-texto.org y pulsa : e (la secuencia dos puntos y e).
  2. Nos aparecerá un diálogo, si tenemos instalado gpg y tenemos algunas claves generadas, nos pedirá que seleccionemos aquellas con las que queremos cifrar el fichero. Si no seleccionamos ninguna, el cifrado será simétrico y nos pedirá después una palabra clave para hacer el cifrado.
  3. Si hemos hecho todos esos pasos deberíamos tener un fichero nuevo llamado primer-fichero.org.gpg en el directorio.

¿Qué ocurre si nos vamos hasta ese fichero y lo abrimos? ¿Lo abre sin preguntar nada? Mientras estemos en la misma sesión, el paquete epa, que es el que se encarga del cifrado y descifrado de los archivos, recordará la clave y no preguntará por ella. Tampoco lo hará si utilizamos el cifrado de clave pública y detecta que el fichero está cifrado con una clave que tenga en gpg en la lista.

Dired nos permite hacer sobre un fichero o directorio cualquier operación que permita el sistema operativo: copiarlo, renombrarlo, cambiarle el propietario (chown) o el modo (chmod), borrarlo, crear enlaces, comprimirlo, cifrarlo, descifrarlo.

Una consola en mi ventana

Para trabajar sobre directorios y ficheros tenemos Dired, pero hay cosas que no siempre se hacen sobre un fichero o directorio. Para eso tenemos el comando eshell. Al llamarlo mediante M-x eshell nos mostrará el clásico prompt $ donde podremos introducir cualquier comando válido del sistema operativo.

Bueno, bien, no todo funcionará. Funcionarán los comandos típicos de Unix: interactivos en consola, pero fallarán los programas que no funcionan de forma interactiva, como por ejemplo, los que utilizan ncurses o un entorno gráfico para funcionar.

Con un par de teclas consigue facilitarlos el trabajo con el entorno, por ejemplo, si pulsamos C-c C-l (eshell-list-history) nos mostrará un listado con el historial de comandos en un buffer por el que podemos movernos y al pulsar <RET> nos permitirá ejecutar de nuevo ese comando. Con C-c C-s nos muestra una lista de procesos que están corriendo y nos permite mandar a esos procesos una señal de eof, o interrumpirlo o incluso una señal kill.

Recordad, si quieres saber qué comandos tiene, en el buffer de eshell pulsa C-h m y te dará una lista exhaustiva.

Editor hexadecimal

Ya que estás familiarizado con estas herramientas, abre un directorio y navega hasta alguna imagen que tengas en tu disco. Cuando estés sobre una imagen pulsa <RET>. Como verás Emacs identifica el tipo de fichero y lo abre en un buffer de imagen. Si pulsas C-c C-c alternará entre el modo imagen y su descripción. Ahora bien, si la imagen que has abierto es un fichero .svg verás que muestra el texto XML que define dicha imagen, pero si has abierto un .png o un .jpg, por poner un ejemplo, la descripción es un poco confusa, porque es binario.

¿Se puede abrir un fichero en formato binario? Sí, claro. Algunas veces es necesario. Si estando situados en el buffer de la imagen llamamos al modo hexadecimal con el comando M-x hexl-mode, nos mostrará el contenido del fichero en filas de 16 bytes en formato binario.

También se puede editar el fichero, pero ya entenderéis que las posibilidades de éxito son bastante menores. /No modifiquéis nunca un fichero binario a no ser que estéis muy seguros de los que estáis haciendo/.

Instalar paquetes

A partir de ahora veremos la posibilidad de aumentar la funcionalidad de Emacs. Si nuestro editor favorito ha llegado donde está, es gracias a la infinidad de paquetes con los que cuenta. De hecho corre el rumor de que si te has planteado alguna vez hacer algo con un ordenador, seguramente Emacs tendrá un paquete que te facilitará la tarea.

Antes de nada, advertir que vamos a modificar nuestro fichero de inicio directamente, como auténticos expertos programadores ¿Difícil? Verás como no. Sigue los siguientes pasos y todo irá bien.

Visita el fichero ~/.emacs.d/init.el. Si no está fíjate que si está el fichero ~/.emacs. Si es así, renombra este último a ~/.emacs.d/init.el y después ábrelo.

La primera línea del archivo debe ser:

(package-initialize)

Si no lo es, escribe el texto anterior tal y como está, con paréntesis incluidos. Acabas de escribir tu primera sentencia en elisp, el lenguaje de extensión de Emacs. Como puedes intuir, lo que hace es iniciar el sistema de paquetes.

A continuación vamos a escribir un poco más de código. Si no te fías de hacerlo bien, corta y pega lo siguiente:

(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                         ("marmalade" . "https://marmalade-repo.org/packages/")
                         ("org" . "http://orgmode.org/elpa/")
                         ("melpa" . "http://melpa.milkbox.net/packages/")))

Básicamente le estamos dando una lista de sitios donde buscar paquetes. Por defecto, buscará solamente en gnu, sin embargo hay otros lugares que mantienen paquetes interesantes, especialmente melpa.

Al copiar, ten cuidado con los paréntesis, no te vaya a faltar ninguno (suele ser el error más habitual cuando escribes código en elisp).

Después de guardar los cambios con C-x C-s tienes dos opciones:

  1. Cerrar Emacs y volver a abrirlo, para que los cambios se carguen.
  2. Cargarlos con el comando M-x load-file <RET> ~/.emacs.d/init.el

Si todo ha ido bien y utilizas el comando M-x list-packages deberían aparecer un montón de paquetes. ¿Demasiados? No te preocupes, no tienes que cargarlos todos, sólo los que utilices. De momento cargaremos sólo dos más.

Ayuda con las combinaciones de teclas

Bien, ya que estamos vamos a ver si hay algún modo de facilitarnos la vida. Y la hay. ¿Es muy complicado aprenderse todas las teclas? ¿Hay un sinfín de combinaciones y te resulta acordarte de qué secuencia es la que te lleva a ejecutar el comando que quieres?

La respuesta directa sería: llámalo directamente desde M-x. Pero eso no es una solución, si no conoces tampoco el comando. Así pues, vamos a instalar un paquete, que por su nombre podemos intuir de qué va: which-key; que sería algo así como «qué tecla».

La forma directa de instalar es utilizar el comando package-install llamándolo desde M-x. Si prefieres también puedes buscarlo (recuerda: C-s) en la lista de paquetes y hacerlo pinchando en los pichorros y chismáticos gráficos.

El siguiente paso es activarlo de manera general. which-key es un modo menor que nos informa de las combinaciones de teclas y, como ya he dicho, podemos tener varios modos menores activos. Para hacerlo, quiero que sepas otra manera de acceder a los ajustes sin el menú. El comando es customize-group.

  1. Pulsa M-x y escribe customize-group y pulsa <RET>
  2. En el prompt que aparece escribe which-key.
  3. En el buffer de opciones, busca una que se llama Which Key Mode y despliégala. Si no aparece, tendrás que recargar el init.el para que sepa que existe.
  4. Pincha en Toggle y el valor cambiará a on (non-nil).
  5. No olvides pinchar también en Apply and Save.

¿Ya está activado? Lo sabrás porque entre los modos menores aparecerá WK.

También lo puedes hacer de forma directa, sin tantos pasos escribiendo directamente en nuestro ~/.emacs.d/init.el:

  1. Visita el fichero de inicio.
  2. Ve al apartado donde se definen custom-set-variables.
  3. Añade una línea que ponga: '(which-key-mode t).

¿Qué método elegir? En el que más seguro te encuentres. Si no te encuentras cómodo con la edición de fichero de código o eres muy despistado con los detalles1 mejor utiliza el modo gráfico.

Recarga el fichero de inicio: M-x load-file y ~/.emacs.d/init.el. Ahora pulsa C-x y observa qué ocurre en el minibuffer.

Lista de opciones

Ya que hemos aprendido con un paquete, vamos a ver uno equivalente. ivy es otro modo menor de los que se hacen casi imprescindibles. Su nombre viene de Incremental Vertical completYon... bueno sí, un poco cogido por los pelos, pero tampoco nos vamos a molestar por ello.

Los pasos son similares en la instalación de todos los paquetes, así que podemos hacer los mismos del apartado anterior, pero sustituyendo donde dice which-key por ivy. Por si necesitas que te lo refresque para no ir para arriba en el artículo: M-x package-install y pulsa <RET>, en el prompt cuando pregunte escribe ivy y pulsa <RET>. Ya lo tienes instalado en un momentito.

Para activarlo, los pasos son muy similares, pero te voy a dar otra opción2. Esta vez vamos a ir más al grano en el ajuste y en lugar de pedir todas las opciones habidas y por haber, vamos a utilizar un comando con más precisión:

  1. Pulsa M-x y escribe el comando customize-option, pulsa <RET>.
  2. En el prompt que aparece escribe ivy-mode.
  3. Despliega la opción que aparece y pincha en Toggle para activarlo.
  4. Y por supuesto, no olvides pinchar en Apply and Save.

¿Ya está activado? Entre los modos menores debe aparecer ivy.

Bien, vamos a ver para qué sirve: pulsa M-x ¿Qué ha pasado? Pues es sencillo, igual que which-key nos chiva la siguiente tecla, ivy nos chiva y completa los comandos y opciones.

Conclusiones

Como hemos visto, Emacs, viene cargado con un arsenal de funcionalidad que además se puede incrementar instalando los paquetes que necesitemos. Sabiendo esos pasos creo que serás capaz de instalarte cualquier paquete que necesites. Si eres programador encontrarás detalladas guías por Internet de cómo convertir este editor en el mejor IDE para trabajar con el lenguaje que necesites. Sólo tendrás que instalar y configurar los paquetes necesarios.

Si no eres programador y sólo te atrae porque has oído la capacidad que tiene el modo org para organizarte la vida o para generar documentos complejos con el apoyo de LaTeX o incluso para tener un blog como éste.

En la próxima entrega hablaremos de la agenda que viene incorporada en Emacs y en cómo configurarla mínimamente para, por ejemplo, hacer que nos muestre las fechas, meses y días de la semana, en español o en cualquier lengua.

Nota al pie de página:

1

Los paréntesis y caracteres especiales como ', son importantes y pueden hacer que nuestro fichero de inicio deje de funcionar. Por eso, es recomendable que si no eres programador y no te encuentras seguro con esas acciones, utilices el modo gráfico que guardará el código necesario de forma correcta.

2

Será por opciones en Emacs.


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

Disculpen las molestias.