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:
- Pulsa la tecla
+
. Verás que en el área de prompt aparece el mensajeCreate directory
, seguido del path que tiene abiertoDired
y espera que tecleemos un nombre. - Escribe, por ejemplo:
directorio-prueba
. Ahora enDired
ha aparecido un nuevo directorio. - Sitúa el cursor en el fichero
primer-texto.org
. Fíjate que te sirven las teclas habitualesC-n
y/oC-p
, pero tambiénn
yp
, sin tener pulsada la teclacontrol
. - Pulsa
S-c
(mayúsculas+c
): En el área de prompt aparecerá un mensaje preguntando dónde copia el ficheroprimer-texto.org
. - 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:
- 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). - En el área de prompt aparecerá un mensaje de
Compress to:
. Escribe el nombre que quieras, por ejemplo:prueba.zip
oprueba.tar.gz
(observa que según la extensión que le demos, utilizará una compresión u otra). - 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:
- Sitúa el cursor en nuestro fichero
primer-texto.org
y pulsa: e
(la secuenciados puntos
ye
). - 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. - 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:
- Cerrar Emacs y volver a abrirlo, para que los cambios se carguen.
- 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
.
- Pulsa
M-x
y escribecustomize-group
y pulsa<RET>
- En el prompt que aparece escribe
which-key
. - 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. - Pincha en
Toggle
y el valor cambiará a on (non-nil). - 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
:
- Visita el fichero de inicio.
- Ve al apartado donde se definen
custom-set-variables
. - 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:
- Pulsa
M-x
y escribe el comandocustomize-option
, pulsa<RET>
. - En el prompt que aparece escribe
ivy-mode
. - Despliega la opción que aparece y pincha en Toggle para activarlo.
- 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:
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.
Será por opciones en Emacs.