14 Registros

Los registros de Emacs son compartimentos donde puede guardar texto, rectángulos, posiciones y otras cosas para su uso posterior. Una vez que guarde texto o un rectángulo en un registro, puede copiarlo en el buffer una o muchas veces; una vez que guarde una posición en un registro, puede volver a esa posición una o muchas veces.

Cada registro tiene un nombre que consiste en un único carácter, que aquí, denotaremos con la letra r; r puede ser una letra (como a) o un número (como 1); las mayúsculas y minúsculas importan, por lo que el registro a no es lo mismo que el registro A. También puede establecer un registro en caracteres no alfanuméricos, por ejemplo * o C-d. Nota, no es posible establecer un registro en Ctrl-g (C-g) o ESC (ESC), porque estas teclas están reservadas para salir (ver 51 Salir y Abortar).

Un registro puede almacenar una posición, un fragmento de texto, un rectángulo, un número, una configuración de ventana o marco, un nombre de búfer o un nombre de archivo, pero sólo una cosa en cada momento. Lo que se almacena en un registro permanece allí hasta que se almacena otra cosa en ese registro. Para ver qué contiene el registro r, utilice M-x view-register:

Alt-x view-register r (M-x view-register RET r)

Muestra una descripción de lo que contiene el registro r.

Todos los comandos que solicitan un registro mostrarán una ventana de vista previa que enumera los registros existentes (si los hay) tras un breve retardo. Para cambiar la duración del retardo, personalice register-preview-delay. Para evitar que se muestre esta ventana, configure esta opción como nula. Puede solicitar explícitamente una ventana de vista previa pulsando Ctrl-h (C-h) o F1 (F1).

Los marcadores registran archivos y posiciones en ellos, para que pueda volver a esas posiciones cuando vuelva a mirar el archivo. Estos son similares en espíritu a los registros, por lo que también se documentan en este capítulo.

14.1 Guardar Posiciones en Registros

Ctrl-x r SPACE r (C-x r SPC r)

Registra la posición del punto y el búfer actual en el registro r (point-to-register).

Ctrl-x rjr (C-x r j r)

Salta a la posición y buffer guardados en el registro r (jump-to-register).

Si se escribe Ctrl-x r SPACE (C-x r SPC, point-to-register), seguido de un carácter r, se guarda tanto la posición del punto como el búfer actual en el registro r. El registro conserva esta información hasta que se almacena otra cosa en él.

El comando C-x r j r cambia al búfer grabado en el registro r, inserta una marca y mueve el punto a la posición grabada. (La marca no se desplaza si el punto ya estaba en la posición registrada, o en llamadas sucesivas al comando). El contenido del registro no se modifica, por lo que puede saltar a la posición guardada tantas veces como desee.

Si usa C-x r j para ir a una posición guardada, pero el buffer del que se guardó ha sido eliminado, C-x r j intenta crear el buffer de nuevo visitando el mismo archivo. Por supuesto, esto sólo funciona para búferes que estaban visitando archivos.

14.2 Guardar Texto en Registros

Cuando desee insertar una copia del mismo fragmento de texto varias veces, puede resultar inconveniente sacarlo del anillo de muertes, ya que cada muerte posterior desplaza esa entrada más abajo en el anillo. Una alternativa es almacenar el texto en un registro y recuperarlo más tarde.

Ctrl-x rsr (C-x r s r)

Copia la región en el registro r (copy-to-register).

Ctrl-x rir (C-x r i r)

Inserta texto desde el registro r (insert-register).

Alt-x append-to-register RETURN r (M-x append-to-register RET r)

Añade una región al texto del registro r.

Si el registro r contiene texto, puede utilizar Ctrl-x r+ (C-x r +, increment-register) para añadirlo a ese registro. Tenga en cuenta que el comando C-x r + se comporta de forma diferente si r contiene un número. Consulte 14.5 Guardar Números en Registros.

Alt-x prepend-to-register RETURN r (M-x prepend-to-register RET r)

Añade una región al texto del registro r.

C-x r s r almacena una copia del texto de la región en el registro de nombre r. Si la marca está inactiva, Emacs reactiva primero la marca donde se puso por última vez. La marca se desactiva al final de este comando. Véase 12 La marca y la región. Ctrl-u Ctrl-x rsr (C-u C-x r s r), el mismo comando con un argumento prefijo, copia el texto en el registro r y borra el texto del buffer también; puede pensar en esto como mover el texto de la región al registro.

Alt-x append-to-register RETURN r (M-x append-to-register RET r) añade la copia del texto de la región al texto ya almacenado en el registro llamado r. Si se invoca con un argumento de prefijo, borra la región después de añadirla al registro. El comando prepend-to-register es similar, salvo que antepone el texto de la región al texto del registro en lugar de añadirlo.

Al recopilar texto mediante append-to-register y prepend-to-register, es posible que desee separar los fragmentos individuales recopilados mediante un separador. En ese caso, configura register-separator (un registro-separador) y almacena el texto separador en ese registro. Por ejemplo, para obtener líneas nuevas dobles como separador de texto durante el proceso de recopilación, puede usar la siguiente configuración.

(setq register-separator ?+)
(set-register register-separator "\n\n")

C-x r i r inserta en el búfer el texto del registro r. Normalmente deja el punto después del texto y pone la marca antes, sin activarlo. Con un argumento prefijo, en cambio, coloca el punto antes del texto y la marca después.

14.3 Guardar Rectángulos en Registros

Un registro puede contener un rectángulo en lugar de texto lineal. Consulte 13.5 Rectángulos , para obtener información básica sobre cómo especificar un rectángulo en el búfer.

Ctrl-x rrr (C-x r r r)

Copia la región-rectángulo en el registro r (copy-rectangle-to-register). Con el argumento prefijo, bórrelo también.

Ctrl-x rir (C-x r i r)

Inserta el rectángulo almacenado en el registro r (si contiene un rectángulo) (insert-register).

El comando C-x r i r (insert-register), anteriormente documentado en 14.2 Guardar Texto en Registros, inserta un rectángulo en lugar de una cadena de texto, si el registro contiene un rectángulo.

14.4 Guardar Configuraciones de Ventana y Marco en Registros

Puede guardar la configuración de la ventana del marco seleccionado en un registro, o incluso la configuración de todas las ventanas de todos los marcos, y restaurar la configuración más tarde. Para obtener más información sobre las configuraciones de ventanas, consulte 21.7 Características Convenientes para el Manejo de Ventanas.

Ctrl-x rwr (C-x r w r)

Guarda el estado de las ventanas del marco seleccionado en el registro r (window-configuration-to-register).

Ctrl-x rfr (C-x r f r)

Guarda el estado de todos los marcos, incluidas todas sus ventanas (también conocido como conjunto de marcos), en el registro r (frameset to register).

Use Ctrl-x rjr (C-x r j r) para restaurar la configuración de una ventana o marco. Es el mismo comando que se usa para restaurar la posición del cursor. Al restaurar una configuración de marco, los marcos existentes no incluidos en la configuración se vuelven invisibles. Si desea eliminarlos, utilice Ctrl-u Ctrlx rjr (C-u C-x r j r).

14.5 Guardar Números en Registros

Existen comandos para almacenar un número en un registro, para insertar el número en el buffer en decimal, y para incrementarlo. Estos comandos pueden ser útiles en macros de teclado (véase 18 Macros de Teclado).

Ctrl-u número Ctrl-x rnr (C-u número C-x r n r)

Almacena número en el registro r (number-to-register).

Ctrl-u número r+ (C-u número C-x r + r)

Si r contiene un número, incrementa el número de ese registro en una cantidad igual a número. Tenga en cuenta que el comando C-x r + (increment-register) se comporta de forma diferente si r contiene texto. Consulte 14.2 Guardar Texto en Registros.

Ctrl-x rir (C-x r i r)

Inserta número del registro r en el búfer.

C-x r i es el mismo comando que se usa para insertar cualquier otro tipo de contenido de registro en búfer. C-x r + sin argumento numérico incrementa el valor del registro en 1; C-x r n sin argumento numérico almacena cero en dicho registro.

14.6. Mantener los Nombres de Ficheros y Búferes en Registros

Si visita ciertos nombres de fichero con frecuencia, puede visitarlos más convenientemente si pone sus nombres en registros. Este es el código Lisp usado para poner un nombre de fichero en el registro r:

(set-register r '(file . nombre))

Por ejemplo:

(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))

pone el nombre del archivo que aparece en el registro z.

Para visitar el archivo cuyo nombre está en el registro r, escriba Ctrl-x rjr (C-x r j r). (Este es el mismo comando que se utiliza para saltar a una posición o restaurar una configuración de marco).

Del mismo modo, si hay determinados búferes que visita con frecuencia, puede poner sus nombres en los registros. Por ejemplo, si visita el buffer *Messages* con frecuencia, puede usar el siguiente fragmento de código (snippet) para poner ese buffer en el registro m:

(set-register ?m '(buffer . "*Messages*"))

Para cambiar al búfer cuyo nombre está en el registro r, escriba Ctrl-x rjr (C-x r j r).

14.7 Registros de Macros de Teclado

Si necesita ejecutar una macro de teclado (véase 18 Macros de Teclado) con frecuencia, es más conveniente ponerla en un registro o guardarla (véase 18.5 Nombrar y Guardar Macros de Teclado). (C-x C-k x r, kmacro-to-register) almacena la última macro de teclado en el registro r.

Para ejecutar la macro de teclado en el registro r, escriba Ctrl-x rjr (C-x r j r). (Es el mismo comando que se usa para saltar a una posición o restaurar un conjunto de marcos).

14.8 Marcadores

Los marcadores son algo parecido a los registros en el sentido de que memorizan posiciones a las que puede saltar. A diferencia de los registros, tienen nombres largos y persisten automáticamente de una sesión Emacs a la siguiente. El uso prototípico de los marcadores es registrar dónde estuvo leyendo en varios ficheros.

Ctrl-x rm RETURN (C-x r m RET)

Establece el marcador para el archivo visitado, en el punto.

Ctrl-x rm marcador RETURN (C-x r m marcador RET)

Establece el marcador de nombre marcador en el punto (bookmark-set).

Ctrl-x rM marcador RETURN (C-x r M marcador RET)

Como C-x r m, pero no sobrescribe un marcador existente.

Ctrl-x rb marcador RETURN (C-x r b marcador RET)

Salta al marcador de nombre marcador (bookmark-jump).

Ctrl-rl (C-x r l)

Lista todos los marcadores (list-bookmarks).

Alt-x bookmark-save (M-x bookmark-save)

Guarda todos los valores actuales de los marcadores en el archivo de marcadores por defecto.

Para registrar la posición actual en el archivo visitado, use el comando C-x r m, que establece un marcador usando el nombre del archivo visitado como nombre predeterminado del marcador. Si asigna a cada marcador el nombre del archivo al que apunta, podrá volver a visitar cualquiera de esos archivos con Ctrl-x rb (C-x r b) y desplazarse a la posición del marcador al mismo tiempo.

El comando C-x r M (bookmark-set-no-overwrite) funciona como C-x r m, pero señala un error si el marcador especificado ya existe, en lugar de sobrescribirlo.

Para ver una lista de todos sus marcadores en un búfer separado, escriba Ctrl-x rl (C-x r l, list-bookmarks). Si cambia a ese búfer, puede usarlo para editar sus definiciones de marcadores o anotar los marcadores. Escriba Ctrl-h m (C-h m) m en el búfer de marcadores para obtener más información sobre sus comandos especiales de edición.

Cuando cierre Emacs, éste guardará sus marcadores, si ha cambiado algún valor. También puede guardar los marcadores en cualquier momento con el comando M-x bookmark-save. Los marcadores se guardan en el archivo ~/.emacs.d/bookmarks (por compatibilidad con versiones antiguas de Emacs, si tiene un archivo llamado ~/.emacs.bmk, se usará en su lugar). Los comandos de marcadores cargan automáticamente su archivo de marcadores por defecto. Así es como los marcadores persisten de una sesión Emacs a la siguiente.

Si establece la variable bookmark-save-flag a 1, cada comando que establezca un marcador también guardará sus marcadores; de esta manera, no perderá ningún valor de marcador incluso si Emacs se bloquea. El valor, si es un número, dice cuántas modificaciones de marcadores deben pasar entre cada guardado. Si establece esta variable a nil, Emacs sólo guarda los marcadores si usa explícitamente M-x bookmark-save.

La variable bookmark-default-file especifica el fichero en el que guardar los marcadores por defecto.

Si establece la variable bookmark-use-annotations en t, al establecer un marcador se buscará una anotación. Si un marcador tiene una anotación, ésta se mostrará automáticamente en una ventana aparte cuando salte al marcador.

Los valores de posición de los marcadores se guardan con el contexto circundante, de forma que bookmark-jump pueda encontrar la posición correcta incluso si el archivo se modifica ligeramente. La variable bookmark-search-size dice cuántos caracteres de contexto registrar a cada lado de la posición del marcador. (En los búferes que visitan archivos encriptados, no se guarda ningún contexto en el archivo de marcadores sin importar el valor de esta variable).

Aquí se muestran algunos comandos adicionales para trabajar con marcadores:

Alt-x bookmark-load RETURN nombre_archivo RETURN
(M-x bookmark-load RET nombre_archivo RET)

Carga un archivo llamado nombre_archivo que contiene una lista de valores de marcadores. Puede utilizar este comando, así como bookmark-write, para trabajar con otros archivos de valores de marcadores además de su archivo de marcadores predeterminado.

Alt-x bookmark-write RETURN nombre_archivo RETURN
(M-x bookmark-write RET nombre_archivo RET)

Guarda todos los valores actuales de los marcadores en el archivo de nombre nombre_archivo.

Alt-x bookmark-delete RETURN marcador RETURN
(M-x bookmark-delete RET marcador RET)

Borra el marcador de nombre marcador.

Alt-x bookmark-insert-location RETURN marcador RETURN
(M-x bookmark-insert-location RET marcador RET)

Inserta en el búfer el nombre del archivo al que apunta el marcador.

Alt-x bookmark-insert RETURN marcador RETURN
(M-x bookmark-insert RET marcador RET)

Inserta en el búfer el contenido del archivo al que apunta el marcador.