Notxor tiene un blog

Defenestrando la vida


Primeros pasos con el editor

El otro día vimos unos pocos conceptos para tener clara la terminología y aclararnos a la hora de trabajar. No te preocupes si no has entendido algo de lo que hablé allí, porque con el uso lo entenderás rápidamente.

En esta entrega vamos a continuar con el uso de nuestro editor favorito, ─al menos el mío, el tuyo espero que lo sea─. Hablaba la semana pasada de que Emacs tiene más de 40 años y sigue en la brecha. En ese tiempo, hemos visto pasar por nuestro lado muchas tecnologías para la edición de texto y la programación, mientras algunas quedaban como pilares de uso diario: como Vim o Emacs.

Si bien, Emacs ha sabido hacerse un hueco para usos que están más allá de la programación, resulta un poco difícil ordenar las ideas y funcionalidades para que el acercamiento de esa gente que pretende usarlo para otras tareas, y que no son programadores, no desistan a las primeras de cambio. Por eso me decidí a escribir esta serie de artículos, pues me di cuenta de que la mayoría de la documentación, entradas de blogs, instrucciones de instalación de paquetes, etc., están escritas para iniciados. Ahora me doy cuenta que, como ocurre en todos los sistemas complejos, no hay explicaciones sencillas y todos los conceptos están tan íntimamente relacionados que no se pueden separar de ninguna manera simple.

La ayuda

Emacs viene con una documentación completa y vamos a utilizarla para aprender a movernos por una ingente cantidad de información que nos resultará útil para sacarle todo el partido a nuestro editor. Sin embargo, tanta información a veces abruma y no encontramos justo lo que buscamos, hay que aprender a utilizarla.

Si ya has utilizado con anterioridad la herramienta info de Unix estás de enhorabuena, porque la ayuda que viene con Emacs se basa en ella. Si no lo has hecho, sigue estos sencillos pasos:

  1. Pulsa C-h r, eso debería abrir un buffer con el manual de Emacs. Si lo tuyo es el ratón: Help -> Read the Emacs Manual te llevará al mismo sitio.1
  2. Pulsa h directamente en ese buffer, debería llevarte a una pequeña explicación de cómo funciona info.

    Básicamente te cuenta que existen enlaces y que puedes navegar por las distintas páginas con los comandos (n)ext, (p)rev, (u)p... y alguno más que no voy a detallar ahora. Lo importante es que te quedes que la navegación por los distintos apartados es consistente con las teclas de movimiento de Emacs (no te preocupes, las veremos enseguida).

Para moverte por el buffer de ayuda puedes utilizar las teclas de movimiento del editor o sus equivalentes del cursor.

Un poco sobre configuración

La mayoría de usuarios de Emacs preferimos modificar el código de nuestro fichero de inicio, ese que carga todos nuestros gadgets y los ajusta a nuestros gustos. Si vienes por primera vez a nuestra herramienta de edición y no eres programador estarás preguntándote: «¿tengo que aprender a programar para manejar el editor?». La mejor respuesta que se me ocurre es: «es aconsejable, pero no imprescindible». O dicho de otro modo, la configuración se puede gestionar de un modo más gráfico. Y quiero explicar un poco, con un par de ejemplos cómo se puede hacer, utilizando los menús y el ratón para quien esté acostumbrado a ese uso.

Por ejemplo, vamos a cambiar el aspecto del editor modificando el tema. Un tema es un conjunto de acciones visuales que modifican el aspecto que tendrá nuestro editor en pantalla. Pincha en Options -> Customize Emacs -> Custom Themes. Tras hacer eso, nos aparecerá un buffer con las opciones disponibles. Siéntete libre de seleccionar el tema que más se ajuste a tus gustos y acuérdate de pulsar el botón de guardar los cambios y así, cada vez que inicies el editor lo verás con el tema que hayas seleccionado... ¿Qué te ha parecido raro? ¡Oh, sí! Emacs ha abierto un buffer. Quizá estés acostumbrado a que los programas modernos abren marcos modales donde seleccionar las opciones. Y aunque le has dado al botón, el buffer sigue ahí, en pantalla. Si te molesta mucho tener un buffer abierto pulsa la combinación C-x k y aparecerá en la última linea el siguiente texto: Kill buffer (default *Custom Themes*), si pulsas <RET> se borrará de pantalla.

seleccion-theme.png

Vamos con otro ejemplo, que no tiene una entrada en el menú de manera directa. Lo que queremos hacer es ahorrarnos el buffer de la ventana de inicio de Emacs. Para ello vamos a pinchar en Options -> Customize Emacs -> Specific Option.... En la última línea (línea de eco o de prompt) habrá aparecido el texto Customize variable: y el cursor allí, nos indica que está esperando que le digamos qué variable queremos modificar. Nuestro objetivo es modificar la variable inhibit-startup-screen, pero vamos a ver otra característica del editor que nos facilita la vida: escribe in y pulsa <TAB>... ¡eh! nos muestra un montón de opciones, pincha con el ratón en la que estamos buscando. Si sólo ha movido el cursor a ella, pero sigue mostrando las opciones, pulsa <RET> y te abrirá el buffer para modificar la variable. Pincha en el botón Toggle y luego en Apply and Save.

Si ahora cierras Emacs y vuelves a cargarlo, deberías verlo con el tema seleccionado y la ventana de inicio es un buffer que, como puedes apreciar en la línea de estado, se llama *scratch*.

Mirando el código, abriendo un fichero

Los cambios que has realizado se han guardado en un fichero y vamos a visitarlo2. Pulsa C-x C-f y te pedirá el nombre de un fichero, también lo puedes hacer de forma gráfica con el menú File -> Open File.... Seguramente tu configuración se habrá grabado en el fichero ~/.emacs o en el fichero ~/.emacs.d/init.el, dependiendo de la versión. Es recomendable, desde la versión 24 del editor, que todas las configuraciones se muevan a init.el dentro del directorio .emacs.d, para tener todas las dependencias, paquetes y otras herramientas en el mismo directorio. Por tanto, si te ha creado un fichero .emacs muévelo a .emacs.d/init.el, con renombrarlo debería ser suficiente.

Bien, si estás utilizando el modo gráfico y no ves ningún fichero de los que te digo, selecciona Show hidden files en el diálogo de selección de fichero.

¿Dos formas de abrir los ficheros? Sí, y aún te voy a presentar otra. Pulsa: C-x d, en la línea de eco te pregunta por un directorio, pulsa <RET> ¡Te presento a Dired! Mueve el cursor al fichero o directorio que quieras con las flechas de cursor (luego veremos cómo movernos con otras teclas) y pulsa <RET>. ¿Lo ha abierto? Si has pulsado sobre un fichero lo habrá abierto en un buffer de edición, si has pulsado sobre un directorio lo habrá abierto en un buffer de Dired. Si el fichero era una imagen, la habrá abierto en un buffer de imagen.

Dired tiene muchas más opciones y tendrá un artículo para él sólo en un futuro no muy lejano. De momento, quédate con que existe y que te permite moverte por los ficheros y directorios de una manera cómoda y sin salir del editor. Dired es un paquete3 de los que vienen con Emacs, como Org y que le dan al editor una funcionalidad extra convirtiéndolo en la navaja suiza que es.

Bien, en todo caso, el código que se ha generado es el siguiente:

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-enabled-themes (quote (misterioso)))
 '(inhibit-startup-screen t))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Como se puede ver, lo que hemos hecho gráficamente es establecer dos variables en custom-set-variables: una se llama custom-enabled-themes y se establece a «misterioso» y la otra es inhibit-startup-screen y la pone a t (true), por lo que se inhibirá la ventana de bienvenida.

Moviéndonos por la ventana

Para movernos por un buffer siempre vamos a utiliza las mismas teclas. Sin ánimo de ser exhaustivo, voy a nombrar sólo las teclas más habituales o utilizadas. Al menos las que yo más utilizo, aquí va una lista de las teclas y su correspondiente comando:

  • Por líneas y caracteres:
    C-n
    Ir a la siguiente línea (next-line).
    C-p
    Ir a la línea anterior (previous-line).
    C-f
    Ir al siguiente carácter (forward-char).
    C-b
    Ir al carácter anterior (backwar-char).
    C-a
    Ir al inicio de la línea (move-beginning-of-line).
    C-e
    Ir al final de la línea (move-end-of-line).
  • Por palabras:
    M-b, M-<LEFT>
    Ir a la palabra anterior o izquierda (backward-word, left-word)
    M-f, M-<RIGHT>
    Ir a la palabra siguiente o derecha (forward-word, right-word).
  • En el buffer:
    M-<
    Ir al principio del buffer (begining-of-buffer)
    M->
    Ir al final del buffer (end-of-buffer).
    M-g g, M-g M-g
    Pide un número de línea al que saltar (goto-line).

Hay más combinaciones de teclas, pero con estas, de momento, hay suficientes. Si te sirve de regla nemotécnica, la tecla C avanza de uno en uno mientras que la tecla M lo hace en cantidad... más o menos.

Abriendo y cerrando buffers

Bueno vamos a escribir nuestro primer texto. Haz lo siguiente:

  1. Pulsa C-x C-f.
  2. En el área de entrada, donde pide un nombre de fichero, escribe primer-texto.org. O cualquier nombre, pero termina con una extensión .org.

Escribe un texto, por ejemplo:

* Esto es un título de primer nivel

Esto es un párrafo normal. A partir de ahora puedes escribir
libremente en el editor. La separación entre párrafos es una línea en
blanco. Por eso, estas líneas son un párrafo.

Esto es el segundo párrafo. Como se puede ver está separado por una
línea en blanco del párrafo anterior. Si pulsamos =M-q= en un párrafo,
nos lo justifica y divide en líneas.

** Esto es un título de segundo nivel

Por si tú no te has dado cuenta, estamos editando un fichero =Org=.

** Formato del texto

Podemos utilizar /cursiva/, *negrita*, _subrayada_, +tachada+,
=verbatim=, ~code~. Podemos indicar superíndices y subíndices
empleando los caracteres «^» y «_», por ejemplo:

- R_sol = 6,96 x 10^8 m
- R_{Alfa Centauri} = 1,28 x R_{sol}

Si pulsamos =C-c C-x \= además veremos de forma gráfica los subíndices
y superíndices.

También, como acabamos de ver, podemos utilizar listas:

- De ítem normales.
- También podemos utilizar listas de números:
  1. Uno
  2. Dos
  3. Tres
- Y también de definiciones:
  - Un concepto :: Su definición.
  - Otro concepto :: y su correspondiente definición.

Y como se puede apreciar, podemos anidarlas unas dentro de otras.

** Tablas

También tenemos una manera muy sencilla de organizar la información en
tablas.

| una columna | otra columna |
|-------------+--------------|
| esto        | y aquello    |

Y lo vamos a dejar aquí, porque si no voy a escribir un tutorial de
=org-mode= dentro de uno de /Emacs/.

Te aconsejo que vayas tecleando el texto, para que veas cómo va reaccionando Emacs. Va cambiando los colores del texto ¿por qué? ¿qué está pasando?. Sencillamente, si has escrito correctamente la extensión .org, Emacs ha entrado en org-mode y todo el texto que estás escribiendo es automáticamente procesado por dicho modo. Distingue los títulos, el marcado de texto, facilita su edición y también lo muestra de modo que nosotros podamos distinguirlo de un vistazo asignando colores.

Al llegar a la tabla, copia la primera fila y en la segunda introduce sólo |- y pulsa <TAB>.

¿Cómo lo guardas? Pues puedes pulsar C-x C-s o con el ratón y el menú pinchando en File -> Save.

La línea de estado

Una herramienta sobre la que quiero llamar la atención, que nos servirá para ver qué estado tiene cada buffer es lo que Emacs llama the mode line. Nos proporciona codificada toda la información que necesitamos sobre el buffer.

Si vemos la siguiente imagen:

linea-estado.png

Vemos ahí dos líneas de modo o de estado, una para cada buffer abierto. Podemos ver la siguiente estructura:

CS:CH-FR nombre-buffer      POS LÍNEA    (Mayor Menores)

El campo CS es el código del sistema. Los valores habituales son U para unicode, 1 para ISO Latin-1... si aparece un - significa que no hay asignado para el buffer una página de códigos.

Después de ese campo suele haber un carácter :, si aparece otra cadena nos indicará que el fin de línea no es el habitual. En marcos creados por emacsclient el carácter que aparece es @, pero como todavía no hemos visto cómo funciona emacs en modo servidor, no entraré más allá.

El campo CH suele ser -- que indica que el buffer coincide con el fichero guardado en disco. Si aparece ** indica que el buffer se ha modificado y hay cambios sin guardar. Si aparece %% quiere decir que el buffer es de sólo lectura. Es posible que aparezca %*, lo que indicará que hemos modificado un buffer de sólo lectura. Ha más variantes en este campo cuando se edita un fichero a través de la red, pero no voy a entrar en ellas.

El campo nombre-buffer es normalmente el nombre del fichero que tenemos cargado en el buffer y coincide con él. Hay casos en que ese nombre varía; por ejemplo, si cargamos dos ficheros con el mismo nombre pero que están en directorios diferentes, el nombre podría ser nombre-fichero<directorio>. Además, algunos buffers especiales mostrarán su nombre en formato *nombre-buffer*.

El campo POS nos indica la posición del buffer que vemos en la ventana con respecto al total del contenido. Por ejemplo, si muestra All quiere decir, que en ventana estamos visualizando todo el contenido del buffer. También puede aparecer Top, que quiere decir que estamos en la posición superior, Bot indica que estamos al final del mismo y normalmente tendrá un formato de 00%, es decir, el porcentaje de buffer que hay por encima de la parte superior de la ventana.

El campo Línea consiste en el carácter L seguido por la línea donde está situado el punto.

Por último, entre paréntesis, se encuentran los modos activos. El primero es el modo Mayor y sólo puede haber uno mayo. A continuación aparecen los modos menores, que puede no haber o haber varios.

Conclusiones

¿Muchas teclas? ¿Imposible aprendérselas todas? Pues hay más, en la ayuda están todas detalladas. No obstante, para moverte cuentas también con la ayuda del ratón. Como ya he dicho antes, puede parecernos más rápido, pero no lo es, aunque quizá sí más intuitivo si estás acostumbrado a utilizarlo en entornos gráficos.

Tómate tu tiempo en acostumbrarte a la interface del editor, juega un poco con él, verás que enseguida lo tienes dominado.

Nota al pie de página:

1

Con el tiempo te darás cuenta que es más productivo no separar los dedos de las teclas para ir hasta el ratón, mover el cursor y pinchar en pichorros y chismáticos que no aportan valor añadido al proceso. Te aprenderás las combinaciones de teclas más frecuentes y hasta es posible que decidas quitarle el menú y la barra de herramientas a tu Emacs, como hacen muchos usuarios.

2

En la terminología de Emacs cargar el contenido de un fichero en un buffer se llama visitar.

3

Oirás hablar de paquetes de Emacs muchas veces y aprenderás a instalarlos también, pero de momento: no es el caso.


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.