.. _14: 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 :kbd:`Ctrl`-:kbd:`g` (``C-g``) o :kbd:`ESC` (``ESC``), porque estas teclas están reservadas para salir (ver :ref:`51`). 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``: :kbd:`Alt`-:kbd:`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 :kbd:`Ctrl`-:kbd:`h` (``C-h``) o :kbd:`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: 14.1 Guardar Posiciones en Registros ------------------------------------ :kbd:`Ctrl`-:kbd:`x` :kbd:`r` :kbd:`SPACE` :kbd:`r` (``C-x r SPC r``) Registra la posición del punto y el búfer actual en el registro *r* (``point-to-register``). :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``C-x r j r``) Salta a la posición y buffer guardados en el registro *r* (``jump-to-register``). Si se escribe :kbd:`Ctrl`-:kbd:`x` :kbd:`r` :kbd:`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: 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. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`s`:kbd:`r` (``C-x r s r``) Copia la región en el registro *r* (``copy-to-register``). :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`i`:kbd:`r` (``C-x r i r``) Inserta texto desde el registro *r* (``insert-register``). :kbd:`Alt`-:kbd:`x` ``append-to-register`` :kbd:`RETURN` :kbd:`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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`+` (``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 :ref:`14.5`. :kbd:`Alt`-:kbd:`x` ``prepend-to-register`` :kbd:`RETURN` :kbd:`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 :ref:`12`. :kbd:`Ctrl`-:kbd:`u` :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`s`:kbd:`r` (``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. :kbd:`Alt`-:kbd:`x` ``append-to-register`` :kbd:`RETURN` :kbd:`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: 14.3 Guardar Rectángulos en Registros ------------------------------------- Un registro puede contener un rectángulo en lugar de texto lineal. Consulte :ref:`13.5` , para obtener información básica sobre cómo especificar un rectángulo en el búfer. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`r`:kbd:`r` (``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. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`i`:kbd:`r` (``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 :ref:`14.2`, 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 :ref:`21.7`. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`w`:kbd:`r` (C-x r w r) Guarda el estado de las ventanas del marco seleccionado en el registro *r* (``window-configuration-to-register``). :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`f`:kbd:`r` (``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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``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 :Kbd:`Ctrl`-:kbd:`u` :kbd:`Ctrl`:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``C-u C-x r j r``). .. _14.5: 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 :ref:`18`). :kbd:`Ctrl`-:kbd:`u` *número* :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`n`:kbd:`r` (``C-u`` *número* ``C-x r n r``) Almacena *número* en el registro *r* (``number-to-register``). :kbd:`Ctrl`-:kbd:`u` *número* :kbd:`r`:kbd:`+` (``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 :ref:`14.2`. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`i`:kbd:`r` (``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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``C-x r j r``). 14.7 Registros de Macros de Teclado ----------------------------------- Si necesita ejecutar una macro de teclado (véase :ref:`18`) con frecuencia, es más conveniente ponerla en un registro o guardarla (véase :ref:`18.5`). (``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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`j`:kbd:`r` (``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. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`m` :kbd:`RETURN` (``C-x r m RET``) Establece el marcador para el archivo visitado, en el punto. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`m` *marcador* :kbd:`RETURN` (``C-x r m`` *marcador* ``RET``) Establece el marcador de nombre *marcador* en el punto (``bookmark-set``). :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`M` *marcador* :kbd:`RETURN` (``C-x r M`` *marcador* ``RET``) Como ``C-x r m``, pero no sobrescribe un marcador existente. :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`b` *marcador* :kbd:`RETURN` (``C-x r b`` *marcador* ``RET``) Salta al marcador de nombre *marcador* (``bookmark-jump``). :kbd:`Ctrl`-:kbd:`r`:kbd:`l` (``C-x r l``) Lista todos los marcadores (``list-bookmarks``). :kbd:`Alt`-:kbd:`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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`b` (``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 :kbd:`Ctrl`-:kbd:`x` :kbd:`r`:kbd:`l` (``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 :kbd:`Ctrl`-:kbd:`h` :kbd:`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: | :kbd:`Alt`-:kbd:`x` ``bookmark-load`` :kbd:`RETURN` *nombre_archivo* :kbd:`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. | :kbd:`Alt`-:kbd:`x` ``bookmark-write`` :kbd:`RETURN` *nombre_archivo* :kbd:`RETURN` | (``M-x bookmark-write RET`` *nombre_archivo* ``RET``) Guarda todos los valores actuales de los marcadores en el archivo de nombre *nombre_archivo*. | :kbd:`Alt`-:kbd:`x` ``bookmark-delete`` :kbd:`RETURN` *marcador* :kbd:`RETURN` | (``M-x bookmark-delete RET`` *marcador* ``RET``) Borra el marcador de nombre *marcador*. | :kbd:`Alt`-:kbd:`x` ``bookmark-insert-location`` :kbd:`RETURN` *marcador* :kbd:`RETURN` | (``M-x bookmark-insert-location RET`` *marcador* ``RET``) Inserta en el búfer el nombre del archivo al que apunta el *marcador*. | :kbd:`Alt`-:kbd:`x` ``bookmark-insert`` :kbd:`RETURN` *marcador* :Kbd:`RETURN` | (``M-x bookmark-insert RET`` *marcador* ``RET``) Inserta en el búfer el contenido del archivo al que apunta el *marcador*.