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.