Utilización de registros en Emacs
Cuando crees que más o menos tienes todo controlado sobre la herramienta que utilizas, en mi caso Emacs, resulta que te sorprendes con una funcionalidad nueva que ni habías sospechado. Eso me ha pasado con los registros.
El problema es no haberlos necesitado, también porque tampoco conocía que lo que hacen se podía hacer. Con el tiempo, les he cogido el aire, un poco, y ahora me pregunto cómo podía editar documentos sin ellos.
Registros
¿Qué son los registros? Pues si miramos el manual de Emacs nos explica que los registros son compartimentos donde se puede guardar texto, rectángulos de texto, posiciones u otras cosas para utilizarlas luego.
Hasta hace poco utilizaba el «anillo de borrado» para guardar texto que luego copiaba (recuperaba) de allí. En un momento dado me encontré que necesitaba guardar varios textos y recuperarlos según el caso en otro sitio. Me apañé, de alguna manera, creando un buffer con los textos (en concreto 8) y los iba corto-pegando donde correspondía. Mientras realizaba estas operaciones pensaba si no existiría una forma mejor de hacer eso mismo. La hay, pero en ese momento lo desconocía y me apañé como pude. Después, al investigar, encontré los registros.
Funcionamiento de los registros
Un registro puede almacenar una posición del cursor en un buffer, un
trozo de texto ─sea en rectángulo o no─, la configuración de una
ventana, un número o un nombre de fichero ─pero sólo una cosa cada
vez─. Además cada registro tiene un nombre, normalmente un carácter
o un número o, incluso, algunos caracteres especiales como *
. Hay
que tener en cuenta que el registro «a» es distinto al «A». Es decir,
tenemos tantos registros como caracteres alfanuméricos en nuestro
teclado.
Para ver el contenido de un registro, pongamos por ejemplo el «a», podemos hacer:
M-x view-register <RET> a
Por ejemplo, si hubiéramos guardado en él una posición en un buffer
nos mostraría un *Output*
similar a:
Register a contains a buffer position: buffer texto-largo.org, position 1061
Registros para guardar posiciones
El uso de los registros se realiza con la combinación de teclas C-x
r
seguida de algunas teclas con más funcionalidad. Por ejemplo, para
guardar una posición se utiliza <SPC>
y nos preguntará por un
nombre. Por tanto, la función point-to-register
lo activa la
secuencia:
C-x r <SPC> a
guardará en el registro de nombre «a» la posición del cursor en un
buffer, cuando queramos saltar a dicha posición, jump-to-register
,
podemos recuperar el registro con la secuencia:
C-x r j a
Guardar textos en registros
Este fue el caso de uso que necesité y que no supe llevar a cabo. Como digo lo solventé con un buffer desde el que copiar los textos a través del clásico «anillo de borrado». Podía haber ahorrado algo de trabajo, metiendo los textos en registros e ir recuperándolo según lo necesitara.
Podemos guardar texto en un registro, pongamos el «R», seleccionando
el texto deseado y utilizar el comando copy-to-register
o la
combinación de teclas asignada C-x r s R
e insertarlo donde sea
necesario con el comando insert-register
o la combinación de teclas
C-x r i R
.
Si volvemos a utilizar un nombre de registro sobrescribiremos el
contenido, sin embargo, podemos modificarlo sin borrarlo utilizando
los comandos append-to-register
o prepend-to-register
con el texto
seleccionado previamente.
Guardar rectángulos en registros
Copiar texto mediante rectángulos es una función que se usa mucho
menos. Pero cuando el texto está «tabulado» es una manera rápida de
seleccionar el contenido sin afectar al entorno. En este caso los
comandos son copy-rectangle-to-register
o C-x r r R
, para guardar
el contenido y insert-register
o C-x r i R
, justo el mismo
comando, para insertar el contenido desde el registro.
Guardar configuraciones de ventanas
La verdad es que esta opción la utilizo poco o nada aunque también puede ser útil, por ejemplo, para los casos de que se quiera centrar la atención en un determinado buffer cuando tenemos varios abiertos pero sabemos que luego querremos recuperar la configuración de ventanas que teníamos previamente.
Para restaurar la ventana utilizaremos el comando que ya hemos visto
para restaurar la posición dentro de un buffer: C-x r j R
. Pero
para guardar dicha configuración tenemos dos opciones:
C-x r w R
guardará en el registro «R» la configuración de las
ventanas en el marco que mantiene el foco. El comando sería
window-configuration-to-register
.
C-x r f R
guardará en el registro «R» la configuración de todos los
marcos abiertos y sus correspondientes ventanas y buffers.
Guardar números
Como excepción, para guardar números (naturales) debemos utilizar un
prefijo, el habitual C-u NUM
. Además, proporciona mecanismos para
incrementar esos números y, por tanto, se pueden utilizar los
registros como «contadores», por ejemplo.
C-u NUM C-x r n R
, almacena en el registro «R» el número «NUM».
C-u NUM C-x r + R
, si el registro «R» contiene un número
incrementará el contenido de dicho registro en «NUM».
Para recuperar el número que contiene el registro «R» utilizaremos el ya
conocido C-u r i R
.
Hay que hacer notar que si utilizamos el comando C-x r + R
,
increment-register
, sin proporcionar un número, el incremento será
+1
.
Guardar nombres de fichero
Una de las cosas que más utilizo con los registros es su capacidad
para guardar el nombre de un fichero y visitarlo mediante el habitual
comando de saltar: C-x r j a
... y me abre un fichero que mantengo
para anotar diversos aspectos sobre mi trabajo diario, anotaciones,
trozos de código, etc.
En mi fichero init.el
he añadido la siguiente línea.
(set-register ?a '(file . "~/agenda/bloc-notas.org"))
Ese trozo de código guarda en el registro «a» el nombre de mi fichero de notas. Cuando necesito anotar algo, o consultar alguna anotación simplemente recupero salto al contenido del registro «a» y automágicamente me abre mi fichero de notas.
Conclusiones
También hay cómo asignar a un registro un «macro de teclado», pero nunca lo he utilizado. Lo dejo para futuras entradas si fuera necesario. Supongo que utilizarlo será muy similar al resto de casos de uso de los registros.
Sólo puedo recomendar su uso. Si de momento no ves su utilidad no importa, haz pruebas: seguro que mientras las haces se te ocurren varios usos para los registros. Y al final, estoy casi seguro, que se convertirá en una herramienta tan imprescindible como se me ha hecho a mí.