Emacs: editor de archivos integral y extensible.
https://www.computerhope.com/unix/uemacs.htm

Índice

1 Descripción

Emacs es un editor de texto altamente extensible, muy personalizable escrito originalmente para el PDP-10 por Richard Stallman en la década de 1970. Incorpora más de 2000 comandos, que pueden ser extendidos usando Emacs Lisp , y de manera automatizada mediante macros creados por el usuario.

Emacs puede hacer mucho más que la simple inserción y eliminación de texto. Se puede controlar subprocesos, programas de sangría automática, mostrar varios archivos a la vez, y mucho más. Los comandos de edición de Emacs operan en términos de caracteres , palabras, líneas, frases, párrafos y páginas, así como expresiones y comentarios en varios lenguajes de programación .

Emacs se llama "auto-documentado", porque en cualquier momento puede utilizar comandos especiales, conocidos como comandos de ayuda, para averiguar cuáles son sus opciones, o para averiguar lo que hace cualquier orden, o para encontrar todos los comandos que pertenecen a una tema determinado.

Emacs es personalizable y puede modificar fácilmente su comportamiento de manera simple. Por ejemplo, si se utiliza un lenguaje de programación en el que los comentarios comienzan con '<**' y terminan con '**>', se le puede decir a emacs que use esas cadenas (ver comments). Por poner otro ejemplo, se puede modificar los movimientos del cursor (arriba, abajo, izquierda y derecha) con las teclas que le resulten más cómodas. Ver customization.

Emacs es extensible lo cual quiere decir que se puede ir más allá de una personalización sencilla y crear completamente nuevos comandos. Los nuevos comandos son simplemente programas escritos en lenguaje Lisp, los cuales son administrados por el propio interprete de Emacs Lisp. Comandos existentes, incluso pueden ser redefinidos en medio de una sesión de edición, sin tener que reiniciar Emacs. La mayoría de los comandos de edición de Emacs están escritos en Lisp; las pocas excepciones podrían haber sido escritos en Lisp pero por eficiencia se ha usado C. La escritura es una extensión de programación, pero los no programadores pueden utilizarla sin problemas.

2 Obtención de ayuda desde Emacs

Emacs tiene un extenso sistema de ayuda incorporado, pero se supone que sabe cómo manipular ventanas y búferes de Emacs. CTRL-h t comienza un tutorial interactivo que se puede enseñar a los principiantes los fundamentos de Emacs en unos pocos minutos. Ctrl-H a ayuda a encontrar una orden dada su funcionalidad, Ctrl-H c describe el efecto de un carácter determinado, y Ctrl-H f describe una determinada función de Lisp especificadando su nombre.

Esta documentación cubre GNU Emacs, que incluye paquetes especiales para manejar el correo lectura (RMail) y de envío de correo (Mail); esbozar edición (Outline); compilar (Compile); corriendo sub-shells dentro de las ventanas de Emacs (Shell); la ejecución de un bucle de read-eval-print (Lisp-Interaction-Mode), la psicoterapia automatizado (en serio. Se llama Doctor), y mucho más.

3 Opciones

De interés general las opciones de Emacs:

--file file, --find-file file, --visit file
    Lo mismo que especificar el archivo directamente como un argumento .

+number
    Ir a la línea especificada por el número (no insertar espacio entre el signo "+" y el número).
    Esto se aplica sólo al siguiente archivo especificado.

+line:column
    Ir a la línea y columna especificada

-q, --no-init-file
    No cargue un archivo de inicio.

-no-site-file
    No cargue el archivo de inicio de todo el sitio.

--no-desktop
    No cargue un escritorio guardado.

--no-splash
    No muestre una pantalla de bienvenida durante el inicio.

--debug-init
    Habilitar el depurador durante el procesamiento de inicialización de ~/.emacs.
    Esto es útil para depurar problemas en el archivo de inicio.

-u user, --user user
    Cargar el archivo de unicio del usuario especificado

-t archivo, --terminal archivo
    Utilizar el archivo especificado como terminal en lugar de utilizar la entrada/salida estándar.
    Este debe ser el primer argumento especificade en la línea de comandos.

--demonio
    Iniciar Emacs como un demonio lo que permite al servidor Emacs servidor la desconexión de al
    terminal. A continuación, puede utilizar el comando emacsclient para conectarse al servidor.

--versión
    Mstrar información de la versión de emacs y salir.

--help
    Mostrar un mensaje de auyda y salir

Las siguientes opciones son lisp-oriented:

-f function, --funcall function
   Ejecutar una función lisp

-l file, --load file
   Cargar el código lisp a en archivo "file"

-eval expr, --execute expr
   Evaluar la expresión lisp "expr"

Las siguientes opciones son útiles cuando se ejecuta Emacs como editor de lotes:

--batch
   Editar en modo batch. El editor enviará mensajes de error estándar. Debe utilizar
   las opciones -l y -f para especificar los archivos a ejecutar y las funciones a llamar

--script file
   Ejecutar archivo como un script lisp de Emacs.

--insert file
   Inserta el contenido del archivo en el búfer actual.

--kill
   Exit Emacs mientras está en modo batch.

-L directory, --directory directory
   Añadir "directory" a la lista de directorios donde Emacs busca archivos Lisp.

4 Utilizando emacs con las X

Emacs está diseñado para funcionar bien con el sistema X Window. Si ejecuta Emacs en X Windows, creará su propia ventana para que se muestre. Probablemente querrá ejecutarlo como un proceso en segundo plano para que pueda seguir utilizando su ventana original. Emacs se puede iniciar con los siguientes interruptores relacionados con X:

--name nombre
   Especificar el nombre que se debe asignar a la ventana inicial de Emacs.
   Esto controla buscar recursos X, así como el título de la ventana.

-T nombre, --title nombre
   Especificar el título de la ventana inicial de las X.

-r, -rv, --reverse-video
   Mostrar la ventana de Emacs en vídeo inverso.

-fn font, --font font
   Establecer la fuente de la ventana de Emacs al especificado por el tipo de letra.
   Va a encontrar los diferentes tipos de letra X en el directorio /fonts/usr/lib/X11.
   Tenga en cuenta que Emacs sólo aceptará fuentes de ancho fijo.
   En virtud de los convenios de la versión X11-4 de la fuente de nombres, cualquier
   tipo de letra con el valor "m" o "c" en el campo undécima del nombre de la fuente
   es una fuente de ancho fijo. Fuentes cuyo nombre son de la forma widthxheight son
   generalmente de ancho fijo, como es el tipo de letra fijo.

--xrm sources
   Establecer recursos X.

--color, -color=mode
   Anular el modo de color de carácter terminales; por defecto del modo de `auto ',
   y también puede ser`no', `auto',`siempre', o `ansi8'.

-bw pixels, --border-width pixels
   Establecer el ancho del borde de la ventana de Emacs que el número de píxeles
   especificados por píxeles. Por defecto es uno de píxeles en cada lado de la ventana.

-ib pixels, --internal-border pixels
   Establecer el ancho del borde interno de la ventana para el número de píxeles especificados
   por píxeles. Por defecto es uno de píxeles de relleno en cada lado de la ventana.

-g geometry, --geometry geometry
   Ajuste de la anchura de ventana de Emacs, la altura y la posición como se especifica.
   La especificación de la geometría está en el formato estándar de X; ver X (7) para más
   información. La anchura y la altura se especifican en caracteres; el valor por defecto
   es de 80 por 24. Consulte las "Opciones de tamaño de la ventana y la posición"  en el Manual
   de Emacs, para obtener información sobre cómo interactúan con tamaños de ventana selección
   y anulación de la barra de herramientas y la barra de menús.

-lsp pixels, --line-spacing pixels
   El espacio adicional para poner entre las líneas.

-vb,  --vertical-scroll-bars
   Activar barras de desplazamiento verticales.

-fh, --fullheight
   Hacer el primer cuadro tan alto como la pantalla.

-fs, --fullscreen
   Hacer la primera pantalla a marco completo.

-fw, --fullwidth
   Hacer el primer cuadro tan ancho como la pantalla.

-mm, --maximized
   Maximizar el primer fotograma, como "-fh -fw".

-fg color, --foreground-color color
   En las pantallas a color, ajustar color del texto. Utilice el comando *Mx list-colors-display*
   para obtener una lista de los esquemas de color.

-bg color, --background-color color
   En las pantallas a color, establecer el color de fondo de la ventana.

-bd olor, --border-color color
   En las pantallas a color, ajustar el color del borde de la ventana.

-cr color, --cursor-color color
   En las pantallas a color, establecer el color del cursor de texto de la ventana.

-ms color, --mouse-color color
   En las pantallas acolor, establecer el color del cursor del ratón de la ventana.

-d displayname, --display displayname
   Crear la ventana de Emacs en la pantalla especificada por displayname. Debe ser
   la primera opción especificada en la línea de comandos.

-nbi, --no-bitmap-icon
   No utilice la imagen de GNU para el icono Emacs.

--iconic
   Iniciar Emacs minimizado.

-nbc, --no-blinking-cursor
   No utilizar parpadeo del cursor.

-nw, --no-window-system
   Dice a emacs que no cree un marco gráfico. Si utiliza este parámetro al invocar Emacs
   desde una ventana de xterm, la visualización se realiza en esa ventana.  Si utiliza este
   parámetro al invocar Emacs desde una ventana de xterm, la visualización se realiza en
   esa ventana.

-D, --basic-display
   Esta opción desactiva algunas funciones de visualización; utilizarlo para la depuración de Emacs.

5 Configuración de los valores predeterminados de Emacs para X

Puede establecer valores por defecto para las X de Emacs en su archivo .Xresources. Utilice el siguiente formato:

emacs.keyword:value

Donde el valor especifica el valor por defecto de la palabra clave. Emacs le permite configurar los valores predeterminados para las siguientes palabras clave:

background
   Para pantallas de color, establece el color de fondo de la ventana.
bitmapIcon
   Si el valor bitmapIcon está activado, la ventana se iconifica.
borderColor
   Para pantallas de color, define el color del borde de la ventana.
borderWidth
   Establece el ancho del borde de la ventana en píxeles.
cursorColor
   Para pantallas de color, establece el color del cursor de texto de la ventana.
cursorBlink
   Especifica si se debe hacer la intermitencia del cursor. El valor por defecto
   está activada. Utilice apagado o falso para cursor parpadeante apagado.
font
   Establece la fuente del texto de la ventana.
foreground
   Para pantallas de color, establece el color del texto de la ventana.
fullscreen
   El tamaño de pantalla completa deseada. El valor puede ser uno de fullboth,
   maximizada, fullwidth, o fullheight, que corresponden a las opciones de línea de
   comandos `-fs ',` -mm', `-fw ', y` -fh', respectivamente. Tenga en cuenta que
   esto se aplica a la trama inicial solamente.
geometry
   Establece la geometría de la ventana de Emacs (como se describe más arriba).
iconName
   Establece el nombre del icono para el icono de la ventana de Emacs.
internalBorder
   Establece el ancho del borde interno de la ventana en píxeles.
lineSpacing
   El espacio adicional entre las líneas, en píxeles.
menuBar
   Coloca barras de menú si está activado; no las coloca si está desactivado.
minibuffer
   Colocar minibuffer en este marco. Se utiliza un minibuffer independiente.
paneFont
   Nombre de fuente para los títulos del panel de menú, en versiones que no son
   del kit de herramientas de Emacs.
pointerColor
   Para pantallas de color, establece el color del cursor del ratón de la ventana.
privateColormap
   Si está activado, utilice un mapa de color privado, en el caso en el que es el
   "por defecto visual" de PseudoColor clase y Emacs lo está utilizando.
reverseVideo
   Si el valor está activado, la ventana se visualiza en vídeo inverso.
screenGamma
   Equivale al parámetro `marco de la pantalla gamma '.
scrollBarWidth
   El ancho de la barra de desplazamiento en píxeles, lo que equivale al parámetro
   trama 'scroll-bar-width '.
selectionFont
   nombre de la fuente de los elementos del menú pop-up, en versiones que no son
   el kit de herramientas de Emacs.
selectionTimeout
   Número de milisegundos de espera para una respuesta de selección.
   Un valor de 0 significa que esperar el tiempo que sea necesario.
synchronous
   Arrancar Emacs en modo síncrono. Es útil para depurar problemas X.
title
   Establece el título de la ventana de Emacs.
toolbar
   Número de líneas que se reservan para la barra de herramientas.
useXIM
   Apaga el uso de métodos de entrada X (XIM) si està acttivo.
verticalScrollBars
   Surpime los marcos de las barras de desplazamiento.
visualClass
   Especificar el "visual" que X debe utilizar. Esto le dice cómo manejar X
   colores. El valor debe comenzar con una de color verdadero, PseudoColor,
   DirectColor, StaticColor, escala de grises, y StaticGray, seguido de -
   profundidad, donde la profundidad es el número de planos de color.

6 La Organización de la pantalla de Emacs

En una pantalla gráfica, como en GNU / Linux usando el sistema X Window, Emacs ocupa una "ventana gráfica". En un terminal de texto, Emacs ocupa toda la pantalla del terminal. Vamos a utilizar el marco de término para significar una ventana gráfica o pantalla del terminal ocupado por Emacs. Emacs se comporta de manera muy similar en ambos tipos de marcos. Normalmente comienza con un solo marco, pero se pueden crear marcos adicionales si así lo desea (ver Marcos ).

Cada trama consta de varias regiones distintas. En la parte superior del bastidor es una barra de menú, que le permite acceder a los comandos a través de una serie de menús. En una pantalla gráfica, directamente debajo de la barra de menús es una barra de herramientas, una fila de iconos que realizan los comandos de edición si se hace clic en ellos. En la parte inferior del bastidor es un área de eco, donde se muestran los mensajes informativos, donde se introduce la información cuando Emacs pide.

El área principal de la trama, por debajo de la barra de herramientas (si existe) y por encima del área de eco, se llama la ventana. sistemas de visualización de gráficas suelen utilizar la palabra "ventana" con un significado diferente; pero aquí nos referimos a esas "ventanas gráficas" como "marcos".

Una ventana de Emacs es donde el buffer se muestra (el texto que está editando). En una pantalla gráfica, la ventana posee una barra de desplazamiento en un lado, que se puede utilizar para desplazarse a través de la memoria intermedia. La última línea de la ventana es una línea de modo. Esta muestra diversa información acerca de lo que está pasando en la memoria intermedia, como por ejemplo si hay cambios sin guardar, los modos de edición que están en uso, el número de línea actual, y así sucesivamente.

Al iniciar Emacs, normalmente hay sólo una ventana en el marco. Sin embargo, puede subdividir esta ventana horizontal o verticalmente para crear varias ventanas, cada una de las cuales puede mostrar independientemente un buffer (véase de Windows).

En cualquier momento, una ventana es la ventana seleccionada. En una pantalla gráfica, la ventana seleccionada muestra un cursor más prominente (por lo general sólida y parpadeo); otras ventanas muestran un cursor menos prominente (por lo general una caja hueca). En un terminal de texto, sólo hay un cursor, que se muestra en la ventana seleccionada. El búfer mostrado en la ventana seleccionada se llama el búfer en uso, y es donde ocurre la edición. La mayoría de los comandos de Emacs implícitamente se aplica a la memoria intermedia actual; el texto que se muestra en las ventanas no seleccionadas es sobre todo visible para referencia. Si utiliza varios cuadros en una pantalla gráfica, la selección de un marco en particular selecciona una ventana en esa trama.

Point:     El lugar en el texto donde operan comandos de edición.
Echo area: Los mensajes cortos se encuentran en la parte inferior de la pantalla.
Mode line: Interpretación de la línea de modo.
Menu bar:  Cómo utilizar la barra de menús.

6.1 point

El cursor en la ventana seleccionada se muestra la ubicación donde la mayoría de los comandos de edición entren en vigor, se llama punto. Muchos comandos de Emacs desplazan el punto a diferentes lugares de la memoria intermedia; por ejemplo, puede colocar el cursor haciendo clic en el botón 1 del ratón (normalmente el botón izquierdo) en el lugar deseado.

Por defecto, el cursor en la ventana seleccionada se muestra como un bloque sólido y parece estar en un caracter, pero se debe pensar en como el punto está entre dos caracteres; que está situado delante del carácter de antes del cursor. Por ejemplo, si el texto se ve como "frob" con el cursor sobre el "b", entonces el punto está entre la 'o' y la 'b'. Si inserta el carácter '!' en esa posición, el resultado es 'fro!b', con el punto entre el '!' y la 'b'. De este modo, el cursor permanece sobre la 'b', como antes.

Si está editando varios archivos en Emacs, cada uno en su propio buffer, cada buffer tiene su propio valor del punto. Un buffer que no se muestra actualmente recuerda su valor de punto si más adelante volver a mostrarla. Por otra parte, si un tampón está representada en varias ventanas, cada una de esas ventanas tiene su propio valor del punto.

Ver cursor de visualización , para las opciones que controlan la forma en Emacs muestra el cursor.

6.2 Area de eco

La línea en la parte inferior de la pantalla es el área de eco. Se utiliza para mostrar pequeñas cantidades de texto para diversos fines.

El área de eco se llama así porque una de las cosas que se utiliza para hacer eco, lo que significa que muestra los caracteres de un comando de caracteres múltiples a medida que escribe. comandos de un solo carácter, no se repiten. Comandos de varios caracteres (véase Keys) se repiten si hace una pausa de más de un segundo mientras se escribe un comando. Emacs entonces se hace eco de todos los caracteres de la orden escrita hasta el momento, para que solicite el resto. Una vez que ha comenzado haciéndose eco, el resto del comando se hace eco de inmediato mientras se está escribiendo. Este comportamiento está diseñado para dar a los usuarios expertos una respuesta rápida, al tiempo que a los usuarios vacilantes la máxima retroalimentación.

El área de eco también se utiliza para mostrar un mensaje de error cuando un comando no puede hacer su trabajo. Los mensajes de error pueden ir acompañados de pitidos o mediante el parpadeo de la pantalla.

Algunos comandos muestran mensajes informativos en el área de eco que le diga lo que la orden ha hecho, o para ofrecerle alguna información específica. Estos mensajes informativos, a diferencia de los mensajes de error, no se acompañan con un pitido o el flash. Por ejemplo, C-x significa lo siguiente: mantenga pulsada la tecla CTRL y teclear la x, a continuación, desclicar y pulsar la teclao =. Esto muestra un mensaje que describe el carácter en el punto, su posición en el búfer, y su actual columna en la ventana. Los comandos que tardan mucho tiempo, a menudo muestran mensajes que terminan en '…' mientras están trabajando (a veces también indica cuánto se ha avanzado, como un porcentaje), y agregan "done" cuando hayan terminado.

Los mensajes informativos del área de eco se guardan en un búfer especial llamado Messages. Los buffers no se han explicado todavía; ver "Buffers" para obtener más información sobre ellos. Si se le pasa un mensaje que apareció brevemente en la pantalla, se puede cambiar al buffer message para verlo de nuevo. El buffer Message se limita a un determinado número de líneas, que especifica la variable message-log-max. Ver "Variables" para obtener más información sobre ellas. Más allá de este límite, una línea se elimina desde el principio cada vez que se agrega una nueva línea de mensaje al final.

Ver "Display Custom* para las opciones que controlan la forma en que Emacs usa el área de eco.

El área de eco también se utiliza para mostrar el minibúfer, una ventana especial donde puede que se desea editar argumentos de entrada de comandos, como el nombre de un archivo. Cuando el minibúfer está en uso, el texto que se muestra en el área de eco comienza con un símbolo y aparece el cursor activo dentro del minibúfer, que se considera temporalmente la ventana seleccionada. Siempre se puede salir de la minibuffer escribiendo C-g. Ver "Minibuffer" para obtener más información.

6.3 mode line

La parte inferior de cada ventana es una línea de modo que describe lo que está pasando en el búfer. Cuando sólo hay una ventana, la línea de modo aparece justo encima del área de eco que es la línea siguiente a la última en el marco . En una pantalla gráfica, la línea de modo se dibuja con una apariencia 3D. Emacs también por lo general llega a la línea de modo de la ventana seleccionada con un color diferente que el de las ventanas no seleccionadas con el fin de hacer que se destaque.

El texto que se muestra en la línea de modo tiene el siguiente formato:

cs:ch-fr buf pos line (major minor)

En un terminal de texto, este texto es seguido por una serie de guiones que se extienden hasta el borde derecho de la ventana. Estos guiones se han omitido en una pantalla gráfica.

La cadena cs, el carácter de dos puntos y después el juego de caracteres y el resto de línea utilizada para el búfer en uso, Emacs maneja automáticamente estos valores para usted, pero a veces es útil tener esta información.

cs describe el conjunto de caracteres del texto en la memoria intermedia (ver Coding Systems ). Si se trata de un guión ("-"), indica que no hay carácter especial establecido (con la posible excepción del final de línea de convencion, que se describe en el párrafo siguiente). '=' Significa que no hay ningún tipo de conversión, y por lo general se utiliza para archivos que contengan datos no textuales. Otros caracteres representan diferentes sistemas de codificación; por ejemplo, '1' representa ISO Latin-1.

En una terminal de texto, cs es precedido por dos caracteres adicionales que describen los sistemas de codificación de entrada del teclado y la salida del terminal. Si está utilizando un método de entrada, cs es precedida por una cadena que identifica el método de entrada (ver Métodos de entrada ).

El carácter que sigue a cs es por lo general dos puntos. Si se muestra una cadena diferente, indica una convención no trivial de fin de línea para la codificación de un archivo. Por lo general, las líneas de texto están separados por caracteres de nueva línea en un archivo, pero otras convenciones se utilizan a veces. El convención MS-DOS utiliza un "carriage-return" seguido de un "linefeed"; durante la edición de este tipo de archivos, los cambios de "dos puntos", son a una barra invertida ('\') o '(DOS)', dependiendo del sistema operativo . Otra convención, empleado por viejos sistemasde Macintosh, utiliza un carácter "retorno de carro" en lugar de una nueva línea; durante la edición de este tipo de archivos, los "dos puntos" cambian a una barra diagonal ('/') o '(Mac)'. En algunos sistemas, Emacs muestra '(Unix)' en lugar de los dos puntos para los archivos que utilizan nueva línea como separador de línea.

El siguiente elemento en la línea de modo es la cadena indicada por ch. Esta muestra dos guiones (--) si el búfer mostrado en la ventana tiene el mismo contenido que el archivo correspondiente en el disco; es decir, si el búfer es "no modificado". Si se modifica el buffer, muestra dos asteriscos ("*"). Para "sólo lectura", se muestra % y %% en otros casos.

El carácter después ch es normalmente un guión ("-"). Sin embargo, si el directorio predeterminado para el búfer en uso es en una máquina remota, se muestra en su lugar '@' (ver file-names).

fr da el nombre del marco seleccionado (ver Marcos). Sólo aparece en los terminales de texto. El frame inicial es 'F1'.

buf es el nombre de la memoria intermedia mostrada en la ventana. Por lo general, este es el mismo que el nombre de un archivo que está editando. Ver buffers.

pos indica si hay texto adicional por encima de la parte superior de la ventana, o por debajo de la parte inferior. Si el búfer es pequeño y todo ello es visible en la ventana, pos equivale a "Todo". De lo contrario, es "Top" si usted está en el principio del búfer, "Bot" si usted está buscando al final de la memoria intermedia, o "nn% ', donde nn es el porcentaje de la memoria intermedia por encima de la parte superior de la ventana. Con el modo del Tamaño Indicación, se puede visualizar el tamaño de la memoria intermedia también. Ver Optional mode line .

Line es el carácter "L" seguido del número de línea en el punto del cursor. Se puede visualizar el número de columna actual también, activando el modo Número de columna. Ver Optional mode line .

major es el nombre del modo mayor que se utiliza en la memoria intermedia. modo mayor es un modo de edición principal para el buffer, tal como el modo de texto, el modo Lisp, el modo C, y así sucesivamente. Ver Major modes. Algunos modos mayores muestran información adicional después de que el nombre de modo importante. Por ejemplo, los buffers de compilación y buffers Shell muestran el estado del subproceso.

minor es una lista de algunos de los modos menores habilitados, que son modos de edición opcionales que proporcionan funciones adicionales en la parte superior del modo mayor. Ver minor modes.

Algunas características se enumeran junto con los modos menores y siempre están encendidos, a pesar de que en realidad no son modos menores. 'Narrow' significa que el búfer mostrado tiene la edición limitada a sólo una parte de su texto (ver narrowing). 'Def' significa que se está definiendo actualmente una macro de teclado (ver Keyboard Macros).

Además, si Emacs está dentro de un nivel recursivo de edición, entre corchetes ('[…]') aparecen alrededor de los paréntesis que rodean los modos. Si Emacs es un nivel de edición recursiva dentro de otro, aparecen entre dobles corchetes y así sucesivamente. Dado que los niveles de edición recursiva afectan a Emacs a nivel mundial , tales corchetes aparecen en la línea de modo de cada ventana. Ver Recursive edit.

Puede cambiar la apariencia de la línea de modo, así como el formato de su contenido; ver Optional mode line. Además, la línea de modo es sensible al ratón; clic sobre las diferentes partes de la línea de modo realiza varios comandos. Ver Mode lline mouse.

6.4 Menu bar

Cada Emacs normalmente tiene una barra de menú en la parte superior que se puede utilizar para realizar operaciones comunes. No hay necesidad de enumerarlos aquí, a medida que vayan saliendo se pueden verse con más facilidad.

En una pantalla gráfica, se puede usar el ratón para seleccionar un comando en la barra de menús. Una flecha en el borde derecho de un elemento de menú significa que conduce a un menú subsidiario, o "submenú". A '…' al final de un elemento de menú significa que el comando solicita que proporcione más de entrada antes de mostrar lo que realmente hace.

Algunos de los comandos de la barra de menú tienen las asociaciones de teclas ordinarias así; si es así, una clave de enlace se muestra entre paréntesis después del elemento en sí. Para ver el nombre completo del comando y la documentación para un elemento de menú, teclee C-h k, y luego seleccione la barra de menú con el ratón de la forma habitual (véase Tecla de ayuda ).

En lugar de utilizar el ratón, también puede invocar el primer elemento de la barra de menú pulsando F10 (para ejecutar el comando de menu-bar-open). A continuación, puede navegar por los menús con las teclas de flecha. Para activar un elemento de menú seleccionado, pulse enter; para cancelar la navegación por los menús, pulse escape. En un terminal de texto, puede utilizar la barra de menú escribiendo M-` o F10 (éstos corren el comando tmm-menubar). Esto le permite seleccionar un elemento de menú con el teclado. Una elección provisional aparece en el área de eco . Puede utilizar las teclas de flecha arriba y abajo para desplazarse por el menú a diferentes elementos y, a continuación, puede pulsar ENTER para seleccionar el elemento. Cada elemento del menú también se designa por una letra o dígito (por lo general la inicial de una palabra en el nombre del elemento). Esta letra o dígito se separa del nombre del elemento por ==>. Puede escribir letras o dígitos del elemento para seleccionar el elemento.

7 Tipos de entrada del usuario

La entrada de teclado en Emacs se basa en una versión muy extendida del ASCII . Caracteres simples, como 'a', 'B', '3', '=', y el carácter de espacio (denotado como <SPC>), se introducen tecleando la tecla correspondiente. Los caracteres de control, tales como <RET>, <TAB>, <DEL>, <ESC>, <F1>, <Home> y <left>, también se introducen de esta manera, al igual que ciertas caracteristicas que se encuentran en los teclados no ingleses (véase Internacional ).

Emacs también reconoce los caracteres de control que se introducen mediante las teclas modificadoras. Dos teclas de modificación de uso común son Control (por lo general con la etiqueta Ctrl) y Meta (normalmente con la etiqueta Alt). Por ejemplo, Control-a se introduce manteniendo pulsada la tecla Ctrl mientras pulsa una "a"; se refiere a esto como C-a, para abreviar. Del mismo modo Meta-a, o M-a, para abreviar, se introduce manteniendo pulsada la tecla Alt y presionando "a". Las teclas de modificación también se pueden aplicar a los caracteres no alfanuméricos, por ejemplo, C-F1 o M-left.

También puede escribir caracteres Meta utilizando secuencias de dos caracteres que comienzan con <ESC>. Por lo tanto, se puede introducir M-a escribiendo <ESC> a. Puede introducir C-M a escribiendo <ESC> C-a. A diferencia de Meta, <ESC> se introduce como un carácter independiente. Usted no mantiene presionada la tecla <ESC> mientras se escribe el siguiente carácter; en cambio, pulsando <ESC> lo liberan, a continuación, introduzca el siguiente carácter. Esta función es útil en ciertos terminales de texto, donde la tecla Meta no funciona de forma fiable.

En pantallas gráficas, el gestor de ventanas puede bloquear algunas entradas del teclado, incluyendo M-<TAB>, M-<SPC>, C-M-d y C-M-l. Si usted tiene este problema, puede personalizar el gestor de ventanas para no bloquear las teclas, o "volver a enlazar" los comandos de Emacs afectados (véase Personalización).

Caracteres simples y caracteres de control, así como ciertos insumos no del teclado como clics del ratón, se conocen colectivamente como los eventos de entrada.

8 Llaves

Algunos comandos de Emacs son invocados por un solo evento de entrada; por ejemplo, C-f mueve hacia adelante un carácter en el buffer. Otros comandos tienen dos o más eventos de entrada para invocar, como C-x C-f y C-x 4 C-f.

Una secuencia de teclas, o la tecla para abreviar, es una secuencia de eventos de una o más de entradas que es significativo como una unidad. Si una secuencia de teclas invoca un comando, lo llamamos una llave completa; por ejemplo, C-f, C-x C-f y C-x 4 C-f son todas claves completas. Si una secuencia de teclas no es lo suficientemente largo para invocar un comando, lo llamamos una tecla prefijo; Del ejemplo anterior, vemos que C-x y C-x 4 son teclas prefijo. Cada secuencia de teclas es una tecla completa o una tecla prefijo.

Una tecla prefijo combina con el siguiente evento de entrada para formar una secuencia más larga. Por ejemplo, C-x es una tecla prefijo, por lo que escribir C-x por sí sola no invoca un comando; en cambio, Emacs esperará nuevas entradas (si hace una pausa durante más de un segundo, se hace eco de la llave C-x para que solicite dicha entrada; ver Echo Area ). C-x combina con el siguiente evento de entrada para formar una secuencia de dos eventos, el cual podría ser en sí mismo una tecla prefijo (como C-x 4), o una llave completa (como C-x C-f). No hay límite a la longitud de las secuencias de teclas, pero en la práctica rara vez son más de tres o cuatro eventos de entrada.

No se pueden añadir eventos de entrada en una llave completa. Por ejemplo, porque la C-f es una clave completa, la secuencia de dos eventos C-f C-k es de dos secuencias de teclas, no uno.

Por defecto, las teclas prefijo en Emacs son C-c, C-h, C-x, C-<RET>, C-x @, C-x a, C-x n, Cx r, C-x v, C-x 4, C-x 5, C-x 6, <ESC>, M-g, y M-o. (F1 y F2 son alias para C-h y C-x 6). Esta lista no es inamovible; si personaliza Emacs, se puede hacer nuevas combinaciones prefijo. Incluso se podría eliminar algunas de las normales, aunque esto no es recomendable para la mayoría de los usuarios; por ejemplo, si se quita la definición del prefijo C-x 4, entonces C-x 4 C-f se convierte en una secuencia de teclas. Ver Atajos de teclado . Al escribir el carácter de ayuda (C-h o F1) después de un prefijo de tecla muestra una lista de los comandos que empiezan con ese prefijo. La única excepción a esta regla es <ESC>:<ESC> C-h es equivalente a C-M-h que hace algo completamente distinto. Puede, sin embargo, utilizar F1 para obtener una lista de comandos que comienzan con <ESC>.

9 Teclas y comandos

Emacs no asigna significados a las llaves directamente. En su lugar, Emacs asigna significados a los comandos con nombre, y luego le da las llaves de sus significados mediante la vinculación a los comandos.

Cada comando tiene un nombre elegido por un programador. El nombre se hace generalmente de unas pocas palabras en inglés, separadas por guiones; por ejemplo, next-line or forward-word. Internamente, cada comando es un tipo especial de función Lisp, y las acciones asociadas con el comando se realizan mediante la ejecución de la función.

Los enlaces entre las teclas y comandos se registran en tablas llamadas mapas de teclas. Ver Keymaps. La descripción "C-n mueve verticalmente hacia abajo una línea" pasa por alto una distinción sutil que es irrelevante en el uso ordinario, pero vital para la personalización de Emacs. El comando next-line hace un movimiento vertical hacia abajo. C-n tiene este efecto, ya que se une a la siguiente línea. Si se refine C-n como forward-word, C-n se moverá hacia adelante una palabra en su lugar.

En este manual, vamos a menudo hablar de teclas como C-n como comandos, aunque estrictamente hablando la clave está ligada a un comando. Por lo general, decimos el nombre del comando que en realidad hace el trabajo de paréntesis, después de mencionar la clave que lo ejecuta. Por ejemplo, vamos a decir que "El comando C-n (next-line) mueve el punto verticalmente hacia abajo", lo que significa que la siguiente línea de comandos se mueve verticalmente hacia abajo, y la clave C-n está normalmente ligada a ella. Dado que estamos hablando de personalización, debemos informarle sobre las variables. A menudo, la descripción de un comando dirá: "Para cambiar esta situación, establezca la variable de esto en aquello." Una variable es un nombre que se utiliza para almacenar un valor. La mayor parte de las variables documentadas en este manual están destinados para la personalización: algunos comandos u otra parte de Emacs examina la variable y se comporta de manera diferente de acuerdo con el valor que establezca. Puede ignorar la información sobre las variables hasta que esté interesado en su personalización. A continuación, lea la información básica sobre las variables (ver variables) y la información sobre las variables específicas tendrán sentido.

10 Introducción de Emacs

La manera habitual de invocar a Emacs es con los comandos shell de emacs. Desde una ventana de terminal se ejecuta en el sistema X Window, Emacs puede ejecutar en segundo plano con emacs y; De esta manera, Emacs no se va a atar a la ventana de terminal, por lo que puede utilizar para ejecutar otros comandos.

Cuando Emacs se inicia, el marco inicial es un buffer especial llamado GNU Emacs. Esta pantalla de inicio contiene información acerca de Emacs y vincula a las tareas comunes que son útiles para los usuarios principiantes. Por ejemplo, activando el enlace 'Emacs Tutorial' abre el tutorial de Emacs; Esto hace lo mismo que el comando C-h t (help-with-tutorial). Para activar un vínculo, mover el cursor a el y se presiona <RET>, o haga clic en él con el ratón-1 (el botón izquierdo del ratón).

Usando argumento de comandos, se puede decir a Emacs visitar uno o más archivos en cuanto se pone en marcha. Por ejemplo, emacs foo.txt comienza con un buffer que muestra el contenido del archivo "foo.txt". Esta característica existe principalmente para la compatibilidad con otros editores, que están diseñados para ser lanzados en la shell para sesiones de edición cortos. Si llama Emacs de esta manera, el frame inicial se divide en dos ventanas: una que muestra el archivo especificado, y el otro que muestra la pantalla de inicio. Ver de Windows .

En general, es innecesario e inútil iniciar Emacs de nuevo cada vez que se desea editar un archivo. El método recomendado para usar Emacs es comenzar sólo una vez, justo después de iniciar la sesión, y hacer toda la edición en la misma sesión de Emacs. Ver archivos , para obtener información sobre visitar más de un archivo. Si usa Emacs de esta manera, la sesión de Emacs acumula datos de valor, como el histórico de recortes, registros, deshacer la historia y marcar datos, que juntos forman una edición más conveniente. Estas características se describen más adelante en el manual.

Para editar un archivo de otro programa mientras se está ejecutando Emacs, puede utilizar el programa emacsclient para abrir un archivo en la sesión de Emacs existente. Ver Emacs servidor .

Emacs acepta otros argumentos de línea de comandos que le indiquen para cargar ciertos archivos Lisp, donde poner el frame inicial, y así sucesivamente. Ver Emacs Invocación .

Si la variable inhibit-startup-screen no existe, Emacs no muestra pantalla de inicio. En ese caso, si se especifican uno o más archivos en la línea de comandos, Emacs simplemente muestra los archivos; de lo contrario, muestra un búfer llamado scratch, que se puede utilizar para evaluar expresiones Emacs Lisp interactivamente. Ver Lisp Interaction . Puede establecer inhibit-startup-screen mediante personalización de la variable o editando el archivo de inicio (ver Init File) .

También puede forzar Emacs para mostrar un archivo o directorio en el arranque estableciendo la variable initial-buffer-choice en un valor. En ese caso, incluso si se especifica uno o más archivos en la línea de comandos, Emacs se abre pero no los muestra. El valor de initial-buffer-choice debe ser el nombre del archivo o directorio deseado.

11 Salir de Emacs

C-x C-c

Matar Emacs (save-buffers-kill-terminal).

C-z

En un terminal de texto, ésto suspende Emacs; en una pantalla gráfica, "minimiza" el marco seleccionado (suspend-emacs).

Matar Emacs significa que termina el programa Emacs. Para ello, se escribe C-x C-c (save-buffers-kill-terminal). Una secuencia de teclas de dos caracteres se utiliza para hacer que sea más difícil para escribir por accidente. Si hay algunos archivos modificados cuando se escribe C-x C-c, Emacs primero se ofrece para salvar estos buffers. Si usted no los guarda todos, pide una confirmación de nuevo, ya que se perderán los cambios no guardados. Emacs también pide confirmación si algun sub-proceso está aún en marcha, ya que matar a Emacs también matará a los subprocesos (véase Shell ).

C-x C-c se comporta especialmente si está usando Emacs como un servidor. Si se escribe a partir de un "marco de cliente", se cierra la conexión del cliente. Ver Emacs servidor .

Emacs puede, opcionalmente, registrar cierta información de la sesión cuando se mata, tales como los archivos que estaban de visita en el momento. Esta información estará disponible la próxima vez que inicie Emacs. Ver ahorro de sesiones de Emacs. Si el valor de la variable confirm-kill-emacs es non-nil, C-x C-c asume que su valor es una función de predicado, y llama a esa función. Si el resultado de la llamada de función no es nula , la sesión se mató, de lo contrario Emacs continúa funcionando. Una práctica función que se utiliza como valor es la función confirm-kill-emacs en yes-or-no-p. El valor por defecto de confirm-kill-emacs es nil.

Para matar a Emacs sin que se pida nada es Mx kill-emacs.

C-z es la instrucción suspend-frame. En una pantalla gráfica, esto minimiza comando (o) iconifies el marco de Emacs seleccionado, ocultándolo de una manera que le permite llevar de nuevo a la pantalla más tarde (el cómo se produce este escondite depende del sistema de ventanas). En un terminal de texto, el comando de la C-z suspende Emacs, detener temporalmente el programa y devolver el control al proceso padre (generalmente a la shell); en la mayoría de las shells, se puede reanudar después de suspender Emacs con los comandos %emacs.

Las terminales de texto por lo general disponen de ciertos caracteres especiales cuyo significado es matar o suspender el programa que está ejecutando. Esta característica terminal se apaga mientras está en Emacs. Los significados de C-z y C-c C-x como teclas en Emacs se inspiraron en el uso de C-z y C-c en varios sistemas operativos como los caracteres para detener o matar a un programa, y es su única relación con el sistema operativo. Puede personalizar estas teclas para ejecutar comandos de su elección (ver Mapas de teclas ).

12 Los comandos básicos de edición

Las siguientes secciones explican los conceptos básicos de cómo introducir texto, hacer correcciones, y guardar el texto en un archivo. Si este material es nuevo para usted, se sugiere ejecutar por primera vez Emacs y aprender mediante el práctico tutorial, escribiendo C-h t (help-with-tutorial).

Inserción de texto:     Inserción de texto simplemente escribiendo.
Mover cursor:           Mover el cursor al lugar donde desea cambiar algo.
Borrado:                Borrado y matando texto.
Deshacer:               Cómo deshacer los cambios recientes en el texto.
Archivos:               La visita, crear y guardar archivos.
Ayuda:                  Què realiza cada comando.
Las líneas en blanco:   Creación y borrado de líneas en blanco.
Líneas de continuación: Cómo Emacs muestra líneas demasiado ancha para la pantalla.
Posición Info:          ¿En qué línea, fila o columna está el cursor?
Argumentos:             Los argumentos numéricos para repetir un comando N veces.
La repetición:          Repetir el comando anterior rápidamente.

12.1 Inserción de texto

Puede insertar un carácter gráfico ordinario (por ejemplo, 'a', 'B', '3', y '=') escribiendo la clave asociada. Esto agrega el carácter a la memoria intermedia en el punto del cursor y se mueve el punto hacia adelante, por lo que sigue siendo el punto justo después del caractere insertado. Ver Punto .

Para finalizar una línea y empezar una nueva, escriba <RET> (salto de línea). La tecla <RET> se puede marcar Retorno o Intro en el teclado, pero Emacs se refiere a ella como <RET>. Este comando inserta un carácter de nueva línea en el búfer. Si el punto está al final de la línea, el efecto es crear una nueva línea en blanco después; si el punto está en el medio de una línea, la línea se divide en esa posición.

Puede cambiar la forma en Emacs maneja la inserción de texto mediante la activación de los modos menores. Por ejemplo, el modo menor llamado el modo Auto Fill divide líneas automáticamente cuando son ldemasiado largas (ver filling). El modo menor llamado modo de sobreescritura inserta caracteres para reemplazar (sobrescribir) texto existente, en lugar de empujar hacia la derecha. Ver Minor modes.

Sólo los caracteres gráficos se pueden insertar tecleando la clave asociada; otras teclas actúan como comandos de edición y no se insertan. Por ejemplo, <DEL> ejecuta el comando delete-backward-char por defecto (algunos modos se unen a un comando diferente); no se inserta un literal '<DEL>' de caracteres (ASCII código de carácter 127).

Para insertar un carácter no gráfico, o un caracter que su teclado no admite, en primer lugar lo cita escribiendo C-q (quoted-insert). Hay dos formas de usar C-q:

C-q seguido de cualquier carácter no gráfico (incluso CG) inserta ese carácter.
    Por ejemplo, Cq <DEL> inserta un '<DEL>' carácter literal.
C-q seguido de una secuencia de octales inserta el carácter con el código de
    carácter octal especificado. Se puede utilizar cualquier número de octales.
    Si el carácter de terminación es <RET>, y <RET> sólo sirve para terminar
    la secuencia. Cualquier otro no dígito termina la secuencia y luego actúa
    como entrada normal; por lo tanto, C-q 1 0 1 B inserta 'AB'. El uso de
    secuencias octales se desactiva en el modo ordinario de sobrescritura no
    binario, para darle una forma conveniente de insertar un dígito en lugar de
    sobrescribir con él.

Para utilizar decimal o hexadecimal en lugar de octal, establecer la variable read-quoted-char-radix a 10 o 16. Si la base es 16, las letras A a F sirven como parte de un código de carácter, como si fueran dígitos. Case se ignora.

Como alternativa, puede utilizar el comando C-x 8 <RET> (insert-char). Esto pregunta por el caracter del nombre del código Unicode en el punto, usando el minibúfer. Si introduce un nombre, el comando proporciona la terminación (ver Finalización ). Si introduce un código de punto, debería ser como un número hexadecimal (la convención para Unicode), o un número con una base especificada, por ejemplo, #o23072 (octal). El comando a continuación, inserta el carácter correspondiente en la memoria intermedia. Por ejemplo, ambos de los siguientes insertan el símbolo de infinito (Unicode código de puntos U + 221E):

Cx 8 <RET> infinity <RET>
Cx 8 <RET> 221e <RET>

Un argumento numérico C-q o C-x 8 <RET> especifica cuántas copias del carácter para insertarlo (ver Argumentos ).

12.2 Cambio de la posición del punto

Para hacer algo más que insertar caracteres, tienes que saber cómo mover el punto (ver Punto). Los comandos de teclado C-f, C-b, C-n, y C-p se mueven hacia la derecha, izquierda, abajo y arriba, respectivamente. También puede mover el punto con las teclas de flecha; sin embargo, muchos usuarios de Emacs encuentran que es más lento usar las teclas de flecha que las teclas de control, porque necesita mover su mano al área del teclado donde se encuentran esas teclas.

También puede hacer clic con el botón izquierdo del ratón para mover el punto a la posición en la que ha hecho clic. Emacs también proporciona una variedad de comandos de teclado adicionales que mueven el punto de forma más sofisticada.

C-f
   Avanzar un carácter (forward-char).

<right>
   Desplaza el cursor un caracter (right-char) como C-f a excepción de escritura en árabe.

C-b
   Se desplaza hacia atrás un carácter (backward-char).

<left>
   Desplaza el cursor un caracter a  la izquierda (left-char) omo C-b, excepto en árabe.

C-n, <down>
   Bajar una línea de pantalla (next-line). Si se lanza en medio de una línea, que se mueve
   a la mitad de la próxima.

C-p, <up>
   Mover una línea hacia arriba la pantalla (previous-line). Cnserva posición dentro de la línea.

C-a, <Home>
   Mover al principio de la línea (move-beginning-of-line).

C-e, <end>
   Ir al final de la línea (move-end-of-line).

M-f
   Se desplaza hacia adelante una palabra (forward-word).

C-<right>
   Desplaza el cursor una palabra hacia la derecha (right-word) como M-f.

M-b
   Se desplaza hacia atrás una palabra (backward-word).

C-<left
   Desplaza le cursor una palabra a la izquierda (left-word) como M-f.

M-r
   Sin mover el texto en la pantalla, cambiar la posición del punto en el margen izquierdo
   de la mayor parte lejos de la línea central de la ventana de texto.

M-<
   Mover a la parte superior de la memoria intermedia (beginning-of-buffer).

M->
   Ir al final de la memoria intermedia (end-of-buffer).

C-v, <AvPág>
   Desplazar una pantalla hacia adelante (scroll-up-command).

M-v, <RePág>
   Desplazar una pantalla hacia atrás (scroll-down-comando).

M-g c
   Lee un número n y mueve el punto a la posición n.

M-g M-g, M-g g
   Lee un número n y mueve el punto al comienzo de la línea número n (goto-line).
   Línea 1 es el comienzo de la memoria intermedia. Si el punto está sobre o justo
   después de un número en la memoria intermedia, que es el valor predeterminado para
   n. Sólo tienes que escribir <RET> en el minibúfer para usarlo. También puede
   especificar n dando M-g M-g un argumento prefijo numérico. Ver buffer de selección.

M-g<TAB>
   Lee un número n y pasar a la columna n en la línea actual. La columna 0 es la columna
   más a la izquierda.

C-x C-n
   Utilice la columna actual del punto que la columna objetivo semipermanente para C-n y C-p
   (set-goal-column).

C-u C-x C-n
   Cancelar la columna meta. De aquí en adelante, C-n y C-p intentan preservar la
   posición horizontal, como de costumbre.

Cuando una línea de texto en la memoria intermedia es más largo que el ancho de la ventana, Emacs normalmente la muestra en dos o más líneas de la pantalla. Para mayor comodidad, C-n y C-p mueven el punto de líneas de la pantalla, al igual que las teclas equivalentes abajo y hacia arriba. Puede forzar a estos comandos para moverse de acuerdo a las líneas lógicas (es decir, de acuerdo con las líneas de texto en el búfer) estableciendo la variable de line-move-visual a cero; si una línea lógica ocupa varias líneas de la pantalla, el cursor salta a continuación sobre las líneas de pantalla adicionales.

A diferencia de C-n y C-p, la mayor parte de los comandos de Emacs actuan sobre lineas lógicas. Por ejemplo, C-a (move-beginning-of-line) y C-e (se mueve de un extremo de la línea), respectivamente retroceder al comienzo y al final de la línea lógica. Cada vez que nos encontramos con los comandos que trabajan en líneas de la pantalla, como C-n y C-p, vamos a destacar este hecho.

Cuando line-move-visual es nil, también se puede establecer la variable track-eol a un valor que non-nil. A continuación, C-n y C-p, cuando se inicia al final de la línea lógica, se mueven hasta el final de la próxima línea lógica. Normalmente, track-eol es nil.

C-n normalmente se detiene al final de la memoria intermedia cuando lo utiliza en la última línea en el búfer. Sin embargo, si se establece la variable siguiente línea-add-saltos de línea a un valor non-nil, C-n en la última línea de un buffer crea una línea adicional al final y se mueve hacia abajo en él.

12.3 Borrado de texto

<DEL>, <Retroceso>  Eliminar carácter antes del punto (delete-backward-char).
<DEL>               Eliminar el carácter después del punto (delete-forward-char).
C-d                 Eliminar el carácter después del punto (delete-char).
C-k                 Eliminar hasta el final de la línea (kill-line).
M-d                 Eliminar hasta el final de la palabra (kill-word).
M-<DEL>             Eliminar hasta el principio de la palabra anterior (backward-kill-word).

El comando <DEL> (delete-backward-char) elimina el carácter anterior al punto, moviendo el cursor y los caracteres posteriores hacia atrás. Si el punto estaba al principio de una línea, se borra la línea anterior, uniendo esta línea a la anterior.

Sin embargo, si la región está activa, <DEL> elimina el texto de la región.

En la mayoría de los teclados, <Del> se etiqueta Retroceso, pero se conoce como <DEL> en este manual. No se debe confundir <DEL> con la tecla de borrado, esta será solo mencionada. En algunas terminales de texto, Emacs no reconoce la tecla <DEL> correctamente.

El comando "delete" (delete-forward-char) borra en el "sentido contrario": elimina el carácter después del punto, es decir, el carácter bajo el cursor. Si el punto se encontraba al final de una línea, ésta se une a la línea siguiente a ésta. Como <DEL>, se elimina el texto de la región para que la región activa (ver Macros).

C-d (delete-char) borra el carácter después del punto, similar a borrar, pero independientemente si la región está activa.

Ver Supresión , para obtener información más detallada acerca de los comandos de eliminación anteriores.

C-k (kill-line) borra una línea a la vez. Si se teclea C-k al principio o en medio de una línea, mata a todo el texto hasta el final de la línea. Si se teclea C-k al final de una línea, une esa línea con la siguiente línea. Ver Kill , para obtener más información sobre C-k y comandos relacionados.

12.4 deshacer cambios

C-/
   Deshacer una entrada de los registros. Deshacer por lo general.

C-x u, C-_
   Lo mismo.

Emacs registra una lista de los cambios realizados en el texto del búfer, por lo que puede deshacer los cambios recientes. Esto se hace usando el comando de deshacer, que está unido a C-/ (así como C-x u y C-_). Normalmente, este comando deshace el último cambio, el punto se mueve de nuevo a donde estaba antes del cambio. El comando de deshacer se aplica sólo a los cambios en la memoria intermedia; no se puede utilizar para deshacer el movimiento del cursor.

Aunque cada comando de edición por lo general hace una entrada separada en los registros de deshacer, comandos muy simples pueden ser agrupados juntos. A veces, una entrada puede cubrir sólo parte de un comando complejo.

Si repite C-/ (o su alias), cada repetición deshace otra, el cambio anterior, de vuelta hasta el límite de la información de deshacer disponible. Si ya se han deshecho todos los cambios registrados, el comando deshacer muestra un mensaje de error y no hace nada.

Para obtener más información sobre el comando deshacer, véase Undo.

12.5 archivos

El texto que se inserta en un búfer de Emacs dura sólo mientras dura la sesión de Emacs. Para mantener cualquier texto de forma permanente, debe ponerlo en un archivo.

Supongamos que hay un archivo llamado test.emacs en su directorio personal. Para empezar a editar este archivo en Emacs:

C-x C-f test.emacs <RET>

Aquí el nombre del archivo se da como un argumento para el comando C-x C-f (find-file). Este comando usa el minibúfer para leer el argumento y pulsee <RET> (la tecla Retorno/Enter) para terminar la entrada Ver Minibuffer para más información sobre el minibúfer.

Emacs obedece este comando visitando el archivo: crea un buffer, copia el contenido del archivo en la memoria intermedia, y muestra el buffer para la edición. En caso de alterar el texto, puede guardar el nuevo texto en el archivo tecleando C-x C-s (save-buffer). Esto copia el contenido del búfer alterado de nuevo en el archivo test.emacs, y lo hace permanente. Hasta que guarde, el texto modificado existe sólo dentro de Emacs, y el archivo test.emacs no se altera.

Para crear un archivo, sólo hay que visitar con C-x C-f como si ya existía. Esto crea un búfer vacío, en el que se puede insertar el texto que desea colocar en el archivo. Emacs en realidad crea el archivo de la primera vez que se guarda el búfer con C-x C-s.

Para conocer más en profundidad acerca de cómo Emacs usa archivos, ver Files.

12.6 Ayuda

Si se olvida de lo que lo hace una llave, se puede encontrar tecleando C-h k (describe-key), seguido de la tecla de interés; por ejemplo, C-h k C-n le dice lo que hace C-n.

La tecla prefijo C-h significa "ayuda". La tecla F1 sirve como un alias para C-h. Aparte de C-h k, hay muchos otros comandos de ayuda que proporcionan diferentes tipos de ayuda.

Para obtener más información en profundidad sobre Emacs Ayuda, consulte la Ayuda.

12.7 Las líneas en blanco

Aquí están los comandos especiales y técnicas para insertar y borrar líneas en blanco:

C-o
   Inserte una línea en blanco después del cursor (*open-line*).
C-x C-o
   Eliminar todas menos una de muchas líneas en blanco consecutivos (*delete-blank-lines*).

Hemos visto cómo <RET> (salto de línea) se inicia una nueva línea de texto. Sin embargo, puede ser más fácil ver lo que está haciendo si primero hacer una línea en blanco y luego insertar el texto deseado en ella. Esto es fácil de hacer con la tecla de C-o (open-line), que inserta un salto de línea después del punto, pero deja el punto en frente de la nueva línea. Después de C-o, escriba el texto de la nueva línea.

Usted puede hacer varias líneas en blanco escribiendo C-o varias veces, o dándole un argumento numérico que especifica el número de líneas en blanco para hacer. Ver Argumentos. Si usted tiene un prefijo de ajuste, el comando C-o inserta el prefijo de ajuste en la nueva línea, si es escrito al principio de una línea. Ver Llenar Prefijo .

La forma más fácil de deshacerse de las líneas adicionales en blanco es con el comando C-x C-o (delete-blank-lines). Si el punto se encuentra dentro de una racha de varias líneas en blanco, C-x C-o borra todos menos una de ellas. Si el punto está en una sola línea en blanco, C-x C-o lo elimina. Si el punto está en una línea que no esté en blanco, C-x C-o elimina todas las siguientes líneas en blanco, si es que existen.

12.8 Las líneas de continuación

A veces, una línea de texto en la memoria intermedia (una línea lógica) es demasiado largo para caber en la ventana, y Emacs lo muestra como dos o más líneas de la pantalla. Esto se conoce como el ajuste de línea o la continuación y la línea lógica de largo se llama una línea continua. En una pantalla gráfica, Emacs indica el ajuste de línea con pequeñas flechas dobladas en los márgenes izquierdo y derecho de la ventana. En un terminal de texto, Emacs indica el ajuste de línea, mostrando un carácter '\' en el margen derecho.

La mayoría de los comandos que actúan sobre líneas actúan en las líneas lógicas, no líneas de pantalla. Por ejemplo, C-k elimina una línea lógica. Como se describió anteriormente, C-n (next-line) y C-p (previous-line) son excepciones especiales: se mueven hacia abajo y hacia arriba, respectivamente, por una línea de pantalla (ver punto en movimiento ).

Emacs puede opcionalmente truncar las líneas lógicas largas en lugar de seguir ellas. Esto significa que cada línea lógica ocupa una sola línea de la pantalla; si es más larga que el ancho de la ventana, no se muestra el resto de la línea. En una pantalla gráfica, una línea truncada se indica mediante una pequeña flecha recta en la derecha; en un terminal de texto, se indica por un carácter '$' en el margen derecho. Ver Línea de truncamiento .

Por defecto, las líneas continuas se envuelven en el borde derecho de la ventana. Dado que la envoltura se puede producir en medio de una palabra, las líneas continuas pueden ser difíciles de leer. La solución habitual es la de romper las líneas antes de que lleguen al borde, mediante la inserción de nuevas líneas. Si lo prefiere, puede hacer que Emacs inserte un salto de línea automáticamente cuando una línea se hace demasiado larga, utilizando el modo Auto Fill. Ver Relleno .

A veces, puede que tenga que editar archivos que contienen muchas líneas lógicas largas, y puede no ser práctico romper todas ellas mediante la adición de nuevas líneas. En ese caso, puede utilizar el modo de línea visual, que permite el ajuste de palabras: en lugar de envolver las largas colas exactamente en el borde derecho de la ventana, Emacs los envuelve en los límites de palabras (es decir, el espacio o caracteres de tabulación) más cercana al borde de la ventana derecha. Modo de línea visual también redefine los comandos de edición tales como C-a, C-n, y C-k para operar en las líneas de pantalla en lugar de líneas lógicas. Ver Modo de línea visual .

12.9 Posición de la Información

Aquí hay comandos para obtener información sobre el tamaño y la posición de las partes de la memoria intermedia, y para contar las palabras y líneas.

M-x what-line
   Muestra el número de línea del punto.

M-x line-number-mode, M-x column-number-mode
   Alternar la visualización automática del número de línea y el número de columna actual.
   Ver Optional Mode Line.

M-=
   Mostrar el número de líneas, palabras y caracteres que están presentes en la región
   (count-words-region). Ver Marck para obtener información sobre la región.

M-x count-words
   Mostrar el número de líneas, palabras y caracteres que están presentes en la memoria intermedia.
   Si la región está activa (ver Mark ), mostrar los números para la región en su lugar.

C-x =
   Visualizar el código decarácter del carácter después del punto, posición de carácter de punto
   y columna del punto (*what-cursor-position*).

M-x hl-line-mode
   Activar o desactivar el resaltado de la línea actual. Ver Cursor Display.

M-x size-indication-mode
   Alternar visualización automática del tamaño de la memoria intermedia. Ver  Optional Mode Line.

M-x what-line muestra el número de línea actual en el área de eco . Este comando suele ser redundante, porque el número de línea actual se muestra en la línea de modo (ver Mode line). Sin embargo, si desea obtener, de la memoria intermedia, la línea de modo muestra el número de línea en relación con la porción accesible (ver estrechamiento ). Por el contrario, what-line muestra tanto el número de línea con respecto a la zona estrechada y el número de línea en relación con todo el búfer. M-= (count-words-region) muestra un mensaje que indica el número de líneas, palabras y caracteres en la región (véase Mark para una explicación de la región). Con un argumento prefijo, C-u M-= el comando muestra un recuento de toda la memoria intermedia. El comando M-x count-words hace el mismo trabajo, pero con una convención de llamada diferente. Se muestra un recuento de la región si la región está activa y para el búfer de otra manera. El comando C-x = (what-cursor-position) muestra información sobre la posición actual del cursor y el contenido del búfer en esa posición. Se muestra una línea en el área de eco que tiene este aspecto:

Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53

Después de 'Char:', demuestra el carácter en el búfer en el punto del cursor. El texto dentro de los paréntesis se muestran los códigos decimales, octales y hexadecimal de los caracteres correspondientes; para obtener más información acerca de cómo C-x = muestra información de caracteres, consulte International Chars. Después de 'point=' es la posición del punto como un recuento de caracteres (el primer carácter en el buffer está la posición 1, el segundo carácter es la posición 2, y así sucesivamente). El número después es el número total de caracteres en el buffer, y el número entre paréntesis expresa la posición como un porcentaje del total. Después de 'columna=' es la posición horizontal del punto, en columnas a contar desde el borde izquierdo de la ventana.

Si el buffer se ha reducido, por lo que parte del texto al principio y al final inaccesible temporalmente, C-x = muestra el texto adicional que describe actualmente la gama accesible. Por ejemplo, es posible que aparezca el siguiente:

Char: C (67, #o103, #x43) point=252 of 889 (28%) <231-599> column=0

donde los dos números adicionales dan la posición de carácter más pequeño y más grande que se permita el punto de asumir. Los caracteres entre esas dos posiciones son los accesibles. Ver Narrowing.

12.10 Los argumentos numéricos

En la terminología de las matemáticas y la informática, argumento significa "datos proporcionados a una función u operación". Usted puede dar a cualquier comando de Emacs un argumento numérico (también llamado un argumento prefijo). Algunos comandos interpretan el argumento como número de repeticiones. Por ejemplo, dar C-f un argumento de diez hace que se mueva en adelante diez caracteres en lugar de uno. Con estos comandos, ningún argumento es equivalente a un argumento de uno, y argumentos negativos hacen que se mueva o actuar en la dirección opuesta.

La manera más fácil de especificar un argumento numérico es escribir un dígito o dígitos y/o manteniendo pulsada la META clave. Por ejemplo,

M-5 C-n

se mueve hacia abajo cinco líneas. Las teclas M-1, M-2, y así sucesivamente, así como M–, están ligados a los comandos (argumento dígitos y argumento negativo) que establecen un argumento para el siguiente comando. Meta-- sin dígitos normalmente significa -1.

Si introduce más de un dígito, no es necesario mantener presionada la tecla META para la segunda y siguientes dígitos. Por lo tanto, para moverse hacia abajo cincuenta líneas, el tipo de

M-5 0 C-n

Tenga en cuenta que esto no se inserta cinco copias de '0' y mover una línea hacia abajo, como se podría esperar. El '0' se trata como parte del argumento prefijo.

¿Qué pasa si desea insertar cinco copias de '0'? Tipo M-5 C-u 0. Aquí, C-u "termina" el argumento prefijo, de modo que la siguiente pulsación comienza el comando que desea ejecutar. Tenga en cuenta que este significado de C-u sólo se aplica a este caso. Para el papel habitual de C-u, véase más adelante. En lugar de escribir H-1, H-2, y así sucesivamente, otra forma de especificar un argumento numérico es teclear C-u (universal-argument) seguido de algunos dígitos, o (para un argumento negativo) un signo menos seguido de dígitos. Un signo menos sin dígitos significa normalmente -1.

C-u único que tiene el significado especial de "cuatro tiempos": se multiplica el argumento para el siguiente comando por cuatro, C-u C-u lo multiplica por dieciséis años.. Por lo tanto, C-u C-u C-f mueve hacia adelante dieciséis caracteres. Otras combinaciones útiles son C-u C-n, C-u C-u C-n (bajar una buena fracción de pantalla), C-u C-u C-o (hacer muchas líneas en blanco), y C-u C-k (matar cuatro líneas).

Se puede utilizar un argumento numérico antes de un carácter auto-inserción para insertar múltiples copias del mismo. Esto es sencillo cuando el personaje no es un dígito; por ejemplo, C-u 6 4 a inserta 64 copias del carácter 'a'. Pero esto no funciona para la inserción de dígitos; C-u 6 4 1 especifica un argumento de 641. Puede separar el argumento de la dígitos para insertar con otra C-u; por ejemplo, C-u 6 4 C-u 1 hace insertar 64 copias del carácter '1'.

Algunos comandos les importa si hay un argumento, pero ignoran su valor. Por ejemplo, el comando M-q (fill-paragraph) indenta un parrafo; con un argumento, se justifica el espacio entre palabras del texto también. (Ver Llenado , para más información sobre M-q). Para estos comandos, basta con especificar el argumento con una sola C-u.

Algunos comandos utilizan el valor del argumento como un número de repetición, pero hacen algo especial cuando no hay ningún argumento. Por ejemplo, el comando C-k (kill-line) con el argumento n mata n líneas, incluyendo sus nuevas líneas de terminación. Pero C-k sin argumento es especial: se mata el texto hasta el siguiente salto de línea, o, si el punto está justo al final de la línea, que mata el salto de línea en sí. Por lo tanto, dos comandos C-k sin argumentos puede matar a una línea que no esté en blanco, al igual que C-k con un argumento de uno. Ver Matar , para más información sobre C-k.

Unos comandos tratan C-u diferente a un argumento común. Algunos otros pueden tratar a un argumento de sólo un signo menos diferente a un argumento de -1. Estos casos se describen inusuales cuando se presenten; que existen para hacer un comando individual más conveniente, y están documentados en la cadena de documentación de ese comando.

Usamos el argumento de término de prefijo de hacer hincapié en que se escribe este tipo de argumentos antes de la orden, y para distinguirlos de los argumentos del minibúfer (véase Minibuffer ), y han entrado después de invocar el comando.

12.11 Repetición de un comando

Muchos de los comandos simples, como los que se invoca con una sola tecla o con M-x nombre de comando <RET>, pueden repetirse mediante la invocación de ellas con un argumento numérico que sirve como un contador de repetición (ver Argumentos ). Sin embargo, si el comando que desea repetir solicita una respuesta, o utiliza un argumento numérico de otra manera, este método no funcionará.

El comando C-x z (repeat) proporciona otra manera de repetir un comando de Emacs muchas veces. Este comando repite el comando anterior. Repetir un comando utiliza los mismos argumentos que se utilizaron antes; que no ha leído los nuevos argumentos cada vez.

Para repetir el comando más de una vez, se tipea una z y por cada z se repite el comando una vez más. La repetición termina cuando se escribe un carácter distinto de z, o al pulsar un botón del ratón.

Por ejemplo, suponga que escribe C-u 2 C-d 0 para eliminar 20 caracteres. Puede repetir ese comando (incluyendo su argumento) tres veces adicionales, para eliminar un total de 80 caracteres, tecleando C-x zzz. El primer z C-x repite el comando una vez, y cada z posterior repite una vez más.

13 El Minibuffer

El minibuffer es donde los comandos de Emacs leen argumentos complicados, como nombres de archivos, nombres de buffer, nombres de comandos de Emacs, o expresiones Lisp. Lo llamamos el "minibuffer" porque es un buffer de propósito especial con una pequeña cantidad de espacio en la pantalla. Puede utilizar los comandos de edición de Emacs habituales en el minibúfer para editar el texto argumento.

Minibuffer básica:   El uso básico del minibúfer.
Minibuffer Archivo:  Introducción de nombres de archivo con el minibúfer.
Minibuffer Editar:   Cómo editar en el minibúfer.
Finalización:        Una instalación abreviatura de entrada minibuffer.
Minibuffer Historia: La reutilización de los últimos argumentos del minibúfer.
Repetición:          Si vuelve a ejecutar comandos que utilizan el minibúfer.
Contraseñas:         Introducción de las contraseñas en el área de eco.
Respuestas           En respuesta "sí" o "no" en el área de eco.

13.1 Utilizando el Minibuffer

Cuando el minibuffer está en uso, aparece en la zona de eco, con un cursor. El minibuffer comienza con una indicación, generalmente terminando con dos puntos. El indicador indica qué tipo de entrada se espera y cómo se utilizará. La indicación se resalta con la face del minibúfer.

La forma más sencilla de entrar en un argumento minibuffer es escribir el texto, a continuación, <RET> para enviar el argumento y salir del minibúfer. Como alternativa, puede escribir C-g para salir del minibúfer mediante la cancelación de la orden solicitando el argumento (véase Quitting).

A veces, el indicador muestra un argumento predeterminado, entreparéntesis antes de los dos puntos. Este efecto se usa como argumento y sólo tiene que teclear <RET>. Por ejemplo, los comandos que leen nombres de almacenamiento intermedio por lo general muestran un nombre de búfer como el valor predeterminado; puede escribir <RET> sobre este búfer predeterminado.

Si habilita Minibuffer Electric Default mode, un modo menor global, Emacs oculta el argumento por defecto en cuanto se modifica el contenido del minibúfer (al escribir <RET> ya no presenta dicho defecto). Si alguna vez trae de vuelta el texto del minibuffer original, el indicador muestra una vez más el valor por defecto. Además, si cambia la variable minibuffer-eldef-shorten-default a un valor non-nil, el argumento por defecto se muestra como '[por defecto]' en lugar de '(por defecto por defecto)', ahorra algo de espacio en la pantalla. Para activar este modo menor, se escribe M-x minibuffer-electric-default-mode.

Desde el minibuffer aparece en el área de eco, que puede entrar en conflicto con otros usos del área de eco. Si aparece un mensaje de error o un mensaje informativo se emite mientras que el minibúfer está activo, el mensaje se esconde el minibuffer durante unos segundos, o hasta que escriba algo; entonces el minibúfer vuelve. Mientras que el minibúfer está en uso, las pulsaciones de teclado no se hacen eco.

13.2 Minibúferes para nombres de archivo

Las órdenes como C-x C-f (find-file) utilizan el minibúfer para leer un argumento de nombre de archivo (ver archivos básicos). Cuando se usa el minibúfer para leer un nombre de archivo, por lo general comienza con un texto inicial que termina en una barra. Este es el directorio por defecto. Por ejemplo, se puede comenzar de la siguiente manera:

Find file: /u2/emacs/src/

Aquí, "Find file: 'es el prompt y' u2/emacs/src'es el directorio predeterminado. Si ahora escribe buffer.c como entrada, especifica el archivo de /u2/emacs/src/buffer.c. Ver Find file, para obtener información sobre el directorio predeterminado.

Puede especificar el directorio padre con ..:/a/b/../foo.el es equivalente a /a/foo.el. Como alternativa, puede usar M-<DEL> para matar los nombres de directorio hacia atrás (ver Words).

Para especificar un archivo en un directorio completamente diferente, puede matar a toda la ruta predeterminada con C-a C-k (ver Minibuffer Edit). Como alternativa, puede ignorar el valor por defecto, e introduzca un nombre de archivo absoluto a partir de una barra o una tilde después del directorio predeterminado. Por ejemplo, puede especificar /etc/termcap de la siguiente manera:

Find file: /u2/emacs/src//etc/termcap

Emacs interpreta una doble barra como "ignorar todo antes de la segunda barra en el par". En el ejemplo anterior, U2/emacs/src es ignorado, por lo que el argumento que ha proporcionado es /etc/termcap. La parte ignorada del nombre de archivo se atenúa si el terminal lo permite. (Para desactivar esta regulación, desactivar el modo del archivo File Name Shadow con el comando M-x ile-name-shadow-mode).

Emacs interpreta ~/ como el directorio personal. Por lo tanto, ~/foo/bar.txt especifica un archivo llamado bar.txt, dentro de un directorio llamado foo, que a su vez se encuentra en su directorio personal. Además, ~ id de usuario / significa el directorio personal de un usuario cuyo nombre de usuario es user-id. Cualquier nombre que lleva directorio delante del ~ se tiene en cuenta: por lo tanto, /u2/emacs/~/foo/bar.txt es equivalente a ~/foo/bar.txt.

En MS Windows y MS-DOS sistemas, en los que un usuario no siempre tiene un directorio de inicio, Emacs usa varias alternativas. Para MS Windows, consulte Windows Home . En estos sistemas, la identificación del usuario ~ / constructo sólo se admite para el usuario actual, es decir, sólo si el usuario-id es el nombre de inicio de sesión del usuario actual.

Para evitar que Emacs inserte el directorio por defecto cuando se leen los nombres de archivo, cambiar la variable insert-default-directory a cero. En ese caso, el minibuffer comienza vacío. Sin embargo, los argumentos de nombre de archivo relativos todavía se interpretan con base en el mismo directorio predeterminado.

También puede introducir los nombres de archivos remotos en el minibúfer. Ver Remote files.

13.3 La edición en el Minibuffer

El minibuffer es un búfer de Emacs, aunque un caso peculiar, y los comandos de Emacs habituales están disponibles para la edición argumentos de texto. (El indicador, sin embargo, es de sólo lectura y no se puede cambiar.)

<RET> en el minibuffer sostiene el argumento, no se puede utilizar para insertar un salto de línea. Usted puede hacer eso con C-q C-j, que inserta un carácter de control C-j, que es formalmente equivalente a un carácter de nueva línea (véase el texto Inserción ). Como alternativa, puede utilizar el comando C-o (línea abierta) (ver líneas en blanco ).

Dentro de un minibúfer, las teclas <Tab>, <SPC>, y ? A menudo están vinculados a la terminación de comandos, que permite llenar fácilmente el texto que desee sin tener que escribir todo. Ver Finalización . Al igual que con <RET>, se puede utilizar para C-q para insertar <TAB>, <SPC>, o el cracter '?'.

Por conveniencia, C-a (mover al principio de línea) en un minibuffer mueve el punto al comienzo del argumento de texto, no el comienzo de la indicación. Por ejemplo, esto le permite borrar todas los argumentos con C-a C-k.

Cuando el minibúfer está activo, el área de eco se trata como una ventana de Emacs ordinario. Por ejemplo, puede cambiar a otra ventana (C-x o), editar el texto allí, a continuación, volver a la ventana de minibúfer para terminar el argumento. Incluso puede cortar texto en otra ventana, volver a la ventana del minibúfer y pegar texto en el argumento. Hay algunas restricciones en la ventana de minibúfer por ejemplo, no se puede dividir. Ver de Windows .

Normalmente, la ventana de minibúfer ocupa una sola línea de la pantalla. Sin embargo, si se agrega el valor de texto de dos o más líneas 'en el minibúfer, se expande automáticamente para acomodar el texto. La variable resize-mini-windows controla el cambio de tamaño de la minibuffer. El valor por defecto es de sólo crecer, lo que significa que es el comportamiento que acabamos de describir. Si el valor es t, la ventana de minibúfer también se reducirá de forma automática si se quita algunas líneas de texto desde el minibúfer, hasta llegar a un mínimo de una línea de la pantalla. Si el valor es cero, la ventana de minibúfer nunca cambia de tamaño automáticamente, pero se pueden utilizar los comandos habituales en las ventanas de cambio de tamaño en el mismo (véase de Windows ).

La variable max-mini-window-height controla la altura máxima para cambiar el tamaño de la ventana de minibúfer. Un número de coma flotante especifica una fracción de la altura del bastidor; un número entero especifica el número máximo de líneas; nil no cambia de tamaño automáticamente la ventana de minibúfer. El valor por defecto es 0,25.

El comando C-M-v en el minibúfer se desplaza el texto de ayuda de comandos que muestran el texto de ayuda de cualquier tipo en otra ventana. También se puede desplazar el texto de ayuda con M-prior y M-next (o el equivalente, M-PageUp y M-AvPág). Esto es especialmente útil con una larga lista de posibles terminaciones. Ver otra ventana .

Emacs normalmente no permite la mayoría de los comandos que usan el minibúfer mientras que el minibúfer está activo. Para permitir este tipo de comandos en el minibúfer, establece la variable enable-recursive-minibuffers a t.

Cuando no está activo, el minibúfer está en modo minibuffer-inactiva, y haciendo clic en el ratón-1 no muestra los Messages. Si utiliza un marco dedicado para minibúferes, Emacs también reconoce que hay ciertas claves, por ejemplo n para realizar un nuevo frame.

13.4 Completar

A menudo se puede utilizar una función llamada finalización para ayudar a entrar en los argumentos. Esto significa que después de escribir parte del argumento, Emacs puede rellenar el resto, o parte de el, en base a lo que se ha escrito hasta el momento.

Cuando la finalización está disponible, ciertas teclas (por lo general <TAB>, <RET> y <SPC>) actuan en el minibuffer y llevan a la terminación de los comandos especiales (ver comandos de Finalización). Estos comandos intentan completar el texto en el minibúfer, basado en un conjunto de alternativas de terminación proporcionadas por el comando que solicita el argumento. Generalmente, usted puede escribir ? Para ver una lista de alternativas para completar.

A pesar de que la terminación se realiza generalmente en el minibúfer, la función es a veces disponibles en buffers ordinarios también. Ver Símbolo de finalización .

Completar:     Ejemplos del uso de completar.
Comandos:      lista de comandos de completar.
Salir:         Finalización y minibuffer presentación de texto.
Estilos:       ¿Cómo se eligen estilos de terminación.
Opciones:      Opciones para su conclusión.

13.4.1 Ejemplo de completar

Un ejemplo sencillo: M-x usa el minibúfer para leer el nombre de un comando, por lo que la finalización hace coincidir el texto minibuffer con los nombres de los comandos de Emacs. Supongamos que se desea ejecutar el comando auto-fill-modo. Se puede hacer escribiendo* M-x auto-fill-mode <RET>*, pero es más fácil de usar el modo completar.

Si escribe M-x au <TAB>, el <TAB> busca alternativas de terminación (en este caso, los nombres de comandos) que comienzan con 'au'. Hay varios, incluyendo auto-fill-mode y autoconf-mode, pero todos ellos comienzan con au, por lo que el 'au' en el minibúfer completa como 'auto'. (Más comandos se pueden definir en su sesión de Emacs. Por ejemplo, si un comando llamado autorizar-me fue definida, Emacs sólo pudo completar la medida de lo 'aut').

Si escribe <TAB> de nuevo inmediatamente, no puede determinar el siguiente carácter; que podría ser '-', 'a', o 'c'. Por lo que no añade ningún carácter; en cambio, <TAB> muestra una lista de todas las terminaciones posibles en otra ventana.

A continuación, escriba -f. El minibuffer contiene ahora 'auto-f', y el único nombre del comando que empieza con esto es auto-fill-mode. Si ahora si presiona <TAB>, la finalización rellena el resto del argumento 'auto-fill-mode' en el minibúfer.

Así, teclear simplemente au <TAB> -f <TAB> le permite entrar en 'auto-fill-mode'.

13.4.2 Los comandos de finalización

Aquí está una lista de los comandos para completar definidos en el minibúfer cuando se permite el autocompletado:

<TAB>
   Completar el texto en el minibúfer tanto como sea posible; si no se puede completar, mostrar
   una lista de posibles terminaciones (minibuffer-complete).

<SPC>
   Completar hasta una palabra del texto antes del punto minibuffer (minibuffer-complete-word). Este comando no
   está disponible para los argumentos que a menudo incluyen espacios, tales como nombres de archivo.

<RET>
   Presentar el texto en el minibúfer como argumento, posiblemente completando primero (minibuffer-complete-and-exit).
   Véase Finalización de salida.

?
   Mostrar lista de posibles terminaciones (minibuffer-completion-help).

<TAB> (minibuffer-complete) es el comando más fundamental para completar. Busca todas las terminaciones posibles que coincidan con el texto existente en el minibuffer e intenta completar tanto como se pueda. Ver Estilos de terminación , por cómo se eligen las alternativas de terminación.

<SPC> (minibuffer-complete-word) completa como <TAB>, pero sólo hasta el siguiente guión o espacio. Si usted tiene "auto-F 'en el minibúfer y escribe <SPC>, se encuentra que la terminación con 'auto-fill-mode', pero sólo inserciones 'ill', por lo que tendrá 'auto-fill-'. Otro <SPC> en este punto termina todo el camino a 'auto-fill-mode'.

Si <TAB> o <SPC> es incapaz de completar, se muestra una lista de búsquedas alternativas de formas de terminar (si las hay) en otra ventana. Se puede visualizar la misma lista con ? (minibuffer-completion-help). Los siguientes comandos se pueden utilizar con la lista de terminación:

Ratón-1, Ratón-2
   Clic en el botón 1 o 2 en una alternativa de realización lo elige (mouse-choose-completion).

Mv, <RePág>, <prior>
   Escribiendo M-v, mientras que en el minibúfer, selecciona la ventana que muestra la lista de
   terminación (switch-to-completions). Esto allana el camino para el uso de los comandos a
   continuación. PageUp o prior hace lo mismo. También puede seleccionar la ventana de otras
   maneras (véase el de Windows ).

<RET>
   Elige la terminación en el punto (choose-completion).

<Right>
   Mueve el punto a la siguiente alternativa de finalización (next-completion).

<left>
   Mueve el punto al finalizar la alternativa anterior (previous-completion).

13.4.3 Salir autocompletar

Un comando lee un argumento en el minibúfer con autocompletado y también controla lo que ocurre cuando se escribe <RET> (minibuffer-complete-and-exit) para presentar el argumento. Hay varios tipos de comportamiento:

finalización estricta que solo acepta coincidencias exactas de terminación. El pulsar <RET>
sale del minibúfer sólo si el texto del minibuffer es una coincidencia exacta, completa o a
uno. De lo contrario, Emacs se niega a salir del minibúfer; en cambio, trata de completar,
y si ninguna conclusión se puede hacer momentáneamente muestra '[No match]' en el texto del
minibuffer. (Todavía puede salir del minibúfer tecleando C-g para cancelar el comando.)
Un ejemplo de un comando que utiliza este comportamiento es M-x, ya que no tiene sentido para
que acepte un nombre de comando inexistente.

La finalización cautelosa es como la estricta, excepto <RET> que solo sale si el texto ya se
encuentra como una coincidencia exacta. <RET> desempeñe esa conclusión, pero no sale todavía;
debe escribir un segundo <RET> para salir. finalización cautelosa se utiliza para la lectura
de los nombres de archivo para los archivos que ya existen, por ejemplo.

La finalización permisiva permite ualquier entrada; las candidatas de compleción son sólo
sugerencias. El pulsar <RET> no se completa, sólo se sostiene el argumento como ha introducido.

La finalización permisiva con la confirmación es como la terminación permisiva, con una
excepción: si escribe <TAB> y esto completado el texto hasta un estado intermedio (es decir
uno que todavía no es una coincidencia exacta de finalización), tecleando <RET> no presenta
el argumento. En su lugar, Emacs pide confirmación '[Confirm]' después del texto; escriba
<RET> de nuevo para confirmar y presentar el texto. Esto atrapa un error común, en el que
uno escribe <RET> antes de darse cuenta de que <TAB> no completaron la medida de lo deseado.

Se pueden ajustar el comportamiento de confirmación mediante la personalización de la
variable confirm-nonexistent-file-or-buffer. El valor por defecto, después de la finalización
da el comportamiento que acabamos de describir. Si lo cambia a cero, Emacs no pide
confirmación y vuelve a caer en la terminación permisiva. Si lo cambia a cualquier
otro valor que no sea nulo, Emacs le pedirá una confirmación de si o no el comando anterior
era <TAB>.

Este comportamiento es utilizado por la mayoría de los comandos que leen los nombres de archivo, como C-x C-f, y comandos que leen el búfer de nombres, como C-x b.

13.4.4 ¿Cómo se eligen las alternativas de autocompetado?

El autocompletado de comandos es una larga lista de posibles alternativas de terminación y un subconjunto más pequeño que "coincide con" lo que se ha escrito en el minibúfer. En el ejemplo de finalización , nos dimos un ejemplo simple de tal coincidencia. El procedimiento de determinación de lo que constituye una "coincidencia" es bastante complicado. Emacs intenta ofrecer terminaciones posibles en la mayoría de las circunstancias.

Emacs realiza la terminación usando uno o más criterios de búsqueda de texto del minibuffer en las alternativas de terminación. Durante la finalización, Emacs intenta cada tipode finalización a su vez. Si un tipo produce una o más completados, se utiliza la lista de alternativas de terminación. Si un tipo no produce ninguna coincidencia, Emacs cae de nuevo en el siguiente tipo.

La lista de variables de completion-styles especifica los estilos de terminación para su uso. Cada elemento de la lista es el nombre de un estilo de terminación (un símbolo Lisp). Los estilos de terminación por defecto son (en orden):

basic
   Una alternativa de finalización coincidente debe tener el mismo principio que el texto en el
   minibúfer antes del punto. Por otra parte, si hay algún texto en el minibúfer después del punto
   el resto de la alternativa de realización que debe contener el texto como una subcadena.

partial-completion
   Este estilo agresivo de finalización divide el texto del minibuffer en palabras separadas por
   guiones o espacios y completa cada palabra por separado. (Por ejemplo, al completar nombres
   de comandos, 'em-l-m' se completa con 'emacs-lisp-mode').
   Por otra parte, un "*" en el texto minibuffer es tratado como un comodín : se corresponde con
   cualquier carácter en la posición correspondiente en la alternativa finalización.

emacs22
   Este estilo es similar a la terminación básica, excepto que no tiene en cuenta el texto en
   el minibúfer después del punto. Se llama así porque se corresponde con el comportamiento
   de finalización en Emacs 22.

Los siguientes estilos de terminación adicionales tambien se definen y usted puede añadir hasta su estilo de terminación si lo desea (ver Personalización ):

substring
   Una alternativa de finalización coincidente debe contener el texto en el minibúfer antes,
   antes del punto y el después del punto, como substrings (en ese mismo orden).
   Por lo tanto, si el texto en el minibúfer es 'foobar', con el punto entre "foo" y "bar",
   que coincide con 'afoobbarc', donde a, b, c, puede ser cualquier cadena incluyendo
   la cadena vacía.

initials
   Este estilo es muy agresivo de finalización ya que intenta completar acrónimos y siglas.
   Por ejemplo, al completar nombres de comandos, que coincide con "Ich" lo busca tambien
   en list-command-history.

También hay un estilo de realización muy simple llamado emacs21. En este estilo, si el texto en el minibúfer es 'foobar', sólo se consideran con los que empiezan con 'foobar'.

Se pueden utilizar diferentes estilos de terminación en diferentes situaciones, mediante el establecimiento de la variable completion-category-overrides. Por ejemplo, la configuración por defecto dice que use solamente la terminación básica y substring de nombres del almacenamiento intermedio.

13.4.5 Opciones de finalización

Es significativo al completar argumentos con mayúsculas y minúsculas, tales como nombres de comandos. Por ejemplo, al completar nombres de comandos, 'AU' no se completa en 'auto-fill-mode'. Las diferencias del caso se tienen en cuenta al completar argumentos en cuyo caso no importa.

Al completar los nombres de archivo, las diferencias de caso se ignoran si la variable read-file-name-completion-ignore-case es no nula. El valor por defecto es nula en sistemas que tienen entre mayúsculas y minúsculas nombres de archivos, tales como GNU Linux ; es no nula en sistemas que tienen entre mayúsculas y minúsculas nombres de archivos, tales como Microsoft Windows. Al completar nombres de almacenamiento intermedio, las diferencias de caso se ignoran si la variable de lectura del buffer es no nula; el valor predeterminado es nulo.

Al completar los nombres de archivo, Emacs normalmente omite ciertas alternativas que se consideran poco probable que se elegirán, según lo determinado por la lista de variables de completion-ignored-extensions. Cada elemento de la lista debe ser una cadena; cualquier nombre de archivo que termine en dicha cadena se ignora como una alternativa de finalización. Cualquier elemento que termine en una barra oblicua (/) representa un nombre de subdirectorio. El valor estándar de las ampliaciones ignoradas tiene varios elementos incluyendo ".o", ".elc", y "~". Por ejemplo, si un directorio contiene 'foo.c' y 'foo.elc', 'foo' completa a 'foo.c'. Sin embargo, si todas las terminaciones posibles terminan en cadenas "ignoradas", no se ignoran: en el ejemplo anterior, 'foo.e' completa a 'foo.elc'. Emacs no tiene en cuenta las extensiones ignoradas al mostrar las alternativas de terminación en la lista de terminación.

Si completion-auto-help e establece en cero, los comandos de finalización no muestran la lista de posibles terminaciones; debe escribir ? para mostrar la lista. Si el valor es perezoso, Emacs sólo muestra el búfer de lista de terminación en el segundo intento de completar. En otras palabras, si no hay nada para completar, el primer <Tab> dice: 'Siguiente tag no es único "; el segundo <TAB> muestra en el buffer la lista de terminaciónes.

Si completion-cycle-threshold es no-nil, los comandos de terminación pueden surgir a través de alternativas de terminación. Normalmente, si hay más de una alternativa para finalizar el texto en el minibúfer, un comando de finalización completa hasta la subcadena común más larga. Si cambia la finalización del ciclo en t, el comando de finalización completa en lugar de la primera de esas alternativas de terminación; cada invocación subsiguiente de la orden de terminación sustituye con la siguiente alternativa terminación, de una manera cíclica. Si le das a la finalización del ciclo umbral un valor numérico n, comandos de terminación de cambiar a este comportamiento en ciclo sólo cuando hay N o menos alternativas.

Modo Icomplete presenta una pantalla de actualización constante, que le dice lo que están disponibles para el texto que ha introducido hasta ahora todas las terminaciones. El comando para activar o desactivar este modo menor es M-x icomplete-mode.

13.5 Historia minibuffer

Todos los argumentos que se introducen en el minibúfer se guardan en una lista de historial de modo que se pueda usar de nuevo más tarde. Se pueden utilizar los siguientes argumentos para buscar rápidamente un argumento anterior en el minibúfer:

M-p <up>
   Mover al elemento anterior de la historia del minibuffer (previous-history-element).

M-n <down>
   Pasar al siguiente elemento de la historia del minibuffer (next-history-element).

M-r regexp  <RET>
   Vaya a un elemento anterior en la historia minibuffer que coincida con la expresión
   regular (previous-matching-history-element).

M-s regexp <RET>
   Ir a la siguiente opción en la historia minibuffer que coincide con expresión regular
   (next-matching-history-element).

En el minibúfer, M-p o Up (previous-history-element) se mueve a través de la lista del historial del minibuffer, un elemento cada vez. Cada M-p obtiene un elemento anterior de la lista de la historia del minibúfer, en sustitución del contenido existente. Tecleando M-n o Down (next-history-element) se mueve a través de la lista del historial del minibuffer en la dirección opuesta, ir a buscar entradas posteriores.

Si escribe M-n en el minibúfer cuando no hay entradas posteriores en la historia minibuffer (por ejemplo, si no ha tecleado previamente M-p), Emacs intenta ir a buscar en una lista de argumentos por defecto los valores que es probable introducir. Se puede pensar en esto como en movimiento a través de la lista de "historia futura".

Si edita el texto introducido por los comandos de historia minibuffer M-p o M-n, no cambia su entrada en la lista del historial. Sin embargo, el argumento editado si va al final de la lista del historial cuando se envíe.

Puede usar M-r (previous-matching-history-element) para buscar a través de los elementos más antiguos de la lista del historial, y M-s (next-matching-history-element) para buscar a través de las entradas más recientes. Cada uno de estos comandos pide una expresión regular como argumento y obtiene la primera entrada coincidente en el minibúfer. Ver las expresiones regulares. Un argumento numérico con prefijo n significa buscar la enésimajuego entrada. Estos comandos son inusuales, ya que usan el minibúfer para leer el argumento de expresión regular, a pesar de que se invocan desde el minibúfer. Una letra mayúscula en la expresión regular hace la búsqueda de mayúsculas y minúsculas (véase Búsqueda del caso ).

También puede buscar a través de la historia usando una búsqueda incremental. Ver Isearch Minibuffer .

Emacs mantiene listas de la historia separadas para diferentes tipos de argumentos. Por ejemplo, hay una lista de nombres de archivos, utilizado por todos los comandos que leen los nombres de archivo. Otras listas de la historia incluyen nombres de almacenamiento intermedio, nombres de comando (utilizados por M-x), y los argumentos de comando (utilizados por los comandos como query-replace).

La variable history-length especifica la longitud máxima de una lista del historial del minibuffer; la adición de un nuevo elemento se elimina el elemento más antiguo si la lista se alarga demasiado. Si el valor es t, no hay ninguna longitud máxima.

La variable history-delete-duplicates especifica si desea eliminar los duplicados de la historia. Si es no nulo, la adición de un nuevo elemento se elimina de la lista de todos los demás elementos que son iguales a él. El valor por defecto es cero.

13.6 La repetición de los comandos Minibuffer

Cada comando que utiliza el minibuffer una vez que se registra en una lista especial de la historia de comandos, junto con los valores de sus argumentos, se puede repetir el comando completo. En particular, cada uso de M-x se registra allí, ya que M-x usa el minibúfer para leer el nombre del comando.

C-x <ESC> <ESC>

Vuelve a ejecutar un comando reciente del historial de comandos (repeat-complex-command).

M-x list-command-history

Mostrar todo el historial de comandos, que muestra todos los comandos con C-x <ESC> <ESC> permite repetir el más reciente.

C-x <ESC> <ESC> re-ejecuta una orden reciente que entrada en el minibúfer. Sin argumento, se repite el último comando. Un argumento numérico especifica el comando a repetir; 1 significa que el último, el 2 anterior, y así sucesivamente.

C-x <ESC> <ESC> funciona permutando el comando anterior en una expresión Lisp y luego entrar en el minibuffer inicializado con el texto de esa expresión. Incluso si usted no sabe Lisp, es probable que sea obvia la que aparece el comando de repetición. Si escribe simplemente <RET>, se repite el comando sin cambios. También puede cambiar el comando editando la expresión Lisp antes de ejecutarlo. El comando ejecutado se añade a la parte delantera de la historia de comandos a menos que sea idéntico al elemento más reciente.

Una vez dentro del minibúfer con C-x <ESC> <ESC>, puede utilizar los comandos habituales de historia del minibuffer (ver Minibuffer Historia) para desplazarse por la lista del historial. Después de encontrar el comando anterior que se desea, se puede editar su expresión como de costumbre y luego ejecutarlo tecleando <RET>.

La búsqueda incremental, estrictamente hablando, no utiliza el minibúfer. Por lo tanto, aunque se comporte como un comando complejo, que normalmente no aparece en la lista del historial de C-x <ESC> <ESC>. Puede hacer que los comandos de búsqueda incremental aparezcan en la historia mediante el establecimiento de isearch-resume-in-command-history a un valor que no sea nulo. Ver búsqueda incremental .

La lista de los comandos minibuffer-usin se almacenan como una lista Lisp en el comando de la variable command-history. Cada elemento es una expresión Lisp que describe un comando y sus argumentos. Programas Lisp pueden volver a ejecutar un comando llamando a eval con el elemento del historial de comandos.

13.7 Introducción de contraseñas

A veces, puede que tenga que introducir una contraseña en Emacs. Por ejemplo, cuando usted le dice a Emacs que visite un archivo en otro ordenador a través de una red de protocolo tales como FTP , a menudo es necesario proporcionar una contraseña para acceder a la máquina (ver archivos remotos ).

Introducción de una contraseña es similar al uso del minibúfer. Emacs muestra un mensaje en el área de eco (como 'C-y inserta una contraseña copiada (ver Killing ). Usted puede escribir cualquiera <RET> o <ESC> para enviar la contraseña. Cualquier otra tecla de carácter auto-inserción inserta el carácter asociado a la contraseña, y el resto de la entrada se ignora.

13.8 Respuestas

Un comando de Emacs puede requerir que respondaa un "sí" o un "no" durante el curso de su ejecución. Tales consultas vienen de dos maneras.

El primer tipo de consulta "sí o no", el símbolo termina con '(y or n)'. Dicha consulta no utiliza realmente el minibúfer; el símbolo aparece en el área de eco, y se responde escribiendo bien 'y' o 'n', que entrega inmediatamente la respuesta. Por ejemplo, si escribe C-x C-w (write-file) para guardar una memoria intermedia, Emacs emite un indicador de la siguiente manera:

File `foo.el' exists; overwrite? (y or n)

Debido a que esta consulta no utiliza realmente el minibúfer, los comandos de edición del minibuffer habituales no se pueden utilizar. Sin embargo, puede realizar alguna operacion de desplazamiento, mientras la consulta está activa: C-l recentra la ventana seleccionada; M-v (o PageDown o next) Permite desplazarse hacia adelante; C-v (o PageUp, o prior) Se desplaza hacia atrás, C-M-v se desplaza adelante en la siguiente ventana; y C-M-S-v se desplaza hacia atrás en la ventana siguiente. Pulsar C-g rechaza la consulta, y se cierra el comando que lo emitió (véase Quitting).

El segundo tipo de consulta "sí o no" tambien se suelen emplear, si se da la respuesta equivocada podría tener graves consecuencias; se usa el minibúfer, y cuenta con un final rápido con '(sí o no)'. Por ejemplo, si se invoca C-x k (kill-buffer) en un buffer con cambios sin guardar, Emacs activa el minibúfer con un indicador de la siguiente manera:

Buffer foo.el modified; kill anyway? (yes or no)

Para responder, debe escribir "sí" o "no" en el minibúfer, seguido por <RET>. El minibuffer se comporta como se describe en los apartados anteriores; puede cambiar a otra ventana con C-x o, utilizar los comandos de la historia P-f y M-f, etc. Con C-g sale del minibúfer y del comando de consulta.

14 Los comandos se ejecutan por nombre

Cada comando de Emacs tiene un nombre que se puede utilizar para ejecutarlo. Para mayor comodidad, muchos de los comandos también tienen asociaciones de teclas. Puede ejecutar esos comandos tecleando las teclas, o correr por su nombre. La mayoría de los comandos de Emacs no tienen las asociaciones de teclas, por lo que la única manera de ejecutarlos es por su nombre. (Ver Atajos de teclado , por cómo configurar las asociaciones de teclas.)

Por convención, un nombre de comando consiste en una o más palabras, separados por guiones; por ejemplo, auto-fill-mode o manual-entry. Los nombres de comandos en su mayoría utilizan palabras completas en inglés para que sean más fáciles de recordar.

Para ejecutar un comando por su nombre, comience con M-x y escriba el nombre del comando, y para terminar pulse <RET>. M-x usa el minibúfer para leer el nombre del comando. La cadena 'M-x' aparece al principio del minibúfer como un mensaje para recordarle que debe introducir un nombre de comando a ejecutar. <RET> Sale del minibuffer y se ejecuta el comando. Ver Minibuffer , para más información sobre el minibúfer.

Puede usar el completado para introducir el nombre del comando. Por ejemplo, para invocar el comando forward-char, puede escribir

M-x forward-char <RET>

o

M-x forw <TAB> c <RET>

Tenga en cuenta que forward-char es el mismo comando que se invoca con la clave C-f. La existencia de una asociación de teclas no le impide que se ejecute el comando por su nombre.

Para cancelar el M-x y no ejecutar un comando, pulse C-g en lugar de introducir el nombre del comando. Esto le llevará de nuevo a nivel de comando.

Para pasar un argumento numérico al comando al que se acoge con M-x, especifique el argumento numérico antes de M-x. El valor del argumento aparece en la petición, mientras el nombre del comando se está leyendo y finalmente M-x pasa el argumento a ese comando.

Cuando el comando se ejecuta con M-x tiene una asociación de teclas, Emacs menciona esto en el área de eco después de ejecutar el comando. Por ejemplo, si escribe M-x forward-word, el mensaje dice que puede ejecutar el mismo comando tecleando M-f. Se puede desactivar estos mensajes estableciendo la variable suggest-key-bindings a nil.

En este manual, cuando hablamos de la ejecución de un comando por su nombre, a menudo omitimos el <RET> que termina el nombre. Por lo tanto podríamos decir M-x auto-fill-mode en lugar de M-x auto-fill-mode <RET>. Mencionamos la <RET> sólo para énfasis, tal como cuando el comando es seguido por los argumentos.

M-x funciona ejecutando el comando execute-extended-command, que es el responsable de leer el nombre del otro comando e invocarlo.

15 Ayuda

Emacs proporciona una amplia variedad de comandos de ayuda, todos accesibles a través de la tecla refijo C-h (o, de forma equivalente, la tecla de función F1). Estos comandos de ayuda se describen en las siguientes secciones. También puede escribir C-h C-h para ver una lista de comandos de ayuda (help-for-help). Puede desplazarse por la lista con <SPC> y <DEL> y, a continuación, escribir el comando de ayuda que desee. Para cancelar, escriba C-g.

Muchos comandos de ayuda muestran su información en un búfer de ayuda especial. En este búfer, puede escribir <SPC> y <DEL> para desplazarse y escribir <RET> para seguir los hipervínculos. Consulte el modo Ayuda.

Si está buscando una característica determinada, pero no sabe cómo se llama ni dónde buscarla, le recomendamos tres métodos. Primero, pruebe un comando apropiado, luego intente buscar en el índice manual, luego busque en las FAQ y en las palabras clave del paquete.

C-h a topics <RET>
   Esto busca comandos cuyos nombres coincidan con los temas de los argumentos.
   El argumento puede ser una palabra clave, una lista de palabras clave o una
   expresión regular (ver Regexps). Ver Apropos.

C-h i d m emacs <RET> i topic <RET>
   Esto busca el tema en los índices del manual Emacs Info, mostrando la primera
   coincidencia encontrada. Presione, para ver los partidos subsiguientes.
   Puedes usar una expresión regular como tema.

C-h i d m emacs <RET> s topic <RET>
   Similar, pero busca el texto del manual en lugar de los índices.

C-h C-f
   Muestra las preguntas frecuentes de Emacs, utilizando Info.

C-h p
   Muestra los paquetes Emacs disponibles basados en palabras clave.
   Ver Palabras clave del paquete.

C-h o F1 significa "ayuda" también en otros contextos. Por ejemplo, puede escribirlas después de una clave de prefijo para ver una lista de las claves seguir a la clave de prefijo. (Algunas claves de prefijo no soportan C-h de esta manera, porque definen otros significados para ella, pero todas soportan F1 como ayuda.)

Ayuda Resumen:       Breve lista de todos los comandos de ayuda.
Ayuda Clave:         Hacer lo que hace una tecla en Emacs.
Ayuda Nombre:        Preguntar por un nombre de comando, variable o función.
A propos:            A lo que se refiere un tema determinado.
Modo de ayuda:       Particularidades del modo de ayuda y buffers Ayuda.
Palabras clave:      Encontrando bibliotecas Lisp por palabra clave (temas).
Idioma Ayuda:        Ayuda relativa al soporte de idiomas internacionales.
Miscelánea Ayuda:    Otros comandos de ayuda.
Archivos de ayuda:   Comandos para visualizar archivos de ayuda auxiliares.
Ayuda eco:           Ayuda en el texto e información de herramienta activa ("balloon help).

15.1 Ayuda Resumen

A continuación se presenta un resumen de los comandos de ayuda para el acceso a la documentación incorporada. La mayoría de estos se describen con más detalle en las siguientes secciones.

C-h a topics <RET>
   Mostrar una lista de comandos cuyos nombres coinciden con el tema (apropos-command).

C-h b
   Mostrar todas las asociaciones de teclas activas; primero las del modo menor, luego las
   del modo mayor, a continuación, las globales (describe-bindings).

C-h c key
   Mostrar el nombre del comando que indica la clave entrada (describe-key-briefly). Aquí c
   significa "carácter". Para obtener información más detallada sobre la tecla, utilice C-h k.

C-h d topics <RET>
   Mostrar comandos y variables cuya documentación coincida con "topics" (apropos-documentation)

C-h e
   Mostrar los *Messages* del buffer (view-echo-area-messages).

C-h f functión <RET>
   Mostrar la documentación sobre la función especificada (describe-function).
   Dado que los comandos son funciones Lisp, esto funciona para comandos también.

C-h h
   Mostrar archivo HOLA, que muestra ejemplos de varios tipos de caracteres.

C-h i
   Ejecutar info, la documentación de emacs está en info.

C-h k
   Mostrar el nombre y la documentación de la orden que ejecuta clave (describe-key).

C-h l
   Mostrar las últimas 300 pulsaciones de teclas (view-lossage).

C-h m
   Visualización de documentación del modo mayor actual (describe-mode).

C-h n
   Visualización de las noticias de los cambios recientes de Emacs (view-emacs-news).

C-h p
   Buscar paquetes del tema por palabra clave (finder-by-keyword). Esto lista los paquetes
   usando un buffer de menú de paquetes

C-h P package <RET>
   Pantalla de documentación sobre el paquete denominado package (describe-package).

C-h r
   Visualizar el manual de Emacs en Info (info-emacs-manual).

C-h s
   Visualizar el contenido de la tabla sintáctica actual (describe-syntax). La tabla sintáctica
   dice qué caracteres están abriendo delimitadores, cuáles son partes de palabras...

C-h t
   Acceda al tutorial interactivo de Emacs. (help-with-tutorial)

C-h v var <RET>
   Mostrar la documentación de la variable var (describe-variable)
.
C-h w command <RET>
   Mostrar las teclas que ejecutan el comando command (where-is).

C-h C coding <RET>
   Describir el codigo del sistema de codificación (describe-coding-system).

C-h C <RET>
   Describir los sistemas de codificación actualmente en uso.

C-h F command <RET>
   Introducir información e ir al nodo que documenta command (Info-goto-emacs-comando-nodo).

C-h I method <RET>
   Describir el método de entrada de method (describe-input-method).

C-h K Key
   Introducir información e ir al nodo que documenta Key (Info-goto-emacs-key-command-node)

C-h L language-env <RET>
   Mostrar información sobre los juegos de caracteres, sistemas de codificación, y los métodos
   de entrada utilizados en el entorno de lenguaje language-env (describe-language-environment).

C-h S symbol <RET>
   Mostrar la documentación Info sobre symbol de acuerdo con el lenguaje de programación
   que se está editando (info-lookup-symbol).

C-h .
   Mostrar el mensaje de ayuda para un área de texto especial, si el punto está en una
   (display-local-help). (Estos incluyen, por ejemplo, los enlaces en *Ayuda* de buffers.)

15.2 Documentación para una clave

Los comandos de ayuda para obtener información sobre una secuencia de teclas son C-h c (describe-key-briefly) y C-h k (describe-key) son:

C-h c que muestra en el área de eco el nombre del comando al que está asociada esa tecla. Por ejemplo, C-h c C-f muestra 'forward-char'.

C-h k es similar pero da más información: muestra un búfer de ayuda que contiene la cadena de documentación del comando, que describe exactamente lo que hace.

C-h K muestra la sección del manual de Emacs que describe el comando correspondiente a la tecla.

C-h c, C-h k y C-h K funcionan para cualquier tipo de secuencia de teclas, incluyendo teclas de función, menús y eventos del ratón. Por ejemplo, después de C-h k puede seleccionar una opción de menú de la barra de menús, para ver la cadena de documentación del comando que se ejecuta.

C-h w command <RET> lista las teclas que están vinculadas al comando en el área de eco. Si el comando no está asociado a ninguna tecla, significa que debe usar M-x para ejecutarlo. C-h w ejecuta el comando whereis.

15.3 Ayudar al Comando o nombre de variable

C-h f functión <RET> (describe-function) muestra la documentación de la función, en una ventana. Dado que los comandos son funciones Lisp, puede utilizar este método para ver la documentación de cualquier comando cuyo nombre se conoce. Por ejemplo,

C-h f auto-fill-mode <RET>

muestra la documentación de auto-fill-mode. Esta es la única manera de obtener la documentación de un comando que no está unido a cualquier tecla (uno que podría correr normalmente usando M-x).

C-h f también es útil para funciones Lisp que se utilizan en un programa. Por ejemplo, si usted acaba de escribir la expresión (make-vector len) y desee comprobar si está utilizando el vector correctamente, tipee C-h f make-vector <RET>. Debido a C-h f permite todos los nombres de función, no sólo los nombres de órdenes, es posible que algunos de sus abreviaturas de terminación favoritos trabajen con M-x y no funcionen con C-h f. Una abreviatura que es único entre los nombres de los comandos puede no ser único entre los nombres de las funciones.

Si escribe C-h f <RET>, describe la función llamada por la expresión de Lisp más interna en el punto del buffer, siempre que el nombre de la función sea una función Lisp válida y definida. (Ese nombre aparece por defecto, mientras se introduce el argumento.) Por ejemplo, si el punto se encuentra a continuación del texto '(make-vector (car x)', la lista más interna que contiene el punto es la que comienza con '(make-vector, por lo que C-h f <RET> describe la función make-vector. C-h f también es útil sólo para comprobar que haya escrito un nombre de función correctamente. Si el indicador del minibuffer para C-h f muestra el nombre de la función de la memoria intermedia como predeterminado, significa que el nombre se define como una función Lisp. C-g para cancelar el comando C-h f si realmente no quiere ver la documentación.

C-h v (describe-variable) es como C-h f pero que describe las variables Lisp en lugar de funciones Lisp. Su valor por defecto es el símbolo Lisp alrededor o antes del punto, si es el nombre de una variable Lisp definida. Ver variables.

Los búferes de ayuda que describen variables y funciones de Emacs normalmente tienen hipervínculos al código fuente correspondiente, si tiene los archivos fuente instalados (ver Hipervínculos).

Para encontrar la documentación de un comando en un manual, utilice C-h F (Info-goto-emacs-command-node). Reconoce varios manuales, no sólo el manual de Emacs, y encuentra el correcto.

15.4 A propos

El comando apropos a preguntas como: "¿Cuáles son los comandos para trabajar con archivos?" Más precisamente, usted especifica un patrón apropiado, que significa una palabra, una lista de palabras o una expresión regular.

Cada uno de los siguientes comandos de apropos lee un patrón apropiado en el minibuffer, busca elementos que coincidan con el patrón y muestra los resultados en una ventana diferente.

C-h a
   Búsqueda de comandos (apropos-command). Con un argumento prefijo, buscar funciones no
   interactivas también.

M-x apropos
   Búsqueda de funciones y variables. Ambas funciones interactivas (comandos) y funciones
   no interactivas se pueden encontrar por ello.

M-x apropos-variable
   Buscar las variables personalizadas por el usuario. Con un argumento prefijo, tambien busca
   variables no personalizadas.

M-x apropos-value
   Buscar variables cuyos valores coinciden con el patrón especificado. Con un argumento
   prefijo, buscar también para las funciones con las definiciones coinciden con el patrón,
   y los símbolos de Lisp con propiedades que coinciden con el patrón.

C-h d
   Búsqueda de funciones y variables cuyos hilos documentación coincide con el patrón especificado
   (apropos-documentation).

El tipo más simple de patrón apropos es una palabra. Cualquier cosa que contenga esa palabra coincidente con el patrón. Por lo tanto, para encontrar comandos que funcionen en archivos, escriba C-h a file <RET>. Esto muestra una lista de todos los nombres de comandos que contienen 'file', incluyendo copiar-archivo, buscar-archivo, y así sucesivamente. Cada nombre de comando viene con una breve descripción y una lista de teclas que puede utilizar actualmente. En nuestro ejemplo, diría que puede invocar un archivo de búsqueda escribiendo C-x C-f.

Para obtener más información acerca de una definición de función, propiedad de variable o símbolo que aparece en un buffer apropos, puede hacer clic en él con el ratón-1 o ratón-2, o moverse allí y escribir <RET>.

Cuando se especifica más de una palabra con el patrón apropos, el nombre debe contener al menos dos de las palabras con el fin de igualar. Por lo tanto, si usted está buscando para los comandos de matar a un trozo de texto antes del punto, usted podría intentar C-h a kill volver hacia atrás antes del <RET>. El nombre real del comando kill-backward coincidirá con ese; si hubiera un comando kill-text-before antes, también coincidiría, ya que contiene dos de las palabras especificadas.

Para una mayor flexibilidad, puede especificar una expresión regular (ver las expresiones regulares. Un patrón apropos se interpreta como una expresión regular si contiene cualquiera de los caracteres especiales de expresiones regulares, '^ $ * +?. \ ['.

Siguiendo las convenciones para nombrar los comandos de Emacs, aquí hay algunas palabras que encontrará útil en los patrones de apropos. Mediante el uso de ellos conun C-h, también puede tener una idea de las convenciones de nomenclatura:

char, line, word, sentence, paragraph, region, page, sexp, list, defun, rect, buffer, frame, window,
face, file, dir, register, mode, beginning, end, forward, backward, next, previous, up, down, search,
goto, kill, delete, mark, insert, yank, fill, indent, case, change, set, what, list, find, view,
describe, default.

Si la variable apropos-do-all es no-nil, los comandos apropos siempre se comportan como si se hubiera dado un argumento prefijo.

Por defecto, todos los comandos apropos excepto apropos-documentation da sus resultados en orden alfabético. Si la variable apropos-sort-by-scores es no-nil, tratar de adivinar la relevancia de cada resultado, y mostrar los más relevantes en primer lugar. El comando apropos-documentation enumera sus resultados en orden de relevancia de forma predeterminada; para enumerarlos en orden alfabético, cambie la variable a apropos-documentation-sort-by-scores a nil.

15.5 Comandos de ayuda

Los buffers de ayuda proporcionan los mismos comandos que el modo de vista (ver View-mode); por ejemplo, <SPC> desplaza hacia adelante, y <DEL> Se desplaza hacia atrás. También se proporcionan algunos comandos especiales:

<RET>
   Sigue una referencia cruzada en el punto (help-follow).

<TAB>
   Mueve el punto hacia adelante al siguiente hipervínculo (forward-button).

S-<TAB>
   Mueve el punto de vuelta al hipervínculo anterior (backward-button).

Ratón-1, Ratón-2
   Seguir un hipervínculo haciendole clic.

C-c C-c
   Mostrar toda la documentación sobre el símbolo en el punto (help-follow-symbol).

C-c C-b
   Volver al tema de ayuda anterior (help-go-back).

Cuando un nombre de función, nombre de variable, o nombre de estilo (ver Faces) aparece en la documentación de ayuda de la memoria intermedia, es normalmente un hipervínculo subrayado. Para ver la documentación asociada, traslade el punto allí y escriba <RET> (help-follow), o haga clic en el hipervínculo con Ratón-1 o Ratón-2. Si lo hace, reemplaza el contenido de la memoria intermedia de ayuda; para volver sobre sus pasos, tipee C-c C-b (help-go-back).

Un buffer de ayuda también puede contener hipervínculos a los manuales Info, las definiciones de código fuente, y a URLs (páginas web). Los dos primeros se abren en Emacs, y el tercero mediante un navegador web a través del comando de exploración-URL (véase Browse-URL ).

En un buffer de ayuda, <TAB> (forward-button) se mueve el punto hacia adelante al siguiente hipervínculo, mientras que S-<TAB> (backward-button) apuntan a un hipervínculo anterior. Estos comandos actúan de forma cíclica; por ejemplo, escribiendo <TAB> en el último hipervínculo mueve de nuevo al primer hipervínculo.

Para ver toda la documentación sobre cualquier símbolo en el texto, pare en un punto y escriba allí C-c C-c (help-follow-symbol). Esto muestra toda la documentación disponible sobre el símbolo: como una variable, función y/o un estilo.

15.6 Búsqueda de palabras clave para los paquetes

La mayoría de las funciones opcionales en Emacs se agrupan en paquetes. Emacs contiene varios cientos de paquetes integrados, y mucho más se puede instalar desde la red (ver packages).

Para que sea más fácil encontrar los paquetes relacionados con un tema, la mayoría de los paquetes están asociados con una o más palabras clave basadas en lo que hacen. Escriba C-h p (finder-by-keyword) para que aparezca una lista de palabras clave del paquete, junto con una descripción de lo que significan dichas palabras clave. Para ver una lista de los paquetes para una determinada palabra clave, pulse <RET> en la linea; esto muestra la lista de paquetes de la memoria intermedia del Menú del paquete (ver Package menu).

C-h P (describe-package) pide el nombre de un paquete, y muestra un buffer de ayuda que describe los atributos del paquete y las características que implementa.

15.7 Ayuda para Apoyo Internacional de la Lengua

Para obtener información sobre un entorno de lenguaje específico (ver Language Environments), teclee C-h L (describe-language-environment). Esto muestra una memoria intermedia de ayuda que describe los idiomas soportados por el entorno de idioma, y una lista de los juegos de caracteres asociados, sistemas y métodos de entrada, así como un texto de muestra para ese entorno de lenguaje de codificación.

El comando C-h h (view-hello-file) muestra el archivo etc/hello (??) lo que demuestra varios tipos de caracteres al mostrar cómo decir "hola" en muchos idiomas.

El comando C-h I (describe-input-method) describe un método ya sea un método de entrada especificada, o en su defecto el método de entrada actualmente en uso. Ver input methods.

El comando C-h C (describe-coding-system) describe sistemas de codificación: ya sea un sistema de codificación especificado, o las actualmente en uso. Ver Coding systems.

15.8 Otros comandos de ayuda

C-h i (info) ejecuta el programa Info, que examina archivos de documentación estructurados. Todo el manual de Emacs está disponible dentro de la información, junto con muchos otros manuales para el sistema GNU. Pulse h después de introducir información para ejecutar un tutorial sobre el uso de la información.

Con un argumento numérico n, C-h i selecciona la información búfer '*info*<n>'. Esto es útil si desea navegar por múltiples manuales Info simultáneamente. Si especifica sólo C-u como argumento prefijo, C-h i pide el nombre de un archivo de documentación, por lo que se puede navegar por un archivo que no tiene una entrada en el menú de información de nivel superior.

Los comandos de ayuda de función C-h F function <RET> y C-h K key, descritos anteriormente, buscan la información directamente de la documentación de la función o la tecla.

Al editar un programa, si usted tiene una versión Info del manual para el lenguaje de programación, puede utilizar C-h S (info-lookup-symbol) para encontrar una entrada para un símbolo (palabra clave, función o variable) en el manual apropiado. Los detalles de cómo este comando funciona dependen del modo mayor.

Si existe algun fallo o no está seguro de lo que ha escrito, utilice C-h l (view-lossage). C-h l muestra las últimas 300 pulsaciones del teclado. Si ve comandos que usted no conoce, puede usar C-h c para averiguar lo que hacen.

Para revisar los mensajes recientes área de eco, utilice Ch e (view-eco-area-mensajes). Esto muestra el búfer * Messages *, donde se guardan los mensajes.

Cada modo mayor de Emacs normalmente redefine algunas teclas y hace otros cambios en el funcionamiento de la edición. C-h m (describe-mode) muestra documentación en el modo mayor, que normalmente se describe en los comandos y funciones que se cambian en este modo.

C-h b (describe-bindings) y C-h s (describe-syntax) muestran otra información sobre el entorno actual dentro de Emacs C-h b muestra una lista de todas las asociaciones de teclas actualmente en vigor:. Primeros los enlaces locales de los modos menores actuales, a continuación, los enlaces locales definidas por el modo mayor, y por último los enlaces globales (ver Key bindings). C-h s muestra el contenido de la tabla de sintaxis, con explicaciones de la sintaxis de cada caracter.

Usted puede obtener una lista de subcomandos para una tecla prefijo particular, tecleando C-h (describe-prefix-bindings) después de la tecla prefijo. (Hay algunas teclas prefijo para las que esto no funciona, las que proporcionan sus propias caracteristicas para C-h. Una de ellas es <ESC>, porque <ESC> C-h es en realidad C-M-h, que marca una defun.)

15.9 archivos de ayuda

Aparte de la documentación y los manuales incorporado, Emacs contiene varios archivos que describen otros temas como las condiciones de copia, notas de la versión, las instrucciones para la depuración y los errores de información, y así sucesivamente. Se pueden utilizar los siguientes comandos para ver estos archivos. Aparte de C-h g, todos ellos tienen la forma C-h C-caracter.

C-h C-c
   Visualizar las reglas bajo las cuales se puede copiar y redistribuir Emacs (describe-copying).

C-h C-d
   Muestra la ayuda para la depuración de Emacs (view-emacs-debugging).

C-h C-e
   Mostrar información acerca de dónde obtener paquetes externos (vista-external-paquetes).

C-h C-f
   Mostrar la lista de preguntas frecuentes respondidas en el FAG de Emacs (view-emacs-FAQ).

C- g
   Mostrar información sobre el Proyecto GNU (*describe-gnu-project*).

C-h C-m
   Mostrar información sobre el pedido de copias impresas de los manuales de Emacs
   (*view-order-manuals*).

C-h C-n
   Visualizar el archivo "noticias", que enumera las nuevas características de esta versión
   de Emacs (*view-emacs-news*).

C-h C-o
   Mostrar cómo realizar un pedido o descargar la última versión de Emacs y otro software GNU
   (*describe-distribution*).

C-h C-p
   Mostrar la lista de problemas conocidos de Emacs, a veces con soluciones sugeridas
   (*view-emacs-problems*).

C-h C-t
   Mostrar la lista de cosas por hacer de Emacs (*view-emacs-todo*).

C-h C-w
   Mostrar los detalles de completa ausencia de garantía de GNU Emacs (*describe-no-warranty*).

15.10 Ayuda sobre texto activo y sugerencias de herramientas

En Emacs, las extensiones de "texto activo" (texto que hace algo especial en respuesta a los clics del ratón o <RET>) a menudo tienen asociado texto de ayuda. Esto incluye hipervínculos en los búferes de Emacs, así como partes de la línea de modo. En las pantallas gráficas, así como en algunos terminales de texto que soportan el seguimiento del ratón, al mover el ratón sobre el texto activo se muestra el texto de ayuda como una herramienta. Vea Tooltips.

En los terminales que no soportan el rastreo del ratón, puede mostrar el texto de ayuda para el texto del búfer activo escribiendo C-h . (display-local-help). Esto muestra el texto de ayuda en el área de eco. Para que el texto de ayuda se muestre automáticamente siempre que esté disponible en el punto, ajuste la variable help-at-pt-display-when-idle a t.

16 La marca y la región

Muchos comandos de Emacs operan en una parte contigua arbitraria del búfer actual. Para especificar el texto sobre el que debe operar un comando de este tipo, coloque la marca en un extremo del mismo y desplácese hacia el otro extremo. El texto entre el punto y la marca se denomina región. La región siempre se extiende entre el punto y la marca, independientemente de cuál venga antes en el texto; cada vez que se mueve el punto, la región cambia.

Si se coloca la marca en una posición del texto, también se activa. Cuando la marca está activa, decimos también que la región está activa; Emacs indica su extensión resaltando el texto dentro de ella, usando la cara de la región (ver Face customizacion).

Después de ciertos comandos sin movimiento, incluyendo cualquier comando que cambie el texto en el búfer, Emacs desactiva automáticamente la marca; esto desactiva el resaltado. También puede desactivar explícitamente la marca en cualquier momento, escribiendo C-g (ver Quitting).

El comportamiento predeterminado anterior se conoce como modo de marcación de transitorios. Al deshabilitar el modo de marca de transición, Emacs cambia a un comportamiento alternativo, en el que la región no suele estar resaltada. Ver Disabled Transient Mark.

Muchos comandos de Emacs operan en una parte contigua arbitraria del búfer actual. Para especificar el texto sobre el que debe operar un comando de este tipo, coloque la marca en un extremo del mismo y desplácese hacia el otro extremo. El texto entre el punto y la marca se denomina región. La región siempre se extiende entre el punto y la marca, sin importar cuál venga antes en el texto; cada vez que se mueve el punto, la región cambia.

La configuración de la marca en un búfer no tiene ningún efecto sobre las marcas de otros búferes. Cuando regresa a un búfer con una marca activa, la marca se encuentra en el mismo lugar que antes. Cuando varias ventanas muestran el mismo búfer, pueden tener diferentes valores de punto y, por lo tanto, diferentes regiones, pero todas comparten una posición de marca común. Ver Windows. Normalmente, sólo la ventana seleccionada resalta su región; sin embargo, si la variable "highlight-nonselected-windows" no es nula, cada ventana resalta su propia región.

Ajuste de la marca: Comandos para establecer la marca.
Marcado de objetos: Comandos para poner región en torno a unidades textuales.
Usando Región: Resumen de las formas de operar en el contenido de la región.
Aforo: posiciones de las marcas previas guardadas para que pueda volver allí.
Marcas Anillo: posiciones de las marcas anteriores en diversos buffers.
Selección de desplazamiento: Uso de teclas de movimiento del cursor desplazado.
Discapacitados Transient Mark: Dejar regiones sin resaltar de forma predeterminada.

16.1 Configuración de la Marca

Aquí están algunos comandos para configurar la marca:

C-<SPC>
   Establecer la marca en el punto, y que se active (set-mark-command).

C-@
   Lo mismo.

C-x C-x
   Establecer la marca en el punto, y que se active; a continuación, se mueve el punto en que
   la marca solía ser (exchange-point-and-mark).

Drag-Ratón-1
   punto de ajuste y la marca en todo el texto que arrastra al otro lado.

Ratón-3
   Establecer la marca en el punto, a continuación, pasar al punto donde haga clic
   (mouse-save-then-kill).

Teclas de movimiento del cursor
   Estableció la marca en el punto y la marca está inactiva, a continuación, mueve el punto. Ver Shift Selección .

La forma más común de establecer la marca es con C-<SPC> (set-mark-command). Esto fija la marca donde está el punto y lo activa. A continuación, puede alejar el punto, dejando la marca atrás.

Por ejemplo, suponga que desea convertir parte del búfer a mayúsculas. Para lograr esto, vaya a un extremo del texto deseado, escriba C-<SPC>, y mueva el punto hasta que se resalte la parte deseada del texto. Ahora escriba C-x C-u (upcase-region). Esto convierte el texto de la región en mayúsculas y desactiva la marca.

Siempre que la marca esté activa, puede desactivarla tecleando C-g (ver Quitting). La mayoría de los comandos que operan en la región también desactivan automáticamente la marca, como C-x C-u en el ejemplo anterior.

En lugar de configurar la marca para que funcione en una región, también puede utilizarla para "recordar" una posición en el búfer (escribiendo C-<SPC> C-<SPC>), y más tarde volver a ella (escribiendo C-u C-<SPC>). Ver Mark Ring, para más detalles.

El comando C-x C-x (exchange-point-and-mark) intercambia las posiciones del punto y la marca. C-x C-x es útil cuando está satisfecho con la posición del punto pero desea mover el otro extremo de la región (donde está la marca). Usando C-x C-x por segunda vez, si es necesario, coloca la marca en la nueva posición con el punto hacia atrás en su posición original. Normalmente, si la marca está inactiva, este comando primero reactiva la marca en el último lugar donde se estableció, para asegurarse de que la región quede resaltada. Sin embargo, si lo llama con un argumento de prefijo, deja la marca inactiva y la región sin resaltar; puede usar esto para saltar a la marca de manera similar a C-u C-<SPC>. También puede fijar la marca con el ratón. Si presiona el botón izquierdo del ratón (down-mouse-1) y arrastra el ratón a través de un rango de texto, esto establece la marca donde presionó el botón del ratón por primera vez y coloca el punto donde lo soltó. Alternativamente, al hacer clic con el botón derecho del ratón (ratón - 3) se fija la marca en el punto y luego se desplaza al punto en el que ha hecho clic. Vea Comandos del ratón, para una descripción más detallada de estos comandos del ratón.

Por último, puede fijar la marca manteniendo pulsada la tecla Mayús mientras escribe ciertos comandos de movimiento del cursor (como S-right, S-C-f, S-C-n, etc.). Esto se llama selección de turno. Establece la marca en el punto anterior al punto en movimiento, pero sólo si no hay ninguna marca activa establecida mediante la selección de mayúsculas y minúsculas. La marca fijada por los comandos del ratón y por la selección de mayúsculas y minúsculas se comporta de forma ligeramente diferente a la marca habitual: cualquier otro comando de movimiento del cursor no desplazado lo desactiva automáticamente. Para obtener más detalles, véase Primary selection.

Muchos comandos que insertan texto, como C-y (yank), establecen la marca en el otro extremo del texto insertado, sin activarlo. Esto le permite volver fácilmente a esa posición (ver Mark ring). Puede ver que un comando hace esto cuando muestra `Mark set' en el área de eco.

En X, cada vez que cambia la región activa, Emacs guarda el texto de la región en la selección primaria. Esto le permite insertar ese texto en otras aplicaciones X con clics del ratón-2. Ver Primary selection.

16.2 Comandos para marcar objetos textuales

Aquí hay comandos para colocar el punto y la marca alrededor de un objeto textual como una palabra, lista, párrafo o página:

M-@
   Establecer marca despues del final de la siguiente palabra (mark-word).
   Este punto no se mueve.

C-M-@
   Establecer marca después del final de la siguiente expresión balanceada (mark-sexp).
   Este punto no se mueve.

M-h
   Mueve el punto al principio del párrafo actual y la marca de conjunto al final
   (mark-paragraph).

C-M-h
   Mueve el punto al comienzo de la definición de la función actual, y la marca de conjunto al
   final (mark-defun).

C-x C-p
   Mueve el punto al principio de la página actual, y la marca de conjunto al final (mark-page).

C-x h
   Mueve el punto al principio del búfer y la marca establecida al extremo (mark-whole-buffer).

M-@ (mark-word) pone la marca al final de la siguiente palabra (ver Words). Las invocaciones repetidas de este comando extienden la región avanzando de la marca una palabra a la vez. Como excepción, si la marca está activa y se encuentra antes del punto, M-@ mueve la marca hacia atrás desde su posición actual una palabra a la vez.

Este comando también acepta un argumento numérico n, que le dice que avance la marca por n palabras. Un argumento negativo mueve la marca hacia atrás con n palabras.

Del mismo modo, C-M-@ (mark-sexp) pone la marca al final de la siguiente expresión equilibrada (ver Expressions). Las invocaciones repetidas extienden la región a expresiones subsiguientes, mientras que los argumentos numéricos positivos o negativos mueven la marca hacia adelante o hacia atrás en el número de expresiones especificado.

Los otros comandos de la lista anterior establecen tanto el punto como la marca, para delimitar un objeto en el búfer. M-h (mark-paragraph) marca los párrafos (ver Paragraphs), C-M-h (mark-defun) marca las definiciones de nivel superior (ver Moving by Defuns), y C-x C-p (mark-page) marca las páginas (ver Pages). Las invocaciones repetidas juegan de nuevo el mismo papel, extendiendo la región a objetos consecutivos; de forma similar, los argumentos numéricos especifican cuántos objetos mover la marca.

C-x h (mark-whole-buffer) configura todo el buffer como región, poniendo el punto al principio y la marca al final.

16.3 Operando en la Región

Una vez tenga una región, aquí están algunas de las maneras en que puede operar en ella:

Matarlo con Cw (ver Killing ).
Copiarlo en el histórico de recortes con Mw (ver Yanking ).
Convertir caso con Cx Cx Cl o Cu (ver Caso ).
Deshacer los cambios dentro de ella utilizando Cu C- / (ver Deshacer ).
Reemplazar texto dentro de ella usando M-% (ver consulta Reemplazar ).
Sangrar con Cx <TAB> o CM- \ (ver sangría ).
Llenarlo como texto de relleno con Mx-región (véase Llenado ).
Comprobar la ortografía de las palabras dentro de ella con M- $ (véase la ortografía ).
Evaluarlo como código Lisp con Mx eval-región (véase Lisp Eval ).
Guardarlo en un registro con Cx rs (ver Registros ).
Guardarlo en un tampón o un archivo (ver texto de acumulación ).

Algunos comandos tienen un comportamiento predeterminado cuando la marca está inactiva, pero funcionan en la región si la marca está activa. Por ejemplo, M-$ (ispell-word) normalmente comprueba la ortografía de la palabra en el punto, pero comprueba el texto en la región si la marca está activa (véase Spelling). Normalmente, estos comandos utilizan comportamiento predeterminado si la región está vacía (es decir, si la marca y el punto están en la misma posición). Si desea que operen en la región vacía, cambie la variable use-empty-active-region a t.

Como se describe en Borrar, los comandos <DEL> (backward-delete-char) y delete (delete-forward-char) también actúan de esta manera. Si la marca está activa, borran el texto de la región. (Con la excepción de si proporciona un argumento numérico n, donde n no es uno, estos comandos eliminan n caracteres independientemente de si la marca está activa o no). Si cambia la variable delete-active-region a nil, entonces estos comandos no actúan de forma diferente cuando la marca está activa. Si cambia el valor para matar, estos comandos matan la región en lugar de eliminarla (ver Killing).

Otros comandos siempre operan en la región y no tienen un comportamiento predeterminado. Estos comandos suelen tener la palabra región en sus nombres, como C-w (kill-region) y C-x C-u (upcase-region). Si la marca está inactiva, funcionan en la "región inactiva", es decir, en el texto entre el punto y la posición en la que se fijó por última vez la marca (véase Mark ring). Para desactivar este comportamiento, cambie la variable mark-even-if-inactive a nil. A continuación, estos comandos indicarán un error si la marca está inactiva.

Por defecto, la inserción de texto ocurre normalmente incluso si la marca está activa; por ejemplo, al escribir "a" se inserta el carácter 'a', y luego se desactiva la marca. Si activa el modo Delete selección, un modo menor, la inserción de texto mientras la marca está activa hace que el texto de la región se borre primero. Para activar o desactivar el modo Delete Selection, escriba M-x delete-selection-mode.

16.4 El anillo de marcas

Cada búfer recuerda ubicaciones anteriores de la marca, en el histórico de marcas. Los comandos que establecen la marca también empujan a la marca antigua en este anillo. Uno de los usos del anillo de marcas es recordar a los puntos que es posible que desee volver.

C-<SPC> C-<SPC>

Ajuste la marca, empujándola sobre el anillo de marcas, sin activarlo.

C-u C-<SPC>

Mueve el punto a donde estaba la marca, y restaura la marca del anillo de marcas más antiguas.

El comando C-<SPC> C-<SPC> es útil cuando se desea utilizar la marca para recordar una posición a la que se puede volver. Presiona el punto actual sobre el anillo de marca, sin activar la marca (lo que haría que Emacs resaltara la región). En realidad se trata de dos invocaciones consecutivas de C-<SPC> (set-mark-command); la primera C-<SPC> establece la marca, y la segunda C-<SPC> la desactiva. (Cuando el modo Transient Mark está desactivado, C-<SPC> C-<SPC> activa temporalmente el modo Transient Mark; consulte Disabled Transient Mark.)

Para volver a una posición marcada, utilice set-mark-command con un argumento de prefijo: C-u C-<SPC>. Esto mueve el punto donde estaba la marca y la desactiva si estaba activa. Cada C-u C-<SPC> siguiente salta a una posición anterior almacenada en el anillo de marcas. Las posiciones por las que te mueves de esta manera no se pierden, sino que llegan hasta el final del anillo.

Si establece set-mark-command-repeat-pop en non-nil, inmediatamente después de escribir C-u C-<SPC>, puede escribir C-<SPC> en lugar de C-u C-<SPC> para desplazarse por el anillo de marcas. Por defecto, set-mark-command-repeat-pop es nil.

Cada búfer tiene su propio anillo de marcas. Todos los comandos de edición utilizan el anillo de marcas del búfer actual. En particular, C-u C-<SPC> siempre permanece en el mismo búfer.

La variable mark-ring-max especifica el número máximo de entradas a mantener en el anillo de marcas De forma predeterminada, hay 16 entradas. Si existen muchas entradas y se pulsa otra, se descarta la más antigua de la lista. La repetición de C-u C-<SPC> hace un ciclo a través de las posiciones que se encuentran actualmente en el anillo.

Si desea volver al mismo lugar una y otra vez, es posible que el anillo de marcas no sea lo suficientemente conveniente. Si es así, puede registrar la posición en un registro para su posterior recuperación (véase Saving Positions in Registers).

16.5 El anillo de marcas global

Además del anillo de marcas ordinario que pertenece a cada búfer, Emacs tiene un único anillo de marca global. Cada vez que se fija una marca, ésta se registra en el anillo de marca global además del anillo de marca propio del búfer actual, si se han cambiado los búferes desde el ajuste de marca anterior. Por lo tanto, el anillo de la marca global registra una secuencia de búferes en los que ha estado y, para cada búfer, un lugar en el que estableció la marca. La longitud del anillo de la marca global es controlada por el anillo de la marca global máximo, y es de 16 por defecto.

El comando C-x C-<SPC> (pop-global-mark) salta al buffer y a la posición de la última entrada en el anillo global. También rota el anillo, de modo que los usos sucesivos de C-x C-<SPC> le llevan a los búferes y posiciones de marca anteriores.

16.6 Selección de turnos

Si mantiene pulsada la tecla Mayúsculas mientras escribe un comando de movimiento del cursor, se fija la marca antes de mover el punto, de modo que la región se extiende desde la posición original del punto hasta su nueva posición. Esta característica se denomina selección de turno. Es similar a la forma en que se selecciona el texto en otros editores.

La marca establecida mediante la selección de mayúsculas y minúsculas se comporta un poco diferente de lo que hemos descrito anteriormente. En primer lugar, además de las formas habituales de desactivar la marca (como cambiar el texto del búfer o escribir C-g), la marca se desactiva con cualquier comando de movimiento del cursor sin desplazar. En segundo lugar, cualquier comando de movimiento del cursor que se mueva posteriormente evita tener que volver a colocar la marca. Por lo tanto, una serie de comandos de movimiento del cursor cambiados ajustarán continuamente la región.

La selección de mayúsculas y minúsculas sólo funciona si la tecla de movimiento del cursor desplazada no está ya vinculada a un comando separado (véase Customization). Por ejemplo, si enlaza S-C-f a otro comando, al escribir S-C-f se ejecuta ese comando en lugar de realizar una versión seleccionada con mayúsculas de C-f (forward-char).

Un conjunto de marcas mediante comandos del ratón se comporta de la misma manera que un conjunto de marcas mediante la selección de mayúsculas y minúsculas (véase Customization). Por ejemplo, si especifica una región arrastrando el ratón, puede continuar extendiendo la región utilizando los comandos de movimiento del cursor con desplazamiento. En cualquier caso, cualquier comando de movimiento del cursor no desplazado desactiva la marca.

Para desactivar la selección de mayúsculas y minúsculas, ajuste el modo shift-select-mode a nil. Al hacerlo, no se desactiva la configuración de la marca mediante comandos del ratón.

16.7 Desactivación del modo de marcación transitoria

El comportamiento predeterminado de la marca y de la región, en el que el ajuste de la marca la activa y resalta la región, se denomina modo Marca transitoria. Este es un modo menor que está habilitado por defecto. Se puede conmutar con M-x transient-mark-mode, o con el elemento de menú'Active Region Highlighting' en el menú 'Options'. Al apagarlo, Emacs pasa a un modo de funcionamiento alternativo:

1 Al fijar la marca, con comandos como C-<SPC> o C-x C-x, no se resalta la región. Por lo tanto, no se puede saber con sólo mirar dónde está ubicada la marca; hay que recordarlo.

2 La solución habitual a este problema es poner la marca y luego usarla pronto, antes de que te olvides de dónde está. También puede comprobar dónde está la marca utilizando C-x C-x, que intercambia las posiciones del punto y de la marca (véase Marca de ajuste).

3 Algunos comandos, que normalmente actúan en la región cuando la marca está activa, ya no lo hacen. Por ejemplo, normalmente M-% (query-replace) realiza reemplazos dentro de la región, si la marca está activa. Cuando el modo Marca de transitorios está desactivado, siempre funciona desde el punto hasta el final del búfer. Los comandos que actúan de esta manera se identifican en su propia documentación.

Mientras el modo Marca de transitorios está desactivado, puede activarlo temporalmente utilizando C-<SPC> C-<SPC> o C-u C-x C-x C-x.

C-<SPC> C-<SPC>

Fije la marca en el punto (como con C-<SPC>) y active el modo Marca de transitorios sólo una vez, hasta que la marca se desactive. (Esto no es realmente un comando separado; está usando el comando C-<SPC> dos veces.)

C-u C-x C-x

Cambiar punto y marca, activar la marca y habilitar temporalmente el modo Marca transitoria, hasta que la marca se desactive de nuevo. (Este es C-x C-x, el comando exchange-point-and-mark, con un argumento de prefijo.)

Estos comandos establecen o activan la marca y habilitan el modo Marca de transitorios sólo hasta que la marca se desactiva. Una de las razones por las que puede utilizarlos es que algunos comandos funcionan en todo el búfer en lugar de en la región cuando el modo Marca de transitorios está desactivado. Habilitar momentáneamente el modo de marca de transitorios le da una forma de usar estos comandos en la región.

Al especificar una región con el ratón (véase setting mark) o con la selección de shift-selection (véase shift selection), también se activa temporalmente el modo Marca de transitorios y se resalta la región.

17 Matar y texto en movimiento

En Emacs, matar significa borrar texto y copiarlo en el anillo de la muerte. Pegar (yanking) significa llevar el texto del anillo de muerte de vuelta al búfer. (Algunas aplicaciones utilizan los términos "cortar" y "pegar" para operaciones similares.) El anillo de muerte se llama así porque puede ser visualizado como un conjunto de bloques de texto dispuestos en un anillo, al que se puede acceder en orden cíclico. Ver Kill Ring.

Matar es la forma más común de mover o copiar texto dentro de Emacs. Es muy versátil, porque hay comandos para matar muchos tipos diferentes de unidades sintácticas.

Borrado y matado: Comandos que eliminan el texto.
Yanking:          Comandos que insertar texto.
Cortar y pegar:   Portapapeles y selecciones en las pantallas gráficas.
Acumular texto:   Otros métodos para añadir texto a la memoria intermedia.
Rectángulos:      Operando en texto en áreas rectangulares.
CUA enlaces:      El uso de C-x/C-C/C-V para matar y tirón.

17.1 Borrado y matado

La mayoría de los comandos que borran texto del búfer lo guardan en el anillo de la muerte. Éstas se conocen como órdenes de matar, y sus nombres normalmente contienen la palabra 'kill' (por ejemplo, kill-line). El anillo de matar almacena varios asesinatos recientes, no sólo el último, por lo que matar es una operación muy segura: no tienes que preocuparte mucho por perder texto que ya has matado. El anillo de la muerte es compartido por todos los búferes, por lo que el texto que se elimina en un búfer puede ser arrastrado a otro búfer.

Cuando se usa C-/ (undo) para deshacer un comando de matanza (ver Undo), éste devuelve el texto eliminado al búfer, pero no lo elimina del anillo de matanza.

En las pantallas gráficas, el texto de la matanza también se copia en el portapapeles del sistema. Vea Cut and paste.

Los comandos que borran texto pero no lo guardan en el anillo de muerte se conocen como comandos de borrado; sus nombres suelen contener la palabra 'delete'. Estos incluyen C-d (delete-char) y <DEL> (delete-backward-char), que borran sólo un carácter a la vez, y aquellos comandos que borran sólo espacios o líneas nuevas. Los comandos que pueden borrar cantidades significativas de datos no triviales generalmente realizan una operación de eliminación.

También puedes usar el ratón para matar y tirar. Vea Cortar y pegar.

Supresión:      Eliminación de pequeñas cantidades de texto y áreas en blanco.
Matar Líneas:   Cómo matar líneas enteras de texto a la vez.
Otros comandos: Comandos para matar a grandes regiones de texto, palabras y frases.
Matar Opciones: Las opciones que afectan a la matanza.

17.1.1 Supresión

Supresión significa borrar texto y no guardarlo en el histórico de recortes. En su mayor parte, la comandos de Emacs que el texto de eliminación son los que borrar un solo carácter, o sólo espacios en blanco.

<DEL>, Backspace
   Eliminar el carácter anterior o el texto de la región si está activo (delete-backward-char).

Delete
   Eliminar el carácter siguiente, o el texto de la región si está activo (delete-forward-char).

C-d
   Eliminar el carácter siguiente (delete-char).

M-\
   Eliminar espacios y tabuladores alrededor del punto (delete-horizontal-space).

M-<SPC>
   Eliminar espacios y tabulaciones en torno al punto, dejando un espacio (just-one-space).

C-x C-o
   Eliminar líneas en blanco alrededor de la línea actual (delete-blank-lines).

M-^
   Unir dos líneas mediante la supresión de la nueva línea intermedia junto con cualquier
   indentación siguiente (delete-indentation).

Ya hemos descrito los comandos básicos de borrado <DEL> (delete-backward-chard), delete (delete-forward-chard), y C-d (delete-char). Ver Erasing. Con un argumento numérico, borran el número de caracteres especificado. Si se omite el argumento numérico o uno, borran todo el texto de la región si está activo (ver Using region).

Los otros comandos de eliminación son aquellos que sólo eliminan caracteres de espacios en blanco: espacios, tabulaciones y líneas nuevas. M-\ (delete-horizontal-space) borra todos los espacios y tabuladores antes y después del punto. Con un argumento de prefijo, sólo se eliminan los espacios y los caracteres de tabulación anteriores al punto. M-<SPC> (just-one-space) hace lo mismo pero deja un solo espacio antes del punto, independientemente del número de espacios que existían anteriormente (incluso si no existían antes). Con un argumento numérico n, deja n espacios antes del punto si n es positivo; si n es negativo, elimina nuevas líneas además de espacios y tabulaciones, dejando -n espacios antes del punto.

C-x C-o (delete-blank-lines) borra todas las líneas en blanco después de la línea actual. Si la línea actual está en blanco, también borra todas las líneas en blanco que preceden a la línea actual (dejando una línea en blanco, la línea actual). En una línea en blanco solitaria, borra esa línea.

M-^ (delete-indentation une la línea actual y la línea anterior, eliminando una nueva línea y todos los espacios circundantes, normalmente dejando un solo espacio. Ver M-^.

17.1.2 Matar por líneas

C-k

Matar resto de la línea o de una o más líneas (kill-line).

C-S-backspace

Matar a toda una línea a la vez (kill-whole-line)

El comando kill es más simple C-k (kill-line). Si se utiliza al final de una línea, se mata el carácter de nueva línea de final de línea, la fusión de la siguiente línea en la actual (por lo tanto, una línea en blanco se elimina por completo). De lo contrario, C-k elimina todo el texto desde el punto hasta el final de la línea; si el punto era originalmente al principio de la línea, esto deja en blanco la línea.

Los espacios y tabulaciones al final de la línea se ignoran cuando se decide qué caso se aplica. Siempre y cuando el punto esté después del último carácter visible en la línea, puede estar seguro de que C-k matará a la nueva línea. Para matar una línea entera no en blanco, vaya al principio y escriba C-k dos veces.

En este contexto, "línea" significa una línea de texto lógica, no una línea de pantalla (véase Continuation lines).

Cuando a C-k se le da un argumento positivo n, mata n líneas y las nuevas líneas que las siguen (el texto en la línea actual antes del punto no se mata). Con un argumento negativo -n, mata n líneas que preceden a la línea actual, junto con el texto en la línea actual antes del punto. C-k con un argumento de cero mata el texto antes del punto en la línea actual.

Si la línea variable kill-whole-line no es nil, C-k al principio de una línea mata a toda la línea, incluida la siguiente línea nueva. Esta variable es normalmente nil.

C-S-backspace (kill-whole-line) mata a toda una línea incluyendo su nueva línea, independientemente de la posición del punto dentro de la línea. Tenga en cuenta que muchos terminales de texto le impedirán escribir la secuencia de teclas C-S-backspace.

17.1.3 Otros comandos Kill

C-w
   Matar región (kill-region).

M-w
   Copia la región en el histórico de recortes (kill-ring-save).

M-d
   Cortar la palabra siguiente (kill-word).

M-<DEL>
   Mata una palabra hacia atrás (backward-kill-word).

C-x <DEL>
   Mata hacia el principio de la frase (backward-kill-frase).

M-k
   Matar hasta el final de la frase (kill-frase).

C-M-k
   Matar la siguiente expresión (kill-sexp).

M-z char
   Matar a través de la siguiente aparición de char (zap-to-char).

Uno de los comandos de matanza más usados es C-w (kill-region), que mata el texto en la región (ver Mark). Del mismo modo, M-w (kill-ring-save) copia el texto de la región en el anillo de muerte sin eliminarlo del búfer. Si la marca está inactiva cuando escribe C-w o M-w, el comando actúa sobre el texto entre el punto y el último lugar en el que la fijó (consulte Using region).

Emacs también proporciona comandos para matar unidades sintácticas específicas: palabras, con M-<DEL> y M-d (ver words); expresiones, con C-M-k (ver Expressions); y oraciones, con C-x <DEL> y M-k (ver Sentences).

El comando M-z (zap-to-char) combina matar con buscar: lee un carácter y mata desde el punto hasta la siguiente ocurrencia de ese carácter inclusive en el buffer. Un argumento numérico actúa como un conteo repetido; un argumento negativo significa buscar hacia atrás y matar el texto antes de apuntar.

17.1.4 Las opciones para kill

Algunos buffers especializados contener texto, que no puede ser modificado y por lo tanto no se pueden matar por ser de sólo lectura. Los comandos kill trabajan especialmente en un búfer de sólo lectura: se mueven sobre el texto y copiarlo en el histórico de recortes, sin llegar a eliminarla de la memoria intermedia. Normalmente, también usan un pitido y mostrarán un mensaje de error cuando esto sucede. Sin embargo, si se establece la variable kill-read-only-ok a un valor non-nil, publican un mensaje en el área de eco para explicar por qué el texto no ha sido borrado.

Si cambia la variable kill-do-not-save-duplicates a un valor non nil, muertes posteriores idénticas producen una sola entrada en el-histórico de recortes, sin duplicación.

17.2 yanking

Yankear significa reinsertar texto que ya ha sido asesinado. La forma habitual de mover o copiar texto es matarlo y luego tirar de él a otra parte.

C-y
   Pega la última matanza en la memoria intermedia, en el punto (yank).

M-y
   Reemplazar el texto que acaba pegar con un lote anterior de texto cortado (yank-pop).

C-M-w
   Que el siguiente comando, si es un comando kill, se agregue al comando de matar anterior
   (append-next-kill).

El comando básico de pegar es C-y (yank). Inserta lo matado más reciente, dejando el cursor al final del texto insertado. También fija la marca al principio del texto insertado, sin activar la marca; esto le permite saltar fácilmente a esa posición, si lo desea, con C-u C-<SPC> (ver Mark ring).

Con un argumento de prefijo plano (C-u C-y), el comando deja el cursor delante del texto insertado y coloca la marca al final. Usando cualquier otro argumento de prefijo se especifica un asesinato anterior; por ejemplo, C-u 4 C-y reinserta el cuarto asesinato más reciente. Ver earlier kills.

En las pantallas gráficas, C-y comprueba primero si otra aplicación ha colocado texto en el portapapeles del sistema más recientemente que el último asesinato de Emacs. Si es así, inserta el texto del portapapeles en su lugar. Por lo tanto, Emacs trata eficazmente las operaciones de "cortar" o "copiar" del portapapeles realizadas en otras aplicaciones cuando Emacs mata, excepto que no se registran en el anillo de muerte. Vea Cut and paste, para más detalles.

Anillo de muertes:       Dónde se almacena texto cortado.
A principios de Muertes: Tirando algo muerto hace algún tiempo.
Al añadir Muertes:       Varias muertes en una fila y pegarlos todos.

17.2.1 El histórico de recortes

El anillo de muerte es una lista de bloques de texto que fueron previamente eliminados. Sólo hay un anillo de muerte, compartido por todos los búferes, por lo que puede matar el texto en un búfer y tirar de él en otro búfer. Esta es la forma habitual de mover el texto de un búfer a otro. (Existen otros métodos: por ejemplo, se puede almacenar el texto en un registro; véase Registers. Vea Acumulatinge text, para otras maneras de mover el texto.)

El número máximo de entradas en el anillo de muerte es controlado por la variable kill-ring-max. El valor predeterminado es 60. Si realiza un nuevo asesinato cuando se ha alcanzado este límite, Emacs hace espacio eliminando la entrada más antigua del anillo de muerte.

El contenido real del anillo de exterminio se almacena en una variable llamada kill-ring; puede ver todo el contenido del anillo de exterminio con C-h v kill-ring.

17.2.2 Tirando de Muertes anteriores

Como se explica en Yanking, puedes asar un argumento numérico a C-y para pegar texto que ya no es el asesinato más reciente. Esto es útil si recuerda qué entrada del anillo de la muerte desea. Si no lo haces, puedes usar el comando M-y (yank-pop) para recorrer las posibilidades.

Si el comando anterior era un comando pegar, M-y toma el texto que fue arrancado y lo reemplaza con el texto de un asesinato anterior. Así que, para recuperar el texto de la penúltima muerte, primero usa C-y para tirar de la última muerte, y luego usa M-y para reemplazarla con la muerte anterior. M-y sólo se permite después de un C-y u otro M-y.

Usted puede entender M-y en términos de un puntero "last yank" que apunta a una entrada en el anillo de muerte. Cada vez que matas, el puntero "last yank" se mueve hacia la nueva entrada en la parte delantera del anillo. C-y tira de la entrada a la que apunta el puntero "last yank". M-y mueve el puntero "last yank" a una entrada diferente, y el texto en el búfer cambia para que coincida. Suficientes comandos M-y pueden mover el puntero a cualquier entrada en el anillo, por lo que puede obtener cualquier entrada en el buffer. Eventualmente el puntero alcanza el final del anillo; el siguiente M-y vuelve a girar alrededor de la primera entrada de nuevo.

M-y mueve el puntero "last yank" alrededor del anillo, pero no cambia el orden de las entradas en el anillo, que siempre va desde el asesinato más reciente en la parte delantera hasta el más antiguo que todavía se recuerda.

M-y puede tomar un argumento numérico, que le dice cuántas entradas avanzar el puntero "last yank". Un argumento negativo mueve el puntero hacia el frente del anillo; desde el frente del anillo, se mueve "alrededor" hasta la última entrada y continúa hacia adelante desde allí.

Una vez que el texto que está buscando es introducido en el buffer, puede dejar de hacer comandos M-y y se quedará allí. Es sólo una copia de la entrada del anillo de muerte, así que editarlo en el buffer no cambia lo que hay en el anillo. Mientras no se realice un nuevo asesinato, el puntero "last yank" permanecerá en el mismo lugar en el anillo de muerte, por lo que la repetición de C-y tirará de otra copia del mismo asesinato anterior.

Cuando se llama a C-y con un argumento numérico, también se fija el puntero "last yank" a la entrada que se pega.

17.2.3 Anexión Muertes

Normalmente, cada comando de matar empuja una nueva entrada en el anillo de muerte. Sin embargo, dos o más comandos de matanza en una fila combinan su texto en una sola entrada, de modo que un solo C-y pega todo el texto como una unidad, tal como era antes de que fuera matada.

Por lo tanto, si quieres arrancar texto como una unidad, no necesitas matarlo todo con un comando; puedes seguir matando línea tras línea, o palabra tras palabra, hasta que lo hayas matado todo, y aún así puedes recuperarlo todo de una vez.

Los comandos que matan hacia adelante desde el punto se añaden al final del texto anterior matado. Los comandos que matan hacia atrás desde el punto agregan texto al principio. De esta manera, cualquier secuencia de comandos de eliminación mezclados hacia adelante y hacia atrás pone todo el texto eliminado en una sola entrada sin necesidad de reordenarlo. Los argumentos numéricos no rompen la secuencia de sumar muertes. Por ejemplo, supongamos que el búfer contiene este texto:

This is a line -!-of sample text.

con el punto mostrado por -!-. Si escribes M-d M-<DEL> M-d M-<DEL>, matando alternativamente hacia adelante y hacia atrás, terminas con `una línea de muestra' como una entrada en el anillo de la muerte, y `Esto es texto' en el buffer. (Tenga en cuenta el doble espacio entre `is' y `text', que puede limpiar con M-<SPC> o M-q)

Otra forma de eliminar el mismo texto es retroceder dos palabras con M-b M-b, y luego eliminar las cuatro palabras hacia adelante con C-u M-d. Esto produce exactamente los mismos resultados en el buffer y en el anillo de la muerte. M-f M-f M-f C-u M-<DEL> mata el mismo texto, todo yendo hacia atrás; una vez más, el resultado es el mismo. El texto en la entrada del anillo de la muerte siempre tiene el mismo orden que tenía en el búfer antes de que usted lo matara.

Si un comando kill está separado del último comando kill por otros comandos (no sólo argumentos numéricos), se inicia una nueva entrada en el anillo kill. Pero puedes forzarlo a que agregue primero escribiendo el comando C-M-w (append-next-kill) justo antes que él. El C-M-w le dice al siguiente comando, si es un comando kill, que agregue el texto que mata al último texto matado, en lugar de iniciar una nueva entrada. Con C-M-w, puede matar varios fragmentos de texto separados y acumularlos para que sean pegados en un solo lugar.

Un comando kill que sigue a M-w (kill-ring-save) no se añade al texto que M-w copió en el anillo de muerte.

17.3 Operaciones de cortar y pegar en pantallas gráficas

En la mayoría de los entornos gráficos de escritorio, puede transferir datos (normalmente texto) entre diferentes aplicaciones utilizando una función del sistema llamada portapapeles. En X, hay otras dos instalaciones similares disponibles: la selección primaria y la selección secundaria. Cuando Emacs se ejecuta en una pantalla gráfica, sus comandos kill y yank se integran con estas funciones, de modo que puede transferir fácilmente texto entre Emacs y otras aplicaciones gráficas.

De forma predeterminada, Emacs utiliza UTF-8 como sistema de codificación para las transferencias de texto entre programas. Si encuentra que el texto pegado no es lo que esperaba, puede especificar otro sistema de codificación escribiendo C-x <RET> x o C-x <RET> X. También puede solicitar un tipo de datos diferente personalizando el x-select-request-type. Véase Communication Coding.

Portapapeles:         Cómo Emacs usa el portapapeles del sistema.
Selección primaria:   La selección de texto seleccionado temporalmente.
Selección secundaria: Corte sin alterar el punto y la marca.

17.3.1 Uso del portapapeles

El portapapeles es la herramienta que la mayoría de las aplicaciones gráficas utilizan para "cortar y pegar". Cuando existe el portapapeles, los comandos kill y yank de Emacs lo utilizan.

Cuando usted mata un texto con un comando como C-w (kill-region), o lo copia al anillo de muerte con un comando como M-w (kill-ring-save), ese texto también se pone en el portapapeles.

Cuando un comando kill de Emacs pone texto en el portapapeles, normalmente se pierde el contenido del portapapeles existente. Opcionalmente, puede cambiar save-interprogram-paste-before-kill a t. Emacs primero lo guardará el portapapeles y luego en su anillo de muerte, evitando que pierda los datos antiguos del portapapeles, con el riesgo de un alto consumo de memoria si los datos resultan ser grandes.

Los comandos yank, como C-y (yank), también utilizan el portapapeles. Si otra aplicación "posee" el portapapeles, es decir, si ha cortado o copiado texto allí más recientemente que su último comando kill en Emacs, Emacs arranca del portapapeles en lugar del anillo kill.

Normalmente, pegar el anillo de muerte con M-y (yank-pop) no altera el portapapeles. Sin embargo, si cambia la selección de yank-pop-change-selection a t, entonces M-y guarda el nuevo yank en el portapapeles.

Para evitar que los comandos kill y yank accedan al portapapeles, cambie la variable x-select-enable-clipboard a nil.

Muchos entornos de escritorio X soportan una característica llamada el gestor de portapapeles. Si sale de Emacs mientras es el "propietario" actual de los datos del portapapeles, y hay un administrador de portapapeles en ejecución, Emacs transfiere los datos del portapapeles al administrador de portapapeles para que no se pierdan. En algunas circunstancias, esto puede causar un retraso al salir de Emacs; si desea evitar que Emacs transfiera datos al administrador del portapapeles, cambie la variable x-select-enable-clipboard-manager a nil.

Antes de Emacs 24, los comandos kill y yank utilizaban la selección primaria (ver Selección primaria), no el portapapeles. Si prefiere este comportamiento, cambie x-select-enable-clipboard a nil, x-select-enable-primary a t, y mouse-drag-copy-region a t. En este caso, puede usar los siguientes comandos para actuar explícitamente en el portapapeles: clipboard-kill-region mata la región y la guarda en el portapapeles; clipboard-kill-ring-save copia la región al anillo de muerte y la guarda en el portapapeles; y clipboard-yank pega el contenido del portapapeles en el punto.

Normalmente, al girar el anillo de corte con Mi (yank-pop) no altera el portapapeles. Sin embargo, si cambia yank-pop-cambio-selección de t, entonces mi guarda el nuevo tirón en el portapapeles.

Para evitar matar y tirar de comandos de acceso al portapapeles, cambiar la variable x-select-enable-clipboard a cero.

Muchos entornos de escritorio X apoyan una característica llamada el gestor de portapapeles. Si sale de Emacs mientras que es el actual "dueño" de los datos del portapapeles, y hay un gestor de portapapeles en marcha, Emacs transfiere los datos del portapapeles al gestor de portapapeles de modo que no se pierde. En algunas circunstancias, esto puede causar un retraso al salir de Emacs; Si desea evitar que Emacs de transferir los datos al gestor de portapapeles, cambiar la variable x-select-enable-clipboard-manager a cero.

Antes de Emacs 24, los comandos kill y yank utilizan la selección primaria (véase la selección primaria ), no el portapapeles. Si prefiere este comportamiento, cambio en el selecto x-enable-portapapeles para nada, X-select-enable-primaria de t, y el ratón y arrastrar-copy-region a t. En este caso, puede utilizar los siguientes comandos para actuar de forma explícita en el portapapeles: portapapeles-kill-región mata a la región y lo guarda en el portapapeles, portapapeles-kill-ring-guardar copias de la región para el histórico de recortes y lo guarda en el portapapeles; y el portapapeles-tirón da un tirón el contenido del portapapeles en el punto.

17.3.2 Cortar y pegar con otras aplicaciones de ventana

Bajo el sistema de ventanas X, existe una selección primario que contiene el último tramo del texto seleccionado en una aplicación X (normalmente arrastrando el ratón). Por lo general, este texto se puede insertar en otras aplicaciones de X por el clic de ratón-2. La selección primaria es independiente del portapapeles. Sus contenidos son más "frágil"; se sobrescribe cada vez que se selecciona el texto con el ratón, mientras que el portapapeles solamente se sobrescribe con los comandos "copiar" "corte" o explícita.

En X, siempre que la región está activa (ver Marks), el texto de la región se guarda en la selección primaria. Esto se aplica independientemente de si la región se hizo arrastrando o haciendo clic en el ratón (ver ratón Comandos), o mediante comandos de teclado (por ejemplo, tecleando C-<SPC> y el punto en movimiento, véase Configuración de Marcos).

Si cambia la variable x-select-enable-clipboard a only Emacs guardatemporalmente regiones activas para la selección primaria, es decir, las realizadas con el ratón o con la selección del cambio (véase Selección Shift). Si cambia select-active-regions a nil, Emacs evita guardar las regiones activas en la selección primaria por completo.

Para insertar la selección primaria en un búfer de Emacs, haga clic del ratón-2 (mouse-yank-primary) donde desea insertarlo. Ver Mouse Commands.

MS Windows no proporciona ninguna selección primaria, pero Emacs la emula en una única sesión de Emacs almacenando el texto seleccionado internamente. Por lo tanto, todas las funciones y comandos relacionados con la selección primaria funcionan en Windows como en X, para cortar y pegar dentro de la misma sesión, pero no entre sesiones de Emacs o con otras aplicaciones.

17.3.3 Selección secundaria

Además de la selección primaria, el sistema X Window proporciona una segunda función similar conocida como selección secundaria. Hoy en día, pocas aplicaciones X hacen uso de la selección secundaria, pero se puede acceder a ella utilizando los siguientes comandos de Emacs:

M-Drag-Ratón-1
   Establecer la selección secundaria, con un extremo en el lugar donde se presiona hacia abajo
   el botón, y el otro extremo en el lugar donde lo suelte (mouse-set-secundary). El texto
   seleccionado se pone de relieve, utilizando la cara selección secundaria, mientras arrastra.
   La ventana se desplaza de forma automática si se arrastra el ratón de la parte superior o
   inferior de la ventana, al igual que el mmouse-set-region (véase el commands mouse). Este
   comando no altera el histórico de recortes.

M-Ratón-1
   Establecer un punto final para la selección secundaria (mouse-start-secondary).

M-Ratón-3
   Establecer la selección secundaria, con un extremo en la posición del clic y el otro en la
   posición indicada con M-Ratón-1 (mouse-secundary-save-then-kill). Esto también pone el texto
   seleccionado en el histórico de recortes. Un segundo M-Ratón-3 en el mismo lugar mata a la
   selección secundaria que acaba de hacer.

M-Ratón-2
   Insertar la selección secundaria, donde se hace clic, colocando el punto al final del texto
   pegado (mouse-yank-secundary).

Al hacer doble clic o triple de M-Ratón-1 funciona en palabras y líneas, al igual que el ratón-1.

Si mouse-yank-at-point es non nil, M-Ratón-2 pega en el punto. Entonces no importa precisamente donde se hace clic, o incluso cuál de las ventanas del marco que haga clic. Ver Mouse commands.

17.4 La acumulación de texto

Normalmente copiamos o movemos el texto matándolo y tirando de él, pero hay otros métodos convenientes para copiar un bloque de texto en muchos lugares, o para copiar muchos bloques de texto dispersos en un lugar. Aquí describimos los comandos para acumular fragmentos de texto dispersos en un búfer o en un archivo.

Mx append-to-buffer    Anexar región para el contenido de un búfer especificado.
Mx prepend-to-buffer   región Prefijo para el contenido de un búfer especificado.
Mx copy-to-buffer      Copiar región en un búfer especificado, eliminando viejos contenidos de ese búfer.
Insert-buffer mx       Insertar el contenido de un búfer especificado en el buffer actual en el punto.
Mx append-to-file      Anexar región para el contenido de un archivo especificado, en el extremo.

Para acumular texto en un búfer, utilice M-x append-to-buffer. Esto lee un nombre de búfer y luego inserta una copia de la región en el búfer especificado. Si especifica una memoria intermedia inexistente, append-to-buffer crea la memoria intermedia. El texto se inserta dondequiera que haya un punto en ese búfer. Si ha estado utilizando el búfer para editar, el texto copiado se coloca en el centro del texto del búfer, comenzando desde cualquier punto en el que se encuentre en ese momento.

El punto en ese buffer se deja al final del texto copiado, por lo que los usos sucesivos de append-to-buffer acumulan el texto en el buffer especificado en el mismo orden en que fueron copiados. Estrictamente hablando, append-to-buffer no siempre se agrega al texto que ya está en el buffer, sólo se agrega si el punto en ese buffer está al final. Sin embargo, si append-to-buffer es el único comando que usa para alterar un buffer, entonces el punto siempre está al final.

M-x prepend-to-buffer es igual que append-to-buffer, excepto que el punto en el otro buffer se deja antes del texto copiado, por lo que los sucesivos prependings añaden el texto en orden inverso. M-x copy-to-buffer es similar, excepto que cualquier texto existente en el otro búfer se borra, por lo que el búfer se queda conteniendo sólo el texto recién copiado en él.

Con el comando M-x insert-buffer se puede recuperar el texto acumulado de otro búfer. Esto solicita el nombre de un búfer e inserta una copia de todo el texto de ese búfer en el búfer actual en el punto, dejando el punto al principio del texto insertado. También añade la posición del final del texto insertado al anillo de marca, sin activar la marca. Véase Memoria intermedia, para obtener información de fondo sobre las memorias intermedias.

En lugar de acumular texto en un búfer, puede añadir texto directamente en un archivo con M-x append-to-file. Esto solicita un nombre de archivo y añade el texto de la región al final del archivo especificado. El archivo se cambia inmediatamente en el disco.

Debe usar append-to-file sólo con los archivos que no se visitan en Emacs. Usarlo en un archivo que está editando en Emacs cambiaría el archivo que se encuentra detrás de Emacs, lo que puede provocar la pérdida de parte de la edición.

Otra forma de mover el texto es almacenarlo en un registro. Ver Registros.

17.5 rectángulos

Los comandos de rectángulo operan en áreas rectangulares del texto: todos los caracteres entre un determinado par de columnas, en un determinado rango de líneas. Emacs tiene comandos para matar rectángulos, arrancar rectángulos muertos, borrarlos, rellenarlos con espacios en blanco o texto, o borrarlos. Los comandos de rectángulo son útiles con texto en formato multicolumna, y para cambiar el texto en o a fuera de dichos formatos.

Para especificar un rectángulo para que un comando funcione, coloque la marca en una esquina y apunte a la esquina opuesta. El rectángulo así especificado se denomina región-rectángulo. Si el punto y la marca están en la misma columna, el rectángulo región está vacío. Si están en la misma línea, el rectángulo región es una línea de alto.

El rectángulo región se controla de la misma manera que la región. Pero recuerde que una combinación dada de valores de puntos y marcas puede ser interpretada como una región o como un rectángulo, dependiendo del comando que los use.

C-x r k
   Matan el texto de la región-rectángulo, el ahorro de su contenido como el "último rectángulo
   muerto" (kill-rectangle).

C-x r M-w
   Guarde el texto de la región-rectángulo como el "último rectángulo muerto"
   (copy-rectangle-as-kill).

C-x r d
   Eliminar el texto de la región-rectángulo (delete-rectangle).

C-x r y
   Tire del último rectángulo matado con su esquina superior izquierda en el punto
   (yank-rectangle).

C-x r o
   Insertar espacio en blanco para llenar el espacio de la región-rectángulo (open-rectangle).
   Esto empuja el contenido previo de la región-rectángulo a la derecha.

C-x r N
   Insertar números de línea a lo largo del borde izquierdo de la región-rectángulo
   (rectangle-number-lines). Esto empuja el contenido previo de la región-rectángulo a la derecha.

C-x r c
   Desactive la región-rectángulo mediante la sustitución de la totalidad de sus contenidos
   con espacios (clear-rectangle).

M-x delete-whitespace-rectangle
   Eliminar los espacios en blanco en cada una de las líneas en el rectángulo especificado,
   a partir de la columna borde izquierdo del rectángulo.

C-x r t string <RET>
   Reemplazar el contenido del rectángulo con la cadena en cada línea (string-rectangle).

M-x string-insert-rectangle <RET> string <RET>
   Insertar cadena en cada línea del rectángulo.

Las operaciones de rectángulo se dividen en dos clases: comandos para borrar o insertar rectángulos, y comandos para hacer rectángulos en blanco.

Hay dos maneras de borrar el texto en un rectángulo: C-x r d (delete-rectangle) para borrar el texto directamente, o C-x r k (kill-rectangle) para eliminar el texto y guardarlo como el último rectángulo eliminado. En ambos casos, borrar el rectángulo-región es como borrar el texto especificado en cada línea del rectángulo; si hay algún texto siguiente en la línea, se mueve hacia atrás para llenar el vacío.

"Matar" un rectángulo no es matar en el sentido habitual; el rectángulo no se almacena en el anillo de muerte, sino en un lugar especial que sólo registra el rectángulo más reciente matado. Esto se debe a que tirar de un rectángulo es tan diferente de tirar de un texto lineal que se tienen que usar diferentes comandos de yank. El yank no está definido para los rectángulos.

C-x r M-w (copy-rectangle-as-kill) es el equivalente a M-w para los rectángulos: registra el rectángulo como el "último rectángulo asesinado", sin borrar el texto del buffer.

Para tirar del último rectángulo asesinado, escriba C-x r y (yank-rectangle). La primera línea del rectángulo se inserta en el punto, la segunda línea del rectángulo se inserta en la misma posición horizontal y una línea vertical debajo, y así sucesivamente. El número de líneas afectadas viene determinado por la altura del rectángulo guardado.

Por ejemplo, puede convertir dos listas de una sola columna en una lista de dos columnas matando una de las listas de una sola columna como un rectángulo, y luego tirando de ella al lado de la otra lista.

También puede copiar rectángulos dentro y fuera de los registros con C-x r r r y C-x r i r. Véase Registros rectángulos.

Hay dos comandos que se pueden usar para hacer rectángulos en blanco: C-x r c (clear-rectangle) borra el texto existente en el rectángulo región, y C-x r o (open-rectangle) que inserta un rectángulo en blanco.

M-x delete-whitespace-rectangle elimina los espacios en blanco horizontales a partir de una columna en particular. Esto se aplica a cada una de las líneas del rectángulo, y la columna se especifica en el borde izquierdo del rectángulo. El borde derecho del rectángulo no hace ninguna diferencia en este comando.

El comando C-x r N (rectangle-number-lines) inserta números de línea a lo largo del borde izquierdo del rectángulo-región. Normalmente, la numeración comienza desde 1 (para la primera línea del rectángulo). Con un argumento de prefijo, el comando solicita un número desde el que comenzar y una cadena de formato con la que imprimir los números.

El comando C-x r t (string-rectangle) reemplaza el contenido de una región-rectángulo por una cadena en cada línea. No es necesario que el ancho de la cadena sea el mismo que el ancho del rectángulo. Si la anchura de la cadena es menor, el texto después del rectángulo se desplaza hacia la izquierda; si la cadena es más ancha que el rectángulo, el texto después del rectángulo se desplaza hacia la derecha.

El comando M-x string-insert-rectangle es similar a string-rectangle, pero inserta la cadena en cada línea, desplazando el texto original hacia la derecha.

17.6 Vinculaciones CUA

El comando M-x cua-mode establece enlaces de teclas que son compatibles con el sistema Common User Access (CUA) utilizado en otras aplicaciones.

Cuando el modo CUA está activado, las teclas C-x, C-c, C-v y C-z invocan comandos que cortan (matan), copian, pegan y deshacen respectivamente. Las teclas C-x y C-c realizan el corte y la copia sólo si la región está activa. De lo contrario, siguen actuando como claves de prefijo, de modo que los comandos estándar de Emacs como C-x C-c siguen funcionando. Tenga en cuenta que esto significa que la variable mark-even-if-inactive no tiene ningún efecto para C-x y C-c (ver Using Region).

Para introducir un comando Emacs como C-x C-f mientras la marca está activa, utilice uno de los siguientes métodos: mantenga pulsada la tecla Mayúsculas junto con la tecla de prefijo, por ejemplo, S-C-x C-f, o escriba rápidamente la tecla de prefijo dos veces, por ejemplo, C-x C-x C-f.

Para desactivar la anulación del enlace estándar de Emacs por el modo CUA, mientras se conservan las otras características del modo CUA descritas a continuación, configure la variable cua-enable-cua-keys a nil.

En el modo CUA, el texto escrito reemplaza la región activa como en el modo Delete-Selection (ver Mouse command).

El modo CUA proporciona soporte mejorado para rectángulos con resaltado de rectángulos visibles. Utilice C-<RET> para iniciar un rectángulo, extiéndalo usando los comandos de movimiento, y córtelo o cópielo usando C-x o C-c <RET>* mueve el cursor a la siguiente esquina (en el sentido de las agujas del reloj) del rectángulo, para que pueda expandirlo fácilmente en cualquier dirección. El texto normal que escriba se inserta a la izquierda o a la derecha de cada línea del rectángulo (en el mismo lado que el cursor).

Con CUA puede copiar fácilmente texto y rectángulos dentro y fuera de los registros proporcionando un prefijo numérico de un dígito a los comandos kill, copy, y yank, por ejemplo, C-1 C-c copia la región en el registro 1, y *C-2 C-v copia el contenido del registro 2.

El modo CUA también tiene una función de marcación global que permite mover y copiar fácilmente el texto entre búferes. Utilice C-S-<SPC> para activar y desactivar la marca global. Cuando la marca global está activada, todo el texto que elimine o copie se inserta automáticamente en la marca global, y el texto que escriba se inserta en la marca global en lugar de en la posición actual.

Por ejemplo, para copiar palabras de varios búferes en una lista de palabras de un búfer determinado, establezca la marca global en el búfer de destino, luego navegue hasta cada una de las palabras que desee en la lista, márquela (por ejemplo, con S-M-f), cópiela en la lista con C-c o M-w e inserte una nueva línea después de la palabra en la lista de destino pulsando <RET>.

18 Registros

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

Cada registro tiene un nombre que consiste en un solo carácter, que denotaremos con r; r puede ser una letra (como'a') o un número (como'1'); lo importante es el caso, por lo que el registro 'a' no es lo mismo que el registro 'A'.

Un registro puede almacenar una posición, un fragmento de texto, un rectángulo, un número, una configuración de ventana o un nombre de archivo, pero sólo una cosa en un momento dado. Lo que sea que guarde en un registro permanece allí hasta que guarde algo más en ese registro. Para ver lo que contiene el registro r, use M-x view-register:

M-x view-register <RET> r

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

De posición:         Posiciones del ahorro en los registros.
De texto:            Texto de verano en los registros.
De rectángulo:       Ahorro de rectángulos en los registros.
De configuración:    Almacenamiento de configuraciones de ventanas en los registros.
Número de Registros  Los números en los registros.
De archivos:         Los nombres de archivo de registros.
Marcadores           Marcadores son como registros, pero persistentes.

18.1 Las posiciones en el ahorro de Registros

C-x r <SPC> r
   Registrar la posición del punto y el buffer actual en el registro r (point-to-register).

C-x r j r
   Saltar a la posición y al buffer guardado en el registro r (jump-to-register).

Escribir C-x r <SPC> (point-to-register), seguido de un carácter r, guarda tanto la posición del punto como el búfer actual en el registro r. El registro retiene esta información hasta que se almacena algo más en él.

El comando C-x r j r cambia al búfer registrado en el registro r, y se mueve a la posición registrada. El contenido del registro no se cambia, por lo que puede saltar a la posición guardada cualquier número de veces.

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

18.2 Guardar el texto en los Registros

Cuando quieras insertar una copia del mismo texto varias veces, puede ser incómodo arrancarlo del anillo de muerte, ya que cada vez que matas a alguien, éste se mueve más abajo del anillo. Una alternativa es almacenar el texto en un registro y luego recuperarlo.

C-x r s r
   Registro de copias en el registro r (copy-to-register).

C-x r i r
   Insertar texto desde el registro r (insert-register).

M-x append-to-register <RET> r
   Anexar región al texto en el registro r. Cuando el registro r contiene texto, puede usar
   C-x r + (increment-register) unir a ese registro. Tenga en cuenta que el comando C-x r + r
   se comporta de manera diferente si contiene un número. Ver Número de registros.

M-x prepend-to-register <RET> r
   Prefijo para la región de texto en el registro r.

C-x r s r almacena una copia del texto de la región en el registro llamado r. Si la marca está inactiva, Emacs primero reactiva la marca donde se estableció por última vez. La marca se desactiva al final de este comando. Ver Mark. C-u C-x r s r, el mismo comando con un argumento de prefijo, copia el texto en el registro r y también elimina el texto del búfer; puede pensar en esto como "mover" el texto de la región al registro.

M-x append-to-register <RET> r añade la copia del texto en 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ñadirlo al registro. El comando prepend-to-register es similar, excepto que substituie el texto de la región al texto en el registro en lugar de agregarlo.

Cuando esté recolectando texto usando append-to-register y prepend-to-register, es posible que desee separar las piezas recolectadas individualmente usando un separador. En ese caso, configure un separador de registros y almacene el texto del separador en ese registro. Por ejemplo, para obtener líneas nuevas dobles como separador de texto durante el proceso de recopilación, puede utilizar la siguiente configuración.

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

C-x r i r inserta en el buffer el texto del registro r. Normalmente deja el punto delante del texto y coloca la marca después, sin activarlo. Con un argumento numérico, en su lugar pone el punto después del texto y la marca antes

18.3 Guardar registro de rectangulos

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

C-x r r r
   Copiar la región-rectángulo en el registro r (copy-rectangle-to-register). Con un argumento
   numérico tambien lo borra.

C-x r i r
   Inserte el rectángulo almacenada en el registro r (si contiene un rectángulo) (insert-register).

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

18.4 Guardar la configuración de la ventana en los 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. Consulte Windows, para obtener información sobre las configuraciones de ventanas.

C-x r w r
   Guardar el estado de las ventanas del marco seleccionado en el registro r
   (window-configuration-to-register).

C-x r f r
   Guardar el estado de todos los frames, incluyendo todas sus ventanas, en el registro r
   (frame-configuration-to-register).

Utilice C-x r j r para restaurar la configuración de una ventana o marco. Este es el mismo comando utilizado para restaurar una posición del cursor. Cuando restaura una configuración de marcos, cualquier marco existente que no esté incluido en la configuración se vuelve invisible. Si desea eliminar estos fotogramas en su lugar, utilice C-u C-x r j r.

18.5 Mantener los números en los Registros

Hay comandos para almacenar un número en un registro, para insertar el número en el buffer en decimales, y para incrementarlo. Estos comandos pueden ser útiles en las macros de teclado (ver Macros de teclado).

C-u number C-x r n x
   Número de registro en el registro r (number-to-register).

C-u number C-x r + r
   Si r contiene un número, incrementar el número en dicho registro por número.
   Tenga en cuenta que comando C-x r + (increment-register) se comporta de manera
   diferente si r contiene texto. Ver Registros de texto.

C-x r i r
   Introduzca el número de registro r en el buffer.

C-x r i es el mismo comando utilizado para insertar cualquier otro tipo de contenido de registro en el buffer. 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 el registro.

18.6 Mantener nombres de archivo en los Registros

Si visita determinados nombres de archivos con frecuencia, puede visitarlos más cómodamente si coloca sus nombres en los registros. Aquí está el código Lisp usado para poner un nombre de archivo en un registro:

(set-register ?r '(file . name))

Por ejemplo:

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

pone el nombre del archivo que se muestra en el registro 'z'.

Para visitar el archivo cuyo nombre está en el registro r se escribe 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 referencia.)

18.7 marcadores

Los marcadores son algo así como los registros en los que se registran las posiciones a las que se puede saltar. A diferencia de los registros, tienen nombres largos y persisten automáticamente de una sesión de Emacs a otra. El uso prototípico de los marcadores es registrar "dónde estaba leyendo" en varios archivos.

C-x r m <RET>
   Ajuste el marcador para el fichero visitado, en el punto.

C-x r m bookmark <RET>
   Ajuste el marcador denominado bookmark en el punto (bookmark-set).

C-x r b bookmark <RET>
   Desplazarse al marcador denominado bookmark (bookmark-jump).

C-x r l
   Listar todos los marcadores (list-bookmarks).

M-x bookmark-save
   Guarde todos los valores de marcadores actuales en el archivo de marcadores por defecto.

El uso prototípico de los marcadores es registrar una posición actual en cada uno de los varios archivos. Por lo tanto, el comando C-x r m, que establece un marcador, utiliza el nombre del archivo visitado como predeterminado para el nombre del marcador. Si nombra cada marcador después del archivo al que apunta, puede volver a visitar cualquiera de esos archivos con C-x r b, y al mismo tiempo moverse a la posición del marcador.

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

Cuando matas a Emacs, Emacs guarda tus favoritos, si has cambiado cualquier valor de los favoritos. 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 (para compatibilidad con versiones anteriores de Emacs, si tiene un archivo llamado ~/.emacs.bmk, se utiliza en su lugar). Los comandos de marcadores cargan automáticamente el archivo de marcadores predeterminado. Este almacenamiento y carga es la forma en que los marcadores persisten de una sesión de Emacs a otra.

Si establece la variable bookmark-save-flag en 1, cada comando que establezca un marcador también guardará sus marcadores; de esta forma, no perderá ningún valor de los marcadores incluso si Emacs falla. El valor, si es un número, indica cuántas modificaciones de marcadores deben realizarse entre guardar. Si establece esta variable como nil, Emacs sólo guarda marcadores si utiliza explícitamente M-x bookmark-save.

Los valores de posición de los marcadores se guardan con el contexto circundante, de modo que el salto de marcador puede encontrar la posición correcta incluso si el archivo se modifica ligeramente. El tamaño variable de la búsqueda de marcadores indica cuántos caracteres de contexto se deben registrar a cada lado de la posición del marcador.

Aquí hay algunos comandos adicionales para trabajar con marcadores:

M-x bookmark-load <RET> filename <RET>
   Cargar un nombre de archivo con nombre de archivo que contiene una lista de valores de
   marcadores. Puede utilizar este comando, así como dirección de la escritura, para trabajar
   con otros archivos de valores de marcador, además de su archivo de marcadores por defecto.

M-x bookmark-write <RET> filename <RET>
   Guarde todos los valores de marcadores actuales en el nombre de archivo del archivo.

M-x bookmark-delete <RET> bookmark <RET>
   Eliminar el marcador denominado bookmark.

M-x bookmark-insert-location <RET> bookmark <RET>
   Inserte en el búfer el nombre del archivo al que apunta el marcador.

M-x bookmark-insert <RET> bookmarkr <RET>
   Inserte en el búfer el contenido del archivo al que apunta el marcador.

19 Controlar la presentación

Dado que sólo parte de un buffer de gran tamaño se ajusta en la ventana, Emacs tiene que mostrar solamente una parte de ella. Este capítulo describe los comandos y variables que permiten especificar qué parte del texto que desea ver, y cómo se muestra el texto.

Desplazamiento:     Comandos para mover el texto arriba y abajo en una ventana.
Recentrado:         Un comando de desplazamiento que se centra la línea actual.
Scrolling:          Desplazamiento de forma automática. Volver a mostrar texto se desplaza.
Horizontal:         Mover el texto a la izquierda y la derecha en una ventana.
Estrechamiento:     Visualización y edición a una porción de la memoria intermedia.
Visualización:      Visualización de buffers de sólo lectura.
Follow mode:        Permite que dos ventanas se desplacen como una sola.
Faces:              Cambiar el estilo de visualización usando caras.
Colores:            Especificación de colores para las caras.
Las caras estándar: Las caras principales predefinidas.
Escala de texto:    Aumentar o disminuir el tamaño del texto en un búfer.
Bloqueo de fuente:  Modo menor para poner de relieve el uso de caras sintácticas.
Resaltar:           Que texto ha de resaltarse.
Flecos:             Activación/desactivación de franjas de ventanas.
Viendo Límites:     Viendo la parte superior e inferior de la memoria intermedia.
Espacios en blanco: Mostrando espacios en blanco finales posiblemente inútiles.
Selective Display:  Ocultación de líneas con una gran cantidad de sangría.
Modo de línea:      Visualización de características opcionales de la línea de modo.
Ver texto:          Cómo se muestran normalmente los caracteres de texto.
Cursor Display:     Características para mostrar el cursor.
Truncamiento línea: Truncado de líneas para ajustarse al ancho de la pantalla.
Línea visual:       Ajustar línea de la pantalla y edición de línea base.
Personalizada:      La información sobre las variables de personalización de pantalla.

19.1 Desplazamiento

Si una ventana es demasiado pequeña para mostrar todo el texto en su memoria intermedia, muestra sólo una parte de ella. Comandos de desplazamiento cambian la parte que se muestra de la memoria intermedia.

Desplazamiento "hacia delante" o "arriba" hace avanzar la porción del búfer mostrado en la ventana; lo que equivale a mover el texto del búfer hacia arriba con respecto a la ventana. Desplazamiento "hacia atrás" o "abajo" muestra una porción anterior de la memoria intermedia, y se mueve el texto hacia abajo con respecto a la ventana.

En Emacs, el desplazamiento "hacia arriba" o "abajo" se refiere a la dirección en la que el texto se desplaza en la ventana, no la dirección en la que la ventana se mueve en relación con el texto. Esta terminología fue adoptada por Emacs antes de que el significado moderno de "desplazamiento hacia arriba" y "el desplazamiento hacia abajo" se generalizó. Por lo tanto, el resultado extraño que <AvPág> es hacia "arriba" en el sentido de Emacs.

La porción de un buffer que muestra una ventana siempre contiene el punto. Si se mueve el punto más allá de la parte inferior o superior de la ventana, el desplazamiento tiene lugar de forma automática para que vuelva en pantalla (véase el desplazamiento automático ). También puede desplazarse de forma explícita con estos comandos:

C-v, <next>, <pagedown>
   Desplazarse hacia adelante por casi una ventana completa (scroll-up-command).

M-v, <prior>, <pageup>
   Se desplaza hacia atrás (scroll-down-command).

C-v
   (Scroll-up-command) se desplaza hacia adelante por casi toda la altura de la ventana.
   El efecto es tomar las dos líneas en la parte inferior de la ventana y ponerlos en la
   parte superior, seguido de líneas que antes no eran visibles. Si el punto estaba en el
   texto que se desplaza por la parte superior, que termina en la nueva línea superior de
   la ventana. La tecla <next> (o <Av Pág>) es equivalente a C-v.

M-v
   (Scroll-down-command) Se desplaza hacia atrás de una manera similar. La tecla <prior>
   (o <RePág>) es equivalente a M-v.

El número de líneas de superposición que dejan estos comandos de desplazamiento está controlado por la variable next-screen-context-lines, cuyo valor por defecto es 2. Puede proporcionar a los comandos un argumento de prefijo numérico, n, para que se desplacen por n líneas; Emacs intenta dejar el punto sin cambios, de modo que el texto y el punto se muevan juntos hacia arriba o hacia abajo. C-v con un argumento negativo es como M-v y viceversa.

Por defecto, estos comandos señalan un error (mediante pitidos o parpadeos en la pantalla) si no es posible desplazarse más, porque la ventana ha alcanzado el principio o el final del búfer. Si cambia la variable scroll-error-top-bottom a t, el comando mueve el punto a la posición más lejana posible. Si el punto ya está ahí, el comando señala un error.

A algunos usuarios les gustan los comandos de desplazamiento para mantener el punto en la misma posición de la pantalla, de modo que el desplazamiento hacia atrás a la misma pantalla devuelve convenientemente el punto a su posición original. Puede activar este comportamiento a través de la variable scroll-preserve-screen-position. Si el valor es t, Emacs ajusta el punto para mantener el cursor en la misma posición de la pantalla cada vez que un comando de desplazamiento lo desplaza fuera de la ventana, en lugar de moverlo a la línea superior o inferior. Con cualquier otro valor que no sea cero, Emacs ajusta el punto de esta manera incluso si el comando de desplazamiento deja el punto en la ventana. Esta variable afecta a todos los comandos de desplazamiento documentados en esta sección, así como al desplazamiento con la rueda del ratón (ver Comandos del ratón); en general, afecta a cualquier comando que tenga una propiedad no nil para scroll-command.

Los comandos M-x scroll-up y M-x scroll-down se comportan de forma similar a los comandos scroll-up y scroll-down, excepto que no obedecen a los comandos scroll-error-top-bottom. Antes de Emacs 24, estos eran los comandos predeterminados para desplazarse hacia arriba y hacia abajo. Los comandos M-x scroll-up-line y M-x scroll-down-line desplazan la ventana actual de una línea a la vez. Si tiene la intención de utilizar alguno de estos comandos, es posible que desee darles enlazamientos de teclas (consulte Init Rebinding).

19.2 Recentrado

C-l
   Desplácese por la ventana seleccionada de modo que la línea actual sea la línea de texto
   más central; en posteriores invocaciones consecutivas, haga que la línea actual sea la línea
   superior, la inferior, etc. en orden cíclico. (recenter-top-bottom).

M-x recenter
   Desplazarse por la ventana seleccionada por lo que la línea actual es la línea de texto de
   centro. Posiblemente volver a mostrar la pantalla también.

C-M-l
   Desplazarse de forma heurística para traer información útil sobre la pantalla (reposition-window).

El comando C-l (recenter-top-bottom) hace más reciente la ventana seleccionada, desplazándola para que la línea de la pantalla actual esté exactamente en el centro de la ventana, o lo más cerca posible del centro.

Al escribir C-l dos veces seguidas (C-l C-l) se desplaza la ventana de modo que el punto quede en la línea superior de la pantalla. Al escribir una tercera C-l se desplaza la ventana de modo que el punto se encuentre en la línea inferior de la pantalla. Cada C-l sucesivo circula a través de estas tres posiciones.

Puede cambiar el orden de los ciclos personalizando la variable recenter-positions. Cada elemento de la lista debe ser el símbolo arriba, en el medio o abajo, o un número; un número entero significa mover la línea a la línea de la pantalla especificada, mientras que un número de punto flotante entre 0.0 y 1.0 especifica un porcentaje del espacio de la pantalla desde la parte superior de la ventana. El valor por defecto, (en el centro, arriba, abajo), es el orden de los ciclos descrito anteriormente. Además, si cambia el margen de desplazamiento variable a un valor distinto de cero n, C-l siempre deja al menos n líneas de la pantalla entre el punto y la parte superior o inferior de la ventana (véase Auto Scrolling)

También puedes darle a C-l un argumento de prefijo. Un argumento de prefijo plano, C-u C-l recenters point. Un argumento positivo n coloca las líneas del punto n hacia abajo desde la parte superior de la ventana. Un argumento de cero pone el punto en la línea superior. Un argumento negativo -n pone líneas de punto n desde la parte inferior de la ventana. Cuando se le da un argumento, C-l no borra la pantalla o pasa por diferentes posiciones de la pantalla.

Si la variable recenter-redisplay tiene un valor non-nil, cada invocación de C-l también borra y vuelve a mostrar la pantalla; el valor especial tty (por defecto) dice que se debe hacer esto sólo en los marcos de los terminales de texto. Redisplaying es útil en caso de que la pantalla se torne ilegible por cualquier razón (véase Screen Garbled).

El comando más primitivo M-x recenter se comporta como el más reciente arriba-abajo, pero no circula entre las posiciones de la pantalla.

C-M-l (reposition-window) desplaza la ventana actual heurísticamente de una manera diseñada para obtener información útil en la pantalla. Por ejemplo, en un archivo Lisp, este comando intenta que todo el defun actual aparezca en la pantalla si es posible.

19.3 El desplazamiento automático

Emacs realiza un desplazamiento automático cuando un punto se mueve fuera de la parte visible del texto. Normalmente, los centros de desplazamiento automático apuntan verticalmente en la ventana, pero hay varias maneras de alterar este comportamiento.

Si ajusta la opción scroll-conservatively a un pequeño número n, entonces mover el punto sólo un poco fuera de la pantalla (no más de n líneas) hace que Emacs se desplace lo suficiente para que el punto vuelva a aparecer en la pantalla; si al hacerlo no logra hacer visible el punto, Emacs se desplaza lo suficiente para centrar el punto en la ventana. Si establece el desplazamiento de forma conservadora a un gran número (mayor de 100), el desplazamiento automático nunca centra el punto, sin importar cuán lejos se mueva el punto; Emacs siempre desplaza el texto lo suficiente para que el punto se vea, ya sea en la parte superior o inferior de la ventana, dependiendo de la dirección de desplazamiento. Por defecto, el desplazamiento conservador es 0, lo que significa que siempre se debe centrar el punto en la ventana.

Otra forma de controlar el desplazamiento automático es personalizar el paso de desplazamiento variable. Su valor determina el número de líneas por las que se desplaza automáticamente, cuando el punto se desplaza fuera de la pantalla. Si el desplazamiento por ese número de líneas no logra volver a poner el punto a la vista, el punto se centra en su lugar. El valor por defecto es cero, lo que (por defecto) hace que el punto siempre esté centrado después de desplazarse.

Una tercera forma de controlar el desplazamiento automático es personalizar las variables de desplazamiento hacia arriba y hacia abajo, que especifican directamente la posición vertical del punto después del desplazamiento. El valor de desplazamiento hacia arriba debe ser nulo (el valor predeterminado) o un número de punto flotante f entre 0 y 1. Esto último significa que cuando el punto pasa por debajo del borde inferior de la ventana (es decir, desplazándose hacia adelante), Emacs desplaza la ventana de manera que el punto sea f partes de la altura de la ventana desde el borde inferior de la ventana. Por lo tanto, una f más grande significa un desplazamiento más agresivo: se visualizan más textos nuevos. El valor por defecto, nulo, equivale a 0,5.

Del mismo modo, el desplazamiento scroll-down-aggressively se utiliza cuando el punto pasa por encima del borde inferior de la ventana (es decir, cuando se desplaza hacia atrás). El valor especifica qué tan lejos debe estar el punto del margen superior de la ventana después de desplazarse. Por lo tanto, al igual que con el desplazamiento hacia arriba, un valor mayor es más agresivo.

Tenga en cuenta que las variables scroll-conservatively, scroll-step, y*scroll-up-aggressively / scroll-down-aggressively* controlan el scrolling automático de forma contradictoria. Por lo tanto, no debe seleccionar más de uno de estos métodos para personalizar el desplazamiento automático. En caso de que personalice varias variables, el orden de prioridad es: scroll-conservatively, luego scroll-step, y fianlmente scroll-up-aggressively / scroll-down-aggressively.

La variable scroll-margin restringe la forma en que el punto más cercano puede llegar a la parte superior o inferior de una ventana (incluso si el desplazamiento agresivo especifica una fracción f que es mayor que la porción de la ventana entre los márgenes superior e inferior). Su valor es un número de líneas de pantalla; si el punto se encuentra dentro de ese número de líneas de la parte superior o inferior de la ventana, Emacs realiza el desplazamiento automático. Por defecto, el margen de desplazamiento es 0.

19.4 Desplazamiento horizontal

El desplazamiento horizontal significa desplazar todas las líneas hacia los lados dentro de una ventana, de modo que no se muestre parte del texto cerca del margen izquierdo. Cuando el texto de una ventana se desplaza horizontalmente, las líneas de texto se truncan en lugar de continuar (ver Truncamiento de líneas). Si una ventana muestra líneas truncadas, Emacs realiza un desplazamiento horizontal automático cada vez que un punto se mueve fuera del borde izquierdo o derecho de la pantalla. Para desactivar el desplazamiento horizontal automático, ajuste la variable auto-hscroll-mode a nil. Tenga en cuenta que cuando el desplazamiento horizontal automático está desactivado, si el punto se desplaza fuera del borde de la pantalla, el cursor desaparece para indicar eso. (En los terminales de texto, el cursor se deja en el borde).

La variable hscroll-margin controla cómo el punto de cierre puede llegar a los bordes izquierdo y derecho de la ventana antes de que se produzca el desplazamiento automático. Se mide en columnas. Por ejemplo, si el valor es 5, entonces mover el punto dentro de las 5 columnas de un borde causa que el desplazamiento horizontal se aleje de ese borde.

La variable hscroll-step determina cuántas columnas deben desplazarse por la ventana cuando el punto se acerca demasiado al borde. Cero, el valor por defecto, significa centrar el punto horizontalmente dentro de la ventana. Un valor entero positivo especifica el número de columnas por las que se puede desplazar. Un número de punto flotante especifica la fracción del ancho de la ventana por la que se puede desplazar.

También puede realizar el desplazamiento horizontal explícito con los siguientes comandos:

C-x <
   El desplazamiento del texto en la ventana actual a la izquierda (scroll-left).

C-x >
   Desplazarse hacia la derecha (scroll-right).

C-x < (scroll-left) desplaza el texto de la ventana seleccionada hacia la izquierda por el ancho completo de la ventana, menos dos columnas. (En otras palabras, el texto de la ventana se mueve hacia la izquierda en relación con la ventana.) Con un argumento numérico n, se desplaza por n columnas.

Si el texto se desplaza hacia la izquierda y el punto se desplaza fuera del borde izquierdo de la ventana, el cursor se congelará en el borde izquierdo de la ventana, hasta que el punto retroceda a la parte del texto que se muestra. Esto es independiente de la configuración actual del modo de desplazamiento automático, que, para el texto desplazado a la izquierda, sólo afecta al comportamiento en el borde derecho de la ventana.

C-x > (scroll-right) se desplaza de forma similar a la derecha. La ventana no se puede desplazar más a la derecha una vez que se muestra normalmente, con cada línea comenzando en el margen izquierdo de la ventana; intentarlo no tiene ningún efecto. Esto significa que no tiene que calcular el argumento con precisión para C-x >; cualquier argumento suficientemente grande restaurará la visualización normal.

Si utiliza estos comandos para desplazar una ventana horizontalmente, se establece un límite inferior para el desplazamiento horizontal automático. El desplazamiento automático continuará para desplazar la ventana, pero nunca más a la derecha que la cantidad que usted fijó previamente al desplazar hacia la izquierda.

19.5 Estrechamiento

El estrechamiento significa concentrarse en alguna parte del búfer, haciendo que el resto sea temporalmente inaccesible. La parte a la que todavía se puede llegar se llama la parte accesible. La cancelación del estrechamiento, que hace que todo el búfer vuelva a ser accesible, se denomina ensanchamiento. Los límites del estrechamiento en efecto en un búfer se llaman la restricción del búfer.

El estrechamiento puede hacer más fácil concentrarse en una sola subrutina o párrafo eliminando el desorden. También se puede utilizar para limitar el rango de operación de un comando de reemplazo o de una macro de teclado de repetición.

C-x n n
    Reducir el número entre el punto y la marca (narrow-to-región).

C-x n w
   Ampliar para hacer accesible toda la memoria intermedia de nuevo (widen).

C-x n p
   Reducir el número de la página actual (narrow-to-page).

C-c n d
   Afine a la definición de la función actual (narrow-to-defun).

Cuando se ha reducido a una parte del buffer, esa parte parece ser todo lo que hay. No puedes ver el resto, no puedes moverte dentro de él (los comandos de movimiento no salen de la parte accesible), no puedes cambiarlo de ninguna manera. Sin embargo, no ha desaparecido, y si guarda el archivo, se guardará todo el texto inaccesible. La palabra 'Narrow' aparece en la línea de modo cuando el estrechamiento está en efecto.

El comando primario de estrechamiento es C-x n n (narrow-to-region). Establece las restricciones de la memoria intermedia actual para que el texto de la región actual siga siendo accesible, pero todo el texto anterior o posterior a la región es inaccesible. El punto y la marca no cambian.

Alternativamente, utilice C-x n p (narrow-to-page) para reducir a la página actual. Ver Páginas, para la definición de una página. C-x n d (narrow-to-defun) se estrecha hasta el punto que contiene la funcion (ver defuns).

La forma de cancelar el estrechamiento es ampliar con C-x n w (widen). Esto hace que todo el texto del búfer sea accesible de nuevo.

Puede obtener información sobre la parte del búfer que se ha reducido utilizando el comando C-x =. Véase Position info.

Debido a que el estrechamiento puede confundir fácilmente a los usuarios que no lo entienden, el estrechamiento a una región es normalmente un comando desactivado. Al intentar utilizar este comando, se le pide confirmación y le da la opción de habilitarlo; si activa el comando, ya no será necesario confirmarlo. Consulte Disablig.

19.6 Modo de vista

El modo de visualización es un modo menor que le permite escanear un búfer por pantallas secuenciales. Proporciona comandos para desplazarse cómodamente por el búfer, pero no para cambiarlo. Aparte de los comandos habituales de movimiento del cursor de Emacs, puede escribir <SPC> para desplazarse hacia delante por una ventana, <DEL> para desplazarse hacia atrás y s para iniciar una búsqueda incremental.

Al escribir q (View-quit) se desactiva el modo Vista y se vuelve al búfer y a la posición antes de activar el modo Vista. Al escribir e (View-exit) se desactiva el modo Ver, manteniendo el búfer y la posición actuales.

El búfer M-x view-buffer solicita un búfer Emacs existente, cambia a él y activa el modo Ver. M-x view-file solicita un archivo de visualización y lo visita con el modo Ver activado.

19.7 Modo siga

El modo de seguimiento es un modo menor que hace que dos ventanas, ambas muestren el mismo búfer y se desplacen como una sola "ventana virtual". Para utilizar el modo de seguimiento, vaya a un marco con una sola ventana, divídalo en dos ventanas una al lado de la otra utilizando C-x 3 y, a continuación, pulse M-x follow-mode. A partir de ese momento, puede editar el búfer en cualquiera de las dos ventanas, o desplazarse por una de ellas; la otra ventana le sigue.

En el modo de seguimiento, si mueve el punto fuera de la parte visible en una ventana y dentro de la parte visible en la otra ventana, eso selecciona la otra ventana; de nuevo, tratando a las dos como si fueran partes de una ventana grande.

Para desactivar el modo de seguimiento, escriba M-x follow-mode por segunda vez.

19.8 Caras de texto

Emacs puede mostrar texto en diferentes estilos, llamados caras. Cada cara puede especificar varios atributos de la cara, como la fuente, la altura, el peso, la inclinación, el color de primer plano y de fondo, y el subrayado o el subrayado. La mayoría de los modos principales asignan caras al texto automáticamente, a través del modo Bloqueo de fuentes. Consulte Bloqueo de fuentes para obtener más información sobre cómo se asignan estas caras.

Para ver qué caras están definidas actualmente y cómo son, escriba M-x list-faces-display. Con un argumento prefijo, esto pide una expresión regular, y muestra sólo caras con nombres que coincidan con esa expresión regular (ver Regexps).

Es posible que una cara determinada se vea diferente en diferentes marcos. Por ejemplo, algunos terminales de texto no soportan todos los atributos de la cara, en particular la fuente, la altura y el ancho, y algunos soportan una gama limitada de colores. Además, la mayoría de las caras de Emacs se definen de manera que sus atributos sean diferentes en fondos de marcos claros y oscuros, por razones de legibilidad. De forma predeterminada, Emacs elige automáticamente qué conjunto de atributos de cara desea mostrar en cada marco, en función del color de fondo actual del marco. Sin embargo, puede invalidar esto dándole un valor no nulo al modo marco variable. Un valor de oscuro hace que Emacs trate todos los marcos como si tuvieran un fondo oscuro, mientras que un valor de luz hace que trate todos los marcos como si tuvieran un fondo claro.

Puede personalizar una cara para modificar sus atributos y guardar esas personalizaciones para futuras sesiones de Emacs. Vea Personalización de la cara, para más detalles.

La cara por defecto es la cara por defecto para mostrar el texto, y se especifican todos sus atributos. Su color de fondo también se utiliza como color de fondo del marco. Ver Colores.

Otra cara especial es la del cursor. En las pantallas gráficas, el color de fondo de esta cara se utiliza para dibujar el cursor de texto. Ninguno de los otros atributos de esta cara tiene ningún efecto; el color de primer plano del texto bajo el cursor se toma del color de fondo del texto subyacente. En los terminales de texto, la apariencia del cursor de texto está determinada por el terminal, no por la cara del cursor.

También puede utilizar recursos X para especificar atributos de cualquier cara en particular. Ver Recursos.

Emacs puede mostrar fuentes de ancho variable, pero algunos comandos de Emacs, especialmente los comandos de indentación, no tienen en cuenta el ancho de visualización de caracteres variables. Por lo tanto, recomendamos no utilizar fuentes de ancho variable para la mayoría de las caras, especialmente las asignadas por el modo de bloqueo de fuentes.

19.9 Colores para las caras

Las caras pueden tener varios colores de primer plano y de fondo. Al especificar un color para una cara: por ejemplo, al personalizar la cara (consulte Face customization), puede utilizar un nombre de color RGB triplet.

Un nombre de color es un nombre predefinido, como 'naranja oscuro' o 'verde mar medio'. Para ver una lista de nombres de colores, escriba M-x list-colors-display. Para controlar el orden en el que se muestran los colores, personalice list-colors-sort. Si ejecuta este comando en una pantalla gráfica, muestra la gama completa de nombres de color conocidos por Emacs (estos son los nombres de color X11 estándar, definidos en el archivo rgb.txt de X). Si ejecuta el comando en un terminal de texto, muestra sólo un pequeño subconjunto de colores que se pueden mostrar de forma segura en dichos terminales. Sin embargo, Emacs entiende los nombres de colores X11 incluso en terminales de texto; si a una cara se le da un color especificado por un nombre de color X11, se muestra usando el color de terminal que coincida más estrechamente.

Un RGB triplet es una cadena de la forma'#RRRGGBB'. Cada uno de los componentes R, G y B es un número hexadecimal que especifica la intensidad relativa del componente, de uno a cuatro dígitos de longitud (normalmente se utilizan dos dígitos). Los componentes deben tener el mismo número de dígitos. Para los valores hexadecimales de A a F, se aceptan mayúsculas o minúsculas.

El comando M-x list-colors-display también muestra el RGB equivalente para cada color nombrado. Por ejemplo,'mediun sea grean' es equivalente a'#3CB371'.

Puede cambiar los colores de primer plano y fondo de una cara con M-x set-face-foreground y M-x set-face-background. Estos comandos piden en el minibuffer un nombre de cara y un color, con terminación, y luego configuran esa cara para usar el color especificado. Afectan a los colores de las caras en todos los fotogramas, pero sus efectos no persisten para futuras sesiones de Emacs, a diferencia de lo que ocurre con el uso del búfer de personalización o los recursos X. También puede utilizar los parámetros del marco para establecer los colores de primer plano y de fondo para un marco específico; consulte Parámetros del marco.

19.10 Las caras estándar

Aquí están las caras estándar para especificar el aspecto del texto. Se pueden aplicar al texto específico cuando desea que los efectos que producen.

default
   Este estilo se usa para el texto ordinario que no especifica ninguna cara. Su color de
   fondo se utiliza como color de fondo del marco.

bold
   Este caracterustica usa la variante negrita de la fuente por defecto.

italic
   Usa una variante cursiva de la fuente por defecto.

bold-italic
   Usa una variante cursiva y negrita de la fuente predeterminada.

underline
   Subraya el texto.

fixed-pitch
   Usa una fuente de ancho fijo. Es razonable para personalizar esta caracteristica de utilizar
   una fuente fija de ancho diferente, si se quiere, pero que no debe hacer que sea una fuente
   de anchura variable.

variable-pitch
   Esta caracteristica fuerza uso de una fuente de ancho variable.

shadow
   Este estilo se usa para hacer el texto menos notable que el texto normal circundante.
   Por lo general, esto se puede lograr mediante el uso de tonos de gris en contraste con negro
   o color blanco de primer plano predeterminado.

Aquí hay una lista incompleta de caras usadas para resaltar partes del texto temporalmente para propósitos específicos. (Otros modos definen sus propias caras para este propósito.)

highlight
   Este estilo se usa para la selección de texto en varios contextos, como por ejemplo cuando
   el cursor del ratón se sitúa sobre un enlace.

isearch
   Este estilo se usa para resaltar la coincidencia actual de Isearch (ver Incremental Search).

query-replace
   Este estilo se utiliza para resaltar la coincidencia actual de Query Replace (ver Replace).

lazy-highlight
   Este estilo se usa para resaltar "coincidencias" perezosos para Isearch y Query Replace
   (coincidencias distintas a la actual).

región
   Este estilo se usa para la visualización de una región activa (ver Mark). Cuando Emacs se
   construyó con soporte GTK, sus colores son tomados del tema actual GTK.

secondary-selection
   Este estilo se usa para mostrar una selección secundaria X (véase Secondary Selection).

trailing-whitespace
   Es el estilo para poner de relieve el exceso de espacios y tabuladores al final de una línea
   cuando show-trailing-whitespace es non-nil (ver Useless Whitespace).

escape-glyph
   Estilo para la visualización de caracteres de control y secuencias de escape (ver Text Display).

nobreak-space
   Para la visualización de los caracteres de espacio "no-break" (véase Text Display).

Las siguientes caras controlan la apariencia de partes de la estructura de Emacs:

mode-line
   Este estilo se usa para la línea de modo de la ventana seleccionada en ese momento, y para
   las barras de menú cuando no se utilizan menús del kit de herramientas. De forma predeterminada,
   se dibuja con sombras para un efecto "levantado" en las pantallas gráficas, y se dibuja como
   el inverso de la cara por defecto en los terminales sin ventanas.

mode-line-inactive
   Al igual que mode-line pero que se utiliza para las líneas de modo de las ventanas que no sean
   la seleccionada (si mode-line-in-non-selected-windows es non-nil). Esta cara se hereda de modo
   de línea, por lo que los cambios en la cara afectan a las líneas de modo en todas las ventanas.

mode-line-highlight
   Como resaltado, pero se usa para porciones de texto en las líneas de modo.

mode-line-buffer-id
   Esta cara se utiliza para piezas de identificación del buffer en la línea de modo.

header-line
   Similar a la línea de modo para la línea de encabezado de una ventana, que aparece en la parte
   superior de una ventana, así como la línea de modo aparece en la parte inferior. La mayoría de
   las ventanas no tienen una línea de encabezado; sólo algunos modos especiales, como el modo
   Información, crean una.

vertical-border
   Esta cara se utiliza para el divisor vertical entre ventanas en terminales de texto.

minibuffer-prompt
   Este estilo se usa para las cadenas de indicador que aparecen en el minibúfer. Por defecto,
   Emacs añade automáticamente esta cara al valor de minibuffer-prompt-properties, que es una
   lista de propiedades de texto utilizados para visualizar el texto del mensaje. (Esta variable
   tiene efecto cuando se introduce el minibúfer).

fringe
   La cara de los márgenes a la izquierda ya la derecha de las ventanas en pantallas gráficas.
   (Las franjas son las porciones estrechas del marco de Emacs entre el área de texto y el derecho
   de la ventana y los bordes que quedan.) Ver fringes.

cursor
   El atributo :background de esta cara especifica el color del cursor de texto. Ver cursor display.

tooltip
   Este estilo se usa para el texto de sugerencias. Por defecto, si Emacs está construido con el
   apoyo de GTK, la información sobre herramientas están dibujados a través de GTK y esta cara
   no tiene ningún efecto. Ver tooltip.

mouse
   Este estilo determina el color del puntero del ratón.

Las siguientes caras también controlan la apariencia de partes del marco de Emacs, pero sólo en terminales de texto o cuando Emacs está construido en X sin soporte de toolkit. (Para todos los demás casos, la apariencia de los elementos de marco respectivos está determinada por las parametrizaciones de todo el sistema).

scroll-bar
   Este rostro determina el aspecto visual de la barra de desplazamiento. Ver scroll bars.

tool-bar
   Este rostro determina el color de iconos de la barra de herramientas. Ver Tool Bars.

menu
   Este rostro determina los colores y la fuente de los menús de Emacs. Ver Menu bars.

19.11 Escala de texto

Para aumentar la altura de la cara por defecto en el búfer actual, escriba C-x C-+ o C-x C-=. Para disminuirla, escriba C-x C--. Para restaurar la altura de la cara predeterminada (global), escriba C-x C-0. Todas estas teclas están vinculadas al mismo comando, text-scale-adjust, que examina la última tecla tecleada para determinar qué acción tomar.

La tecla final de estos comandos puede repetirse sin la C-x anterior. Por ejemplo, C-x C-= C-= C-= C-= aumenta la altura de la cara en tres pasos. Cada paso escala la altura del texto por un factor de 1.2; para cambiar este factor, personalice la variable text-scale-mode-step. Como excepción, un argumento numérico de 0 en el comando text-scale-adjust restaura la altura por defecto, similar a escribir C-x C-0.

Los comandos text-scale-increase y text-scale-decrease aumentan o disminuyen la altura de la cara por defecto, al igual que C-x C-+ y C-x C-- respectivamente. Puede que le resulte más cómodo vincularse a estos comandos, en lugar de ajustar la escala de texto.

El comando text-scale-set escala la altura de la cara por defecto en el buffer actual a un nivel absoluto especificado por su argumento prefijo. Los comandos anteriores habilitan automáticamente el modo menor text-scale-mode si la escala de la fuente actual es distinta de 1, y la deshabilitan en caso contrario.

19.12 Modo de bloqueo de fuentes

El modo de bloqueo de fuentes es un modo menor, siempre local a un búfer en particular, que asigna caras al texto (o "fontifica") en el búfer. El modo principal de cada búfer le indica al modo Bloqueo de fuentes qué texto fontificar; por ejemplo, los modos de lenguaje de programación fontifican construcciones relevantes desde el punto de vista sintáctico como comentarios, cadenas y nombres de funciones.

El modo de bloqueo de fuentes está activado de forma predeterminada. Para alternarlo en el búfer actual, escriba M-x font-lock-mode. Un argumento numérico positivo activa incondicionalmente el modo Bloqueo de fuente, y un argumento negativo o cero lo desactiva.

Escriba M-x global-font-lock-mode para activar el modo Font Lock en todos los búferes. Para imponer esta configuración para futuras sesiones de Emacs, personalice el modo de bloqueo de fuentes globales (consulte Personalización fácil) o añada la siguiente línea a su archivo de inicio:

(global-font-lock-mode 0)

Si ha desactivado el modo Global Font Lock, todavía se puede activar el bloqueo de fuentes para los modos principales específicos mediante la adición de la función font-lock-mode del modo hook (véase hooks). Por ejemplo, para activar el modo de bloqueo de fuentes para la edición de archivos de C, puede hacer esto:

(add-hook 'c-mode-hook 'font-lock-mode)

El modo de bloqueo de fuentes utiliza varias caras con nombres específicos para realizar su trabajo, entre las que se incluyen la cara de la cadena de bloqueo de fuentes, la cara de comentario de bloqueo de fuentes y otras. La forma más fácil de encontrarlos todos es usar el grupo personalizado M-x <RET> font-lock-faces <RET>. A continuación, puede utilizar ese búfer de personalización para personalizar el aspecto de estas caras. Vea Face customization.

Puede personalizar la decoración de la variable font-lock-max-decoration para alterar la cantidad de fontificación aplicada por el modo Font Lock, para los modos principales que soportan esta función. El valor debe ser un número (con 1 representando una cantidad mínima de fontificación; algunos modos soportan niveles tan altos como 3); o t, que significa "tan alto como sea posible" (por defecto). También puede especificar diferentes números para determinados modos principales; por ejemplo, para utilizar el nivel 1 para los modos C/C++, y el nivel por defecto de lo contrario, utilice el valor:

'((c-mode . 1) (c++-mode . 1)))

La fontificación de comentarios y cadenas (o fontificación "sintáctica") se basa en el análisis de la estructura sintáctica del texto del búfer. En aras de la velocidad, algunos modos, incluido el modo Lisp, se basan en una convención especial: un paréntesis abierto o un corchete abierto en la columna de la izquierda siempre define el comienzo de un defun y, por lo tanto, siempre está fuera de cualquier cadena o comentario. Por lo tanto, debe evitar colocar un paréntesis abierto o un corchete abierto en la columna de la izquierda, si está dentro de una cadena o comentario. Vea Left Margin Paren, para más detalles.

La función variable font-lock-beginning-of-syntax, que siempre es buffer-local, especifica cómo el modo Font Lock puede encontrar una posición garantizada fuera de cualquier comentario o cadena. En los modos que utilizan la convención de paréntesis de columna más a la izquierda, el valor por defecto de la variable es beginning-of-defun, que le indica al modo Font Lock que utilice la convención. Si ajusta esta variable a cero, el bloqueo de fuentes ya no depende de la convención. Esto evita resultados incorrectos, pero el precio es que, en algunos casos, la fontificación para un texto modificado debe volver a escanear el texto del buffer desde el principio del buffer. Esto puede ralentizar considerablemente la redistribución de la pantalla mientras se desplaza, especialmente si está cerca del final de un búfer grande.

Los patrones de resaltado de Font Lock ya existen para la mayoría de los modos, pero es posible que desee fontificar patrones adicionales. Puede utilizar la función font-lock-add-keywords, para añadir patrones de resaltado para un modo en particular. Por ejemplo, para resaltar las palabras'FIXME:' en los comentarios de C, use esto:

(add-hook 'c-mode-hook
    (lambda ()
        (font-lock-add-keywords
         nil
         '(("\\<\\(FIXME\\):"
         1
         font-lock-warning-face
         t))
        )
    )
)

Para eliminar palabras clave de los patrones de resaltado de bloqueos de fuentes, utilice la función font-lock-remove-keywords.

Fontificar grandes buffers puede llevar mucho tiempo. Para evitar grandes retrasos cuando se visita un archivo, Emacs inicialmente fontifica sólo la parte visible de un búfer. A medida que se desplaza por el búfer, cada parte que se hace visible se fontifica tan pronto como se muestra; este tipo de bloqueo de fuentes se denomina bloqueo justo a tiempo (o JIT). Puede controlar cómo se comporta el bloqueo JIT, incluso diciéndole que realice la fontificación mientras está inactivo, personalizando variables en el grupo 'jit-lock'. Consulte specific customization.

19.13 Resaltar

Resaltar el modo Cambios es un modo menor que resalta las partes del búfer que se han cambiado más recientemente, dando a ese texto una cara diferente. Para activar o desactivar el modo Resaltar cambios, utilice M-x highlight-changes-mode.

El modo "Hi Lock" es un modo menor que resalta el texto que coincide con las expresiones regulares que usted especifica. Por ejemplo, puede utilizarlo para resaltar todas las referencias a una determinada variable en un archivo fuente de programa, resaltar ciertas partes de una salida voluminosa de algún programa o resaltar ciertos nombres en un artículo. Para activar o desactivar el modo Hi Lock, utilice el comando M-x hi-lock-mode. Para habilitar el modo Hi Lock para todos los búferes, utilice el M-x global-hi-lock-mode o (global-hi-lock-mode 1) en su archivo .emacs.

El modo Hi Lock funciona como el modo Font Lock (ver Bloqueo de fuentes), excepto que se especifican explícitamente las expresiones regulares que se deben resaltar. Los controlas con estos comandos son:

C-x w h regexp <RET> face <RET>
   Resaltar el texto que coincide con la expresión regular utilizando cara face (highlight-regexp).
   El resaltado permanecerá siempre y cuando se carga la memoria intermedia. Por ejemplo, para
   resaltar todas las apariciones de la palabra "capricho" por medio de la cara por defecto (un
   fondo amarillo) C-x w h whim <RET> <RET>. Cualquier cara puede ser utilizado para poner de
   relieve, Hi Lock ofrece varios de sus propios y estos son pre-cargados en una lista de valores
   por defecto. Mientras que se le solicite una cara utilizar M-n y M-p para desplazarse a través
   de ellos. Puede utilizar este comando varias veces, especificando diversas expresiones regulares
   para distintos resaltados.

C-x w r regexp <RET>
   Si se invoca desde el menú, selecciona la expresión de revertir la acción de una lista. Si se
   acoge a este desde el teclado, se utiliza el minibúfer. Se mostrará la expresión regular más
   recientemente añadido; utilizar M-p para mostrar la siguiente expresión mayor y M-n para
   seleccionar la siguiente expresión más reciente. (También puede escribir la expresión con
   la mano, con la terminación.) Cuando la expresión que se desea eliminar el realce aparece
   en el minibúfer, pulse <RET> para salir del minibúfer y eliminar el realce de la misma.

C-x w l regexp <RET> face <RET>
   Resaltar líneas enteras que contienen una parte de la expresión-regular, utilizando cara a
   cara (highlight-lines-matching-regexp.

C-x w b
   Inserte todos los pares regexp/face de resaltado actuales en el búfer en el punto, con
   delimitadores de comentarios para evitar que cambien su programa. (Este enlace de teclas
   ejecuta el comando hi-lock-write-interactive-patterns.) Estos patrones se extraen de los
   comentarios, si procede, si invoca M-x hi-lock-find-patterns, o si visita el archivo
   mientras el modo Hi Lock está activado (ya que funciona con patrones de búsqueda de hi-lock).

C-x w i
   Extraer los pares regexp/face de los comentarios en el buffer actual (hi-lock-find-patterns).
   Así, puede introducir patrones interactivamente con highlight-regexp, almacenarlos en el
   archivo con patrones hi-lock-write-interactive, editarlos (quizás incluyendo diferentes caras
   para diferentes partes entre paréntesis de la coincidencia), y finalmente usar este comando
   (hi-lock-find-patterns) para que Hi Lock resalte los patrones editados. La directiva variable
   hi-lock-file-patterns-policy controla si el modo Hi Lock debe extraer y resaltar automáticamente
   los patrones que se encuentran en un archivo cuando se visita. Su valor puede ser nulo (nunca
   resaltar), preguntar (consultar al usuario), o una función. Si es una función, los patrones
   hi-lock-find la llaman con los patrones como argumento; si la función devuelve no-nil, se usan
   los patrones. El valor por defecto es ask. Tenga en cuenta que los patrones siempre se resaltan
   si llama a los patrones hi-lock-find directamente, independientemente del valor de esta variable.

Además, los patrones hi-lock-find no hacen nada si el símbolo del modo principal actual es un miembro de la lista hi-lock-exclusive-modes.

19.14 Franjas de ventana

En las pantallas gráficas, cada ventana de Emacs normalmente tiene flecos estrechos en los bordes izquierdo y derecho. Los flecos se utilizan para mostrar símbolos que proporcionan información sobre el texto en la ventana. Puede escribir M-x fringe-mode para desactivar los flequillos o modificar su anchura. Este comando afecta a los flecos en todos los buffers; para modificar los flecos en el cuadro seleccionado, utilice M-x set-fringe-style.

El uso más común de las franjas es indicar una línea de continuación (ver Líneas de Continuación). Cuando una línea de texto se divide en varias líneas de la pantalla, el margen izquierdo muestra una flecha curvada para cada línea de la pantalla excepto la primera, lo que indica que "este no es el comienzo real". La franja derecha muestra una flecha curvada para cada línea de la pantalla excepto la última, indicando que "este no es el final real". Si la dirección de la línea es de derecha a izquierda (ver Edición bidireccional), se intercambian los significados de las flechas curvas en los bordes.

Los flecos indican el truncamiento de la línea con flechas horizontales cortas que significan "hay más texto en esta línea que se desplaza horizontalmente fuera de la vista". Al hacer clic con el ratón en una de las flechas, la pantalla se desplaza horizontalmente en la dirección de la flecha.

Los bordes también pueden indicar otras cosas, como límites de búfer (ver Visualización de límites), y dónde se está ejecutando un programa que está depurando (ver Depuradores).

La franja también se utiliza para dibujar el cursor, si la línea actual es exactamente tan ancha como la ventana y el punto que está al final de la línea. Para desactivar esto, cambie la variable overflow-newline-into-fringe a nil; esto hace que Emacs continúe o trunque líneas que son exactamente tan anchas como la ventana.

19.15 Viendo límites

En las pantallas gráficas, Emacs puede indicar los límites del búfer en las franjas. Si activa esta función, la primera línea y la última línea se marcan con imágenes en ángulo en los márgenes. Esto se puede combinar con imágenes de flecha arriba y abajo que indican si es posible desplazar la ventana.

La variable indicate-buffer-boundaries controla cómo se indican los límites del buffer y el desplazamiento de la ventana en las franjas. Si el valor es izquierdo o derecho, los mapas de bits de ángulo y flecha se muestran en el margen izquierdo o derecho, respectivamente.

Si el valor es una lista, cada elemento (indicador . posición) especifica la posición de uno de los indicadores. El indicador debe ser top, bottom, up, down o t que especifica la posición por defecto para los indicadores no presentes en la lista. La posición es de izquierda, derecha o nula, lo que especifica no mostrar este indicador.

Por ejemplo, ((top . left) (t . right)) coloca el bitmap del ángulo superior en el margen izquierdo, el bitmap del ángulo inferior en el margen derecho, y ambos bitmaps de flecha en el margen derecho. Para mostrar sólo los mapas de bits de ángulo en el margen izquierdo, pero sin mapas de bits de flecha, utilice ((top . left) (bottom . left)).

19.16 Los espacios en blanco inútiles

Es fácil dejar espacios innecesarios al final de una línea, o líneas vacías al final de un búfer, sin darse cuenta. En la mayoría de los casos, este espacio en blanco posterior no tiene efecto, pero a veces puede ser una molestia.

Puede hacer visibles los espacios en blanco use l variable show-trailing-whitespace en t. A continuación, Emacs muestra los espacios en blanco, utilizando el espacio en blanco de arrastre de la cara.

Esta característica no se aplica cuando el punto está al final de la línea que contiene el espacio en blanco. Estrictamente hablando, sin embargo, eso es "espacio en blanco al final", pero mostrarlo especialmente en ese caso se ve feo mientras está escribiendo un nuevo texto. En este caso especial, la ubicación del punto es suficiente para mostrarle que los espacios están presentes.

Escriba M-x delete-trailing-whitespace para eliminar todos los espacios en blanco que se encuentran al final de la página. Este comando borra todos los espacios extra al final de cada línea en el buffer, y todas las líneas vacías al final del buffer; para ignorar esto último, cambie la variable delete-trailing-lines a nil. Si la región está activa, el comando elimina los espacios adicionales al final de cada línea en la región.

En las pantallas gráficas, Emacs puede indicar líneas no utilizadas al final de la ventana con una pequeña imagen en el margen izquierdo (ver Flecos). La imagen aparece para líneas de pantalla que no corresponden a ningún texto del búfer, por lo que las líneas en blanco al final del búfer se destacan porque carecen de esta imagen. Para habilitar esta función, configure la variable indicate-empty-lines al valor non-nil. Puede activar o desactivar esta función para todos los búferes nuevos estableciendo el valor predeterminado de esta variable, por ejemplo, (setq-default indicate-empty-lines t).

El modo de espacio en blanco es un modo menor de búfer local que le permite "visualizar" muchos tipos de espacios en blanco en el búfer, ya sea dibujando los caracteres de los espacios en blanco con una cara especial o mostrándolos como glifos especiales. Para cambiar este modo, escriba M-x whitespace-mode. Los tipos de espacios en blanco visualizados están determinados por la variable whitespace-style. Aquí hay una lista parcial de posibles elementos (ver la lista completa en la documentación de la variable):

face
   Activar todas las visualizaciones que utilizan caras especiales. Este elemento tiene un
   significado especial: si está ausente de la lista, ninguna de las otras visualizaciones
   tendrá efecto, exceptuando el space-mark, tab-mark, y newline-mark.

trailing
   Resaltar espacios en blanco.

tabs
   Resaltar las tabulaciones.

espaces
   Epacios y los caracteres más destacados de no separación.

lines
   Resaltar líneas de más de 80 líneas. Para cambiar el límite de la columna, personalizar
   el espacio de la variable whitespace-line-column.

newline
   Resaltar los saltos de línea.

empty
   Resaltar líneas vacías.

espace-mark
   Dibujar el espacio y los caracteres de no separación con una forma especial.

tab-mark
   Dibujar los caracteres de tabulación de una forma especial.

newline-mark
   Marcar nueva línea con caracteres especiales.

19.17 Selective Display

Emacs puede ocultar líneas con más sangría que un número determinado de columnas. Puede utilizarlo para obtener un resumen de una parte de un programa.

Para ocultar líneas en el búfer actual, escriba C-x $ (set-selective-display) con un argumento numérico n. A continuación, las líneas con al menos n columnas de sangría desaparecen de la pantalla. La única indicación de su presencia es que tres puntos ('…') aparecen al final de cada línea visible seguida de una o más líneas ocultas.

Los comandos C-n y C-p se mueven a través de las líneas ocultas como si no estuvieran allí.

Las líneas ocultas todavía están presentes en el búfer, y la mayoría de los comandos de edición las ven como de costumbre, por lo que puede encontrar el punto en el centro del texto oculto. Cuando esto sucede, el cursor aparece al final de la línea anterior, después de los tres puntos. Si el punto se encuentra al final de la línea visible, antes de la nueva línea que la termina, el cursor aparece antes de los tres puntos.

Para que todas las líneas sean visibles de nuevo, escriba C-x $ sin argumento.

Si ajusta la variable selective-display-elipses a nil, los tres puntos no aparecen al final de una línea que precede a las líneas ocultas. Entonces no hay ninguna indicación visible de las líneas ocultas. Esta variable se convierte automáticamente en local cuando se establece.

Vea también el Modo de Esquema para otra manera de ocultar parte del texto en un búfer.

19.18 Características opcionales modo de línea

El porcentaje de búfer pos indica el porcentaje de la memoria intermedia por encima de la parte superior de la ventana. Puede mostrar, además, el tamaño de la memoria intermedia escribiendo tamaño-indicación-Mx modo para activar el modo Tamaño Indicación. El tamaño se mostrará inmediatamente después del porcentaje de búfer como esto:

POS of SIZE

Aquí SIZE es la representación legible del número de caracteres en la memoria intermedia, lo que se utiliza para abreviar significa en k para 103, M para 106, G para 109, etc.

El número de línea actual del punto aparece en la línea de modo cuando se activa el modo de número de línea. Utilice el comando M-x line-number-mode para convertir este modo en fijo. El número de línea aparece después de la pos porcentaje de búfer, con la letra "L" para indicar lo que es.

Del mismo modo, se puede visualizar el número de columna actual activando M-x column-number-mode. El número de columna se indica con la letra "C". Sin embargo, cuando estos dos modos están activados, los números de línea y columna se muestran entre paréntesis, el número de línea en primer lugar, en lugar de 'L' y 'C'. Por ejemplo: '(561,2)'. Ver Menor modes , para obtener más información sobre los modos menores y acerca de cómo utilizar estos comandos.

Si ha reducido la memoria intermedia (ver Estrechamiento ), el número de línea que se muestra es con relación a la porción accesible del búfer. Por lo tanto, no es adecuado como un argumento a goto-line. (Utilice el comando what-line para ver el número de línea en relación con todo el archivo.)

Si el buffer es muy grande (más grande que el valor del número line-number-display-limit), Emacs no va a calcular el número de línea, porque eso sería demasiado lento; Por lo tanto, el número de línea no aparecerá en la línea de modo. Para eliminar este límite, establecer line-number-display-limit a nil.

Line-number también puede ser lento si las líneas en la memoria intermedia son demasiado largas. Por esta razón, Emacs no muestra los números de línea si la anchura media, en caracteres, de líneas cerca de punto es mayor que el valor de line-number-display-limit-width. El valor por defecto es de 200 caracteres.

Emacs puede mostrar opcionalmente el tiempo y la carga del sistema en todas las líneas de modo. Para activar esta función, se escribe M-x display-time en tiempo o personalizar la visualización en display-time-mode. La información añadida a la línea de modo se parece a esto:

hh:mmpm l.ll

Aquí hh y mm son la hora y el minuto, seguidos siempre de 'am' o 'pm'. l.ll es el número medio, recogido durante los últimos minutos, de procesos en todo el sistema que estaban en funcionamiento o listos para funcionar (es decir, que estaban esperando un procesador disponible). (Es posible que falten algunos campos si su sistema operativo no es compatible con ellos.) Si prefiere que la hora se muestre en formato de 24 horas, ajuste la variable display-time-24hr-format a t.

La palabra 'Mail' aparece después del nivel de carga si hay correo para ti que aún no has leído. En las pantallas gráficas, puede utilizar un icono en lugar de 'Mail' personalizando display-time-use-mail-icon; esto puede ahorrar espacio en la línea de modo. Puede personalizar display-time-mail-face para que el indicador de correo sea visible. Use display-time-mail-file para especificar el archivo de correo a comprobar, o set display-time-mail-directory para especificar el directorio a comprobar para el correo entrante (cualquier archivo regular no vacío en el directorio se considera como "correo recién llegado").

Al ejecutar Emacs en un ordenador portátil, puede mostrar la carga de la batería en la línea de modo, utilizando el comando display-battery-mode o personalizando la variable display-battery-mode. La variable battery-mode-line-format determina la forma en que se muestra la carga de la batería; el mensaje exacto de modo de línea depende del sistema operativo, y normalmente muestra la carga actual de la batería como un porcentaje de la carga total.

En las pantallas gráficas, la línea de modo se dibuja como un cuadro 3D. Si no te gusta este efecto, puedes deshabilitarlo personalizando la cara de la línea de modo y estableciendo su atributo box en nil. Vea Personalización de la cara.

Por defecto, la línea de modo de las ventanas no seleccionadas se muestra en una cara diferente, llamada línea de modo inactiva. Sólo se muestra la ventana seleccionada en la cara de la línea de modo. Esto ayuda a mostrar qué ventana está seleccionada. Cuando se selecciona el minibuffer, ya que no tiene línea de modo, la ventana desde la que se activó el minibuffer muestra su línea de modo utilizando la línea de modo; como resultado, la entrada ordinaria al minibuffer no cambia ninguna línea de modo.

Puede desactivar el uso de mode-line-inactive configurando la variable mode-line-in-non-selected-windows a nil; a continuación, todas las líneas de modo se muestran en la cara de la línea de modo-line.

Puede personalizar la visualización de la línea de modo para cada uno de los formatos de fin de línea configurando cada una de las variables eol-mnemonic-unix, eol-mnemonic-dos, eol-mnemonic-mac, y eol-mnemonic-undecided a las cadenas que prefiera.

19.19 Cómo se muestra el texto

La mayoría de los caracteres son caracteres de inpresión cuando aparecen en un BUFFER, literalmente, se muestran en pantalla. Los caracteres de impresión incluyen números ASCII, letras y caracteres de puntuación, así como muchos caracteres no ASCII.

El juego de caracteres ASCII contiene caracteres de control que no son de impresión. Dos de ellos se muestran especialmente: el carácter de nueva línea (punto de código Unicode U+000A) se muestra iniciando una nueva línea, mientras que el carácter de tabulación (U+0009) se muestra como un espacio que se extiende hasta la siguiente columna de tabulación (normalmente cada 8 columnas). El número de espacios por pestaña es controlado por la variable local de la memoria intermedia, que debe tener un valor entero entre 1 y 1000, inclusive. Tenga en cuenta que la forma en que se muestra el tabulador en el búfer no tiene nada que ver con la definición de <TAB> como un comando.

Otros caracteres de control ASCII, cuyos códigos están por debajo de U+0020 (octal 40, decimal 32), se muestran como un signo de intercalación ('^') seguido de la versión sin control del carácter, con la cara de escape. Por ejemplo, el carácter 'control-A', U+0001, se muestra como ^A'.

Los bytes en bruto con los códigos U+0080 (octal 200) a U+009F (octal 237) se muestran como secuencias de escape octales, con la cara del glifo de escape. Por ejemplo, el código de carácter U+0098 (octal 230) se muestra como'\230'. Si cambia la variable buffer-local ctl-arrow a nil, los caracteres de control ASCII también se muestran como secuencias de escape octales en lugar de secuencias de escape de caret.

Algunos caracteres no ASCII tienen el mismo aspecto que un espacio ASCII o un carácter de guión (menos). Estos caracteres pueden causar problemas si se introducen en un búfer sin que usted se dé cuenta, por ejemplo, tirando de un tirón; por ejemplo, los compiladores de código fuente normalmente no tratan los espacios no ASCII como caracteres de espacios en blanco. Para solucionar este problema, Emacs muestra estos caracteres de forma especial: muestra U+00A0 (espacio sin ruptura) con nobreak-space, y muestra U+00AD (guión suave), U+2010 (guión), y U+2011 (guión sin ruptura) con escape-glyph. Para desactivar esto, cambie la variable nobreak-char-display a nil. Si le da a esta variable un valor non-nil y non-t, Emacs muestra caracteres como una barra invertida resaltada seguida de un espacio o guión.

Puede personalizar la forma en que se visualiza un código de carácter determinado mediante una tabla de visualización.

En las pantallas gráficas, es posible que algunos caracteres no tengan glifos en ninguna de las fuentes disponibles para Emacs. Estos caracteres sin glifos se muestran normalmente como cajas que contienen el código de caracteres hexadecimales. Del mismo modo, en los terminales de texto, los caracteres que no se pueden mostrar utilizando la codificación del terminal (ver Codificación del terminal) se muestran normalmente como signos de interrogación. Puede controlar el método de visualización personalizando la variable glyphless-char-display-control.

19.20 Viendo el cursor

En un terminal de texto, la apariencia del cursor es controlada por el terminal, fuera del control de Emacs. Algunos terminales ofrecen dos cursores diferentes: un cursor estático "visible" y un cursor intermitente "muy visible". De forma predeterminada, Emacs utiliza el cursor muy visible y cambia a él cuando inicia o reanuda Emacs. Si la variable visible-cursor es nil cuando Emacs arranca o se reanuda, utiliza el cursor normal.

En una pantalla gráfica, muchas más propiedades del cursor de texto pueden ser alteradas. Para personalizar su color, cambie el atributo :background del cursor del nombre de la cara (ver Personalización de la cara). (Los otros atributos de esta cara no tienen efecto; el texto mostrado bajo el cursor se dibuja usando el color de fondo del marco.) Para cambiar su forma, personalice la variable local cursor-type del búfer; los valores posibles son box (por defecto), hollow (hollow box), bar (veertical-bar), (bar . n) (una barra vertical n píxeles de ancho), hbar (horizontal bar), (hbar. n) (una barra horizontal n píxeles de alto), o nil (no hay cursor en absoluto).

Para desactivar el parpadeo del cursor, cambie la variable blink-cursor-mode a nil (vea Easy Customization), o añada la línea (blink-cursor-mode 0)*a su archivo de inicio. Alternativamente, puede cambiar el aspecto del cursor cuando "parpadea" personalizando la variable *blink-cursor-alist. Cada elemento de la lista debe tener la forma (on-type . off-type); esto significa que si el cursor se muestra como on-type cuando parpadea (cuando on-type es uno de los tipos de cursor descritos anteriormente), entonces se muestra como off-type cuando parpadea.

Algunos caracteres, como los caracteres de tabulación, son "extra anchos". Cuando el cursor se posiciona sobre un carácter de este tipo, normalmente se dibuja con el ancho de carácter predeterminado. Puede hacer que el cursor se estire para cubrir caracteres anchos, cambiando la variable x-stretch-cursor a un valor non-nil.

El cursor aparece normalmente en las ventanas no seleccionadas como una caja hueca que no parpadea. Para desactivar los cursores en ventanas no seleccionadas, cambie la variable cursor-in-non-selected-windows a nil.

Para que el cursor sea aún más visible, puede utilizar el modo Línea HL, un modo menor que resalta la línea que contiene el punto. Utilice el M-x hl-line-mode para habilitarlo o deshabilitarlo en el búfer actual. M-x global-hl-line-mode activa o desactiva el mismo modo globalmente.

19.21 El truncamiento línea

Como alternativa a la continuación (ver Líneas de Continuación), Emacs puede mostrar líneas largas por truncamiento. Esto significa que todos los caracteres que no caben en el ancho de la pantalla o ventana no aparecen en absoluto. En las pantallas gráficas, una pequeña flecha recta en el borde indica truncamiento en cada extremo de la línea. En los terminales de texto, esto se indica con signos '$' en las columnas más a la izquierda y/o más a la derecha.

El desplazamiento horizontal provoca automáticamente el truncamiento de la línea (ver Desplazamiento horizontal). Puede habilitar explícitamente el truncamiento de líneas para un búfer en particular con el comando M-x toggle-truncate-lines. Esto funciona cambiando localmente la variable truncate-lines. Si esa variable es non-nil, las líneas largas se truncan; si es nil, se continúan en líneas de cribado múltiples. Ajustar la variable truncate-lines de cualquier manera lo hace local al buffer actual; hasta ese momento, el valor por defecto, que normalmente es nil, está en activo.

Si una ventana dividida se vuelve demasiado estrecha, Emacs puede activar automáticamente el truncamiento de líneas. Véase Ventana partida, para la varible truncate-partial-width-windows que lo controlan.

19.22 Modo de linea visual

Otra alternativa a la continuación de la línea ordinaria es utilizar un ajuste de línea. Aquí, cada línea lógica larga se divide en dos o más líneas de pantalla, como en la continuación de línea ordinaria. Sin embargo, Emacs intenta envolver la línea en los límites de la palabra cerca del borde derecho de la ventana. Esto hace que el texto sea más fácil de leer, ya que la envoltura no se produce en medio de las palabras.

El ajuste de líneas está habilitado en el modo Visual Line, un modo menor opcional. Para activar el modo Línea visual en el búfer actual, escriba M-x visual-line-mode; si repite este comando, se desactiva. También puede activar el modo Línea Visual usando la barra de menú: en el menú Opciones, seleccione el submenú 'Ajuste de líneas en este búfer', seguido por el elemento de menú'Ajuste de líneas visual (Visual Line Mode)'. Mientras el modo Línea visual está activado, la línea de modo muestra la cadena 'wrap' en la pantalla de modo. El comando M-x global-visual-line-mode alterna el modo Visual Line en todos los buffers.

En el modo Visual Line, algunos comandos de edición trabajan con líneas en pantalla en lugar de líneas lógicas: C-a (beginning-of-visual-line) se mueve al principio de la línea de la pantalla, C-e (end-of-visual-line) se mueve al final de la línea de la pantalla, y C-k (kill-visual-line) mata el texto al final de la línea de la pantalla.

Para moverse por líneas lógicas, utilice los comandos M-x next-logical-line y M-x previous-logical-line. Estos movimientos apuntan a la siguiente línea lógica y a la línea lógica anterior respectivamente, independientemente de si el modo Visual Line está activado. Si utiliza estos comandos con frecuencia, puede ser conveniente asignarles enlaces de teclas. Véase Rebobinado de inicio.

De forma predeterminada, las líneas envueltas en palabras no muestran indicadores de franjas. El modo Línea visual se utiliza a menudo para editar archivos que contienen muchas líneas lógicas largas, por lo que tener un indicador de flecos para cada línea envuelta sería una distracción visual. Puede cambiar esto personalizando la variable visual-line-fringe-indicators.

19.23 Personalización

Esta sección describe las variables que controlan diversos aspectos de la apariencia de la pantalla de Emacs. Los usuarios principiantes pueden omitirlo.

Si la variable visible bell es non-nil, Emacs intenta hacer que toda la pantalla parpadee cuando normalmente haría sonar una campana audible. Esta variable no tiene efecto si su terminal no tiene una manera de hacer que la pantalla parpadee.

La variable echo-keystrokes controla el eco de las teclas de varios caracteres; su valor es el número de segundos de pausa necesarios para que el eco comience, o cero, lo que significa que no hay eco en absoluto. El valor tiene efecto cuando hay algo que hacer eco. Ver echo area.

En las pantallas gráficas, Emacs muestra el puntero del ratón como un reloj de arena si Emacs está ocupado. Para desactivar esta función, ajuste la variable display-hourglass a nil. La variable hourglass-delay determina el número de segundos de "tiempo ocupado" antes de que se muestre el reloj de arena; el valor predeterminado es 1.

Si el puntero del ratón se encuentra dentro de un marco de Emacs, Emacs lo hace invisible cada vez que escribe un carácter para insertar texto, para evitar que lo oculte. (Para ser precisos, la ocultación se produce cuando se escribe un carácter de "autoinserción". Véase Inserción de texto.) Mover el puntero del ratón lo hace visible de nuevo. Para desactivar esta función, ajuste la variable make-pointer-invisible a nil.

En las pantallas gráficas, la variable underline-minimum-offset determina la distancia mínima entre la línea de base y el subrayado, en píxeles, para el texto subrayado. De forma predeterminada, el valor es 1; aumentarlo puede mejorar la legibilidad del texto subrayado para determinadas fuentes. (Sin embargo, Emacs nunca dibujará el subrayado debajo del área de línea actual.) La variable x-underline-at-descent-line determina cómo dibujar texto subrayado. El valor predeterminado es nil, lo que significa dibujarlo en el nivel de la línea de base de la fuente; si lo cambia a nil, Emacs dibuja el subrayado a la misma altura que la línea de descenso de la fuente.

La variable overline-margin especifica la posición vertical de una sobrelínea sobre el texto, incluyendo la altura de la sobrelínea misma, en píxeles; el valor por defecto es 2.

En algunos terminales de texto, la cara en negrita y el vídeo inverso juntos dan como resultado un texto difícil de leer. Llama a la función tty-suppress-bold-inverse-default-colors con un argumento non-nil para suprimir el efecto de la negrita en este caso.

20 Búsqueda y sustitución

Al igual que otros editores, Emacs tiene comandos para buscar las ocurrencias de una cadena. Emacs también tiene comandos para reemplazar las ocurrencias de una cadena por una cadena diferente. También hay comandos que hacen lo mismo, pero buscan patrones en lugar de cadenas fijas.

También puede buscar múltiples archivos bajo el control de una tabla de etiquetas (ver Búsqueda de etiquetas) o a través del comando Dired A (ver Operando en Archivos), o pedirle al programa grep que lo haga (ver Búsqueda de etiquetas).

Búsqueda Incremental:    La búsqueda se realiza a medida que se escribe la cadena.
Búsqueda no incremental: Especifique la cadena completa y luego busque.
Búsqueda de palabras:    Buscar la secuencia de palabras.
Búsqueda de símbolos:    Buscar un símbolo de código fuente.
Búsqueda Regexp:         Buscar una coincidencia para una regexp.
Sintaxis Regexps:        Sintaxis de las expresiones regulares.
Regexp Backslash:        Construcciones de expresión regular que empiezan con `\`.
Ejemplo de Regexp:       Una expresión regular compleja explicada.
Mayúsculas/minúsculas:   Para ignorar el tipo durante la búsqueda, o no.
Reemplazar:              Buscar y reemplazar algunas o todas las coincidencias.
Búsqueda repetitiva:     Operando en todos los buffers para algún regexp.

21 Búsqueda incremental

El comando de búsqueda principal en Emacs es incremental: comienza la búsqueda tan pronto como se escribe el primer carácter de la cadena de búsqueda. Al escribir la cadena de búsqueda, Emacs le muestra dónde se encontraría la cadena (tal y como la ha escrito hasta ahora). Cuando haya escrito suficientes caracteres para identificar el lugar que desea, puede detenerse. Dependiendo de lo que planee hacer a continuación, es posible que necesite o no terminar la búsqueda explícitamente con <RET>.

C-s
   Búsqueda incremental hacia adelante (isearch-forward).

C-r
   Búsqueda incremental hacia atrás (isearch-backward).
Básica:         Comandos básicos de búsqueda incremental.
Repitir:        En busca de la misma cadena de nuevo.
Error:          Cuando no se encuentra en la cadena.
Especial:       Entrada especial en la búsqueda incremental.
Yank:           Comandos que fijan texto a la cadena de búsqueda o la editan.
Desplazamiento: Desplazamiento durante una búsqueda incremental.
Minibuffer:     Búsqueda incremental de la historia minibuffer.

21.1 Conceptos básicos de la búsqueda incremental

C-s
   Iniciar la búsqueda incremental (isearch-forward).
C-r
   Iniciar la búsqueda incremental hacia atrás (isearch-backward).

C-s (isearch-forward) inicia una búsqueda incremental hacia adelante. Lee los caracteres del teclado y se mueve justo después del final de la siguiente aparición de esos caracteres en el búfer.

Por ejemplo, si escribe C-s y luego F, eso pone el cursor después de la primera 'F' que encuentra en el buffer después del punto de inicio. Luego, si escribe O, el cursor se mueve justo después de la primera "FO"; la "F" en esa "FO" podría no ser la primera "F" encontrada previamente. Después de otra O, el cursor se mueve a justo después de la primera 'FOO'.

En cada paso, Emacs resalta la coincidencia actual (el texto del búfer que coincide con la cadena de búsqueda) utilizando la cara de búsqueda (consulte Caras). La cadena de búsqueda actual también se muestra en el área de eco.

Si comete un error al escribir la cadena de búsqueda, escriba <DEL>. Cada <DEL> cancela el último carácter del string de búsqueda.

Cuando esté satisfecho con el lugar al que ha llegado, escriba <RET>. Esto detiene la búsqueda, dejando el cursor donde lo trajo la búsqueda. Además, cualquier comando que no sea especialmente significativo en las búsquedas detiene la búsqueda y se ejecuta. De esta manera, al escribir C-a se sale de la búsqueda y luego se desplaza al principio de la línea. <RET> es necesario sólo si el siguiente comando que desea escribir es un carácter de impresión, <DEL>, <RET>, u otro carácter que sea especial dentro de las búsquedas (C-q, C-w, C-r, C-s, C-y, M-y, M-r, M-c, M-e, y algunos otros que se describen a continuación).

Como excepción especial, si introduce <RET> cuando la cadena de búsqueda está vacía, se inicia la búsqueda no incremental (véase Búsqueda no incremental).

Al salir de la búsqueda incremental, añade el valor original del punto al anillo de la marca, sin activar la marca; por lo tanto, puede utilizar C-u C-<SPC> para volver a donde estaba antes de comenzar la búsqueda. Ver Mark Ring. Sólo lo hace si la marca no estaba ya activa.

Para buscar hacia atrás, utilice C-r (isearch-backward) en lugar de C-s para iniciar la búsqueda. Una búsqueda hacia atrás encuentra coincidencias que terminan antes del punto de partida, de la misma manera que una búsqueda hacia adelante encuentra coincidencias que comienzan después de él.

21.2 La repetición de la búsqueda incremental

Suponga que busca "FOO" y encuentra una coincidencia, pero no la que esperaba encontrar: la "FOO" a la que apuntaba ocurre más tarde en el búfer. En este caso, escriba otra C-s para pasar a la siguiente aparición de la cadena de búsqueda. Puede repetir esto cualquier número de veces. Si se sobrepasa, puede cancelar algunos caracteres C-s con <DEL>. De manera similar, cada C-r en una búsqueda incremental hacia atrás repite la búsqueda hacia atrás.

Si hace una pausa durante un tiempo durante la búsqueda incremental, Emacs resalta todas las demás coincidencias posibles para la cadena de búsqueda que están presentes en la pantalla. Esto le ayuda a anticipar dónde puede llegar escribiendo C-s o C-r para repetir la búsqueda. Otros casos se resaltan de forma diferente al actual, utilizando la opción de personalizar la cara para resaltar el buffer (ver Caras). Si no le gusta esta función, puede desactivarla estableciendo isearch-lazy-highlight en nil.

Después de salir de una búsqueda, puede volver a buscar la misma cadena escribiendo sólo C-s C-s. El primer C-s es la clave que invoca la búsqueda incremental, y el segundo C-s significa "buscar de nuevo". Del mismo modo, C-r C-r C-r busca hacia atrás la última cadena de búsqueda. Para determinar el último string de búsqueda, no importa si el string se ha buscado con C-s o C-r.

Si está buscando hacia adelante pero se da cuenta de que estaba buscando algo antes del punto de partida, escriba C-r para cambiar a una búsqueda hacia atrás, dejando la cadena de búsqueda sin cambios. De forma similar, C-s en una búsqueda hacia atrás cambia a una búsqueda hacia adelante.

Si una búsqueda falla y usted pide que se repita escribiendo otra C-s, comienza de nuevo desde el principio del búfer. La repetición de una búsqueda inversa fallida con C-r comienza de nuevo desde el final. A esto se le llama "Wrapped" y, una vez que esto haya ocurrido, aparecerá "Envolver" en el indicador de búsqueda. Si sigue pasando el punto de partida original de la búsqueda, cambiará a 'Overwrapped', lo que significa que está volviendo a ver las coincidencias que ya ha visto.

Para volver a utilizar las cadenas de búsqueda anteriores, utilice el anillo de búsqueda. Los comandos M-p y M-n se mueven a través del anillo para elegir una cadena de búsqueda para reutilizar. Estos comandos dejan el elemento del anillo de búsqueda seleccionado en el minibúfer, donde puede editarlo.

Para editar la cadena de búsqueda actual en el minibuffer sin reemplazarla con elementos del anillo de búsqueda, escriba M-e. Escriba C-s o C-r para terminar de editar la cadena y buscarla.

21.3 Los errores en incremental Isearch

Si su cadena no se encuentra en absoluto, el área de eco dice 'Failing I-Search', y el cursor se desplaza más allá del lugar donde Emacs encontró la mayor parte de su cadena que pudo. Por lo tanto, si busca `Foot', y no hay `Foot', puede que vea el cursor después de `Foot' en `Fool'. En el área de eco, la parte de la cadena de búsqueda que no coincidió se resalta utilizando el fallo de búsqueda de cara.

En este punto, hay varias cosas que usted puede hacer. Si su cadena estaba mal escrita, puede usar <DEL> para borrarla y corregirla. Si te gusta el lugar que has encontrado, puedes escribir <RET> para permanecer allí. O puede escribir C-g, que elimina de la cadena de búsqueda los caracteres que no se pudieron encontrar (la `t' en `Foot'), dejando los que se encontraron (el `Foo' en `Foot'). Un segundo C-g en ese punto cancela la búsqueda por completo, regresando al punto donde estaba cuando comenzó la búsqueda.

El comando quit, C-g, hace cosas especiales durante las búsquedas; lo que hace depende del estado de la búsqueda. Si la búsqueda ha encontrado lo que usted especificó y está esperando, C-g cancela toda la búsqueda, moviendo el cursor hacia atrás hasta donde usted comenzó la búsqueda. Si se escribe C-g cuando hay caracteres en la cadena de búsqueda que no se han encontrado (porque Emacs sigue buscándolos o porque no los ha encontrado), los caracteres de la cadena de búsqueda que no se han encontrado se descartan de la cadena de búsqueda. Con ellos fuera, la búsqueda es ahora exitosa y esperando más entradas, así que un segundo C-g cancelará toda la búsqueda.

21.4 Entrada especial para la búsqueda incremental

Algunos de los caracteres que escribe durante la búsqueda incremental tienen efectos especiales.

Por defecto, la búsqueda incremental realiza una comparación de espacios "laxos": cada espacio, o secuencia de espacios, coincide con cualquier secuencia de uno o más espacios en el texto. Por lo tanto, 'foo bar' coincide con 'foo bar' y ' foo bar' (pero no con'foobar'). Más concretamente, Emacs hace coincidir cada secuencia de caracteres de espacio en la cadena de búsqueda con una expresión regular especificada por la variable search-whitespace-regexp. Por ejemplo, póngalo en '"[[:space:]\N]+"' para hacer que los espacios coincidan con las secuencias de las nuevas líneas así como con los espacios. Para alternar entre espacios laxos, escriba M-s <SPC> (isearch-toggle-lax-whitespace). Para desactivar esta función por completo, cambie search-whitespace-regexp a nil; entonces cada espacio en la cadena de búsqueda coincide exactamente con un espacio.

Si el string de búsqueda introducido contiene sólo letras minúsculas, la búsqueda no distingue entre mayúsculas y minúsculas; mientras exista una letra mayúscula en el string de búsqueda, la búsqueda distingue entre mayúsculas y minúsculas. Si borra el carácter en mayúsculas del string de búsqueda, deja de tener este efecto. Ver Caso de Búsqueda.

Para buscar un nuevo carácter de línea, escriba C-j.

Para buscar otros caracteres de control, como <control-S>, cítelo escribiendo C-q primero (vea Insertar texto. Para buscar caracteres no ASCII, puede utilizar C-q e introducir su código octal, o bien utilizar un método de entrada (véase Métodos de entrada). Si un método de entrada está habilitado en la memoria intermedia actual al iniciar la búsqueda, también se puede utilizar en la cadena de búsqueda. Mientras escribe la cadena de búsqueda, puede cambiar el método de entrada con el comando C-\ (isearch-toggle-input-method). También puede activar un método de entrada no predeterminado con C-^ (isearch-toggle-specified-input-method), que solicita el nombre del método de entrada. Cuando un método de entrada está activo durante la búsqueda incremental, la consulta de búsqueda incluye la sentencia mnemotécnica del método de entrada, de esta manera:

I-search [im]:

donde im es la mnemotécnica del método de entrada activo. Cualquier método de entrada que habilite durante la búsqueda incremental permanecerá habilitado en el búfer actual posteriormente.

Al escribir M-% en la búsqueda incremental se invoca query-replace o query-replace-regexp (dependiendo del modo de búsqueda) con la cadena de búsqueda actual utilizada como la cadena a reemplazar. Véase Reemplazar consulta.

Al escribir M-<TAB> en la búsqueda incremental se invoca isearch-complete, que intenta completar la cadena de búsqueda utilizando el anillo de búsqueda como una lista de alternativas de finalización. Véase Terminación. En muchos sistemas operativos, la secuencia de teclas M-<TAB> es capturada por el gestor de ventanas; a continuación, es necesario volver a enlazar isearch-complete con otra secuencia de teclas si se desea utilizarla (ver Rebinding).

Cuando la búsqueda incremental está activa, puede escribir C-h C-h C-h para acceder a las opciones de ayuda interactivas, incluida una lista de enlaces de teclas especiales. Estos enlaces clave forman parte de isearch-mode-map (ver Mapas clave).

21.5 isearch Yanking

Dentro de la búsqueda incremental, C-y (isearch-yank-kill) añade el asesinato actual a la cadena de búsqueda. M-y (isearch-yank-pop), si se llama así por C-y, reemplaza ese texto adjunto con una muerte anterior, similar al comando usual M-y (yank-pop) (ver Yanking). Mouse-2 añade la selección X actual (ver Selección primaria).

C-w (isearch-yank-word-or-char) añade el siguiente carácter o palabra al punto de la cadena de búsqueda. Esta es una manera fácil de buscar otra ocurrencia del texto en el punto. (La decisión de copiar un carácter o una palabra es heurística.)

Del mismo modo, M-s C-e (isearch-yank-line) añade el resto de la línea actual a la cadena de búsqueda. Si el punto ya está al final de una línea, añade la siguiente línea.

Si la búsqueda no distingue entre mayúsculas y minúsculas, tanto C-w como M-s C-e convierten el texto que copian a minúsculas, de modo que la búsqueda no distingue entre mayúsculas y minúsculas.

C-M-w (isearch-del-char) borra el último carácter de la cadena de búsqueda, y C-M-y (isearch-yank-char) añade el carácter punto tras punto a la cadena de búsqueda. Un método alternativo para añadir el carácter después del punto es introducir el minibuffer con M-e (ver Repetir búsqueda) y escribir C-f al final de la cadena de búsqueda en el minibuffer.

21.6 Durante el desplazamiento de búsqueda incremental

Normalmente, los comandos de desplazamiento salen de la búsqueda incremental. Si cambia la variable isearch-allow-scroll a un valor non-nil, eso permite el uso de la barra de desplazamiento, así como los comandos de desplazamiento del teclado como C-v, M-v, y C-l (ver Scrolling). Esto se aplica sólo a la llamada de estos comandos a través de sus secuencias de teclas enlazadas; si escribe M-x, saldrá de la búsqueda. Puede dar argumentos de prefijo a estos comandos de la forma habitual. Sin embargo, esta función no le permitirá desplazar la coincidencia actual fuera de visibilidad.

La función isearch-allow-scroll también afecta a otros comandos, como C-x 2 (split-window-below) y C-x ^ (enlarge-window), que no se desplazan exactamente, pero sí afectan al lugar donde aparece el texto en la pantalla. Se aplica a cualquier comando cuyo nombre tenga una propiedad isearch-scroll non-nil. Así que puede controlar qué comandos se ven afectados por el cambio de estas propiedades.

Por ejemplo, para que C-h l se pueda utilizar en una búsqueda incremental en todas las futuras sesiones de Emacs, utilice C-h c para encontrar el comando que se ejecuta (consulte la Ayuda de las teclas), que es view-lossage. Luego puedes poner la siguiente línea en tu archivo init (ver Archivo Init):

(put 'view-lossage 'isearch-scroll t)

Esta característica se puede aplicar a cualquier comando que no cambie permanentemente el punto, el contenido del búfer, los datos de coincidencia, el búfer actual o la ventana y el marco seleccionados. El comando no debe intentar por sí mismo una búsqueda incremental.

21.7 Buscando en la Minibuffer

Si inicia una búsqueda incremental mientras el minibuffer está activo, Emacs busca el contenido del minibuffer. A diferencia de la búsqueda en una memoria intermedia normal, la cadena de búsqueda no se muestra en el área de eco, ya que se utiliza para mostrar el minibuffer.

Si una búsqueda incremental falla en el minibuffer, intenta buscar en el historial del minibuffer. Ver Historia del Minibuffer. Puede visualizar el minibuffer y su historia como una serie de "páginas", con el elemento histórico más antiguo en la primera página y el minibuffer actual en la última página. Una búsqueda hacia adelante, C-s, busca hacia adelante a páginas posteriores; una búsqueda inversa, C-r, busca hacia atrás a páginas anteriores. Al igual que en la búsqueda de búfer normal, una búsqueda que falla puede envolverse, pasando de la última página a la primera o viceversa.

Cuando el partido actual está en un elemento histórico, ese elemento histórico se introduce en el minibuffer. Si sale de la búsqueda incremental normalmente (por ejemplo, escribiendo <RET>), permanecerá en el minibuffer después. Al cancelar la búsqueda, con C-g, se restaura el contenido del minibuffer cuando se inició la búsqueda.

22 Búsqueda no incremental

Emacs también tiene comandos de búsqueda convencionales no incrementales, que requieren que escriba toda la cadena de búsqueda antes de que comience la búsqueda.

C-s <RET> string <RET>
   Buscar cadena.

C-r <RET> string <RET>
   Búsqueda de cadena hacia atrás.

Para iniciar una búsqueda no incremental, primero escriba C-s <RET>. Esto entra en el minibuffer para leer la cadena de búsqueda; termina la cadena con <RET>, y luego se realiza la búsqueda. Si no se encuentra la cadena, el comando de búsqueda indica un error.

Cuando escribe C-s <RET>, C-s invoca la búsqueda incremental como de costumbre. Este comando está especialmente programado para invocar el comando de búsqueda no incremental, search-forward, si la cadena que usted especifica está vacía. (Un argumento tan vacío sería inútil.) C-r <RET> hace lo mismo, invocando el comando search-backward.

23 Búsqueda de palabras

Una búsqueda de palabras encuentra una secuencia de palabras sin importar el tipo de puntuación entre ellas. Por ejemplo, si introduce una cadena de búsqueda que consta de dos palabras separadas por un único espacio, la búsqueda coincide con cualquier secuencia de esas dos palabras separadas por uno o más espacios, líneas nuevas u otros caracteres de puntuación. Esto es especialmente útil para la búsqueda de documentos de texto, ya que no tiene que preocuparse de si las palabras que busca están separadas por líneas o espacios nuevos.

M-s w
   Si la búsqueda incremental está activa, active el modo de búsqueda de palabras
   (isearch-toggle-word); en caso contrario, inicie una búsqueda incremental de palabras
   hacia adelante (isearch-forward-word).

M-s w <RET> words <RET>
   Buscar palabras, utilizando una búsqueda de palabras no incremental.

M-s w C-r <RET> word <RET>
   Buscar palabras hacia atrás, utilizando una búsqueda de palabras no incremental.

Para iniciar una búsqueda de palabras incremental hacia adelante, escriba M-s w. Si la búsqueda incremental aún no está activa, ejecute el comando isearch-forward-word. Si la búsqueda incremental ya está activa (ya sea una búsqueda hacia adelante o hacia atrás), M-s w cambia a una búsqueda de palabras mientras mantiene la dirección de la búsqueda y la cadena de búsqueda actual sin cambios. Puede desactivar la búsqueda de palabras escribiendo M-s w de nuevo.

Para iniciar una búsqueda de palabras no incremental, escriba M-s w <RET> para una búsqueda hacia adelante, o M-s w C-r <RET> para una búsqueda hacia atrás. Éstos ejecutan los comandos word-search-forward y wordsearch-backard respectivamente.

Las búsquedas de palabras incrementales y no incrementales difieren ligeramente en la forma en que encuentran una coincidencia. En una búsqueda de palabras no incremental, la última palabra de la cadena de búsqueda debe coincidir exactamente con una palabra completa. En una búsqueda por palabras incremental, la coincidencia es más laxa: la última palabra de la cadena de búsqueda puede coincidir con parte de una palabra, de modo que la coincidencia se produce de forma incremental a medida que escribe. Esta laxitud adicional no se aplica al resaltado perezoso, que siempre coincide con palabras enteras.

24 Búsqueda de Símbolos

Una búsqueda de símbolos es muy parecida a una búsqueda ordinaria, excepto que los límites de la búsqueda deben coincidir con los límites de un símbolo. El significado del símbolo en este contexto depende del modo principal, y normalmente se refiere a un token de código fuente, como un símbolo Lisp en el modo Lisp de Emacs. Por ejemplo, si realiza una búsqueda de símbolos incremental para un símbolo Lisp forward-word, no coincidirá con isearch-forward-word. Esta característica es, por lo tanto, principalmente útil para la búsqueda de código fuente.

M-s _
   Si la búsqueda incremental está activa, conmute el modo de búsqueda de símbolos
   (isearch-toggle-symbol); en caso contrario, inicie una búsqueda incremental de
   símbolos hacia adelante (isearch-forward-symbol).

M-s _ <RET> symbol <RET>
   Buscar hacia adelante el símbolo, no incrementalmente.

M-s _ C-r <RET> symbol <RET>
   Buscar el símbolo hacia atrás, no incrementalmente.

Para iniciar una búsqueda de símbolos incrementales hacia adelante, escriba M-s _. Si la búsqueda incremental aún no está activa, se ejecuta el símbolo del comando isearch-forward. Si la búsqueda incremental ya está activa, M-s _ cambia a una búsqueda de símbolos, conservando la dirección de la búsqueda y la cadena de búsqueda actual; puede desactivar la búsqueda de símbolos escribiendo M-s _ de nuevo. En la búsqueda de símbolos incrementales, sólo se necesita el comienzo de la cadena de búsqueda para que coincida con el comienzo de un símbolo.

Para iniciar una búsqueda de símbolos no incremental, escriba M-s _ <RET> para una búsqueda hacia adelante, o M-s _ C-r <RET> para una búsqueda hacia atrás. En las búsquedas de símbolos no incrementales, el principio y el final de la cadena de búsqueda deben coincidir con el principio y el final de un símbolo, respectivamente.

25 Expresion regular de Búsqueda

Una expresión regular (o regexp para abreviar) es un patrón que denota untipo de alternativas que coinciden. Emacs proporciona formas incrementales y no incrementales de buscar una coincidencia para una regexp. La sintaxis de las expresiones regulares se explica en la siguiente sección.

C-M-s
   Iniciar la búsqueda de regexp incremental (isearch-forward-regexp).

C-M-r
   Comenzar la búsqueda inversa de regexp incremental (isearch-backward-regexp).

La búsqueda incremental de una regexp se realiza escribiendo C-M-s (isearch-forward-regexp), invocando C-s con un argumento de prefijo (cuyo valor no importa), o escribiendo M-r dentro de una búsqueda incremental hacia adelante. Este comando lee una cadena de búsqueda de forma incremental como C-s, pero trata la cadena de búsqueda como una regexp en lugar de buscar una coincidencia exacta con el texto en el búfer. Cada vez que añada texto a la cadena de búsqueda, hará que regexp sea más larga y que se busque la nueva regexp. Para buscar una regexp hacia atrás, utilice C-M-r (isearch-backward-regexp), C-r con un argumento de prefijo, o M-r dentro de una búsqueda incremental hacia atrás.

Todas las secuencias de teclas especiales en una búsqueda incremental ordinaria hacen cosas similares en una búsqueda incremental de regexp. Por ejemplo, al escribir C-s inmediatamente después de iniciar la búsqueda, se recupera el último regexp de búsqueda incremental utilizado y se busca hacia adelante. Las búsquedas incrementales de regexp y no regexp tienen valores predeterminados independientes. También tienen anillos de búsqueda separados, a los que se puede acceder con M-p y M-n.

Al igual que en la búsqueda incremental ordinaria, cualquier <SPC> escrito en la búsqueda incremental de regexp coincide con cualquier secuencia de uno o más caracteres de espacios en blanco. La variable search-whitespace-regexp especifica el regexp para la correspondencia de espacio laxo, y M-s <SPC> (isearch-toggle-lax-whitespace) alterna la característica. Ver Búsqueda especial.

En algunos casos, añadir caracteres a regexp en una búsqueda incremental de regexp puede hacer que el cursor retroceda y empiece de nuevo. Por ejemplo, si ha buscado'foo' y añade'\|barra', el cursor retrocede en caso de que la primera 'barra' preceda a la primera 'foo'. Ver Regexps.

La búsqueda de regexp hacia delante y hacia atrás no es simétrica, porque la búsqueda de regexp en Emacs siempre funciona hacia delante, empezando por el principio de regexp. Por lo tanto, la búsqueda de forward regexp explora hacia adelante, intentando una coincidencia hacia adelante en cada posible posición de partida. La búsqueda regexp hacia atrás explora hacia atrás, intentando una coincidencia hacia delante en cada posible posición de partida. Estos métodos de búsqueda no son imágenes espejo.

La búsqueda no incremental de un regexp se realiza con los comandos re-search-forward y re-search-backward. Puede invocarlos con M-x, o por medio de una búsqueda incremental de regexp con C-M-s <RET> y C-M-r <RET>.

Si utiliza los comandos de búsqueda incremental de regexp con un argumento de prefijo, realizan búsquedas de cadena ordinarias, como isearch-forward e isearch-backard. Ver Búsqueda Incremental.

26 Sintaxis de las expresiones regulares

En este manual se describen las funciones de expresiones regulares que los usuarios usan generalmente.

Las expresiones regulares tienen una sintaxis en la que unos pocos caracteres son construcciones especiales y el resto son ordinarios. Un carácter ordinario coincide con el mismo carácter y nada más. Los caracteres especiales son '$^.*+?[\'. El carácter ']' es especial si termina una alternativa de carácter. El carácter '-' es especial dentro de una alternativa de carácter. Cualquier otro carácter que aparece en una expresión regular es normal, a menos que un '\' precede. (Cuando se utiliza expresiones regulares en un programa Lisp, cada '\', debe duplicarse, véase el ejemplo cerca del final de esta sección.)

Por ejemplo, 'f' no es un carácter especial, por lo que es normal, y por lo tanto 'f'es una expresión regular que coincide con la cadena 'f'y ninguna otra cadena. (No coincide con la cadena 'FF'.) Del mismo modo, 'O' es una expresión regular que coincide sólo con 'O'. (Cuando distinciones de casos están siendo ignorados, estas expresiones regulares también se ajustan a 'F' y 'O', pero que consideran esto una generalización de "la misma cadena", más que una excepción.)

Cualquier dos expresiones regulares una a y b pueden ser concatenados. El resultado es una expresión regular que coincide con una cadena si un partidos cierta cantidad del comienzo de esta cadena y b coincide con el resto de la cadena. Por ejemplo, la concatenación de las expresiones regulares 'f' y 'o' da la expresión regular 'fo', que coincide sólo con la cadena 'fo'. Aún trivial. Para hacer algo trivial, es necesario utilizar uno de los caracteres especiales. Aquí está una lista de ellos:

.
   (Period) es un carácter especial que coincide con cualquier carácter individual excepto
   una nueva línea. Por ejemplo, las expresiones regulares 'a.b' coinciden con cualquier cadena
   de tres caracteres que comience con `a' y termine con `b'.

\*
   (Asterisk) no es una construcción en sí misma; es un operador postfix que significa igualar
   la expresión regular precedente repetidamente cualquier número de veces, tantas veces como
   sea posible. Por lo tanto, 'o*' coincide con cualquier número de ``o's

   El asterisco (*) se aplica siempre a la expresión anterior lo más pequeña posible. De este
   modo, 'fo*' tiene una 'o' que se repite, no una 'fo' que se repite. Coincide con "f", "fo",
   "foo", y así sucesivamente.

   La persona que hace la búsqueda procesa un constructo `*' haciendo coincidir, inmediatamente,
   todas las repeticiones que se puedan encontrar. Luego continúa con el resto del patrón. Si
   esto falla, se produce un retroceso, descartando algunas de las coincidencias de la construcción
   modificada con un "*" en caso de que esto haga posible que coincida con el resto del patrón.
   Por ejemplo, al emparejar 'ca*ar' contra la cadena 'caaar', la `a*' primero intenta emparejar
   las tres `a's; pero el resto del patrón es `ar' y sólo queda `r' para emparejar, así que est
   intento falla. La siguiente alternativa es que `a*' coincida con sólo dos `a's. Con esta
   elección, el resto de los tipos de regexp coinciden con éxito.

+
   (signo +) es un operador postfix, similar a `*'' excepto que debe coincidir con la expresión
   anterior al menos una vez. Así, 'ca+r' coincide con las cadenas 'car' y 'caaaar' pero no con
   la cadena 'cr', mientras que 'ca*r' coincide con las tres cadenas.

?
   es un operador postfix, similar a '*' excepto que puede coincidir con la expresión anterior,
   ya sea de una vez o no. Así,'ca?r' coincide con'car' o'cr', y nada más.

*?, +?, ??
   Estas son variantes no codiciosas de los operadores anteriores. Los operadores normales
   `*', `+', ```?'' coinciden tanto como pueden, siempre y cuando la regexp global pueda coincidir.
   Con el siguiente "?", coincidirán lo menos posible.

   Por lo tanto, tanto `ab*' como `ab*? pueden coincidir con la cadena `a' y la cadena `abbbb';
   pero si intenta coincidir con ambos contra el texto `abbb', `ab*' coincidirá con todo (la
   coincidencia válida más larga), mientras que `ab*?' coincidirá con `a' (la coincidencia válida
   más corta).

   Los operadores no codiciosos emparejan la cadena más corta posible a partir de un punto de
   partida determinado; sin embargo, en una búsqueda por adelantado, el punto de partida más
   temprano posible para la coincidencia es siempre el elegido. Por lo tanto, si busca 'a.*?$'
   contra el texto 'abbab' seguido de una nueva línea, coincide con toda la cadena. Puesto que
   puede coincidir a partir de la primera 'a', lo hace.

\{n\}
   un operador postfix que especifica n repeticiones es decir, la expresión regular precedente
   debe coincidir exactamente n veces seguidas. Por ejemplo,'x\4'' coincide con la cadena'xxxx'
   y nada más.

\{n,N}
   Se trata de un operador postfix que especifica entre n y m repeticiones, es decir, la expresión
   regular precedente debe coincidir al menos n veces, pero no más de m veces. Si se omite m,
   entonces no hay límite superior, pero la expresión regular precedente debe coincidir al menos
   n veces.
   '\{0,1\}' es equivalente a '?'.
   '\{0,\}' es equivalente a "*".
   '\{1,\}' es equivalente a "+".

[...]
   es un juego de caracteres, que comienza con '[' y termina con ']'.

   En el caso más simple, los caracteres entre los dos corchetes son los que este conjunto puede
   igualar. Así, "[ad]" corresponde a una "a" o a una "d", y "[ad]*" a cualquier cadena compuesta
   únicamente por "a" y "d" (incluida la cadena vacía). De ello se deduce que 'c[ad]*r' coincide
   con `cr', `car', `cdr', `caddaar', etc.

   También puede incluir rangos de caracteres en un juego de caracteres, escribiendo los caracteres
   iniciales y finales con un "-" entre ellos. Por lo tanto, '[a-z]' corresponde a cualquier letra
   ASCII en minúsculas. Los rangos pueden mezclarse libremente con caracteres individuales, como
   en '[a-z$%.]', que coincide con cualquier letra ASCII minúscula o `$', `%' o punto.

   También se pueden incluir ciertas clases de caracteres especiales en un juego de caracteres.
   A '[:' y balanceando ':] encierra una clase de carácter dentro de una alternativa de carácter.
   Por ejemplo, '[[[[:alnum:]]]]' coincide con cualquier letra o dígito.

   Para incluir un ']' en un juego de caracteres, debe ser el primer carácter. Por ejemplo, "[]a]"
   coincide con "]" o "a". Para incluir un '-', escriba '-' como primer o último carácter del
   conjunto, o póngalo después de un rango. Así, "[]-]" coincide tanto con "]" como con "-".

   Para incluir '^' en un conjunto, colóquelo en cualquier lugar menos al principio del conjunto.
   (Al principio, complementa el conjunto - ver abajo.)

   Cuando utilice un rango en una búsqueda sin distinción entre mayúsculas y minúsculas, debe
   escribir ambos extremos del rango en mayúsculas, o ambos en minúsculas, o ambos no deben ser
   letras. El comportamiento de un rango de casos mixtos como 'A-z' es un tanto indefinido,
   y puede cambiar en futuras versiones de Emacs.

[^ ...]
   '[^' comienza un juego de caracteres complementado, que coincide con cualquier carácter excepto
   los especificados. Por lo tanto,'[^a-z0-9A-Z]' corresponde a todos los caracteres excepto las
   letras y dígitos ASCII.

   '^' no es especial en un juego de caracteres a menos que sea el primer carácter. El carácter
   que sigue al ^ es tratado como si fuera el primero (en otras palabras, '-' y ']' no son
   especiales allí.

^
   (Caret) es un carácter especial que coincide con la cadena vacía, pero sólo al principio de
   una línea en el texto que se está cotejando. De lo contrario, no coincide con nada. Por lo
   tanto, ^foo' coincide con un ^foo' que ocurre al principio de una línea.

   Por razones de compatibilidad histórica, ^' puede ser usado con este significado sólo al
   principio de la expresión regular, o después de `\(' o `\|`.

$
   es similar a '^' pero sólo coincide al final de una línea. Así, 'x+$' coincide con una cadena
   de una 'x' o más al final de una línea.

   Por razones de compatibilidad histórica, '$' puede usarse con este significado sólo al final
   de la expresión regular, o antes de '\)' o '\|'.

\
   (Backslash) tiene dos funciones: cita los caracteres especiales (incluyendo '\'), e introduce
   construcciones especiales adicionales.

   Debido a que '\' cita caracteres especiales,'\$' es una expresión regular que sólo coincide
   con'$', y '\[' es una expresión regular que sólo coincide con '[', y así sucesivamente.

   Vea la siguiente sección para las construcciones especiales que comienzan con '\'.

Nota: para la compatibilidad histórica, los caracteres especiales se tratan como ordinarios si se encuentran en contextos en los que sus significados especiales no tienen sentido. Por ejemplo, 'foo' trata a '' como ordinaria ya que no existe una expresión precedente sobre la cual el `*' pueda actuar. Es una mala práctica depender de este comportamiento; es mejor citar el carácter especial de todos modos, independientemente de dónde aparezca.

Como un '\' no es especial dentro de una alternativa de carácter, nunca puede eliminar el significado especial de '-' o ']'. Por lo tanto, no debe citar estos caracteres cuando tampoco tienen un significado especial. Esto no aclararía nada, ya que las barras invertidas pueden preceder legítimamente a estos caracteres cuando tienen un significado especial, como en el caso de la sintaxis de la cadena Lisp '[^\]' ("[^\\]", que coincide con cualquier carácter individual excepto una barra invertida.

27 Barra invertida en expresiones regulares

En su mayor parte, '\' seguido de cualquier carácter coincide sólo con ese carácter. Sin embargo, hay varias excepciones: secuencias de dos caracteres que empiezan con "\" y que tienen significados especiales. El segundo carácter de la secuencia es siempre un carácter ordinario cuando se utiliza por sí solo. Aquí hay una tabla de construcciones.

\|
   Especifica una alternativa. Dos expresiones regulares A y B con '\|' en el medio forma una
   expresión que coincide con un poco de texto, si bien coincide con una a o una b que coincide
   con ella. Su acción consiste en tratar de igualar a, y si eso falla, al tratar de igualar b.

   Por lo tanto, 'foo\|bar' se ajusta con una 'foo' o 'bar' pero ninguna otra cadena.

   '\|' se aplica a las mayores expresiones posibles circundantes. Sólo un entorno '\( ... \)'
   puede limitar el poder de la agrupación '\|'.

   Capacidad de retroceso completo existe para manejar múltiples usos de '\|'.

\(...
   Es una construcción de agrupación que tiene tres propósitos:

   1. encerrar un conjunto de '\|' alternativas para otras operaciones. Por lo tanto,
   '\(foo\|bar\)x' se ajusta con una 'foox' o '' Barx.

   2. Para adjuntar una complicada expresión de '*' los operadores de sufijo, '+' y '?'
   para operar. Por lo tanto, "ba\(na\)* 'coincide con 'bananana', etc., con cualquier
   (cero o más) el número de tipos 'na '.

   3. Para grabar una subcadena coincidente para referencia futura. Esta última aplicación
   no es una consecuencia de la idea de una agrupación entre paréntesis; es una característica
   independiente que se asigna como un segundo sentido a la misma '\ (... \)' constructo.
   En la práctica, generalmente no hay conflicto entre los dos significados; cuando hay un
   conflicto, puede utilizar un grupo "tímido".

\(?: ... \)
   Especifica un grupo "tímido" que no registra la subcadena coincidente; no se puede hacer
   referencia a ella con '\d'. Esto es útil en la combinación mecánica expresiones regulares,
   por lo que se pueden agregar grupos para propósitos sintácticos sin interferir con la
   numeración de los grupos que están destinados a ser conocido.

\d

   coincide con el mismo texto que coincidió con la ocurrencia dth de una construcción
   '\(.... \)'. Esto se llama una referencia anterior.

   Después del final de una construcción '\(.... \)', el matcher recuerda el principio y el
   final del texto emparejado por esa construcción. Luego, más adelante en la expresión regular,
   se puede usar '\' seguido del dígito d para significar "igualar el mismo texto coincidente
   con la d-ésimo vez por el constructo '\(... \)'".

   A las cadenas que coinciden con las primeras nueve construcciones '\( ... \)' que aparecen
   en una expresión regular se les asignan los números del 1 al 9 en el orden en que los paréntesis
   abiertos aparecen en la expresión regular. Así que puedes usar '1' a '9' para referirte al
   texto emparejado por las construcciones correspondientes.

   Por ejemplo,'\(.*\)\1' coincide con cualquier cadena libre de nueva línea que esté compuesta
   por dos mitades idénticas. La primera mitad coincide con la primera mitad, que puede ser
   cualquier cosa, pero la siguiente debe coincidir exactamente con el mismo texto.

   Si un constructo en particular coincide más de una vez (lo que puede suceder fácilmente si
   es seguido de un asterisco '*)', sólo se registra la última coincidencia.

\`
   concuerda con la cadena vacía, pero sólo al principio de la cadena o buffer (o su porción
   accesible) ser emparejado en contra.

\'
   concuerda con la cadena vacía, pero sólo al final de la cadena o buffer (o su porción accesible)
   ser emparejado en contra.

\=
   concuerda con la cadena vacía, pero sólo en el punto.

\b
   concuerda con la cadena vacía, pero sólo al principio o al final de una palabra. Por lo tanto,
   '\bfoo\b' coincide con cualquier ocurrencia de 'foo' como una palabra separada. '\bballs?\B'
   coincidencias 'ball' o 'balls' como una palabra separada.

   '\b' ajusta al principio o al final del búfer, independientemente de lo que el texto aparece
   junto a ella.

\B
   concuerda con la cadena vacía, pero no al principio o al final de una palabra.

\<
   concuerda con la cadena vacía, pero sólo al comienzo de una palabra. '\<' Se ajusta al principio
   de la memoria intermedia sólo si un carácter constitutivo de palabra siguiente.

\>
   concuerda con la cadena vacía, pero sólo al final de una palabra. '\>' Coincide al final de la
   memoria intermedia sólo si el contenido terminan con un carácter constitutivo de palabra.

\w
   coincide con cualquier carácter constitutivo de palabra. La tabla de sintaxis determina cuáles
   son estos caracteres. Ver Tablas de sintaxis.

\W
   coincide con cualquier carácter que no es un constitutivo de palabra.

\_<
   concuerda con la cadena vacía, pero sólo al comienzo de un símbolo. Un símbolo es una secuencia
   de uno o más caracteres de símbolo-componente. Un carácter de símbolo-constituyente es un
   personaje cuya sintaxis es o bien 'w' o '_'. '\_<' Se ajusta al principio de la memoria
   intermedia sólo si un carácter de símbolo-constituyente sigue.

\_>
   concuerda con la cadena vacía, pero sólo al final de un símbolo. '\_>' Coincidirá al final
   de la memoria intermedia sólo si el contenido terminan con un carácter de símbolo-componente.

\sc
   coincide con cualquier carácter cuya sintaxis es c. Aquí c es un carácter que designa una clase
   de sintaxis particular: por lo tanto, 'w' para el componente de la palabra, '-' o '' para los
   espacios en blanco '.' para puntuacion ordinaria, etc.

\Sc
   coincide con cualquier carácter cuya sintaxis no es c.

\cc
   coincide con cualquier carácter que pertenece a la categoría c. Por ejemplo, '\ cc' coincide con
   los caracteres chinos '\cg' de los caracteres griegos, etc. Para la descripción de las categorías
   conocidas, se escribe M-x describe-categories <RET>.

\Cc
   coincide con cualquier carácter que no pertenece a la categoría c.

Las construcciones que se refieren a las palabras y la sintaxis son controlados por el ajuste de la tabla de sintaxis.

28 Ejemplo de expresión regular

He aquí un ejemplo de una regexp: similar a la regexp que Emacs utiliza, por defecto, para reconocer el final de una oración, sin incluir el siguiente espacio (es decir, la variable sentence-end-base):

[.?!][]\"')}]*

Contiene dos partes sucesivas: un período de coincidencia del juego de caracteres, '?', o '! y un juego de caracteres que coincide con paréntesis, comillas o paréntesis, repetidos cero o más veces.

29 Búsqueda y mayúsculas/minúsculas

Las búsquedas en Emacs normalmente ignoran las mayúsculas/minúsculas del texto que de está buscando. Por lo tanto, si especifica la búsqueda de 'foo', entonces 'Foo' y 'foo' también coinciden. Regexps, y en particular los juegos de caracteres, se comportan de la misma manera: '[ab]'' coincide con `a' o `A' o `b' o `B''.

Una letra mayúscula en cualquier parte de la cadena de búsqueda incremental hace que la búsqueda sea sensible a mayúsculas y minúsculas. Por lo tanto, la búsqueda de `Foo' no encuentra `foO' o `foO'. Esto se aplica tanto a la búsqueda de expresiones regulares como a la búsqueda de cadenas. El efecto cesa si se borra la letra mayúscula de la cadena de búsqueda.

Escribir M-c dentro de una búsqueda incremental cambia la sensibilidad de mayúsculas y minúsculas de esa búsqueda. El efecto no se extiende más allá de la búsqueda incremental actual hasta la siguiente, pero anula el efecto de añadir o eliminar una letra mayúscula en la búsqueda actual.

Si establece la búsqueda variable de case-fold-search a nil, entonces todas las letras deben coincidir exactamente, incluyendo mayúsculas y minúsculas. Esta es una variable por búfer; alterar la variable normalmente afecta sólo al búfer actual, a menos que cambie su valor por defecto. Ver Locales. Esta variable se aplica también a las búsquedas no incrementales, incluyendo las realizadas por los comandos de reemplazo (ver Reemplazar) y los comandos de comparación del historial del minibuffer (ver Historial del Minibuffer).

Varias variables relacionadas controlan la sensibilidad a las mayúsculas y minúsculas de la búsqueda y la correspondencia de comandos o actividades específicas. Por ejemplo, la búsqueda de tags-case-fold-search controla la sensibilidad de mayúsculas y minúsculas para la etiqueta find-tag. Para encontrar estas variables, haga M-x apropos-variable <RET> case-fold-search <RET>.

30 Comandos de reemplazo

Emacs proporciona varios comandos para realizar operaciones de búsqueda y sustitución. Además del simple comando M-x replace-string, existe M-% (query-replace), que presenta cada ocurrencia del patrón y le pregunta si debe reemplazarlo.

Los comandos de reemplazo normalmente funcionan en el texto desde el punto hasta el final del búfer. Cuando la región está activa, operan en su lugar (ver Marca). Los comandos de sustitución básicos sustituyen una cadena de búsqueda (o regexp) por una cadena de sustitución. Es posible realizar varios reemplazos en paralelo, usando el comando expand-region-abbrevs (ver Expansión de abreviaturas).

A diferencia de la búsqueda incremental, los comandos de reemplazo no utilizan la comparación de espacios laxos (ver Búsqueda especial) de forma predeterminada. Para permitir la correspondencia de espacios laxos para el reemplazo, cambie la variable replace-lax-whitespace a t. (Esto sólo afecta a la forma en que Emacs encuentra el texto a reemplazar, no el texto de reemplazo).

Reemplazo incondicional: Reemplazar todas las coincidencias de una cadena.
Regexp Reemplazar:       Reemplazar todas las coincidencias de un regexp.
Reemplazo y Caso:        Cómo los reemplazos preservan el caso de las cartas.
Reemplazar consulta:     Cómo utilizar la consulta.

30.1 reemplazo incondicional

<b>M-x replace-string <RET> string <RET> newstring <RET>
   Reemplazar todas las apariciones de string con newstring.

Para reemplazar cada instancia de 'foo' después de un punto con 'bar', use el comando M-x replacee-string con los dos argumentos 'foo' y `bar'. La sustitución sólo ocurre en el texto después de cada punto, por lo que si desea cubrir todo el búfer debe ir primero al principio. Todas las ocurrencias hasta el final del búfer son reemplazadas; para limitar el reemplazo a una parte del búfer, active la región alrededor de esa parte. Cuando la región está activa, el reemplazo se limita a la región (ver Marca).

Cuando la cadena de reemplazo sale, deja el punto de la última ocurrencia reemplazada. Añade la posición anterior del punto (donde se emitió el comando de reemplazo de cadena) al anillo de marca, sin activar la marca; usa C-u C-<SPC> para moverte hacia atrás. Ver Mark Ring.

Un argumento de prefijo restringe el reemplazo a las coincidencias que están rodeadas de límites de palabras.

Vea Replacement and Case, para detalles sobre la sensibilidad a mayúsculas y minúsculas en los comandos de reemplazo.

30.2 Sustitución de expresiones regulares

El comando M-x replace-string reemplaza las coincidencias exactas de una sola cadena. El comando similar M-x replacee-regexp reemplaza cualquier coincidencia para un patrón específico.

M-x replace-regexp <RET> regexp <RET> newstring <RET>

En replace-regexp, el newstrinbg no tiene que ser constante: se puede hacer referencia a la totalidad o parte de lo que se corresponde con la expresión regular. '\&' En newstring significa que se sustituye todo el caracter. '\d' en la newstring, en la que d es un dígito, es sinónimo de igualar la agrupación entre paréntesis DTH en expresiones regulares. (Esto se llama una "referencia hacia atrás".) '\#' Se refiere al número de reemplazos ya realizados en este sistema, como un número decimal. En la primera sustitución, '\#' es sinónimo de '0'; en el segundo, de '1'; y así. Por ejemplo,

M-x replace-regexp <RET> c[ad]+r <RET> \&-safe <RET>

sustituye (por ejemplo) "cadr" con cadr-safe y cddr 'con' "cddr-safe".

M-x replace-regexp <RET> \(c[ad]+r\)-safe <RET> \1 <RET>

realiza la transformación inversa. Para incluir un '\' en el texto a reemplazar, debe introducir '\\'.

Si desea introducir a mano una parte de la cadena de sustitución cada vez, utilice "\?" en la cadena de sustitución. Cada reemplazo le pedirá que edite la cadena de reemplazo en el minibuffer, colocando el punto donde estaba el "\?

El resto de esta subsección está destinado a tareas especializadas y requiere conocimientos de Lisp. La mayoría de los lectores pueden omitirlo.

Puede utilizar expresiones Lisp para calcular las partes del string de sustitución. Para hacer esto, escriba '\' seguido de la expresión en la cadena de reemplazo. Cada reemplazo calcula el valor de la expresión y la convierte en texto sin citar (si es una cadena, esto significa usar el contenido de la cadena), y la usa en la cadena de reemplazo en lugar de la expresión misma. Si la expresión es un símbolo, un espacio en la cadena de reemplazo después del nombre del símbolo va con el nombre del símbolo, por lo que el valor reemplaza a ambos.

Dentro de tal expresión, puedes usar algunas secuencias especiales. n puede ser de varios dígitos, y el valor de 'n' es nulo si la subexpresión n no coincide. También puede utilizar \#&' y '\#n' para referirse a esas coincidencias como números (esto es válido cuando la coincidencia o subincidencia tiene la forma de un número). Aquí también se encuentra el número de reemplazos ya completados.

Repitiendo nuestro ejemplo para intercambiar `x' y `y', así podemos hacerlo también de esta manera:

M-x replace-regexp <RET> \(x\)\|y <RET>

\,(if \1 "y" "x") <RET>

Para calcular cadenas de reemplazo para '\,', la función de formato es a menudo útil. Por ejemplo, para añadir cadenas numeradas consecutivamente como'ABC00042' a las columnas 73 a 80 (a menos que ya estén ocupadas), puede utilizar:

M-x replace-regexp <RET> ^.\{0,72\}$ <RET>

\,(format "%-72sABC%05d" \& \#) <RET>

30.3 Vuelva a colocar los comandos a sensibilidad

Si el primer argumento de un comando de reemplazo es todo en minúsculas, el comando ignora mayúsculas y minúsculas mientras busca ocurrencias para reemplazar -siempre que sea posible- la búsqueda case-fold-search es non-nil. Si case-fold-search se establece en nil, el caso es siempre significativo en todas las búsquedas.

Además, cuando el argumento newstring está en mayúsculas o en parte en minúsculas, los comandos de reemplazo intentan preservar el patrón de mayúsculas y minúsculas de cada ocurrencia. Así, el comando

M-x replace-string <RET> foo <RET> bar <RET>

reemplaza un 'foo' en minúsculas por un 'bar' en minúsculas, un 'FOO' en mayúsculas por un 'BAR', y un 'Foo' en mayúsculas por un 'Bar'. (Estas tres alternativas – en minúsculas, con mayúsculas y mayúsculas con minúsculas – son las únicas que pueden distinguir a la cadena de reemplazo).

Si se utilizan letras mayúsculas en la cadena de reemplazo, éstas permanecen en mayúsculas cada vez que se inserta el texto. Si se usan letras mayúsculas en el primer argumento, el segundo argumento siempre se sustituye exactamente como se indica, sin conversión de mayúsculas y minúsculas. De la misma manera, si la búsqueda de reemplazo de casos o de búsqueda de casos doblados se establece en cero, el reemplazo se realiza sin conversión de casos.

30.4 Reemplazar consulta

M-% string <RET> newstring <RET>
   Reemplazar algunas ocurrencias de string con newstring.

C-M-% regexp <RET> newstring <RET>
   Reemplazar algunos partidos de expresión regular con la cadena-nueva .

Si desea cambiar sólo algunas de las ocurrencias de 'foo' a 'bar', no todas, use M-% (query-replace). Este comando encuentra las ocurrencias de 'foo' una por una, muestra cada ocurrencia y le pregunta si debe reemplazarla. Aparte de la consulta, query-replace funciona igual que replace-string (ver Inconditional Replace). En particular, conserva el caso siempre que la sustitución de un caso no sea nil, como suele ser el caso (véase Sustitución y Caso). Un argumento numérico significa considerar sólo las ocurrencias que están limitadas por caracteres delimitadores de palabras.

C-M-% realiza búsqueda y reemplazo de regexp (query-replace-regexp). Funciona como replace-regexp excepto que consulta como query-replace.

Estos comandos resaltan la coincidencia actual utilizando la consulta query-replace. Resaltan otras coincidencias utilizando la búsqueda perezosa como la búsqueda incremental (ver Búsqueda Incremental). Por defecto, query-replace-regexp mostrará la cadena de sustitución sustituida para la coincidencia actual en el minibuffer. Si quieres mantener secuencias especiales '\&' y '\n' sin expandir, personaliza la variable query-replace-show-replacement.

Los caracteres que puede escribir cuando se le muestra una coincidencia para la cadena o regexp son:

<SPC>
   para reemplazar la aparición con cadena-nueva.

<DEL>
   para pasar a la siguiente instancia sin tener que reemplazar éste.

,
   (Coma) para reemplazar esta ocurrencia y mostrar el resultado. A continuación, se le pedirá para
   otro carácter de entrada para decir qué hacer a continuación. Dado que ya se ha realizado la
   sustitución, <DEL> y <SPC> son equivalentes en esta situación; tanto pasar a la siguiente
   ocurrencia.

   Puede escribir C-r en este punto (ver más abajo) para alterar el texto reemplazado. También
   puede escribir C-x u para deshacer la sustitución; Se cerrará la consulta de reemplazar , así
   que si quieres hacer más de reemplazo debe usar C-x <ESC> <ESC> <RET> para reiniciar
   (ver Repetition).

<RET>
   para salir sin hacer más reemplazos.

.
   (Punto) para reemplazar esta ocurrencia y luego salir sin tener que buscar más apariciones.

!
   para reemplazar todas las ocurrencias restantes sin preguntar de nuevo.

Y
   (Mayúscula Y) para reemplazar todas las ocurrencias restantes en todos los buffers quedan
   en sustituciones de múltiples buffers (como el comando Q 'Dired `que realiza la consulta
   reemplazar determinados archivos). Responde a esta pregunta y todas las preguntas posteriores
   en la serie con "sí", sin más intervención del usuario.

N
   (En mayúsculas N) para pasar al siguiente buffer en sustituciones múltiples buffers sin
   reemplazar las ocurrencias restantes en el búfer. Responde a esta pregunta "no", renuncia a
   las preguntas para el búfer en uso, y continúa al siguiente buffer en la secuencia.

^
   para volver a la posición de la aparición anterior (o lo que solía ser una ocurrencia),
   en caso de que lo haya cambiado por error o desea examinar nuevamente.

C-r
   para entrar en un nivel de edición recursiva, en caso de la ocurrencia necesita ser editado
   en lugar de simplemente sustituido por cadena-nueva. Cuando haya terminado, salga del nivel
   de edición recursiva con C-M-c para pasar a la siguiente aparición. Ver edición recursiva.

C-w
   eliminar la ocurrencia, y luego entrar en un nivel recursivo de edición como en C-r.
   Utilice la edición recursiva para insertar texto para reemplazar la aparición borrado de cadena.
   Cuando haya terminado, salga del nivel de edición recursiva con C-M-c para pasar a la
   siguiente aparición.

e
   para editar la cadena de sustitución en el minibúfer. Al salir de la minibuffer tecleando <RET>
   el contenido del minibúfer reemplazan la ocurrencia actual del patrón. También se convierten
   en la nueva cadena de reemplazo para que se produzcan hechos adicionales.

C-l
   para volver a mostrar la pantalla. A continuación, debe escribir otro carácter para especificar
   qué hacer con esta ocurrencia.

C-h
   para mostrar un mensaje que resume estas opciones. A continuación, debe escribir otro carácter
   para especificar qué hacer con esta ocurrencia.

Algunos otros caracteres son alias para los que aparecen arriba: y, n y q son equivalentes a <SPC>, <DEL> y <RET>.

Aparte de esto, cualquier otro carácter sale de query-replace y uelve a leer como parte de una secuencia de claves. Por lo tanto, si escribe C-k, sale de query-replace y luego mata al final de la línea.

Para reiniciar un query-replace una vez que se ha salido, utilice C-x <ESC> <ESC>, que repite query-replace porque usó el minibuffer para leer sus argumentos. Véase C-x <ESC> <ESC>.

Vea Operando en Archivos, para el comando Dired Q que realiza la sustitución de consultas en los archivos seleccionados. Consulte también Transformación de nombres de archivo, para ver los comandos Dired para renombrar, copiar o enlazar archivos mediante la sustitución de las coincidencias de regexp en los nombres de archivo.

31 Otros comandos de búsqueda y bucle

Aquí hay algunos otros comandos que encuentran coincidencias para una expresión regular. Todos ignoran mayúsculas y minúsculas si el patrón no contiene letras mayúsculas y la búsqueda case-fold-search no es nula. Aparte de occur y sus variantes, todas operan en el texto desde el punto hasta el final de la memoria intermedia, o en la región si está activa.

M-x multi-isearch-buffers
   Pregunte por uno o más nombres de búfer, terminando con <RET>; luego, inicie una búsqueda
   incremental de búfer múltiple en esos búferes. (Si la búsqueda falla en un búfer, el siguiente
   C-s intenta buscar el siguiente búfer especificado, y así sucesivamente.) Con un argumento
   de prefijo, pida un regexp e inicie una búsqueda incremental de múltiples búferes en los búferes
   que coincidan con ese regexp.

M-x multi-isearch-buffers-regexp
   Este comando es igual que los búferes de investigación múltiple, excepto que realiza una búsqueda
   regexp incremental.

M-x occur
   Pedirá una expresión regular, y mostrar una lista que muestra cada línea en el búfer que contiene
   a la altura de la misma. Para limitar la búsqueda a una parte de la memoria intermedia,
   estrecha a esa parte (ver estrechamiento ). Un argumento numérico n especifica que n líneas de
   contexto se van a mostrar antes y después de cada línea coincidente.

   En el buffer *occur*, puede hacer clic en cada entrada, o mover el punto allí y se presiona
   <RET>, para visitar a la posición correspondiente en el búfer que se realizó un registro o y
   C-o visualizar ventana. C-o no selecciona eso. Alternativamente, se puede utilizar el C-x `
   (next-error) para visitar las ocurrencias de uno en uno (ver Modo de compilación ).

   Al escribir e en los interruptores *occur* en el buffer se producen en el modo de edición,
   en la que las modificaciones realizadas en las entradas también se aplican al texto en el
   búfer de origen. Escriba C-c C-c para volver al modo de producirse.

   El comando M-x list-matching-lines es un sinónimo de M-x occur.

M-s O
   Ejecutar occur usando la cadena de búsqueda de la última cadena de búsqueda incremental.
   También puede ejecutar M-s o cuando una búsqueda incremental está activa; Este utiliza
   la cadena de búsqueda actual.

M-x multi-occur
   Este comando solo es como ocurrirá, excepto que es capaz de buscar a través de múltiples
   buffers. Se le pide que especifique los nombres de almacenamiento intermedio de uno en uno.

M-x multi-occur-in-matching-buffers
   Este comando es similar a la multi-occur, excepto que los buffers para buscar son especificados
   por una expresión regular que coincide con los nombres de archivo visitados. Con un argumento
   prefijo, se utiliza la expresión regular para que coincida con nombres de almacenamiento
   intermedio en su lugar.

M-x how-many
   Pedirá una expresión regular, e imprimir el número de coincidencias para ello en la memoria
   intermedia después del punto. Si la región es activa, esta opera en la región en su lugar.

M-x flush-lines
   Pedirá una expresión regular, y borrar cada línea que contiene un parecido para él, que
   opera en el texto después del punto. Este comando elimina la línea actual si contiene un
   parecido que comienza después del punto. Si la región es activa, que opera en la región
   en su lugar; si una línea parcialmente contenida en la región contiene un partido totalmente
   contenida en la región, se elimina.

   Si un parecido se divide en líneas, flush-lines borra todas esas líneas. Elimina las líneas
   antes de empezar a buscar la siguiente coincidencia; por lo tanto, no tiene en cuenta un
   parecido y comienza en la misma línea a la que finalizó otro parecido.

M-x keep-lines
   Pedirá una expresión regular, y borrar cada línea que no contenga un parecido con él, que
   opera en el texto después del punto. Si el punto no se encuentra al principio de una línea,
   este comando siempre mantiene la línea actual. Si la región está activo, el comando opera
   en la región en su lugar; nunca se borra líneas que sólo están contenidos parcialmente en
   la región (un salto de línea que termina una línea cuenta como parte de esa línea).

   Si un parecido se divide en líneas, este comando mantiene todas esas líneas.

32 Comandos para la fijación de errores tipográficos

En este capítulo se describen los comandos que son útiles cuando se captura un error durante la edición. El más fundamental de estos comandos es el comando deshacer C-/ (también obligado a C-x u y C-_). Esto deshace un solo comando, o una parte de un comando (como en el caso de query-replace) varias inserciones o caracteres consecutivos. Repeticiones consecutivas de C-/ deshace los cambios cada vez más antiguas, de vuelta hasta el límite de la información de deshacer disponible.

Aparte de los comandos descritos aquí, puede borrar texto utilizando comandos de eliminación tales como <DEL> (delete-backward-char). Estos fueron descritos anteriormente en este manual. Ver Borrado .

undo:        Los comandos Deshacer.
Transpose:   Intercambio de dos caracteres, palabras, líneas, listas ...
Fixing case: Corrección caso de la última palabra introducida.
speling:     Aplicar corrector ortográfico para una palabra o un archivo completo.

32.1 Deshacer

El comando deshacer invierte los cambios recientes en el texto del búfer. Cada registro de búfer cambia individualmente, y el comando deshacer siempre se aplica al búfer actual. Puede deshacer todos los cambios en un búfer hasta donde llegan los registros del búfer. Normalmente, cada comando de edición realiza una entrada por separado en los registros de deshacer, pero algunos comandos como query-replace dividen sus cambios en múltiples entradas para mayor flexibilidad en el deshacer. Los comandos de inserción de caracteres consecutivos suelen agruparse en un único registro de deshacer, para que la deshacer sea menos tediosa

C-/, C-x u, C-_
   Deshacer una entrada en los registros de deshacer del búfer actual (undo).

Para empezar a deshacer, escriba C-/ (o sus alias, C-_ o C-x u). Esto deshace el cambio más reciente en el búfer, y los movimientos apuntan hacia atrás a donde estaba antes de ese cambio. Las repeticiones consecutivas de C-/ (o sus alias) deshacen cambios anteriores en el búfer actual. Si ya se han anulado todos los cambios registrados, el comando deshacer indica un error.

Cualquier comando que no sea un comando de deshacer rompe la secuencia de comandos de deshacer. A partir de ese momento, toda la secuencia de comandos de deshacer que acaba de ejecutar se coloca en el registro de deshacer, como un único conjunto de cambios. Por lo tanto, para volver a aplicar los cambios, escriba C-f o cualquier otro comando que rompa inofensivamente la secuencia de deshacer; luego escriba C-/ para deshacer el comando deshacer.

Alternativamente, si desea reanudar el deshacer, sin rehacer los comandos de deshacer anteriores, use M-x undo-only. Esto es como deshacer, pero no volverá a hacer los cambios que acaba de deshacer.

Si nota que un búfer ha sido modificado accidentalmente, la forma más fácil de recuperarlo es escribir C-/ repetidamente hasta que las estrellas desaparezcan del frente de la línea de modo (ver Línea de modo). Cuando un comando de deshacer hace que las estrellas desaparezcan de la línea de modo, significa que el contenido del búfer es el mismo que cuando el archivo fue leído o guardado por última vez. Si no recuerda si ha cambiado la memoria intermedia deliberadamente, escriba C-/ una vez. Cuando veas el último cambio que hiciste sin hacer, verás si fue un cambio intencional. Si fue un accidente, déjalo sin hacer. Si fue deliberado, vuelva a hacer el cambio como se describió anteriormente.

Cuando hay una región activa, cualquier uso de deshacer realiza una deshacer selectiva: deshace el cambio más reciente dentro de la región, en lugar de todo el búfer. Sin embargo, cuando el modo Marca de transitorios está desactivado (ver Marca de transitorios desactivada), C-/ siempre funciona en todo el búfer, ignorando la región. En este caso, puede deshacer selectivamente proporcionando un argumento de prefijo al comando undo: C-u C-/. Para deshacer más cambios en la misma región, repita el comando deshacer (no es necesario un argumento de prefijo).

Algunos búferes especializados no deshacen registros. Los búferes cuyos nombres comienzan con espacios nunca lo hacen; estos búferes son utilizados internamente por Emacs para contener texto que los usuarios normalmente no ven ni editan.

Cuando la información de deshacer de un búfer se vuelve demasiado grande, Emacs descarta los registros más antiguos de vez en cuando (durante la recolección de basura). Puede especificar cuánta información de deshacer debe guardarse estableciendo las variables undo-limit, undo-strong-limit y undo-outer-limit. Sus valores se expresan en bytes.

La variable undo-limit establece un límite suave: Emacs mantiene los datos de deshacer para que suficientes comandos alcancen este tamaño, y quizás lo superen, pero no guarda datos para ningún otro comando anterior. Su valor por defecto es 80000. La variable undo-strong-limit establece un límite más estricto: cualquier comando anterior (aunque no el más reciente) que empuje el tamaño más allá de esta cantidad es olvidado. El valor por defecto de undo-strong-limit es 120000. Independientemente de los valores de esas variables, el cambio más reciente nunca se descarta a menos que sea mayor que el límite *undo-outer-limit (normalmente 12.000.000). En ese momento, Emacs descarta los datos deshacer y le advierte de ello. Esta es la única situación en la que no se puede deshacer el último comando. Si esto sucede, puede aumentar el valor de deshacer el límite externo para que sea aún menos probable que suceda en el futuro. Pero si no esperaba que el comando creara datos tan grandes para deshacer, entonces es probable que se trate de un error.

32.2 Texto de transposición

C-t
   Transponer dos caracteres (transpose-chars).

M-t
   Transponer dos palabras (transpose-words).

C-M-t
   Transpone dos expresiones equilibradas (transpose-sexps).

C-x C-t
   Transponer dos líneas (transpose-lines).

El error común de transposición de dos caracteres puede corregirse, cuando están adyacentes, con el comando C-t (transpose-chars). Normalmente, C-t transpone los dos caracteres a cada lado del punto. Cuando se da al final de una línea, en lugar de transponer el último carácter de la línea con la nueva línea, lo que sería inútil, C-t transpone los dos últimos caracteres de la línea. Por lo tanto, si detecta el error de transposición de inmediato, puede solucionarlo con sólo una C-t. Si no lo atrapa tan rápido, debe mover el cursor hacia atrás entre los dos caracteres transpuestos antes de escribir C-t. Si ha transpuesto un espacio con el último carácter de la palabra antes que él, los comandos de movimiento de la palabra son una buena forma de llegar a él. De lo contrario, una búsqueda inversa (C-r) es a menudo la mejor manera. Véase Búsqueda.

M-t transpone la palabra antes del punto con la palabra después del punto (transpose-words). Se mueve el punto hacia adelante sobre una palabra, arrastrando la palabra que precede o que contiene el punto hacia adelante también. Los caracteres de puntuación entre las palabras no se mueven. Por ejemplo,'FOO, BAR' se convierte en 'BAR, FOO' en lugar de 'BAR FOO,'.

C-M-t (transpose-sexps) es un comando similar para transponer dos expresiones (ver Expresiones), y C-x C-t (transpose-lines) intercambia líneas. Funcionan como M-t excepto en lo que respecta a las unidades de texto que transponen.

Un argumento numérico para un comando transponer sirve como un conteo de repeticiones: le dice al comando transponer que mueva el carácter (palabra, expresión, línea) antes o conteniendo un punto a través de otros caracteres (palabras, expresiones, líneas). Por ejemplo, C-u 3 C-t mueve el carácter antes del punto hacia adelante a través de otros tres caracteres. Cambiaría 'f-!-oobar' por 'oobf-!-ar'. Esto equivale a repetir C-t tres veces. C-u - 4 M-t mueve la palabra antes de apuntar hacia atrás a través de cuatro palabras. C-u - C-M-t cancelaría el efecto de C-M-t simple.

A un argumento numérico de cero se le asigna un significado especial (porque de lo contrario un comando con un recuento de repetición de cero no haría nada): transponer el carácter (palabra, expresión, línea) terminando punto tras punto con el que termina después de la marca.

32.3 Conversión mayusculas/minusculas

M-- M-l
   Convierte la última palabra en minúsculas. Nota: Meta-- es Meta-minus.

M-- M-u
   Convierte la última palabra en mayúsculas.

M-- M-c
   Convierte la última palabra en minúsculas con mayúsculas.

Un error muy común es escribir palabras de la forma equivocada. Por ello, los comandos de conversión de mayusculas/minúsculas M-l, M-u y M-c tienen una característica especial cuando se usan con un argumento negativo: no mueven el cursor. Tan pronto como veas que has escrito mal la última palabra, puedes convertirla modificarla y seguir escribiendo. Ver Case.

32.4 Verificación y corrección de ortografía

En esta sección se describen los comandos para comprobar la ortografía de una palabra o de una parte del buffer. Estos comandos sólo funcionan si se ha instalado el programa corrector ortográfico Aspell, Ispell o Hunspell. Estos programas no son parte de Emacs, pero uno de ellos se instala normalmente en GNU/Linux y otros sistemas operativos libres. Ver Aspell.

M-$
   Verificar y corregir la ortografía de la palabra en el punto (ispell-word). Si la región es
   activa, que lo haga por todas las palabras en la región en su lugar.

M-x ispell
   Verificar y corregir la ortografía de todas las palabras en la memoria intermedia. Si la región
   es activa, que lo haga por todas las palabras en la región en su lugar.

M-x ispell-buffer
   Comprobar la ortografía correcta en la memoria intermedia.

M-x ispell-región
   Comprobar la ortografía correcta en la región.

M-x ispell-message
   Comprobar la ortografía correcta en un borrador de mensaje electrónico, excluido el material
   citado.

M-x ispell-change-dictionary <RET> dict <RET>
   Reiniciar el proceso de Aspell/ispell/Hunspell, utilizando dict como el diccionario.

M-x ispell-kill-ispell
   Matar el sub-proceso Aspell/ispell/Hunspell.

M-<TAB>, <ESC> <TAB>
   Completar la palabra antes del punto en base al diccionario ortográfico (ispell-complete-word).

M-x flyspell-mode
   Activar flyspell-mode, que resalta todas las palabras mal escritas.

M-x flyspell-prog-mode
   Activar flyspell-mode para comentarios y cadenas únicas.

Para comprobar la ortografía de la palabra alrededor o antes del punto, y opcionalmente corregirla también, escriba M-$ (ispell-word). Si una región está activa, M-$ comprueba la ortografía de todas las palabras de la región. Ver Mark. (Cuando el Transient Mark mode está desactivado, M-$ siempre actúa sobre la palabra alrededor o antes del punto, ignorando la región; consulte Marca de transitorios desactivada).

Del mismo modo, el comando M-x ispell realiza un corrector ortográfico en la región si está activa, o en todo el búfer en caso contrario. Los comandos M-x ispell-buffer y M-x ispell-region realizan explícitamente un corrector ortográfico en todo el búfer o en la región respectivamente. Para comprobar la ortografía de un mensaje de correo electrónico que está escribiendo, utilice el comando M-x ispell-message; ese comando comprueba todo el búfer, excepto el material que está indentado o que parece ser citado de otros mensajes. Vea Envío de correo.

Cuando uno de estos comandos encuentra lo que parece ser una palabra incorrecta, le pregunta qué hacer. Por lo general, muestra una lista de palabras numeradas de "cuasi accidentes" que están cerca de la palabra incorrecta. A continuación, debe escribir una respuesta de un solo carácter. Aquí están las respuestas válidas:

digit
   Sustituir la palabra, sólo por esta vez, con uno de los que se muestran a punto de suceder.
   Cada tiro errado aparece con un dígito; escriba ese dígito para seleccionarlo.

<SPC>
   Omita esta palabra, seguir considerándolo incorrecto, pero no la cambie aquí.

r new <RET>
   Sustituir la palabra, sólo por esta vez, con la nueva . (La cadena de reemplazo se vuelve a
   examinar para más errores de ortografía.)

R new <RET>
   Sustituir la palabra con la nueva , y hacer una consulta de reemplazar para que pueda
   reemplazarlo en otra parte de la memoria intermedia si lo desea. (Los reemplazos serán
   analizados de nuevo para más errores de ortografía.)

a
   Aceptar la palabra incorrecta, lo tratan como correcta, pero sólo en esta sesión de edición.

A
   Aceptar la palabra incorrecta, lo tratan como correcta, pero sólo en esta sesión de edición
   y de este buffer.

i
   Inserte esta palabra en su diccionario privado para que Aspell o Ispell o Hunspell lo
   considerarán correcta a partir de ahora, incluso en sesiones futuras.

m
   Al igual que i , pero se puede también especificar la información de finalización en el
   diccionario.

u
   Inserte la versión minúscula de esta palabra en su diccionario privado.

I word <RET>
   Busque en el diccionario de palabras que coincidan con word. Estas palabras se convierten
   en la nueva lista de "cuasi accidentes"; puede seleccionar uno de ellos como el reemplazo
   escribiendo un dígito. Puede usar '*' en la palabra como un comodín.

C-g, X
   Dejar la corrección ortográfica interactiva, dejando el punto en la palabra que se está
   comprobando. Puede reiniciar la comprobación de nuevo después con C-u M-$.

x
   Dejar la corrección ortográfica interactiva y mover el punto de vuelta a donde estaba cuando
   empezó la corrección ortográfica.

q
   Dejar la corrección ortográfica interactiva y matar el sub-proceso de corrección ortográfica.

?
   Mostrar la lista de opciones.

En el modo Texto y modos relacionados, M-<TAB> (ispell-complete-word) realiza la finalización en búfer basada en la corrección ortográfica. Inserte el principio de una palabra, y luego escriba M-<TAB>; esto muestra una lista de terminaciones. (Si su gestor de ventanas intercepta M-<TAB>, escriba <ESC> <TAB> o C-M-i.) Cada finalización aparece con un dígito o carácter; escriba ese dígito o carácter para elegirlo.

Una vez iniciado, el subproceso Aspell o Ispell o Hunspell continúa ejecutándose, a la espera de algo que hacer, para que los comandos posteriores de corrección ortográfica se completen más rápidamente. Si desea deshacerse del proceso, utilice M-x ispell-kill-ispell. Esto no suele ser necesario, ya que el proceso no utiliza tiempo de procesador, excepto cuando se realiza una corrección ortográfica.

Ispell, Aspell y Hunspell buscan la ortografía en dos diccionarios: el diccionario estándar y su diccionario personal. El diccionario estándar es especificado por la variable ispell-local-dictionary o, si es nulo, por la variable ispell-dictionary. Si ambos son nulos, se utiliza el diccionario predeterminado del programa de ortografía. El comando M-x ispell-change-dictionary establece el diccionario estándar para el buffer y luego reinicia el subproceso, de modo que utilizará un diccionario estándar diferente. Su diccionario personal es especificado por la variable ispell-personal-dictionary. Si esto es nulo, el programa de ortografía busca un diccionario personal en una ubicación predeterminada.

Se utiliza un diccionario separado para completar las palabras. La variable ispell-complete-word-dict especifica el nombre de archivo de este diccionario. El diccionario de finalización debe ser diferente porque no puede usar información de raíz y afijo. Para algunos idiomas, existe un diccionario de corrección ortográfica, pero no un diccionario de compleción de palabras.

El modo Flyspell es un modo menor que realiza una revisión ortográfica automática mientras escribe. Cuando encuentra una palabra que no reconoce, la resalta. Escriba M-x flyspell-mode para alternar el modo Flyspell en el búfer actual. Para habilitar el modo Flyspell en todos los búferes de modo texto, añada flyspell-mode a text-mode-hook. Ver hooks.

Cuando el modo Flyspell resalta una palabra como mal escrita, puede hacer clic en ella con el ratón-2 para mostrar un menú de posibles correcciones y acciones. También puede corregir la palabra editándola manualmente de la forma que desee.

El modo Flyspell Prog funciona igual que el modo Flyspell normal, excepto que sólo comprueba las palabras de los comentarios y las constantes de las cadenas. Esta función es útil para editar programas. Escriba M-x flyspell-prog-mode para habilitar o deshabilitar este modo en el búfer actual. Para habilitar este modo en todos los búferes del modo de programación, añada flyspell-prog-mode al prog-mode-hook (ver hooks).

33 Las macros de teclado

En este capítulo describimos cómo grabar una secuencia de comandos de edición para que pueda repetirla convenientemente más tarde.

Una macro de teclado es un comando definido por un usuario de Emacs para representar otra secuencia de teclas. Por ejemplo, si descubre que está a punto de escribir C-n M-d C-d cuarenta veces, puede acelerar su trabajo definiendo una macro de teclado para hacer C-n M-d C-d, y luego ejecutándola 39 veces más.

Una macro de teclado se define ejecutando y grabando los comandos que constituyen su definición. Dicho de otra manera, al definir una macro de teclado, la definición se está ejecutando por primera vez. De esta manera, puede ver los efectos de sus comandos, para que no tenga que entenderlos en su cabeza. Cuando se cierra la definición, la macro de teclado se define y también se ha ejecutado una vez. A continuación, puede volver a hacerlo todo de nuevo invocando la macro.

Las macros de teclado se diferencian de los comandos ordinarios de Emacs en que están escritas en el lenguaje de comandos de Emacs en lugar de en Lisp. Esto hace que sea más fácil para el novato escribirlas, y las hace más convenientes como hacks temporales. Sin embargo, el lenguaje de comandos de Emacs no es lo suficientemente potente como para ser útil para escribir cualquier cosa inteligente o general. Para estas cosas, se debe usar Lisp.

Macro de teclado básico:       Definición y ejecución de macros de teclado.
Anillo de macros de teclado:   Donde se guardan las macros de teclado anteriores.
Teclado Macro Contador:        Insertar números incrementales en las macros.
Consulta de macros de teclado: Que las macros de teclado hagan cosas diferentes cada vez.
Guardar macro de teclado:      Dar nombres a las macros de teclado; guardarlas en archivos.
Editar macro de teclado:       Edición de macros de teclado.
Edición por pasos:             Ejecución y edición interactiva de una macro de teclado.

33.1 macro básica

<F3>
   Comienza definiendo una macro de teclado (kmacro-start-macro-or-insert-counter).

<F4>
   Si se está definiendo una macro de teclado, poner fin a la definición; de lo contrario,
   ejecutar la macro de teclado más reciente (kmacro-end-or-call-macro).

C-u <F3>
   Volver a ejecutar la última macro de teclado, tiene que poner llaves a su definición.

C-u C-u <F3>
   Anexar claves para la última macro de teclado sin volver a ejecutarlo.

C-x C-k r
   Ejecutar la última macro de teclado en cada línea que comienza en la región
   (apply-macro-to-region-lines).

Para empezar a definir una macro de teclado, pulse <F3>. A partir de entonces, sus claves se continúan ejecutando y también se convierten en parte de la definición de la macro. 'Def' aparece en la línea de modo que le recuerda lo que está pasando. Cuando haya terminado, el pulse <F4> (kmacro-end-or-call-macro) para terminar el proceso. Por ejemplo,

<F3> M-f foo <F4>

define una macro para avanzar una palabra y luego insertar 'foo'. Tenga en cuenta que <F3> y <F4> no se convierten en parte de la macro.

Después de definir la macro, se le puede llamar con <F4> . Para el ejemplo anterior, esto tiene el mismo efecto que escribir M-f foo de nuevo. (Tenga en cuenta las dos funciones de la tecla <F4>: termina la macro si se encuentra en el proceso de definición de uno, o llama a la última macro de otro modo.) También se puede suministrar <F4> con un argumento prefijo numérico 'n', lo que significa invocar la macro 'n' veces. Un argumento de cero repite la macro de forma indefinida, hasta que se obtiene un error o tipo C-g (o, en MS-DOS, C-<Breakr>).

El ejemplo anterior demuestra un truco muy útil que se puede emplear con macros de teclado: si desea repetir una operación en lugares espaciados regularmente en el texto, incluir un comando de movimiento como parte de la macro. En este caso, la repetición de la macro inserta la cadena 'foo' después de cada palabra sucesiva.

Después de terminar la definición de una macro de teclado, puede añadir más pulsaciones de teclas a su definición escribiendo C-u <F3> . Esto es equivalente a llamar <F3> seguido de toda la definición hasta el momento. Como consecuencia de ello, se vuelve a ejecutar la macro como se ha definido previamente. Si cambia la variable kmacro-execute-before-append a nil, la macro existente no se vuelve a ejecutar antes de añadir a la misma (el valor predeterminado es t). También puede añadir al final de la definición de la última macro de teclado sin volver a ejecutarlo tecleando C-u C-u <F3>.

Cuando un comando lee algo en el minibúfer, la entrada del minibuffer se convierte en parte de la macro junto con el comando. Así que cuando vuelva a reproducir la macro, el comando obtiene el mismo argumento que cuando entró en la macro. Por ejemplo,

<F3> C-a C-k C-x b foo <RET> C-y C-x b <RET> <F4>

define una macro que mata a la línea actual, pega 'foo' en el buffer actual y a continuación, vuelve al búfer original.

La mayoría de los comandos del teclado funcionan como de costumbre en una definición de macro del teclado, con algunas excepciones. Al escribir C-g (keyboard-quit) se abandona la definición de macro del teclado. Escribir C-M-c (exit-recursive-edit) puede ser poco fiable: funciona como es de esperar si se sale de una edición recursiva que se inició dentro de la macro, pero si se sale de una edición recursiva que se inició antes de invocar la macro del teclado, también necesariamente sale de la macro del teclado. Los eventos del ratón tampoco son fiables, aunque puede utilizarlos en una macro del teclado: cuando la macro reproduce el evento del ratón, utiliza la posición original del ratón de ese evento, la posición que tenía el ratón mientras definía la macro. El efecto de esto puede ser difícil de predecir.

El comando C-x C-k r (apply-macro-to-region-lines) repite la última macro de teclado definida en cada línea que comienza en la región. Lo hace línea por línea, moviendo el punto al principio de la línea y ejecutando la macro.

Además de los comandos <F3> y <F4> descritos anteriormente, Emacs también admite un conjunto más antiguo de combinaciones de teclas para definir y ejecutar macros de teclado. Para iniciar una definición de macro, escriba C-x (kmacro-start-macro); al igual que con <F3>, un argumento prefijo añade esta definición a la última macro del teclado. Para finalizar una definición de macro, escriba C-x ) (kmacro-end-macro). Para ejecutar la macro más reciente, escriba C-x e (kmacro-end-and-call-macro). Si introduce C-x e mientras define una macroinstrucción, ésta se cancela y se ejecuta inmediatamente. Inmediatamente después de escribir C-x e, puede escribir <e> repetidamente para repetir inmediatamente la macro una o más veces. También puede dar a C-x e un argumento de repetición, igual que <F4>.

A C-x ) se le puede dar una cuenta de repetición como argumento. Esto significa repetir la macroinstrucción justo después de definirla. La propia definición de macroinstrucción cuenta como la primera repetición, ya que se ejecuta tal como se define, de modo que C-u 4 C-x ) ejecuta la macroinstrucción inmediatamente 3 veces más.

33.2 El anillo macro de teclado

Todas las macros de teclado definidas se registran en el anillo de macros de teclado. Sólo hay un anillo de macros de teclado, compartido por todos los búferes.

C-x C-k C-k
   Ejecute la macro de teclado en la cabecera del anillo (kmacro-end-or-call-macro-repeat).

C-x C-k C-n
   Gira el anillo de la macro del teclado a la siguiente macro (definida anteriormente)
   (kmacro-cycle-ring-next).

C-x C-k C-p
   Gire el anillo de macro del teclado a la macro anterior (definida más tarde)
   (kmacro-cycle-ring-previous).

Todos los comandos que operan en el anillo de macros del teclado utilizan el mismo prefijo C-x C-k. La mayoría de estos comandos pueden ejecutarse y repetirse inmediatamente uno tras otro sin repetir el prefijo C-x C-k. Por ejemplo,

C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d

girará el anillo de la macro del teclado a la macro "segunda anterior", ejecutará la macro de la cabeza resultante tres veces, volverá a girar a la macro de la cabeza original, la ejecutará una vez, girará a la macro "anterior", la ejecutará y, finalmente, la eliminará del anillo de la macro.

El comando C-x C-k C-k (kmacro-end-or-call-macro-repeat) ejecuta la macro de teclado en la cabecera del anillo de macro. Puede repetir la macro inmediatamente escribiendo otra C-k, o puede girar el anillo de macro inmediatamente escribiendo C-n o C-p.

Cuando se define una macro de teclado, C-x C-k C-k se comporta como <F4> excepto que, inmediatamente después, puede utilizar la mayoría de las combinaciones de teclas de esta sección sin el prefijo C-x C-k. Por ejemplo, otro C-k volverá a ejecutar la macro.

Los comandos C-x C-k C-n (kmacro-cycle-ring-next) y C-x C-k C-p (kmacro-cycle-ring-previous) giran el anillo de macros, llevando la siguiente o anterior macro del teclado a la cabeza del anillo de macros. La definición de la nueva macro de cabecera se muestra en el área de eco. Puede continuar girando el anillo de macros inmediatamente repitiendo sólo C-n y C-p hasta que la macro deseada esté en la cabeza del anillo. Para ejecutar el nuevo macro ring head inmediatamente, sólo tiene que escribir C-k.

Tenga en cuenta que Emacs trata la cabeza del anillo de macros como la "última macro de teclado definida". Por ejemplo, <F4> ejecutará esa macro, y C-x C-k n le dará un nombre.

El número máximo de macros almacenadas en el anillo de macros del teclado está determinado por la variable personalizable kmacro-ring-max.

33.3 El contador de macro de teclado

Cada macro de teclado tiene un contador asociado, que es inicializado a 0 cuando se empieza a definir la macro. Este contador le permite insertar un número en la memoria intermedia que depende del número de veces que la macro ha sido llamado. El contador se incrementa cada vez que se inserta su valor en la memoria intermedia.

<F3>
   En una definición de macro del teclado, inserte el valor del contador de macro del teclado
   en el búfer (kmacro-start-macro-or-insertar-contador).

C-x C-k C-i
   Introduzca el valor del contador de macros del teclado en el búfer (kmacro-insertar-contador).

C-x C-k C-c
   Ajuste el contador de macros del teclado (kmacro-set-counter).

C-x C-k C-a
   Añade el prefijo arg al contador de macros del teclado (kmacro-add-counter).

C-x C-k C-f
   Especifique el formato para insertar el contador de macros del teclado (kmacro-set-format).

Al definir una macro de teclado, el comando <F3> (kmacro-start-macro-or-insertar-contador) inserta el valor actual del contador de la macro de teclado en el buffer, e incrementa el contador en 1. (Si no está definiendo una macro, <F3> comienza una definición de macro en su lugar. Ver Macro Teclado Básico.) Puede utilizar un argumento de prefijo numérico para especificar un incremento diferente. Si sólo se especifica un prefijo C-u, es lo mismo que un incremento de cero: inserta el valor del contador actual sin modificarlo.

Como ejemplo, mostremos cómo se puede utilizar el contador de macros del teclado para construir una lista numerada. Considere la siguiente secuencia de teclas:

<F3> C-a <F3> . <SPC> <F4>

Como parte de esta definición de macro de teclado, la cadena '0. ' se insertó al principio de la línea actual. Si ahora se desplaza a otro lugar del búfer y escribe <F4> para invocar la macro, la cadena '1. ' se inserta al principio de esa línea. Las invocaciones subsiguientes insertan "2.", "3.", y así sucesivamente.

El comando C-x C-k C-i (kmacro-insert-counter) hace lo mismo que <F3>, pero se puede utilizar fuera de una definición de macro del teclado. Cuando no se está definiendo o ejecutando ninguna macro de teclado, inserta e incrementa el contador de la macro en la cabecera del anillo de la macro de teclado.

El comando C-x C-k C-c (kmacro-set-counter) ajusta el contador de macros actual al valor del argumento numérico. Si lo utiliza dentro de la macro, funciona en cada repetición de la macro. Si especifica sólo C-u como prefijo, mientras ejecuta la macro, el contador se reajusta al valor que tenía al principio de la repetición actual de la macro (deshacer cualquier incremento hasta ahora en esta repetición).

El comando C-x C-k C-a (kmacro-add-counter) añade el argumento del prefijo al contador de macros actual. Con sólo C-u como argumento, repone el contador al último valor insertado por cualquier macro de teclado. (Normalmente, cuando se usa esto, la última inserción será en la misma macro y será el mismo contador.)

El comando C-x C-k C-f (kmacro-set-format) solicita el formato a utilizar al insertar el contador de macros. El formato por defecto es '%d', lo que significa insertar el número en decimales sin ningún relleno. Puede salir con el minibuffer vacío para restablecer el formato a este valor predeterminado. Puede especificar cualquier cadena de formato que acepte la función de formato y que tenga sentido con un solo argumento extra entero. No ponga la cadena de formato entre comillas dobles cuando la inserte en el minibuffer.

Si utiliza este comando mientras no se está definiendo o ejecutando ninguna macro de teclado, el nuevo formato afecta a todas las definiciones de macro posteriores. Las macros existentes siguen utilizando el formato vigente cuando se definieron. Si configura el formato mientras define una macro de teclado, esto afecta a la macro que se está definiendo a partir de ese momento, pero no afecta a las macros posteriores. La ejecución de la macro utilizará, en cada paso, el formato vigente en ese paso durante su definición. Los cambios en el formato de macro durante la ejecución de una macro, al igual que los cambios correspondientes durante su definición, no tienen ningún efecto en las macros posteriores.

El formato establecido por C-x C-k C-f no afecta a la inserción de los números almacenados en los registros.

Si utiliza un registro como contador, incrementándolo en cada repetición de la macro, se consigue lo mismo que con un contador de macros de teclado. Ver Registros de números. Para la mayoría de los propósitos, es más sencillo utilizar un contador de macros de teclado.

33.4 Ejecución de macros con variaciones

En una macro de teclado, puede crear un efecto similar a query-replace, en el sentido de que la macro le pregunta cada vez si desea hacer un cambio.

C-x q
   Cuando se alcanza este punto durante la ejecución de la macro, pide confirmación (kbd-macro-query)

Mientras define la macroinstrucción, escriba C-x q en el punto en el que desea que se produzca la consulta. Durante la definición de la macro, el C-x q no hace nada, pero cuando ejecuta la macro más tarde, el C-x q le pregunta interactivamente si desea continuar.

Las respuestas válidas cuando C-x q pregunta son:

<SPC> (o y)
   Continúe ejecutando la macro del teclado.

<DEL> (o n)
   Salte el resto de esta repetición de la macro y empiece de inmediato con la siguiente repetición

<RET> (o q)
   Salte el resto de esta repetición y cancele más repeticiones.

C-r
   Introduzca un nivel de edición recursiva, en el que puede realizar una edición que no forme parte
   de la macro. Al salir de la edición recursiva utilizando C-M-c, se le preguntará de nuevo cómo
   continuar con la macro del teclado. Si escribe un <SPC> en este momento, se ejecutará el resto
   de la definición de la macro. Depende de usted dejar el punto y el texto en un estado tal que
   el resto de la macro haga lo que quiera.

C-u C-x q, que es C-x q con un argumento numérico, realiza una función completamente diferente. Introduce una entrada de lectura de edición recursiva desde el teclado, tanto cuando se escribe durante la definición de la macro como cuando se ejecuta desde la macro. Durante la definición, la edición que se realiza dentro de la edición recursiva no pasa a formar parte de la macro. Durante la ejecución de macros, la edición recursiva le da la oportunidad de hacer alguna edición particularizada en cada repetición. Véase Recursive edit.

33.5 Nombrar y guardar macros de teclado

C-x C-k n
   Dé un nombre de comando (para la duración de la sesión de Emacs) a la macro de teclado
   definida más recientemente (kmacro-name-last-macro).

C-x C-k b
   Enlaza la macro de teclado definida más recientemente a una secuencia de teclas
   (durante la sesión) (kmacro-bind-tokey).

M-x insert-kbd-macro
   Insertar en el buffer la definición de una macro del teclado, como código Lisp.

Si desea guardar una macro de teclado para su uso posterior, puede darle un nombre utilizando C-x C-k n (kmacro-name-last-macro). Esto lee un nombre como un argumento usando el minibuffer y define ese nombre para ejecutar la última macro de teclado, en su forma actual. (Si más tarde añade a la definición de esta macro, eso no altera la definición del nombre como macro.) El nombre de la macro es un símbolo Lisp, y definiéndolo de esta manera se convierte en un nombre de comando válido para llamar con M-x o para enlazar una clave con una clave de conjunto global (ver keymaps). Si especifica un nombre que tiene una definición previa distinta de una macro de teclado, se muestra un mensaje de error y no se cambia nada.

También puede enlazar la última macro del teclado (en su forma actual) a una tecla, utilizando C-x C-k b (kmacro-bind-to-key) seguida de la secuencia de teclas que desea enlazar. Puede enlazar con cualquier secuencia de teclas en el mapa de teclas global, pero como la mayoría de las secuencias de teclas ya tienen otras enlazadas, debe seleccionar la secuencia de teclas con cuidado. Si intenta enlazar una secuencia de teclas con un enlace existente (en cualquier mapa de teclas), este comando le pide confirmación antes de reemplazar el enlace existente.

Para evitar problemas causados por la anulación de los enlaces existentes, las secuencias de teclas C-x C-k 0 a C-x C-k 9 y C-x C-k A a C-x C-k Z están reservadas para sus enlaces de macros de teclado. De hecho, para vincularse a una de estas secuencias de teclas, sólo tiene que escribir el dígito o la letra en lugar de toda la secuencia de teclas. Por ejemplo:

C-x C-k b 4

enlazará la última macro del teclado con la secuencia de teclas C-x C-k 4.

Una vez que una macro tiene un nombre de comando, puede guardar su definición en un archivo. A continuación, se puede utilizar en otra sesión de edición. Primero, visite el archivo en el que desea guardar la definición. Entonces usa este comando:

M-x insert-kbd-macro <RET> macroname <RET>

Esto inserta un código Lisp que, cuando se ejecute posteriormente, definirá la misma macro con la misma definición que tiene ahora. (No necesita entender el código Lisp para hacer esto, porque insert-kbd-macro escribe el código Lisp por usted.) A continuación, guarde el archivo. Puede cargar el archivo más tarde con load-file (véase Bibliotecas Lisp). Si el archivo en el que se guarda es el archivo de inicio ~/.emacs (consulte Archivo de inicio), la macro se definirá cada vez que ejecute Emacs.

Si le da a insert-kbd-macro un argumento numérico, hace un código Lisp adicional para registrar las claves (si las hay) que ha vinculado al macronombre, de modo que la macro será reasignada con las mismas claves cuando cargue el archivo.

33.6 Edición de una macro de teclado

C-x C-k C-e
   Editar la última macro de teclado definida (kmacro-edit-macro).

C-x C-k e name <RET>
   Editar un nombre de macro de teclado previamente definido (edit-kbd-macro).

C-x C-k l
   Edita las últimas 300 pulsaciones como una macro de teclado (kmacro-edit-lossage).

Puede editar la última macro del teclado escribiendo C-x C-k C-e o C-x C-k <RET> (kmacro-edit-macro). Esto formatea la definición de macro en una memoria intermedia e introduce un modo principal especializado para editarla. Escriba C-h m una vez en ese búfer para mostrar detalles de cómo editar la macro. Cuando haya terminado de editar, escriba C-c C-c.

Puede editar una macro de teclado con nombre o una macro vinculada a una tecla escribiendo C-x C-k e (edit-kbd-macro). Siga esto con la entrada de teclado que usaría para invocar la macro: Nombre C-x e o M-x name o alguna otra secuencia de teclas.

Puede editar las últimas 300 pulsaciones como una macro tecleando C-x C-k l (kmacro-edit-lossage).

33.7 Edición de una macro de teclado por pasos

Puede reproducir y editar interactivamente la última macro del teclado, un comando a la vez, escribiendo C-x C-k-<SPC> (kmacro-step-edit-macro). A menos que salga de la macro utilizando q o C-g, la macro editada reemplaza a la última macro del anillo de macro.

Esta función de edición de macros muestra la última macro del minibuffer junto con el primer (o siguiente) comando a ejecutar, y le solicita una acción. Puede introducir ? para obtener un resumen de sus opciones. Estas acciones están disponibles:

- "<SPC>" y "y" ejecute el comando actual, y avance al siguiente comando en la macro del teclado.

- "n", "d", y "<DEL>" omitir y eliminar el comando actual.

- "f" omite el comando actual en esta ejecución de la macro del teclado, pero no lo elimina de la
  macro.

- "<TAB>" ejecuta el comando actual, así como todos los comandos similares inmediatamente después
  del comando actual; por ejemplo, <TAB> puede utilizarse para insertar una secuencia de caracteres
  (correspondiente a una secuencia de comandos de autoinserción).

- "c" continúa la ejecución (sin más edición) hasta el final de la macro del teclado. Si la
  ejecución termina normalmente, la macro editada reemplaza a la macro original del teclado.

- "C-k" omite y elimina el resto de la macro del teclado, termina la edición por pasos y
  reemplaza la macro original del teclado por la macro editada.

- "q" y "C-g" cancela la edición por pasos de la macro del teclado; descarta cualquier
  cambio realizado en la macro del teclado.

- "i key.. C-j" lee y ejecuta una serie de secuencias de teclas (sin incluir la C-j final)
  y las inserta antes del comando actual en la macro del teclado, sin avanzar sobre el comando
  actual.

- "i key..." lee una secuencia de teclas, la ejecuta y la inserta antes del comando actual
  en la macro del teclado, sin avanzar sobre el comando actual.

- "r key... C-j" lee y ejecuta una serie de secuencias de teclas (sin incluir la última C-j)
  y reemplaza el comando actual en la macro del teclado con ellas, avanzando sobre las secuencias
  de teclas insertadas.

- "R key..." lee una secuencia de teclas, la ejecuta y reemplaza el comando actual en la macro
  del teclado por esa secuencia de teclas, avanzando sobre la secuencia de teclas insertada.

- "a key... C-j" ejecuta el comando actual, luego lee y ejecuta una serie de secuencias de teclas
  (sin incluir la C-j final), y las inserta después del comando actual en la macro del teclado;
  luego avanza sobre el comando actual y las secuencias de teclas insertadas.

- "A key... C-j" ejecuta el resto de los comandos de la macro del teclado, luego lee y ejecuta
  una serie de secuencias de teclas (sin incluir la C-j final), y las agrega al final de la
  macro del teclado; luego termina la edición por pasos y reemplaza la macro del teclado original
  por la macro editada.

34 Manejo de archivos

El sistema operativo almacena datos permanentemente en archivos con nombre, por lo que la mayor parte del texto que se edita con Emacs proviene de un archivo y se almacena finalmente en un archivo.

Para editar un archivo, debe pedirle a Emacs que lea el archivo y prepare un búfer que contenga una copia del texto del archivo. Esto se llama visitar el archivo. Los comandos de edición se aplican directamente al texto en el búfer, es decir, a la copia dentro de Emacs. Los cambios aparecen en el propio archivo sólo cuando se vuelve a guardar el búfer en el archivo.

Además de visitar y guardar archivos, Emacs puede eliminar, copiar, renombrar y agregar archivos, mantener múltiples versiones de ellos y operar en directorios de archivos.

Nombres de archivos:     Cómo escribir y editar argumentos de nombre de archivo.
De visita:               Visitar un archivo prepara a Emacs para editarlo.
Guardar:                 Guardar hace que sus cambios sean permanentes.
Revertir:                Cancela todos los cambios no guardados.
Auto revertir:           Reversión automática de los búferes que no son de archivo.
Guardar automáticamente: Auto Save protege periódicamente contra la pérdida de datos.
Alias de archivo:        Manejo de múltiples nombres para un archivo.
Directorios:             Creación, eliminación y listado de directorios de archivos.
Comparación de archivos: Encontrar dónde se diferencian dos archivos.
Modo Diff:               Modo para editar las diferencias de los archivos.
Misc File Ops:           Otras cosas que puede hacer en los archivos.
Archivos comprimidos:    Acceder a archivos comprimidos.
Archivos Históricos:     Funcionamiento en archivos de archivo de alquitrán, zip, jar, etc.
Archivos Remotos:        Acceso a los archivos de otras máquinas.
Nombres de archivos:     Citar caracteres especiales en los nombres de los archivos.
Caché de archivo:        Completar con una lista de archivos que utiliza con frecuencia.
Buscar archivos:         Funciones útiles para encontrar archivos.
Conjuntos de ficheros:   Manejo de conjuntos de archivos.

34.1 Los nombres de archivo

Muchos comandos de Emacs que operan en un archivo requieren que especifique el nombre del archivo, utilizando el minibuffer (ver Archivo de Minibuffer).

Mientras está en el minibuffer, puede utilizar los comandos habituales de finalización e historial (ver Minibuffer). Tenga en cuenta que la terminación de nombres de archivo ignora los nombres de archivo cuyas extensiones aparecen en la variable completion-ignored-extensions (ver Opciones de terminación). Tenga en cuenta también que la mayoría de los comandos usan "permissive completion with confirmation" para leer los nombres de los archivos: se le permite enviar un nombre de archivo inexistente, pero si escribe <RET> inmediatamente después de completar hasta un nombre de archivo inexistente, Emacs imprime '[Confirm]' y debe escribir un segundo <RET> para confirmar. Para obtener más detalles, consulte Finalizar salida.

Cada búfer tiene un directorio por defecto, almacenado en la variable default-directory del buffer-local. Cada vez que Emacs lee un nombre de archivo utilizando el minibuffer, normalmente inserta el directorio predeterminado en el minibuffer como contenido inicial. Puede inhibir esta inserción cambiando la variable insert-default-directory a nil (ver Fichero de Minibuffer). Independientemente de ello, Emacs siempre asume que cualquier nombre de archivo relativo es relativo al directorio predeterminado, por ejemplo, al introducir un nombre de archivo sin un directorio se especifica un archivo en el directorio predeterminado.

Cuando visita un archivo, Emacs establece el directorio predeterminado del búfer de visitas en el directorio de su archivo. Cuando se crea un nuevo búfer que no está visitando un archivo, a través de un comando como C-x b, su directorio por defecto se copia normalmente del búfer que estaba en ese momento (ver Seleccionar búfer). Puede utilizar el comando M-x pwd para ver el valor del default-directory en el buffer actual. El comando M-x cd solicita un nombre de directorio, y establece el directorio por defecto del búfer en ese directorio (haciendo esto no cambia el nombre de archivo del búfer, si lo hay).

Por ejemplo, cuando visita el archivo u/rms/gnu/gnu.tasks, el directorio por defecto es /u/rms/gnu. Si invoca un comando que lee un nombre de archivo, introduciendo sólo 'foo' en el minibuffer, con un directorio omitido, especifica el archivo u/rms/gnu/foo; si introduce '...login' especifica u/rms.login; y si introduce 'new/foo' especifica /u/rms/gnu/new/foo.

Al escribir un nombre de archivo en el minibuffer, puede utilizar un par de atajos: una barra doble se interpreta como "ignorar todo antes de la segunda barra en el par", y '~/' se interpreta como su directorio raíz. Ver Fichero Minibuffer.

El carácter '$' se utiliza para sustituir una variable de entorno por un nombre de archivo. El nombre de la variable de entorno consiste en todos los caracteres alfanuméricos después del '$'; alternativamente, puede ser encerrado entre llaves después del '$'. Por ejemplo, si ha utilizado el comando shell export FOO=rms/hacks para configurar una variable de entorno llamada FOO, entonces /u/\(FOO/test.c y /u/\){FOO}/test.c son abreviaturas de /u/rms/hacks/test.c. Si la variable de entorno no está definida, no se produce ninguna sustitución, de modo que el carácter '$' se representa a sí mismo. Tenga en cuenta que las variables de entorno afectan a Emacs sólo si se aplican antes de iniciar Emacs.

Para acceder a un archivo con '$' en su nombre, si el '$' causa la expansión, escriba '$$'. Este par se convierte en un único '$' al mismo tiempo que se realiza la sustitución de una variable por un único '$'. También puede citar el nombre completo del archivo con '/:' (consulte Nombres de archivos citados). Los nombres de archivos que empiezan con un literal '~' también deben citarse con '/:'.

Puede incluir caracteres no ASCII en los nombres de archivo. Consulte Codificación de nombre de archivo.

34.2 archivos de Visitas

C-x C-f
   Visita un archivo (find-file).

C-x C-r
   Visitar un archivo para su visualización, sin permitir cambios en él (find-file-read-only).

C-x C-v
   Visita un archivo diferente en lugar de la última visita (find-alternate-file).

C-x 4 f
   Visita un archivo, en otra ventana (find-file-other-window). No alterar lo que se visualiza
   en la ventana seleccionada.

C-x 5 f
   Visita un archivo, en un nuevo marco (find-file-other-frame). No alterar lo que se muestra
   en el cuadro seleccionado.

M-x find-file-literally
   Visita un archivo sin conversión de los contenidos.

La visita a un archivo significa leer su contenido en un búfer de Emacs para que pueda editarlos. Emacs hace un nuevo buffer para cada archivo que se visita.

Para visitar un archivo, el tipo C-x C-f (find-file) y utilizar el minibúfer para introducir el nombre del archivo deseado. Mientras que en el minibúfer, se puede abortar el comando escribiendo C-g. Ver nombres de archivo , para obtener detalles sobre la introducción de nombres de archivo en minibúferes.

Si el archivo especificado existe, pero el sistema no permite que lo leas, un mensaje de error se muestra en el área de eco. De lo contrario, se puede decir que C-x C-f ha completado con éxito por la aparición de un nuevo texto sobre la pantalla, y por el nombre del búfer se muestra en la línea de modo (ver Modo de línea. Emacs normalmente construye el nombre del búfer del nombre de archivo, omitiendo el nombre del directorio. Por ejemplo, un archivo llamado /usr/rms/emacs.tex es visitado en un búfer llamado emacs.tex. Si ya existe un buffer con ese nombre, Emacs construye un nombre exclusivo; el método normal es anexar '<2> "," <3>', y así sucesivamente, pero puede seleccionar otros métodos. Ver uniquify .

Para crear un nuevo archivo, sólo hay que visitarlo usando el mismo comando, C-x C-f. Emacs muestra (New file) en el área de eco, pero en otros aspectos se comporta como si se hubiera visitado un archivo vacío existente.

Después de visitar un archivo, los cambios que realice con los comandos de edición se realizan en el búfer de Emacs. Ellos no tienen efecto en el fichero visitado, hasta que guarde la memoria intermedia (véase saving). Si un búfer contiene cambios que no han sido guardados, se dice que el búfer está modificado. Esto implica que algunos cambios se perderán si el búfer no se guarda. La línea de modo muestra dos estrellas cerca del margen izquierdo para indicar que el búfer está modificado.

Si se visita un fichero que ya está en Emacs, *C-x C-f cambia al búfer en vez de hacer otra copia existente. Antes de hacerlo, se comprueba si el archivo ha cambiado desde su última visita o lo guardó. Si el archivo ha cambiado, Emacs se ofrece a releerlo.

Si intenta visitar un archivo de large-file-warning-threshold (el valor por defecto es 10000000, que está a unos 10 megabytes), Emacs le pide una confirmación previa. Puede contestar y para proceder con la visita del archivo. Tenga en cuenta, sin embargo, que Emacs no puede visitar los archivos que son más grandes que el tamaño del maxomo del búfer de Emacs, que está limitada por la cantidad de memoria que Emacs puede asignar y por los enteros que Emacs puede representar (ver Buffers). Si lo intenta, Emacs muestra un mensaje de error que indica que el tamaño máximo del búfer se ha superado.

Si el nombre de archivo que especifique contiene caracteres comodín, Emacs visita todos los archivos que coinciden con él. (En los sistemas de ficheros entre mayúsculas y minúsculas, Emacs coincide con los comodines sin tener en cuenta la posición de letras.) Los comodines incluyen '?', '*', Y '[…]'. Para introducir el comodín '?' en un nombre de archivo en el minibúfer, necesita escribir C-q ?. Ver nombres de archivo entre comillas , para obtener información sobre cómo visitar un archivo cuyo nombre en realidad contiene caracteres comodín. Puede desactivar la función de comodín personalizando find-file-wildcards.

Si visita el archivo incorrecto involuntariamente escribiendo su nombre incorrectamente, el tipo C-x C-v (find-alternate-file) para visitar el archivo que realmente quería. C-x C-v es similar a C-x C-f, pero mata el búfer (después de la primera oferta de guardarlo si se modifica). Cuando C-x C-v lee el nombre del archivo para visitar, inserta el nombre de archivo por defecto en la memoria intermedia, con el punto justo después de la parte del directorio; esto es conveniente si ha cometido un pequeño error en escribir el nombre.

Si "visita" un archivo que es en realidad un directorio, Emacs invoca Dired, el navegador directorio de Emacs. Ver Dired . Puede desactivar este comportamiento estableciendo la variable find-file-run-dired a nil; en ese caso, es un error tratar de visitar un directorio.

Los archivos que son en realidad colecciones de otros archivos o carpetas de archivos, son visitados en los modos especiales que invoquen un entorno de Dired como para permitir las operaciones de los miembros del archivo. Ver Archivo de archivos , para obtener más información sobre estas funciones.

Si se visita un fichero que el sistema operativo no le permitirá modificar, o que está marcado de sólo lectura, Emacs hace que el búfer de sólo lectura también, así que no vas a seguir adelante y hacer los cambios que usted tendrá problemas de guardar después. Puede hacer que el buffer se puede escribir con C-x C-q (read-only-mode). Ver Miscelánea Buffer .

Si quiere visitar un archivo como de sólo lectura con el fin de protegerse de los cambios que entra accidentalmente, visitar con el comando C-x C-r (find-file-read-only) en lugar de C-x C-f.

C-x 4 f (find-file-other-window es como C-x C-f, excepto que el buffer que contiene el archivo especificado se selecciona en otra ventana. La ventana que estaba seleccionado antes de C-x 4 f continúa mostrando el mismo buffer que ya estaba mostrando. Si se utiliza este comando cuando se visualiza sólo una ventana, esa ventana se divide en dos, con una ventana que muestra el mismo buffer que antes, y el otro que muestra el archivo recién solicitada. Ver Windows.

C-x 5 f (find-file-other-frame) es similar, pero se abre un nuevo marco o selecciona cualquier marco existente que muestra el archivo especificado. Ver Frames.

En pantallas gráficas, hay dos métodos adicionales para visitar archivos. En primer lugar, cuando Emacs está construido con un conjunto de herramientas GUI adecuada, los comandos invocados con el ratón (haciendo clic en la barra de menú o barra de herramientas) utiliza el estándar de "Selección de archivos" de la caja de herramientas de diálogo en lugar de preguntar por el nombre del archivo en el minibúfer. En las plataformas GNU/Linux y Unix, Emacs lo hace cuando construido con GTK , LessTif, y kits de herramientas Motif; en MS Windows y Mac, la versión de interfaz gráfica de usuario lo hace por defecto. Para obtener información sobre cómo personalizar esto, ver coding systems.

En segundo lugar, Emacs soporta "arrastrar y soltar": dejar caer un archivo en una ventana de Emacs ordinario visita el archivo usando esa ventana. Como excepción, soltando un archivo en una ventana que muestra un búfer Dired se mueve o se copia el archivo en el directorio que se muestra. Para más detalles, véase el de arrastrar y soltar y Dired Características.

Cada vez que se visita un fichero, Emacs analiza automáticamente su contenido para detectar qué codificación de caracteres y al final de la línea de convenio que utiliza, y los convierte a la codificación interna de Emacs y convención de fin de línea dentro de la memoria intermedia. Cuando se guarda el búfer, Emacs realiza la conversión inversa, escribir el archivo en el disco con su codificación original y la convención de fin de línea. Ver Sistemas de Codificación .

Si desea editar un archivo como una secuencia de caracteres ASCII con ninguna codificación o la conversión especial, utilice el comando M-x find-file-literally. EstO visita un archivo, como C-x C-f, pero no hace la conversión de formato, el carácter de conversión de código (ver sistemas de codificación ), o descompresión automática (ver archivos comprimidos ), y no agrega una nueva línea final debido a requerir require-final-newline (véase save). Si ya ha visitado el mismo archivo de la manera habitual (no literal), este comando se le pregunta si desea visitar literalmente en su lugar.

Dos variables especiales de hook permiten extensiones para modificar el funcionamiento de los archivos de visita. La visita a un archivo que no existe, la variable find-file-not-found-functions; contiene una lista de funciones, que son llamadas una a una (sin argumentos) hasta que una de ellas devuelve un valor no nulo. Esto no es un hook normal, y el nombre termina en ' -functions en lugar de ' -hook ' para indicar este hecho.

El éxito de visita de cualquier archivo, ya sea existente o no, las llamadas a las funciones en find-file-hook, sin argumentos. Esta variable es un hook normal. En el caso de un archivo que no existe, find-file-not-found-functions se ejecuta en primer lugar. Ver Hooks.

Hay varias maneras de especificar de forma automática el modo mayor para editar el archivo (véase la elección de los modos), y para especificar las variables locales definidas para ese archivo (ver File Variables ).

34.3 Guardar archivos

Guardar un búfer en Emacs significa volver a escribir su contenido en el archivo que se visitó en el búfer.

Guardar comandos:      Comandos para guardar archivos.
Copia de seguridad:    Cómo guarda Emacs la versión antigua de su archivo.
Personalizar Guardar:  Personalización del almacenamiento de archivos.
Protección:            Protección contra la edición simultánea de un archivo por dos usuarios.
Sombra:                Copiar archivos a "sombras" automáticamente.
Marcas de tiempo:      Emacs puede actualizar las marcas de tiempo de los archivos guardados.

34.3.1 Comandos para almacenamiento de archivos

Estos son los comandos que se relacionan con guardar y escribir archivos.

C-x C-s
   Guarda el buffer actual en su archivo (save-buffer).

C-x s
   Guardar alguno o todos los búferes en sus archivos (save-some-buffers).

M-~
   Olvidar que el buffer actual ha sido cambiado (no modificado). Con el argumento prefijo
   (C-u), marque el búfer actual como cambiado.

C-x C-w
   Guarda el búfer actual con un nombre de archivo especificado (write-file).

M-x set-visited-file-name
   Cambiar el nombre del archivo bajo el cual se guardará el búfer actual.

Cuando desee guardar el archivo y hacer permanentes sus cambios, escriba C-x C-s (save-buffer). Después de terminar de guardar, C-x C-s muestra un mensaje como este:

Wrote /u/rms/gnu/gnu.tasks

Si el búfer actual no se modifica (no se han hecho cambios en él desde que se creó el búfer o se guardó por última vez), el almacenamiento no se realiza realmente, porque no tendría ningún efecto. En su lugar, C-x C-s muestra un mensaje como este en el área de eco:

(No changes need to be saved)

Con un argumento de prefijo, C-u C-x C-s, Emacs también marca el búfer del que se realizará la copia de seguridad cuando se realice la siguiente copia de seguridad. Ver Respaldo.

El comando C-x s (save-some-buffers) ofrece la posibilidad de guardar cualquiera o todos los buffers modificados. Le pregunta qué hacer con cada búfer. Las posibles respuestas son análogas a las de query-replace:

y
   Guarde este búfer y pregunte por el resto de los búferes.

n
   No guarde este búfer, pero pregunte por el resto de los búferes.

!
   Guarde este búfer y todo lo demás sin más preguntas.

<RET>
   Terminar de guardar algunos búferes sin guardar más.

.
   Guarde este búfer y luego salga de save-some-buffers sin siquiera preguntar por otros búferes.

C-r
   Ver el búfer sobre el que se le está preguntando. Al salir del modo Ver, se vuelve a guardar
   algunos búferes, lo que hace la pregunta de nuevo.

d
   Distribuya el búfer contra su archivo correspondiente, para que pueda ver qué cambios estaría
   guardando. Esto llama al comando diff-buffer-with-file (ver Comparación de archivos).

C-h
   Muestra un mensaje de ayuda sobre estas opciones.

C-x C-c, la secuencia clave para salir de Emacs, invoca a guardar algunos búferes y por lo tanto hace las mismas preguntas.

Si ha modificado una memoria intermedia pero no desea guardar los cambios, debería tomar alguna medida para evitarlo. De lo contrario, cada vez que utilice C-x s o C-x C-c, es posible que guarde este búfer por error. Una cosa que puede hacer es escribir M-~ (not-modified), que borra la indicación de que el búfer está modificado. Si hace esto, ninguno de los comandos de guardar creerá que el búfer necesita ser guardado. (~ se usa a menudo como un símbolo matemático para 'no'; así M-~ es 'no', metaficado.) Alternativamente, puede cancelar todos los cambios realizados desde que el archivo fue visitado o guardado, volviendo a leer el texto del archivo. Esto se llama revertir. Ver Reversión. (También puede deshacer todos los cambios repitiendo el comando deshacer C-x u hasta que haya deshecho todos los cambios; pero revertir es más fácil).

M-x set-visited-file-name altera el nombre del archivo que el buffer actual está visitando. Lee el nuevo nombre del archivo usando el minibuffer. set-visited-file-name no guarda el búfer en el nuevo archivo visitado; sólo altera los registros dentro de Emacs en caso de que lo guarde más tarde. También marca el búfer como "modificado" para que C-x C-s en ese búfer se guarde.

Si desea marcar el búfer como visitando un archivo diferente y guardarlo inmediatamente, use C-x C-w (write-file). Esto es equivalente a set-visited-file-name seguido de C-x C-s, excepto que C-x C-w pide confirmación si el archivo existe. C-x C-s usado en un búfer que no está visitando un archivo tiene el mismo efecto que C-x C-w; es decir, lee un nombre de archivo, marca el búfer como visitando ese archivo, y lo guarda allí. El nombre de archivo predeterminado en un búfer que no está visitando un archivo se hace combinando el nombre del búfer con el directorio predeterminado del búfer (ver Nombres de archivo).

Si el nuevo nombre de archivo implica un modo principal, entonces C-x C-w cambia a ese modo principal, en la mayoría de los casos. El comando set-visited-file-name también lo hace. Consulte Choosing Modes.

Si Emacs está a punto de guardar un archivo y ve que la fecha de la última versión en el disco no coincide con la última vez que Emacs leyó o escribió, Emacs le avisa de este hecho, porque probablemente indica un problema causado por la edición simultánea y requiere su atención inmediata.

34.3.2 Copia de seguridad de archivos

En la mayoría de los sistemas operativos, la reescritura de un archivo destruye automáticamente todos los registros de lo que contenía el archivo. Por lo tanto, guardar un archivo de Emacs elimina el contenido antiguo del archivo, o lo haría, excepto que Emacs copia cuidadosamente el contenido antiguo a otro archivo, llamado archivo de copia de seguridad, antes de guardarlo realmente.

Emacs realiza una copia de seguridad de un archivo sólo la primera vez que se guarda desde un búfer. No importa cuántas veces guarde el archivo posteriormente, su copia de seguridad permanece inalterada. Sin embargo, si mata el búfer y luego vuelve a visitar el archivo, se creará un nuevo archivo de copia de seguridad.

Para la mayoría de los archivos, la variable make-backup-file*s determina si se deben crear archivos de copia de seguridad. En la mayoría de los sistemas operativos, su valor predeterminado es *t, de modo que Emacs escribe archivos de copia de seguridad.

Para los archivos gestionados por un sistema de control de versiones (ver Control de versiones), la variable vc-make-backup-files determina si se deben crear archivos de copia de seguridad. Por defecto, es nil, ya que los archivos de copia de seguridad son redundantes cuando se almacenan todas las versiones anteriores en un sistema de control de versiones. Ver Opciones generales de la CV.

A su elección, Emacs puede mantener una sola copia de seguridad para cada archivo o crear una serie de archivos de copia de seguridad numerados para cada archivo que edite. Consulte Nombres de las copias de seguridad.

El valor predeterminado de la variable backup-enable-predicate impide que se escriban archivos de copia de seguridad para los archivos de los directorios utilizados para los archivos temporales, especificados por temporary-file-directory o small-temporary-file-directory.

Puede indicar explícitamente a Emacs que haga otro archivo de copia de seguridad desde un búfer, aunque ese búfer ya haya sido guardado anteriormente. Si guarda el búfer con C-u C-x C-s, la versión así guardada se convertirá en un archivo de copia de seguridad si vuelve a guardar el búfer. C-u C-u C-u C-x C-s guarda el búfer, pero primero convierte el contenido del archivo anterior en un nuevo archivo de copia de seguridad. C-u C-u C-u C-x C-s hace ambas cosas: hace una copia de seguridad de los contenidos anteriores, y se las arregla para hacer otra con los contenidos recién guardados si los guarda de nuevo.

Nombres:  Cómo se denominan los archivos de copia de seguridad.
Borrado:  Emacs elimina el exceso de copias de seguridad numeradas.
Copiando: Las copias de seguridad se pueden hacer copiando o renombrando.
  1. Las copias de seguridad individuales o numeradas

    Cuando Emacs crea un archivo de copia de seguridad, su nombre se construye normalmente añadiendo ~ al nombre del archivo que se está editando; por lo tanto, el archivo de copia de seguridad para eval.c sería eval.c~.

    Si el control de acceso impide que Emacs escriba archivos de copia de seguridad con los nombres habituales, escribe el archivo de copia de seguridad como /.emacs.d/%backup%. Sólo puede existir un archivo de este tipo, por lo que sólo está disponible la copia de seguridad más reciente.

    Emacs también puede crear archivos de copia de seguridad numerados. Los nombres de los archivos de copia de seguridad numerados contienen .~, el número, y otro ~ después del nombre del archivo original. Así, los archivos de respaldo de eval.c serían llamados eval.c.~1~, eval.c.~2~, y así sucesivamente, hasta llegar a nombres como eval.c.~259~ y más allá.

    La variable version-control determina si se deben crear archivos de copia de seguridad individuales o múltiples archivos de copia de seguridad numerados. Sus posibles valores son:

    nil
       Realice copias de seguridad numeradas para los archivos que ya tienen copias de seguridad
       numeradas. De lo contrario, haga copias de seguridad individuales. Este es el valor por defecto.
    
    t
       Haga copias de seguridad numeradas.
    
    Never
       Nunca haga copias de seguridad numeradas; siempre haga copias de seguridad individuales.
    

    La forma habitual de configurar esta variable es de forma global, a través del archivo init o del búfer de personalización. Sin embargo, puede configurar version-control localmente en un búfer individual para controlar la realización de copias de seguridad del archivo de ese búfer (consulte Locales). Puede configurar version-control de Emacs localmente cada vez que visite un archivo determinado (consulte Variables de archivo). Algunos modos, como el modo Rmail, establecen esta variable.

    Si configura la variable de entorno VERSIONCONTROL, para indicar a varias utilidades GNU qué hacer con los archivos de copia de seguridad, Emacs también obedece a la variable de entorno configurando version-control de la variable Lisp de acuerdo con el inicio. Si el valor de la variable de entorno es "t" o "numbered", entonces la version-control se convierte en t; si el valor es "nil" o "existing", entonces la version-control se convierte en nil; si es "never" o "simple", entonces la version-control es never.

    Puede personalizar la variable backup-directory-alist para especificar que los archivos que coincidan con ciertos patrones deben incluirse en directorios específicos. Esta variable se aplica tanto a las copias de seguridad simples como a las numeradas. Un uso típico es añadir un elemento ("." . dir) para hacer todas las copias de seguridad en el directorio con el nombre absoluto dir; Emacs modifica los nombres de los archivos de copia de seguridad para evitar conflictos entre archivos con los mismos nombres que se originan en diferentes directorios. Alternativamente, agregar, ("." . ".~") haría copias de seguridad en el subdirectorio invisible .~ del directorio del archivo original. Emacs crea el directorio, si es necesario, para realizar la copia de seguridad.

    Si define la variable make-backup-file-name-function a una función Lisp adecuada, ésta anula la forma habitual en que Emacs construye los nombres de los archivos de copia de seguridad.

  2. Borrado automático de copias de seguridad

    Para evitar el consumo excesivo de espacio en disco, Emacs puede eliminar automáticamente versiones de copia de seguridad numeradas. Generalmente, Emacs mantiene las primeras copias de seguridad y las últimas copias de seguridad, eliminando todas las que se encuentran entre ellas. Esto sucede cada vez que se realiza una nueva copia de seguridad.

    Las dos variables kept-old-versions y kept-new-versions controlan esta eliminación. Sus valores son, respectivamente, el número de copias de seguridad más antiguas (con el número más bajo) que hay que guardar y el número de las más nuevas (con el número más alto) que hay que guardar, cada vez que se realiza una nueva copia de seguridad. Las copias de seguridad situadas en el centro (excluyendo las más antiguas y las más recientes) son el exceso de versiones intermedias: esas copias de seguridad se eliminan. Los valores de estas variables se utilizan cuando llega el momento de eliminar versiones excedentes, justo después de que se crea una nueva versión de copia de seguridad; la copia de seguridad recién realizada se incluye en el recuento en las versiones nuevas guardadas. Por defecto, ambas variables son 2.

    Si las versiones anteriores son t, Emacs elimina el exceso de archivos de copia de seguridad de forma silenciosa. Si es nil, el valor predeterminado, Emacs le pregunta si debe eliminar el exceso de versiones de copia de seguridad. Si tiene algún otro valor, Emacs nunca elimina automáticamente las copias de seguridad.

    Dired también se puede utilizar para borrar versiones antiguas. Véase Dired Deletion.

  3. Copiar vs. Renombrar

    Los archivos de copia de seguridad se pueden hacer copiando el archivo antiguo o renombrándolo. Esto hace una diferencia cuando el archivo antiguo tiene múltiples nombres (enlaces duros). Si se cambia el nombre del archivo antiguo al archivo de copia de seguridad, los nombres alternativos se convierten en nombres para el archivo de copia de seguridad. Si en su lugar se copia el archivo antiguo, los nombres alternativos permanecerán como nombres para el archivo que está tratando, y el contenido al que se accede con esos nombres será el nuevo contenido.

    El método de hacer un archivo de copia de seguridad también puede afectar al propietario y al grupo del archivo. Si se utiliza la función de copia, no se modifican. Si se utiliza el cambio de nombre, se convierte en el propietario del archivo y el grupo del archivo se convierte en el predeterminado (diferentes sistemas operativos tienen diferentes valores predeterminados para el grupo).

    La elección de renombrar o copiar se hace de la siguiente manera:

    Si la variable backup-by-copying es non-nil (la predeterminada es nil), utilice la copia.
    
    De lo contrario, si la variable backup-by-copying-when-linked es non-nil (valor predeterminado
    es nil), y el archivo tiene varios nombres, utilice la función de copia.
    
    De lo contrario, si la variable backup-by-copying-when-mismatch es non-nil (el valor
    predeterminado es t), y el cambio de nombre cambiaría el propietario o grupo del archivo,
    utilice la función de copia. Si cambia la copia de seguridad por copia cuando no coincide
    con cero, Emacs comprueba el ID de usuario numérico del propietario del archivo. Si esto
    es más alto que el desajuste entre copia y copia cuando hay privilegios, entonces se
    comporta como si el desajuste entre copia y copia fuera non-nil de todos modos.
    
    De lo contrario, el cambio de nombre es la opción predeterminada.
    

    Cuando un archivo se gestiona con un sistema de control de versiones (ver Control de versiones), Emacs normalmente no realiza copias de seguridad de la forma habitual para ese archivo. Pero el check-in y el check-out son similares en algunos aspectos a la realización de copias de seguridad. Una desafortunada similitud es que estas operaciones típicamente rompen los enlaces duros, desconectando el nombre del archivo que visitó de cualquier otro nombre alternativo para el mismo archivo. Esto no tiene nada que ver con Emacs, el sistema de control de versiones lo hace.

34.3.3 Personalización del almacenamiento de archivos

Si el valor de la variable require-final-newline es t, guardar o escribir un archivo pone silenciosamente una nueva línea al final si aún no la hay. Si el valor se visita, Emacs añade una nueva línea al final de cualquier archivo que no la tenga, justo después de visitar el archivo. (Esto marca el búfer como modificado y puede deshacerlo.) Si el valor es visit-save, Emacs añade estas nuevas líneas tanto al visitar como al guardar. Si el valor es nil, Emacs no cambia el final del archivo; cualquier otro valor que no sea nil significa preguntarle si desea añadir una nueva línea. El valor por defecto es nil.

Algunos modos principales están diseñados para tipos específicos de archivos que se supone que siempre terminan en nuevas líneas. Estos modos principales establecen la variable require-final-newline al valor de mode-require-final-newline, que por defecto es t. Al establecer esta última variable, puede controlar cómo estos modos manejan las líneas nuevas finales.

Cuando Emacs guarda un archivo, invoca la llamada del sistema fsync para forzar la salida inmediata de los datos al disco. Esto es importante para la seguridad si el sistema se bloquea o en caso de apagón. Sin embargo, puede ser perjudicial en los portátiles que utilizan el ahorro de energía, ya que puede forzar una rotación del disco cada vez que se guarda un archivo. Si acepta un mayor riesgo de pérdida de datos, puede configurar write-region-inhibit-fsync a un valor non-nil para desactivar la sincronización.

34.3.4 Protección contra la edición simultánea

La edición simultánea se produce cuando dos usuarios visitan el mismo archivo, ambos realizan cambios y luego los guardan. Si no se informa a nadie de que esto está ocurriendo, el usuario que guarde primero se dará cuenta de que sus cambios se han perdido.

En algunos sistemas, Emacs detecta inmediatamente cuando el segundo usuario comienza a cambiar el archivo y emite una advertencia inmediata. En todos los sistemas, Emacs comprueba al guardar el archivo y advierte si está a punto de sobrescribir los cambios de otro usuario. Puede evitar la pérdida del trabajo del otro usuario tomando las medidas correctivas adecuadas en lugar de guardar el archivo.

Cuando realiza la primera modificación en un búfer de Emacs que está visitando un archivo, Emacs registra que el archivo está bloqueado por usted. (Para ello, crea un enlace simbólico con un nombre especial en el mismo directorio). Emacs elimina el bloqueo cuando se guardan los cambios. La idea es que el archivo se bloquee cada vez que un búfer de Emacs que lo visite tenga cambios no guardados.

Puede evitar la creación de archivos de bloqueo configurando la variable create-lockfiles en nil. Precaución: al hacerlo, perderá los beneficios que ofrece esta función.

Si empieza a modificar el búfer mientras el archivo visitado está bloqueado por otra persona, esto constituye una colisión. Cuando Emacs detecta una colisión, le pregunta qué hacer, llamando a la función Lisp ask-user-about-lock. Puede redefinir esta función en aras de la personalización. La definición estándar de esta función le hace una pregunta y acepta tres posibles respuestas:

s
   Robar el candado. El que estaba cambiando el archivo pierde el bloqueo y usted gana el bloqueo.

p
   Proceder. Siga adelante y edite el archivo a pesar de que haya sido bloqueado por otra persona.

q
   Salir. Esto causa un error (file-locked), y el contenido del búfer permanece inalterado,
   la modificación que estaba tratando de hacer no tiene lugar.

Si Emacs o el sistema operativo se bloquea, es posible que se queden archivos de bloqueo obsoletos, por lo que ocasionalmente recibirá advertencias sobre colisiones espurias. Cuando determine que la colisión es espuria, utilice p para decirle a Emacs que siga adelante de todos modos.

Tenga en cuenta que el bloqueo funciona sobre la base de un nombre de archivo; si un archivo tiene varios nombres, Emacs no impide que dos usuarios lo editen simultáneamente con nombres diferentes.

Un archivo de bloqueo no se puede escribir en algunas circunstancias, por ejemplo, si Emacs carece de los permisos del sistema o si el sistema no admite enlaces simbólicos. En estos casos, Emacs puede detectar la colisión cuando intenta guardar un archivo, comprobando la fecha de última modificación del archivo. Si el archivo ha cambiado desde la última vez que Emacs lo visitó o guardó, esto implica que los cambios se han realizado de otra manera y se perderán si Emacs continúa guardando. Emacs muestra entonces un mensaje de advertencia y pide confirmación antes de guardar; responda sí para guardar, y no o C-g para cancelar el almacenamiento.

Si se le notifica que ya ha tenido lugar la edición simultánea, una forma de comparar el búfer con su archivo es el comando M-x diff-buffer-with-file. Consulte Comparación de archivos.

34.3.5 Archivos en Sombra

M-x shadow-initialize
   Configurar el seguimiento de archivos.

M-x shadow-define-literal-group
   Declarar un único archivo para ser compartido entre sitios.

M-x shadow-define-regexp-group
   Hacer que todos los archivos que coincidan con cada uno de un grupo de archivos sean compartidos
   entre hosts.

M-x shadow-define-cluster <RET> name <RET>
   Defina un nombre de clúster de archivos en la sombra.

M-x shadow-copy-files
   Copiar todos los archivos en la sombra pendientes.

M-x shadow-cancel
   Cancelar la instrucción de sombrear algunos archivos.

Puede organizar la conservación de copias en la sombra idénticas de determinados archivos en más de un lugar, posiblemente en diferentes equipos. Para ello, primero debe configurar un grupo de archivos sombra, que es un conjunto de archivos con nombres idénticos compartidos entre una lista de sitios. El grupo de archivos es permanente y se aplica tanto a otras sesiones de Emacs como a la actual. Una vez que el grupo está configurado, cada vez que salga de Emacs, copiará el archivo que ha editado a los otros archivos de su grupo. También puede realizar la copia sin salir de Emacs, escribiendo M-x shadow-copy-files.

Para configurar un grupo de archivos sombra, utilice el grupo M-x shadow-define-literal-group o M-x shadow-define-regexp-group. Consulte sus cadenas de documentación para obtener más información.

Antes de copiar un archivo a sus sombras, Emacs pide confirmación. Puede responder "no" a la anulación de la copia de este archivo, esta vez. Si desea cancelar permanentemente el sombreado de un determinado archivo, utilice la función M-x shadow-cancel para eliminar o cambiar el grupo de archivos sombreados.

Un clúster sombra es un grupo de hosts que comparten directorios, de modo que copiar a o desde uno de ellos es suficiente para actualizar el archivo en todos ellos. Cada clúster sombra tiene un nombre y especifica la dirección de red de un host primario (en el que copiamos los archivos) y una expresión regular que coincide con los nombres de host de todos los demás hosts del clúster. Puede definir un clúster de sombras con el clúster M-x shadow-define-cluster.

34.3.6 Actualización de marcas de tiempo automáticamente

Puede organizar la colocación de una marca de tiempo en un archivo, de modo que se actualice automáticamente cada vez que edite y guarde el archivo. La marca de tiempo debe estar en las primeras ocho líneas del archivo, y debe insertarla así:

Time-stamp: <>

o así:

Time-stamp: " "

A continuación, añada la función time-stamp al buffer con el hook before-save-hook (véase Hooks). Al grabar el fichero, esta función actualiza automáticamente el cronomarcador con la fecha y la hora actuales. También puede utilizar el comando M-x time-stamp para actualizar el sello de tiempo manualmente. Para otras personalizaciones, consulte la time-stamp. Tenga en cuenta que el formato del cronomarcador se ajusta a su configuración local (véase Environment).

34.4 Revertir el búfer

Si ha realizado grandes cambios en un archivo de visita en un búfer y luego cambia de opinión, puede revertir los cambios y volver a la versión guardada del archivo. Para ello, escriba M-x revert-buffer. Revertir sin querer podría hacerle perder una gran cantidad de trabajo, Emacs pide confirmación en primer lugar.

El comando revert-buffer intenta posicionar el punto de tal manera que, si el archivo fue editado sólo un poco, estará aproximadamente la misma parte del texto que antes. Sin embargo, si se han realizado cambios importantes, puede terminar en un lugar totalmente diferente.

La revert-bufer marca el búfer como "no modificado". También borra el historial de deshacer del búfer (ver Deshacer). Por lo tanto, la reversión no se puede deshacer si cambias de opinión una vez más, no puedes usar los comandos de deshacer para devolver los cambios revertidos.

Algunos tipos de búferes que no están asociados con archivos, como los búferes Dired, también se pueden revertir. Para ellos, revertir significa recalcular su contenido. Los búferes creados explícitamente con C-x b no se pueden revertir; si intenta revertir un buffer informa de un error.

Cuando edita un archivo que cambia automática y frecuentemente (por ejemplo, un registro de salida de un proceso que continúa ejecutándose), puede ser útil que Emacs revierta el archivo sin consultarle. Para solicitar este comportamiento, establezca la variable revert-without-query en una lista de expresiones regulares. Cuando un nombre de archivo coincide con una de estas expresiones regulares, find-file y revert-buffer lo revertirán automáticamente si ha cambiado, siempre y cuando el propio buffer no se modifique. (Si ha editado el texto, sería un error descartar los cambios).

También puede pedirle a Emacs que revierta los búferes periódicamente. Para hacer esto para un búfer específico, habilite el modo menor Auto-Revert escribiendo M-x auto-revert-mode. Esto invierte automáticamente la memoria intermedia actual cada cinco segundos; puede cambiar el intervalo a través de la variable auto-revert-interval. Para hacer lo mismo con todos los búferes de archivos, escriba M-x global-auto-revert-mode para habilitar el modo Global Auto-Revert. Estos modos menores no verifican ni revierten los archivos remotos, porque esto suele ser demasiado lento.

Uno de los usos del modo auto-revert es "seguir" un archivo, como un registro del sistema, para que los cambios realizados en ese archivo por otros programas se muestren de forma continua. Para ello, basta con mover el punto al final del búfer, y éste permanecerá allí a medida que cambie el contenido del archivo. Sin embargo, si está seguro de que el archivo sólo cambiará al crecer al final, utilice el modo de cola con reversión automática (auto-revert-tail-mode). Es más eficiente para esto. El modo Auto-Revert funciona también para archivos remotos.

Consulte VC undo, para que los comandos vuelvan a las versiones anteriores de los archivos bajo control de versiones. Consulte la línea de modo VC, para conocer las peculiaridades de la reversión automática cuando se visitan archivos bajo control de versiones.

34.5 Búfers sin archivos con reversión automática

El modo Global Auto Revert normalmente sólo invierte los búferes de archivos. Hay dos maneras de revertir automáticamente ciertos búferes que no son de archivo: activando el modo de reversión automática en esos búferes (M-x auto-revert-mode); y configurando global-auto-revert-non-file-buffers a un valor non-nil. Este último permite la reversión automática para todos los tipos de búferes para los que está implementado (enumerados en el menú de abajo).

Al igual que los búferes de archivos, los búferes que no son de archivos normalmente no deben revertirse mientras se trabaja en ellos, o mientras contienen información que podría perderse después de la reversión. Por lo tanto, no se invierten si son "modificados". Esto puede ser complicado, porque decidir cuándo se debe marcar un búfer que no sea de archivo es generalmente más difícil que para los búferes de archivo.

Otro detalle delicado es que, por razones de eficiencia, la reversión automática a menudo no intenta detectar todos los cambios posibles en el búfer, sólo los cambios que son "importantes" o fáciles de detectar. Por lo tanto, habilitar la autorreversión para un búfer que no sea de archivo no siempre garantiza que toda la información del búfer esté actualizada, y no necesariamente hace que las reversiones manuales sean inútiles.

En el otro extremo, ciertos búferes invierten automáticamente cada segundo de intervalo de reversión automática. En este caso, la reversión automática no imprime ningún mensaje durante la reversión, incluso cuando la auto-revert-verbose eis non-nil.

Los detalles dependen de los tipos particulares de memoria intermedia y se explican en las secciones correspondientes.

Inversión automática del menú del búfer: Auto Revertir del Menú Buffer.
Reversión automática activada:           Reversión automática de buffers dañados.
Soporte de buffers adicionales:          Cómo añadir más soporte para la reversión automática.

34.5.1 Inversión automática del menú Buffer

Si está activada la función de reversión automática de los búferes que no son de archivos, auto-revert-interval del menú del búfer invierte automáticamente cada segundo de intervalo la reversión automática, tanto si es necesario como si no lo es. (Probablemente tomaría más tiempo verificar si hay necesidad que revertir).

Si el menú del búfer se modifica de forma inapropiada, sólo tiene que revertirlo manualmente utilizando g y se reanudará la redirección automática. Sin embargo, si marcó ciertos búferes para que se borren o se muestren, debe tener cuidado, ya que la reversión borra todas las marcas. El hecho de que la adición de marcas establezca el flag de modificación del búfer impide que la función de reversión automática borre automáticamente las marcas.

34.5.2 Auto-reversión de los buffers Dired

Los buffers Dired de autorreversión funcionan actualmente en sistemas operativos estilo GNU o Unix. Puede que no funcione satisfactoriamente en otros sistemas.

Los búferes dañados sólo se revierten automáticamente cuando cambia la lista de archivos del directorio principal del búfer (por ejemplo, cuando se agrega un nuevo archivo). No se revierten automáticamente cuando cambia la información sobre un archivo en particular (por ejemplo, cuando cambia el tamaño) o cuando cambian los subdirectorios insertados. Para asegurarse de que toda la información de la lista está actualizada, debe revertir manualmente utilizando g, incluso si la función auto-reverting está activada en el búfer Dired. A veces, puede tener la impresión de que la modificación o el almacenamiento de los archivos listados en el directorio principal realmente causa la autorreversión. Esto se debe a que hacer cambios en un archivo, o guardarlo, muy a menudo causa cambios en el propio directorio; por ejemplo, a través de archivos de copia de seguridad o archivos de auto-guardado. Sin embargo, esto no está garantizado.

Si el búfer Dired está marcado como modificado y no hay cambios que desee proteger, entonces la mayoría de las veces puede hacer que se reanude el auto-reverting invirtiendo manualmente el búfer usando g. Hay una excepción. La marca de archivo, puede revertir el búfer de forma segura. Esto no borrará las flags o marcas (a menos que el archivo marcado haya sido borrado, por supuesto). Sin embargo, el búfer permanecerá modificado, incluso después de la reversión, y la autorreversión no se reanudará. Esto se debe a que, si marca archivos, es posible que esté trabajando en el búfer y que no desee que el búfer cambie sin previo aviso. Si desea que la autorreversión se reanude en presencia de marcas y flags, marque el búfer sin modificar utilizando M-~. Sin embargo, añadir, borrar o cambiar marcas o flags lo marcará de nuevo.

Los búferes de Dired remotos no son auto-reverted (porque pueden ser lentos). Tampoco lo son los búferes Dired para los que usó comodines de shell o argumentos de archivo para listar sólo algunos de los archivos. Los búferes Find y Locate tampoco se revierten automáticamente.

34.5.3 Adición de soporte para la reversión automática de búferes adicionales

Esta sección está destinada a los programadores de Elisp que deseen añadir soporte para la autorreversión de nuevos tipos de búferes.

Para soportar auto-revert, el búfer debe tener en primer lugar activa revert-buffer-function. Ver Reversión.

Además, debe tener una función de buffer-stale-function.

buffer-stale-function
   El valor de esta variable es una función para comprobar si un búfer que no es de archivo necesita
   revertirse. Esta debería ser una función con un argumento opcional noconfirm. La función debe
   devolver non-nil si el buffer debe ser revertido. El búfer es actual cuando se llama a esta
   función.

   Si bien esta función está destinada principalmente a su uso en la autorreversión, también
   podría utilizarse para otros fines. Por ejemplo, si la auto-reversión no está habilitada, se
   puede utilizar para advertir al usuario de que el búfer necesita revertirse. La idea detrás
   del argumento noconfirm es que debería ser t si el buffer va a ser revertido sin preguntar al
   usuario y nil si la función sólo va a ser usada para advertir al usuario que el buffer está
   desactualizado. En particular, para su uso en la auto-reversión, noconfirm es t. Si la función
   sólo se va a utilizar para la auto-reversión, puede ignorar el argumento noconfirm.

   Si sólo desea revertir automáticamente cada segundo de intervalo de reversión automática
   (como el menú Buffer), utilice:

   (set (make-local-variable 'buffer-stale-function)
     #'(lambda (&optional noconfirm) 'fast)
   )

   en la función de modo de búfer.

   El valor de retorno especial 'rápido' le indica a la persona que llama que no se ha comprobado
   la necesidad de revertir, pero que la reversión del búfer es rápida. También le dice a la
   Reversión Automática que no imprima ningún mensaje de reversión, incluso si el verbo de reversión
   automática no es nulo. Esto es importante, ya que obtener mensajes de reversión cada segundo de
   intervalo de reversión automática puede ser muy molesto. La información proporcionada por este
   valor de retorno también puede ser útil si se consulta la función para fines distintos de la
   autorreversión.

Una vez que el búfer tiene revert-buffer-function y buffer-stale-functionbuffer-stale-function, por lo general quedan varios problemas.

El búfer sólo se revertirá automáticamente si está marcado como no modificado. Por lo tanto, tendrá que asegurarse de que varias funciones marquen el búfer modificado si y sólo si el búfer contiene información que podría perderse al revertirse, o si hay motivos para creer que el usuario podría verse incomodado por la autorreversión, porque está trabajando activamente en el búfer. El usuario siempre puede anular esto ajustando manualmente el estado modificado del búfer. Para apoyar esto, llamar a la función revert-buffer-function en un búfer debe mantener siempre el búfer marcado como no modificado.

Es importante asegurarse de que el punto no salte continuamente como consecuencia de la autorreversión. Por supuesto, el punto móvil puede ser inevitable si el buffer cambia radicalmente.

Debe asegurarse de que la función revert-buffer-function no imprima mensajes que dupliquen innecesariamente los propios mensajes de la función de reversión automática, que se muestran si la auto-revert-verbose es t, y que invalide efectivamente un valor nulo para auto-revert-verbose. Por lo tanto, adaptar un modo para la autorreversión a menudo implica deshacerse de tales mensajes. Esto es especialmente importante para los búferes que invierten auto-revert-interval automáticamente por intervalos de cada segundo.

Si la nueva autorreversión forma parte de Emacs, debe mencionarlo en la cadena de documentación de global-auto-revert-non-file-buffers.

Del mismo modo, debería añadir una sección a este capítulo. Esta sección debería al menos dejar claro si al habilitar auto-reverting para el búfer se asegura que toda la información en el búfer esté completamente actualizada (o lo estará después de unos segundos especificados en auto-revert-interval).

34.6 Guardar automático: Protección contra los Desastres

De vez en cuando, Emacs guarda automáticamente cada archivo visitado en un archivo separado, sin alterar el archivo que realmente utiliza. Esto se llama auto-guardado. Evita que usted pierda más que una cantidad limitada de trabajo si el sistema falla.

Cuando Emacs determina que es hora de guardar automáticamente, considera cada búfer y cada uno se guarda automáticamente si está habilitado para ello y si se ha cambiado desde la última vez que se guardó automáticamente. El mensaje 'Auto-saving…' se muestra en el área de eco durante el auto-guardado, si es que algún archivo está auto-guardado. Los errores que se producen durante el almacenamiento automático se detectan para que no interfieran con la ejecución de los comandos que ha estado escribiendo.

Archivos:  El archivo en el que se realizan los cambios guardados automáticamente
           hasta que se guarda el archivo.
Control:   Controlar cuándo y con qué frecuencia guardar automáticamente.
Recuperar: Recuperación de texto de archivos guardados automáticamente.

34.6.1 Guardar archivos automáticamente

El auto-guardado normalmente no se guarda en los archivos que usted visitó, porque puede ser muy indeseable guardar un cambio que usted no quería hacer permanente. En su lugar, el auto-guardado se hace en un archivo diferente llamado archivo de auto-guardado, y el archivo visitado se cambia sólo cuando usted solicita el guardado explícitamente (como con C-x C-s).

Normalmente, el nombre del archivo guardado automáticamente se hace añadiendo '#' en el anverso y en el reverso del nombre del archivo visitado. Así, un búfer que visita el archivo foo.c se guarda automáticamente en un archivo #foo.c#. La mayoría de los búferes que no son archivos de visita se guardan automáticamente sólo si lo solicita explícitamente; cuando se guardan automáticamente, el nombre del archivo se guarda automáticamente añadiendo "#" al frente y a la parte posterior del nombre del búfer y, a continuación, añadiendo dígitos y letras al final para conferirle un carácter único. Por ejemplo, el búfer mail en el que redacta los mensajes a enviar puede guardarse automáticamente en un archivo llamado #*mail*#704juu. Los nombres de archivos guardados automáticamente se hacen de esta manera a menos que reprograme partes de Emacs para hacer algo diferente (las funciones make-auto-save-file-name y auto-save-file-name-p). El nombre de archivo que se utilizará para guardar automáticamente en un búfer se calcula cuando se activa el almacenamiento automático en ese búfer.

La variable auto-save-file-name-transforms permite un grado de control sobre el nombre del archivo auto-guardado. Le permite especificar una serie de expresiones regulares y reemplazos para transformar el nombre del archivo guardado automáticamente. El valor predeterminado coloca los archivos de almacenamiento automático de archivos remotos (consulte Archivos remotos) en el directorio de archivos temporales del equipo local.

Cuando se borra una parte sustancial del texto en un búfer grande, el almacenamiento automático se desactiva temporalmente en ese búfer. Esto se debe a que si eliminó el texto sin querer, puede que encuentre el archivo de auto-guardado más útil si contiene el texto eliminado. Para volver a activar el ahorro automático después de que esto suceda, guarde el búfer con C-x C-s, o utilice el modo de ahorro automático C-u 1 M-x.

Si desea que el auto-guardado se realice en el archivo visitado en lugar de en un archivo separado, establezca el nombre de la variable auto-save-visited-file-name del archivo visitado a un valor non-nil. En este modo, no existe una diferencia real entre el almacenamiento automático y el almacenamiento explícito.

El archivo de almacenamiento automático de un búfer se elimina cuando se guarda el búfer en el archivo visitado. Cambiar el nombre del archivo visitado con C-x C-w o set-visited-file-name renombra cualquier archivo de auto-guardado para que vaya con el nuevo nombre visitado.

34.6.2 Control del guardado automático

Cada vez que visita un archivo, el auto-guardado se activa para el búfer de ese archivo si la variable auto-save-default es non-nil (pero no en modo batch; vea Opciones iniciales). El valor por defecto para esta variable es t, por lo que el auto-guardado es la práctica habitual para los búferes de visita de archivos. Para activar el guardado automático en el búfer actual, escriba M-x auto-save-mode. El modo Auto Save actúa como un modo menor local de búfer (ver Modos Menores).

Emacs se guarda automáticamente de forma periódica en función del número de caracteres que haya escrito desde la última vez que se guardó automáticamente. La variable auto-save-interval especifica cuántos caracteres tiene el auto-guardado. Por defecto, es 300. Emacs no acepta valores demasiado pequeños: si personaliza el intervalo de guardado automático a un valor inferior a 20, Emacs se comportará como si el valor fuera 20.

El guardado automático también tiene lugar cuando deja de escribir durante un tiempo. Por defecto, lo hace después de 30 segundos de inactividad (en este momento, Emacs también puede realizar la recolección de basura. Para cambiar este intervalo, personalice la variable auto-save-timeout. El período de tiempo real es más largo si el búfer actual es largo; esto es una heurística que pretende mantenerse fuera de su camino cuando está editando búferes largos, en los que el auto-guardado toma una cantidad apreciable de tiempo. El guardado automático durante los períodos de inactividad logra dos cosas: primero, asegura que todo su trabajo se guarde si se aleja del terminal por un tiempo; segundo, puede evitar el guardado automático mientras está escribiendo.

Emacs también guarda automáticamente cada vez que se produce un error fatal. Esto incluye matar el trabajo de Emacs con un comando del shell como 'kill %emacs', o desconectar una conexión de red.

Puede realizar un auto-guardado explícitamente con el comando M-x do-auto-save.

34.6.3 Recuperar datos de guardado automático

Puede utilizar el contenido de un archivo guardado automáticamente para recuperarse de una pérdida de datos con el comando M-x recover-file <RET> file <RET>. Este archivo de visitas y luego (después de su confirmación) restaura el contenido de su archivo auto-guardado #file#. A continuación, puede guardar con C-x C-s para poner el texto recuperado en el propio archivo. Por ejemplo, para recuperar el archivo foo.c desde su archivo de auto-guardado #foo.c#, hazlo:

M-x recover-file <RET> foo.c <RET> yes <RET> C-x C-s

Antes de pedir confirmación, M-x recover-file muestra un listado de directorios que describe el archivo especificado y el archivo de auto-guardado, para que pueda comparar sus tamaños y fechas. Si el archivo de almacenamiento automático es más antiguo, M-x recover-file no ofrece leerlo.

Si Emacs o el equipo se bloquea, puede recuperar todos los archivos que estaba editando desde sus archivos guardados automáticamente con el comando M-x recover-session. Este primer paso muestra una lista de las sesiones interrumpidas grabadas. Mueva el punto al que elija y escriba C-c C-c. Luego la sesión de recuperación pregunta sobre cada uno de los archivos que se estaban editando durante esa sesión, preguntándole si desea recuperar ese archivo. Si contestas y, llama a recover-file, que funciona de manera normal. Muestra las fechas del archivo original y su archivo de auto-guardado, y pregunta una vez más si desea recuperar ese archivo.

Cuando finaliza la sesión de recuperación, los archivos que ha elegido para recuperar están presentes en los búferes de Emacs. A continuación, debería grabarlos. Sólo así, al guardarlos, se actualizan los archivos.

Emacs registra información sobre las sesiones interrumpidas en archivos llamados .saves-pid-hostname en el directorio ~/.emacs.d/auto-save-list/. Este directorio está determinado por la variable auto-save-list-file-prefix. Si establece la variable auto-save-list-file-prefix a nil, las sesiones no se graban para su recuperación.

34.7 Alias de nombre de archivo

Los enlaces simbólicos y los enlaces duros permiten que varios nombres de archivo se refieran al mismo archivo. Los enlaces duros son nombres alternativos que se refieren directamente al archivo; todos los nombres son igualmente válidos y no se prefiere a ninguno de ellos. Por el contrario, un enlace simbólico es una especie de alias definido: cuando foo es un enlace simbólico a bar, puede utilizar cualquiera de los dos nombres para referirse al archivo, pero bar es el nombre real, mientras que foo es sólo un alias. Los casos más complejos ocurren cuando los enlaces simbólicos apuntan a directorios.

Normalmente, si visita un archivo que Emacs ya está visitando con otro nombre, Emacs muestra un mensaje en el área de eco y utiliza el búfer existente visitando ese archivo. Esto puede ocurrir en sistemas que soportan enlaces duros o simbólicos, o si utiliza un nombre de fichero largo en un sistema que trunca nombres de fichero largos, o en un sistema de ficheros que no distingue entre mayúsculas y minúsculas. Puede suprimir el mensaje configurando la variable ind-file-suppress-same-file-warnings a un valor non-nil. Puede desactivar esta característica por completo estableciendo la variable find-file-existing-other-name a nil: entonces si visita el mismo archivo bajo dos nombres diferentes, obtendrá un búfer separado para cada nombre de archivo.

Si la variable find-file-visit-truename es non-nil, entonces el nombre de archivo registrado para un buffer es el nombre verdadero del archivo (hecho reemplazando todos los enlaces simbólicos con sus nombres de destino), en lugar del nombre que usted especifica. Configurar find-file-visit-truename también implica el efecto de find-file-existing-other-name.

A veces, normalmente se accede a un directorio a través de un enlace simbólico, y es posible que desee que Emacs muestre preferentemente su nombre "vinculado". Para ello, personalice directory-abbrev-alist. Cada elemento de esta lista debe tener el formulario (de . a), lo que significa reemplazar con o cuando sea que aparezca en el nombre de un directorio. La cadena de caracteres de origen es una expresión regular (ver Regexps). Se compara con los nombres de directorios anclados en el primer carácter, y debería empezar por "\" (para soportar nombres de directorios con líneas nuevas incrustadas, que denotarian "^"). La cadena debería ser un nombre de directorio absoluto ordinario que apunte al mismo directorio. No utilice '~' para representar un directorio raíz en la cadena; Emacs realiza estas sustituciones por separado. He aquí un ejemplo, de un sistema en el que normalmente se accede a /home/fsf a través de un enlace simbólico llamado /fsf:

(("\\`/home/fsf" . "/fsf"))

34.8 Directorios de archivos

El sistema de archivos agrupa los archivos en directorios. Un listado de directorios es una lista de todos los archivos de un directorio. Emacs proporciona comandos para crear y eliminar directorios, y para hacer listados de directorios en formato breve (sólo nombres de archivo) y formato detallado (tamaños, fechas y autores incluidos). Emacs también incluye una función de navegador de directorios llamada Dired; consulte Dired.

C-x C-d dir-or-pattern <RET>
   Mostrar un breve listado de directorios (list-directory).

C-u C-x C-d dir-or-pattern <RET>
   Mostrar un listado detallado de directorios.

M-x make-directory <RET> dirname <RET>
   Crear un nuevo directorio llamado dirname.

M-x delete-directory <RET> dirname <RET>
   Borrar directorio llamado dirname. Si no está vacío, se le preguntará si desea eliminarlo
   recursivamente.

El comando para mostrar un listado de directorios es C-x C-d (list-directory). Lee usando el minibuffer un nombre de archivo que es un directorio a listar o un patrón que contiene comodines para los archivos a listar. Por ejemplo:

C-x C-d /u2/emacs/etc <RET>

lista todos los ficheros del directorio /u2/emacs/etc. A continuación se muestra un ejemplo de cómo especificar un patrón de nombre de archivo:

C-x C-d /u2/emacs/src/*.c <RET>

Normalmente, C-x C-d muestra un breve listado de directorios que contiene sólo nombres de archivos. Un argumento numérico (independientemente del valor) le dice que haga un listado detallado que incluya tamaños, fechas y propietarios (como 'ls -l').

El texto de un listado de directorios se obtiene principalmente ejecutando ls en un proceso inferior. Dos variables Emacs controlan los conmutadores pasados a ls: list-directory-brief-switches es una cadena que da los conmutadores para usar en listados breves ("-CF" por defecto), y list-directory-verbose-switches es una cadena que da a los conmutadores la posibilidad de usar en un listado detallado ("-l" por defecto).

En los listados de directorios, Emacs añade información sobre la cantidad de espacio libre en el disco que contiene el directorio. Para ello, ejecuta el programa especificado por el programa directory-free-space-program space-program con argumentos directory-free-space-args.

El comand*o M-x delete-directory* pide un nombre de directorio usando el minibuffer, y borra el directorio si está vacío. Si el directorio no está vacío, se le preguntará si desea eliminarlo recursivamente. En los sistemas que tienen una característica de "Papelera" (o "Papelera de reciclaje"), puede hacer que este comando mueva el directorio especificado a la Papelera en lugar de eliminarlo directamente, cambiando la variable delete-by-moving-to-trash a t. Vea la sección de Operaciones de Archivos Varios, para más información sobre el uso de la Papelera.

34.9 La comparación de archivos

El comando M-x diff solicita dos nombres de archivo, usando el minibuffer, y muestra las diferencias entre los dos archivos en un búfer llamado diff. Esto funciona ejecutando el programa diff, usando opciones tomadas de las variables diff-switches. El valor de diff-switches debería ser una cadena; el valor por defecto es "-c" para especificar una diferencia de contexto. Ver Diff, para más información sobre el programa diff.

La salida del comando diff se muestra usando un modo principal llamado modo Diff.

El comando M-x diff-backup compara un archivo especificado con su copia de seguridad más reciente. Si especifica el nombre de un archivo de copia de seguridad, diff-backup lo compara con el archivo de origen del que es una copia de seguridad. En todos los demás aspectos, se comporta como M-x diff.

El comando M-x diff-buffer-with-file compara un búfer especificado con su archivo correspondiente. Esto le muestra los cambios que haría en el archivo si guardara el búfer.

El comando M-x compare-windows compara el texto de la ventana actual con el de la ventana siguiente. (Para obtener más información sobre las ventanas de Emacs, consulte Windows.) La comparación comienza en el punto de cada ventana, después de presionar cada valor de punto inicial en el anillo de la marca en su respectivo búfer. Luego se mueve hacia adelante en cada ventana, un carácter a la vez, hasta que llega a caracteres que no coinciden. A continuación, el comando sale.

Si el punto en las dos ventanas es seguido por texto no coincidente cuando se inicia el comando M-x compare-windows intentan heurísticamente avanzar hasta el texto coincidente en las dos ventanas, y luego salen. Por lo tanto, si utiliza M-x compare-windows repetidamente, cada vez que omita un rango de coincidencia o encuentre el comienzo de otro.

Con un argumento numérico, las ventanas de comparación ignoran los cambios en los espacios en blanco. Si la variable compare-ignore-case es non-nil, la comparación también ignora las diferencias en el caso. Si la variable compare-ignore-whitespace es non-nil, las ventanas de comparación normalmente ignoran los cambios en el espacio en blanco, y un argumento de prefijo lo desactiva. Puede usar M-x smerge-mode para activar el modo Smerge, un modo menor para editar la salida del programa diff3. Esto es típicamente el resultado de una fusión fallida de una "actualización" de un sistema de control de versiones fuera de VC, debido a cambios conflictivos en un archivo. El modo fusión proporciona comandos para resolver conflictos seleccionando cambios específicos.

Consulte Emerge, para obtener información sobre el servicio Emerge, que proporciona una potente interfaz para fusionar archivos.

34.10 Modo diff

El modo Diff es un modo principal utilizado para la salida de M-x diff y otros comandos similares. Este tipo de salida se denomina parche, ya que se puede pasar al comando patch para aplicar automáticamente los cambios especificados. Para seleccionar el modo Diff manualmente, escriba M-x diff-mode.

Los cambios especificados en un parche se agrupan en trozos, que son trozos contiguos de texto que contienen una o más líneas cambiadas. Los Hunks también pueden incluir líneas sin cambios para proporcionar contexto a los cambios. Cada trozo está precedido por un encabezado de trozo, que especifica los números de línea antiguos y nuevos en los que se encuentra el trozo. El modo Diff resalta cada encabezado de un hunk, para distinguirlo del contenido real del hunk.

Puede editar un búfer del modo Diff como cualquier otro búfer. (Si es de sólo lectura, primero hay que hacerla escribible. ver Misc Buffer.) Cada vez que se cambia un hunk, el modo Diff intenta corregir automáticamente los números de línea en las cabeceras de los hunk, para asegurarse de que el parche siga siendo "correcto". Para desactivar la corrección automática del número de línea, cambie la variable diff-update-on-the-fly a nil.

El modo Diff trata a cada hunk como un "mensaje de error", similar al modo Compilación. Por lo tanto, puede utilizar comandos como C-x ' para visitar las ubicaciones de las fuentes correspondientes. Ver Modo de compilación.

Además, el modo Diff proporciona los siguientes comandos para navegar, manipular y aplicar partes de los parches:

M-n
   Moverse al siguiente hunk-start (diff-hunk-next).

   Este comando tiene un efecto secundario: refina el hunk al que te mueves, resaltando sus cambios
   con una mejor granularidad. Para desactivar esta función, escriba M-x diff-auto-refine-mode
   para desactivar el modo menor Diff Auto-Refine mode. Para desactivar el modo Diff Auto Refine
   por defecto, añádalo al archivo de inicio (ver hooks):

   (add-hook 'diff-mode-hook (lambda () (diff-auto-refine-mode -1)))

M-p
   Moverse al anterior hunk-start (diff-hunk-prev). Al igual que M-n, esto tiene el efecto
   secundario de refinar el hunk al que te mueves, a menos que deshabilites el modo Diff
   Auto-Refine.

M-}
   Moverse al siguiente inicio de archivo, en un parche multiarchivo (diff-file-next).

M-{
   Moverse al inicio del archivo anterior, en un parche multiarchivo (diff-file-prev).

M-k
   Mata al hunk en el punto (diff-hunk-kill).

M-K
   En un parche multiarchivo, elimine la parte del archivo actual. (diff-file-kill).

C-c C-a
   Aplicar este hunk a su archivo de destino (diff-apply-hunk). Con un argumento de prefijo
   de C-u, revierte este trozo.

C-c C-b
   Resalta los cambios del segmento en el punto con una granularidad más fina (diff-refine-hunk).
   Esto le permite ver exactamente qué partes de cada línea modificada se modificaron realmente.

C-c C-c
   Vaya al archivo fuente y a la línea correspondiente a este hunk (diff-goto-source).

C-c C-e
   Inicie una sesión de Ediff con el parche (diff-ediff-patch).

C-c C-n
   Restringir la vista al hunk actual (diff-restrict-view). Ver Estrechamiento. Con un
   argumento de prefijo de C-u, restrinja la vista al archivo actual de un parche de archivos
   múltiples. Para ampliar de nuevo, utilice C-x n w (widen).

C-c C-r
   Invierta la dirección de comparación para todo el búfer (diff-reverse-direction).

C-c C-s
   Dividir el hunk en el punto (diff-split-hunk). Esto es para editar manualmente parches,
   y sólo funciona con el formato diff unificado producido por las opciones -u o --unified
   al programa diff. Si necesita dividir un hunk en el formato diff del contexto producido
   por las opciones -c o --context para diff, primero convierta el buffer al formato diff
   unificado con C-c C-u.

C-c C-d
   Convertir todo el búfer al formato context diff (diff-unified-context). Con un argumento
   de prefijo, convierta sólo el texto dentro de la región.

C-c C-u
   Convierte todo el búfer a formato diff unificado (diff-context-unificado). Con un argumento
   de prefijo, convierta el formato unificado a formato de contexto. Cuando la marca está activa,
   convierta sólo el texto dentro de la región.

C-c C-w
   Refinar el hunk actual para que no tenga en cuenta los cambios en los espacios en blanco
   (diff-refine-hunk).

C-x 4 A
   Generar una entrada ChangeLog, como hace C-x 4 a (ver Registro de Cambios), para cada uno
   de los hunks (diff-add-change-log-entries-other-window). Esto crea un esqueleto del registro
   de modificaciones que puede rellenar más tarde con las descripciones reales de las
   modificaciones. C-x 4 a sí mismo en modo Diff opera en nombre del archivo hunk actual,
   pero obtiene el nombre de la función del propio parche. Esto es útil para realizar entradas
   de registro para las funciones que son eliminadas por el parche.

Los parches a veces incluyen espacios en blanco en las líneas modificadas, como un cambio involuntario e indeseado. Hay dos maneras de tratar este problema. En primer lugar, si habilita el modo Espacio en blanco en un búfer Diff (ver Espacio en blanco inútil), automáticamente resalta los espacios en blanco que siguen en las líneas modificadas. En segundo lugar, puede utilizar el comando M-x diff-delete-trailing-whitespace, que busca espacios en blanco al final de las líneas modificadas por el parche, y elimina ese espacio en blanco tanto en el parche como en los archivos de origen parcheados. Este comando no guarda las modificaciones que realiza, por lo que puede decidir si desea guardar los cambios (la lista de archivos modificados se muestra en el área de eco). Con un argumento prefijo, intenta modificar los archivos de origen originales en lugar de los archivos de origen parcheados.

34.11 Operaciones de archivos varios

Emacs tiene comandos para realizar otras operaciones en archivos. Todos funcionan en un solo archivo; no aceptan nombres de archivos comodín.

M-x delete-file solicita un archivo y lo borra. Si está eliminando muchos archivos en un directorio, puede ser más conveniente utilizar Dired en lugar de delete-file. Véase Borrado por defecto.

M-x move-file-to-trash mueve un archivo a la Papelera del sistema (o Papelera de reciclaje). Esta es una función disponible en la mayoría de los sistemas operativos; los archivos que se mueven a la Papelera pueden ser devueltos más tarde si cambia de opinión.

De forma predeterminada, los comandos de eliminación de Emacs no utilizan la Papelera. Para usar la Papelera (cuando esté disponible) para los comandos de eliminación comunes, cambie la variable delete-by-moving-to-trash a t. Esto afecta a los comandos M-x delete-file y M-x delete-directory (ver Directorios), así como a los comandos de eliminación en Dired (ver Borrado Deseado). Proporcionar un argumento de prefijo a un archivo de eliminación o a un directorio de eliminación, M-x lo borra directamente, en lugar de usar la Papelera, independientemente de que se mueva de un lado a otro de la papelera.

Si un archivo está bajo control de versiones (ver Control de versiones), debe eliminarlo usando el archivo M-x vc-delete-file en lugar del archivo M-x delete-file. Ver Borrar/Renombrar.

M-x copy-file lee el archivo antiguo y escribe un nuevo archivo con el mismo contenido.

M-x copy-directory copia directorios, similar al comando cp -r de la shell. Solicita un directorio antiguo y un destino nuevo. Si el nuevo es un directorio existente, crea una copia del directorio antiguo y lo pone en nuevo. Si el nuevo no es un directorio existente, copia todo el contenido del antiguo en un nuevo directorio.

M-x rename-file lee dos nombres de archivo antiguos y nuevos utilizando el minibuffer, y luego renombra el archivo antiguo como nuevo. Si el nombre de archivo nuevo ya existe, debe confirmar con sí o no se ha cambiado el nombre; esto se debe a que el cambio de nombre hace que se pierda el significado antiguo del nombre nuevo. Si lo antiguo y lo nuevo están en sistemas de archivos diferentes, el archivo antiguo se copia y se elimina. Si el argumento nuevo es sólo un nombre de directorio, el nuevo nombre real está en ese directorio, con el mismo componente no-directorio que el anterior. Por ejemplo M-x rename-file <RET> ~/foo <RET> /tmp <RET> renames ~/foo to /tmp/foo. La misma regla se aplica a todos los comandos restantes de esta sección. Todos ellos piden confirmación cuando el nuevo nombre de archivo ya existe también.

Si un archivo está bajo control de versiones (ver Control de versiones), debe renombrarlo usando el archivo M-x vc-rename-file en lugar de M-x rename-file. Ver VC Borrar/Renombrar.

M-x add-name-to-file añade un nombre adicional a un archivo existente sin eliminar su nombre antiguo. El nuevo nombre se crea como un "enlace duro" al archivo existente. El nuevo nombre debe pertenecer al mismo sistema de archivos en el que se encuentra el archivo. En MS Windows, este comando sólo funciona si el archivo reside en un sistema de archivos NTFS. En MS-DOS, funciona copiando el archivo.

M-x make-symbolic-link lee dos nombres de archivo target y linkname, luego crea un enlace simbólico llamado linkname, que apunta al target. El efecto es que los futuros intentos de abrir el nombre de línea del archivo se referirán a cualquier archivo que se nombre como destino en el momento en que se realiza la apertura, o se obtendrá un error si el nombre de destino es inexistente en ese momento. Este comando no expande el argumento target, por lo que le permite especificar un nombre relativo como destino del enlace. En MS Windows, este comando sólo funciona en MS Windows Vista y posteriores.

M-x insert-file (también C-x i) inserta una copia del contenido del archivo especificado en el buffer actual en el punto, dejando el punto sin cambios antes del contenido. La posición después del contenido insertado se añade al anillo de marca, sin activar la marca (véase Anillo de marca).

M-x insert-file-literally es como M-x insert-file, excepto que el fichero se inserta "literalmente": se trata como una secuencia de caracteres ASCII sin codificación o conversión especial, similar al comando M-x find-file-literally literalmente (ver Visiting).

M-x write-region es lo contrario de M-x insert-file, copia el contenido de la región en el archivo especificado. M-x append-to-file añade el texto de la región al final del archivo especificado. Consulte Acumulación de texto. La variable write-region-inhibit-fsync se aplica a estos comandos, así como a guardar archivos; consulte Personalizar Guardar.

M-x set-file-modes lee un nombre de archivo seguido de un modo de archivo y aplica ese modo de archivo al archivo especificado. Los modos de archivo, también llamados permisos de archivo, determinan si un archivo puede ser leído, escrito o ejecutado, y por quién. Este comando lee modos de archivo usando el mismo formato simbólico u octal aceptado por el comando chmod; por ejemplo, 'u+x' significa añadir permisos de ejecución para el usuario que posee el archivo. No tiene efecto en los sistemas operativos que no soportan modos de archivo. chmod es un alias de conveniencia para esta función.

34.12 Acceso a archivos comprimidos

Emacs descomprime automáticamente los archivos comprimidos cuando los visita, y los recomprime automáticamente si los modifica y los guarda. Emacs reconoce los archivos comprimidos por sus nombres de archivo. Los nombres de archivo que terminan en '.gz' indican un archivo comprimido con gzip. Otras terminaciones indican otros programas de compresión.

La descompresión y la compresión automáticas se aplican a todas las operaciones en las que Emacs utiliza el contenido de un archivo. Esto incluye visitarlo, guardarlo, insertar su contenido en un búfer, cargarlo y compilarlo en bytes.

Para desactivar esta función, escriba el comando M-x auto-compression-mode. Puede desactivarlo permanentemente personalizando la variable auto-compression-mode.

34.13 Archivo de archivos

Un archivo cuyo nombre termina en '.tar' es normalmente un archivo hecho por el programa tar. Emacs visualiza estos archivos en un modo especial llamado modo Tar, que proporciona una lista de contenido similar a la de Dired-like (ver Direkt). Puede desplazarse por la lista como lo haría en Dired, y visitar los subficheros contenidos en el archivo. Sin embargo, no todos los comandos Dired están disponibles en el modo Tar.

Si el modo de compresión automática está activado (ver Archivos comprimidos), el modo Tar también se utiliza para archivos comprimidos con extensiones '.tgz', .tar.Z y.tar.gz.

Las teclas e, f y <RET> extraen un archivo del componente en su propio búfer. Puede editarlo allí, y si guarda el buffer, la versión editada reemplazará a la versión en el buffer Tar. También se puede hacer clic con el ratón sobre el nombre del archivo en el búfer Tar. v extrae un archivo en un búfer en el modo Ver (ver Modo Ver). o extrae el archivo y lo muestra en otra ventana, de forma que se puede editar el archivo y operar sobre el archivo de forma simultánea.

d marca un archivo para ser eliminado cuando más tarde usa x, y u desmarca un archivo, como en Dired. C copia un archivo del archivo comprimido al disco y R renombra un archivo dentro del archivo comprimido. g revierte el búfer del archivo comprimido al disco. Las teclas M, G y O cambian los bits de permiso, del grupo y del propietario del archivo, respectivamente.

Al guardar el búfer Tar se escribe una nueva versión del archivo comprimido en el disco con los cambios realizados en los componentes.

No necesita el programa tar para usar el modo Tar; Emacs lee los archivos directamente. Sin embargo, el acceso a los archivos comprimidos requiere el programa de descompresión adecuado.

Se utiliza un modo de archivo separado pero similar para los archivos arc, jar, lzh, zip, rar, 7z y zoo, así como para los archivos exe que son ejecutables autoextraíbles.

Los enlaces de teclas del modo Archivo son similares a los del modo Tar, con la adición de la tecla m que marca un archivo para operaciones posteriores, y M-<DEL> que desmarca todos los archivos marcados. Además, la tecla a cambia la visualización de información detallada de los archivos, para aquellos tipos de archivo en los que no caben en una sola línea. Operaciones como renombrar un subfichero, o cambiar su modo o propietario, sólo se admiten para algunos de los formatos de archivo.

A diferencia del modo Tar, el modo Archive ejecuta los programas de archivo para desempaquetar y reempaquetar archivos. Sin embargo, no es necesario que estos programas miren el índice del archivo comprimido, sólo para extraer o manipular los subficheros del archivo comprimido. Los detalles de los nombres de los programas y sus opciones se pueden establecer personalizando el grupo 'Archive'.

34.14 Los archivos remotos

Puede hacer referencia a archivos en otras máquinas que utilizan una sintaxis especial de nombre de archivo:

/host:filename
/user@host:filename
/user@host#port:filename
/method:user@host:filename
/method:user@host#port:filename

Para llevar a cabo esta solicitud, Emacs utiliza un programa de inicio de sesión remoto como ftp, ssh, rlogin o telnet. Siempre puede especificar en el nombre de archivo qué método usar: por ejemplo, /ftp:user@host:filename usa FTP, mientras que /ssh:user@host:filename usa ssh. Si no especifica un método en el nombre del archivo, Emacs elige el método de la siguiente manera:

Si el nombre del host comienza por 'ftp. (con punto), Emacs utiliza FTP.
Si el nombre de usuario es 'ftp' o 'anónimo', Emacs utiliza FTP.
Si el método variable tramp-default-method está configurado en 'ftp', Emacs utiliza FTP.
Si ssh-agent se está ejecutando, Emacs utiliza scp.
De lo contrario, Emacs utiliza ssh.

Puede desactivar por completo la función de nombre de archivo remoto configurando la variable del tramp-mode como nil. Puede desactivar la función en casos individuales citando el nombre del archivo con '/:' (consulte Nombres de archivo citados).

El acceso remoto a los archivos a través de FTP es manejado por el paquete Ange-FTP, que se documenta a continuación. El acceso remoto a los archivos a través de los otros métodos es manejado por el paquete Tramp, que tiene su propio manual.

Cuando se utiliza el paquete Ange-FTP, Emacs inicia sesión a través de FTP utilizando el nombre de usuario, si se especifica en el nombre del archivo remoto. Si el usuario no está especificado, Emacs inicia sesión usando su nombre de usuario en el sistema local; pero si configura la variable ange-ftp-defaultt-user en una cadena, se utiliza esa cadena en su lugar. Al iniciar sesión, Emacs también puede solicitar una contraseña.

Por razones de rendimiento, Emacs no crea archivos de copia de seguridad para los archivos a los que se accede a través de FTP de forma predeterminada. Para ello, cambie la variable ange-ftp-make-backup-files a un valor non-nil.

De forma predeterminada, los archivos de almacenamiento automático para archivos remotos se realizan en el directorio de archivos temporales del equipo local, tal y como se especifica en la variable auto-save-file-name-transforms. Consulte Guardar archivos automáticamente.

Para visitar los archivos a los que se puede acceder a través de FTP anónimo, se utilizan nombres de usuario especiales 'anónimo' o 'ftp'. Las contraseñas para estos nombres de usuario se manejan de forma especial. La variable ange-ftp-generate-anonymous-password controla lo que sucede: si el valor de esta variable es una cadena, entonces esa cadena se usa como contraseña; si es non-nil (la predeterminada), entonces se usa el valor de la dirección de correo electrónico del usuario; si es nil, entonces Emacs le pide una contraseña como de costumbre (vea Contraseñas).

A veces es posible que no pueda acceder a los archivos de un equipo remoto porque un firewall entremedio bloquea la conexión por razones de seguridad. Si puede iniciar sesión en un equipo de puerta de enlace desde el que se puede acceder a los archivos de destino y cuyo servidor FTP admite las funciones de puerta de enlace, puede seguir utilizando nombres de archivos remotos; todo lo que tiene que hacer es especificar el nombre del equipo de puerta de enlace configurando la variable ange-ftp-gateway-host, y configurar ange-ftp-smart-gateway a t. De lo contrario, es posible que pueda hacer que los nombres de archivos remotos funcionen, pero el procedimiento es complejo. Puede leer las instrucciones escribiendo M-x finder-commentary <RET> ange-ftp <RET>.

34.15 Nombres de archivos citados

Puede citar un nombre de archivo absoluto para evitar que los caracteres especiales y su sintaxis tengan sus efectos especiales. La forma de hacerlo es añadir '/:' al principio.

Por ejemplo, puede citar un nombre de archivo local que parezca remoto, para evitar que sea tratado como un nombre de archivo remoto. Por lo tanto, si tiene un directorio llamado /foo: y un archivo llamado bar, puede referirse a ese archivo en Emacs como '/:/foo:/bar'.

/: también puede evitar que '~' sea tratado como un carácter especial para el directorio raíz de un usuario. Por ejemplo, /:/tmp/~hack se refiere a un archivo cuyo nombre es ~hack en el directorio /tmp.

Citar con '/:' es también una forma de introducir en el minibuffer un nombre de archivo que contenga '$'. Para que esto funcione, el '/:' debe estar al principio del contenido del minibúfer. (También puede duplicar cada '$'; vea Nombres de archivos con $.)

También puede citar caracteres comodín con '/:', para visitar. Por ejemplo, /:/tmp/foo*bar visita el archivo /tmp/foo*bar.

Otro método para obtener el mismo resultado es introducir /tmp/foo[*]bar, que es una especificación comodín que sólo coincide con /tmp/foo*bar. Sin embargo, en muchos casos no es necesario citar los caracteres comodín, ya que incluso si no se indican, se obtiene el resultado correcto. Por ejemplo, si el único nombre de archivo en /tmp que comienza con 'foo' y termina con 'bar' es foo*bar, entonces especificar /tmp/foo*bar sólo visitará /tmp/foo*bar.

34.16 Nombre del archivo de caché

Puede utilizar la caché de nombres de archivo para facilitar la localización de un archivo por nombre, sin tener que recordar exactamente dónde se encuentra. Al escribir un nombre de archivo en el minibuffer, C-<tab> (file-cache-minibuffer-complete) lo completa utilizando la caché de nombres de archivo. Si repite C-<tab>, esto hace un ciclo a través de las posibles completaciones de lo que había escrito originalmente (sin embargo, tenga en cuenta que el carácter C-<tab> no se puede escribir en la mayoría de las terminales de texto).

La caché de nombres de archivo no se llena automáticamente. En su lugar, cargue los nombres de los archivos en la caché utilizando estos comandos:

Mx archivo-cache-add-directorio <RET> directorio <RET>     Añadir el nombre de cada archivo en el directorio al nombre del archivo caché.
Mx archivo-cache-add-directorio usando hallar <RET> directorio <RET>        Añadir el nombre de cada archivo en el directorio y todos sus subdirectorios anidados para el nombre del archivo caché.
Mx archivo-cache-add-directorio-usando-localizar <RET> directorio <RET>     Añadir el nombre de cada archivo en el directorio y todos sus subdirectorios anidados para el nombre del archivo de caché, el uso de localizar a encontrar a todos ellos.
Mx archivo-cache-add-directory-list <RET> variables <RET>         Añadir el nombre de cada archivo en cada directorio que aparece en la variable al nombre de archivo de caché. Variables debe ser una variable Lisp cuyo valor es una lista de nombres de directorio, como load-path .
Mx archivo-cache-clear-cache <RET>  Borrar la caché; es decir, eliminar todos los nombres de archivo de la misma.

La caché de nombres de archivo no es persistente: se guarda y mantiene sólo durante la sesión de Emacs. Puede ver el contenido de la caché con el comando file-cache-display.

34.17 Funciones prácticas para buscar archivos

En esta sección, presentamos algunas funciones prácticas para encontrar archivos abiertos recientemente, leer los nombres de los archivos desde un búfer y ver archivos de imagen.

Si activa el modo Recentf, con M-x recentf-mode, el menú 'Archivo' incluye un submenú que contiene una lista de los archivos abiertos recientemente. M-x recentf-save-list guarda la lista actual de archivos recientes en un archivo y M-x recentf-edit-list la edita.

El comando M-x ffap generaliza el archivo encontrado con valores predeterminados heurísticos más potentes (ver FFAP), a menudo basados en el texto en el punto. El modo de Terminación Parcial ofrece otras características que extienden el archivo find-file, que puede ser usado con ffap. Vea Opciones de terminación.

Al visitar los archivos de imagen se selecciona automáticamente el modo Imagen. En este modo principal, puede escribir C-c C-c (image-toggle-display) para alternar entre mostrar el archivo como una imagen en el búfer de Emacs y mostrar su representación de texto subyacente (o byte en bruto). La visualización del archivo como imagen sólo funciona si Emacs está compilado con soporte para la visualización de dichas imágenes. Si la imagen visualizada es más ancha o más alta que el marco, las teclas de movimiento de punto habituales (C-f, C-p, etc.) hacen que se visualicen diferentes partes de la imagen. Si la imagen puede ser animada, el comando <RET> (image-toggle-animation) inicia o detiene la animación. La animación se reproduce una vez, a menos que la opción image-animate-loop sea non-nil. Actualmente, Emacs sólo admite animación en archivos GIF.

Si Emacs fue compilado con soporte para la librería ImageMagick, puede usar ImageMagick para renderizar una amplia variedad de imágenes. La variable imagemagick-enabled-types lista los tipos de imagen que Emacs puede renderizar usando ImageMagick; cada elemento en la lista debe ser un nombre interno de ImageMagick para un tipo de imagen, como un símbolo o una cadena equivalente (por ejemplo, BMP para imágenes.bmp). Para habilitar ImageMagick para todos los tipos de imagen posibles, cambie los tipos habilitados para imagemagick-enabled-types a t. La variable imagemagick-types-inhibit lista los tipos de imagen que nunca deberían ser renderizados usando ImageMagick, independientemente del valor de los tipos habilitados para imagemagick-enabled-types (la lista por defecto incluye tipos como C y HTML, que ImageMagick puede renderizar como una "imagen", pero Emacs no debería). Para desactivar ImageMagick por completo, cambie imagemagick-types-inhibit a t.

El paquete Image-Dired también se puede utilizar para ver imágenes en miniatura. Ver Image-Dired.

34.18 Conjuntos de archivos

Si edita regularmente un determinado grupo de ficheros, puede definirlos como un conjunto de ficheros. Esto le permite realizar ciertas operaciones, tales como visitas, consultas, reemplazar y comandos shell en todos los archivos a la vez. Para hacer uso de los conjuntos de archivos, primero debe agregar la expresión (filesets-init) a su archivo init (ver Init File). Esto añade un menú 'Filesets' a la barra de menús.

La forma más sencilla de definir un conjunto de archivos es añadiéndole archivos de uno en uno. Para añadir un archivo al nombre del conjunto de archivos, visite el archivo y escriba M-x filesets-add-buffer <RET> name <RET>. Si no hay un nombre de conjunto de archivos, se crea uno nuevo, que inicialmente contiene sólo el archivo actual. El comando M-x filesets-remove-buffer elimina el archivo actual de un conjunto de archivos.

También puede editar la lista de conjuntos de archivos directamente, con M-x filesets-edit (o seleccionando 'Edit Filesets' en el menú'Filesets'). La edición se realiza en un búfer de Personalización (ver Easy Customization). Normalmente, un conjunto de archivos es una simple lista de archivos, pero también puede definir un conjunto de archivos como una expresión regular que coincide con los nombres de archivos. Algunos ejemplos de estos conjuntos de archivos más complicados se muestran en el búfer Personalizar. Recuerde seleccionar 'Guardar para futuras sesiones' si desea utilizar los mismos conjuntos de archivos en futuras sesiones de Emacs.

Puede utilizar el comando M-x filesets-open para visitar todos los archivos de un conjunto de archivos, y M-x filesets-close para cerrarlos. Use M-x filesets-run-cmd para ejecutar un comando shell en todos los archivos de un conjunto de archivos. Estos comandos también están disponibles desde el menú 'Filesets', donde cada conjunto de archivos existente está representado por un submenú.

Ver Ver Version Control, para un concepto diferente de "conjuntos de archivos": grupos de archivos agrupados para operaciones de control de versiones. Los conjuntos de archivos de ese tipo no tienen nombre y no persisten en las sesiones de Emacs.

35 Usos varios en lo búferes

El texto que está editando en Emacs reside en un objeto llamado búfer. Cada vez que visita un archivo, se utiliza un búfer para guardar el texto del archivo. Cada vez que invoca a Dired, se utiliza un búfer para mantener el listado de directorios. Si envía un mensaje con C-x m, se utiliza un búfer para retener el texto del mensaje. Cuando se solicita la documentación de un comando, que aparece en un búfer llamado Ayuda.

Cada búfer tiene un nombre único, que puede ser de cualquier longitud. Cuando se muestra un búfer en una ventana, su nombre se muestra en la línea de modo (ver Línea de modo). La distinción entre mayúsculas y minúsculas es importante en los nombres de los búferes. La mayoría de los búferes se crean visitando archivos y sus nombres se derivan de los nombres de los archivos; sin embargo, también puede crear un búfer vacío con el nombre que desee. Un Emacs recién iniciado tiene varios búferes, incluyendo uno llamado scratch, que puede ser usado para evaluar expresiones Lisp y no está asociado con ningún archivo (ver Interacción Lisp).

En cualquier momento, se selecciona un solo búfer; lo llamamos el búfer actual. A veces decimos que un comando opera en "el buffer"; esto significa realmente que opera en el buffer actual. Cuando sólo hay una ventana de Emacs, el búfer que se muestra en esa ventana es el actual. Cuando hay varias ventanas, el búfer que se muestra en la ventana seleccionada es el actual. Ver Windows.

Aparte de su contenido textual, cada búfer registra varias piezas de información, como el archivo que está visitando (si lo hay), si está modificado, y qué modo principal y modos menores están en efecto (ver Modos). Éstos se almacenan en variables locales de búfer que pueden tener un valor diferente en cada búfer. Ver Locales.

El tamaño de un búfer no puede ser mayor que un máximo, que se define por la posición del búfer más grande representable por los números enteros de Emacs. Esto se debe a que Emacs rastrea las posiciones del búfer utilizando ese tipo de datos. Para máquinas típicas de 64 bits, este tamaño máximo de búfer es de 261 - 2 bytes, o aproximadamente 2 EiB. Para máquinas típicas de 32 bits, el máximo suele ser de 229 - 2 bytes, o unos 512 MiB. El tamaño de los búferes también está limitado por la cantidad de memoria en el sistema.

Seleccione Buffer:     Crear un nuevo buffer o volver a seleccionar uno antiguo.
Búferes de lista:      Obtener una lista de los búferes que existen.
Operaciones varias:    Renombrar; cambiar solo lectura; copiar texto.
Kill Buffer:           Buffers para matar que ya no necesita.
Varios Buffers:        Recorrer la lista de búferes y operar en varios de ellos.
Buffers Indirectos:    Un búfer indirecto comparte el texto de otro búfer.
Comodidad de búfer:    Características y personalización para el manejo de búferes.

35.1 Creación y selección de búferes

C-x b buffer <RET>
   Seleccione o cree un buffer llamado buffer (switch-to-buffer).

C-x 4 b buffer <RET>
   Similar, pero seleccione buffer en otra ventana (switch-to-buffer-other-window).

C-x 5 b buffer <RET>
   Similar, pero seleccione buffer en otro frame (switch-to-buffer-other-frame).

C-x <LEFT>
   Seleccione el búfer anterior en la lista de búferes (previous-buffer).

C-x <RIGHT>
   Seleccione el siguiente búfer de la lista de búferes (next-buffer).

C-u M-g M-g, C-u M-g g
   Leer un número n y desplazarse a la línea n en el último búfer seleccionado que no sea
   el búfer actual.

El comando C-x b (switch-to-buffer) lee un nombre de búfer utilizando el minibúfer. A continuación, hace que el búfer sea actual y lo muestra en la ventana seleccionada en ese momento. Una entrada vacía especifica el búfer que estaba actualizado más recientemente entre los que no se muestran en ninguna ventana.

Al introducir el nombre del búfer, puede utilizar los comandos habituales de finalización e historial (véase Minibúfer). Tenga en cuenta que C-x b, y los comandos relacionados, usan "permissive completion with confirmation" para completar el minibúfer: si escribe <RET> inmediatamente después de completar hasta un nombre de búfer inexistente, Emacs imprime '[Confirm]' y debe escribir un segundo <RET> para enviar ese nombre de búfer. Para obtener más detalles, consulte Finalizar salida.

Si especifica un búfer que no existe, C-x b crea un nuevo búfer vacío que no está visitando ningún archivo y lo selecciona para su edición. El valor predeterminado del modo principal de la variable determina el modo principal del nuevo búfer; el valor predeterminado es Modo fundamental. Vea Modos principales. Una razón para crear un nuevo búfer es utilizarlo para hacer notas temporales. Si intenta guardarlo, Emacs le pedirá el nombre de archivo que desea utilizar, y el modo principal del búfer se restablecerá teniendo en cuenta ese nombre de archivo (consulte Elegir modos).

Para cambiar cómodamente entre unos pocos búferes, utilice los comandos C-x <LEFT> y C-x <RIGHT>. C-x <LEFT> (previous-buffer) selecciona el búfer anterior (siguiendo el orden de la selección más reciente en el marco actual), mientras que C-x <RIGHT> (next-buffer) se desplaza a través de los búferes en la dirección inversa.

Para seleccionar un búfer en una ventana que no sea la actual, escriba C-x 4 b (switch-to-buffer-other-window). Esto solicita un nombre de búfer utilizando el minibúfer, muestra ese búfer en otra ventana y selecciona esa ventana.

Del mismo modo, C-x 5 b (switch-to-buffer-other-frame) solicita un nombre de búfer, muestra ese búfer en otro cuadro y selecciona ese cuadro. Si el búfer ya se está mostrando en una ventana en otro marco, Emacs selecciona esa ventana y marco en lugar de crear un nuevo marco.

Vea Mostrando Buffers, para ver cómo los comandos C-x 4 b y C-x 5 b hacen que la ventana y/o el marco se muestren.

Además, C-x C-f, y cualquier otro comando para visitar un archivo, también puede usarse para cambiar a un búfer de visita de archivos existente. Ver Visitas.

C-u M-g M-g, es decir, goto-line con un argumento de prefijo plano, lee un número n utilizando el minibúfer, selecciona el último búfer seleccionado que no sea el búfer actual en otra ventana y, a continuación, se desplaza hacia el principio de la línea n en ese búfer. Esto es principalmente útil en un búfer que se refiere a números de línea en otro búfer: si el punto está activado o justo después de un número, goto-line utiliza ese número como el valor por defecto para n. Tenga en cuenta que los argumentos del prefijo que no sean sólo C-u se comportan de forma diferente. C-u 4 M-g M-g pasa a la línea 4 del buffer corriente, sin leer un número del minibuffer. (Recuerde que M-g M-g sin argumento de prefijo lee un número n y luego se mueve al número de línea n en la memoria intermedia actual. Ver Punto de Movimiento.)

Emacs utiliza nombres de búfer que comienzan con un espacio para propósitos internos. Trata estos búferes de forma especial de manera menor, por ejemplo, por defecto no registran información de deshacer. Es mejor que evite utilizar dichos nombres de búfer usted mismo.

35.2 Listado de búferes existentes

C-x C-b Enumera los búferes existentes (list-buffers).

Para visualizar una lista de los búferes existentes, escriba C-x C-b. Cada línea de la lista muestra el nombre de un búfer, el modo principal y el archivo visitado. Los búferes se enumeran en el orden en que estaban actualizados; los búferes que estaban actualizados más recientemente son los primeros.

Un . en el primer campo de una línea indica que el búfer es actual.* %* indica un búfer de sólo lectura. * indica que el búfer está "modificado". Si se modifican varios búferes, puede ser el momento de guardar algunos con C-x s (ver Save Commands). He aquí un ejemplo de una lista de buffers:

CRM buffer     tamaño   modo               archivo

. * .emacs     3294     Emacs-Lisp         ~/.emacs
%   *Help*     101      Help
    search.c   86055    C                  ~/cvs/emacs/src/search.c
%   src        20959    Dired by name      ~/cvs/emacs/src/
  * *mail*     42       Mail
%   HELLO      1607     Fundamental        ~/cvs/emacs/etc/HELLO
%   NEWS       481184   Outline            ~/cvs/emacs/etc/NEWS
    *scratch*  191      Lisp Interaction
  * *Mensajes* 1554 Fundamental

El búfer Help fue creado por una petición de ayuda (ver Ayuda); no está visitando ningún archivo. El src del búfer fue hecho por Dired en el directorio ~/cvs/emacs/src/. Puede listar sólo los búferes que están visitando archivos dando al comando un argumento de prefijo, como en C-u C-x C-b.

La lista de buffers (list-buffers) omite los búferes cuyos nombres empiezan por un espacio, a menos que visiten archivos: estos búferes son utilizados internamente por Emacs.

35.3 Operaciones varias en el búfer

C-x C-q
   Cambiar el estado de sólo lectura del búfer (read-only-mode).

M-x rename-buffer <RET> nome <RET>
   Cambiar el nombre del búfer actual.

M-x rename-uniquely
   Renombrar únicamente el búfer actual añadiendo '<número>' al final.

M-x view-buffer <RET> buffer <RET>
   Desplácese a través del búfer. Consulte view mode.

Un búfer puede ser de sólo lectura, lo que significa que no se permiten los comandos para cambiar su contenido. La línea de modo indica búferes de sólo lectura con '%%' o '%*' cerca del margen izquierdo. Los búferes de sólo lectura son usualmente hechos por subsistemas como Dired y Rmail que tienen comandos especiales para operar sobre el texto; también visitando un archivo cuyo control de acceso dice que no se puede escribir.

El comando C-x C-q (read-only-mode) hace que un búfer de sólo lectura se pueda escribir y que un búfer en el que se puede escribir pase a ser de sólo lectura. Esto funciona configurando la variable buffer-read-only, que tiene un valor local en cada buffer y hace que el buffer sea read-only si su valor es non-nil. Si cambia la opción de view-read-only a un valor non-nil, haciendo que el búfer sea de sólo lectura con C-x C-q también se habilita el modo solo vista en el búfer (ver Modo Vista).

M-x rename-buffer cambia el nombre del búfer actual. Se especifica el nuevo nombre como un argumento de minibuffer; no hay ningún valor por defecto. Si especifica un nombre que se utiliza para algún otro búfer, se produce un error y no se realiza ningún cambio de nombre. M-x rename-uniquely renombra el búfer actual a un nombre similar con un sufijo numérico añadido para hacerlo diferente y único. Este comando no necesita argumento. Es útil para crear múltiples búferes de shell: si renombra el búfer shell, luego vuelve a hacer M-x shell, hace un nuevo búfer de shell llamado shell; mientras tanto, el antiguo búfer de shell continúa existiendo bajo su nuevo nombre. Este método también es bueno para búferes de correo, búferes de compilación y la mayoría de las características de Emacs que crean búferes especiales con nombres particulares. (Con algunas de estas características, como M-x compile y M-x grep, es necesario cambiar a otro búfer antes de usar el comando de nuevo, de lo contrario se reutilizará el búfer actual a pesar del cambio de nombre.)

Los comandos M-x append-to-buffer y M-x insert-buffer también se pueden utilizar para copiar texto de un búfer a otro. Consulte Acumulación de texto.

35.4 Los buffers matar

Si continúa una sesión de Emacs durante un tiempo, puede acumular un gran número de búferes. En ese caso, es posible que le resulte conveniente eliminar los búferes que ya no necesita. En la mayoría de los sistemas operativos, matar un búfer libera su espacio de vuelta al sistema operativo para que otros programas puedan usarlo. Aquí hay algunos comandos para matar los buffers:

C-x k bufername <RET>
   Mata el buffer bufername (kill-buffer).

M-x kill-some-buffers
   Ofrece matar cada buffer, uno por uno.

M-x kill-matching-buffers
   Ofrece matar todos los buffers que coincidan con una expresión regular.

C-x k (kill-buffer) mata un búfer, cuyo nombre se especifica en el minibúfer. El valor por defecto, usado si escribe <RET> en el minibuffer, es para matar el buffer actual. Si elimina el búfer actual, otro búfer se convierte en actual: uno que era actual en el pasado reciente pero que ahora no se muestra en ninguna ventana. Si solicita la eliminación de un búfer de visita de archivos que ha sido modificado, deberá confirmarlo con un "sí" antes de eliminar el búfer.

El comando M-x kill-some-buffers pregunta por cada búfer, uno por uno. Una respuesta de y significa matar el buffer, igual que kill-buffer. Este comando ignora los búferes cuyos nombres comienzan con un espacio, que son utilizados internamente por Emacs.

El comando M-x kill-matching-buffers pide una expresión regular y mata todos los buffers cuyos nombres coincidan con esa expresión. Ver Regexps. Al igual que los kill-some-buffers, pide confirmación antes de cada asesinato. Este comando normalmente ignora los búferes cuyos nombres comienzan con un espacio, que son utilizados internamente por Emacs. Para matar también los búferes internos, llame a los búferes de coincidencia de matanza con un argumento de prefijo.

La función Menú de búfer también es conveniente para matar varios búferes. Consulte Varios búferes.

Si desea hacer algo especial cada vez que se mata un búfer, puede añadir funciones hook al hook kill-buffer-hook (ver Hooks).

Si ejecuta una sesión de Emacs durante un período de días, como hacen muchas personas, puede llenarse con búferes que utilizó hace varios días. El comando M-x clean-buffer-list es una forma conveniente de purgarlos; mata todos los búferes no modificados que no se han usado en mucho tiempo. Un búfer ordinario se mata si no se ha mostrado durante tres días; sin embargo, puede especificar ciertos búferes que nunca deberían matarse automáticamente, y otros que deberían matarse si no se han utilizado durante una hora.

También puede hacer que esta purga del búfer se realice una vez al día, activando el modo Midnight (Medianoche). El modo de medianoche funciona todos los días a medianoche; a esa hora, ejecuta clean-buffer-list, o cualquier otra función que haya colocado en midnight-hook (ver hooks). Para habilitar el modo Midnight, utilice el búfer de personalización para establecer la variable midnight-mode en t. Consulte Personalización fácil.

35.5 Operativo en varios buffers

M-x buffer-menu
   Comience a editar un búfer que enumere todos los búferes de Emacs.

M-x buffer-menu-other-window
   Similar, pero en otra ventana.

El Buffer Menu abierto por C-x C-b (ver List Buffers) no se limita a listar los buffers. También le permite realizar varias operaciones en los búferes, a través de una interfaz similar a Dired (ver Dired). Puede guardar los búferes, matarlos (aquí llamado borrarlos, para mayor consistencia con Dired), o mostrarlos.

Para utilizar el menú Buffer, escriba C-x C-b y cambie a la ventana que muestra el búfer Buffer List. También puede escribir M-x buffer-name para abrir el menú del búfer en la ventana seleccionada. Alternativamente, el comando M-x buffer-menu-other-window abre el menu del Buffer en otra ventana, y selecciona esa ventana.

El Menú Buffer es un búfer de sólo lectura, y puede ser cambiado sólo a través de los comandos especiales descritos en esta sección. En este búfer se pueden utilizar los comandos habituales de movimiento del cursor. Los siguientes comandos se aplican al búfer descrito en la línea actual:

d
   Marcar el búfer para borrarlo (killing), luego mover el punto a la siguiente línea
   (Buffer-menu-delete). La petición de borrado se indica con el carácter 'D' en la línea,
   antes del nombre del búfer. La eliminación ocurre sólo cuando usted escribe el comando x
   (ver abajo).

C-d
   Como d, pero mueva el punto hacia arriba en lugar de hacia abajo (Buffer-menu-delete-backwards).

s
   Marque el búfer para guardarlo (Buffer-menu-save). El indicador de guardar se indica con el
   carácter 'S' en la línea, antes del nombre del búfer. El almacenamiento se produce sólo
   cuando escribe x. Puede solicitar tanto el almacenamiento como el borrado para el mismo búfer.

x
   Realizar todos los borrados marcados y guardar (Buffer-menu-execute).

u
   Quitar todas las marcas (flags) de la línea actual, y mover hacia abajo (Buffer-menu-unmark).

<DEL>
   Moverse a la línea anterior y eliminar los indicadores de esa línea (Buffer-menu-backup-unmark).

Los comandos para agregar o quitar flags d, C-d, s y u, aceptan un argumento numérico como un recuento de repetición.

Los siguientes comandos operan inmediatamente en el búfer que aparece en la línea actual. También aceptan un argumento numérico como un recuento de repetición.

~
   Marque el búfer como no modificado (Buffer-menu-not-modified). Vea Save commands.

%
   Conmuta el estado de sólo lectura del búfer (Buffer-menu-toggle-read-only). Véase Misc Buffer.

t
   Visitar el búfer como tabla de etiquetas (Buffer-menu-visit-tags-table). Ver Select tags table.

Los siguientes comandos se utilizan para seleccionar otro búfer o búferes:

q
   Salir del menú del búfer (quit-window). En su lugar se muestra el último búfer
   visible anteriormente.

<RET>, f
   Seleccione el búfer de esta línea, reemplazando el búfer *Buffer List* en su ventana
   (Buffer-menu-this-window).

o
   Seleccionar el búfer de esta línea en otra ventana, como en C-x 4 b, dejando visible
   *Lista de búferes* (Buffer-menu-other-window).

C-o
   Muestra el buffer de esta línea en otra ventana, sin seleccionarlo
   (Buffer-menu-switch-other-window).

1
   Seleccione el búfer de esta línea en una ventana de imagen completa (Buffer-menu-1-window).

2
   Configure dos ventanas en el marco actual, con el búfer de esta línea seleccionado en una,
   y un búfer anterior (aparte de *Lista de búferes*) en la otra (Buffer-menu-2-window).

b
   Enterrar el buffer de esta línea (Buffer-menu-bury).

m
   Marque el búfer de esta línea para que se muestre en otra ventana si sale con el comando v
   (Buffer-menu-mark). El indicador de la pantalla se indica con el carácter '>' al principio
   de la línea. (Una sola memoria intermedia puede no tener peticiones de borrado y visualización.)

v
   Seleccionar el búfer de esta línea, y también mostrar en otras ventanas los búferes marcados
   con el comando m (Buffer-menu-select). Si no ha marcado ningún búfer, este comando equivale a 1.

Los siguientes comandos afectan a toda la lista de búferes:

S
   Ordenar las entradas del menú Buffer según sus valores en la columna del punto.
   Con un argumento de prefijo numérico n, ordene de acuerdo a la columna n-ésima
   (tabulated-listt-sort).

T
   Borrar, o reinsertar, líneas para buffers que no sean de archivos (Buffer-menu-toggle-files-only).
   Este comando alterna la inclusión de dichos búferes en la lista de búferes.

Normalmente, el búfer Lista de búferes no se actualiza automáticamente cuando los búferes son creados y eliminados; su contenido es sólo texto. Si ha creado, eliminado o renombrado búferes, la forma de actualizar Lista de búferes para mostrar lo que ha hecho es escribir g (revert-buffer). Puede hacer que esto suceda regularmente cada segundo activando auto-revert-interval en este búfer, siempre y cuando no esté marcado como modificado. El modo Global Auto Revert se aplica al búfer Buffer List sólo si global-auto-revert-non-file-buffers es non-nil. Para más detalles, véase global-auto-revert-non-file-buffers.

35.6 Los buffers indirectos

Un búfer indirecto comparte el texto de otro búfer, que se denomina búfer base del búfer indirecto. En cierto modo es un buffer analógico de un enlace simbólico entre archivos.

M-x make-indirect-buffer <RET> base-buffer <RET> indirect-name <RET>
   Crear un buffer indirecto llamado indirect-name con buffer base base-buffer.

M-x clone-indirect-buffer <RET>
   Crear un buffer indirecto que es una copia doble del buffer actual.

C-x 4 c
   Crear un búfer indirecto que sea una copia doble del búfer actual, y seleccionarlo
   en otra ventana (clone-indirect-buffer-other-window).

El texto del búfer indirecto es siempre idéntico al texto de su búfer base; los cambios realizados editando uno de ellos son visibles inmediatamente en el otro. Pero en todos los demás aspectos, el buffer indirecto y su buffer base están completamente separados. Pueden tener diferentes nombres, diferentes valores de punto, diferentes estrechamientos, diferentes marcadores, diferentes modos principales y diferentes variables locales.

Un buffer indirecto no puede visitar un archivo, pero sí su buffer base. Si intenta guardar el buffer indirecto, esto realmente funciona guardando el buffer base. Matar el buffer base mata efectivamente el buffer indirecto, pero matar un buffer indirecto no tiene ningún efecto sobre su buffer base.

Una forma de utilizar los búferes indirectos es mostrar varias vistas de un contorno. Vea Vistas de contorno.

Una manera rápida y práctica de hacer un buffer indirecto es con el comando M-x clone-indirect-buffer. Crea y selecciona una memoria intermedia indirecta cuya base es la memoria intermedia actual. Con un argumento numérico, solicita el nombre del búfer indirecto; de lo contrario, utiliza el nombre del búfer actual, con un sufijo '<n>' añadido. C-x 4 c (clone-indirect-buffer-other-window) funciona como M-x clone-indirect-buffer, pero selecciona el nuevo buffer en otra ventana. Estas funciones ejecutan el hook clone-indirect-buffer-hook después de crear el buffer indirecto.

La forma más general de hacer un buffer indirecto es con el comando M-x make-indirect-buffer. Crea un búfer indirecto llamado indirect-name a partir de un base-buffer, pidiendo que ambos usen el minibúfer.

35.7 Características de conveniencia y personalización del manejo del búfer

Esta sección describe varios modos y características que hacen más conveniente el cambio entre buffers.

Uniquify:        Que los nombres de los búferes sean únicos con las partes del directorio.
Iswitchb:        Cambio entre buffers con substrings.
Menús de búfer:  Menú de búfer configurable.

35.7.1 Haciendo buffers de nombres únicos

Cuando varios búferes visitan archivos con nombres idénticos, Emacs debe darles nombres distintos. El método habitual para hacer únicos los nombres de los búferes añade '<2>', '<3>', etc. al final de los nombres de los búferes (todos menos uno de ellos).

Otros métodos funcionan añadiendo partes del directorio de cada archivo al nombre del búfer. Para seleccionar una, cargue la librería uniquify (por ejemplo, usando (require 'uniquify)), y personalice la variable uniquify-buffer-name-style (ver Easy Customization).

Para empezar, el método de denominación hacia adelante incluye parte del nombre del directorio del archivo al principio del nombre del búfer; usando este método, los búferes que visiten los archivos /u/rms/tmp/Makefile y /usr/projects/zaphod/Makefile se llamarán 'tmp/Makefile' y 'zaphod/Makefile', respectivamente (en lugar de 'Makefile' y 'Makefile<2>').

En contraste, el método de denominación posterior al reenvío llamaría a los búferes 'Makefile|tmp' y 'Makefile|zaphod', y el método de denominación inversa los llamaría 'Makefile\tmp' y 'Makefile\zaphod'. La diferencia no trivial entre post-envío y reverso ocurre cuando un solo nombre de directorio no es suficiente para distinguir dos archivos; entonces reverse pone los nombres de los directorios en orden inverso, de modo que /top/middle/file se convierte en 'file\middle\top', mientras que post-envío los pone en orden después del nombre del archivo, como en 'file|top/middle'.

La regla a seguir para poner los nombres de los directorios en el nombre del búfer no es muy importante si va a mirar los nombres de los búferes antes de escribir uno. Pero como usuario experimentado, si conoces la regla, no tendrás que mirar. Y entonces usted puede encontrar que una u otra regla es más fácil para que usted recuerde y aplique rápidamente.

35.7.2 Cambio entre buffers y uso de subcadenas

El modo menor global de Iswitchb proporciona una cómoda conmutación entre búferes utilizando las subcadenas de sus nombres. Reemplaza las definiciones normales de C-x b, C-x 4 b, C-x 5 b, y C-x 4 C-o con comandos alternativos que son algo más "inteligentes".

Cuando uno de estos comandos le pide un nombre de búfer, puede escribir sólo una subcadena del nombre que desea elegir. Al entrar en la subcadena, el modo Iswitchb muestra continuamente una lista de búferes que coinciden con la subcadena que ha escrito.

En cualquier momento, puede escribir <RET> para seleccionar el primer búfer de la lista. Por lo tanto, la forma de seleccionar un búfer en particular es convertirlo en el primero de la lista. Hay dos maneras de hacerlo. Puede escribir más del nombre del búfer y así reducir la lista, excluyendo los búferes no deseados por encima del deseado. Alternativamente, puede usar C-s y C-r para rotar la lista hasta que el búfer deseado esté primero.

<TAB> al introducir el nombre del búfer realiza la finalización de la cadena que ha introducido, basándose en la lista de búferes mostrada.

Para habilitar el modo Iswitchb, escriba M-x iswitchb-mode, o personalice la variable iswitchb-mode a t (ver Easy Customization).

35.7.3 Personalización de menús Buffer

M-x bs-show
   Hacer una lista de búferes similar M-x list-buffers pero personalizable.

M-x bs-show muestra una lista de búferes similar a la que normalmente muestra C-x C-b pero que puede personalizarse. Si lo prefiere a la lista de búferes habitual, puede enlazar este comando a C-x C-b. Para personalizar esta lista de búferes, utilice el grupo bs Custom (consulte Personalización fácil).

El modo menor global MSB ("MSB" significa "búfer de selección de ratón") proporciona un menú de búfer de ratón diferente y personalizable que usted puede preferir. Reemplaza los enlaces del menú mouse-buffer-menu, normalmente en C-Down-Mouse-1, en el menú del búfer de la barra de menús. Puede personalizar el menú en el grupo msb Custom.

36 Ventanas múltiples

Emacs puede dividir un marco en dos o más ventanas. Múltiples ventanas pueden mostrar partes de diferentes búferes, o diferentes partes de un búfer. Los marcos múltiples siempre implican ventanas múltiples, porque cada marco tiene su propio conjunto de ventanas. Cada ventana pertenece a un solo marco.

Ventana Básica:     Introducción a las ventanas de Emacs.
Dividir ventana:    Las ventanas nuevas se crean dividiendo las ventanas existentes.
Otra ventana:       Moverse a otra ventana o hacer algo con ella.
Ventana emergente:  Encontrar un archivo o búfer en otra ventana.
Modificar ventana:  Eliminar ventanas y cambiar sus tamaños.
Visualización:      Cómo selecciona Emacs una ventana para mostrar un búfer.
funciones:          Funciones cómodas para el manejo de ventanas.

36.1 Los conceptos de ventana en Emacs

Cada ventana de Emacs muestra un búfer Emacs en cualquier momento. Un único búfer puede aparecer en más de una ventana; si lo hace, cualquier cambio en su texto se muestra en todas las ventanas donde aparece. Pero estas ventanas pueden mostrar diferentes partes del buffer, porque cada ventana tiene su propio valor de punto.

En cualquier momento, una ventana de Emacs es la ventana seleccionada; el búfer que se muestra en esta ventana es el búfer actual. En las pantallas gráficas, el punto se indica con un cursor parpadeante sólido en la ventana seleccionada y con una caja hueca en las ventanas no seleccionadas. En los terminales de texto, el cursor sólo se dibuja en la ventana seleccionada. Ver Pantalla del Cursor.

Los comandos para mover un punto afectan al valor del punto sólo para la ventana Emacs seleccionada. No cambian el valor del punto en otras ventanas de Emacs, incluso en aquellas que muestran el mismo buffer. Lo mismo ocurre con los comandos de conmutación de búfer como C-x b; no afectan en absoluto a otras ventanas. Sin embargo, hay otros comandos como C-x 4 b que seleccionan una ventana diferente y cambian de buffers en ella. Además, todos los comandos que muestran información en una ventana, incluyendo (por ejemplo) C-h f (describe-function) y C-x C-b (list-buffers, funcionan cambiando los búferes en una ventana no seleccionada sin afectar la ventana seleccionada.

Cuando varias ventanas muestran el mismo búfer, pueden tener diferentes regiones, porque pueden tener diferentes valores de punto. Sin embargo, todos tienen el mismo valor para la marca, porque cada búfer tiene sólo una posición de marca.

Cada ventana tiene su propia línea de modo, que muestra el nombre del búfer, el estado de modificación y los modos mayor y menor del búfer que se muestra en la ventana. La línea de modo de la ventana seleccionada aparece en un color diferente. Ver Mode Line, para más detalles.

36.2 La división de ventanas

C-x 2
   Dividir la ventana seleccionada en dos ventanas, una encima de la otra (split-window-below).

C-x 3
   Dividir la ventana seleccionada en dos, colocadas una al lado de la otra (split-window-right).

C-Mouse-2
   En la línea de modo de una ventana, divida esa ventana.

C-x 2 (split-window-below) divide la ventana seleccionada en dos ventanas, una encima de la otra. Después de la división, la ventana seleccionada es la superior, y la ventana recién dividida está debajo. Ambas ventanas tienen el mismo valor de punto que antes, y muestran la misma parte del buffer (o lo más cerca posible de él). Si es necesario, las ventanas se desplazan para mantener el punto en pantalla. De forma predeterminada, cada una de las dos ventanas tiene la mitad de altura que la ventana original. Un argumento numérico positivo especifica cuántas líneas hay que dar a la ventana superior; un argumento numérico negativo especifica cuántas líneas hay que dar a la ventana inferior.

Si se cambia la variable split-window-keep-point a nil, C-x 2 ajusta la parte del buffer que muestran las dos ventanas, así como el valor del punto en cada ventana, para mantener el texto en la pantalla lo más cerca posible de lo que era antes; además, si el punto estaba en la mitad inferior de la ventana original, se selecciona la ventana inferior en lugar de la superior.

C-x 3 (split-window-right) divide la ventana seleccionada en dos ventanas una al lado de la otra. La ventana izquierda es la seleccionada; la ventana derecha muestra la misma parte del mismo búfer y tiene el mismo valor de punto. Un argumento numérico positivo especifica cuántas columnas hay que dar a la ventana izquierda; un argumento numérico negativo especifica cuántas columnas hay que dar a la ventana derecha.

Al dividir una ventana con C-x 3, cada ventana resultante ocupa menos que el ancho total del marco. Si se vuelve demasiado estrecho, el buffer puede ser difícil de leer si se utilizan líneas de continuación (ver Líneas de Continuación). Por lo tanto, Emacs cambia automáticamente al truncamiento de líneas si el ancho de la ventana es inferior a 50 columnas. Este truncamiento ocurre independientemente del valor de la variable truncate-lines (ver Truncamiento de la línea); en su lugar es controlado por la variable truncate-partial-width-windows. Si el valor de esta variable es un número entero positivo (el valor predeterminado es 50), que especifica el ancho mínimo de una ventana de ancho parcial antes de que se produzca el truncamiento automático de líneas; si el valor es nulo, se desactiva el truncamiento automático de líneas; y para cualquier otro valor no nulo, Emacs trunca líneas en todas las ventanas de ancho parcial independientemente de su ancho.

En los terminales de texto, las ventanas de lado a lado están separadas por un divisor vertical que se dibuja usando vertical-border.

Si hace clic en C-Mouse-2 en la línea de modo de una ventana, eso divide la ventana, colocando un divisor vertical donde hace clic. Dependiendo de cómo se compila Emacs, también puede dividir una ventana haciendo clic en C-Mouse-2 en la barra de desplazamiento, lo que coloca un divisor horizontal donde hace clic (esta función no funciona cuando Emacs utiliza barras de desplazamiento GTK+).

36.3 El uso de otras ventanas

C-x o
   Seleccione otra ventana (other-window).

C-M-v
   Desplazarse a la ventana siguiente (scroll-other-window).

Mouse-1
   En el área de texto de una ventana, selecciona la ventana y mueve el punto a la posición
   en la que se ha hecho clic. Al hacer clic en la línea de modo, se selecciona la ventana
   sin mover el punto en ella.

Con el teclado, puede cambiar de ventana escribiendo C-x o (other-window). Eso es una o, de "otro", no un cero. Cuando hay más de dos ventanas, este comando se mueve a través de todas las ventanas en un orden cíclico, generalmente de arriba hacia abajo y de izquierda a derecha. Después de la ventana de la derecha y de la inferior, vuelve a la de la esquina superior izquierda. Un argumento numérico significa mover varios pasos en el orden cíclico de las ventanas. Un argumento negativo se mueve alrededor del ciclo en el orden opuesto. Cuando el minibuffer está activo, el minibuffer es la última ventana del ciclo; se puede cambiar de la ventana del minibuffer a una de las otras ventanas, y después volver a cambiar y terminar de dar el argumento del minibuffer que se solicita. Ver Minibuffer Edit. Los comandos de desplazamiento habituales (ver Pantalla) se aplican sólo a la ventana seleccionada, pero hay un comando para desplazar la siguiente ventana. C-M-v (scroll-other-window) desplaza la ventana que C-x o seleccionaría. Toma argumentos, positivos y negativos, como C-v. (En el minibuffer, C-M-v se desplaza por la ventana de ayuda asociada con el minibuffer, si la hay, en lugar de por la siguiente ventana en el orden cíclico estándar; ver Minibuffer Edit.)

Si mouse-autoselect-window tiene un valor non-nil, al mover el ratón sobre una ventana diferente se selecciona esa ventana. Esta función está desac tivada de forma predeterminada.

36.4 Viendo en otra ventana

C-x 4 es una clave de prefijo para una variedad de comandos que cambian a un búfer en una ventana diferente, ya sea otra ventana existente o una nueva ventana creada dividiendo la ventana seleccionada. Consulte Opciones de ventana para ver cómo Emacs selecciona o crea la ventana que se va a utilizar.

C-x 4 bufname <RET>
   Seleccionar el buffer bufname en otra ventana (switch-to-buffer-other-window).

C-x 4 C-o bufname <RET>
   Mostrar nombre del buffer bufname en alguna ventana, sin intentar seleccionarlo (display-buffer).
   Consulte Visualización de búferes para obtener más información sobre cómo se selecciona la
   ventana.

C-x 4 f filename <RET>
   Visitar filename y seleccionar su búfer en otra ventana (find-file-other-window). Ver Visiting.

C-x 4 d directory <RET>
   Seleccionar un buffer Dired para el directorio directory en otra ventana (dired-other-window).
   Ver Dired.

C-x 4 m
   Comience a componer un mensaje de correo, similar a C-x m (ver Enviar correo), pero en otra
   ventana (mail-other-window).

C-x 4 .
   Encuentra una etiqueta en la tabla de etiquetas actuales, similar a M-. (ver tags), pero en
   otra ventana (find-tag-other-window).

C-x 4 r filename <RET>
   Visitar nombre de archivo de sólo lectura, y seleccionar su búfer en otra ventana
   (find-file-read-only-other-window). Ver Visitas.

36.5 Borrado y reordenando de ventanas

C-x 0
   Borrar la ventana seleccionada (delete-window).

C-x 1
   Eliminar todas las ventanas del marco seleccionado excepto la ventana seleccionada
   (delete-other-windows).

C-x 4 0
   Borrar la ventana seleccionada y matar el buffer que se mostraba en ella
   (kill-buffer-and-window). El último carácter de esta secuencia de teclas es un cero.

C-x ^
   Aumentar el tamaño de la ventana seleccionada (enlarge-window).

C-x }
   Ampliar la ventana seleccionada (enlarge-window-horizontally).

C-x {
   Reducir la ventana seleccionada (shrink-window-horizontally).

C-x -
   Encoger ventana si su buffer no necesita tantas líneas (shrink-window-if-larger-than-buffer).

C-x +
   Hacer que todas las ventanas tengan la misma altura (balance-windows)

.

Para eliminar la ventana seleccionada, escriba C-x 0 (delete-window). Una vez que se elimina una ventana, el espacio que ocupaba se asigna a una ventana adyacente (pero no a la ventana del minibuffer, incluso si está activa en ese momento). La eliminación de la ventana no tiene ningún efecto sobre el búfer que solía mostrar; el búfer sigue existiendo y todavía se puede cambiar con C-x b.

C-x 4 0 (kill-buffer-and-window) es un comando más fuerte que C-x 0; mata el buffer actual y luego elimina la ventana seleccionada.

C-x 1 (delete-other-windows) elimina todas las ventanas, excepto la seleccionada; la ventana seleccionada se expande para utilizar todo el marco. (Este comando no se puede utilizar mientras la ventana del minibúfer esté activa; al intentarlo, se indica un error).

El comando C-x ^ (enlarge-window) hace que la ventana seleccionada sea una línea más alta, ocupando espacio desde una ventana adyacente verticalmente sin cambiar la altura del marco. Con un argumento numérico positivo, este comando aumenta la altura de la ventana en tantas líneas; con un argumento negativo, reduce la altura en tantas líneas. Si no hay ventanas adyacentes verticalmente (es decir, la ventana está a la altura del marco completo), esto indica un error. El comando también señala un error si intenta reducir la altura de cualquier ventana por debajo de un cierto número mínimo de líneas, especificado por la variable window-min-height (el valor predeterminado es 4).

Del mismo modo, C-x } (enlarge-window-horizontally) hace que la ventana seleccionada sea más ancha, y C-x { (shrink-window-horizontally) la hace más estrecha. Estos comandos señalan un error si intenta reducir el ancho de cualquier ventana por debajo de un cierto número mínimo de columnas, especificado por la variable window-min-width (el valor predeterminado es 10).

C-x - (shrink-window-if-larger-than-buffer) reduce la altura de la ventana seleccionada, si es más alto de lo necesario para mostrar todo el texto del búfer que está mostrando. Da las líneas extra a otras ventanas en el marco.

También puede utilizar C-x + (balance-windows) para nivelar las alturas de todas las ventanas en el marco seleccionado.

Los clics del ratón en la línea de modo proporcionan otra forma de cambiar las alturas de las ventanas y de eliminarlas. Ver Mode Line Mouse.

36.6 Viendo un búfer en una ventana

Es una operación común de Emacs mostrar un "pop up" en algún buffer en respuesta a un comando de usuario. Hay diferentes maneras en las que los comandos hacen esto.

Muchos comandos, como C-x C-f (find-file), muestran el búfer "taking over" en la ventana seleccionada, esperando que la atención del usuario se desvíe a ese búfer. Estos comandos suelen funcionar llamando internamente a switch-to-buffer (ver Seleccionar búfer).

Algunos comandos intentan mostrar "inteligentemente", intentando no apoderarse de la ventana seleccionada, por ejemplo, dividiendo una nueva ventana y mostrando allí el búfer deseado. Estos comandos, que incluyen los distintos comandos de ayuda (véase Ayuda), funcionan llamando a display-buffer internally. Ver Window Choice, para más detalles.

Otros comandos hacen lo mismo que el búfer de visualización, y además seleccionan la ventana de visualización para que pueda empezar a editar su búfer. El comando C-x ` (next-error) es un ejemplo (ver Modo de compilación). Estos comandos funcionan llamando a la función pop-to-buffer internamente.

Los comandos con nombres que terminan en -other-window se comportan como una memoria intermedia de visualización, excepto que nunca se muestran en la ventana seleccionada. Varios de estos comandos están vinculados a la clave de prefijo C-x 4 (ver Ventana emergente).

Los comandos con nombres que terminan en –other-frame se comportan como display-buffer, excepto que (1) nunca se muestran en la ventana seleccionada y (2) prefieren crear un nuevo marco para mostrar el buffer deseado en lugar de dividir una ventana, como si la variable pop-up-frames estuviera configurado en t (ver Window Choice). Varios de estos comandos están encuadernados en la clave de prefijo C-x 5.

Window Choice: Cómo funciona el búfer de pantalla.

36.7 Cómo funciona el display-buffer

El comando display-buffer (así como los comandos que lo llaman internamente) elige una ventana para mostrar siguiendo los pasos que se indican a continuación.

En primer lugar, compruebe si el búfer debe mostrarse en la ventana seleccionada,
independientemente de otras consideraciones. Puede pedirle a Emacs que lo haga añadiendo
el nombre del búfer deseado a la lista de nombres de búferes de la misma ventana, o
añadiendo una expresión regular que coincida con la lista de redireccionamientos de la
misma ventana. Por defecto, estas variables son nil, por lo que se omite este paso.

De lo contrario, si el búfer ya se muestra en una ventana existente, "reutilizar" esa
ventana. Normalmente, sólo se consideran las ventanas del marco seleccionado, pero las
ventanas de otros marcos también son reutilizables si cambia los marcos emergentes (ver
abajo) a t.

De lo contrario, opcionalmente cree un nuevo marco y muestre el búfer allí. De forma
predeterminada, este paso se omite. Para habilitarlo, cambie los marcos emergentes de las
variables a un valor que no sea cero. El valor especial sólo gráfico significa hacer esto
sólo en pantallas gráficas.

De lo contrario, intente crear una nueva ventana dividiendo la ventana seleccionada, y
muestre el búfer en esa nueva ventana. La división puede ser vertical u horizontal,
dependiendo de las variables "split-height-threhold" y "split-width-threhold". Estas
variables deben tener valores enteros. Si el umbral de altura de división es menor que
la altura de la ventana seleccionada, la división coloca la nueva ventana debajo. De lo
contrario, si el umbral de anchura de división es menor que la anchura de la ventana,
la división coloca la nueva ventana a la derecha. Si ninguna de las dos condiciones se
mantiene, Emacs intenta dividir para que la nueva ventana esté por debajo, pero sólo
si la ventana no estaba dividida antes (para evitar una división excesiva).

De lo contrario, muestre el búfer en una ventana existente en el marco seleccionado.
Si todos los métodos anteriores fallan por cualquier razón, cree un nuevo marco y muestre
el búfer allí.

37 Características convenientes para el manejo de ventanas

El modo Winner es un modo menor global que registra los cambios en la configuración de la ventana (es decir, cómo se dividen los marcos en ventanas), de modo que se pueden "deshacer". Puede alternar el modo Winner con M-x winner-mode, o personalizando la variable winner-mode. Cuando el modo está activado, C-c left (winner-undo) deshace el último cambio de configuración de la ventana. Si cambias de opinión mientras deshaces, puedes rehacer los cambios que habías hecho usando C-c right (M-x winner-redo).

El modo de seguimiento (M-x follow-mode) sincroniza varias ventanas en el mismo búfer para que siempre muestren secciones adyacentes de ese búfer. Consulte Modo de seguimiento.

El paquete Windmove define comandos para moverse direccionalmente entre ventanas vecinas en un marco. M-x windmove-right selecciona la ventana inmediatamente a la derecha de la seleccionada actualmente, y de forma similar para las contrapartes "izquierda", "arriba" y "abajo". M-x windmove-default-keybindings une estos comandos a S-right etc.; al hacerlo, se desactiva la selección de turno para esas teclas (ver Selección de turno).

El comando M-x compare-windows le permite comparar el texto mostrado en diferentes ventanas. Consulte Comparación de archivos.

El modo Scroll All (M-x scroll-all-mode) es un modo menor global que hace que los comandos de desplazamiento y los comandos de movimiento de puntos se apliquen a cada una de las ventanas.

38 Marcos y pantallas gráficas

Cuando Emacs se inicia en una pantalla gráfica, por ejemplo, en el sistema X Window, ocupa una "ventana" gráfica a nivel de sistema. En este manual, lo llamamos marco, reservando la palabra "ventana" para la parte del marco utilizada para mostrar un buffer. Un marco contiene inicialmente una ventana, pero puede subdividirse en varias ventanas (ver Ventanas). Un marco normalmente también contiene una barra de menús, una barra de herramientas y un área de eco.

También puede crear marcos adicionales (véase Creación de marcos). Todos los marcos creados en la misma sesión de Emacs tienen acceso a los mismos búferes subyacentes y otros datos. Por ejemplo, si un búfer se muestra en más de un fotograma, cualquier cambio realizado en un fotograma se muestra inmediatamente en los otros fotogramas también.

Al escribir C-x C-c se cierran todos los frames de la pantalla actual y finaliza la sesión de Emacs si no hay frames abiertos en ninguna otra pantalla (consulte Salir). Para cerrar sólo el marco seleccionado, escriba C-x 5 0.

Este capítulo describe las características de Emacs específicas de las pantallas gráficas (especialmente los comandos del ratón) y las características para la gestión de múltiples frames. En los terminales de texto, muchas de estas características no están disponibles. Sin embargo, todavía es posible crear múltiples "marcos" en terminales de texto; tales marcos se muestran uno a la vez, llenando toda la pantalla del terminal (ver Terminales Sin Ventana). También es posible usar el ratón en algunos terminales de texto (ver Ratón de sólo texto, para hacerlo en sistemas GNU y Unix).

Comandos del ratón:         Mover, cortar y pegar con el ratón.
Ratón de Word y Line Mouse: Comandos del ratón para seleccionar palabras o líneas completas.
Referencias del ratón:      Usar el ratón para seleccionar un elemento de una lista.
Menú Clics del ratón:       Clics del ratón para abrir los menús.
Mode Line Mouse:            El ratón hace clic en la línea de modo.
Creación de frames:         Creación de marcos Emacs adicionales con varios contenidos.
Comandos del marco:         Iconificar, borrar y cambiar de fotograma.
Fuentes:                    Cambiar la fuente del marco.
Speedbar:                   Cómo hacer y usar un cuadro de Speedbar.
Múltiples pantallas:        Cómo una instancia de Emacs puede hablar con varias pantallas.
Parámetros del marco:       Cambiar los colores y otros modos de los marcos.
Barras de desplazamiento:   Cómo activar/desactivar barras de desplazamiento; cómo utilizarlas.
Arrastrar y soltar:         Usando arrastrar y soltar para abrir archivos e insertar texto.
Barras de menús:            Activación y desactivación de la barra de menús.
Barras de herramientas:     Activación y desactivación de la barra de herramientas.
Cuadros de diálogo:         Controlar el uso de los cuadros de diálogo.
Sugererir de herramientas:  Visualización de información en la posición actual del ratón.
Evitar el uso del ratón:    Evitar que el puntero del ratón oscurezca el texto.
Terminales sin ventanas:    Múltiples cuadros en terminales que muestran sólo uno.
Ratón de sólo texto:        Uso del ratón en terminales de texto.

38.1 Comandos del ratón para palabras y líneas

Mouse-1
   Mover el punto a donde usted hace clic (mouse-set-point).

Drag-Mouse-1
   Active la región alrededor del texto seleccionado arrastrando, y coloque el texto en la
   selección primaria (mouse-set-region).

Mouse-2
   Mover el punto al que ha hecho clic e insertar allí el contenido de la selección primaria
   (mouse-yank-primary).

Mouse-3
   Si la región está activa, mueva el extremo más cercano de la región a la posición del clic;
   de lo contrario, fije la marca en el valor actual del punto y el punto en la posición del clic.
   Guarda la región resultante en el anillo de la muerte; en un segundo clic, mátala (guarda con
   el ratón y luego mata).

El comando más básico del ratón es mouse-set-point, que se invoca haciendo clic con el botón izquierdo del ratón, Mouse-1, en el área de texto de una ventana. Esto mueve el punto a la posición en la que hizo clic. Si esa ventana no era la ventana seleccionada, se convierte en la ventana seleccionada.

Normalmente, si el marco en el que hizo clic no era el marco seleccionado, se convierte en el marco seleccionado, además de seleccionar la ventana y fijar el cursor. En el sistema X Window, puede cambiar esto ajustando la variable x-mouse-click-focus-ignore-position a t. En ese caso, el clic inicial en un marco no seleccionado sólo selecciona el marco, sin hacer nada más; al hacer clic de nuevo selecciona la ventana y establece la posición del cursor.

Si mantiene pulsado el botón Mouse-1 y "arrastra" el ratón sobre un tramo de texto, se activa la región alrededor de ese texto (mouse-set-region), colocando la marca en el lugar donde empezó a mantener pulsado el botón del ratón y señalando el lugar en el que lo soltó (ver Marca). Además, el texto de la región se convierte en la selección primaria (ver Selección primaria).

Si cambia la variable mouse-drag-copy-region a un valor non-nil, arrastrando el ratón sobre un tramo de texto también se añade el texto al anillo de muerte. El valor por defecto es nil.

Si mueve el ratón fuera de la parte superior o inferior de la ventana mientras arrastra, la ventana se desplaza a una velocidad constante hasta que vuelva a mover el ratón a la ventana. De esta manera, puede seleccionar regiones que no caben completamente en la pantalla. El número de líneas desplazadas por paso depende de la distancia al borde de la ventana a la que se haya desplazado el ratón; la variable mouse-scroll-min-line especifican un tamaño mínimo de paso.

Al hacer clic con el botón central del ratón, Mouse-2, se mueve el punto a la posición en la que ha hecho clic y se inserta el contenido de la selección primaria (Mouse-yank-primary). Ver Selección Primaria. Este comportamiento es consistente con otras aplicaciones X. Alternativamente, puede volver a enlazar el Mouse-2 con mouse-yank-at-click que realiza un paste en el punto.

Si cambia la variable mouse-yank-at-point a un valor non-nil, el Mouse-2 no mueve el punto; inserta el texto en el punto, independientemente de dónde haya hecho clic o incluso en cuál de las ventanas del marco haya hecho clic. Esta variable afecta tanto al mouse-yank-primary como al mouse-yank-at-click.

Haciendo clic con el botón derecho del ratón, Mouse-3, se ejecuta el comando mouse-save-then-kill. Esto realiza varias acciones dependiendo de dónde haga clic y del estado de la región:

Si no hay ninguna región activa, al hacer clic en Mouse-3 se activa la región, colocando la
marca donde estaba el punto y el punto en la posición en la que se hizo clic.

Si una región está activa, al hacer clic en Mouse-3 se ajusta el extremo más cercano de la
región moviéndola a la posición seleccionada. El texto de la región ajustada se copia en el
anillo de la muerte; si el texto de la región original ya estaba en el anillo de la muerte,
lo reemplaza allí.

Si originalmente especificó la región usando un ratón doble o Mouse-1, de modo que la región
se define para que conste de palabras o líneas enteras (ver  Word and Line Mouse), entonces
el ajuste de la región con el mouse-3 también procede por palabras o líneas enteras.

Si utiliza el Mouse-3 por segunda vez consecutiva, en el mismo lugar, eso mata la región ya
seleccionada. Por lo tanto, la forma más sencilla de eliminar texto con el ratón es hacer clic
en Mouse-1 en un extremo y, a continuación, hacer clic en Mouse-3 dos veces en el otro extremo.
Para copiar el texto en el anillo de la muerte sin borrarlo del búfer, presione el botón Mouse-3
sólo una vez o simplemente arrastre el texto con el Mouse-1. Entonces puedes copiarlo en otro
lugar tirando de él.

El comando mouse-save-then-kill también obedece a la variable mouse-drag-copy (descrita anteriormente). Si el valor es non-nil, entonces cuando el comando establece o ajusta la región activa, el texto en la región también se agrega al anillo de muerte. Si la última entrada de anillo de la muerte se ha añadido de la misma manera, esa entrada se sustituye en lugar de hacer una nueva entrada.

Siempre que configure la región utilizando cualquiera de los comandos del ratón descritos anteriormente, la marca se desactivará mediante cualquier comando de movimiento del cursor sin desplazar, además de las formas habituales de desactivación de la marca. Véase Selección de turnos.

Algunos ratones tienen una "rueda" que se puede utilizar para desplazarse. Emacs admite el desplazamiento de ventanas con la rueda del ratón, de forma predeterminada, en la mayoría de las pantallas gráficas. Para activar esta función, utilice M-x mouse-wheel-mode. Las variables mouse-wheel-follow-mouse y mouse-wheel-scroll-amount determinan dónde y en qué medida se desplazan los búferes. La velocidad progresiva variable de la rueda del ratón determina si la velocidad de desplazamiento está vinculada a la velocidad a la que se mueve la rueda.

38.2 Comandos del ratón para palabras y líneas

Estas variantes del Mouse-1 seleccionan palabras o líneas enteras a la vez. Emacs activa la región alrededor del texto seleccionado, que también se copia en el anillo de la muerte.

Doble-Ratón-1
   Seleccione el texto alrededor de la palabra sobre la que hace clic.

   Haciendo doble clic en un carácter con sintaxis de "símbolo" (por ejemplo, subrayado, en modo C)
   se selecciona el símbolo que rodea a ese carácter. Al hacer doble clic en un carácter con
   sintaxis de paréntesis abierto o cerrado, se selecciona el grupo paréntesis que comienza o
   termina dicho carácter. Al hacer doble clic en un carácter con sintaxis de delimitador de
   cadena (como una comilla simple o una comilla doble en C) se selecciona la constante de
   cadena (Emacs utiliza la heurística para averiguar si ese carácter es el principio o el final
   de la misma).

Arrastre-Ratón-1
   Seleccione el texto que arrastra, en forma de palabras completas.

Triple-Mouse-1
   Seleccione la línea en la que hace clic.

Triple-Drag-Mouse-1
   Seleccione el texto que arrastra, en forma de líneas enteras.

38.3 Después de referencias con el ratón

Algunos búferes de Emacs incluyen botones, hipervínculos o links: fragmentos de texto que realizan algún tipo de acción (por ejemplo, después de una referencia) cuando se activa (por ejemplo, haciendo clic sobre ellos). Por lo general, el texto de un botón se resalta visualmente: se subraya, o se dibuja una caja alrededor de él. Si mueve el puntero del ratón sobre un botón, la forma de los cambios de cursor del ratón y el botón se enciende. Si cambia la variable mouse-highlight a nil, Emacs desactiva esta resaltado.

Se puede activar un botón de punto que se mueve a la misma y tecleando <RET> , o haciendo clic en el mouse-1 o mouse-2 en el botón. Por ejemplo, en un buffere Dired, cada nombre de archivo es un botón; la activación provoca a Emacs para visitar ese archivo (ver Dired ). En un buffer Compilation, cada mensaje de error es un botón y activarlo visita el código fuente para este error (véase Recopilation ).

Aunque clic del mouse-1 en un botón normalmente se activa el botón, si se mantiene el botón del ratón para un período de tiempo antes de soltarlo (en concreto, durante más de 450 milisegundos), entonces Emacs mueve el punto donde hizo clic, sin necesidad de activar el botón. De esta manera, puede utilizar el ratón para mover el punto sobre un botón sin necesidad de activarlo. Al arrastrar el puntero del ratón sobre un botón o sobre dispone de su comportamiento habitual del establecimiento de la región, y no se activa el botón.

Puede cambiar la forma en que el mouse-1 se aplica a los botones personalizando la variable mouse-1-click-follows-link. Si el valor es un número entero positivo, eso determina cuánto tiempo hay que mantener pulsado el botón del ratón en milisegundos para cancelar la activación del botón; el valor por defecto es 450, como se describe en el párrafo anterior. Si el valor es nil, el mouse-1 sólo establece el punto en el que hizo clic y no activa los botones. Si el valor es doble, los clics dobles activan los botones, pero los clics simples sólo establecen el punto de ajuste.

Normalmente, el mouse-1 de un botón activa el botón incluso si se encuentra en una ventana no seleccionada. Si cambia la variable mouse-1-click-in-non-selected-windows a nil, Mouse-1 en un botón de una ventana no seleccionada se mueve hacia la posición seleccionada y selecciona esa ventana, sin activar el botón.

38.4 Clics del ratón para los menús

Varios clics del ratón con los modificadores <Ctrl> y <SHIFT> abren menús.

C-Mouse-1
   Este menú sirve para seleccionar un búfer.

   El modo menor global MSB ("búfer de selección de ratón") hace que este menú
   sea más inteligente y personalizable. Ver Menús de búfer.

C-Mouse-2
   Este menú contiene entradas para examinar plantillas y otras propiedades de texto,
   así como para configurarlas (esta última es principalmente útil cuando se edita
   texto enriquecido; véase Texto enriquecido).

C-Mouse-3
   Este menú es específico del modo. Para la mayoría de los modos, si el modo Barra
   de menús está activado, este menú tiene los mismos elementos que todos los menús
   de la barra de menús específicos del modo juntos. Algunos modos pueden especificar
   un menú diferente para este botón. Si el modo Barra de menús está desactivado,
   este menú contiene todos los elementos que estarían presentes en la barra de menús,
   no sólo los específicos del modo, para que pueda acceder a ellos sin tener que
   mostrar la barra de menús.

S-Mouse-1
   Este menú sirve para cambiar la cara predeterminada dentro del búfer de la ventana.
   Véase text scale.

Algunas aplicaciones gráficas utilizan Mouse-3 para un menú específico de modo. Si prefiere que el Mouse-3 de Emacs muestre este tipo de menú en lugar de ejecutar el comando Guardar con el ratón y luego matarlo, vuelva a enlazar el Mouse-3 añadiendo la siguiente línea al archivo init (consulte Rebinding de inicio):

(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)

38.5 Modo de línea de comandos del ratón

Puede utilizar clics del ratón en las líneas del modo de ventanas para seleccionar y manipularlas.

Algunas áreas de la línea de modo, como el nombre del búfer y los nombres de los modos mayor y menor, tienen sus propios enlaces especiales con el ratón. Estas áreas se resaltan al mantener el ratón sobre ellas, y se mostrará información sobre las fijaciones especiales (ver Sugerencias). Los comandos de esta sección no se aplican en esas áreas.

Mouse-1
   En una línea de modo selecciona la ventana a la que pertenece. Arrastrando el mouse-1 sobre
   la línea de modo, puede moverlo, cambiando así la altura de las ventanas de arriba y de
   abajo. Cambiando las alturas con el ratón de esta manera nunca se borran las ventanas,
   sólo se niega a hacer que cualquier ventana sea más pequeña que la altura mínima.

Mouse-2
   En una línea de modo expande esa ventana para llenar su marco.

Mouse-3
   En una línea de modo elimina la ventana a la que pertenece. Si el marco tiene sólo una
   ventana, no hace nada.

C-Mouse-2
   En una línea de modo divide esa ventana, produciendo dos ventanas lado a lado con el límite
   que atraviesa la posición de clic (ver Ventana dividida).

Además, al hacer clic y arrastrar el mouse-1 sobre el divisor entre dos líneas de lado a lado, puede mover el límite vertical a la izquierda o a la derecha.

38.6 Crear frames

La clave de prefijo C-x 5 es análoga a C-x 4. Mientras que cada comando C-x 4 muestra un buffer en una ventana diferente en el marco seleccionado (ver Ventana emergente), los comandos C-x 5 utilizan un marco diferente. Si una trama visible o iconificada ("minimizada") ya muestra el búfer solicitado, esa trama se eleva y se deiconifica ("no minimizada"); de lo contrario, se crea una nueva trama en la terminal de visualización actual.

Los distintos comandos de C-x 5 difieren en la forma en que encuentran o crean el búfer a seleccionar:

C-x 5 2
   Crear un nuevo marco (make-frame-command).

C-x 5 bufname <RET>
   Seleccionar bufname de búfer en otro frame. Esto ejecuta el cambio a otro frame de conmutación
   a búfer.

C-x 5 f filename <RET>
   Visitar filename y seleccionar su búfer en otro frame. Esto funciona con find-file-other-frame.
   Ver Visitas.

C-x 5 d directory <RET>
   Seleccionar un búfer deseado para el directorio directory en otro frame. Esto funciona a la
   perfección. Ver Dired.

C-x 5 m
   Comience a componer un mensaje de correo en otro frame. Esto corre el correo, en otro marco.
   Es la otra variante de C-x m. Ver Enviar correo.

C-x 5 .
   Buscar una etiqueta en la tabla de etiquetas actual en otro marco. Se ejecuta
   find-dtag-tag-otro-cuadro, la variante de múltiples frames M-... Ver Etiquetas.

C-x 5 r filename <RET>
   Visitar filename solo lectura, y seleccionar su búfer en otro frame. Ejecuta
   find-file-read-only-other-frame. Ver Visitas.

Puede controlar la apariencia y el comportamiento de los fotogramas recién creados especificando los parámetros del fotograma. Ver Parámetros del marco.

38.7 Comandos del marco

Los siguientes comandos se utilizan para eliminar y operar en marcos:

C-x 5 0
   Borrar el fotograma seleccionado (delete-frame). Esto indica un error si sólo hay un fotograma.

C-z
   Minimize o "iconificar" el marco Emacs seleccionado (suspend-frame). Vea Salir.

C-x 5 o
   Seleccione otro frame y levántelo. Si repite este comando, realiza un ciclo a través de todos
   los framesde su terminal.

C-x 5 1
   Borrar todos los frames del terminal actual, excepto el seleccionado.

El comando C-x 5 0 (delete-frame) elimina el frame seleccionado. Sin embargo, se negará a eliminar el último frame de una sesión de Emacs para evitar que pierda la capacidad de interactuar con la sesión de Emacs. Tenga en cuenta que cuando Emacs se ejecuta como un demonio (consulte Servidor Emacs), siempre hay un "marco virtual" que permanece después de todo, los marcos interactivos ordinarios se eliminan. En este caso, C-x 5 0 puede eliminar el último frame interactivo; puede utilizar emacsclient para volver a conectarse a la sesión de Emacs.

El comando C-x 5 1 (delete-other-frames) elimina todos los demás marcos del terminal actual (este terminal se refiere a una pantalla gráfica o a un terminal de texto; consulte Terminales sin ventana). Si la sesión de Emacs tiene marcos abiertos en otras pantallas gráficas o terminales de texto, éstos no se eliminan.

El comando C-x 5 o (other-frame) selecciona el frame siguiente en la terminal actual. Si está utilizando Emacs en el sistema X Window con un gestor de ventanas que selecciona (o da foco a) cualquier fame sobre el que se encuentre el cursor del ratón, tiene que cambiar la variable focus-follows-mouse a t para que este comando funcione correctamente. Luego invocando C-x 5 o también moverá el cursor del ratón hacia el marco elegido.

38.8 Fuentes

De forma predeterminada, Emacs muestra texto en pantallas gráficas utilizando una fuente monospace de 12 puntos. Hay diferentes maneras de especificar una fuente diferente:

- Haga clic en 'Set Default Font' en el menú 'Options'. Para guardar esto para futuras
sesiones, haga clic en `Guardar Opciones' en el menú `Opciones'.

- Agregue una línea a su archivo init, modificando la variable default frame-alist para
especificar el parámetro de fuente (ver Parámetros de marco), de esta manera:

    (add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-10"))

- Agregue una configuración de recursos emacs.font' a su archivo de recursos X, de esta manera:

    emacs.font: DejaVu Sans Mono-12

Debe reiniciar X, o usar el comando xrdb, para que el archivo de recursos X tenga efecto.
Ver Recursos. No cite los nombres de fuentes en los archivos fuente X.

- Si está ejecutando Emacs en el escritorio de GNOME, puede decirle a Emacs que use la fuente
del sistema por defecto estableciendo la variable font-use-system-font a t (por defecto es nil).
Para que esto funcione, Emacs debe haber sido compilado con el soporte de Gconf.

- Utilice la opción de línea de comandos '-fn' (o '--font'). Ver Fuente X.

Para comprobar la fuente que está utilizando actualmente, el comando C-u C-x = puede ser útil. Describe el carácter en el punto, y nombra la fuente en la que se representa.

En X, hay cuatro maneras diferentes de expresar un "nombre de fuente". La primera es usar un patrón Fontconfig. Los patrones de Fontconfig tienen la siguiente forma:

fontname[-fontsize][:name1=values1][:name2=values2]...

Dentro de este formato, se puede omitir cualquiera de los elementos entre corchetes. Aquí, fontname es el nombre de la familia de la fuente, como 'Monoespace' o 'DejaVu Sans Mono'; fontsize es el tamaño del punto de la fuente (el punto de una impresora es aproximadamente 1/72 de pulgada); y las entradas 'name=values' especifican ajustes como la inclinación y el peso de la fuente. Cada valor puede ser un valor individual o una lista de valores separados por comas. Además, algunos valores de propiedad son válidos con un solo tipo de nombre de propiedad, en cuyo caso la parte `nombre=' puede omitirse.

Aquí hay una lista de propiedades de fuentes comunes:

slant'
   Uno de 'itálico', 'obligatorio', o 'romano'.

weight'
   Uno de 'light', 'medium', 'demibold', 'bold' o 'black'.

stile'
   Algunas fuentes definen estilos especiales que son una combinación de inclinación y peso.
   Por ejemplo,'Dejavu Sans' define el estilo 'book', que anula las propiedades inclinación y peso.

width'
   Uno de 'condensed', 'normal', o 'expanded'.

Espacing'
   Uno de monospace', 'proportional', 'dual-width', or 'charcell'.

Aquí hay algunos ejemplos de patrones de Fontconfig:

Monospace
Monospace-12
Monospace-12:bold
DejaVu Sans Mono:bold:italic
Monospace-12:weight=bold:slant=italic

Para una descripción más detallada de los patrones de Fontconfig, vea el manual de Fontconfig, que se distribuye con Fontconfig y está disponible en línea en https://www.freedesktop.org/software/fontconfig/fontconfig-user.html.

La segunda forma de especificar una fuente es usar un patrón de fuentes GTK. Estos tienen la sintaxis

fontname [properties] [fontsize]

donde fontname es el nomre de la familia, properties es una lista de valores de propiedad separados por espacios, y fontsize es el tamaño del punto. Las propiedades que puede especificar para los patrones de fuentes GTK son las siguientes:

Propiedades de inclinación: 'Italic' o 'Oblique'. Si se omite, por defecto es romana.
Propiedades de peso:        'Bold', 'Book', 'Light', 'Medium', 'Semi-bold', o 'Ultra-light'. Si
      se omite, se entenderá que el peso es "Medium".
Propiedades de ancho:       'Semi-Condensed' o 'Condensed'. Si se omite, se utiliza el ancho
      predeterminado.

Aquí hay algunos ejemplos de patrones de fuentes GTK:

Monospace 12
Monospace Bold Italic 12

La tercera forma de especificar una fuente es usar un XLFD (X Logical Font Description). Este es el método tradicional para especificar las fuentes bajo X. Cada XLFD consta de catorce palabras o números, separados por guiones, como éste:

-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

Un carácter comodín ('*') en un XLFD coincide con cualquier secuencia de caracteres (incluyendo ninguno), y '?' coincide con cualquier carácter. Sin embargo, la coincidencia depende de la implementación y puede ser inexacta cuando los caracteres comodín coinciden con los guiones de un nombre largo. Para obtener resultados fiables, suministre los 14 guiones y utilice comodines sólo dentro de un campo. El caso es insignificante en un XLFD. La sintaxis para un XLFD es la siguiente:

-maker-family-weight-slant-widthtype-style...
...-pixels-height-horiz-vert-spacing-width-registry-encoding

Las entradas tienen los siguientes significados:

maker
   El nombre del fabricante de la fuente.

family
   El nombre de la familia tipográfica (por ejemplo, 'courier').

weight
   El peso de la fuente; normalmente 'bold', 'medium' o 'light'. Algunos nombres de fuentes
   admiten otros valores.

slant
   La inclinación de la fuente; normalmente `r' (roman), `i' (cursiva), `o' (oblicuo),
   `ri' (cursiva inversa), u `ot' (otro). Algunos nombres de fuentes admiten otros valores.

widthtype
   El ancho de la fuente; normalmente 'normal', 'condensed', 'semicondensed', or 'extended'.
   Algunos nombres de fuentes admiten otros valores.

style
   Un nombre de estilo adicional opcional. Normalmente está vacío; la mayoría de los XLFDs
   tienen dos guiones seguidos en este punto.

pixels
   La altura de la fuente, en pixels.

height
   La altura de la fuente en la pantalla, medida en décimas de punto de una impresora.
   Este es el tamaño del punto de la fuente, multiplicado por diez. Para una resolución vertical
   dada, la altura y los píxeles son proporcionales; por lo tanto, es común especificar sólo uno
   de ellos y usar "*" para el otro.

horiz
   Resolución horizontal, en píxeles por pulgada, de la pantalla a la que está destinada la fuente.

vert
   Resolución vertical, en píxeles por pulgada, de la pantalla a la que está destinada la fuente.
   Normalmente la resolución de las fuentes en su sistema es el valor correcto para su pantalla;
   por lo tanto, usted normalmente especifica '*' para este caso.

espacing
   Esto es 'm' (monospace), 'p' (proportional) o 'c' (carácter de celda).

width
   El ancho medio de los caracteres, en píxeles, multiplicado por diez.

registry, encoding
   El juego de caracteres de la fuente X que la fuente representa. (Los juegos de caracteres de
   tipo X no son los mismos que los juegos de caracteres de Emacs, pero son similares.) Puede
   utilizar el programa xfontsel para comprobar qué opciones tiene. Normalmente debería usar
   'iso8859' para el Registro y '1' para la codificación.

El cuarto y último método para especificar una fuente es usar un "apodo de fuente". Algunas fuentes tienen nombres de usuario más cortos, que puede utilizar en lugar de una especificación de fuente normal. Por ejemplo,'6x13' equivale a

-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

En X, Emacs reconoce dos tipos de fuentes: las fuentes del lado del cliente, que son proporcionadas por las bibliotecas Xft y Fontconfig, y las fuentes del lado del servidor, que son proporcionadas por el propio servidor X. La mayoría de las fuentes del lado del cliente admiten funciones de fuentes avanzadas como antialiasing y subpixel, mientras que las fuentes del lado del servidor no lo hacen. Los patrones Fontconfig y GTK coinciden sólo con las fuentes del lado del cliente.

Probablemente querrá utilizar una fuente predeterminada de ancho fijo, es decir, una fuente en la que todos los caracteres tengan el mismo ancho. Para las fuentes Xft y Fontconfig, puede utilizar el comando fc-list para listar las fuentes de ancho fijo disponibles, de esta manera:

fc-list :spacing=mono fc-list :spacing=charcell

Para las fuentes X del lado del servidor, puede utilizar el programa xlsfonts para listar las fuentes de ancho fijo disponibles, de esta manera:

xlsfonts -fn '*x*' | egrep "^[0-9]+x[0-9]+"
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*'
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'

Cualquier fuente con 'm' o 'c' en el campo de espaciado del XLFD es una fuente de ancho fijo. Para ver cómo se ve una fuente en particular, use el comando xfd. Por ejemplo:

xfd -fn 6x13

muestra la fuente completa '6x13'.

Mientras ejecuta Emacs, también puede establecer la fuente de un tipo específico de texto (consulte Caras) o de un marco en particular (consulte Parámetros de marco).

38.9 Marcos speedbar

El speedbar es un cuadro especial para navegar cómodamente en otro cuadro u operar en él. El speedbar, cuando existe, siempre está asociado a un cuadro específico, llamado su cuadro adjunto; todas las operaciones del speedbar actúan sobre ese cuadro.

Escriba M-x speedbar para crear el panel de control y asociarlo con el cuadro actual. Para descartar la barra de velocidad, escriba M-x speedbar otra vez, o seleccione la barra de velocidad y escriba q. (También puede borrar la fotograma de la barra de velocidad como cualquier otra fotograma de Emacs.) Si desea asociar la barra de velocidad con un frame diferente, llame al frame M-x speedbar desde ese frame.

El speedbar puede funcionar de varios modos. Su modo por defecto es el modo de visualización de archivos, que muestra los archivos en el directorio actual de la ventana seleccionada del marco adjunto, un archivo por línea. Al hacer clic en un nombre de archivo se visita ese archivo en la ventana seleccionada del marco adjunto, y al hacer clic en el nombre de un directorio se muestra ese directorio en la barra de herramientas (ver Referencias del ratón). Cada línea también tiene una casilla, '[+]' o '<+>>', en la que puede hacer clic para expandir el contenido de ese elemento. La expansión de un directorio añade el contenido de ese directorio a la pantalla del indicador de velocidad, debajo de la propia línea del directorio. Al expandir un archivo normal se añade una lista de las etiquetas de ese archivo a la pantalla del indicador de velocidad; puede hacer clic en el nombre de una etiqueta para saltar a esa etiqueta en la ventana seleccionada del marco adjunto. Cuando se expande un archivo o directorio, el '[+]' cambia a '[-]'; puede hacer clic en esa casilla para contratar el elemento, ocultando su contenido.

Usted también navega a través de la barra de velocidades usando el teclado. Escribir <RET> mientras el punto está en una línea en el speedbar equivale a hacer clic en el elemento de la línea actual, y <SPC> expande o contrae el elemento. U muestra el directorio principal del directorio actual. Para copiar, borrar o renombrar el archivo en la línea actual, escriba C, D y R respectivamente. Para crear un nuevo directorio, escriba M.

Otro modo de barra de velocidad de uso general es el modo de visualización de búfer; en este modo, la barra de velocidad muestra una lista de búferes Emacs. Para cambiar a este modo, escriba b en el speedbar. Para volver al modo de visualización de archivos, escriba f. También puede cambiar el modo de visualización haciendo clic en el mouse-3 en cualquier lugar de la ventana del panel de control (o en el mouse-1 en la línea de modo) y seleccionando 'Displays' en el menú emergente.

Algunos modos principales, como el modo Rmail, Info y GUD, tienen formas especializadas de colocar elementos útiles en el speedbar para que los seleccione. Por ejemplo, en el modo Rmail, la barra de velocidad muestra una lista de archivos Rmail y permite mover el mensaje actual a otro archivo Rmail haciendo clic en su casilla '<M>'.

Para más detalles sobre el uso y la programación del panel de control, véase Panel de control.

38.10 Pantallas múltiples

Emacs puede hablar con más de una pantalla X. Inicialmente, Emacs utiliza sólo una pantalla, la especificada con la variable de entorno DISPLAY o con la opción '–display' (consulte Opciones iniciales). Para conectarse a otra pantalla, utilice el comando make-frame-on-display. Para crear un nuevo frame:

M-x make-frame-on-display <RET> display <RET>

Un solo servidor X puede manejar más de una pantalla. Cuando se abren marcos en dos pantallas pertenecientes a un mismo servidor, Emacs sabe que comparten un único teclado, y trata todos los comandos que llegan desde estas pantallas como un único flujo de entrada.

Cuando se abren marcos en diferentes servidores X, Emacs crea una secuencia de entrada separada para cada servidor. Cada servidor también tiene su propio marco seleccionado. Los comandos que se introducen con un servidor X en particular se aplican al marco seleccionado de ese servidor.

38.11 Parámetros del marco

Se puede controlar la apariencia por defecto y el comportamiento de todos los marcos mediante la especificación de una lista predeterminada de la variable default-frame-alist. Su valor debe ser una lista de entradas, cada una especificando un nombre de parámetro y un valor para ese parámetro. Estas entradas tienen efecto cuando Emacs crea un nuevo marco, incluyendo el marco inicial.

Por ejemplo, puede agregar las siguientes líneas a su archivo de inicio (ver Init File ) para ajustar el ancho del marco predeterminado de 90 columnas de caracteres, la altura del marco predeterminado de 40 filas de caracteres y la fuente predeterminada a ' Monospace-10 ':

(add-to-list 'default-frame-alist '(width . 90))
(add-to-list 'default-frame-alist '(height . 40))
(add-to-list 'default-frame-alist '(font . "Monospace-10"))

También puede especificar una lista de parámetros de frame que se aplican sólo a al frame inicial, mediante la personalización de la variable initial-frame-alist.

Si en Emacs se compila el uso de un kit de herramientas X, los parámetros del frame que especifican los colores y tipos de letra no afectan a los menús y la barra de menús, ya que aquellos son atraídos por el conjunto de herramientas y no directamente por Emacs.

38.12 Barras de desplazamiento

En las pantallas gráficas, hay una barra de desplazamiento en el lateral de cada ventana de Emacs. Al hacer clic en Mouse-1 en los botones arriba y abajo de la barra de desplazamiento, se desplaza la ventana por una línea a la vez. Al hacer clic en Mouse-1 por encima o por debajo de la caja interior de la barra de desplazamiento, se desplaza la ventana casi a toda la altura de la ventana, como M-v y C-v respectivamente (ver Punto de movimiento). Arrastrando la caja interior se desplaza continuamente.

Si Emacs está compilado en el sistema X Window sin soporte de X toolkit, la barra de desplazamiento se comporta de forma diferente. Al hacer clic en Mouse-1 en cualquier parte de la barra de desplazamiento se desplaza hacia adelante como C-v, mientras que Mouse-3 se desplaza hacia atrás como M-v. Al hacer clic en Mouse-2 en la barra de desplazamiento, puede arrastrar el cuadro interior hacia arriba y hacia abajo.

Para cambiar el uso de las barras de desplazamiento, escriba M-x scroll-bar-mode. Este comando se aplica a todos los marcos, incluidos los que aún no se han creado. Para cambiar las barras de desplazamiento sólo para el fotograma seleccionado, utilice el comando M-x toggle-scroll-bar.

Para controlar el uso de las barras de desplazamiento al inicio, personalice la variable scroll-bar-mode. Su valor debe ser right (poner barras de desplazamiento en el lado derecho de las ventanas), left (ponerlas en el lado izquierdo), o nil (deshabilitar barras de desplazamiento). De forma predeterminada, Emacs coloca las barras de desplazamiento a la derecha si se compiló con soporte GTK+ en el sistema X Window, y en MS Windows o Mac OS; Emacs coloca las barras de desplazamiento a la izquierda si se compiló en el sistema X Window sin soporte GTK+ (siguiendo la antigua convención para aplicaciones X).

También puede utilizar el recurso X 'verticalScrollBars' para activar o desactivar las barras de desplazamiento (ver Recursos). Para controlar el ancho de la barra de desplazamiento, cambie el parámetro scroll-bar-width (véase Parámetros del marco)

38.13 Arrastrar y soltar

En la mayoría de los entornos gráficos de escritorio, Emacs tiene un soporte básico para las operaciones de arrastrar y soltar. Por ejemplo, colocar texto en un marco de Emacs inserta el texto en el que se deja caer. Al soltar un archivo en un marco de Emacs visitas ese archivo. Como caso especial, soltando el archivo en un buffer Dired se mueve o se copia el archivo (de acuerdo con las convenciones de la aplicación que viene) en el directorio que se muestra en ese búfer.

Al soltar un archivo, normalmente lo visita en la ventana que cae . Si prefiere visitar el archivo en una nueva ventana, en tales casos, personalizar la variable dnd-open-file-other-window.

38.14 Las barras de menús

Puede alternar el uso de las barras de menús con M-x menu-bar-mode. Sin argumentos, este comando cambia el modo de barra de menú, un modo menor global. Con un argumento, el comando activa el modo de menús de Barra de si el argumento es positivo, si el argumento no es positivo. Para controlar el uso de las barras de menú en el arranque, modifique la variable menu-bar-mode.

Los usuarios expertos a menudo desactivar la barra de menú, especialmente en terminales de texto, siempre que sea aconsejable una línea adicional disponible para el texto. Si la barra de menú está apagado, todavía se puede hacer aparecer un menú de su contenido con el C-Ratón-3 en una pantalla que soporta menús emergentes. Ver Menú clics de ratón .

Ver Barra de menús , para obtener información sobre cómo llamar a comandos de la barra de menús. Ver Recursos X , sobre la personalización del aspecto visual de los menús de la barra de menú.

38.15 Barras de herramientas

En las pantallas gráficas, Emacs coloca una barra de herramientas en la parte superior de cada cuadro, justo debajo de la barra de menús. Se trata de una fila de iconos sobre los que puede hacer clic con el ratón para invocar varios comandos.

La barra de herramientas global (predeterminada) contiene comandos generales. Algunos modos principales definen sus propias barras de herramientas; cuando un búfer con un modo tan importante es actual, la barra de herramientas del modo reemplaza a la barra de herramientas global.

Para cambiar el uso de las barras de herramientas, escriba M-x tool-bar-mode. Este comando se aplica a todos los marcos, incluidos los que aún no se han creado. Para controlar el uso de las barras de herramientas al inicio, personalice la variable tool-bar-mode.

Cuando Emacs está compilado con soporte GTK+, cada elemento de la barra de herramientas puede consistir en una imagen, una etiqueta de texto o ambos. De forma predeterminada, Emacs sigue la configuración de estilo de barra de herramientas del escritorio Gnome; si no se define ninguna, muestra los elementos de la barra de herramientas como simples imágenes. Para imponer un estilo de barra de herramientas específico, personalice la variable tool-bar-style.

También puede controlar la posición de la barra de herramientas de la barra de herramientas de GTK+ con el parámetro tool-bar-position. Ver Parámetros del marco.

38.16 El uso de cuadros de diálogo

Un cuadro de diálogo es un tipo especial de menú para hacerle una pregunta de sí o no o alguna otra pregunta especial. Muchos comandos de Emacs utilizan un cuadro de diálogo para hacer una pregunta de sí o no, si ha utilizado el ratón para invocar el comando que condujo a la pregunta.

Para desactivar el uso de los cuadros de diálogo, cambie la variable use-dialog-box a nil. En ese caso, Emacs siempre realiza avisos de sí o no utilizando el área de eco y la entrada de teclado. Esta variable también controla si se deben utilizar ventanas de selección de archivos (pero no son compatibles en todas las plataformas).

Una ventana de selección de archivos es un tipo especial de cuadro de diálogo para pedir nombres de archivos. Puede personalizar el diálogo con la variable use-file-dialog para suprimir el uso de ventanas de selección de archivos, incluso si todavía desea otros tipos de diálogos. Esta variable no tiene efecto si ha suprimido todos los cuadros de diálogo con la variable use-dialog-box.

Cuando Emacs se compila con soporte GTK+, utiliza el diálogo "selector de archivos" de GTK+. Emacs añade un botón de conmutación adicional a este cuadro de diálogo, que puede utilizar para activar o desactivar la visualización de archivos ocultos (archivos que empiezan con un punto) en ese cuadro de diálogo. Si desea que esta opción esté activada de forma predeterminada, cambie la variable x-gtk-show-hidden-files a t. Además, Emacs añade texto de ayuda al cuadro de diálogo del selector de archivos GTK+; para desactivar este texto de ayuda, cambie la variable x-gtk-file-dialog-help-text de ayuda a nil.

38.17 La información sobre herramientas

Los tooltips son pequeñas ventanas que muestran información de texto en la posición actual del ratón. Se activan cuando hay una pausa en el movimiento del ratón sobre alguna parte significativa del texto de una ventana, o la línea de modo, o alguna otra parte del marco de Emacs, como un botón de la barra de herramientas o un elemento del menú.

Puede alternar el uso de los tooltips con el comando M-x tooltip-mode. Cuando el modo Tooltip está desactivado, el texto de ayuda se muestra en el área de eco. Para controlar el uso de los tooltips al inicio, personalice la variable tooltip-mode.

La variable tooltip-delay especifica cuánto tiempo debe esperar Emacs antes de mostrar un tooltip. Para opciones de personalización adicionales para mostrar consejos de herramientas, utilice M-x customize-group <RET> tooltip <RET>.

Si Emacs está construido con soporte para GTK+, muestra consejos de herramientas a través de GTK+, y la apariencia predeterminada de herramientas de GTK+. Para desactivar esto, cambie la variable x-gtk-use-system-tooltips a nil. Si hace esto, o si Emacs se construye sin soporte GTK+, la mayoría de los atributos del texto del tooltip se especifican por la cara del tooltip y por los recursos X (vea X Resources).

Los tooltips de GUD son herramientas especiales que muestran los valores de las variables al depurar un programa con GUD. Consulte Operación del depurador.

38.18 evitar el ratón

En los terminales gráficos, el puntero del ratón puede oscurecer el texto en el marco de Emacs. Emacs ofrece dos métodos para evitar este problema.

En primer lugar, Emacs oculta el puntero del ratón cada vez que escribe un carácter que se inserta automáticamente, si el puntero se encuentra dentro de un marco de Emacs; al mover el puntero del ratón se vuelve visible de nuevo. Para desactivar esta función, ajuste la variable make-pointer-invisible a nil.

En segundo lugar, puede utilizar el modo de Evasión del Ratón, un modo menor, para mantener el puntero del ratón alejado del punto. Para utilizar el modo de Evitar el Ratón, personalice la variable mouse-avoidance-mode. Puede establecer varios valores para mover el ratón de varias maneras:

banish
   Mueva el puntero a una esquina del marco con cualquier tecla pulsada. Puede personalizar la
   variable mouse-avoidance-banish-position para especificar adónde va el puntero cuando es
   desterrado.

exile
   Desterrar el puntero del ratón sólo si el cursor se acerca demasiado, y permitirle regresar
   una vez que el cursor esté fuera del camino.

jump
   Si el cursor se acerca demasiado al puntero, desplace el puntero por una distancia y
   dirección aleatorias.

animate
   Como saltar, pero muestra pasos a lo largo del camino para la ilusión de movimiento.

cat-and-mnouse
   lo mismo que animate.

proteus
   Como animate, pero también cambia la forma del puntero del ratón.

También puede utilizar el comando M-x mouse-avoidance-mode para habilitar el modo. Cada vez que el modo Evasión del Ratón mueve el ratón, también eleva el frame.

38.19 Terminales sin ventana

En un terminal de texto, Emacs sólo puede mostrar un cuadro Emacs a la vez. Sin embargo, todavía puede crear múltiples tramas Emacs y cambiar entre ellas. Cambiar los marcos de estos terminales es muy parecido a cambiar entre diferentes configuraciones de ventanas.

Utilice C-x 5 2 para crear un nuevo marco y cambie a él; utilice C-x 5 o para desplazarse por los marcos existentes; utilice C-x 5 0 para eliminar el marco actual.

Cada cuadro tiene un número para distinguirlo. Si su terminal sólo puede mostrar una imagen a la vez, el número n de la imagen seleccionada aparece cerca del principio de la línea de modo, en la forma 'Fn'.

'Fn' es de hecho el nombre inicial del marco. Puede dar a los marcos nombres más significativos si lo desea, y puede seleccionar un marco por su nombre. Utilice el comando M-x set-frame-name <RET> name <RET> para especificar un nuevo nombre para el marco seleccionado, y utilice M-x select-frame-by-name <RET> name <RET> para seleccionar un marco según su nombre. El nombre que especifique aparece en la línea de modo cuando se selecciona el marco.

38.20 Uso del ratón en terminales de texto

Algunos terminales de texto admiten clics del ratón en la ventana del terminal.

En un emulador de terminal compatible con xterm, puede utilizar el modo M-x xterm-mouse-mode para dar a Emacs control sobre los usos sencillos del ratón; básicamente, sólo se admiten los clics individuales no modificados. La funcionalidad normal del ratón xterm para estos clics sigue estando disponible manteniendo pulsada la tecla Mayúsculas cuando se pulsa el botón del ratón. El modo Ratón Xterm es un modo menor global (ver Modos Menores). La repetición del comando desactiva el modo de nuevo.

En la consola de GNU/Linux, puede usar el modo M-x gpm-mouse-mode para habilitar el soporte de ratón. Debe tener el servidor gpm instalado y funcionando en su sistema para que esto funcione.

39 Apoyo Internacional de conjuntos de caracteres

Emacs es compatible con una amplia variedad de caracteres internacionales, incluyendo variantes europeas y vietnamitas del alfabeto latino, así como el cirílico, devanagari (para el hindi y marathi), etíope, griego, Han (para el chino y japonés), Hangul (para el coreano), hebreo, IPA, kannada, Lao, malayalam, tamil, tailandés, tibetano, y las secuencias de comandos vietnamitas. Emacs también soporta varias codificaciones de estos caracteres que son utilizados por otro software internacionalizado, tales como procesadores de texto y programas de correo

Emacs permite editar texto con caracteres internacionales mediante el apoyo a todas las actividades relacionadas con:

Puede visitar archivos con caracteres no ASCII, guardar texto no ASCII y pasar texto no ASCII
entre Emacs y los programas que invoca (como compiladores, correctores ortográficos y correos).
La configuración del entorno lingüístico (véase Entornos lingüísticos) se encarga de
configurar los sistemas de codificación y otras opciones para un idioma o cultura específicos.
También puede especificar cómo Emacs debe codificar o decodificar texto para cada comando;
consulte Codificación de texto.

Puede visualizar caracteres no ASCII codificados por los distintos guiones. Esto funciona
utilizando las fuentes adecuadas en las pantallas gráficas (véase Definición de conjuntos
de fuentes) y enviando códigos especiales a las pantallas de texto (véase Codificación de
terminales). Si algunos caracteres se muestran incorrectamente, consulte la sección Caracteres
no visualizables, donde se describen los posibles problemas y se explica cómo resolverlos.

Los caracteres de los guiones cuyo orden natural del texto es de derecha a izquierda se
reordenan para mostrarlos (ver Edición bidireccional). Estas escrituras incluyen árabe, hebreo,
sirio, tailandés y algunos otros.

Puede insertar caracteres no ASCII o buscarlos. Para ello, puede especificar un método de
entrada (véase Seleccionar método de entrada) adecuado para su idioma, o utilizar el método
de entrada predeterminado configurado al seleccionar su entorno de idioma. Si el teclado
puede producir caracteres no ASCII, puede seleccionar un sistema de codificación de teclado
adecuado (consulte Codificación de terminal) y Emacs aceptará esos caracteres. También se
pueden introducir caracteres latinos-1 utilizando el prefijo C-x 8, ver Modo Unibyte. Con
el sistema X Window, la configuración locale debe establecerse en un valor apropiado para
asegurarse de que Emacs interpreta correctamente las entradas del teclado; consulte la
sección locales.

El resto de este capítulo describe estas cuestiones en detalle.

Caracteres internacionales:   Conceptos básicos de los caracteres multibyte.
Desactivación de Multibyte:   Control de la utilización de caracteres multibyte.
Entornos lingüísticos:        Configurando las cosas para el idioma que usas.
Métodos de entrada:           Introducir caracteres de texto que no están en el teclado.
Seleccione Método de entrada: Especificar su elección de métodos de entrada.
Sistemas de codificación:     Conversión de juegos de caracteres al leer y escribir archivos.
Reconocer la codificación:    Cómo calcula Emacs qué conversión utilizar.
Especificar codificación:     Especificación del sistema de codificación de un archivo.
Codificación salida:          Elección de sistemas de codificación para la salida.
Codificación texto:           Elección que se utilizará para el texto del archivo.
Codificación comunicación:    Sistemas de codificación para la comunicación entre procesos.
Codificación nombre archivo:  Sistemas de codificación para nombres de archivos.
Codificación terminales:      Codificación para la conversión de la entrada/salida de terminal.
Conjuntos de fuentes:         Colecciones de fuentes que cubren todo el espectro de caracteres.
Definicion de fuentes:         Definir un nuevo conjunto de fuentes.
Modificación fuentes:         Modificar un conjunto de fuentes existente.
Los que no se pueden mostrar: Cuando los caracteres no se muestran.
Modo Unibyte:                 Elegir caracteres europeo para utilizar sin caracteres multibyte.
Charsets:                     Cómo agrupa Emacs sus códigos de caracteres internos.
Edición bidireccional:        Soporte para scripts de derecha a izquierda.

39.1 Introducción a los conjuntos de caracteres internacionales

Los usuarios de juegos de caracteres internacionales y escrituras han establecido muchos sistemas de codificación más o menos estándares para almacenar archivos. Estos sistemas de codificación son típicamente el multibyte, significando que las secuencias de dos o más bytes se usan para representar caracteres no ASCII individuales.

Internamente, Emacs usa su propia codificación de carácter del multibyte, que es un superjuego del estándar de Unicode. Esta codificación interna permite que caracteres de casi cada escritura conocida se entremezclen en un sólo buffer o cadena. Emacs traduce entre la codificación de carácter del multibyte y otros sistemas de codificación leyendo y escribiendo archivos, y cambiando datos con subprocesos.

La orden C-h h (view-hello-file) es el archivo etc/HELLO, que ilustra varias escrituras mostrando cómo decir «hola» en muchas lenguas. ¿Si algunos caracteres no se pueden mostrar en su terminal, aparecen como '?' o como cajas huecas (ver Caracteres Undisplayable).

Los teclados, hasta en los países donde estos juegos de caracteres se usan, generalmente no tienen llaves para todos los caracteres en ellos. Puede insertar caracteres que su teclado no apoya, usando C-q (quoted-insert) o C-x 8 <ret> (insert-char). Ver inserting text. Emacs también apoya varios métodos de entrada, típicamente uno para cada escritura o lengua, que hacen más fácil escribir caracteres en la escritura. Ver Métodos de la Entrada.

La clave de prefijo C-x <RET> se utiliza para comandos que pertenecen a caracteres multibyte, sistemas de codificación y métodos de entrada.

El comando C-x = (what-cursor-position) muestra información sobre el carácter en el punto. Además de la posición del carácter, que se describió en Información de posición, este comando muestra cómo se codifica el carácter. Por ejemplo, muestra la siguiente línea en el área de eco para el carácter 'c':

Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53

Los cuatro valores después de 'Char:' describen el carácter que sigue al punto, primero mostrándolo y luego dando su código de carácter en decimal, octal y hexadecimal. Para un carácter multibyte no ASCII, éstos van seguidos de un "file" y de la representación del carácter, en hexadecimal, en el sistema de codificación del búfer, si ese sistema de codificación codifica el carácter de forma segura y con un único byte (véase Sistemas de codificación). Si la codificación del carácter es superior a un byte, Emacs muestra 'file ….'.

Como caso especial, si el carácter se encuentra en el rango de 128 (0200 octales) a 159 (0237 octales), representa un byte "bruto" que no corresponde a ningún carácter visualizable específico. Dicho "carácter" se encuentra dentro del conjunto de caracteres de control de ocho bits y se muestra como un código de caracteres octal escapado. En este caso, C-x = muestra ' 'part of display ….' en lugar de 'file'.

Con un argumento de prefijo (C-u C-x =), este comando muestra una descripción detallada del carácter en una ventana:

El nombre del juego de caracteres y los códigos que identifican el carácter dentro de ese
juego de caracteres; los caracteres ASCII se identifican como pertenecientes al juego de
caracteres ascii.

Sintaxis y categorías del caracter.

Las codificaciones del carácter, tanto internamente en el búfer, como externamente si se
guardara el archivo.

Qué teclas escribir para introducir el carácter en el método de entrada actual (si admite
el carácter).

Si está ejecutando Emacs en una pantalla gráfica, el nombre de la fuente y el código del
carácter. Si está ejecutando Emacs en un terminal de texto, los códigos se envían al terminal.

Las propiedades de texto del carácter, incluyendo cualquier cara que no sea la predeterminada
utilizada para mostrar el carácter, y cualquier sobreimpresión que lo contenga.

He aquí un ejemplo que muestra el carácter latino-1 A con acento grave, en un búfer cuyo sistema de codificación es UTF-8 en UNIX:

             position: 1 of 1 (0%), column: 0
            character: À (displayed as À) (codepoint 192, #o300, #xc0)
    preferred charset: unicode (Unicode (ISO10646))
code point in charset: 0xC0
               syntax: w       which means: word
             category: .:Base, L:Left-to-right (strong),
                       j:Japanese, l:Latin, v:Viet
          buffer code: #xC3 #x80
            file code: not encodable by coding system undecided-unix
              display: by this font (glyph code)
    xft:-unknown-DejaVu Sans Mono-normal-normal-
        normal-*-13-*-*-*-m-0-iso10646-1 (#x82)

Character code properties: customize what to show
  name: LATIN CAPITAL LETTER A WITH GRAVE
  old-name: LATIN CAPITAL LETTER A GRAVE
  general-category: Lu (Letter, Uppercase)
  decomposition: (65 768) ('A' '`')

39.2 Desactivación de caracteres multibyte

Por defecto, Emacs se inicia en modo multibyte: almacena el contenido de los búferes y cadenas mediante una codificación interna que representa caracteres no ASCII mediante secuencias multibyte. El modo multibyte le permite utilizar todos los lenguajes y scripts soportados sin limitaciones.

En circunstancias muy especiales, es posible que desee desactivar la compatibilidad con caracteres multibyte para un búfer específico. Cuando los caracteres multibyte están desactivados en un búfer, lo llamamos modo unibyte. En modo unibyte, cada carácter del búfer tiene un código de caracteres que va de 0 a 255 (0377 octal); de 0 a 127 (0177 octal) representan caracteres ASCII, y de 128 (0200 octal) a 255 (0377 octal) representan caracteres no ASCII.

Para editar un archivo en particular en la representación de unibyte, visítelo usando find-file-literally. Ver Visitas. Puede convertir un búfer multibyte en unibyte guardándolo en un archivo, matando el búfer y visitando el archivo de nuevo con find-file-literally. Alternativamente, puede utilizar C-x <RET> c (universal-coding-system-argument) y especificar 'raw-text' como sistema de codificación con el que visitar o guardar un archivo. Ver Codificación de texto. A diferencia de find-file-literally, encontrar un archivo como 'raw-text' no deshabilita la conversión de formato, la descompresión o la selección automática de modo.

Emacs normalmente carga archivos Lisp como multibyte. Esto incluye el archivo de inicialización de Emacs, .emacs, y los archivos de inicialización de paquetes como Gnus. Sin embargo, puede especificar la carga de unibytes para un archivo Lisp en particular, añadiendo una entrada 'coding: raw-text' en una sección de variables locales del archivo. Véase Especificar codificación. Entonces ese archivo siempre se carga como texto unibyte. También puede cargar un archivo Lisp como unibyte, en cualquier momento, escribiendo C-x <RET> c raw-text <RET> inmediatamente antes de cargarlo.

La variable local de búfer enable-multibyte-characters es non-nil en los búferes multibyte, y nil en los unibyte. La línea de modo también indica si un búfer es multibyte o no. Véase Línea de modo. Con una pantalla gráfica, en un búfer multibyte, la parte de la línea de modo que indica el juego de caracteres tiene un tooltip que (entre otras cosas) dice que el búfer es multibyte. En una memoria intermedia de unibyte, el indicador de juego de caracteres está ausente. Por lo tanto, en un búfer de unibyte (cuando se utiliza una pantalla gráfica) normalmente no hay nada antes de la indicación de la convención de fin de línea del archivo visitado (dos puntos, barra invertida, etc.), a menos que se esté utilizando un método de entrada.

Puede desactivar el soporte multibyte en un búfer específico invoque el comando toggle-enable-multibyte-characters en ese búfer.

39.3 Entornos de lenguaje

Todos los juegos de caracteres soportados son compatibles con búferes de Emacs siempre están habilitados caracteres de varios bytes; no hay necesidad de seleccionar un idioma en particular con el fin de mostrar sus caracteres. Sin embargo, es importante seleccionar un entorno de idioma con el fin de establecer diversos valores predeterminados. En términos generales, el entorno de idioma representa una opción de escritura preferido en lugar de una elección de la lengua.

Los controles del entorno lenguaje que los sistemas de codificación de reconocer al leer un texto (ver Reconocer Coding ). Esto se aplica a los archivos, el correo entrante, y cualquier otro texto que lee en Emacs. También puede especificar el sistema de codificación por defecto para utilizar cuando se crea un archivo. Cada entorno de idioma también especifica un método de entrada por defecto.

Para seleccionar un entorno de idioma, personalizar current-language-environment o utilice el comando M-x set-language-environment . No hace ninguna diferencia lo que es búfer actual cuando se utiliza este comando, porque los efectos se aplican globalmente a la sesión de Emacs. Los entornos de idioma soportados (véase la variable language-info-alist) incluyen:

|---------------+-----------------+-------------+----------------------+--------------|
| ASCII         | Belarusian      | Bengali     | Brazilian-Portuguese | Bulgarian    |
| Cham          | Chinese-BIG5    | Chinese-CNS | Chinese-EUC-TW       | Chinese-GB   |
| Chinese-GBK   | Chinese-GB18030 | Croatian    | Cyrillic-Alt         | Cyrillic-ISO |
| Cyrillic-KOI8 | Czech           | Devanagari  | Dutch                | English      |
| Esperanto     | Ethiopic        | French      | Georgian             | German       |
| Greek         | Gujarati        | Hebrew      | IPA                  | Italian      |
| Japanese      | Kannada         | Khmer       | Korean               | Lao          |
| Latin-1       | Latin-2         | Latin-3     | Latin-4              | Latin-5      |
| Latin-6       | Latin-7         | Latin-8     | Latin-9              | Latvian      |
| Lithuanian    | Malayalam       | Oriya       | Polish               | Punjabi      |
| Romanian      | Russian         | Sinhala     | Slovak               | Slovenian    |
| Spanish       | Swedish         | TaiViet     | Tajik                | Tamil        |
| Telugu        | Thai            | Tibetan     | Turkish              | UTF-8        |
| Ukrainian     | Vietnamese      | Welsh       | Windows-1255         |              |
|---------------+-----------------+-------------+----------------------+--------------|

Para mostrar la secuencia de comandos (s) que utiliza el entorno de idioma en una pantalla gráfica, es necesario tener fuentes adecuadas. Ver Fontsets, para más detalles sobre la configuración de los tipos de letra.

Algunos sistemas operativos permiten especificar la configuración regional del juego de caracteres que está utilizando mediante el establecimiento de las variables de entorno local LCALL, LCCTYPE o LANG. (Si hay más de uno de ellos se establece, la primera que es no vacío especifica la configuración regional para este fin.) Durante el inicio, Emacs mira hacia arriba el nombre de su entorno local del juego de caracteres en la tabla de alias de configuración regional del sistema, si se corresponde con su nombre canónico con las entradas del valor de las variables locale-charset-language-names y locale-language-names (los últimos prevalecen sobre los anteriores), y selecciona el entorno de idioma correspondiente, si se encuentra una coincidencia. También ajusta el sistema de exposición y la codificación terminal, el sistema de codificación de la configuración regional, el sistema de codificación preferido según sea necesario para la configuración regional, y por último, pero no menos importante, la forma de Emacs descodifica los caracteres no ASCII enviados por su teclado.

Si modifica el LCALL, LCCTYPE, o variables de entorno LANG mientras se ejecuta Emacs (mediante el uso de M-x setenv ), es posible que desee invocar la función set-locale-environment para reajustar el entorno de idioma desde la nueva ubicación.

La función set-locale-environment utiliza normalmente el sistema de codificación preferido establecido por el entorno de idioma para decodificar los mensajes del sistema. Pero si el entorno local coincide con una entrada en la variable locale-preferred-coding-systems, Emacs usa el sistema de codificación correspondiente en su lugar lugar. Por ejemplo, si la configuración regional 'jaJP.PCK' tiene coincidencias con japoneses-Shift-JIS en locale-preferred-coding-systems, Emacs utiliza esa codificación a pesar de que podría utilizar normalmente japonés-iso-8bit.

Puede anular el entorno de idioma elegido al iniciar con el uso explícito del comando set-language-environment, o con la personalización de current-language-environment en su archivo init de emacs.

Para mostrar información sobre los efectos de un determinado entorno de lenguaje lang-env, utilice el comando C-h L lang-env <RET> (describe-language-environment). Esto le indica para qué idiomas es útil este entorno de idioma y enumera los juegos de caracteres, los sistemas de codificación y los métodos de entrada que lo acompañan. También muestra algunos ejemplos de texto para ilustrar los scripts utilizados en este entorno de lenguaje. Si da una entrada vacía para lang-env, este comando describe el entorno de idioma elegido. Puede personalizar cualquier entorno de idioma con el hook normal set-language-environment-hook. El comando set-language-environment ejecuta ese hook después de configurar el nuevo entorno de lenguaje. Las funciones de hook pueden probar un entorno de lenguaje específico comprobando la variable current-language-environment. Este hook es donde debe poner los ajustes no predeterminados para entornos de lenguaje específicos, tales como sistemas de codificación para la entrada del teclado y la salida del terminal, el método de entrada predeterminado, etc.

Antes de empezar a configurar el nuevo entorno de lenguaje, set-language-environment ejecuta primero el hook exit-language-environmentt-hook. Este hook es útil para deshacer las personalizaciones que se hicieron con el hook set-language-environment-hook. Por ejemplo, si configura un enlace de clave especial en un entorno de idioma específico utilizando el hook set-language-environment-hook, debería configurar el enlace exit-language-environment-hook para restaurar el enlace normal para esa clave.

39.4 Métodos de entrada

Un método de entrada es un tipo de conversión de caracteres diseñado específicamente para la entrada interactiva. En Emacs, normalmente cada idioma tiene su propio método de entrada; a veces, varios idiomas que utilizan los mismos caracteres pueden compartir un método de entrada. Algunos idiomas soportan varios métodos de entrada.

El tipo más simple de método de entrada funciona mapeando letras ASCII en otro alfabeto; esto le permite usar otro alfabeto en lugar de ASCII. Los métodos de entrada griegos y rusos funcionan de esta manera.

Una técnica más poderosa es la composición: convertir secuencias de caracteres en una sola letra. Muchos métodos de entrada de datos europeos utilizan la composición para producir una sola letra no ASCII a partir de una secuencia que consiste en una letra seguida de caracteres de acento (o viceversa). Por ejemplo, algunos métodos convierten la secuencia o ^ en una sola letra acentuada. Estos métodos de entrada no tienen comandos especiales propios; todo lo que hacen es componer secuencias de caracteres de impresión.

Los métodos de entrada para los scripts silábicos utilizan típicamente el mapeo seguido de la composición. Los métodos de entrada para tailandés y coreano funcionan de esta manera. Primero, las letras se mapean en símbolos para sonidos o marcas de tono particulares; luego, las secuencias de éstos que forman una sílaba completa se mapean en un signo de sílaba.

El chino y el japonés requieren métodos más complejos. En los métodos de entrada en chino, primero se introduce la ortografía fonética de una palabra china (en el método de entrada chinese-py, entre otros), o una secuencia de porciones del carácter (métodos chinese-4corner y chinese-sw y otros). Una secuencia de entrada corresponde típicamente a muchos caracteres chinos posibles. Se selecciona el que se quiere decir usando teclas como C-f, C-b, C-n, C-p (o las teclas de flecha), y dígitos, que tienen significados especiales en esta situación.

Los posibles caracteres están dispuestos conceptualmente en varias filas, cada una de las cuales contiene hasta 10 alternativas. Normalmente, Emacs muestra sólo una fila a la vez, en el área de eco; (i/j) aparece al principio, para indicar que ésta es la fila número uno de un total de filas j. Escriba C-n o C-p para mostrar la siguiente fila o la fila anterior.

Clique C-f y C-b para avanzar y retroceder entre las alternativas de la fila actual. Al hacer esto, Emacs resalta la alternativa actual con un color especial; escriba C-<SPC> para seleccionar la alternativa actual y utilizarla como entrada. Las alternativas de la línea también están numeradas; el número aparece antes de la alternativa. Al escribir un número se selecciona la alternativa asociada de la fila actual y se utiliza como entrada.

En estos métodos de entrada chinos, <TAB> muestra un búfer que muestra todos los caracteres posibles a la vez; luego, al hacer clic en Mouse-2 en uno de ellos, se selecciona esa alternativa. Las teclas C-f, C-b, C-n, C-n, C-p, y los dígitos siguen funcionando como de costumbre, pero hacen el resaltado en el buffer mostrando los posibles caracteres, en lugar de en el área de eco.

En los métodos de entrada en japonés, primero se introduce una palabra completa mediante la ortografía fonética; a continuación, después de que la palabra está en el búfer, Emacs la convierte en uno o más caracteres mediante un diccionario de gran tamaño. Una ortografía fonética corresponde a un número de palabras japonesas diferentes; para seleccionar una de ellas, utilice C-n y C-p para recorrer las alternativas.

A veces es útil cortar el procesamiento del método de entrada para que los caracteres que acaba de introducir no se combinen con caracteres posteriores. Por ejemplo, en el método de entrada latin-1-postfix, la secuencia o ^ se combina para formar una 'o' con un acento. ¿Qué sucede si desea introducirlos como caracteres separados?

Una forma es escribir el acento dos veces; esta es una característica especial para introducir la letra y el acento por separado. Por ejemplo, o ^ ^ le da los dos caracteres 'o^'. Otra forma es escribir otra letra después de la o -algo que no se combine con eso- y borrarla inmediatamente. Por ejemplo, puede escribir o o <DEL> ^ para separar 'o' y '^'.

Otro método, más general pero no tan fácil de escribir, es usar C-\ C-\ entre dos caracteres para evitar que se combinen. Este es el comando C-\ (toggle-input-method) usado dos veces. Consulte Seleccionar método de entrada.

C-\ C-\ es especialmente útil dentro de una búsqueda incremental, porque deja de esperar a que se combinen más caracteres y comienza a buscar lo que ya has introducido.

Para saber cómo introducir un carácter tras otro utilizando el método de entrada actual, escriba C-u C-x =. Ver Información de posición.

Las variables input-method-highlight-flag y input-method-verbose-flag controlan cómo los métodos de entrada explican lo que está sucediendo. Si el indicador de método de entrada no es cero, la secuencia parcial se resalta en el búfer (para la mayoría de los métodos de entrada; algunos desactivan esta función). Si input-method-verbose-flag es non-nil, la lista de caracteres posibles para escribir a continuación se muestra en el área de eco (pero no cuando usted está en el minibúfer).

Otra facilidad para escribir caracteres que no están en su teclado es usar C-x 8 <RET> (insert-char) para insertar un solo carácter basado en su nombre Unicode o código; vea Inserción de Texto.

39.5 Selección de un método de entrada

C-\
   Habilitar o deshabilitar el uso del método de entrada seleccionado (toggle-input-method).

C-x <RET> C-\ method <RET>
   Seleccione un nuevo método de entrada para el búfer actual (set-input-method).

C-h I method <RET>, C-h C-\ method <RET>
   Describir el método de entrada (describe-input-method). Por defecto, describe el método de
   entrada actual (si lo hay). Esta descripción debe darle todos los detalles de cómo usar
   cualquier método de entrada en particular.

M-x list-input-methods
   Muestra una lista de todos los métodos de entrada admitidos.

Para elegir un método de entrada para el búfer actual, utilice C-x <RET> C-\ (set-input-method). Este comando lee el nombre del método de entrada desde el minibuffer; el nombre normalmente comienza con el entorno de lenguaje con el que se quiere utilizar. La variable current-input-method registra el método de entrada seleccionado.

Los métodos de entrada utilizan varias secuencias de caracteres ASCII para representar caracteres no ASCII. A veces es útil desactivar temporalmente el método de entrada. Para ello, escriba C-\ (toggle-input-method). Para volver a activar el método de entrada, escriba C-\ de nuevo.

Si escribe C-\ y aún no ha seleccionado un método de entrada, se le pedirá que especifique uno. Esto tiene el mismo efecto que usar C-x <RET> C-\ para especificar un método de entrada.

Cuando se invoca con un argumento numérico, como en C-u C-\, toggle-input-method siempre le pide un método de entrada, sugiriendo el más reciente seleccionado como el predeterminado.

La selección de un entorno de idioma especifica un método de entrada predeterminado para su uso en varios búferes. Cuando tiene un método de entrada predeterminado, puede seleccionarlo en la memoria intermedia actual escribiendo C-\. La variable default-input-method especifica el método de entrada por defecto (nil significa que no hay ninguno).

En algunos entornos de idioma, que admiten diferentes métodos de entrada, es posible que desee utilizar un método de entrada diferente del predeterminado elegido por el entorno set-language-environment. Puede ordenar a Emacs que seleccione un método de entrada por defecto diferente para un determinado entorno de idioma, si lo desea, utilizando el hook set-language-environment-hook (véase el hook set-language-environment-hook). Por ejemplo:

(defun my-chinese-setup ()
     "Set up my private Chinese environment."
     (if (equal current-language-environment "Chinese-GB")
         (setq default-input-method "chinese-tonepy")))
   (add-hook 'set-language-environment-hook 'my-chinese-setup)

Esto establece el método de entrada predeterminado para que sea chinese-tonepy cada vez que elija un entorno de idioma chino-GB.

Puede ordenar a Emacs que active automáticamente un determinado método de entrada. Por ejemplo:

(add-hook 'text-mode-hook (lambda () (set-input-method "german-prefix")))

Esto activa automáticamente el método de entrada "german-prefix" en el modo Texto.

Algunos métodos de entrada para scripts alfabéticos funcionan (en efecto) reasignando el teclado para emular varios diseños de teclado que se usan comúnmente para esos scripts. La forma de hacer esta redistribución correctamente depende de la disposición real del teclado. Para especificar la disposición del teclado, utilice el comando M-x quail-set-keyboard-layout.

Puede utilizar el comando M-x quail-show-key para mostrar qué tecla (o secuencia de teclas) escribir para introducir el carácter siguiente, utilizando la disposición de teclado seleccionada. El comando C-u C-x = también muestra esa información, además de otra información sobre el carácter.

M-x list-input-methods lista todos los métodos de entrada admitidos. La lista proporciona información sobre cada método de entrada, incluyendo la cadena que lo representa en la línea de modo.

39.6 Sistemas de codificación

Los usuarios de varios idiomas han establecido muchos sistemas de codificación más o menos estándar para representarlos. Emacs no utiliza estos sistemas de codificación internamente; en cambio, convierte varios sistemas de codificación a su propio sistema al leer datos, y convierte el sistema de codificación interno a otros sistemas de codificación al escribir datos. La conversión es posible en la lectura o escritura de archivos, en el envío o recepción desde el terminal y en el intercambio de datos con subprocesos.

Emacs asigna un nombre a cada sistema de codificación. La mayoría de los sistemas de codificación se utilizan para un idioma, y el nombre del sistema de codificación comienza con el nombre del idioma. Algunos sistemas de codificación se utilizan para varios idiomas; sus nombres suelen empezar por 'iso'. También existen sistemas de codificación especiales, como no-conversion, raw-text, y emacs-internal.

Una clase especial de sistemas de codificación, conocidos colectivamente como codepages, está diseñada para soportar texto codificado por el software MS Windows y MS-DOS. Los nombres de estos sistemas de codificación son cpnnnn, donde nnnn es un número de 3 ó 4 dígitos de la página de códigos. Puede utilizar estas codificaciones como cualquier otro sistema de codificación; por ejemplo, para visitar un archivo codificado en la página 850, escriba C-x <RET> cp850 <RET> C-x C-f filename <RET>.

Además de convertir varias representaciones de caracteres no ASCII, un sistema de codificación puede realizar la conversión al final de la línea. Emacs maneja tres convenciones diferentes para separar líneas en un archivo: newline ("unix"), carriage-return linefeed ("dos"), y carriage-return ("mac").

C-h coding <RET>
   Describir la codificación del sistema (describe-coding-system).

C-h C <RET>
   Describa los sistemas de codificación actualmente en uso.

M-x list-coding-systems
   Muestra una lista de todos los sistemas de codificación compatibles.

El comando C-h C (describe-coding-system) muestra información sobre sistemas de codificación particulares, incluyendo la conversión al final de la línea especificada por esos sistemas de codificación. Puede especificar un nombre de sistema de codificación como argumento; alternativamente, con un argumento vacío, describe los sistemas de codificación actualmente seleccionados para varios fines, tanto en la memoria intermedia actual como por defecto, y la lista de prioridades para reconocer sistemas de codificación (véase Reconocer codificación).

Para mostrar una lista de todos los sistemas de codificación compatibles, escriba list-coding-systems. La lista proporciona información sobre cada sistema de codificación, incluyendo la letra que lo representa en la línea de modo (ver Línea de modo).

Cada uno de los sistemas de codificación que aparecen en esta lista -excepto para la no conversión, lo que significa que no hay conversión de ningún tipo- especifica cómo y si se deben convertir los caracteres de impresión, pero deja que la elección de la conversión al final de la línea se decida en función del contenido de cada archivo. Por ejemplo, si el archivo parece utilizar el salto de línea de retorno de carro de secuencia a líneas separadas, se utilizará la conversión de fin de línea DOS.

Cada uno de los sistemas de codificación listados tiene tres variantes, que especifican exactamente qué hacer para la conversión al final de la línea:

...-unix
   No realice ninguna conversión al final de la línea; asuma que el archivo usa newline para
   separar las líneas. (Esta es la convención que se usa normalmente en los sistemas Unix y
   GNU, y Mac OS X.)

...-dos
   Suponga que el archivo usa saltos de línea de retorno de carro para separar líneas, y
   haga la conversión apropiada. (Esta es la convención que se usa normalmente en los
   sistemas de Microsoft).

...-mac
   Suponga que el fichero utiliza el retorno de carro para separar líneas, y haga la conversión
   apropiada. (Esta era la convención usada en el sistema Macintosh antes de OS X.)

Estos sistemas de codificación de variantes se omiten en list-coding-systems por razones de brevedad, ya que son totalmente predecibles. Por ejemplo, el sistema de codificación iso-latin-1 tiene variantes iso-latin-1-unix, iso-latin-1-dos e iso-latin-1-mac.

Los sistemas de codificación unix, dos y mac son alias para undecided-unix, undecided-dos y undecided-mac, respectivamente. Estos sistemas de codificación sólo especifican la conversión al final de la línea y dejan que la conversión de código de caracteres se deduzca del texto mismo.

El sistema de codificación raw-text es bueno para un archivo que es principalmente texto ASCII, pero puede contener valores de bytes superiores a 127 que no están destinados a codificar caracteres no ASCII. Con raw-text sin procesar, Emacs copia esos valores de byte sin cambios y establece los caracteres de enable-multibyte-characters a nil en el búfer actual para que se interpreten correctamente. raw-text maneja la conversión al final de la línea de la manera habitual, basándose en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión al final de la línea que se va a utilizar.

Por el contrario, el sistema de codificación no-conversion no especifica ninguna conversión de código de caracteres en absoluto para los valores de bytes no ASCII y ninguno para el final de línea. Esto es útil para leer o escribir archivos binarios, archivos tar y otros archivos que deben ser examinados literalmente. También fija los caracteres de enable-multibyte-characters en nil.

La forma más fácil de editar un archivo sin conversión de ningún tipo es con el comando M-x find-file-literally. Esto usa no-conversion, y también suprime otras características de Emacs que podrían convertir el contenido del archivo antes de que lo vea. Ver Visitas.

El sistema de codificación emacs-intern (o utf-8-emacs, que es equivalente) significa que el archivo contiene caracteres no ASCII almacenados con la codificación interna de Emacs. Este sistema de codificación maneja la conversión al final de la línea basada en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión al final de la línea.

39.7 Reconociendo los sistemas de codificación

Siempre que Emacs lee una pieza dada de texto, se trata de reconocer qué sistema de codificación usa. Esto se aplica a los archivos que se están leyendo, la salida de los subprocesos, texto de selecciones X, etc. Emacs puede seleccionar el sistema de codificación automáticamente la mayoría de las veces, una vez que se haya especificado sus preferencias.

Algunos sistemas de codificación puede ser reconocido o que se distingue por las cuales las secuencias de bytes aparecer en los datos. Sin embargo, existen sistemas de codificación que no se pueden distinguir, ni siquiera potencialmente. Por ejemplo, no hay manera de distinguir entre Latin-1 y Latin-2; que utilizan los mismos valores de byte con diferentes significados.

Emacs maneja esta situación por medio de una lista de prioridades de los sistemas de codificación. Siempre que Emacs lee un archivo, si no se especifica el sistema de codificación a usar, Emacs comprueba los datos contra cada sistema de codificación, empezando por el primero en prioridad y trabaja con la lista, hasta que encuentra un sistema de codificación que se ajuste a los datos. Entonces se convierte el contenido del archivo asumiendo que se representan en este sistema de codificación.

La lista de prioridades de los sistemas de codificación depende del entorno de idioma seleccionado (ver Language Environments). Por ejemplo, si se utiliza francesa, es probable que desee que Emacs prefiera Latin-1 a Latin-2; si utiliza Checa, es probable que desee Latin-2. Esta es una de las razones para especificar un entorno de idioma.

Sin embargo, se puede modificar la lista de prioridades del sistema de codificación en detalle con el comando M-x prefer-coding-system. Este comando lee el nombre de un sistema de codificación de la minibuffer, y lo añade a la parte frontal de la lista de prioridades, por lo que se prefiere a todas las otras. Si se utiliza este comando varias veces, cada uso añade un elemento al frente de la lista de prioridades.

Si utiliza un sistema de codificación que especifica el tipo de conversión de fin de línea, como iso-8859-1-dos, significa que Emacs debe intentar reconocer el iso-8859-1 con prioridad, y debe utilizar la conversión de fin de línea DOS cuando reconoce el iso-8859-1.

A veces un nombre de archivo indica el sistema de codificación que se utilizará para el archivo. La variable file-coding-system-alist especifica esta correspondencia. Hay una función especial modify-coding-system-alist para añadir elementos a esta lista. Por ejemplo, para leer y escribir todos los archivos '.txt utilizando el sistema de codificación chinese-iso-8bit , puede ejecutar esta expresión Lisp:

(modify-coding-system-alist 'file "\\.txt\\'" 'chinese-iso-8bit)

El primer argumento debe ser 'file', el segundo argumento debe ser una expresión regular que determina qué archivos esto se aplica a, y el tercer argumento dice qué sistema de codificación a usar para estos archivos.

Emacs reconoce qué tipo de conversión de final de línea para utilizar basa en el contenido del archivo: si se ve sólo retornos de carro, o sólo las secuencias de salto de línea de retorno de carro, entonces se elige la conversión de final de línea en consecuencia. Se puede inhibir el uso automático de conversión de final de línea, estableciendo la variable inhibit-eol-conversion a non-nil. Si lo hace, los archivos de estilo de DOS se mostrarán con el caracter '^ M' visible en la memoria intermedia; algunas personas prefieren esto a la más sutil '(DOS)' indicación de tipo de final de línea cerca del borde izquierdo de la línea de modo (ver EOL-mnemotécnica ).

De manera predeterminada, la detección automática del sistema de codificación es sensible a las secuencias de escape. Si Emacs ve una secuencia de caracteres que comienzan con un carácter de escape, y la secuencia es válida como un código ISO-2022, que le dice a Emacs para usar una de las codificaciones ISO-2022 para decodificar el archivo.

Sin embargo, puede haber casos en que que desea leer secuencias de escape en un archivo como está. En tal caso, se puede establecer la variable inhibit-iso-escape-detection a non-nil. A continuación, la detección de código ignora cualquier secuencias de escape, y nunca utiliza una codificación ISO-2022. El resultado es que todas las secuencias de escape se hacen visibles en la memoria intermedia.

El valor predeterminado de inhibit-iso-escape-detectioninhibit-iso-escape-detection es nil. Le recomendamos que no cambie de forma permanente, sólo para una operación específica. Eso es debido a que algunos archivos de código fuente de Emacs Lisp en la distribución Emacs contienen caracteres no ASCII codificados en el sistema de codificación iso-2022-7bit, y no será decodificado correctamente cuando visita esos archivos si se suprime la detección de secuencias de escape. Las variables auto-coding-alist y auto-coding-regexp-alist son la manera más fuerte para especificar el sistema de codificación de ciertos patrones de nombres de archivo o archivos que contienen ciertos patrones, respectivamente. Estas variables, incluso anulan etiquetas en el propio archivo (véase Especificar Coding ):

'-*-coding:-*-'

Por ejemplo, Emacs utiliza auto-coding-alist para archivos tar, para evitar que se confunda con una etiqueta '-coding:-' en un miembro del archivo y pensando que se aplica al archivo como un todo.

Otra forma de especificar un sistema de codificación es con la variable auto-coding-functions. Por ejemplo, una orden interna de auto-coding-functions*detecta la codificación para archivos *XML. A diferencia de los dos anteriores, esta variable no anula cualquier etiqueta: '-coding:-'.

Cuando llegue correo nuevo en Rmail, cada mensaje es traducido automáticamente desde el sistema con la codificación en la que está escrito como si se tratara de una archivo separado. Esto utiliza la lista de prioridades de los sistemas que se han especificado la codificación. Si un mensaje MIME especifica un conjunto de caracteres, Rmail obedece esa especificación. Para leer y guardar archivos Rmail a sí mismos, Emacs usa el sistema de codificación especificado por la variable rmail-file-coding-system. El valor por defecto es nil, lo que significa que los archivos Rmail no se traducen (que se leen y escriben en el código de carácter interno de Emacs).

39.8 Especificación Sistema de Codificación de un archivo

Si Emacs reconoce incorrectamente la codificación de un archivo, puede volver a leerlo utilizando el sistema de codificación correcto con C-x <RET> r (revert-buffer-with-coding-system). Este comando solicita que se utilice un sistema de codificación. Para ver qué sistema de codificación Emacs utilizó realmente para decodificar el archivo, mire la letra mnemotécnica del sistema de codificación cerca del borde izquierdo de la línea de modo (vea Línea de modo), o escriba C-h C (describe-coding-system).

Puede especificar el sistema de codificación para un archivo en particular en el propio archivo, utilizando la contrucción:

'-*-...-*-'

al principio, o una lista de variables locales al final (ver Variables de archivo). Esto se hace definiendo un valor para la "variable" llamada codificación. Emacs no tiene realmente una codificación de variables; en lugar de establecer una variable, utiliza el sistema de codificación especificado para el archivo. Por ejemplo:

'-*-mode: C; coding: latin-1;-*-'

Especifica el uso del sistema de codificación Latin-1, así como el modo C. Cuando se especifica la codificación explícitamente en el archivo, esto anula la lista del sistema de codificación de archivos.

39.9 La elección de los sistemas de codificación para la salida

Una vez que Emacs ha elegido un sistema de codificación para un búfer, almacena ese sistema de codificación en buffer-file-coding-system. Esto lo convierte en el valor predeterminado para las operaciones que escriben desde este búfer a un archivo, como save-buffer y write-region. Puede especificar un sistema de codificación diferente para la salida de más archivos desde el búfer utilizando set-buffer-file-coding-system (véase Codificación de texto).

Puede insertar cualquier carácter compatible con Emacs en cualquier búfer de Emacs, pero la mayoría de los sistemas de codificación sólo pueden manejar un subconjunto de estos caracteres. Por lo tanto, es posible que los caracteres que inserte no puedan codificarse con el sistema de codificación que se utilizará para guardar el búfer. Por ejemplo, puede visitar un archivo de texto en polaco, codificado en iso-8859-2, y añadirle algunas palabras rusas. Al guardar ese búfer, Emacs no puede utilizar el valor actual de buffer-file-coding-system, ya que los caracteres que agregó no pueden ser codificados por ese sistema de codificación.

Cuando esto sucede, Emacs prueba el sistema de codificación preferido (establecido por M-x prefer-coding-system o M-x set-language-environment). Si ese sistema de codificación puede codificar de forma segura todos los caracteres del búfer, Emacs lo utiliza y almacena su valor en el sistema de codificación de archivos del búfer. De lo contrario, Emacs muestra una lista de sistemas de codificación adecuados para codificar el contenido del búfer y le pide que elija uno de esos sistemas de codificación.

Si inserta los caracteres inadecuados en un mensaje de correo, Emacs se comporta de forma un poco diferente. Además, comprueba si el sistema de codificación preferido se recomienda para su uso en mensajes MIME; de lo contrario, le informa de este hecho y le solicita otro sistema de codificación. Esto es para que no envíe inadvertidamente un mensaje codificado de manera que el software de correo de su destinatario tenga dificultades para decodificarlo. (Todavía puede utilizar un sistema de codificación inadecuado si introduce su nombre en la solicitud).

Cuando envía un mensaje de correo (consulte Envío de correo), Emacs tiene cuatro formas diferentes de determinar el sistema de codificación que se utilizará para codificar el texto del mensaje. Prueba el valor propio del búfer buffer-file-coding-system, si no es nil. De lo contrario, utiliza el valor de sendmail-coding-system, si no es nil. La tercera forma es utilizar el sistema de codificación predeterminado para los archivos nuevos, que se controla mediante el entorno de idioma que elija, si no es nil. Si estos tres valores son nulos, Emacs codifica el correo saliente utilizando el sistema de codificación Latin-1.

39.10 La especificación de un sistema de codificación de archivos de texto

En los casos en que Emacs no elige automáticamente el sistema de codificación adecuado para contenido de un archivo, puede utilizar estos comandos para especificar uno: C-x <RET> f coding <RET> Utilice el sistema de codificación para guardar o revisar el archivo en el búfer (set-buffer-file-coding-system)

C-x <RET> c coding <RET> Especificar el sistema de codificación para el comando inmediatamente después (universal-coding-system-argument).

C-x <RET> r coding <RET> Volver a analizar el archivo actual mediante el sistema de codificación coding (revert-buffer-with-coding-system).

M-x recode-region <RET> right <RET> wrong <RET> Convertir una región que se decodifica utilizando la codificación incorrecta del sistema, decodificandola usando el sistema de codificación rigt en su lugar. #+ENDSRC

El comando C-x <RET> f (set-buffer-file-coding-system) establece el sistema de codificación de archivos para el búfer actual (es decir, el sistema de codificación a utilizar al guardar o revertir el archivo). Se especifica el sistema de codificación que utiliza el minibuffer. También puede invocar este comando haciendo clic con el mouse-3 en el indicador del sistema de codificación en la línea de modo (ver Línea de modo).

Si especifica un sistema de codificación que no puede manejar todos los caracteres del búfer, Emacs le advertirá sobre los caracteres problemáticos y le pedirá que elija otro sistema de codificación cuando intente guardar el búfer (consulte Codificación de salida).

También puede utilizar este comando para especificar la conversión de fin de línea (ver conversión de fin de línea) para codificar el búfer actual. Por ejemplo, C-x <RET> f dos <RET> hará que Emacs guarde el texto del búfer actual con finales de línea de retorno de carro de estilo DOS.

Otra forma de especificar el sistema de codificación de un archivo es cuando se visita el archivo. Primero utilice el comando C-x <RET> c (universal-coding-system-argument); este comando utiliza el minibuffer para leer el nombre de un sistema de codificación. Después de salir del minibuffer, el sistema de codificación especificado se utiliza para el comando inmediatamente posterior.

Así que si el comando que sigue inmediatamente después es C-x C-f, por ejemplo, lee el archivo usando ese sistema de codificación (y registra el sistema de codificación para cuando usted guarde el archivo más tarde). O si el siguiente comando es C-x C-w, escribe el archivo usando ese sistema de codificación. Al especificar el sistema de codificación para guardar de esta manera, en lugar de con C-x <RET> f, no hay ninguna advertencia si el búfer contiene caracteres que el sistema de codificación no puede manejar.

Otros comandos de archivo afectados por un sistema de codificación específico incluyen C-x i y C-x C-v, así como las otras variantes de ventana de C-x C-f. C-x <RET> c también afecta a los comandos que inician subprocesos, incluyendo M-x shell (ver Shell). Si el siguiente comando no utiliza el sistema de codificación, entonces C-x <RET> c finalmente no tiene efecto.

Una manera fácil de visitar un archivo sin conversión es con el comando M-x find-file-literally. Ver Visitas.

El valor predeterminado de la variable buffer-file-coding-system especifica la elección del sistema de codificación que se utilizará al crear un nuevo archivo. Se aplica cuando encuentra un nuevo archivo y cuando crea un búfer y lo guarda en un archivo. La selección de un entorno de lenguaje normalmente establece esta variable como una buena opción de sistema de codificación por defecto para ese entorno de lenguaje.

Si visita un archivo con un sistema de codificación incorrecto, puede corregirlo con C-x <RET> r (revert-buffer-with-coding-system). Esto vuelve a visitar el archivo actual, utilizando un sistema de codificación que usted especifique.

Si ya se ha insertado un fragmento de texto en un búfer utilizando el sistema de codificación incorrecto, puede rehacer la descodificación del mismo utilizando M-x recode-region. Esto le pide el sistema de codificación adecuado, luego el sistema de codificación incorrecto que se utilizó realmente, y realiza la conversión. Primero codifica la región utilizando el sistema de codificación incorrecto, y luego la decodifica de nuevo utilizando el sistema de codificación adecuado.

39.11 Sistemas de codificación para la comunicación entre procesos

En esta sección se explica cómo especificar sistemas de codificación para su uso en la comunicación con otros procesos.

C-x <RET> x coding <RET>
   Utilice la codificación del sistema de codificación para transferir selecciones desde y
   hacia otras aplicaciones gráficas (set-selection-coding-system).

C-x <RET> X coding <RET>
   Utilice la codificación del sistema de codificación para transferir una selección, la siguiente
   de una a otra o desde otra aplicación gráfica (set-next-selection-coding-system).

C-x <RET> p input-coding <RET> output-coding <RET>
   Use de entrada la codificación input-coding y output-codingión de salida. Utilizar sistemas
   de codificación codificación de entrada y salida para la entrada y salida de subprocesos en
   el búfer actual (set-buffer-process-coding-system).

El comando C-x <RET> x (set-selection-coding-system) especifica el sistema de codificación para enviar el texto seleccionado a otras aplicaciones y para recibir el texto de las selecciones realizadas en otras aplicaciones. Este comando se aplica a todas las selecciones subsiguientes, hasta que lo sustituya utilizando el comando de nuevo. El comando C-x <RET> X (set-next-selection-coding-system) especifica el sistema de codificación para la siguiente selección realizada en Emacs o leída por Emacs.

La variable x-select-request-type especifica el tipo de datos a solicitar del sistema X Window para recibir selecciones de texto de otras aplicaciones. Si el valor es nil (por defecto), Emacs prueba UTF8STRING y COMPOUNDTEXT, en este orden, y utiliza varias heurísticas para elegir el más apropiado de los dos resultados; si ninguno de ellos tiene éxito, Emacs recurre a STRING. Si el valor de x-select-request-type es uno de los símbolos COMPOUNDTEXT, UTF8STRING, STRING o TEXT, Emacs utiliza sólo ese tipo de petición. Si el valor es una lista de algunos de estos símbolos, Emacs intenta sólo los tipos de petición de la lista, en orden, hasta que uno de ellos tenga éxito, o hasta que la lista se agote.

El comando C-x <RET> p (set-buffer-process-coding-system) especifica el sistema de codificación para la entrada y salida de un subproceso. Este comando se aplica al búfer actual; normalmente, cada subproceso tiene su propio búfer, por lo que puede utilizar este comando para especificar la traducción desde y hacia un subproceso en particular dando el comando en el búfer correspondiente.

También puede utilizar C-x <RET> c (universal-coding-system-argument) justo antes del comando que ejecuta o inicia un subproceso, para especificar el sistema de codificación para comunicarse con ese subproceso. Ver Codificación de texto.

El valor por defecto para la traducción de la entrada y salida del proceso depende del entorno de idioma actual.

La variable locale-coding-system especifica un sistema de codificación que se utiliza para codificar y descodificar cadenas del sistema, como los mensajes de error del sistema y format-time-string y las marcas de tiempo. Este sistema de codificación también se utiliza para decodificar entradas de teclado no ASCII en el sistema X Window. Debe seleccionar un sistema de codificación que sea compatible con la representación de texto del sistema subyacente, que normalmente se especifica mediante una de las variables de entorno LCALL, LCCTYPE y LANG. (El primero, en el orden especificado anteriormente, cuyo valor no está vacío es el que determina la representación del texto.)

39.12 Sistemas de codificación de nombres de archivo

C-x <RET> F coding <RET>
   Utilice la codificación del sistema de codificación para codificar y decodificar nombres
   de archivos (set-file-name-coding-system).

El comando C-x <RET> F (set-file-name-coding-system) especifica un sistema de codificación para la codificación de nombres de archivo. No tiene ningún efecto en la lectura y escritura del contenido de los archivos.

De hecho, todo lo que hace este comando es establecer el valor de codificación de la variable file-name-coding-system. Si establece la variable con un nombre de sistema de codificación (como un símbolo Lisp o una cadena), Emacs codifica los nombres de archivo utilizando ese sistema de codificación para todas las operaciones de archivo. Esto permite utilizar caracteres no ASCII en los nombres de archivo o, al menos, los caracteres no ASCII que el sistema de codificación especificado puede codificar.

Si file-name-coding-system es nil, Emacs utiliza un sistema de codificación predeterminado determinado por el entorno de idioma seleccionado y almacenado en la variable default-file-name-coding-system. En el entorno de idioma predeterminado, los caracteres no ASCII de los nombres de archivo no se codifican de forma especial; aparecen en el sistema de archivos utilizando la representación interna de Emacs.

Advertencia: si cambia file-name-coding-system (o el entorno de idioma) en medio de una sesión de Emacs, pueden surgir problemas si ya ha visitado archivos cuyos nombres estaban codificados utilizando el sistema de codificación anterior y no pueden codificarse (o están codificados de forma diferente) con el nuevo sistema de codificación. Si intenta guardar uno de estos búferes con el nombre de archivo visitado, es posible que el almacenamiento utilice un nombre de archivo incorrecto o que se produzca un error. Si se produce un problema de este tipo, utilice C-x C-w para especificar un nuevo nombre de archivo para ese búfer.

Si se produce un error al codificar un nombre de archivo, utilice el comando M-x recode-file-name para cambiar el sistema de codificación del nombre de archivo. Esto solicita un nombre de archivo existente, su antiguo sistema de codificación y el sistema de codificación al que desea convertir.

39.13 Sistemas de Codificación para la terminal

C-x <RET> t coding <RET>
   Utilice la codificación del sistema de codificación para la salida de la terminal
   (set-terminal-coding-system).

C-x <RET> k coding <RET>
   Utilice la codificación del sistema de codificación para la entrada de teclado
   (set-keyboard-coding-system).

El comando C-x <RET> t (set-terminal-coding-system) especifica el sistema de codificación para la salida del terminal. Si especifica un código de caracteres para la salida del terminal, todos los caracteres que se envían al terminal se convierten a ese sistema de codificación.

Esta característica es útil para ciertos terminales de sólo caracteres construidos para soportar lenguajes o juegos de caracteres específicos, por ejemplo, los terminales europeos que soportan uno de los juegos de caracteres ISO Latín. Debe especificar el sistema de codificación del terminal cuando utilice texto multibyte, para que Emacs sepa qué caracteres puede manejar realmente el terminal.

De forma predeterminada, la salida al terminal no se traduce en absoluto, a menos que Emacs pueda deducir el sistema de codificación adecuado de su tipo de terminal o de sus especificaciones de localización (consulte Entornos de idiomas).

El comando C-x <RET> k (set-keyboard-coding-system), o la variable keyboard-coding-system, especifica el sistema de codificación para la entrada del teclado. La conversión de código de caracteres de la entrada del teclado es útil para terminales con teclas que envían caracteres gráficos no ASCII; por ejemplo, algunos terminales diseñados para ISO Latin-1 o subconjuntos de ellos.

De forma predeterminada, la entrada del teclado se traduce en función de la configuración de la configuración regional del sistema. Si su terminal no soporta realmente la codificación que implica su localización (por ejemplo, si encuentra que inserta un carácter no ASCII si escribe M-i), tendrá que configurar keyboard-coding-system a nil para desactivar la codificación. Puede hacerlo poniendo

(set-keyboard-coding-system nil)

en tu archivo de inicio.

Existe una similitud entre el uso de un sistema de codificación para la entrada del teclado y el uso de un método de entrada: ambos definen secuencias de entrada del teclado que se traducen en caracteres individuales. Sin embargo, los métodos de entrada están diseñados para ser convenientes para el uso interactivo de los seres humanos, y las secuencias que se convierten suelen ser secuencias de caracteres de impresión ASCII. Los sistemas de codificación suelen traducir secuencias de caracteres no gráficos.

39.14 Conjunto de fuentes

Una fuente típica define formas para un solo alfabeto o secuencia de comandos. Por lo tanto, la visualización de toda la gama de scripts que Emacs soporta requiere una colección de muchas fuentes. En Emacs, esta colección se denomina conjunto de fuentes. Un conjunto de fuentes se define por una lista de especificaciones de fuentes, cada una asignada para manejar un rango de códigos de caracteres, y puede recurrir a otro conjunto de fuentes para caracteres que no están cubiertos por las fuentes que especifica.

Cada conjunto de fuentes tiene un nombre, como una fuente. Sin embargo, mientras que las fuentes se almacenan en el sistema y los nombres de fuentes disponibles son definidos por el sistema, los conjuntos de fuentes se definen dentro de Emacs. Una vez que haya definido un conjunto de fuentes, puede utilizarlo dentro de Emacs especificando su nombre, en cualquier lugar en el que pueda utilizar una única fuente. Por supuesto, los conjuntos de fuentes Emacs sólo pueden utilizar las fuentes que el sistema admite. Si algunos caracteres aparecen en la pantalla como cajas vacías o códigos hexadecimales, esto significa que el conjunto de fuentes que se utiliza para ellos no tiene ninguna fuente para esos caracteres. En este caso, o si se muestran los caracteres, pero no tan bien como le gustaría, es posible que tenga que instalar fuentes adicionales. Su sistema operativo puede tener fuentes opcionales que puede instalar; o puede instalar el paquete GNU Intlfonts, que incluye fuentes para la mayoría de los scripts soportados.

Emacs crea automáticamente tres conjuntos de fuentes: el conjunto de fuentes estándar, el conjunto de fuentes inicial y el conjunto de fuentes predeterminado. El conjunto de fuentes predeterminado es más probable que tenga fuentes para una amplia variedad de caracteres no ASCII, y es el complemento predeterminado para los otros dos conjuntos de fuentes, y si establece una fuente predeterminada en lugar de un conjunto de fuentes. Sin embargo, no especifica los nombres de las familias de fuentes, por lo que los resultados pueden ser algo aleatorios si se utilizan directamente. Puede especificar el uso de un conjunto de fuentes en particular iniciando Emacs con la opción '-fn'. Por ejemplo,

emacs -fn fontset-standard

También puede especificar un conjunto de fuentes con el recurso 'Font' (ver X Recursos).

Si no se especifica ningún conjunto de fuentes para su uso, Emacs utiliza una fuente ASCII, con 'fontset-default' como respaldo para los caracteres que la fuente no cubre. El juego de caracteres estándar sólo se utiliza si se solicita explícitamente, a pesar de su nombre.

Un conjunto de fuentes no necesariamente especifica una fuente para cada código de caracteres. Si un conjunto de fuentes no especifica ninguna fuente para un determinado carácter, o si especifica una fuente que no existe en su sistema, entonces no puede mostrar ese carácter correctamente. Se mostrará ese carácter como un código hexadecimal o un espacio delgado o una caja vacía en su lugar. (Ver glyphless characters, para más detalles.)

39.15 Definición de Fuentes

Cuando se ejecuta en X, Emacs crea automáticamente un conjunto de fuentes estándar de acuerdo con el valor de la especificación del conjunto de fuentes estándar. El nombre de este conjunto de fuentes es

-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard

o simplemente 'fontset-standard' para abreviar.

En GNUstep y Mac OS X, el conjunto tipográfico estándar se ha creado usando el valor de ns-standard-fontset-spec, y en MS Windows se ha creado usando el valor w32-standard-fontset-spec.

variantes en negrita, cursiva y negrita cursiva del conjunto tipográfico estándar se crean automáticamente. Sus nombres tienen 'bold' en lugar de 'medium', o 'i' en lugar de 'r', o ambas cosas.

Emacs genera un conjunto tipográfico de forma automática, en función de cualquier fuente por defecto ASCII que especifica con "Font" o el con el argumento "- fn", o la fuente predeterminada que Emacs encontró cuando empezó. Este es el conjunto tipográfico puesta en marcha y su nombre es fontset-startup. Lo hace mediante la sustitución de la charsetregistry con 'fontset', y la sustitución del campo charsetencoding con 'startup', a continuación, utilizando la cadena resultante para especificar un conjunto tipográfico.

Por ejemplo, si se inicia Emacs con una fuente de esta forma:

emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1"

Emacs genera el siguiente conjunto tipográfico y lo utiliza para el marco de la ventana inicial X:

-*-courier-medium-r-normal-*-14-140-*-*-*-*-fontset-startup

El fontset de inicio usará la fuente que usted especifique, o una variante con un Registro y codificación diferentes, para todos los caracteres que estén soportados por esa fuente, y se apoyará en 'fontset-default' para otros caracteres.

Con el recurso de las X 'Emacs.Font', puede especificar un nombre de conjunto de fuentes igual que un nombre de fuente real. Pero tenga cuidado de no especificar el nombre de un conjunto de fuentes en un recurso comodín como 'Emacs*Font', ya que la especificación de comodín coincide con otros recursos, como los menús, y los menús no pueden manejar conjuntos de fuentes. Ver Recursos X.

Puede especificar fuentes adicionales usando recursos X llamados 'Fontset-n', donde n es un número entero a partir de 0. El valor del recurso debe tener esta forma:

fontpattern, [charset:font]...

fontpattern debe tener la forma de un nombre de fuente X estándar (vea el ejemplo anterior fontset-startup), excepto en los dos últimos campos. Deben tener la forma 'fontset-alias'.

El conjunto de fuentes tiene dos nombres, uno largo y otro corto. El nombre largo es fontpattern. El nombre corto es 'fontset-alias'. Puede referirse al conjunto de fuentes por cualquier nombre.

La construcción 'charset:font' especifica qué fuente usar (en este conjunto de fuentes) para un conjunto de caracteres en particular. Aquí, charset es el nombre de un juego de caracteres, y font es la fuente a utilizar para ese juego de caracteres. Puede utilizar esta construcción cualquier número de veces para definir un conjunto de fuentes.

Para los demás juegos de caracteres, Emacs elige una fuente basada en fontpattern. Reemplaza 'fontset-alias' con valores que describen el conjunto de caracteres. Para la fuente de caracteres ASCII, 'fontset-alias' se sustituye por 'ISO8859-1'.

Además, cuando varios campos consecutivos son comodines, Emacs los convierte en un único comodín. Esto es para evitar el uso de fuentes de escala automática. Las fuentes hechas escalando fuentes más grandes no se pueden usar para la edición, y escalar una fuente más pequeña tampoco es útil, porque es mejor usar la fuente más pequeña en su propio tamaño, que es lo que hace Emacs.

Por lo tanto, si el patrón de fuente es este,

-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24

la especificación de fuente para los caracteres ASCII sería esta:

-*-fixed-medium-r-normal-*-24-*-ISO8859-1

y la especificación de la fuente para los caracteres chinos GB2312 sería ésta:

-*-fixed-medium-r-normal-*-24-*-gb2312*-*

Es posible que no tenga ninguna fuente china que coincida con la especificación de fuente anterior. La mayoría de las distribuciones X incluyen sólo las fuentes chinas que tienen 'song ti' o 'fangsong ti' en la familia del campo. En tal caso, 'Fontset-n' puede especificarse como:

Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*

Entonces, las especificaciones de la fuente para todos los caracteres excepto el chino GB2312 tienen 'fixed' en el campo de la familia, y la especificación de la fuente para los caracteres chinos GB2312 tiene un comodín '*' en el campo de la familia.

La función que procesa el valor del recurso fontset para crear el fontset se llama create-fontset-from-fontset-spec. También puede llamar a esta función explícitamente para crear un conjunto de fuentes.

Consulte Fuentes, para obtener más información sobre el nombre de las letras.

39.16 Modificación de Fuentes

Los juegos de caracteres no siempre tienen que ser creados desde cero. Si sólo se requieren cambios menores, puede ser más fácil modificar un conjunto de fuentes existente. La modificación de 'fontset-default' también afectará a otros conjuntos de fuentes que lo utilizan como respaldo, por lo que puede ser una forma eficaz de solucionar problemas con las fuentes que Emacs elige para un script en particular.

Los conjuntos de fuentes se pueden modificar utilizando la función set-fontset-font, especificando un carácter, un charset, un script o un rango de caracteres para modificar la fuente, y una especificación de fuente para la fuente que se va a utilizar. Algunos ejemplos son:

;; Use Liberation Mono for latin-3 charset.
(set-fontset-font "fontset-default" 'iso-8859-3
                  "Liberation Mono")
;; Prefer a big5 font for han characters
(set-fontset-font "fontset-default"
                  'han (font-spec :registry "big5")
                  nil 'prepend)
;; Use DejaVu Sans Mono as a fallback in fontset-startup
;; before resorting to fontset-default.
(set-fontset-font "fontset-startup" nil "DejaVu Sans Mono"
                  nil 'append)
;; Use MyPrivateFont for the Unicode private use area.
(set-fontset-font "fontset-default"  '(#xe000 . #xf8ff)
                  "MyPrivateFont")

39.17 caracteres no representables

Puede haber algunos caracteres no ASCII que su terminal no pueda mostrar. La mayoría de los terminales de texto admiten un solo juego de caracteres (utilice la variable default-terminal-coding-system para indicar a Emacs cuál de ellos; consulte Codificación de terminal); los caracteres que no se pueden codificar en ese sistema de codificación se muestran como '?' por defecto.

Las pantallas gráficas pueden mostrar una gama más amplia de caracteres, pero es posible que no haya fuentes instaladas para todos ellos; los caracteres que no tienen fuente aparecen como una caja hueca.

Si utiliza caracteres latinos-1 pero su terminal no puede mostrar Latin-1, puede organizar la visualización de secuencias ASCII mnemotécnicas en su lugar, por ejemplo, '"o' para o-umlaut. Cargue la biblioteca iso-ascii para hacer esto.

Si su terminal puede mostrar Latin-1, puede mostrar caracteres de otros conjuntos de caracteres europeos utilizando una mezcla de caracteres latin-1 equivalentes y mnemónicos ASCII. Personaliza la variable latin1-display para habilitarlo. Las secuencias ASCII mnemotécnicas corresponden en su mayoría a las de los métodos de entrada de prefijos.

39.18 Modo Edición unibyte

Los conjuntos de caracteres latinos ISO 8859 definen códigos de caracteres en el rango de 0240 a 0377 octal (160 a 255 decimales) para manejar las letras acentuadas y la puntuación que necesitan varios idiomas europeos (y algunos no europeos). Tenga en cuenta que Emacs considera los bytes con códigos en este rango como bytes en bruto, no como caracteres, incluso en un búfer de unibyte, es decir, si desactiva los caracteres multibyte. Sin embargo, Emacs puede manejar estos códigos de caracteres como si pertenecieran a uno de los conjuntos de caracteres de un byte a la vez. Para especificar cuál de estos códigos usar, invoque M-x set-language-environment y especifique un entorno de lenguaje adecuado, como 'Latin-n'.

Para obtener más información sobre el funcionamiento de unibyte, consulte Deshabilitación de Multibyte.

Emacs también puede mostrar bytes en el rango de 160 a 255 como caracteres legibles, siempre que el terminal o la fuente en uso los admita. Esto funciona automáticamente. En una pantalla gráfica, Emacs también puede mostrar caracteres de un solo byte a través de conjuntos de fuentes, en efecto, mostrando los caracteres multibyte equivalentes de acuerdo con el entorno de idioma actual. Para solicitarlo, configure la variable unibyte-display-via-language-environment a un valor non-nil. Tenga en cuenta que esta configuración sólo afecta a la forma en que se muestran estos bytes, pero no cambia el hecho fundamental de que Emacs los trata como bytes en bruto, no como caracteres.

Si su terminal no soporta la visualización del juego de caracteres Latin-1, Emacs puede mostrar estos caracteres como secuencias ASCII que al menos le dan una idea clara de lo que son los caracteres. Para ello, cargue la biblioteca iso-ascii. Se podrían implementar bibliotecas similares para otros conjuntos de caracteres latinos, pero hasta ahora no se han implementado. Normalmente, los caracteres no ISO-8859 (códigos decimales entre 128 y 159 inclusive) se muestran como escapes octales. Puede cambiar esto para las versiones "extendidas" no estándar de los juegos de caracteres ISO-8859 utilizando la función standard-display-8bit en la librería disp-table.

Hay dos maneras de introducir caracteres no ASCII de un byte:

Puede utilizar un método de entrada para el entorno de idioma seleccionado. Consulte Métodos
de entrada. Cuando se utiliza un método de entrada en un búfer de unibyte, el carácter
no-ASCII que se especifica con él se convierte a unibyte.

Si el teclado puede generar códigos de caracteres 128 (decimales) o más, que representan
caracteres no ASCII, puede escribir esos códigos de caracteres directamente. En una pantalla
gráfica, no es necesario hacer nada especial para utilizar estas teclas; deben funcionar.
En un terminal de texto, debe utilizar el comando M-x set-keyboard-coding-system o personalizar
la variable keyboard-coding-system para especificar qué sistema de codificación utiliza su
teclado (véase Terminal Coding). Habilitar esta característica probablemente requerirá que use
<ESC> para escribir caracteres Meta; sin embargo, en una terminal de consola o en xterm, puede
disponer que Meta se convierta a <ESC> y aún así pueda escribir caracteres de 8 bits presentes
directamente en el teclado o usando las teclas Compose o AltGr. Véase Entrada de usuario.

Para latín-1 solamente, puede utilizar la clave C-x 8 como prefijo de "caracteres de composición"
para la entrada de caracteres de impresión que no sean latinos-1 de ASCII. C-x 8 es bueno para
la inserción (en el minibúfer así como en otros búferes), para la búsqueda y en cualquier otro
contexto en el que se permita una secuencia de teclas. C-x 8 funciona cargando la librería
iso-transl. Una vez cargada esa librería, la tecla modificadora <Alt>, si el teclado tiene una,
tiene la misma función que C-x 8: usar <Alt> junto con un carácter acentuado para modificar la
letra siguiente. Además, si el teclado tiene teclas para los "caracteres de acento muerto" del
latín-1, también se definen para componer con el siguiente carácter, una vez que se haya cargado
iso-transl.

Utilice C-x 8 C-h para listar todas las traducciones disponibles de C-x 8.

39.19 Charsets

En Emacs, charset es la abreviatura de "character set". Emacs admite la mayoría de los conjuntos de caracteres más populares (como ascii, iso-8859-1, cp1250, big5 y unicode), además de algunos conjuntos de caracteres propios (como emacs, unicode-bmp y eight-bit). Todos los caracteres soportados pertenecen a uno o más caracteres.

Emacs normalmente "hace lo correcto" con respecto a los charsets, para que usted no tenga que preocuparse por ellos. Sin embargo, a veces es útil conocer algunos de los detalles subyacentes sobre los conjuntos de caracteres.

Un ejemplo es la selección de fuentes (ver Fuentes). Cada entorno lingüístico (véase Entornos lingüísticos) define una "lista de prioridades" para los distintos conjuntos de caracteres. Al buscar una fuente, Emacs intenta encontrar una que pueda mostrar los caracteres de mayor prioridad. Por ejemplo, en el entorno de idioma japonés, el charset japanese-jisx0208 tiene la máxima prioridad, por lo que Emacs intenta utilizar una fuente cuya propiedad del Registro es `JISX0208.1983-0'.

Hay dos comandos que se pueden utilizar para obtener información sobre los charsets. El comando M-x list-charset-chars solicita un nombre de conjunto de caracteres y muestra todos los caracteres de ese conjunto de caracteres. El comando M-x describe-character-set solicita un nombre de charset, y muestra información sobre ese charset, incluyendo su representación interna dentro de Emacs.

M-x list-character-sets muestra una lista de todos los charsets soportados. La lista proporciona los nombres de los conjuntos de caracteres e información adicional para identificar cada conjunto de caracteres; consulte el Registro Internacional de Conjuntos de Caracteres Codificados para obtener más detalles. En esta lista, los charsets se dividen en dos categorías: los charsets normales se enumeran primero, seguidos de los charsets suplementarios. Un charset suplementario es aquel que se utiliza para definir otro charset (como padre o subconjunto), o para proporcionar compatibilidad con versiones anteriores de Emacs.

Para saber a qué juego de caracteres pertenece un carácter del búfer, coloque el punto delante de él y escriba C-u C-x = (consulte Características internacionales).

39.20 edición bidireccional

Emacs admite la edición de texto escrito con guiones, como el árabe y el hebreo, cuyo orden natural de presentación del texto horizontal es de derecha a izquierda. Sin embargo, los dígitos y el texto latino incrustado en estos guiones se muestran de izquierda a derecha. Tampoco es raro tener pequeñas porciones de texto en árabe o hebreo incrustadas en un documento que de otra manera sería latino; por ejemplo, como comentarios y cadenas en un archivo fuente del programa. Por estas razones, el texto que utiliza estos scripts es en realidad bidireccional: una mezcla de ejecuciones de caracteres de izquierda a derecha y de derecha a izquierda.

Esta sección describe las facilidades y opciones que ofrece Emacs para la edición de texto bidireccional.

Emacs almacena texto de derecha a izquierda y bidireccional en el llamado orden lógico (o de lectura): la posición del búfer o cadena del primer carácter que se lee precede a la del siguiente carácter. La reordenación del texto bidireccional en el orden visual se realiza en el momento de la visualización. Como resultado, las posiciones de los personajes ya no aumentan monótonamente con sus posiciones en pantalla. Emacs implementa el Algoritmo Unicode Bidireccional descrito en el Anexo Unicode Standard #9, para reordenar el texto bidireccional para su visualización.

La variable de buffer-local bidi-display-reordering controla si el texto en el búfer es reordenado para su visualización. Si su valor es non-nil, Emacs reordena los caracteres que tienen direccionalidad de derecha a izquierda cuando se muestran. El valor por defecto es t.

Cada párrafo de texto bidireccional puede tener su propia dirección base, de derecha a izquierda o de izquierda a derecha. (Los límites de los párrafos son líneas vacías, es decir, líneas que consisten enteramente en caracteres de espacios en blanco.) El texto de los párrafos de izquierda a derecha comienza en la pantalla en el margen izquierdo de la ventana y se trunca o continúa cuando alcanza el margen derecho. Por el contrario, el texto en los párrafos de derecha a izquierda se muestra empezando por el margen derecho y continúa o se trunca en el margen izquierdo.

Emacs determina dinámicamente la dirección base de cada párrafo, basándose en el texto al principio del párrafo. Sin embargo, a veces un buffer puede necesitar forzar una cierta dirección de base para sus párrafos. La variable bidi-paragraph-direction, si es non-nil, desactiva la determinación dinámica de la dirección base, y en su lugar obliga a todos los párrafos del buffer a tener la dirección especificada por su valor buffer-local. El valor puede ser de derecha a izquierda o de izquierda a derecha. Cualquier otro valor se interpreta como nil.

Alternativamente, puede controlar la dirección base de un párrafo insertando caracteres especiales de formato delante del párrafo. El carácter especial RIGHT-TO-LEFT MARK, o rlm, fuerza la dirección de derecha a izquierda en el siguiente párrafo, mientras que LEFT-TO-RIGHT MARK, o lrm fuerza la dirección de izquierda a derecha. (Puede utilizar C-x 8 <RET> para insertar estos caracteres.) En una sesión de GUI, los caracteres lrm y rlm se muestran como caracteres en blanco muy finos; en los terminales de texto se muestran como espacios en blanco.

Debido a que los caracteres se reordenan para su visualización, los comandos de Emacs que funcionan en el orden lógico o en tramos de posiciones de búfer pueden producir efectos inusuales. Por ejemplo, los comandos C-f y C-b mueven el punto en el orden lógico, de modo que el cursor a veces salta cuando el punto atraviesa texto bidireccional reordenado. Del mismo modo, una región resaltada que cubra un rango contiguo de posiciones de caracteres puede parecer discontinua si la región abarca el texto reordenado. Esto es normal y similar al comportamiento de otros programas que soportan texto bidireccional.

40 Modos, Mayor y Menor

Emacs contiene muchos modos de edición que alteran su comportamiento básico de forma útil. Estos se dividen en modos principales y modos secundarios.

Los modos principales proporcionan facilidades especializadas para trabajar con un tipo de archivo en particular, como un archivo fuente C (ver Programas), o un tipo particular de búfer que no sea de archivo, como un búfer shell (ver Shell). Los modos principales son mutuamente excluyentes; cada búfer tiene un solo modo principal en cualquier momento.

Los modos menores son características opcionales que puede activar o desactivar, no necesariamente específicas de un tipo de archivo o búfer. Por ejemplo, el modo de llenado automático es un modo menor en el que <SPC> rompe las líneas entre palabras a medida que escribe (ver Llenado automático). Los modos menores son independientes entre sí y del modo mayor seleccionado.

Modos principales:   Modo Texto vs. Modo Lisp vs. Modo C....
Modos menores:       Característica que se puede activar independientemente de cualquier otra.
Selección de modos:  Cómo se eligen los modos cuando se visitan archivos.

40.1 Modo principal

Cada búfer posee un modo principal, que determina el comportamiento de edición de Emacs mientras ese búfer es actual. La línea de modo normalmente muestra el nombre del modo principal actual, entre paréntesis (ver Línea de modo).

El modo principal menos especializado se llama modo Fundamental. Este modo no tiene redefiniciones específicas de modo ni ajustes de variables, de modo que cada comando de Emacs se comporta de la forma más general, y cada variable de opción de usuario se encuentra en su estado predeterminado.

Para editar texto de un tipo específico que Emacs conoce, como código Lisp o texto en inglés, normalmente se utiliza un modo principal más especializado, como el modo Lisp o el modo Text. La mayoría de los modos principales se dividen en tres grupos principales. El primer grupo contiene modos para texto normal, ya sea simple o con marcas. Incluye modo Text, modo HTML, modo SGML, modo TeX y modo Outline. El segundo grupo contiene modos para lenguajes de programación específicos. Estos incluyen el modo Lisp (que tiene varias variantes), el modo C, el modo Fortran y otros. El tercer grupo está formado por los modos principales que no están asociados directamente a los archivos; se utilizan en los búferes creados para fines específicos por Emacs, como el modo Dired para los búferes fabricados para Dired (ver Dired), el modo Message para los búferes fabricados para C-x m (ver Enviar correo), y el modo Shell para los búferes utilizados para comunicarse con un proceso de shell inferior (ver Interactive Shell).

El valor del modo principal de la variable major-mode es un símbolo con el mismo nombre que el comando de modo principal (por ejemplo, lisp-mode). Esta variable se fija automáticamente; no debe cambiarla usted mismo.

El valor predeterminado de major-mode determina el modo principal que se utilizará para los archivos que no especifiquen un modo principal y para los nuevos búferes creados con C-x b. Normalmente, este valor por defecto es el símbolo del fundamental-mode, que especifica el modo Fundamental. Puede cambiar este valor predeterminado a través de la interfaz de personalización (ver Personalización fácil), o añadiendo una línea como esta a su archivo init (ver Archivo Init):

(setq-modo principal predeterminado 'modo texto)

Si el valor predeterminado del major-mode es nil, el modo principal se toma del búfer actual anterior.

Los modos principales especializados a menudo cambian el significado de ciertas teclas para hacer algo más adecuado para el modo. Por ejemplo, los modos de lenguaje de programación enlazan <TAB> para sangrar la línea actual de acuerdo con las reglas del lenguaje (ver Indentación). Las teclas que se cambian comúnmente son <TAB>, <DEL>, y C-j. Muchos modos también definen comandos especiales propios, normalmente enlazados en la clave de prefijo C-c. Los modos principales también pueden alterar las opciones del usuario y las variables; por ejemplo, los modos de lenguaje de programación suelen establecer un valor para la variable comment-start, que determina cómo se delimitan los comentarios del código fuente (ver Comentarios).

Para ver la documentación del modo principal actual, incluida una lista de sus enlaces de teclas, escriba C-h m (describe-mode).

Cada modo principal, aparte del modo Fundamental, define un hook de modo, una lista personalizable de funciones Lisp para ejecutar cada vez que el modo está habilitado en un buffer. Vea Hooks, para más información sobre los Hooks. Cada hook de modo lleva el nombre de su modo principal, por ejemplo, el modo Fortran tiene fortran-mode-hook. Además, todos los modos principales basados en texto funcionan en text-mode-hook, y todos los modos de lenguaje de programación funcionan en modo prog-mode-hook, antes de ejecutar sus propios hooks de modo. Las funciones de hook pueden mirar el valor de la variable major-mode para ver qué modo se está introduciendo realmente.

Los hooks de modo se utilizan comúnmente para habilitar modos menores (ver Modos Menores). Por ejemplo, puede poner las siguientes líneas en su archivo init para habilitar el modo Flyspell minor en todos los modos principales basados en texto (ver Ortografía), y el modo Eldoc minor en el modo Lisp de Emacs (ver Lisp Doc):

(add-hook 'text-mode-hook 'flyspell-mode) (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)

40.2 Modos de menores

Un modo menor es un modo de edición opcional que altera el comportamiento de Emacs de una forma bien definida. A diferencia de los modos principales, cualquier número de modos menores puede estar en efecto en cualquier momento. Algunos modos menores son locales de búfer, y pueden activarse (enabled) en ciertos búferes y desactivarse (disabled) en otros. Otros modos menores son globales: aunque están habilitados, afectan a todo lo que se hace en la sesión de Emacs, en todos los búferes. La mayoría de los modos menores están desactivados por defecto, pero algunos están activados por defecto.

La mayoría de los modos menores locales de búfer se encuentran en la línea de modo cuando están habilitados, justo después del indicador de modo principal. Por ejemplo,'Fill' en la línea de modo significa que el modo de llenado automático está activado. Véase Línea de modo.

Al igual que los modos principales, cada modo menor está asociado a un comando de modo, cuyo nombre consiste en el nombre del modo seguido de '-modo'. Por ejemplo, el comando de modo para el llenado automático es el auto-fill-mode. Pero a diferencia de un comando de modo principal, que activa el modo, el comando de modo para un modo menor puede activarlo o desactivarlo:

Si invoca el comando de modo directamente sin argumento de prefijo (ya sea a través de M-x,
o vinculándolo a una tecla y escribiendo esa tecla; vea Enlaces de teclas), eso cambia el
modo menor. El modo menor se activa si estaba apagado, y se desactiva si estaba encendido.

Si invoca el comando mode con un argumento prefijo, el modo menor se desactiva incondicionalmente
si ese argumento es cero o negativo; de lo contrario, se activa incondicionalmente.

Si el comando de modo se llama a través de Lisp, el modo menor se activa incondicionalmente
si el argumento se omite o es nulo. Esto hace que sea fácil activar un modo menor desde un hook
de modo mayor (ver Modos Mayores). Un argumento no-nil se maneja como un argumento de prefijo
interactivo, como se describió anteriormente.

La mayoría de los modos menores también tienen una variable de modo, con el mismo nombre que el comando mode. Su valor es non-nil si el modo está habilitado, y nil si está deshabilitado. En general, no debe intentar activar o desactivar el modo cambiando el valor de la variable mode directamente en Lisp; en su lugar, debe ejecutar el comando mode. Sin embargo, configurar la variable de modo a través de la interfaz Customize (ver Personalización fácil) siempre habilitará o deshabilitará correctamente el modo, ya que Customize ejecuta automáticamente el comando de modo por usted.

La siguiente es una lista de algunos modos menores locales de búfer:

abbrev mode expande automáticamente el texto basándose en definiciones de abreviaturas
predefinidas. Ver Abbrevs.

auto fill mode inserta nuevas líneas a medida que escribe para evitar que las líneas
se alarguen demasiado. Ver filling.

auto savve mode guarda el contenido del búfer periódicamente para reducir la cantidad
de trabajo que puede perder en caso de una caída. Consulte auto save.

enriched mode permite editar y guardar el texto formateado. Ver enriched text.

flyspell mode resalta automáticamente las palabras mal escritas. Ver spelling.

font-lock mode resalta automáticamente ciertas unidades de texto que se encuentran en
los programas. Está habilitado globalmente de forma predeterminada, pero puede
deshabilitarlo en búferes individuales. Ver faces.

lLinum mode muestra el número de línea de cada línea en el margen izquierdo de la ventana.

outline minor mode proporciona facilidades similares al modo mayor llamado modo de contorno.
Consulte outline mode.

overwrite mode hace que los caracteres de impresión ordinarios reemplacen al texto existente
en lugar de empujarlo hacia la derecha. Por ejemplo, si el punto está delante de la `B' en
'Foobar', entonces en modo overwrite escribiendo una G la cambia a 'Foogar', en lugar de
producir 'Foogbar' como de costumbre. En el modo overwrite, el comando C-q inserta el siguiente
carácter, sea cual sea, incluso si se trata de un dígito, lo que le da la posibilidad de
insertar un carácter en lugar de reemplazar un carácter existente. El comando mode,
overwrite-mode, está vinculado a la tecla <Insert>.

binary oOverwrite mode es una variante del modo overwrite para editar archivos binarios;
trata las líneas nuevas y las pestañas como otros caracteres, de modo que sobrescriben a otros
caracteres y pueden ser sobrescritos por ellos. En binary overwrite mode, los dígitos después
de C-q especifican un código de carácter octal, como de costumbre.

visual line mode realiza el "word wrapping", haciendo que las líneas largas se envuelvan
en los límites de las palabras. Vea visual line mode.

Y aquí hay algunos modos menores globales útiles:

column number mode permite mostrar el número de columna actual en la línea de modo. Véase
mode lineo.

delete selection mode hace que la inserción de texto elimine primero el texto en el área
si el área está activa. Consulte use region.

icomplete mode muestra una indicación de las completaciones disponibles cuando usted está
en el minibúfer y la compleción está activa. Vea completion option.

line number mode permite mostrar el número de línea actual en la línea de modo. Está
habilitado por defecto. Véase mode line.

menu bar mode da a cada fotograma una barra de menús. Está habilitado por defecto.
Vea menu bars.

scroll bar mode da a cada ventana una barra de desplazamiento. Está habilitada por defecto,
pero la barra de desplazamiento sólo se muestra en los terminales gráficos. Vea scroll bars.

tool bar mode da a cada frame una barra de herramientas. Está habilitada por defecto, pero
la barra de herramientas sólo se muestra en los terminales gráficos. Vea tool bars.

transient mark mode resalta la región y hace que muchos comandos de Emacs operen en la región
cuando la marca está activa. Está habilitado por defecto. Ver Mark.

40.3 Selección de los modos de archivo

Cuando visita un archivo, Emacs elige automáticamente un modo principal. Normalmente, hace la elección basándose en el nombre del archivo (por ejemplo, los archivos cuyos nombres terminan en '.c' se editan normalmente en modo C), pero a veces elige el modo principal basándose en texto especial del archivo. Este texto especial también se puede utilizar para habilitar los modos menores locales de búfer.

Aquí está el procedimiento exacto:

En primer lugar, Emacs comprueba si el archivo contiene variables de modo local. Ver Variables de archivo. Si hay una variable local de archivo que especifica un modo principal, Emacs utiliza ese modo principal, ignorando todos los demás criterios. Existen varios métodos para especificar un modo principal utilizando una variable local de archivo; el más sencillo es poner el nombre del modo en la primera línea no en blanco, precedido y seguido por '-*-'. También puede aparecer otro texto en la línea. Por ejemplo:

; -*-Lisp-*-

le dice a Emacs que use el modo Lisp. Observe cómo se utiliza el punto y coma para hacer que Lisp trate esta línea como un comentario. Podrías escribir de forma equivalente:

; -*- mode: Lisp;-*-

También puede utilizar variables locales de archivo para especificar modos menores locales del búfer, utilizando especificaciones de evaluación. Por ejemplo, esta primera línea no en blanco pone el búfer en modo Lisp y activa el modo auto-fill:

; -*- mode: Lisp; eval: (auto-fill-mode 1); -*-

Tenga en cuenta, sin embargo, que normalmente no es apropiado habilitar los modos menores de esta manera, ya que la mayoría de los modos menores representan las preferencias individuales del usuario. Si usted personalmente desea usar un modo menor para un tipo de archivo en particular, es mejor activar el modo menor a través de un hook de modo mayor (ver Modos Mayores).

En segundo lugar, si no hay ninguna variable de archivo que especifique un modo principal, Emacs comprueba si el contenido del archivo comienza por #! Si es así, eso indica que el archivo puede servir como un comando ejecutable de shell, que funciona ejecutando un intérprete nombrado en la primera línea del archivo (el resto del archivo se utiliza como entrada para el intérprete). Por lo tanto, Emacs intenta utilizar el nombre del intérprete para elegir un modo. Por ejemplo, un archivo que comienza con '#!/usr/bin/perl' se abre en modo Perl. La variable *interpreter-mode-alist*especifica la correspondencia entre los nombres de los programas de interpretación y los modos principales.

Cuando la primera línea comienza con "#!", normalmente no se puede utilizar la función "-*-" en la primera línea, porque el sistema se confundiría al ejecutar el intérprete. Por lo tanto, Emacs busca '-*-' en la segunda línea de dichos archivos, así como en la primera línea. Lo mismo es cierto para las páginas de manual que empiezan con la cadena mágica ''\'' para especificar una lista de preprocesadores troff.

En tercer lugar, Emacs intenta determinar el modo principal mirando el texto al principio del búfer, basado en la variable magic-mode-alist. Por defecto, esta variable es nil (una lista vacía), por lo que Emacs omite este paso; sin embargo, puede personalizarlo en el archivo init (consulte Init File). El valor debe ser una lista de elementos del formulario:

(regexp . mode-function)

donde regexp es una expresión regular (ver Regexps), y mode-function es un comando de modo principal. Si el texto al principio del archivo coincide con regexp, Emacs elige el modo principal especificado por mode-function.

Alternativamente, un elemento de magic-mode-alistmagic-mode-alist puede tener la forma:

(match-function . mode-function)

donde match-function es una función Lisp que se llama al principio del buffer; si la función devuelve no-nil, Emacs establece el modo principal con mode-function.

En cuarto lugar, si Emacs aún no ha encontrado un modo principal adecuado, examina el nombre del archivo. La correspondencia entre los nombres de archivo y los modos principales es controlada por la variable auto-mode-alist. Su valor es una lista en la que cada elemento tiene esta forma:

(regexp . mode-function)

o este formulario:

(regexp mode-function flag)

Por ejemplo, un elemento que normalmente se encuentra en la lista tiene la forma ("\\.c\\'" . c-mode), y es responsable de seleccionar el modo C para los archivos cuyos nombres terminan en .c. (Tenga en cuenta que en la sintaxis de Lisp es necesario incluir una "\" en la cadena, que debe utilizarse para suprimir el significado especial de "'.'' en regexps.) Si el elemento tiene la forma (regexp mode-function flag) y el indicador es non-nil, entonces después de llamar a mode-function, Emacs descarta el sufijo que coincidió con regexp y busca de nuevo en la lista otra coincidencia.

En GNU/Linux y otros sistemas con nombres de archivos sensibles a mayúsculas y minúsculas, Emacs realiza una búsqueda sensible a mayúsculas y minúsculas a través de auto-mode-alist; si esta búsqueda falla, realiza una segunda búsqueda insensible a mayúsculas y minúsculas a través de la lista. Para suprimir la segunda búsqueda, cambie la variable auto-mode-case-fold a nil. En sistemas con nombres de archivo sin distinción entre mayúsculas y minúsculas, como Microsoft Windows, Emacs realiza una única búsqueda sin distinción entre mayúsculas y minúsculas a través de auto-mode-alist.

Por último, si Emacs aún no ha encontrado un modo principal para usar, compara el texto al principio del búfer con la variable magic-fallback-mode-alist. Esta variable funciona como magic-mode-alist, descrita anteriormente, excepto que es consultada sólo después de auto-mode-alist. Por defecto, magic-fallback-mode-alist contiene formularios que verifican archivos de imagen, archivos HTML/XML/SGML y archivos PostScript.

Si ha cambiado el modo principal de un búfer, puede volver al modo principal que Emacs habría elegido automáticamente, escribiendo M-x normal-mode. Esta es la misma función que las llamadas a los archivos de búsqueda para elegir el modo principal. También procesa la línea '-*-' del archivo o la lista de variables locales (si las hay). Ver Variables de archivo.

Los comandos C-x C-w y set-visited-file-name cambian a un nuevo modo principal si el nuevo nombre de archivo implica un modo (ver Guardar). (C-x C-s hace esto también, si el búfer no estaba visitando un archivo.) Sin embargo, esto no sucede si el contenido del búfer especifica un modo mayor, y ciertos modos mayores "especiales" no permiten que el modo cambie. Puede desactivar esta función de cambio de modo configurando change-major-mode-with-file-name a nil.

41 Sangría

La sangría se refiere a la inserción o ajuste de caracteres de espacio en blanco (espacio y/o tabulación) al principio de una línea de texto. Este capítulo documenta los comandos de indentación y las opciones comunes al modo Texto y a los modos relacionados, así como a los modos de lenguaje de programación. Consulte la sección Sangría de programa para obtener documentación adicional sobre la sangría en los modos de programación.

La forma más sencilla de realizar la indentación es la tecla <TAB>. En la mayoría de los modos principales, ejecuta el comando indent-for-tab-command. (En C y modos relacionados, <TAB> ejecuta el comando c-indent-line-or-region, que se comporta de forma similar).

<TAB>
   Insertar un espacio en blanco, o sangrar la línea actual, de una manera apropiada para el modo
   (indent-for-tab-command). Si la región está activa, sangrar todas las líneas dentro de ella.

El comportamiento exacto de <TAB> depende del modo principal. En el modo Texto y en los modos principales relacionados, <TAB> normalmente inserta alguna combinación de espacio y caracteres de tabulación para avanzar hasta la siguiente parada de tabulación (ver Paradas de tabulación). Para ello, la posición del primer carácter que no es un espacio en blanco en la línea anterior se trata como un tabulador adicional, por lo que puede utilizar <TAB> para "alinear" el punto con la línea anterior. Si la región está activa (ver Usando Región), <TAB> actúa especialmente: sangrará cada línea en la región de modo que su primer carácter no-espacial esté alineado con la línea anterior.

En los modos de programación, <TAB> sangrará la línea de código actual de forma que tenga sentido dado el código de las líneas anteriores. Si la región está activa, todas las líneas de la región se sangran de esta manera. Si el punto estaba inicialmente dentro de la sangría de la línea actual, se reposiciona al primer carácter que no es un espacio en blanco en la línea.

Si sólo desea insertar un carácter de tabulación en el búfer, escriba C-q <TAB> (consulte Inserción de texto).

Comandos de tabulacion:  Más comandos para realizar sangrados.
Paradar tabulacion:      Puntos de parada para la sangría en los modos de texto.
Sólo espacios:           Usando sólo caracteres de espacio para la sangría.
Indentar opcional:       Características opcionales de tabulacion.

41.1 Los comandos de sangría

Aparte de la <TAB> (indent-for-tab-command), Emacs proporciona una variedad de comandos para realizar la sangría de otras maneras.

C-j
   Realice <RET> seguido de <TAB> (newline-and-indent).

C-M-o
   Divide la línea actual en el punto (split-line). El texto en la línea después del punto se
   convierte en una nueva línea, sangrada en la misma columna donde se encuentra el punto.
   Este comando primero mueve el punto hacia adelante sobre cualquier espacio y tabulador.
   A continuación, el punto se posiciona antes de la nueva línea insertada.

M-m
   Mover (adelante o atrás) al primer carácter que no sea un espacio en blanco en la línea
   actual (back-to-indentation). Si no hay caracteres que no sean espacios en blanco en la
   línea, muévase al final de la línea.

M-i
   Indent en el punto, hasta el siguiente tabulador (tab-to-tab-stop). Véase tab stops.

M-x indent-relative
   Insertar espacio en blanco en el punto, hasta que el punto esté alineado con el primer
   carácter que no es un espacio en blanco en la línea anterior (en realidad, la última
   línea que no es en blanco). Si el punto ya está más a la derecha, ejecute tab-to-tab-stop
   a menos que se le llame con un argumento numérico, en cuyo caso no haga nada.

M-^
   Fusionar la línea anterior y la actual (delete-indentation)). Esto "une" las dos líneas
   limpiamente, reemplazando cualquier sangría en el frente de la línea actual, junto con
   el límite de la línea, por un solo espacio.

   Como caso especial (útil para código Lisp), el espacio simple se omite si los caracteres
   que se van a unir son paréntesis de apertura y cierre consecutivos, o si la unión sigue
   otra línea nueva.

   Si hay un prefijo de relleno, M-^ lo elimina si aparece después de la nueva línea que se
   elimina. Véase fill prefix.

C-M-\
   Muestre todas las líneas de la región, como si hubiera escrito <TAB> al principio de cada
   línea (indent-region).

   Si se proporciona un argumento numérico, escriba con sangría cada línea de la región en ese
   número de columna.

C-x <TAB>
   Desplazar cada línea en la región a una distancia fija, a la derecha o a la izquierda
   (indent-rigidly). La distancia a mover se determina por el argumento numérico (positivo
   para mover hacia la derecha, negativo para mover hacia la izquierda).

   Este comando se puede utilizar para eliminar todas las sangrías de las líneas en la región,
   invocándolo con un argumento negativo grande, por ejemplo, C-u -1000 C-x <TAB>.

41.2 Parar tabulaciones

Emacs define ciertos números de columna como tabuladores. Se utilizan como puntos de parada por <TAB> al insertar espacios en blanco en modo Texto y modos relacionados (ver Indentación), y por comandos como M-i (ver Comandos de Indentación). Por defecto, las tabulaciones se encuentran cada 8 columnas. Estas posiciones se almacenan en tab-stop-list, cuyo valor es una lista de números de columna en orden creciente.

En lugar de personalizar la variable tab-stop-list directamente, una forma conveniente de ver y establecer paradas en la tabulación es mediante el comando M-x edit-tab-stops. Esto cambia a un búfer que contiene una descripción de la configuración del tabulador, que tiene el siguiente aspecto:

       :       :       :       :       :       :
0         1         2         3         4
0123456789012345678901234567890123456789012345678
To install changes, type C-c C-c

La primera línea contiene dos puntos en cada tabulador. Los números en las dos líneas siguientes están presentes sólo para indicar dónde están los dos puntos.

Puede editar este búfer para especificar diferentes paradas de tabulación colocando dos puntos en las columnas deseadas. El búfer utiliza el modo Overwrite (ver Modos Menores). Cuando haya terminado, escriba C-c C-c para que las nuevas paradas de tabulación surtan efecto. Normalmente, los nuevos ajustes de parada de tabulación se aplican a todos los búferes. Sin embargo, si ha hecho que la variable tab-stop-list sea local para el búfer donde llamó a M-x edit-tab-stops (ver Locales), entonces los nuevos ajustes de tabulación se aplican sólo a ese búfer. Para guardar la configuración de las tabulaciones para futuras sesiones de Emacs, utilice la interfaz Customize para guardar el valor de la lista de paradas de tabulación (consulte Personalización sencilla).

Tenga en cuenta que las paradas tabulacion que se tratan en esta sección no tienen nada que ver con la forma en que se muestran los caracteres de las tabulaciones en el búfer. Los caracteres de tabulación siempre se muestran como espacios vacíos que se extienden hasta la siguiente parada de tabulación de la pantalla. Véase Visualización de texto.

41.3 Tabulaciones Vs. espacios

Normalmente, los comandos de indentación insertan (o eliminan) una mezcla óptima de caracteres de espacio y caracteres de tabulación para alinearlos con la columna deseada. Los caracteres de tabulación se muestran como un tramo de espacio vacío que se extiende hasta la siguiente parada de tabulación de visualización. Por defecto, hay una parada de visualización en cada columna de ancho de tabulacion (el valor por defecto es 8). Véase Visualización de texto.

Si lo prefiere, todas las sangrías se pueden hacer sólo con espacios. Para solicitarlo, ajuste la variable indent-tabs-mode del búfer a nil. Consulte Locales, para obtener información sobre la configuración de variables locales de búfer. Tenga en cuenta, sin embargo, que C-q <TAB> siempre inserta un carácter de tabulación, independientemente del valor indent-tabs-mode.

Una de las razones de indent-tabs-mode sin sangría es que no todos los editores muestran los caracteres de las tabulaciones de la misma manera. Los usuarios de Emacs también pueden tener diferentes valores personalizados de tab-width.. Al usar sólo espacios, puede asegurarse de que su archivo siempre tenga el mismo aspecto. Si sólo le importa cómo se ve dentro de Emacs, otra forma de solucionar este problema es establecer la variable de tab-width en una variable local de archivo (consulte Variables de archivo). También hay comandos para convertir tabulaciones en espacios o viceversa, preservando siempre las columnas de todo el texto que no sea un espacio en blanco. M-x tabify escanea la región en busca de secuencias de espacios y convierte secuencias de al menos dos espacios en tabuladores si eso se puede hacer sin cambiar la sangría. M-x untabify cambia todas las tabulaciones de la región a números apropiados de espacios.

41.4 Características convenientes para el sangrado

La variable tab-always-indent ajusta el comportamiento del comando <TAB> (indent-for-tab-command). El valor por defecto, t, da el comportamiento descrito en sangria. Si cambia el valor por el símbolo completo, entonces <TAB> primero intenta sangrar la línea actual, y si la línea ya estaba sangrada, intenta completar el texto en el punto (ver Completar símbolo). Si el valor es nil, entonces <TAB> sangrará la línea actual sólo si el punto está en el margen izquierdo o en la sangría de la línea; de lo contrario, insertará un carácter de tabulación.

El modo de sangrado eléctrico es un modo menor global que sangrará automáticamente la línea después de cada <RET> que escriba. Para cambiar este modo menor, escriba M-x electric-indent-mode.

42 Comandos para las lenguas humanas

Este capítulo describe los comandos de Emacs que actúan sobre el texto, es decir, secuencias de caracteres en un lenguaje humano (a diferencia, por ejemplo, de un lenguaje de programación de ordenadores). Estos comandos actúan teniendo en cuenta las convenciones sintácticas y estilísticas de los lenguajes humanos: convenciones que incluyen palabras, frases, párrafos y mayúsculas. También hay comandos para rellenar, lo que significa reordenar las líneas de un párrafo para que sean aproximadamente iguales en longitud. Estos comandos, aunque están destinados principalmente a la edición de texto, también suelen ser útiles para la edición de programas.

Emacs tiene varios modos principales para editar texto en lenguaje humano. Si el archivo contiene texto ordinario, utilice el modo Texto, que personaliza Emacs en pequeñas cantidades para las convenciones sintácticas del texto. El modo de contorno proporciona comandos especiales para operar sobre texto con una estructura de contorno. El modo Org amplía el modo Outline y convierte a Emacs en un organizador completo: puede gestionar listas TODO, almacenar notas y publicarlas en muchos formatos.

Emacs tiene otros modos principales de texto que contienen comandos "incrustados", como TeX y LaTeX (ver Modo TeX); HTML y SGML (ver Modo HTML); XML (ver el manual de información del modo nXML, que se distribuye con Emacs); y Groff y Nroff (ver Modo Nroff).

Si necesita editar imágenes construidas con caracteres de texto (comúnmente denominadas "arte ASCII"), utilice el modo Imagen, un modo principal especial para editar dichas imágenes. Consulte el modo de imagen.

Palabras:                Moverse y matar palabras.
Sentencias:              Moverse y matar sentencias.
Párrafos:                Moviendo párrafos.
Páginas:                 Moverse por las páginas.
Llenando:                Rellenar o justificar el texto.
Mayusculas:              Cambiar Mayusculas/minusculas del texto.
Modo Texto:              Los modos principales para editar archivos de texto.
Modo outline:            Edición de contornos.
Modo Org:                El organizador de Emacs.
Modo TeX:                Edición de archivos TeX y LaTeX.
Modo HTML:               Edición de archivos HTML y SGML.
Modo Nroff:              Edición de la entrada al formateador nroff.
Texto enriquecido:       Edición de texto "enriquecido" con fuentes, colores, etc.
Tablas basadas en texto: Comandos para editar tablas basadas en texto.
Dos-Columnas:            Dividir columnas de texto en ventanas separadas.

42.1 Palabras

Emacs define varios comandos para desplazarse u operar con palabras:

M-f
   Avanzar sobre una palabra (forward-word).

M-b
   Moverse hacia atrás sobre una palabra (backward-word).

M-d
   Mata hasta el final de una palabra (kill-word).

M-<DEL>
   Matar al principio de una palabra (backward-kill-word).

M-@
   Marque el final de la siguiente palabra (mark-word).

M-t
   Transponer dos palabras o arrastrar una palabra entre las demás (transpose-words).

Observe cómo estas teclas forman una serie paralela a las teclas C-f, C-b, C-d,*<DEL>* y C-t basadas en caracteres. M-@ es análogo a C-@, que es un alias para C-<SPC>.

Los comandos M-f (forward-word) y M-b (backward-word) avanzan y retroceden sobre las palabras. Estas secuencias de teclas basadas en <Meta> son análogas a las secuencias de teclas C-f y C-b, que se mueven sobre caracteres individuales. La analogía se extiende a los argumentos numéricos, que sirven como recuentos de repetición. M-f con un argumento negativo se mueve hacia atrás, y M-b con un argumento negativo se mueve hacia adelante. El movimiento hacia adelante se detiene justo después de la última letra de la palabra, mientras que el movimiento hacia atrás se detiene justo antes de la primera letra.

Los comandos M-f (forward-word) y M-b (backward-word) avanzan y retroceden sobre las palabras. Estas secuencias de teclas basadas en <Meta> son análogas a las secuencias de teclas C-f y C-b, que se mueven sobre caracteres individuales. La analogía se extiende a los argumentos numéricos, que sirven como recuentos de repetición. M-f con un argumento negativo se mueve hacia atrás, y M-b con un argumento negativo se mueve hacia adelante. El movimiento hacia adelante se detiene justo después de la última letra de la palabra, mientras que el movimiento hacia atrás se detiene justo antes de la primera letra.

M-d (kill-word) mata la palabra después del punto. Para ser precisos, mata todo desde el punto hasta el lugar al que se movería M-f. Por lo tanto, si el punto está en el medio de una palabra, M-d mata sólo la parte después del punto. Si algún signo de puntuación se interpone entre el punto y la siguiente palabra, se elimina junto con la palabra. (Si desea matar sólo la palabra siguiente pero no la puntuación anterior, haga M-f para llegar al final, y mate la palabra al revés con M-<DEL>.) M-d acepta argumentos como M-f.

M-<DEL> (backward-kill-word) mata la palabra antes del punto. Mata todo desde el punto donde M-b se movería. Por ejemplo, si el punto está después del espacio en 'FOO, BAR', mata 'FOO, '. Si desea matar sólo 'FOO', y no la coma y el espacio, use M-b M-d en lugar de M-<DEL>.

M-t (transpose-words) intercambia la palabra anterior o la que contiene el punto por la siguiente palabra. Los caracteres delimitadores entre las palabras no se mueven. Por ejemplo,'FOO, BAR' se convierte en 'BAR, FOO' en lugar de 'BAR FOO,'. Véase Transposición, para más información sobre la transposición.

Para operar sobre palabras con una operación que actúa sobre la región, utilice el comando M-@ (mark-word). Este comando establece la marca a la que se movería M-f. Vea Marcar objetos, para más información sobre este comando.

La comprensión de los límites de las palabras de los comandos de palabra se controla mediante la tabla sintáctica. Cualquier carácter puede, por ejemplo, ser declarado como un delimitador de palabras.

También, vea Información de posición para los comandos M-= (count-words-region) y M-x count-words, que cuentan y reportan el número de palabras en la región o buffer.

42.2 Frases

Los comandos de Emacs para manipular frases y párrafos son en su mayoría con las teclas Meta, al igual que los comandos de manipulación de palabras.

M-a
   Regresar al principio de la frase (backward-frase).

M-e
   Avanzar a la final de la frase (forward-sentence).

M-k
   Matar hasta el final de la frase (kill-sentence).
Cx <DEL>     Matar de nuevo al principio de la frase ( backward-kill-sentence ).

La comandos M-a (backward-sentence) y M-e (forward-sentence) se mueven al principio y al final de la frase actual, respectivamente. Fueron elegidos para parecerse a C-a y C-e , que se mueven al principio y al final de una línea. A diferencia de ellos, M-a y M-e se mueven sobre frases sucesivas si se repite.

Moverse hacia atrás sobre una oración coloca un punto justo antes del primer carácter de la oración; mover hacia adelante coloca un punto justo después de la puntuación que termina la oración. Ninguno de los dos se mueve sobre el espacio en blanco en el límite de la oración.

Así como C-a y C-e tienen un comando de matar, C-k, para ir con ellos, M-a y M-e tienen su comando de matar correspondiente: M-k (kill-sentence) mata desde el punto hasta el final de la oración. Con un argumento numérico positivo n, mata las siguientes n oraciones; con un argumento negativo -n, vuelve a matar al principio de la n oración precedente.

La C-x <DEL> (backward-kill-sentence) mata hacia el principio de la oración.

Los comandos de oración asumen que usted sigue la convención de la mecanógrafa americana de poner dos espacios al final de una oración. Es decir, una frase termina dondequiera que haya un carácter '.', '?' o '!' seguido del final de una línea o dos espacios, con cualquier número de caracteres ')', ']', ''', o '"' entre ellos. Una frase también comienza o termina dondequiera que comience o termine un párrafo. Es útil seguir esta convención, ya que permite a los comandos de oración de Emacs distinguir entre los puntos que terminan una oración y los puntos que indican abreviaturas.

Si desea utilizar un solo espacio entre las oraciones, puede establecer la variable sentence-end-double-space a nil para hacer que los comandos de la oración se detengan para espacios individuales. Sin embargo, esto tiene un inconveniente: no hay manera de distinguir entre los puntos que terminan las frases y los que indican abreviaturas. Para una edición cómoda y fiable, le recomendamos que siga la convención de dos espacios. La variable entence-end-double-space también afecta al llenado (ver Comandos de llenado).

La variable sentence-end controla cómo reconocer el final de una oración. Si es non-nil, su valor debe ser una expresión regular, que se utiliza para que coincida con los últimos caracteres de una oración, junto con el espacio en blanco que sigue a la oración (ver Regexps). Si el valor es nil, el valor por defecto, entonces Emacs calcula los extremos de la oración de acuerdo con varios criterios, como el valor sentence-end-double-space.

Algunos idiomas, como el tailandés, no utilizan puntos para indicar el final de una frase. En estos casos, fije la variable sentence-end-without-period a t.

42.3 Los párrafos

Los comandos de Emacs para manipular los párrafos son también claves en Meta.

M-{
   Volver al principio del párrafo anterior (backward-paragraph).

M-}
   Avanzar al siguiente final del párrafo (forward-paragraph).

M-h
   Poner punto y marca en torno a este o en el párrafo siguiente (mark-paragraph).

M-{ (backward-paragraph) se mueve al principio del párrafo actual o anterior (ver abajo la definición de un párrafo). M-} (forward-paragraph) se mueve al final del párrafo actual o siguiente. Si hay una línea en blanco antes del párrafo, M-{ se mueve a la línea en blanco.

Cuando desee operar sobre un párrafo, escriba M-h (mark-paragraph) para establecer la región que lo rodea. Por ejemplo, M-h C-w mata el párrafo alrededor o después del punto. M-h pone el punto al principio y la marca al final del párrafo en el que estaba el punto. Si el punto se encuentra entre párrafos (en una serie de líneas en blanco o en un límite), M-h establece la región alrededor del párrafo siguiente al punto. Si hay líneas en blanco que preceden a la primera línea del párrafo, una de estas líneas en blanco se incluye en la región. Si la región ya está activa, el comando establece la marca sin cambiar de punto, y cada M-h subsiguiente avanza la marca en un párrafo.

La definición de un párrafo depende del modo principal. En el modo Fundamental, así como en el modo Texto y modos relacionados, un párrafo está separado de cada párrafo vecino por una o más líneas en blanco que están vacías, o consisten únicamente de espacio, tabulación y/o caracteres en blanco. En los modos de lenguaje de programación, los párrafos se definen normalmente de forma similar, de modo que se pueden utilizar los comandos de párrafo aunque no haya párrafos como tales en un programa.

Tenga en cuenta que una línea sangrada no es en sí misma un salto de párrafo en el modo Texto. Si desea que las líneas con sangría separen los párrafos, utilice Paragraph-Indent en el modo de texto. Ver Modo Texto.

Si establece un prefijo de relleno, los párrafos se delimitan por todas las líneas que no empiezan con el prefijo de relleno. Ver Llenado.

La definición precisa de un límite de párrafo está controlada por las variables paragraph-separate y paragraph-start. El valor de paragraph-start es una expresión regular que debe coincidir con las líneas que inician o separan los párrafos (ver Regexps). El valor de paragraph-separate es otra expresión regular que debe coincidir con líneas que separan párrafos sin ser parte de ningún párrafo (por ejemplo, líneas en blanco). Las líneas que empiezan un nuevo párrafo y están contenidas en él deben coincidir sólo con paragraph-start, no con paragraph-separate. Por ejemplo, en el modo Fundamental,paragraph-start* es "\f\\|[ \t]*\(", y *paragraph-separate* es "[ \t\f]*\)".

42.4 páginas

En algunos archivos de texto, el texto se divide en páginas delimitadas por el carácter Formfeed (código ASCII 12, también denominado <controll-L>), que se muestra en Emacs como la secuencia de escape ^L (véase Visualización de texto). Tradicionalmente, cuando estos archivos de texto se imprimen en papel, cada carácter de alimentación obliga a un salto de página. La mayoría de los comandos de Emacs lo tratan como cualquier otro carácter, así que puede insertarlo con C-q C-l, borrarlo con <DEL>, etc. Además, Emacs proporciona comandos para moverse por las páginas y operar sobre ellas.

M-x what-page
   Muestra el número de página del punto y el número de línea dentro de esa página.

C-x [
   Mover el punto al límite de la página anterior (backward-page).

C-x ]
   Mover el punto al límite de la página siguiente (forward-page).

C-x C-p
   Poner punto y marca alrededor de esta página (u otra página) (mark-page).

C-x l
   Contar las líneas de esta página (count-lines-page).

M-x what-page cuenta las páginas desde el principio del archivo, y cuenta las líneas dentro de la página, mostrando ambos números en el área de eco.

El comando C-x [ (backward-page) mueve el punto inmediatamente después del delimitador de página anterior. Si el punto ya está justo después de un delimitador de página, salta ese punto y se detiene en el anterior. Un argumento numérico sirve como un recuento de repeticiones. El C-x ] (orward-page) avanza más allá del delimitador de la página siguiente.

El comando C-x C-p (mark-page) pone el punto al principio de la página actual (después del delimitador de página en la parte delantera), y la marca al final de la página (después del delimitador de página al final).

C-x C-p C-w es una forma práctica de matar una página para moverla a otra parte. Si se mueve a otro delimitador de página con C-x [ y C-x ], entonces tire de la página eliminada, todas las páginas se delimitarán correctamente una vez más. La razón por la que C-x C-p sólo incluye el siguiente delimitador de páginas en la región es para garantizarlo.

Un argumento numérico a C-x C-p especifica a qué página ir, en relación con la actual. Cero significa la página actual, una la siguiente y -1 la anterior.

El comando C-x l (count-lines-page) es bueno para decidir dónde dividir una página en dos. Muestra en el área de eco el número total de líneas de la página actual, y luego la divide en las que preceden a la línea actual y las que siguen, como en

Page has 96 (72+25) lines

Observe que la suma está con uno de diferencia; esto es correcto si el punto no está al principio de una línea.

La variable page-delimiter controla dónde comienzan las páginas. Su valor es una expresión regular que coincide con el principio de una línea que separa páginas (ver Regexps). El valor normal de esta variable es "^\f", que coincide con un carácter de salto de página al principio de una línea.

42.5 Texto de llenado

Rellenar el texto significa dividirlo en líneas que se ajusten a un ancho especificado. Emacs rellena de dos maneras. En el modo de llenado automático, la inserción de texto con caracteres de autoinserción también lo rellena automáticamente. También hay comandos de relleno explícitos que puede utilizar al editar texto.

Llenado automático:  El modo Llenado automático rompe automáticamente las líneas largas.
Comandos de llenado: Comandos para rellenar párrafos y líneas centrales.
Rellenar prefijo:    Rellenar párrafos que están sangrados o en un comentario, etc.
Relleno adaptable:   Cómo Emacs puede determinar el prefijo de relleno automáticamente.

42.5.1 El modo Auto Fill

Auto fill mode es un modo menor local de búfer (ver Modos Menores) en el que las líneas se rompen automáticamente cuando se vuelven demasiado anchas. La rotura sólo se produce cuando se escribe un <SPC> o <RET>.

M-x auto-fill-mode
   Habilitar o deshabilitar el modo auto fill mode.

<SPC>, <RET>
   Rompa las líneas cuando sea apropiado.

El comando M-x auto-fill-mode cambia el modo de llenado automático en el búfer actual. Con un argumento numérico positivo, activa el modo de llenado automático, y con un argumento negativo lo desactiva. Si se llama a auto-fill-mode desde Lisp con un argumento omitido o nil, se activa el modo de llenado automático. Para activar el modo de llenado automático automáticamente en ciertos modos principales, añada auto-fill-mode a los hooks de modo (véase Modos principales). Cuando el modo de llenado automático está habilitado, el indicador de modo 'Fill' aparece en la línea de modo (ver Línea de modo).

El modo de llenado automático rompe las líneas automáticamente en los espacios siempre que se alarguen más de la anchura deseada. Esta ruptura de línea ocurre sólo cuando se escribe <SPC> o <RET>. Si desea insertar un espacio o una nueva línea sin permitir el corte de línea, escriba C-q <SPC> o C-q C-j respectivamente. Además, C-o inserta una nueva línea sin romper la línea.

Cuando el modo de llenado automático rompe una línea, intenta obedecer al prefijo de llenado adaptativo: si se puede deducir un prefijo de llenado de la primera y/o segunda línea del párrafo actual, se inserta en la nueva línea (ver Relleno adaptativo). De lo contrario, la nueva línea aparece con sangría, como si hubiera escrito <TAB> en ella (ver Sangría). En un modo de lenguaje de programación, si se rompe una línea en medio de un comentario, el comentario se divide insertando nuevos delimitadores de comentarios según corresponda.

El modo de llenado automático no rellena párrafos enteros; rompe líneas pero no las fusiona. Por lo tanto, la edición en el medio de un párrafo puede resultar en un párrafo que no esté correctamente rellenado. Para rellenarla, llame a los comandos explícitos de rellenado (ver Comandos de relleno).

42.5.2 Comandos de ajuste explícitos

M-q
   Rellenar el párrafo actual (fill-paragraph).

C-x f
   Configurar la columna de relleno (set-fill-column).

M-x fill-region
   Llenar cada párrafo en la región (fill-region).

M-x fill-region-as-paragraph
   Rellenar la región, considerándola como un párrafo.

M-o M-s
   Centrar una línea.

El comando M-q (fill-paragraph) rellena el párrafo actual. Distribuye los saltos de línea dentro del párrafo y elimina cualquier exceso de espacio y tabulaciones que se produzcan dentro del párrafo, de tal forma que las líneas terminan encajando dentro de un cierto ancho máximo.

Normalmente, M-q actúa sobre el párrafo donde está el punto, pero si está entre párrafos, actúa sobre el párrafo después del punto. Si la región está activa, actúa en su lugar sobre el texto de la región. También puede llamar a M-x fill-region para rellenar específicamente el texto en la región.

M-q y fill-region utilizan los criterios habituales de Emacs para encontrar los límites de los párrafos (ver Párrafos). Para un mayor control, puede utilizar M-x fill-region-as-paragraph, que rellena todo lo que hay entre el punto y la marca como un único párrafo. Este comando elimina cualquier línea en blanco dentro de la región, por lo que los bloques de texto separados terminan combinados en un solo bloque.

Un argumento numérico a M-q le dice que justifique el texto así como que lo llene. Esto significa que se insertan espacios adicionales para alinear el margen derecho exactamente en la columna de relleno. Para eliminar los espacios extra, use M-q sin argumento. (Lo mismo para fill-region.)

El ancho máximo de línea para el llenado se especifica en la columna de llenado de la variable fill-column. El valor por defecto (ver Locales) es 70. La forma más fácil de configurar fill-column en el buffer actual es usar el comando C-x f (set-fill-columna). Con un argumento numérico, lo usa como la nueva columna de relleno. Con sólo C-u como argumento, establece fill-column en la posición horizontal actual del punto.

El comando M-o M-s (center-line) centra la línea actual dentro de la columna de relleno actual. Con un argumento n, centra n líneas individualmente y se mueve más allá de ellas. Este encuadernado se realiza en modo Texto y sólo está disponible en ese modo y en los relacionados (ver Modo Texto).

Por defecto, Emacs considera un punto seguido de dos espacios o de una nueva línea como el final de una frase; un punto seguido de un solo espacio indica una abreviatura, no el final de una frase. Por consiguiente, los comandos de relleno no romperán una línea después de un punto seguido de un solo espacio. Si establece la variable sentence-end-double-space en nil, los comandos de relleno romperán una línea después de un punto seguido de un espacio, y pondrán sólo un espacio después de cada punto. Ver Sentencias, para otros efectos y posibles inconvenientes.

Si la variable colon-double-space es non-nil, los comandos de llenado ponen dos espacios después de dos puntos.

Para especificar condiciones adicionales en las que no se permite romper la línea, personalice la variable fill-nobreak-predicate (ver Hooks). Cada función de este hook se llama sin argumentos, con el punto situado donde Emacs está considerando romper una línea. Si una función devuelve un valor non-nil, Emacs no romperá la línea allí. Dos funciones que puede utilizar son fill-single-word-nobreak-p (no romper después de la primera palabra de una oración o antes de la última) y fill-french-nobreak-p (no romper después de '(' o antes de ')', ':' o '?').

42.5.3 El prefijo de ajuste

La función de prefijo de relleno permite rellenar los párrafos para que cada línea comience con una cadena especial de caracteres (como una secuencia de espacios, dando un párrafo con sangría). Puede especificar un prefijo de relleno explícitamente; de lo contrario, Emacs intenta deducirlo automáticamente (consulte Relleno adaptativo).

C-x .
   Establezca el prefijo de relleno (set-fill-prefix).

M-q
   Rellenar un párrafo utilizando el prefijo de relleno actual (fill-paragraph).

M-x fill-individual-paragraphs
   Llenar la región, considerando cada cambio de sangría como el comienzo de un nuevo párrafo.

M-x fill-nonuniform-paragraphs
   Rellenar la región, considerando sólo las líneas del separador de párrafos como el comienzo
   de un nuevo párrafo.

Para especificar un prefijo de relleno para el búfer actual, muévase a una línea que comience con el prefijo deseado, ponga el punto al final del prefijo y escriba C-x . (set-fill-prefix). Para desactivar el prefijo de relleno, especifique un prefijo vacío: escriba C-x . con un punto al principio de una línea.

Cuando un prefijo de relleno está en efecto, los comandos de relleno eliminan el prefijo de relleno de cada línea del párrafo antes de rellenar, y lo insertan en cada línea después de rellenar. (El comienzo de la primera línea del párrafo se deja sin cambios, ya que a menudo esto es intencionalmente diferente.) El modo de llenado automático también inserta el prefijo de llenado automáticamente cuando crea una nueva línea (ver Llenado automático). El comando C-o inserta el prefijo de relleno en las nuevas líneas que crea, cuando lo usa al principio de una línea (ver Líneas en blanco). Por el contrario, el comando M-^ borra el prefijo (si se produce) después de la nueva línea que borra (ver Indentación).

Por ejemplo, si fill-column es 40 y el prefijo de relleno es ';; ', entonces M-q en el siguiente texto

;; This is an ;; example of a paragraph ;; inside a Lisp-style comment.

produce esto:

;; This is an example of a paragraph ;; inside a Lisp-style comment.

Las líneas que no comienzan con el prefijo de relleno se consideran párrafos de inicio, tanto en los comandos M-q como en los comandos de párrafo; esto da buenos resultados para los párrafos con sangría colgante (todas las líneas sangradas excepto la primera). Las líneas que están en blanco o sangradas una vez que el prefijo es removido también separan o inician párrafos; esto es lo que usted quiere si está escribiendo comentarios de varios párrafos con un delimitador de comentarios en cada línea.

Puede utilizar M-x fill-individual-paragraphs para establecer el prefijo de relleno para cada párrafo automáticamente. Este comando divide la región en párrafos, tratando cada cambio en la cantidad de sangría como el comienzo de un nuevo párrafo, y llena cada uno de estos párrafos. Por lo tanto, todas las líneas de un "párrafo" tienen la misma cantidad de sangría. Esa sangría sirve como el prefijo de relleno para ese párrafo.

M-x fill-nonuniform-paragraphs es un comando similar que divide la región en párrafos de una manera diferente. Considera que sólo las líneas de separación de párrafos (tal como paragraph-separate) son el comienzo de un nuevo párrafo. Ya que esto significa que las líneas de un párrafo pueden tener diferentes cantidades de sangría, el prefijo de relleno utilizado es la menor cantidad de sangría de cualquiera de las líneas del párrafo. Esto da buenos resultados con estilos que sangran la primera línea de un párrafo más o menos que el resto del párrafo.

El prefijo de relleno se almacena en la variable fill-prefix. Su valor es una cadena, o nil cuando no hay prefijo de relleno. Esta es una variable por búfer; alterar la variable afecta sólo al búfer actual, pero hay un valor por defecto que también se puede modificar. Ver Locales.

La propiedad de texto de sangría proporciona otra forma de controlar la cantidad de sangría que reciben los párrafos. Ver Hendidura enriquecida.

42.5.4 El llenado de adaptación

Los comandos de relleno pueden deducir automáticamente el prefijo de relleno apropiado para un párrafo en ciertos casos: ya sea espacios en blanco o ciertos caracteres de puntuación al principio de una línea se propagan a todas las líneas del párrafo.

Si el párrafo tiene dos o más líneas, el prefijo de relleno se toma de la segunda línea del párrafo, pero sólo si aparece también en la primera línea.

Si un párrafo tiene una sola línea, los comandos de relleno pueden tomar un prefijo de esa línea. La decisión es complicada porque hay tres cosas razonables que hacer en tal caso:

Utilice el prefijo de la primera línea en todas las líneas del párrafo.

Sangrar las líneas siguientes con espacios en blanco, de modo que se alineen bajo el texto que
sigue al prefijo en la primera línea, pero no copie realmente el prefijo de la primera línea.

No hagas nada especial con la segunda y siguientes líneas.

Estos tres estilos de formato se utilizan comúnmente. Por lo tanto, los comandos de llenado intentan determinar lo que desea, basándose en el prefijo que aparece y en el modo principal. Aquí está el cómo.

Si el prefijo encontrado en la primera línea coincide con adaptive-fill-first-line-regexp, o si parece ser una secuencia de inicio de inicio (esto depende del modo principal), entonces el prefijo encontrado se usa para llenar el párrafo, siempre y cuando no actúe como un iniciador de párrafo en líneas subsiguientes.

De lo contrario, el prefijo encontrado se convierte a un número equivalente de espacios, y esos espacios se utilizan como el prefijo de relleno para el resto de las líneas, siempre y cuando no actúen como iniciador de párrafos en líneas subsiguientes.

En el modo Texto, y otros modos en los que sólo las líneas en blanco y los delimitadores de página separan párrafos, el prefijo elegido por el relleno adaptativo nunca actúa como un iniciador de párrafos, por lo que siempre se puede utilizar para rellenar.

La variable adaptive-fill-regexp determina qué tipos de comienzos de línea pueden servir como prefijo de relleno: se utilizan todos los caracteres al principio de la línea que coinciden con esta expresión regular. Si ajusta la variable adaptive-fill-mode a nil, el prefijo de llenado nunca se elige automáticamente.

Puede especificar formas más complejas de elegir un prefijo de relleno automáticamente configurando la variable adaptive-fill-function en una función. Esta función se llama con un punto después del margen izquierdo de una línea, y debería devolver el prefijo de relleno apropiado basado en esa línea. Si devuelve nil, adaptive-fill-regexp tiene la oportunidad de encontrar un prefijo.

42.6 Los comandos de conversión de mayusculas

Emacs tiene comandos para convertir ya sea una sola palabra o cualquier intervalo arbitrario de texto a mayúsculas o minúsculas.

M-l
   Convierte la palabra siguiente en minúsculas (downcase-word).

M-u
   Convierte la siguiente palabra en mayúscula (upcase-word).

M-c
   Mayúscula la siguiente palabra (capitalize-word).

C-x C-l
   Convertir región a minúsculas (downcase-region).

C-x C-u
   Convertir región a mayúsculas (upcase-region).

M-l (downcase-word) convierte la palabra después de un punto a minúsculas, pasando de una a otra. Así, repetir M-l convierte palabras sucesivas. M-u (upcase-word) se convierte a todas las mayúsculas, mientras que M-c (capitalize-word) pone la primera letra de la palabra en mayúsculas y el resto en minúsculas. Todos estos comandos convierten varias palabras a la vez si se les da un argumento. Son especialmente convenientes para convertir una gran cantidad de texto de todas las mayúsculas a mayúsculas, porque puede desplazarse por el texto usando M-l, M-u o M-c en cada palabra según corresponda, ocasionalmente usando M-f en lugar de omitir una palabra.

Cuando se le da un argumento negativo, los comandos de conversión de caso de palabra se aplican al número apropiado de palabras antes del punto, pero no mueven el punto. Esto es conveniente cuando acaba de escribir una palabra en el caso equivocado: puede dar el comando de conversión y continuar escribiendo.

Si un comando de conversión de mayúsculas y minúsculas se da en medio de una palabra, se aplica sólo a la parte de la palabra que sigue al punto. (Esto es comparable a lo que hace M-d (kill-word). Con un argumento negativo, la conversión se aplica sólo a la parte de la palabra anterior al punto.

Los otros comandos de conversión son C-x C-u (upcase-region) y C-x C-l (downcase-region), que convierten todo entre el punto y la marca al caso especificado. El punto y la marca no se mueven.

Los comandos de conversión upcase-region y downcase-region están normalmente desactivados. Esto significa que te piden confirmación si intentas usarlos. Cuando confirme, puede activar el comando, lo que significa que no volverá a pedir confirmación. Consulte Desactivación.

42.7 Modo de texto

El modo Texto es un modo principal para editar archivos de texto en un idioma humano. Los archivos que tienen nombres que terminan en la extensión .txt se abren normalmente en modo Texto (ver Elección de modos). Para cambiar explícitamente al modo Texto, escriba M-x text-mode.

En el modo Texto, sólo las líneas en blanco y los delimitadores de página separan los párrafos. Como resultado, los párrafos pueden ser sangrados, y el relleno adaptativo determina qué sangría usar cuando se llena un párrafo. Vea Relleno adaptable.

En el modo Texto, el comando <TAB> (indent-for-tab-command normalmente inserta espacios en blanco hasta la siguiente palabra, en lugar de sangrar la línea actual. Vea Sangría, para más detalles.

El modo Texto desactiva las funciones relacionadas con los comentarios, excepto cuando se invocan explícitamente. Cambia la tabla sintáctica para que las comillas simples se consideren parte de las palabras (por ejemplo, 'don't' se considera una palabra). Sin embargo, si una palabra comienza con una sola cita, se trata como un prefijo a los efectos de la capitalización (por ejemplo, M-c convierte 'hola' en 'Hola', como se esperaba).

Si sangras las primeras líneas de los párrafos, entonces deberías usar el modo de Texto de Párrafo-Indente (M-x paragraph-indent-text-mode) en lugar del modo de Texto. En ese modo, no es necesario tener líneas en blanco entre párrafos, porque la sangría de la primera línea es suficiente para comenzar un párrafo; sin embargo, no se admiten los párrafos en los que cada línea está sangrada. Utilice M-x paragraph-indent-minor-mode para habilitar un modo menor equivalente para situaciones en las que, por ejemplo, no debería cambiar el modo principal en la composición del correo.

El modo texto une M-<TAB> a ispell-complete-word. Este comando realiza la finalización de la palabra parcial en el punto anterior del buffer, utilizando el diccionario ortográfico como espacio de palabras posibles. Ver Ortografía. Si su gestor de ventanas define M-<TAB> para cambiar de ventana, puede escribir <ESC> <TAB> o C-M-i en su lugar.

Al entrar en el modo Texto se ejecuta el modo hook de text-mode-hook (ver Modos principales).

Las siguientes secciones describen varios modos principales que se derivan del modo Texto. Estos derivados comparten la mayoría de las características del modo Texto descrito anteriormente. En particular, los derivados del modo Texto ejecutan text-mode-hook antes de ejecutar sus propios hooks.

42.8 Modo outline

El modo outline es un modo principal derivado del modo Texto, que está especializado en la edición de contornos. Proporciona comandos para navegar entre las entradas en la estructura del contorno, y comandos para hacer que partes de un búfer sean temporalmente invisibles, de modo que la estructura del contorno se pueda ver más fácilmente. Escriba M-x outline-mode para cambiar al modo outline. Al entrar en el modo outline se ejecuta el hook text-mode-hook seguido por el hook outline-mode-hook (ver Ganchos).

Cuando utiliza un comando de modo outline para hacer una línea invisible (vea Visibilidad del Esquema), la línea desaparece de la pantalla. Una elipsis (tres puntos seguidos) se muestra al final de la línea visible anterior, para indicar el texto oculto. Múltiples líneas invisibles consecutivas producen una sola elipsis.

Los comandos de edición que funcionan en líneas, como C-n y C-p, tratan el texto de la línea invisible como parte de la línea visible anterior. Matar la elipsis al final de una línea visible realmente mata todo el siguiente texto invisible asociado con la elipsis.

El modo menor outline es un modo menor de búfer local que proporciona los mismos comandos que el modo mayor, el modo outline, pero puede utilizarse junto con otros modos mayores. Puede escribir M-x outline-minor-mode para activar el modo Outline minor en la memoria intermedia actual, o utilizar una configuración de variable local de archivo para habilitarlo en un archivo específico (consulte Variables de archivo).

El modo principal, el modo Outline, proporciona enlaces de teclas especiales en el prefijo C-c. El modo menor outline proporciona enlazamientos similares con C-c @ que el prefijo; esto es para reducir los conflictos con los comandos especiales del modo mayor. (La variable outline-minor-mode-prefix controla el prefijo utilizado.)

Formato de contorno:     Cómo es el texto de un esquema.
Moción de Esquema:       Comandos especiales para moverse por los contornos.
Visibilidad de contorno: Comandos para controlar lo que es visible.
Vistas de contorno:      Contornos y múltiples vistas.
Desplegable:             Plegado significa ampliar los contornos.

42.8.1 Formato de los contornos

El modo outline asume que las líneas en el buffer son de dos tipos: líneas de encabezado y líneas de cuerpo. Una línea de encabezado representa un tema en el esquema. Las líneas de encabezado comienzan con uno o más caracteres de asterisco (''); el número de asteriscos determina la profundidad del encabezado en la estructura del esquema. Por lo tanto, una línea de encabezado con un asterisco () es un tema importante; todas las líneas de encabezado con dos asteriscos (*) entre ésta y la siguiente son sus subtemas; y así sucesivamente. Cualquier línea que no sea una línea de encabezado es una línea de cuerpo. Las líneas del cuerpo pertenecen a la línea de encabezado anterior. Aquí hay un ejemplo:

* Comida
Este es el cuerpo,
que dice algo sobre el tema de la comida.

** Comida deliciosa
Este es el cuerpo de la cabecera de segundo nivel.

** Comida desagradable
Esto podría haber
un cuerpo también, con
varias líneas.

*** La comida del dormitorio.

* Shelter
Otro tema de primer nivel con su encabezado.

Una línea de encabezamiento junto con todas las siguientes líneas del cuerpo se denominan colectivamente una entrada. Una línea de encabezado junto con todas las líneas de encabezado más profundas que siguen y sus líneas de cuerpo se llama subárbol.

Puede personalizar el criterio para distinguir las líneas de encabezado estableciendo la variable outline-regexp. (Las formas recomendadas de hacerlo son en una función de modo principal o con una variable local de archivo.) Cualquier línea cuyo comienzo tenga una coincidencia con esta regexp se considera una línea de encabezado. Las palabras que comienzan dentro de una línea (no en el margen izquierdo) no cuentan.

La longitud del texto coincidente determina el nivel del encabezado; las coincidencias más largas hacen que el nivel anidado sea más profundo. Así, por ejemplo, si un formateador de texto tiene comandos '@chapter', '@section' and '@subsection' para dividir el documento en capítulos, secciones y subsecciones, puede hacer que esas líneas cuenten como líneas de encabezado estableciendo un outline-repex a '"@chap\\|@\\(sub\\)*section"'. Tenga en cuenta el truco: las dos palabras 'chapter' y 'section' son igualmente largas, pero al definir la regexp para que coincida sólo con 'chap' nos aseguramos de que la longitud del texto que coincida con el encabezado de un capítulo sea más corta, de modo que el modo outline sepa que las secciones están contenidas en capítulos. Esto funciona siempre y cuando ningún otro comando comience con @chap.

Puede especificar explícitamente una regla para calcular el nivel de una línea de título fijando la variable outline-level. El valor del nivel de outline debería ser una función que no tome argumentos y devuelva el nivel del encabezado actual. Las formas recomendadas para establecer esta variable son en un comando de modo principal o con una variable local de archivo.

42.8.2 Comandos de Esquema de Movimiento

El modo outline proporciona comandos especiales de movimiento que se mueven hacia atrás y hacia adelante hasta las líneas de encabezado.

C-c C-n
   Mover el punto a la siguiente línea de encabezado visible (outline-next-visible-heading).

C-c C-p
   Mover el punto a la línea de encabezado visible anterior (outline-previous-visible-heading).

C-c C-f
   Mover el punto a la siguiente línea de encabezado visible del mismo nivel que el punto en
   el que se encuentra (outline-forward-same-level).

C-c C-b
   Mover el punto a la línea de título visible anterior del mismo nivel (outline-backward-same-level).

C-c C-u
   Mover el punto hasta un nivel inferior (más inclusivo) visible en la línea de encabezado
   (outline-up-heading).

C-c C-n (outline-next-visible-heading) se mueve hacia abajo a la siguiente línea de encabezado. C-c C-p (outline-previous-visible-heading) se mueve de forma similar hacia atrás. Ambos aceptan argumentos numéricos como repeticiones.

C-c C-f (outline-forward-same-level) y C-c C-b (outline-backward-same-level) se mueven de una línea de encabezado a otra visible a la misma profundidad en el contorno. C-c C-u (outline-up-heading) se mueve hacia atrás a otro encabezado que está menos anidado.

42.8.3 Comandos de visibilidad outline

El modo outline proporciona varios comandos para ocultar o revelar temporalmente partes del búfer, basándose en la estructura del contorno. Estos comandos no se pueden deshacer; sus efectos no son grabados por el mecanismo de deshacer, por lo que solo puede deshacerlos justo después (ver Deshacer).

Muchos de estos comandos actúan sobre la línea de encabezamiento "actual". Si el punto está en una línea de encabezado, es decir, la línea de encabezado actual; si el punto está en una línea del cuerpo, la línea de encabezado actual es la línea de encabezado anterior más cercana. Comandos de visibilidad de contorno

C-c C-c
   Hacer invisible el cuerpo de la línea de rumbo actual (hide-entry).

C-c C-e
   Hacer visible el cuerpo de la línea actual (show-entry).

C-c C-d
   Hacer invisible todo bajo el encabezado actual, sin incluir el encabezado en sí
   (hide-subtree).

C-c C-s
   Hacer visible todo lo que se encuentra bajo el título actual, incluyendo el cuerpo,
   los subtítulos y sus cuerpos (show-subtree).

C-c C-l
   Hacer invisible el cuerpo de la línea de título actual y de todas sus subpartes (hide-leaves).

C-c C-k
   Hacer visibles todas los subtítulos de la línea de título actual, en todos los niveles
   (show-branches).

C-c C-i
   Hacer visibles los subtítulos inmediatos (un nivel por debajo) de la línea de título
   actual (show-children).

C-c C-t
   Hacer invisibles todas las líneas del cuerpo en el buffer (hide-body).

C-c C-a
   Haga visibles todas las líneas del búfer (show-all).

C-c C-q
   Ocultar todo excepto los n niveles superiores de las líneas de encabezado (hide-sublevels).

C-c C-o
   Ocultar todo excepto el título o cuerpo en el que se encuentra el punto, más los títulos que
   conducen desde allí hasta el nivel superior del contorno (hide-other).

lo más simple de estos comandos es C-c C-c (hide-entry), que oculta las líneas del cuerpo siguiendo directamente la línea de rumbo actual, y C-c C-e (show-entry), que las revela. Las subpartes y sus cuerpos no se ven afectados.

Los comandos C-c C-d (hide-subtree) y C-c C-s (show-subtree) son más potentes. Se aplican al subárbol de la línea de título actual: su cuerpo, todas sus subpartes, tanto directas como indirectas, y todos sus cuerpos.

El comando C-c C-l (hide-leaves) oculta el cuerpo de la línea de título actual así como todos los cuerpos en su subárbol; los subtítulos mismos quedan visibles. El comando C-c C-k (show-branches) revela los subtítulos, si habían sido ocultados previamente (por ejemplo, por C-c C-d). El comando C-c C-i (show-children) es una versión más débil de esto; revela sólo los subtítulos directos, es decir, aquellos que están un nivel por debajo.

El comando C-c C-o (hide-other) oculta todo excepto la entrada en la que se encuentra ese punto, además de sus padres (los encabezados que conducen desde allí hasta el nivel superior en el esquema) y los encabezados de nivel superior.

Los comandos restantes afectan a todo el búfer. C-c C-t (hide-body) hace que todas las líneas del cuerpo sean invisibles, de modo que sólo vea la estructura del contorno (como excepción especial, no ocultará las líneas en la parte superior del archivo, que preceden a la primera línea del encabezado, aunque técnicamente sean líneas del cuerpo). C-c C-a (show-all) hace que todas las líneas sean visibles. C-c C-q (hide-sublevelshide-sublevels) oculta todos los encabezados excepto los de nivel superior; con un argumento numérico n, oculta todo excepto los n niveles superiores de las líneas de encabezado.

Cuando la búsqueda incremental encuentra texto que está oculto en el modo outline, hace que esa parte del búfer sea visible. Si sale de la búsqueda en esa posición, el texto permanece visible. También puede hacer que el texto sea visible automáticamente mientras navega en él utilizando el modo Reveal (M-x reveal-mode), un modo menor de búfer local.

42.8.4 Visualización de un esquema en múltiples vistas

Puede visualizar dos vistas de un mismo esquema al mismo tiempo, en ventanas diferentes. Para ello, debe crear un buffer indirecto utilizando M-x make-indirect-buffer. El primer argumento de este comando es el nombre del buffer del esquema existente, y el segundo es el nombre a usar para el nuevo buffer indirecto. Ver Buffers Indirectos.

Una vez que el buffer indirecto existe, puede mostrarlo en una ventana en la forma normal, con C-x 4 b u otros comandos de Emacs. Los comandos del modo outline para mostrar y ocultar partes del texto funcionan en cada búfer independientemente; como resultado, cada búfer puede tener su propia vista. Si desea más de dos vistas en el mismo esquema, cree buffers indirectos adicionales.

42.8.5 Edición plegable

El paquete Foldout extiende el modo Outline y el modo Outline minor con comandos de "plegado". La idea del plegado es hacer zoom en una parte anidada del contorno, mientras que esconde sus partes en niveles más altos.

Considere la posibilidad de utilizar un búfer de modo outline con todo el texto y los subtítulos bajo los encabezados del nivel 1 ocultos. Para ver lo que está oculto bajo uno de estos encabezados, puede usar C-c C-e (M-x show-entry) para exponer el cuerpo, o C-c C-i para exponer los encabezados (nivel 2).

Con Foldout, se utiliza C-c C-z (M-x foldout-zoom-subtree). Esto expone los subtítulos del cuerpo y del siguiente, y reduce la zona para que sólo sean visibles el encabezamiento del nivel 1, el del cuerpo y el del nivel 2. Ahora, para mirar debajo de uno de los encabezados del nivel 2, posicione el cursor sobre él y vuelva a utilizar C-c C-z. Esto expone el cuerpo de nivel 2 y sus subtítulos hijos de nivel 3 y reduce el buffer de nuevo. La ampliación de los subtítulos sucesivos se puede hacer tanto como se desee. Una cadena en la línea de modo muestra lo profundo que has llegado.

Al hacer zoom en un encabezado, para ver sólo los subtítulos hijos, especifique un argumento numérico: C-u C-c C-z. También se puede especificar el número de niveles hijos (compare M-x show-children), por ejemplo, M-2 C-c C-z expone dos niveles de subtítulos hijos. Alternativamente, el cuerpo puede ser especificado con un argumento negativo: M– C-c C-z. Todo el subárbol puede expandirse, de forma similar a C-c C-s (M-x show-subtree), especificando un argumento cero: M-0 C-c C-z.

Mientras está acercando el zoom, puede seguir utilizando las funciones de exposición y ocultación del modo outline sin molestar al Foldout. Además, como el búfer es estrecho, las acciones de edición "globales" sólo afectarán al texto bajo el encabezado ampliado. Esto es útil para restringir los cambios a un capítulo o sección en particular de su documento.

Para desenfoque (salida) de una carpeta, utilice C-c C-x (M-x foldout-exit-fold). Esto oculta todo el texto y los subtítulos bajo el encabezado de nivel superior y le devuelve a la vista anterior del búfer. Al especificar un argumento numérico se sale de ese nivel de pliegues. La especificación de un argumento cero sale de todos los pliegues.

Para cancelar el estrechamiento de un pliegue sin ocultar el texto y los subtítulos, especifique un argumento negativo. Por ejemplo, M–2 C-c C-x sale de dos pliegues y deja expuestos el texto y los subtítulos.

El modo desplegable también proporciona comandos de ratón para entrar y salir de los pliegues, y para mostrar y ocultar texto:

C-M-Mouse-1
   hace zoom en el encabezado en el que se ha hecho clic:

    un solo clic: exponer el cuerpo.
    doble clic:   exponer subtítulos.
    triple clic:  exponer el cuerpo y los subtítulos.
    cuarto click: exponer todo el subárbol.

C-M-Mouse-2
   expone el texto bajo el título en el que se ha hecho clic:

    un solo clic: exponer el cuerpo.
    doble clic:   exponer subtítulos.
    triple clic:  exponer el cuerpo y los subtítulos.
    cuarto click: exponer todo el subárbol.

C-M-Mouse-3
   oculta el texto bajo el encabezado en el que se ha hecho clic o que sale del pliegue:

    un solo clic: ocultar subárbol.
    doble clic:   salir del pliegue y ocultar el texto.
    triple clic:  salir del pliegue sin ocultar el texto.
    cuarto click: salir de todos los pliegues y ocultar el texto.

Puede especificar diferentes claves de modificación (en lugar de Control-Meta-) configurando foldout-mouse-modifiers; pero si ya ha cargado la biblioteca foldout.el, debe recargarla para que surta efecto.

Para usar el paquete Foldout, puede escribir M-x load-library <RET> foldout <RET>; o puede disponer que se haga automáticamente poniendo lo siguiente en su archivo init:

(eval-after-load "outline" '(require 'foldout))

42.9 Modo Org

El modo Org es una variante del modo outline para usar Emacs como organizador y/o sistema de autoría. Los archivos con nombres que terminan en la extensión .org se abren en modo Org (ver Elección de modos). Para cambiar explícitamente al modo Org, escriba M-x org-mode.

En el modo Org, al igual que en el modo Contorno, cada entrada tiene una línea de encabezado que comienza con uno o más caracteres '*'. Ver outline format. Además, cualquier línea que comience con el carácter '#' se trata como un comentario.

El modo Org proporciona comandos para ver y manipular fácilmente la estructura del contorno. El más simple de estos comandos es <TAB> (org-cycle). Si se invoca en una línea de título, pasa por los diferentes estados de visibilidad del subárbol: (i) mostrando sólo esa línea de encabezamiento, (ii) mostrando sólo la línea de encabezamiento y las líneas de encabezamiento de sus hijos directos, si los hubiera, y (iii) mostrando todo el subárbol. Si se invoca en una línea del cuerpo, se ejecuta el enlace global para *<TAB*>.

Escribir <S-TAB> (org-shifttab) en cualquier lugar de un búfer en modo Org hace que la visibilidad de toda la estructura del contorno sea cíclica, entre (i) mostrando sólo las líneas de encabezado de nivel superior, (ii) mostrando todas las líneas de encabezado pero no las líneas de cuerpo, y (iii) mostrando todo.

Puede mover una entrada entera hacia arriba o hacia abajo en el búfer, incluyendo sus líneas de cuerpo y subárbol (si las hay), escribiendo M-<up> (org-metaup) o M-<down> (org-metadown) en la línea de título. Del mismo modo, puede promover o degradar una línea de encabezado con M-<left> (org-metaleft) y M-<right> (org-metaright). Estos comandos ejecutan sus enlaces globales si se invocan en una línea del cuerpo.

Las siguientes subsecciones dan instrucciones básicas para usar el modo Org como organizador y como sistema de autoría.

Organizador de Org: Gestión de listas y agendas de TODO.
Auditoria en Org:   Exportación de buffers de Org a varios formatos.

42.9.1 Org como un organizador

Puede etiquetar una entrada de Org como un elemento TODO escribiendo C-c C-t (org-todo) en cualquier parte de la entrada. Esto añade la palabra clave 'TODO' a la línea de encabezado. Escribir C-c C-t de nuevo cambia la palabra clave a 'DONE'; otro C-c C-t elimina la palabra clave por completo, y así sucesivamente. Puede personalizar las palabras clave utilizadas por C-c C-t mediante la variable org-todo-keywords.

Además de marcar una entrada como TODO, puede adjuntarle una fecha, escribiendo C-c C-s (org-schedule) en la entrada. Esto le pedirá una fecha al abrir el Calendario de Emacs (ver Calendario/Diario), y luego agregará la etiqueta 'SCHEDULED', junto con la fecha seleccionada, debajo de la línea de encabezado. El comando C-c C-d (org-deadline) tiene el mismo efecto, excepto que utiliza la etiqueta DEADLINE.

Una vez que tenga algunos elementos TODO planeados en un archivo Org, puede agregar ese archivo a la lista de archivos de agenda escribiendo C-c [ (org-agenda-file-to-front). El modo Org está diseñado para permitirle mantener fácilmente múltiples archivos de agenda, por ejemplo, para organizar diferentes aspectos de su vida. La lista de las listas se guarda en la variable org-agenda-files.

Para ver los elementos procedentes de las fichas de agenda, escriba M-x org-agenda. Este comando te pide lo que quieres ver: una lista de cosas que hacer esta semana, una lista de elementos TODO con palabras clave específicas, etc.

42.9.2 Org como un Sistema de Autor

Puede que quieras formatear bien tus notas de Org y prepararlas para su exportación y publicación. Para exportar el búfer actual, escriba C-c C-e (org-export) en cualquier parte de un búfer Org. Este comando solicita un formato de exportación; los formatos actualmente admitidos incluyen HTML, LaTeX, OpenDocument (.odt) y PDF. Algunos formatos, como PDF, requieren la instalación de ciertas herramientas del sistema.

Para exportar varios archivos a la vez a un directorio específico, ya sea localmente o a través de la red, debe definir una lista de proyectos a través de la variable org-publish-project-alist. Consulte su documentación para obtener más detalles.

Org soporta un esquema de marcado simple para aplicar formato de texto a los documentos exportados:

- Este texto es /subrayado/
- Este texto está en *negrita*
- Este texto es _underlined_
- Este texto utiliza una =fuente de teletipo=

#+ Begin_quote
'' Esta es una cita ''.
#+ End_quote

#+ Begin_example
Esto es un ejemplo.
#+ End_example

42.10 Modo de TeX

Emacs proporciona modos principales especiales para editar archivos escritos en TeX y sus formatos relacionados. TeX es un potente formateador de texto escrito por Donald Knuth; al igual que GNU Emacs, es software libre. LaTeX es un formato de entrada simplificado para TeX, implementado usando macros TeX. DocTeX es un formato de archivo especial en el que se escriben las fuentes LaTeX, combinando las fuentes con la documentación. SliTeX es una forma especial obsoleta de LaTeX.

El modo TeX tiene cuatro variantes: Modo TeX normal, modo LaTeX, modo DocTeX y modo SliTeX. Estos distintos modos principales difieren sólo ligeramente, y están diseñados para editar los cuatro formatos diferentes. Emacs selecciona el modo apropiado mirando el contenido del búfer. (Esto se hace mediante el comando tex-mode, que normalmente se llama automáticamente cuando se visita un archivo tipo TeX. Véase Selección de modos.) Si el contenido no es suficiente para determinar esto, Emacs elige el modo especificado por la variable tex-default-mode; su valor predeterminado es latex-mode. Si Emacs no adivina bien, puede seleccionar la variante correcta del modo TeX utilizando los comandos M-x plain-tex-mode, M-x latex-mode, M-x slitex-mode, o doctex-mode.

Las siguientes secciones documentan las características del modo TeX y sus variantes. Hay otros paquetes Emacs relacionados con TeX, que no están documentados aquí:

BibTeX mode es un modo principal para los archivos BibTeX, que se utilizan habitualmente
para guardar referencias bibliográficas de documentos LaTeX.

El paquete RefTeX proporciona un modo menor que puede utilizarse con el modo LaTeX para
gestionar referencias bibliográficas. Para obtener más información, consulte el manual
RefTeX Info, que se distribuye con Emacs.

El paquete AUCTeX proporciona funciones más avanzadas para editar TeX y sus formatos
relacionados, incluyendo la capacidad de previsualizar ecuaciones TeX dentro de los búferes
de Emacs. A diferencia del modo BibTeX y del paquete RefTeX, AUCTeX no se distribuye con
Emacs de forma predeterminada. Puede descargarse a través del Menú Paquetes (ver Paquetes);
una vez instalado, consulte el manual de AUCTeX, que se incluye con el paquete.
Edición TeX:   Comandos especiales para la edición en modo TeX.
Edición LaTeX: Comandos adicionales para archivos de entrada LaTeX.
TeX Print:     Comandos para imprimir parte de un archivo con TeX.
TeX Misc:      Personalización del modo TeX, y características relacionadas.

42.10.1 Los comandos de edición de TeX

"
   Insertar, según el contexto, ya sea '``' o '''' o '"'. (tex-insert-quote).

C-j
   Inserte un salto de párrafo (dos líneas nuevas) y compruebe que el párrafo anterior no
   tenga llaves desequilibradas o signos de dólar (tex-terminate-paragraph).

M-x tex-validate-region
   Compruebe cada párrafo en la región para ver si hay llabes desequilibradas o signos de dólar.

C-c {
   Insertar '{}' y posicionar el punto entre ellos (tex-insert-braces).

C-c }
   Avanzar más allá de la siguiente llave cerrada sin igual (up-list).

En TeX, el carácter '"' no se utiliza normalmente; en cambio, las citas comienzan con '``' y terminan con ''''. Por lo tanto, el modo TeX vincula la tecla " al comando tex-insert-quote. Esto inserta '``' después de un espacio en blanco o un corchete abierto, '"' después de una barra invertida, y '''' después de cualquier otro carácter.

Como excepción especial, si escribe " cuando el texto anterior es '``' o '''', Emacs sustituye el texto anterior por un único carácter '"'. Por lo tanto, puede escribir '''' para insertar '"', en caso de que lo necesite. (También puede utilizar C-q " para insertar este carácter.)

En el modo TeX, '$' tiene un código de sintaxis especial que intenta entender la forma en que los delimitadores del modo TeX math coinciden. Cuando se inserta un '$' para salir del modo matemático, se muestra por un segundo la posición del '$' correspondiente que entró en el modo matemático. Esta es la misma característica que muestra la férula abierta que coincide con una férula cerrada que se inserta. Sin embargo, no hay forma de saber si un '$' entra en modo matemático o sale de él; por lo tanto, cuando se inserta un '$' que entra en modo matemático, la posición anterior de '$' se muestra como si fuera una coincidencia, aunque en realidad no estén relacionados.

TeX usa llaves como delimitadores que deben coincidir. Algunos usuarios prefieren mantener las llaves balanceadas en todo momento, en lugar de insertarlas individualmente. Utilice C-c { (tex-insert-braces) para insertar un par de llaves. Deja un punto entre las dos llaves para que pueda insertar el texto que pertenece al interior. Después, use el comando C-c } (up-list) para avanzar más allá de la llave de cierre.

Hay dos comandos para comprobar la coincidencia de las llaves. C-j (tex-terminate-paragraph) comprueba el párrafo anterior al punto, e inserta dos nuevas líneas para comenzar un nuevo párrafo. Emite un mensaje en el área de eco si se encuentra algún desajuste. M-x tex-validate-region comprueba una región, párrafo por párrafo. Los errores se enumeran en un búfer Occur; puede utilizar los comandos habituales del modo occur en ese búfer, como C-c C-c, para visitar un desajuste particular (vea Otra búsqueda repetida).

Tenga en cuenta que los comandos de Emacs cuentan los corchetes y los paréntesis en el modo TeX, no sólo los corchetes. Esto no es estrictamente correcto con el propósito de verificar la sintaxis de TeX. Sin embargo, es probable que los paréntesis y los corchetes se utilicen en el texto como delimitadores coincidentes, y es útil que los diversos comandos de movimiento y la visualización automática de coincidencias funcionen con ellos.

42.10.2 Los comandos de edición LaTeX

el modo LaTeX proporciona algunas características adicionales no aplicable a TeX plano:

C-c C-o
   Insertar '\begin' y '\end'para el bloque LaTeX y posicionar el punto en una línea entre
   ellos (tex-latex-block).

C-c C-e
   Cerrar el bloque LaTeX más interno aún no cerrado (tex-close-latex-block).

En la entrada LaTeX, las etiquetas '\begin' y '\end' se utilizan para agrupar bloques de texto. Para insertar un bloque, escriba C-c C-o (tex-latex-block). Esto pide un tipo de bloque, e inserta las etiquetas apropiadas '\begin' y '\end' que concuerdan, dejando una línea en blanco entre los dos y el punto de movimiento allí.

Al introducir el argumento de tipo de bloque en C-c C-o, puede utilizar los comandos de finalización habituales (véase Completar). La lista de terminación por defecto contiene los tipos de bloque LaTeX estándar. Si desea tipos de bloque adicionales para completar, personalice la lista de nombres de bloques en la variable latex-block-names.

En la entrada LaTeX, las etiquetas "\Begin" y "\End" deben equilibrarse. Puedes usar C-c C-e (tex-close-latex-block) para insertar una etiqueta '\end' que coincida con la última etiqueta no coincidente '\begin'. También sangrará el "\end" para que coincida con el comienzo correspondiente, e insertará una nueva línea después de la etiqueta "\end" si el punto está al principio de una línea. El modo menor latex-electric-env-pair-mode inserta automáticamente una etiqueta '\end' o '\begin' por ti cuando escribes la correspondiente.

42.10.3 Comandos de impresión

Puede invocar TeX como un subproceso de Emacs, suministrando todo el contenido del búfer o sólo parte de él (por ejemplo, un capítulo de un documento más grande).

C-c C-b
   Invoque TeX en todo el buffer de corriente (tex-buffer).

C-c C-r
   Invoque TeX en la región actual, junto con el encabezado del buffer (tex-region).

C-c C-f
   Invoque TeX en el archivo actual (tex-file).

C-c C-v
   Vista previa de la salida del último comando C-c C-r, C-c C-b o C-c C-f (tex-view).

C-c C-p
   Imprimir la salida del último comando C-c C-b, C-c C-r, o C-c C-f (tex-print).

C-c <TAB>
   Invocar BibTeX en el archivo actual (tex-bibtex-file).

C-c C-l
  Recentrar la ventana que muestra la salida de TeX para que se pueda ver la última línea
  (tex-recenter-output-buffer).

C-c C-k
   Matar el subproceso TeX (tex-kill-job).

C-c C-c
   Invoque algún otro comando de compilación en todo el búfer actual (tex-compile).

Para pasar el búfer actual a través de TeX, escriba C-c C-b (tex-buffer). La salida formateada va en un archivo temporal, normalmente un archivo .dvi. Después, puede escribir C-c C-v (tex-view) para iniciar un programa externo, como xdvi, para ver este archivo de salida. También puede escribir C-c C-p (tex-print) para imprimir una copia impresa del archivo de salida.

Por defecto, C-c C-b ejecuta TeX en el directorio actual. La salida de TeX también va en este directorio. Para ejecutar TeX en un directorio diferente, cambie la variable tex-directory al nombre de directorio deseado. Si su variable de entorno TEXINPUTS contiene nombres de directorios relativos, o si sus archivos contienen comandos de '\input' con nombres de archivos relativos, entonces el directorio tex debe ser "." De lo contrario, especificar algún otro directorio, como "/tmp".

La variante TeX del búfer determina qué comando de shell C-c C-b se ejecuta realmente. En el modo Plain TeX, se especifica mediante la variable tex-run-command, que por defecto es "tex". En el modo LaTeX, se especifica mediante la variable tex-run-command, que por defecto es "latex". El comando shell que C-c C-v ejecuta para ver la salida .dvi está determinado por la variable tex-dvi-view-command, independientemente de la variante TeX. El comando shell que C-c C-p que ejecuta para imprimir la salida, está determinado por la variable tex-dvi-print-command.

Normalmente, Emacs añade automáticamente el nombre del archivo de salida a las cadenas de comandos de shell descritas en el párrafo anterior. Por ejemplo, si tex-dvi-view-command es "xdvi", C-c C-v ejecuta xdvi output-file-name. En algunos casos, sin embargo, el nombre del archivo debe estar incrustado en el comando, por ejemplo, si necesita proporcionar el nombre del archivo como argumento a un comando cuya salida se canaliza a otro. Puede especificar dónde poner el nombre del archivo con '*' en la cadena de comandos. Por ejemplo:

(setq tex-dvi-print-command "dvips -f * | lpr")

La salida de terminal de TeX, incluyendo cualquier mensaje de error, aparece en un búfer llamado tex-shell. Si TeX obtiene un error, puede cambiar a este búfer y alimentarlo (esto funciona como en el modo Shell; ver Shell Interactivo). Sin cambiar a este búfer, puede desplazarlo para que su última línea sea visible escribiendo C-c C-l.

Escriba C-c C-k (tex-kill-job) para matar el proceso TeX si ve que su salida ya no es útil. El uso de C-c C-b o C-c C-r también mata cualquier proceso TeX que aún esté en ejecución.

También puede pasar una región arbitraria a través de TeX escribiendo C-c C-r (tex-region). Esto es difícil, sin embargo, porque la mayoría de los archivos de entrada TeX contienen comandos al principio para establecer parámetros y definir macros, sin los cuales ninguna parte posterior del archivo se formateará correctamente. Para resolver este problema, C-c C-r le permite designar una parte del archivo que contiene comandos esenciales; se incluye antes de la región especificada como parte de la entrada de TeX. La parte designada del archivo se llama encabezado.

Para indicar los límites del encabezado en modo TeX simple, se insertan dos cadenas especiales en el archivo. Insértese '%**start of header%**start of header' antes de la cabecera y '%**end of header' después. Cada cadena debe aparecer completamente en una línea, pero puede haber otro texto en la línea antes o después. Las líneas que contienen los dos strings se incluyen en la cabecera. Si '%**start of header' no aparece dentro de las primeras 100 líneas de la memoria intermedia, C-c C-r asume que no hay cabecera.

En modo LaTeX, el encabezado comienza con '\documentclass' o '\documentstyle' y termina con '\begin{document}'. Estos son comandos que LaTeX requiere que use en cualquier caso, por lo que no es necesario hacer nada especial para identificar el encabezado.

Los comandos (tex-buffer) y (tex-region) hacen todo su trabajo en un directorio temporal, y no tienen disponibles ninguno de los archivos auxiliares que TeX necesita para las referencias cruzadas; estos comandos generalmente no son adecuados para ejecutar la copia final en la que todas las referencias cruzadas deben ser correctas.

Cuando quiera los archivos auxiliares para referencias cruzadas, use C-c C-f (tex-file) que ejecuta TeX en el archivo del búfer actual, en el directorio de ese archivo. Antes de ejecutar TeX, ofrece la posibilidad de guardar los búferes modificados. Por lo general, es necesario utilizar (tex-file) dos veces para obtener las referencias cruzadas correctas.

El valor de la variable tex-start-options especifica las opciones para la ejecución de TeX.

El valor de la variable tex-start-commands especifica los comandos TeX para iniciar TeX. El valor por defecto hace que TeX se ejecute en modo continuo. Para ejecutar TeX interactivamente, ponga la variable en "".

Los documentos TeX grandes a menudo se dividen en varios archivos: un archivo principal y subarchivos. La ejecución de TeX en un subfichero normalmente no funciona; tiene que ejecutarse en el fichero principal. Para que tex-file sea útil al tratar un subfichero, puede fijar la variable tex-main-file con el nombre de la carpeta principal. Entonces el archivo de texto ejecuta TeX en ese archivo.

La forma más conveniente de usar el archivo principal de texto es especificarlo en una lista de variables locales en cada uno de los subficheros. Ver Variables de archivo.

Para los archivos LaTeX, puede utilizar BibTeX para procesar el archivo auxiliar para el archivo del búfer actual. BibTeX busca citas bibliográficas en una base de datos y prepara las referencias citadas para la sección de bibliografía. El comando C-c <TAB> (tex-bibtex-file) ejecuta el comando shell (tex-bibtex-command) para producir un archivo '.bbl' para el archivo del buffer actual. Generalmente, necesita hacer C-c C-f (tex-file) una vez para generar el archivo '.aux', luego hacer C-c <TAB> (tex-bibtex-file), y luego repetir C-c C-f (tex-file) dos veces más para obtener las referencias cruzadas correctas.

Para invocar algún otro programa de compilación en el búfer TeX actual, escriba C-c C-c (tex-compile). Este comando sabe cómo pasar argumentos a muchos programas comunes, incluyendo pdflatex, yap, xdvi, y dvips. Puede seleccionar el programa de compilación deseado utilizando las claves de conclusión estándar (véase Conclusión).

42.10.4 Tex modo Miscelánea

Al introducir cualquier variante del modo TeX se ejecutan los hooks text-mode-hook y tex-mode-hook. A continuación, se ejecuta plain-tex-mode-hook, latex-mode-hook, o slitex-mode-hook, lo que sea apropiado. Iniciando el shell TeX se ejecuta el gancho tex-shell-hook. Ver hooks.

Los comandos M-x iso-iso2tex, M-x iso-tex2iso, M-x iso-iso2gtex y M-x iso-gtex2iso pueden utilizarse para convertir entre archivos codificados en latín-1 y equivalentes codificados en TeX.

42.11 SGML y HTML Modos

Los modos principales para SGML y HTML proporcionan soporte de indentación y comandos para operar en las etiquetas. El modo HTML es una variante ligeramente personalizada del modo SGML.

C-c C-n
   Especifique interactivamente un carácter especial e inserte el comando SGML '&' para ese
   carácter (sgml-name-char).

C-c C-t
   Especifique interactivamente una etiqueta y sus atributos (sgml-tag). Este comando le pide
   un nombre de etiqueta y los valores de atributo, luego inserta tanto la etiqueta de apertura
   como la etiqueta de cierre, dejando un punto entre ellas.

   Con un argumento de prefijo n, el comando pone la etiqueta alrededor de las n palabras ya
   presentes en el búfer después del punto. Siempre que una región está activa, coloca la etiqueta
   alrededor de la región (cuando el modo Marca de transición está desactivado, lo hace cuando se
   proporciona un argumento numérico de -1).

C-c C-a
   Insertar interactivamente valores de atributos para la etiqueta actual (sgml-attributes).

C-c C-f
   Saltar a través de un grupo de etiquetas balanceadas (que se extiende desde una etiqueta de
   apertura hasta la etiqueta de cierre correspondiente) (sgml-skip-tag-forward). Un argumento
   numérico actúa como un recuento de repetición.

C-c C-b
   Saltar hacia atrás a través de un grupo de etiquetas balanceadas (que se extiende desde una
   etiqueta de apertura hasta su correspondiente etiqueta de cierre) (sgml-skip-tag-backward).
   Un argumento numérico actúa como un recuento de repetición.

C-c C-d
   Borrar la etiqueta en o después del punto, y borrar también la etiqueta correspondiente
   (sgml-delete-tag). Si la etiqueta en o después de un punto es una etiqueta de apertura, borre
   también la etiqueta de cierre; si es una etiqueta de cierre, borre también la etiqueta de
   apertura.

C-c ? tag <RET>
   Muestra una descripción del significado de la etiqueta (sgml-tag-help). Si la etiqueta de
   argumento está vacía, describa la etiqueta en el punto.

C-c /
   Insertar una etiqueta de cierre para la etiqueta no terminada más interna (sgml-close-tag).
   Si se llama dentro de una etiqueta o comentario, ciérrala en lugar de insertar una etiqueta
   de cierre.

C-c 8
   Alternar un modo menor en el que los caracteres latinos-1 insertan los comandos SGML
   correspondientes que los representan, en lugar de los propios caracteres (modo sgml-nombre-8bit).

C-c C-v
   Ejecute un comando shell (que debe especificar) para validar el búfer actual como SGML
   (sgml-validate).

C-c TAB
   Alternar la visibilidad de las etiquetas existentes en el búfer. Esto puede ser usado como
   una vista previa barata (sgml-tags-invisible).

El modo principal para editar documentos XML se denomina modo nXML. Este es un potente modo principal que puede reconocer muchos de los esquemas XML existentes y utilizarlos para proporcionar la finalización de elementos XML a través de M-<TAB>, así como la validación XML "sobre la marcha" con resaltado de errores. Para habilitar el modo nXML en un búfer existente, escriba M-x nxml-mode o, de forma equivalente, M-x xml-mode. Emacs utiliza el modo nXML para los archivos que tienen la extensión .xml. Para los archivos XHTML, que tienen la extensión .xhtml, Emacs utiliza el modo HTML de forma predeterminada; puede hacer que utilice el modo nXML personalizando la variable auto-mode-alist (ver Elección de modos). El modo nXML se describe en un manual de información, que se distribuye con Emacs.

Puede elegir utilizar el modo SGML menos potente para editar XML, ya que XML es un subconjunto estricto de SGML. Para habilitar el modo SGML en un búfer existente, escriba M-x sgml-mode. Al habilitar el modo SGML, Emacs examina el búfer para determinar si es XML; de ser así, establece la variable sgml-xml-mode a un valor non-nil. Esto hace que los comandos de inserción de etiquetas del modo SGML, descritos anteriormente, siempre inserten también etiquetas de cierre explícito.

42.12 Modo nroff

El modo Nroff, un modo principal derivado del modo Texto, está especializado en la edición de archivos nroff (por ejemplo, páginas de manual de Unix). Escriba M-x nroff-mode para entrar en este modo. Al entrar en el modo Nroff se ejecuta el text-mode-hook, luego el modo de hook de nroff (ver hooks).

En el modo Nroff, las líneas de comandos nroff se tratan como separadores de párrafos, las páginas se separan por comandos '.bp', y los comentarios comienzan con una barra invertida y una doble comilla. También define estos comandos:

M-n
   Moverse al principio de la siguiente línea que no sea un comando nroff (forward-text-line)
   Un argumento es un recuento de repeticiones.

M-p
   Como M-n pero con movimiento hacia arriba (backward-text-line).

M-?
   Muestra en el área de eco el número de líneas de texto (líneas que no son comandos nroff)
   en la región (count-text-lines).

Electric Nroff mode es un modo menor local de búfer que se puede utilizar con el modo Nroff. Para cambiar este modo menor, escriba M-x electric-nroff-mode (ver Modos Menores). Cuando el modo está activado, cada vez que escriba <RET> para finalizar una línea que contiene un comando nroff que abre un tipo de agrupación, el comando nroff para cerrar esa agrupación se inserta automáticamente en la siguiente línea.

Si utiliza el modo Outline minor con el modo Nroff (ver Modo Outline), las líneas de encabezado son líneas del formulario '.H' seguidas de un número (el nivel de encabezado).

42.13 Texto enriquecido

El modo enriquecido es un modo menor para editar archivos de texto formateados de forma WYSIWYG ("lo que ves es lo que obtienes"). Cuando el modo Enriquecido está activado, puede aplicar varias propiedades de formato al texto del búfer, como fuentes y colores; al guardar el búfer, esas propiedades se guardan junto con el texto, utilizando el formato de archivo MIME 'text/enriched'.

El modo enriquecido se utiliza normalmente con el modo Texto (ver Modo Texto). No es compatible con el modo Bloqueo de fuentes, que es utilizado por muchos modos principales, incluyendo la mayoría de los modos de lenguajes de programación, para resaltar la sintaxis (ver Bloqueo de fuentes). A diferencia del modo Enriquecido, el modo Bloqueo de fuentes asigna propiedades de texto automáticamente, basándose en el contenido del búfer actual; esas propiedades no se guardan en el disco.

El archivo etc/enriched.doc en la distribución Emacs sirve como ejemplo de las características del modo Enriquecido.

Modo enriquecido:              Entrar y salir del modo Enriquecido.
Líneas nuevas duras y blandas: Hay dos tipos diferentes de líneas nuevas.
Editar información de formato: Cómo editar las propiedades del texto.
Tipos enriquecidos:            Negrita, cursiva, subrayado, etc.
Indentación enriquecida:       Cambiar los márgenes izquierdo y derecho.
Justificación enriquecida:     Centrado, ajuste del texto con el margen izquierdo o derecho.
Propiedades enriquecidas:      El submenú de propiedades de texto "especiales".

42.13.1 Modo enriquecido

El modo enriquecido es un modo menor local de búfer (ver Modos Menores). Cuando visita un archivo que se ha guardado en el formato "text/enriched", Emacs activa automáticamente el modo Enriched y aplica la información de formato del archivo al texto del búfer. Cuando guarda un búfer con el modo Enriquecido habilitado, se guarda usando el formato 'text/enriched', incluyendo la información de formato.

Para crear un nuevo archivo de texto formateado, visite el archivo inexistente y escriba M-x enriched-mode. Este comando en realidad cambia el modo Enriquecido. Con un argumento de prefijo, activa el modo Enriquecido si el argumento es positivo, y desactiva el modo Enriquecido de lo contrario. Si desactiva el modo Enriquecido, Emacs ya no guarda el búfer usando el formato "text/enriched"; cualquier propiedad de formato que se haya agregado al búfer permanece en el búfer, pero no se guarda en el disco.

El modo enriquecido no guarda todas las propiedades de texto de Emacs, sólo las especificadas en la variable enriched-translations. Éstas incluyen propiedades para las fuentes, los colores, la sangría y la justificación.

Si visita un archivo y Emacs no reconoce que está en formato "text/enriched", escriba M-x format-decode-buffer. Este comando solicita un formato de archivo y vuelve a leer el archivo en ese formato. Si se especifica el formato 'text/enriched', se activa automáticamente el modo Enriched.

Para ver un archivo 'text/enriched' en formato crudo (como texto plano con etiquetas de marcado en lugar de texto formateado), use M-x find-file-literally (ver Visiting).

42.13.2 Las nuevas líneas duras y blandas

En el modo Enriquecido, Emacs distingue entre dos tipos diferentes de líneas nuevas, líneas nuevas duras y líneas nuevas suaves. También puede activar o desactivar esta función en otros búferes, escribiendo M-x use-hard-newlines.

Las nuevas líneas duras se utilizan para separar párrafos, o en cualquier lugar donde sea necesario un salto de línea independientemente de cómo se rellene el texto; las nuevas líneas suaves se utilizan para rellenar. Los comandos <RET> (newline) y C-o (open-line) insertan líneas nuevas duras. Los comandos de llenado, incluyendo el llenado automático (ver Llenado automático), insertan sólo líneas nuevas blandas y borran sólo líneas nuevas blandas, dejando sólo las líneas nuevas duras.

Por lo tanto, cuando se edita con el modo Enriquecido, no se debe usar <RET> o C-o para romper líneas en el centro de los párrafos rellenados. Utilice el modo de llenado automático o los comandos de llenado explícito (ver Comandos de llenado). Utilice <RET> o C-o donde los saltos de línea deben permanecer siempre, como en las tablas y listas. Para tales líneas, es posible que también desee establecer el estilo de justificación como sin rellenar (véase Justificación enriquecida).

42.13.3 Modificación de la información de formato

La forma más fácil de alterar propiedades es con el menú Propiedades de texto. Puede acceder a este menú desde el menú Edición en la barra de menús (ver Barra de menús), o con C-Mouse-2 (ver Menú Clics del ratón). Algunos de los comandos del menú Propiedades del texto se enumeran a continuación (también se pueden invocar con M-x):

Remove Face Properties
   Eliminar propiedades de la región (acemenu-remove-face-props).

Remove Text Properties
   Eliminar todas las propiedades de texto de la región (facemenu-remove-all).

Describe Properties
   Enumera todas las propiedades de texto y otra información sobre el carácter que sigue al punto
   (describe-text-properties).

Display Faces
   Muestra una lista de caras definidas (list-faces-display). Ver Faces.

Display Colors
   Muestra una lista de colores definidos (list-colors-display). Ver Colors.

Las demás entradas de menú se describen en las secciones siguientes.

42.13.4 Caras de texto enriquecido

Los siguientes comandos se pueden utilizar para añadir o quitar caras (ver Caras). Cada uno de ellos se aplica al texto de la región si la marca está activa, y al siguiente carácter de autoinserción si la marca está inactiva. Con un argumento de prefijo, cada comando se aplica al siguiente carácter de autoinserción, incluso si la región está activa.

M-o d
   Eliminar todas las propiedades de la cara (facemenu-set-default).

M-o b
   Aplicar la cara en negrita (facemenu-set-bold).

M-o i
   Aplicar la cara cursiva (facemenu-set-italic).

M-o l
   Aplicar la cara en cursiva y negrita (facemenu-set-bold-italic).

M-o u
   Aplicar el subrayado facial (facemenu-set-underline).

M-o o face <RET>
   Aplicar la cara "face" (facemenu-set-face).

M-x facemenu-set-foreground
   Solicitar un color (ver Colores) y aplicarlo como color de primer plano.

M-x facemenu-set-background
   Solicite un color y aplíquelo como color de fondo.

Estos comandos también están disponibles en el menú Propiedades del texto.

Un carácter autoinsertado normalmente hereda las propiedades de la cara (y la mayoría de las otras propiedades de texto) del carácter precedente en el búfer. Si utiliza uno de los comandos anteriores para especificar la cara para el siguiente carácter de autoinserción, ese carácter no heredará las propiedades de las caras del carácter anterior, sino que seguirá heredando otras propiedades de texto.

El modo enriquecido define dos caras adicionales: excerpt y fixed. Estos corresponden a los códigos utilizados en el formato de texto/archivo enriquecido. La cara excerpt está pensada para citas; por defecto, aparece igual que la cursiva. La cara fixed especifica el texto de ancho fijo; por defecto, aparece igual que en negrita.

42.13.5 La sangría de texto enriquecido

En el modo Enriquecido, puede especificar diferentes cantidades de sangría para el margen derecho o izquierdo de un párrafo o parte de un párrafo. Estos márgenes también afectan a los comandos de llenado como M-q (ver Llenado).

El submenú Indentación de Propiedades del texto ofrece comandos para especificar la sangría:

Indent More
   Sangría de la región en 4 columnas (increase-left-margin). En el modo Enriquecido, este comando
   también está disponible en C-x <TAB>; si proporciona un argumento numérico, indica cuántas
   columnas se deben añadir al margen (un argumento negativo reduce el número de columnas).

Indent Less
   Eliminar 4 columnas de sangría de la región.

Indent Right More
   Hacer sangrar el texto 4 columnas en el margen derecho.

Indent Right Less
   Quitar 4 columnas de sangría del margen derecho.

La variable standard-indent especifica cuántas columnas estos comandos deben sumar o restar a la sangría. El valor por defecto es 4. El margen derecho por defecto para el modo Enriquecido es controlado por la variable fill-column, como de costumbre.

También puede escribir C-c [ (set-left-margin) y C-c ] (set-right-margin) para establecer los márgenes izquierdo y derecho. Puede especificar el ancho del margen con un argumento numérico; de lo contrario, estos comandos piden un valor a través del minibuffer.

El prefijo de relleno, si existe, funciona además de la sangría de párrafo especificada: C-x . no incluye el espacio en blanco de la sangría especificada en el nuevo valor del prefijo de relleno, y los comandos de relleno buscan el prefijo de relleno después de la sangría en cada línea. Véase Prefijo de llenado.

42.13.6 Justificación de texto enriquecido

En el modo Enriquecido, puede utilizar los siguientes comandos para especificar varios estilos de justificación para el llenado. Estos comandos se aplican al párrafo que contiene el punto o, si la región está activa, a todos los párrafos que se superponen a la región.

M-j l
   Alinear las líneas hacia el margen izquierdo (set-justification-left).

M-j r
   Alinear las líneas con el margen derecho (set-justification-right).

M-j b
   Alinear las líneas con ambos márgenes, insertando espacios en el centro de la línea
   para conseguirlo (set-justification-full).

M-j c, M-S
   Líneas centrales entre los márgenes (set-justification-center).

M-j u
   Desactivar por completo el llenado (set-justification-none). Los comandos de llenado
   no hacen nada en el texto con esta configuración. Sin embargo, todavía puede sangrar
   el margen izquierdo.

También puede especificar estilos de justificación utilizando el submenú Justificación en el menú Propiedades de texto. El estilo de justificación predeterminado se especifica mediante la variable default-justification. Su valor debe ser uno de los símbolos left, right, full, center, o none.

42.13.7 Configuración Otras propiedades del texto

El submenú Propiedades especiales de Propiedades de texto tiene entradas para agregar o quitar otras tres propiedades de texto: read-only (que no permite la alteración del texto), invisible (que oculta el texto) e intangible (que no permite el punto de movimiento dentro del texto). El elemento de menú 'Remove Special' elimina todas estas propiedades especiales del texto en la región.

Las propiedades invisibles e intangibles no se salvan.

42.14 Edición de tablas de texto-base

El paquete de tablas proporciona comandos para editar fácilmente tablas basadas en texto. He aquí un ejemplo de cómo es una tabla de este tipo:

+-----------------+--------------------------------+-----------------+
|     Command     |          Description           |   Key Binding   |
+-----------------+--------------------------------+-----------------+
|  forward-char   |Move point right N characters   |       C-f       |
|                 |(left if N is negative).        |                 |
|                 |                                |                 |
+-----------------+--------------------------------+-----------------+
|  backward-char  |Move point left N characters    |       C-b       |
|                 |(right if N is negative).       |                 |
|                 |                                |                 |
+-----------------+--------------------------------+-----------------+

Cuando Emacs reconoce una extensión de texto como una tabla (consulte Reconocimiento de tabla), la edición del contenido de cada celda de la tabla cambiará automáticamente el tamaño de la tabla, siempre que el contenido sea demasiado grande para caber en la celda. Puede utilizar los comandos definidos en las secciones siguientes para navegar y tratar la disposición de la tabla.

Tipo M-x table-fixed-width-mode para cambiar la característica de redimensionamiento automático de la tabla.

Tabla de definición:           ¿Qué es una tabla basada en texto.
Creación de la tabla:          Cómo crear una tabla.
Reconocimiento Tabla:          Cómo activar y desactivar las tablas.
Comandos de celdas:            Los comandos orientado por celdas en una tabla.
Justificación de la celda:     Justificar contenido de la celda.
Las filas y columnas de tabla: Inserción y eliminación de filas y columnas.
Tabla de Conversión:           Conversión entre texto y tablas sin formato.
Tabla, otra información:       Miscelánea.

42.14.1 ¿Qué es una tabla basada en texto?

Una tabla consiste en un área de texto rectangular que se divide en celdas. Cada celda debe tener al menos un carácter de ancho y uno de alto, sin contar sus líneas de borde. Una celda puede subdividirse en más celdas, pero no pueden superponerse.

Las líneas de borde de celda se dibujan con tres caracteres especiales, especificados por las siguientes variables:

table-cell-vertical-char
   El carácter utilizado para las líneas verticales. El valor por defecto es '|'.

table-cell-horizontal-chars
   Los caracteres utilizados para las líneas horizontales. El valor por defecto es '"-="'.

table-cell-intersection-char
   El carácter utilizado para la intersección de líneas horizontales y verticales. El valor por
   defecto es '+'.

Los siguientes son ejemplos de tablas no válidas:

+-----+       +--+    +-++--+
|     |       |  |    | ||  |
|     |       |  |    | ||  |
+--+  |    +--+--+    +-++--+
|  |  |    |  |  |    +-++--+
|  |  |    |  |  |    | ||  |
+--+--+    +--+--+    +-++--+
   1          2          3

De izquierda a derecha:

1- No se permiten las células solapadas o células no rectangulares.
2- La frontera debe ser rectangular.
3- Las células deben tener una anchura/altura mínima de un carácter.

42.14.2 Creación de una tabla

Para crear una tabla basada en texto desde cero, escriba M-x table-insert. Este comando solicita el número de columnas de la tabla, el número de filas de la tabla, el ancho y la altura de la celda. El ancho y la altura de la celda no incluyen los bordes de la misma; cada uno puede ser especificado como un solo entero (lo que significa que a cada celda se le da el mismo ancho/alto), o como una secuencia de enteros separados por espacios o comas (que especifican el ancho/alto de las columnas/filas individuales de la tabla, contando de izquierda a derecha en el caso de las columnas de la tabla y de arriba a abajo en el de las filas de la tabla). La tabla especificada se inserta entonces en el punto.

La tabla insertada por M-x table-insert contiene propiedades de texto especiales, que le indican a Emacs que la trate especialmente como una tabla basada en texto. Si guarda el búfer en un archivo y lo visita de nuevo más tarde, esas propiedades se pierden y la tabla aparece en Emacs como un texto normal. Vea la siguiente sección, para saber cómo convertirlo de nuevo en una tabla.

42.14.3 Reconocimiento de tablas

Las tablas existentes basadas en texto en un búfer, que carecen de las propiedades especiales de texto aplicadas por M-x table-insert, no se tratan especialmente como tablas. Para aplicar esas propiedades de texto, escriba M-x table-recognize. Este comando escanea el búfer actual, reconoce celdas de tabla válidas y aplica las propiedades de texto relevantes. Por el contrario, escriba M-x table-unrecognize para no reconocer todas las tablas del búfer actual, eliminando las propiedades especiales del texto y volviendo a convertir las tablas en texto sin formato.

También puede utilizar los siguientes comandos para reconocer o no reconocer tablas de forma selectiva:

M-x table-recognize-region
   Reconocer tablas dentro de la región actual.

M-x table-unrecognize-region
   Desconocer las tablas dentro de la región actual.

M-x table-recognize-table
   Reconocer la tabla en el punto y activarla.

M-x table-unrecognize-table
   Desactivar la tabla en el punto.

M-x table-recognize-cell
   Reconocer la celda en el punto y activarla.

M-x table-unrecognize-cell
   Desactivar la celda en el punto.

Véase Conversión de tabla, para otra forma de reconocer una tabla

42.14.4 Comandos para celdas de tabla

Los comandos M-x table-forward-cell y M-x table-backward-cell mueven el punto de la celda actual a una celda adyacente. El orden es cíclico: cuando el punto está en la última celda de una tabla, M-x table-forward-cell se mueve a la primera celda. Del mismo modo, cuando el punto está en la primera celda, M-x table-backward-cell se mueve a la última celda.

M-x table-span-cell pide una dirección: right, left, above, o below, y fusiona la celda actual con la celda adyacente en esa dirección. Este comando señala un error si la fusión resultaría en un diseño de celda ilegítimo.

M-x table-split-cell divide la celda actual vertical u horizontalmente, indicando la dirección con el minibuffer. Para dividir en una dirección específica, utilice M-x table-split-cell-vertically y M-x table-split-cell-horizontally. Cuando se divide verticalmente, el contenido de la celda antigua se divide automáticamente entre las dos nuevas celdas. Al dividir horizontalmente, se le preguntará cómo dividir el contenido de la celda, si la celda no está vacía; las opciones son 'split' (dividir el contenido en el punto), 'left' (poner todo el contenido en la celda de la izquierda), y 'right' (poner todo el contenido en la celda de la derecha).

Los siguientes comandos amplían o reducen una celda. Por defecto, se redimensionan en una fila o columna; si se proporciona un argumento numérico, éste especifica el número de filas o columnas por las que se debe redimensionar.

M-x table-heighten-cell
   Aumentar la celda actual verticalmente.

M-x table-shorten-cell
   Encoger la celda actual verticalmente.

M-x table-widen-cell
   Ampliar la celda actual horizontalmente.

M-x table-narrow-cell
   Encoger la celda actual horizontalmente.

42.14.5 Justificación de la celda

El comando M-x table-justify impone justificación en una o más celdas de una tabla basada en texto. La justificación determina cómo se alinea el texto en la celda, en relación con los bordes de la misma. Cada celda de una tabla puede justificarse por separado.

M-x table-justify primero pide las indicaciones sobre qué justificar; las opciones son 'cell' (sólo la celda actual), 'column' (todas las celdas de la columna actual de la tabla) y 'row' (todas las celdas de la fila actual de la tabla). El comando solicita el estilo de justificación; las opciones son left, center, right, top, middle, bottom, o none (es decir, sin justificación vertical).

Los estilos de justificación horizontal y vertical se especifican independientemente, y ambos tipos pueden estar en efecto simultáneamente; por ejemplo, puede llamar a M-x table-justify, una para especificar la justificación correcta y otra para especificar la justificación inferior, para alinear el contenido de una celda con la inferior derecha.

El estilo de justificación se almacena en el búfer como una propiedad de texto y se pierde cuando se elimina el búfer o se sale de Emacs. Sin embargo, los comandos de reconocimiento de tabla, como M-x table-recognize (ver Table Recognition), intentan determinar y volver a aplicar el estilo de justificación de cada celda, examinando su contenido. Para desactivar esta función, cambie la variable table-detect-cell-alignment a nil.

42.14.6 Las filas y columnas de la tabla

M-x table-insert-row inserta una fila de celdas antes de la fila de la tabla actual. La fila actual, junto con el punto, se empuja hacia abajo más allá de la nueva fila. Para insertar una fila después de la última fila en la parte inferior de una tabla, invoque este comando con el punto debajo de la tabla, justo debajo del borde inferior. Puede insertar más de una fila a la vez utilizando un argumento de prefijo numérico.

De manera similar, M-x table-insert-column inserta una columna de celdas a la izquierda de la columna de la tabla actual. Para insertar una columna a la derecha de la columna de la derecha, invoque este comando con el punto a la derecha de la columna de la derecha, fuera de la tabla. Un argumento de prefijo numérico especifica el número de columnas a insertar.

M-x table-delete-column borra la columna de celdas en el punto. De manera similar, M-x table-delete-row borra la fila de celdas en el punto. Un argumento de prefijo numérico para cada comando especifica el número de columnas o filas a eliminar.

42.14.7 Conversión entre texto sin formato y tablas

El comando M-x table-capture captura texto plano en una región y lo convierte en una tabla. A diferencia de M-x table-recognize (ver Table Recognition), el texto original no necesita tener una apariencia de tabla; sólo necesita tener una estructura lógica similar a una tabla.

Por ejemplo, supongamos que tenemos los siguientes números, que están divididos en tres líneas y separados horizontalmente por comas:

1, 2, 3, 4
5, 6, 7, 8
, 9, 10

Invocamos M-x table-capture en ese texto produce esta tabla:

+-----+-----+-----+-----+
|1    |2    |3    |4    |
+-----+-----+-----+-----+
|5    |6    |7    |8    |
+-----+-----+-----+-----+
|     |9    |10   |     |
+-----+-----+-----+-----+

M-x table-release hace lo contrario: vuelve a convertir una tabla en texto plano, eliminando sus bordes de celda.

Una aplicación de este par de comandos es editar un texto en el bufer. Observe los tres párrafos siguientes (los dos últimos están sangrados con líneas de encabezado):

table-capture is a powerful command.
Here are some things it can do:

Parse Cell Items   Using row and column delimiter regexps,
                   it parses the specified text area and
                   extracts cell items into a table.

Aplicando table-capture a una región que contiene el texto anterior, con cadenas vacías para la columna y el delimitador de filas regexps, se crea una tabla con una sola celda como la siguiente.

+----------------------------------------------------------+
|table-capture is a powerful command.                      |
|Here are some things it can do:                           |
|                                                          |
|Parse Cell Items   Using row and column delimiter regexps,|
|                   it parses the specified text area and  |
|                   extracts cell items into a table.      |
+----------------------------------------------------------+

Luego podemos usar los comandos de división de celdas (ver Comandos de celdas) para subdividir la tabla de manera que cada párrafo ocupe una celda:

+----------------------------------------------------------+
|table-capture is a powerful command.                      |
|Here are some things it can do:                           |
+-----------------+----------------------------------------+
|Parse Cell Items | Using row and column delimiter regexps,|
|                 | it parses the specified text area and  |
|                 | extracts cell items into a table.      |
+-----------------+----------------------------------------+

Ahora cada celda puede ser editada independientemente sin afectar el diseño de otras celdas. Cuando terminamos, podemos invocar M-x table-release para convertir la tabla de nuevo a texto plano.

42.14.8 Tablas Miscelánea

El comando table-query-dimension informa de la disposición de la tabla y de la celda de la tabla en el punto. He aquí un ejemplo de su rendimiento:

Cell: (21w, 6h), Table: (67w, 16h), Dim: (2c, 3r), Total Cells: 5

Esto indica que la celda actual tiene 21 caracteres de ancho y 6 líneas de alto, la tabla tiene 67 caracteres de ancho y 16 líneas de alto con 2 columnas y 3 filas, y un total de 5 celdas.

M-x table-insert-sequence inserta una cadena en cada celda. Cada cadena es una parte de una secuencia, es decir, una serie de números enteros en aumento.

M-x table-generate-source genera una tabla formateada para un lenguaje de marcado específico. Pide un idioma (que debe ser uno de html, latex, o cals), un búfer de destino en el que poner el resultado, y un título de tabla, y luego inserta la tabla generada en el búfer especificado. El búfer de destino predeterminado es table.lang, donde lang es el idioma especificado.

42.15 Edición de dos columnas

El modo de dos columnas le permite editar cómodamente dos columnas de texto una al lado de la otra. Utiliza dos ventanas paralelas, cada una de las cuales muestra su propio búfer. Hay tres maneras de entrar en el modo de dos columnas:

<F2> 2 or C-x 6 2
   Entrar en el modo de dos columnas con el búfer actual a la izquierda y a la derecha, un búfer
   cuyo nombre se basa en el nombre del búfer actual (2C-two-columns). Si el búfer correcto no
   existe ya, empieza vacío; el contenido del búfer actual no se modifica.

   Este comando es apropiado cuando la memoria intermedia actual está vacía o contiene sólo una
   columna y desea añadir otra columna.

<F2> s or C-x 6 s
   Dividir el búfer actual, que contiene texto de dos columnas, en dos búferes, y mostrarlos uno
   al lado del otro (2C-split). El búfer actual se convierte en el búfer izquierdo, pero el texto de
   la columna derecha se mueve al búfer derecho. La columna actual especifica el punto de división.
   La división comienza con la línea actual y continúa hasta el final del búfer.

   Este comando es apropiado cuando tiene una memoria intermedia que ya contiene texto de dos
   columnas y desea separar las columnas temporalmente.

<F2> b buffer <RET>, C-x 6 b buffer <RET>
   Entrar en el modo de dos columnas utilizando el búfer actual como búfer izquierdo y el búfer
   derecho como búfer derecho (2C-associate-buffer).

<F2> s o C-x 6 s busca un separador de columna, que es una cadena que aparece en cada línea entre las dos columnas. Puede especificar el ancho del separador con un argumento numérico a <F2> s; que muchos caracteres, antes del punto, constituyen la cadena del separador. Por defecto, el ancho es 1, por lo que el separador de columna es el carácter anterior al punto.

Cuando una línea tiene el separador en el lugar correcto, <F2> s coloca el texto después del separador en el búfer derecho, y elimina el separador. Las líneas que no tienen el separador de columnas en el lugar adecuado permanecen sin dividir; permanecen en el búfer izquierdo, y el búfer derecho obtiene una línea vacía para corresponder. (Esta es la forma de escribir una línea que "abarca ambas columnas en el modo de dos columnas": escríbala en el búfer izquierdo y coloque una línea vacía en el búfer derecho).

El comando C-x 6 <RET> or <F2> <RET> (2C-newline) inserta una nueva línea en cada uno de los dos buffers en las posiciones correspondientes. Esta es la forma más sencilla de añadir una nueva línea al texto de dos columnas mientras se edita en buffers de división.

Cuando haya editado ambos buffers como desee, mézclelos con <F2> 1 o C-x 6 1 (2C-merge). Esto copia el texto del búfer derecho como una segunda columna en el otro búfer. Para volver a la edición de dos columnas, utilice <F2> s.

Utilice <F2> d o C-x 6 d para disociar los dos buffers, dejando cada uno como está (2C-dissociate). Si el otro búfer, el que no es actual cuando teclea <F2> d, está vacío, <F2> d lo mata.

43 Los programas de edición

En este capítulo se describen las características de Emacs para facilitar programas de edición. Algunas de las cosas que estas características se pueden hacer son:

Encontrar o moverse sobre las definiciones de nivel superior (ver Defuns).
Aplicar las convenciones de sangría usuales del lenguaje (ver Programa de sangría).
Paréntesis de balance (véase paréntesis).
Insertar, matar o alinear los comentarios (ver comentarios).
Resaltar sintaxis del programa (véase Bloqueo de fuentes).

Enlaces rápidos:

Modos de programa:     Los modos mayores para los programas de edición.
Defuns:                Operar en las partes principales de nivel superior de un programa.
Programa de sangría:   Ajuste de sangría para mostrar el anidamiento.
Los paréntesis:        Los comandos que operan en paréntesis.
Comentarios:           Inserción, matando, y la alineación de los comentarios.
Documentación:         Obtención de la documentación de las funciones que planea llamar.
Hideshow:              Bbloquear selectivamente.
Símbolo Finalización:  Finalización de nombres de símbolos de programa o lenguaje.
Glasses:               Hacer identifiersLikeThis más legible.
Semántica:             Herramientas de edición basado en el análisis de código fuente.
Miscelanea:            Otras características de Emacs útil para programas de edición.
C Modos:               Modos especiales de AWK C, C ++, Objective-C, Java, IDL, Pike y.
Modo asm:              Modo Asm y sus características especiales.
Fortran:               El modo Fortran y sus características especiales.

43.1 Modos principales para lenguajes de programación

Emacs tiene modos principales especializados (ver Modos principales) para muchos lenguajes de programación. Un modo de lenguaje de programación especifica típicamente la sintaxis de las expresiones, las reglas habituales para la indentación, cómo hacer el resaltado de sintaxis para el lenguaje, y cómo encontrar el principio o el final de una definición de función. A menudo también tiene características para compilar y depurar programas. El modo principal de cada lenguaje recibe el nombre del lenguaje; por ejemplo, el modo principal para el lenguaje de programación C es c-mode.

Emacs tiene modos de lenguaje de programación para Lisp, Scheme, el lenguaje de expresión DSSSL basado en esquemas, Ada, ASM, AWK, C, C++, Delphi, Fortran, Icon, IDL (CORBA), IDLWAVE, Java, Java, JavaScript, Metafont (compañero de TeX para la creación de fuentes), Modula2, Objective-C, Octave, Pascal, Perl, Pike, PostScript, Prolog, Python, Ruby, Simula, Tcl, y VHDL. Un modo alternativo para Perl se llama modo CPerl. Los modos también están disponibles para los lenguajes de scripting de los shells comunes de GNU y Unix, VMS DCL, y MS-DOS/MS Windows archivos 'BAT', y para makefiles, archivos maestros DNS, y varios tipos de archivos de configuración.

Lo ideal es que Emacs tenga un modo principal para cada lenguaje de programación que desee editar. Si no tiene un modo para su lenguaje favorito, el modo puede implementarse en un paquete no distribuido con Emacs (ver Paquetes); o puede contribuir con uno.

En la mayoría de los lenguajes de programación, la sangría debe variar de línea a línea para ilustrar la estructura del programa. Por lo tanto, en la mayoría de los modos de lenguaje de programación, escribir <TAB> actualiza la sangría de la línea actual (ver Sangría de programa). Además, <DEL> suele estar vinculado a backward-delete-char-untabify, que borra hacia atrás tratando cada tabulación como si fuera el número equivalente de espacios, de modo que puede eliminar una columna de sangría sin preocuparse de si el espacio en blanco está formado por espacios o tabulaciones.

Al entrar en un modo de lenguaje de programación se ejecutan las funciones Lisp personalizadas especificadas en la variable prog-mode-hook, seguidas de las especificadas en el hook propio del modo (ver Modos principales). Por ejemplo, al entrar en el modo C se ejecuta los hooks prog-mode-hook y c-mode-hook. Vea hooks, para obtener información sobre los hooks.

La distribución Emacs contiene manuales de información para los principales modos de Ada, C/C++/Objective C/Java/Corba IDL/Pike/AWK e IDLWAVE.

43.2 Definiciones de nivel superior, o Defuns

En Emacs, una definición importante en el nivel superior del búfer, como una función, se denomina defun. El nombre viene de Lisp, pero en Emacs lo usamos para todos los idiomas.

Parentesis:  O un delimitador de apertura inicia un defun si está en el margen izquierdo.
Moviéndose:  Comandos para mover o marcar una definición mayor.
Imenú:       Creación de índices de búfer como menús.
Qué función: El modo de función muestra en qué función se encuentra.

43.2.1 Convención Margen Izquierda

Muchos modos de lenguaje de programación asumen por defecto que cualquier delimitador de apertura encontrado en el margen izquierdo es el comienzo de una definición de nivel superior, o defun. Por lo tanto, no ponga un delimitador de apertura en el margen izquierdo a menos que tenga ese significado. Por ejemplo, nunca ponga un paréntesis abierto en el margen izquierdo de un archivo Lisp a menos que sea el comienzo de una lista de nivel superior.

La convención acelera muchas operaciones de Emacs, que de otro modo tendrían que volver al principio del búfer para analizar la sintaxis del código.

Si no sigue esta convención, no sólo tendrá problemas cuando utilice explícitamente los comandos para el movimiento de la funciones; otras funciones que los utilicen también le darán problemas. Esto incluye los comandos de indentación (ver Sangría de programa) y el modo de bloqueo de fuente (ver Bloqueo de fuente).

El caso más probable es cuando se desea un delimitador de apertura al comienzo de una línea dentro de una cadena. Para evitar problemas, ponga un carácter de escape ('\', en C y Emacs Lisp, '/' en algunos otros dialectos de Lisp) antes del delimitador de apertura. Esto no afectará el contenido de la cadena, pero impedirá que el delimitador de apertura inicie un defun. Aquí hay un ejemplo:

(insert "Foo: \(bar) ")

Para ayudarle a detectar violaciones de esta convención, el modo Bloqueo de fuentes resalta los confusos delimitadores de apertura (los que deben citarse) en negrita roja.

Si necesita anular esta convención, puede hacerlo configurando la variable open-paren-in-column-0-is-defun-start. Si esta opción de usuario está configurada en t (por defecto), abrir paréntesis o llaves en la columna cero siempre se desactiva. Cuando es nil, las funciones se encuentran buscando paréntesis o delimitadores en el nivel más externo.

Si su búfer contiene paréntesis o llaves en la columna cero que no empiezan a desaparecer, y de alguna manera no es práctico quitar estos paréntesis o llaves, puede ser útil establecer la opción en nil. Tenga en cuenta que esto puede hacer que el desplazamiento y la visualización en grandes búferes sea bastante lenta. Además, los paréntesis y las laves deben estar correctamente ajustados en todo el buffer para que funcionen correctamente.

43.2.2 Moviendonos por Defuns

Estos comandos mueven el punto o establecen la región basándose en definiciones principales de nivel superior, también llamadas defun.

C-M-a
   Movimiento al comienzo del defun actual o anterior (beginning-of-defun).

C-M-e
   Mover al final de la corriente o después del defun (end-of-defun).

C-M-h
   Poner la región alrededor de toda la corriente o después del defun (mark-defun).

Las órdenes para mover al principio y al final del defun actual son C-M-a (beginning-of-defun) y C-M-e (end-of-defun). Si repite uno de estos comandos, o utiliza un argumento numérico positivo, cada repetición se mueve al siguiente defun en la dirección del movimiento.

C-M-a con un argumento negativo -n avanza n veces hacia el siguiente comienzo de un difunto. Este no es exactamente el mismo lugar al que se movería C-M-e con el argumento n; el final de este defun no es usualmente el mismo lugar que el comienzo del siguiente defun. (Los espacios en blanco, los comentarios y quizás las declaraciones pueden separarlos.) De la misma manera, C-M-e con un argumento negativo regresa al final de un defun, lo cual no es lo mismo que C-M-a con un argumento positivo.

Para operar con el defun actual, utilice C-M-h (mark-defun), que pone la marca al final del defun actual y pone el punto al principio. Véase Marcar objetos. Esta es la forma más fácil de prepararse para matar la orden defun y moverla a un lugar diferente en el archivo. Si usa el comando mientras el punto está entre defuns, usa el siguiente defun. Si usa el comando mientras la marca ya está activa, establece la marca pero no mueve el punto; además, cada uso sucesivo de C-M-h extiende el final de la región para incluir un defun más.

En el modo C, C-M-h ejecuta la función c-mark-function, que es casi igual a mark-defun; la diferencia es que realiza una copia de seguridad sobre las declaraciones de argumentos, el nombre de la función y el tipo de datos devueltos, de modo que toda la función C se encuentra dentro de la región. Este es un ejemplo de cómo los modos principales ajustan los enlaces de teclas estándar para que realicen su trabajo estándar de una forma que se ajuste mejor a un idioma en particular. Otros modos importantes pueden sustituir a cualquiera o a todos estos enlaces clave a tal efecto.

43.2.3 imenu

La función Imenu ofrece una forma de encontrar las definiciones principales en un archivo por nombre. También es útil en los modos principales de formato de texto, donde trata cada capítulo, sección, etc., como una definición. (Vea tags, para una característica más poderosa que maneja múltiples archivos juntos.)

Si escribe M-x imenu, lee el nombre de una definición usando el minibuffer, y luego los movimientos apuntan a esa definición. Puede utilizar la terminación para especificar el nombre; el comando siempre muestra la lista completa de nombres válidos.

Alternativamente, puede vincular el comando imenu a un clic del ratón. Luego muestra los menús del ratón para que usted seleccione un nombre de definición. También puede añadir el índice del búfer a la barra de menú llamando al índice imenu-add-menubar-index. Si desea que este elemento de la barra de menús esté disponible para todos los búferes en un determinado modo principal, puede hacerlo añadiendo el índice imenu-add-menubar-index a su modo hook. Pero si lo ha hecho, tendrá que esperar un poco cada vez que visite un archivo en ese modo, mientras Emacs encuentra todas las definiciones en ese búfer.

Cuando se cambia el contenido de un búfer, si se añaden o borran definiciones, se puede actualizar el índice del búfer en función del nuevo contenido invocando el elemento 'Rescan' en el menú. La reexploración se lleva a cabo automáticamente si se ajusta imenu-auto-rescan a un valor non-nil. No hay necesidad de volver a escanear debido a pequeños cambios en el texto.

Puede personalizar la forma en que se ordenan los menús configurando la variable imenu-sort-function. Por defecto, los nombres se ordenan tal y como aparecen en el búfer; si desea una ordenación alfabética, utilice el símbolo imenu–sort-by-name como valor. También puede definir una función de comparación escribiendo el código Lisp.

Imenú proporciona la información para Which Function mode (ver Which FunctionQué función). También puede utilizar el Speedbar (ver Speedbar).

43.2.4 Qué modo de función

El modo de función es un modo secundario global (ver Modos menores) que muestra el nombre de la función actual en la línea de modo, actualizándola a medida que se desplaza en un búfer.

Para activar o desactivar el modo de función, utilice el comando M-x which-function-mode. El modo de función es un modo secundario global. Por defecto, tiene efecto en todos los modos principales que saben cómo soportarlo (es decir, todos los modos principales que soportan Imenu). Puede restringirlo a una lista específica de modos principales cambiando el valor de la variable which-func-modes de t (lo que significa soportar todos los modos principales disponibles) a una lista de nombres de modos principales.

43.3 La sangría de Programas

La mejor manera de mantener un programa correctamente sangrado es usar Emacs para reaplicarlo a medida que lo cambia. Emacs tiene comandos para sangrar una sola línea, un número específico de líneas o todas las líneas dentro de un único grupo de paréntesis.

Consulte Indentación, para obtener información general sobre la indentación. Esta sección describe las características de indentación específicas de los modos de lenguaje de programación.

Sangría básica:              Sangrando una sola línea.
Múltiples líneas de sangría: Comandos para rebobinar varias líneas a la vez.
Lisp Indent:                 Cómo se debe sangrar cada función de Lisp.
C Sangría:                   Funciones adicionales para el indentado C y modos relacionados.
Sangría C personalizada:     Control del estilo de indentación para C y modos relacionados.

Emacs también proporciona una bonita impresora Lisp en el paquete pp, que reformatea los objetos Lisp con una sangría de aspecto agradable.

43.3.1 Comandos básicos de indentación de programas

<TAB>
   Ajustar la sangría de la línea actual (indent-for-tab-command).

C-j
   Inserte una nueva línea, luego ajuste la sangría de la siguiente línea (newline-and-indent).

El comando básico de indentación es <TAB> (indent-for-tab-command), que fue documentado en Indentatión. En los modos de lenguaje de programación, <TAB> sangrará la línea actual, basándose en la sangría y el contenido sintáctico de las líneas precedentes; si la región está activa, <TAB> sangrará cada línea dentro de la región, no sólo la línea actual.

El comando C-j (newline-and-indent), que fue documentado en Comandos de Indentación, hace lo mismo que <RET> seguido de <TAB>: inserta una nueva línea, luego ajusta la sangría de la línea.

Al sangrar una línea que comienza dentro de un grupo de paréntesis, Emacs normalmente coloca el inicio de la línea debajo de la línea anterior dentro del grupo, o debajo del texto después del paréntesis. Si usted le da manualmente a una de estas líneas una sangría no estándar (por ejemplo, con fines estéticos), las líneas de abajo la seguirán.

Los comandos de indentación para la mayoría de los modos de lenguaje de programación asumen que un paréntesis abierto, una clave abierta u otro delimitador de apertura en el margen izquierdo es el comienzo de una función. Si el código que está editando viola esta suposición -incluso si los delimitadores aparecen en cadenas o comentarios- debe configurar open-paren-in-column-0-is-defun-start a nil para que la sangría funcione correctamente. Ver Paren de Margen Izquierdo.

43.3.2 Sangrado de varias líneas

A veces, es posible que desee reequilibrar varias líneas de código a la vez. Una forma de hacerlo es usar la marca; cuando la marca está activa y la región no está vacía, <TAB> sangrará cada línea en la región. Alternativamente, el comando C-M-\ (indent-region) sangrará todas las líneas de la región, tanto si la marca está activa como si no (ver Comandos de indentación).

Además, Emacs proporciona los siguientes comandos para sangrar grandes trozos de código:

C-M-q
   Replantear todas las líneas dentro de un grupo paréntesis.

C-u <TAB>
   Desplazar una agrupación de parentesis entera hacia los lados para que su primera
   línea quede correctamente sangrada.

M-x indent-code-rigidly
   Desplaza todas las líneas de la región rígidamente hacia los lados, pero no altera las
   líneas que empiezan dentro de los comentarios y cadenas.

Para reindentar el contenido de una agrupación monoparental, coloque el punto antes del comienzo de la agrupación y escriba C-M-q. Esto cambia la sangría relativa dentro de la agrupación, sin afectar su sangría total (es decir, la sangría de la línea donde comienza la agrupación). La función que ejecuta C-M-q depende del modo principal; es indent-pp-sexp en modo Lisp, c-indent-exp en modo C, etc. Para corregir también la sangría general, escriba <TAB> primero.

Si le gusta la sangría relativa dentro de un grupo pero no la sangría de su primera línea, mueva el punto a esa primera línea y escriba C-u <TAB>. En Lisp, C, y algunos otros modos principales, <TAB> con un argumento numérico reindica la línea actual como de costumbre, luego reindica por la misma cantidad todas las líneas en el grupo paréntesis que comienza en la línea actual. Es inteligente, sin embargo, y no altera las líneas que comienzan dentro de los strings. Tampoco altera las líneas del preprocesador C cuando está en el modo C, pero sí retiene cualquier línea de continuación que pueda estar conectada a ellas.

El comando M-x indent-code-rigidly desplaza todas las líneas en la región lateralmente, como lo hace indent-rigidly (ver Comandos de indentación). No altera la sangría de las líneas que comienzan dentro de una cadena, a menos que la región también comience dentro de esa cadena. El prefijo arg especifica el número de columnas a sangrar.

43.3.3 Personalización de la sangria en Lisp

El patrón de indentación de una expresión de Lisp puede depender de la función llamada por la expresión. Para cada función Lisp, puede elegir entre varios patrones predefinidos de sangría, o definir uno arbitrario con un programa Lisp.

El patrón estándar de sangría es el siguiente: la segunda línea de la expresión se sangrará bajo el primer argumento, si está en la misma línea que el principio de la expresión; de lo contrario, la segunda línea se sangrará debajo del nombre de la función. Cada línea siguiente es sangrada bajo la línea anterior cuya profundidad de anidación es la misma.

Si la variable lisp-indent-offset es non-nil, anula el patrón de sangría habitual para la segunda línea de una expresión, de modo que lisp-indent-offset son más columnas que la lista que contiene.

Algunas funciones anulan el patrón estándar. Las funciones cuyos nombres comienzan con def tratan las segundas líneas como el comienzo de un cuerpo, sangrando las columnas adicionales de la segunda línea lisp-body-indent sangrando más allá del paréntesis abierto que inicia la expresión.

Puede sustituir el patrón estándar de varias maneras para funciones individuales, de acuerdo con la propiedad lisp-indent-function del nombre de la función. Esto se hace normalmente para las definiciones de macro, utilizando la construcción de declaración.

43.3.4 Comandos para sangria en C

Aquí están las características especiales para la indentación en el modo C y modos relacionados:

C-c C-q
   Reindentar la definición de función de nivel superior actual o declaración de tipo agregado
   (c-indent-defun).

C-M-q
   Reencuentra cada línea en la expresión equilibrada que sigue al punto (c-indent-exp). Un
   argumento de prefijo inhibe los mensajes de advertencia sobre sintaxis inválida.

<TAB>
   Retiene la línea actual, y/o en algunos casos inserta un carácter de tabulación (c-indent-command)

   Si c-tab-always-indent es t, este comando siempre retiene la línea actual y no hace nada más.
   Este es el valor por defecto.

   Si esa variable es nil, este comando reindica la línea actual sólo si el punto está en el margen
   izquierdo o en la sangría de la línea; de lo contrario, inserta una ficha (o el número
   equivalente de espacios, si indent-tabs-mode es nulo).

   Cualquier otro valor (non-nil o t) significa siempre reindentar la línea, y también insertar
   una pestaña si está dentro de un comentario o una cadena.

Para reequilibrar todo el buffer de corriente, escriba C-x h C-M-\. Esto primero selecciona todo el búfer como la región, luego reindica esa región.

Para reequilibrar el bloque actual, utilice C-M-u C-M-q. Esto se mueve hacia la parte delantera del bloque y luego lo reajusta todo.

43.3.5 Personalización de sangria en C

El modo C y los modos relacionados utilizan un mecanismo flexible para personalizar la sangría. El modo C sangrará una línea fuente en dos pasos: primero clasifica la línea sintácticamente de acuerdo con su contenido y contexto; segundo, determina el desplazamiento de sangría asociado por el estilo seleccionado con la construcción sintáctica y lo añade a la sangría de la sentencia.

C-c . <RET> style <RET>
   Seleccione el estilo style (c-set-style).

Un estilo es una colección con nombre de personalizaciones que se pueden utilizar en el modo C y en los modos relacionados. Estilos, para una descripción completa. Emacs viene con varios estilos predefinidos, incluyendo gnu, k&r, bsd, stroustrup, linux, python, java, whitesmith, ellemtel y awk. Algunos de estos estilos están destinados principalmente a un lenguaje, pero cualquiera de ellos se puede utilizar con cualquiera de los lenguajes soportados por estos modos. Para saber cómo es un estilo, selecciónelo y vuelva a introducir algún código, por ejemplo, escribiendo <C-M-q> al principio de la definición de una función.

Para elegir un estilo para el búfer actual, utilice el comando C-c .. Especifique un nombre de estilo como argumento (mayúsculas y minúsculas). Este comando afecta sólo al búfer actual, y sólo afecta a futuras invocaciones de los comandos de indentación; no retiene el código que ya está en el búfer. Para reequilibrar todo el búfer en el nuevo estilo, puede escribir C-x h C-M-\.

También puede configurar la variable c-default-style para que especifique el estilo predeterminado para varios modos principales. Su valor debe ser el nombre del estilo (una cadena) o un alist, en el que cada elemento especifica un modo principal y qué estilo de indentación usar para él. Por ejemplo:

(setq c-default-style
    '((java-mode . "java")
    (awk-mode . "awk")
    (other . "gnu")))

especifica opciones explícitas para los modos Java y AWK, y el estilo 'gnu' predeterminado para los otros modos tipo C. Esta variable tiene efecto cuando se selecciona uno de los modos principales similares a C; por lo tanto, si se especifica un nuevo estilo predeterminado para el modo Java, se puede hacer que surta efecto en un búfer existente del modo Java escribiendo M-x java-mode allí.

El estilo gnu especifica el formato recomendado por el Proyecto GNU para C; es el predeterminado, para fomentar el uso de nuestro estilo recomendado.

Como alternativa a la especificación de un estilo, puede pedirle a Emacs que adivine un estilo escribiendo M-x c-guess en un búfer de código de ejemplo. A continuación, puede aplicar el estilo adivinado a otros búferes con M-x c-guess-install.

43.4 Comandos para la edición con paréntesis

Esta sección describe los comandos y características que aprovechan la estructura de paréntesis de un programa, o que le ayudan a mantenerla equilibrada.

Cuando se habla de estas instalaciones, el término "paréntesis" también incluye llaves, corchetes o cualquier otro delimitador que se defina para que coincida por parejas. El modo principal controla qué delimitadores son significativos, a través de la tabla sintáctica. En Lisp, sólo cuentan los paréntesis; en C, estos comandos se aplican también a las llaves y los corchetes.

Puede utilizar M-x check-parens para encontrar cualquier paréntesis y comillas de cadena no balanceadas en el búfer.

Expresiones:        Expresiones con paréntesis equilibrados.
Mudanza por Parens: Comandos para moverse hacia arriba, hacia abajo y a través de la estructura.
Emparejamiento:     Inserción de un parpadeo del delimitador de cierre y apertura.

43.4.1 Expresiones con paréntesis balanceados

Cada modo de lenguaje de programación tiene su propia definición de una expresión equilibrada. Las expresiones equilibradas suelen incluir símbolos individuales, números y constantes de cadena, así como fragmentos de código incluidos en un par de delimitadores correspondientes. Los siguientes comandos tratan sobre expresiones equilibradas (en Emacs, estas expresiones se denominan internamente sexps10).

C-M-f
   Avanzar sobre una expresión equilibrada (forward-sexp).

C-M-b
   Retroceder sobre una expresión equilibrada (backward-sexp).

C-M-k
   Mata la expresión equilibrada hacia adelante (kill-sexp).

C-M-t
   Transponer expresiones (transpose-sexps).

C-M-@, C-M-<SPC>
   Poner marca después de la siguiente expresión (mark-sexp).

Para avanzar sobre una expresión equilibrada, utilice C-M-f (forward-sexp). Si el primer carácter significativo después de un punto es un delimitador de apertura (por ejemplo, '(', '[' o '{' en C), este comando se mueve más allá del correspondiente delimitador de cierre. Si el carácter comienza un símbolo, cadena o número, el comando se mueve sobre él.

El comando C-M-b (backward-sexp) se mueve hacia atrás sobre una expresión balanceada como C-M-f, pero en la dirección inversa. Si la expresión está precedida por cualquier carácter de prefijo (comillas simples, comillas inversas y comillas, en Lisp), el comando también retrocede sobre ellos.

C-M-f o C-M-b con un argumento repite esa operación el número de veces especificado; con un argumento negativo significa moverse en la dirección opuesta. En la mayoría de los modos, estos dos comandos se mueven a través de los comentarios como si fueran espacios en blanco. Tenga en cuenta que sus teclas, C-M-f y C-M-b, son análogas a C-f y C-b, que se mueven por caracteres (ver Punto de Movimiento), y M-f y M-b, que se mueven por palabras (ver Palabras).

Para matar una expresión balanceada completa, escriba C-M-k (kill-sexp). Esto mata el texto que C-M-f movería.

C-M-t (transpose-sexps) cambia las posiciones de la expresión equilibrada anterior y la siguiente. Es análogo al comando C-t, que transpone caracteres (ver Transponer). Un argumento a C-M-t sirve como un conteo de repetición, moviendo la expresión anterior sobre las muchas siguientes. Un argumento negativo mueve la expresión equilibrada anterior hacia atrás entre las anteriores. Un argumento de cero, en lugar de no hacer nada, transpone las expresiones equilibradas que terminan en o después del punto y la marca.

Para operar en expresiones equilibradas con un comando que actúa sobre la región, escriba C-M-<SPC> (mark-sexp). Esto establece la marca a la que se movería con C-M-f. Mientras la marca está activa, cada llamada sucesiva a este comando extiende la región desplazando la marca por una expresión. Los argumentos numéricos positivos o negativos desplazan la marca hacia adelante o hacia atrás en el número de expresiones especificado. El alias C-M-@ es equivalente a C-M-<SPC>. Consulte Marcar objetos, para obtener más información sobre este y otros comandos relacionados.

En los lenguajes que utilizan operadores de infijos, como C, no es posible reconocer todas las expresiones equilibradas porque puede haber múltiples posibilidades en una posición determinada. Por ejemplo, el modo C no trata 'foo + bar' como una única expresión, aunque sea una expresión en C; en cambio, reconoce 'foo' como una expresión y 'bar' como otra, con el '+' como puntuación entre ellas. Sin embargo, el modo C reconoce '(foo + bar)'' como una sola expresión, debido a los paréntesis.

43.4.2 Desplazamiento en la estructura de paréntesis

Los siguientes comandos se mueven sobre grupos delimitados por paréntesis (o lo que sea que sirva como delimitador en el lenguaje con el que se está trabajando). Ignoran las cadenas y los comentarios, incluyendo cualquier paréntesis dentro de ellos, y también ignoran los paréntesis que son "citados" con un carácter de escape. Estos comandos están destinados principalmente a la edición de programas, pero pueden ser útiles para editar cualquier texto que contenga paréntesis. Se denominan internamente comandos "list" porque en Lisp estas agrupaciones son listas.

Estos comandos asumen que el punto de partida no está dentro de una cadena o un comentario. Si los invoca desde dentro de una cadena o comentario, los resultados son poco fiables.

C-M-n
   Avanzar sobre un grupo de paréntesis (forward-list).

C-M-p
   Retroceder sobre un grupo de paréntesis (backward-list).

C-M-u
   Subir en la estructura de paréntesis (backward-up-list).

C-M-d
   Desplazar hacia abajo en la estructura de paréntesis (down-list).

Los comandos "list" C-M-n (forward-list) y C-M-p (backward-list) avanzan o retroceden sobre una (o n) agrupaciones de paréntesis.

C-M-n y C-M-p intentan permanecer al mismo nivel en la estructura de paréntesis. Para subir un nivel (o n), utilice C-M-u (backward-up-list). C-M-u se mueve hacia atrás, más allá de un inigualable delimitador de apertura. Un argumento positivo sirve como un recuento de repetición; un argumento negativo invierte la dirección del movimiento, de modo que el comando avanza y sube uno o más niveles.

Para desplazarse hacia abajo en la estructura de paréntesis, utilice C-M-d (down-list). En el modo Lisp, donde '(' es el único delimitador de apertura, esto es casi lo mismo que buscar un '('. Un argumento especifica el número de niveles a bajar.

43.4.3 Los paréntesis a juego

Emacs tiene una serie de funciones de correspondencia de paréntesis, que permiten ver fácilmente cómo y si los paréntesis (u otros delimitadores) coinciden.

Siempre que escriba un carácter autoinsertado que sea un delimitador de cierre, el cursor se moverá momentáneamente a la ubicación del delimitador de apertura correspondiente, siempre que esté en la pantalla. Si no está en la pantalla, Emacs muestra parte del texto cercano en el área de eco. De cualquier manera, usted puede decir qué grupo está cerrando. Si el delimitador de apertura y el de cierre no coinciden -como en '[x)'- se muestra un mensaje de advertencia en el área de eco.

Tres variables controlan la visualización de los paréntesis correspondientes:

blink-matching-paren
   activa o desactiva la función: nil la desactiva, pero el valor por defecto es t para activarla.

blink-matching-delay
   dice cuántos segundos para dejar el cursor en el delimitador de apertura correspondiente, antes
   de traerlo de vuelta a la ubicación real del punto. Puede ser un número entero o de punto
   flotante; el valor por defecto es 1.

blink-matching-paren-distance
   especifica cuántos caracteres hacia atrás para buscar el delimitador de apertura correspondiente.
   Si no se encuentra la coincidencia en esa distancia, Emacs deja de escanear y no se muestra
   nada. El valor predeterminado es 102400.

Mostrar el modo de paréntesis, un modo menor global, proporciona un tipo más potente de correspondencia automática. Siempre que un punto se encuentre antes de un delimitador de apertura o después de un delimitador de cierre, tanto ese delimitador como su delimitador opuesto están resaltados. Para alternar entre el modo Mostrar paréntesis, escriba M-x show-paren-mode.

El modo de Par Eléctrico, un modo menor global, proporciona una manera de insertar fácilmente delimitadores que coincidan. Cada vez que se inserta un delimitador de apertura, también se inserta automáticamente el delimitador de cierre correspondiente, dejando un punto entre los dos. Para cambiar el modo de par eléctrico, escriba M-x electric-pair-mode.

43.5 La manipulación de los comentarios

Debido a que los comentarios son una parte tan importante de la programación, Emacs proporciona comandos especiales para editar e insertar comentarios. También puede revisar la ortografía de los comentarios con el modo Flyspell Prog (ver Ortografía).

Algunos modos principales tienen reglas especiales para sangrar diferentes tipos de comentarios. Por ejemplo, en código Lisp, los comentarios que empiezan con dos puntos y coma se sangran como si fueran líneas de código, mientras que los que empiezan con tres puntos y coma se supone que están alineados al margen izquierdo y a menudo se usan para propósitos de sección. Emacs entiende estas convenciones; por ejemplo, si escribe <TAB> en una línea de comentario, el comentario quedará sangrado en la posición apropiada.

;; This function is just an example.
;;; Here either two or three semicolons are appropriate.
(defun foo (x)
;;;  And now, the first part of the function:
  ;; The following line adds one.
  (1+ x))           ; This line adds one.
Comandos comentar:          Inserción, matando, y la alineación de los comentarios.
Comentarios varias líneas:  Comandos para añadir y editar los comentarios multilínea.
Funciones para comentarios: Personalización de las funciones de comentario.

43.5.1 Comandos comentario

Los siguientes comandos operan sobre los comentarios:

M-;
   Insertar o realinear comentario en la línea actual; si la región está activa,
   comentar o descomentar la región en su lugar (comment-dwim).

C-u M-;
   Comentario de matanza en la línea actual (comment-kill).

C-x ;
   Fijar columna de comentarios (comment-set-column).

C-M-j, M-j
   Como <RET> seguido de insertar y alinear un comentario (comment-indent-new-line).
   Vea Comentarios de varias líneas.

M-x comment-region, C-c C-c C-c
   (C-c-c-c opera en modos similares a los de C.) Agregue delimitadores de comentarios
   a todas las líneas de la región.

El comando para crear o alinear un comentario es M-; (comment-dwim). La palabra "dwim" es un acrónimo de "Do What I Mean" (hacer lo que quiero decir); indica que este comando se puede utilizar para muchos trabajos diferentes relacionados con los comentarios, dependiendo de la situación en la que se utilice.

Cuando una región está activa (ver Marca), M-; o bien añade delimitadores de comentarios a la región, o bien los elimina. Si cada línea en la región ya es un comentario, "descomenta" cada una de esas líneas eliminando sus delimitadores de comentarios. De lo contrario, agrega delimitadores de comentarios para encerrar el texto en la región.

Si proporciona un argumento de prefijo a M-; cuando una región está activa, eso especifica el número de delimitadores de comentarios que se deben añadir o eliminar. Un argumento positivo n añade n delimitadores, mientras que un argumento negativo -n elimina n delimitadores.

Si la región no está activa y no hay ningún comentario en la línea actual, M-; añade un nuevo comentario a la línea actual. Si la línea está en blanco (es decir, vacía o que contiene sólo caracteres de espacio en blanco), el comentario se sangrará a la misma posición en la que <TAB> sangraría (ver Sangría básica). Si la línea no está en blanco, el comentario se coloca después del último carácter que no es un espacio en blanco en la línea; normalmente, Emacs intenta colocarlo en la columna especificada por la variable comment-column (ver Opciones para comentarios), pero si la línea ya se extiende más allá de esa columna, coloca el comentario en una posición adecuada, normalmente separado del texto no en blanco por al menos un espacio. En cada caso, Emacs coloca un punto después del delimitador de inicio del comentario, para que pueda empezar a escribir el texto del comentario de inmediato.

También puede utilizar M-; para alinear un comentario existente. Si una línea ya contiene la cadena de inicio, M-; la realinea a la alineación convencional y mueve el punto después del delimitador de inicio del comentario. Como excepción, los comentarios que empiezan en la columna 0 no se mueven. Incluso cuando un comentario existente está correctamente alineado, M-; sigue siendo útil para moverse directamente al principio del texto del comentario.

C-u M-; (comment-dwim con un argumento de prefijo) mata cualquier comentario en la línea actual, junto con el espacio en blanco delante de ella. Como el comentario se guarda en el anillo de la muerte, puede volver a insertarlo en otra línea moviéndose al final de esa línea, haciendo C-y, y luego M-; para realinear el comentario. Puede conseguir el mismo efecto que C-u M-; escribiendo M-x comment-kill (comment-dwim realmente llama comment-kill como una subrutina cuando se le da un argumento de prefijo).

El comando M-x comment-region equivale a llamar a M-; en una región activa, excepto que siempre actúa en la región, incluso si la marca está inactiva. En el modo C y modos relacionados, este comando está vinculado a C-c C-c. El comando M-x uncomment-region descomenta cada línea en la región; un argumento de prefijo numérico especifica el número de delimitadores de comentarios a eliminar (los argumentos negativos especifican el número de comentarios a añadir).

Para los modos de tipo C, puede configurar el efecto exacto de M-; configurando las variables c-indent-comment-alist y c-indent-comments-syntactically-p. Por ejemplo, en una línea que termina en una llave de cierre, M-; pone el comentario un espacio después de la llave en lugar de en la columna de comienzo. Para más detalles ver Comandos de Comentarios.

43.5.2 Múltiples líneas de comentarios

Si está escribiendo un comentario y desea continuar en otra línea, escriba M-j o C-M-j (comment-indent-new-line). Esto rompe la línea actual e inserta los delimitadores de comentarios y la sangría necesarios para continuar el comentario.

Para lenguajes con delimitadores de comentarios de cierre (por ejemplo, '/' en C), el comportamiento exacto de *M-j depende del valor de la variable comment-multi-line. Si el valor es nil, el comando cierra el comentario en la línea anterior e inicia un nuevo comentario en la nueva línea. De lo contrario, abre una nueva línea dentro de los delimitadores de comentarios actuales.

Cuando el modo de llenado automático está activado, pasar por encima de la columna de llenado mientras se escribe un comentario también continúa el comentario, de la misma manera que una invocación explícita de M-j.

Para convertir líneas existentes en líneas de comentarios, use M-; con la región activa, o use M-x comment-region como se describe en la sección anterior.

Puede configurar el modo C para que cuando escriba un '/' al principio de una línea en un comentario de bloque de varias líneas, se cierre el comentario. Habilite comment-close-slash clean-up para eso.

43.5.3 Opciones de Control Comentarios

Como se menciona en Comandos de Comentario, cuando el comando M-j añade un comentario a una línea, intenta colocar el comentario en la columna especificada la variable comment-column. Puede fijar el valor local o el valor por defecto de esta variable local de la memoria intermedia de la forma habitual (véase Locales). Alternativamente, puede escribir C-x ; (comment-set-column) para establecer el valor de la columna de inicio en la memoria intermedia actual en la columna en la que se encuentra actualmente el punto. C-u C-x ; establece la columna de comentarios para que coincida con el último comentario antes del punto del búfer, y luego hace una M-; para alinear el comentario de la línea actual con el anterior.

Los comandos de comentario reconocen comentarios basados en la expresión regular que es el valor de la variable comment-start-skip. Asegúrate de que esta regexp no coincide con la cadena nula. Puede coincidir más que el delimitador de inicio de comentario en el sentido más estricto de la palabra; por ejemplo, en el modo C el valor de la variable es "\N-", que coincide con las estrellas y espacios extra después del propio '/*', y también acepta comentarios de estilo C++. (Tenga en cuenta que '\\' es necesario en la sintaxis de Lisp para incluir un '\' en la cadena, lo que es necesario para negar a la primera estrella su significado especial en la sintaxis de regexp. Ver Regexp Backslash.)

Cuando un comando de comentario hace un nuevo comentario, inserta el valor de comment-start como delimitador de comentarios de apertura. También inserta el valor de comment-end después del punto, como delimitador de comentarios de cierre. Por ejemplo, en el modo Lisp, el inicio de inicio es '";"' y el final de inicio es "" (la cadena vacía). En el modo C, el inicio del proceso es "" y el fin del proceso es "".

La variable comment-padding especifica una cadena que los comandos de comentario deben insertar entre el/los delimitador(es) de comentarios y el texto del comentario. El valor por defecto, '"" "', especifica un único espacio. Alternativamente, el valor puede ser un número, que especifica ese número de espacios, o nulo, que significa ningún espacio en absoluto.

La variable comment-multi-line controla cómo M-j y el modo de llenado automático continúan los comentarios sobre múltiples líneas. Vea Comentarios de varias líneas.

La función comment-indent-function contiene una función que será llamada para calcular la alineación para un comentario recién insertado o para alinear un comentario existente. Se establece de forma diferente según los distintos modos principales. La función se llama sin argumentos, pero con un punto al principio del comentario, o al final de una línea si se va a insertar un nuevo comentario. Debe devolver la columna en la que debe comenzar el comentario. Por ejemplo, en el modo Lisp, la función de hook de sangrado basa su decisión en cuántos puntos y coma comienzan un comentario existente y en el código de las líneas anteriores.

43.6 Búsqueda de documentación

Emacs proporciona varias funciones que puede utilizar para buscar la documentación de funciones, variables y comandos que planea utilizar en su programa.

Búsqueda de información: Buscar funciones de biblioteca y comandos en archivos de información.
Man Page:                Buscar en las páginas man de funciones y comandos de la biblioteca.
Lisp Doc:                Buscar funciones Lisp de Emacs, etc.

43.6.1 Búsqueda de información de documentación

Para los modos principales que se aplican a los lenguajes que tienen documentación en Info, puede utilizar C-h S (info-lookup-symbol) para ver la documentación de información de un símbolo utilizado en el programa. Especifique el símbolo con el minibúfer; el valor por defecto es el símbolo que aparece en el búfer en el punto. Por ejemplo, en el modo C se busca el símbolo en el manual de la biblioteca C. El comando sólo funciona si están instalados los archivos de información del manual correspondiente.

El modo principal determina dónde buscar documentación para el símbolo: qué archivos de información buscar y qué índices buscar. También puede utilizar M-x info-lookup-file para buscar documentación para un nombre de archivo.

Si utiliza C-h S en un modo mayor que no lo soporta, le pedirá que especifique el "modo de ayuda de símbolos". Debe introducir un comando, como c-mode, que seleccione un modo principal compatible con C-h S.

43.6.2 Página man

En Unix, la forma principal de documentación en línea es la página del manual o la página man. En el sistema operativo GNU, nuestro objetivo es reemplazar las páginas de manual con manuales mejor organizados para que usted puede navegar por la información (vea la Ayuda Miscelánea). Este proceso no ha terminado, por lo que sigue siendo útil leer las páginas del manual.

Puede leer la página man para un comando del sistema operativo, una función de biblioteca o una llamada de sistema, con el comando M-x man. Esto solicita un tema, con finalización (ver Finalización), y ejecuta el programa man para formatear la página man correspondiente. Si el sistema lo permite, funciona de forma asíncrona, de modo que puede seguir editando mientras se formatea la página. El resultado va en un búfer llamado Man topic. Estos búferes utilizan un modo principal especial, el modo man, que facilita el desplazamiento y el salto a otras páginas de manual. Para más detalles, escriba C-h m mientras esté en un búfer del modo man.

Cada página man pertenece a una de diez o más secciones, cada una nombrada por un dígito o por un dígito y una letra. A veces hay páginas de manual con el mismo nombre en diferentes secciones. Para leer una página de manual de una sección específica, escriba 'topic(section)' o 'section topic' cuando M-x solicite la entrada manual del tema. Por ejemplo, la página man para la función chmod de la biblioteca C está en la sección 2, pero hay un comando shell del mismo nombre, cuya página man está en la sección 1; para ver la primera, debe especificar el número de capítulo entre paréntesis. Por ejemplo: M-x manual-entry <RET> chmod(2) <RET>.

Si no especifica una sección, M-x man normalmente muestra sólo la primera página man encontrada. En algunos sistemas, el programa man acepta una opción de línea de comandos '-a', que le dice que muestre todas las páginas de manual para el tema especificado. Para hacer uso de esto, cambie el valor de la variable Man-switches a '"-a"'. Luego, en el búfer del modo man, puede escribir M-n y M-p para cambiar entre páginas de manual en diferentes secciones. La línea de modo muestra cuántas páginas de manual están disponibles.

Una forma alternativa de leer las páginas del manual es el comando M-x woman. A diferencia de M-x man, no ejecuta ningún programa externo para formatear y mostrar las páginas del manual; el formateo lo realiza Emacs, por lo que funciona en sistemas como MS Windows donde el programa man puede no estar disponible. Solicita una página de manual y la muestra en un búfer llamado *WoMan section topic.

M-x woman calcula la lista de terminación para manpages la primera vez que se invoca el comando. Con un argumento numérico, recompila esta lista; esto es útil si agrega o elimina páginas de manual.

Si escribe el nombre de una página de manual y M-x woman encuentra que existen varias páginas de manual con el mismo nombre en diferentes secciones, aparece una ventana con posibles candidatos que le piden que elija una de ellas.

Para más información sobre la configuración y el uso de M-x woman, consulte el manual WoMan Info, que se distribuye con Emacs.

43.6.3 Operaciones de búsqueda de documentación de Emacs Lisp

Al editar código Lisp de Emacs, puede utilizar los comandos C-h f (describe-function) y C-h v (describe-variable) para ver la documentación incorporada de las funciones y variables de Lisp que desea utilizar. Consulte la Ayuda para nombres.

Eldoc es un modo menor de buffer-local que ayuda a buscar documentación de Lisp. Cuando está habilitada, el área de eco muestra información útil siempre que hay una función Lisp o una variable en el punto; para una función, muestra la lista de argumentos, y para una variable muestra la primera línea de la cadena de documentación de la variable. Para cambiar el modo Eldoc, escriba M-x eldoc-mode. El modo Eldoc puede utilizarse con los modos principales Lisp y Lisp Interaction de Emacs.

43.7 Ocultar/Mostrar modo menor

El modo Hideshow es un modo menor local al búfer que permite mostrar selectivamente partes de un programa, que se conocen como bloques. Clique Mx hs-minor-mode para cambiar este modo menor (véase modos menores ).

Cuando se utiliza el modo Hideshow para ocultar un bloque, el bloque desaparece de la pantalla, para ser reemplazado por una elipsis (tres períodos consecutivos). Justo lo que constituye un bloque depende del modo mayor. En el modo y afines del modo C, los bloques están delimitados por llaves, mientras que en el modo Lisp están delimitadas por paréntesis. Comentarios multilínea también cuentan como bloques.

Modo Hideshow proporciona las siguientes instrucciones:

C-c @ C-h
   Ocultar el bloque actual (hs-hide-block).

C-c @ C-s
   Mostrar el bloque actual (hs-show-block).

C-c @ C-c
   Ocultar o mostrar el bloque actual (hs-toggle-hiding).

S-Mouse-2
   Alternar ocultar para el bloque se hace clic (hs-mouse-toggle-hiding).

C-c @ C-M-h
   Ocultar todos los bloques de nivel superior (hs-hide-all).

C-c @ C-M-s
   Mostrar todos los bloques de la memoria intermedia (hs-show-all).

C-c @ C-l
   Ocultar todos los bloques de n niveles por debajo de este bloque (hs-hide-level).

Estas variables se pueden utilizar para personalizar el modo Hideshow:

hs-hide-comments-when-hiding-all
   Si no es nulo, C-c @ C-M-h (hs-hide-all) también oculta comentarios.

hs-isearch-open
   Esta variable especifica las condiciones bajo las cuales la búsqueda incremental debe desocultar
   un bloque oculto cuando se produce una coincidencia de texto dentro del bloque. Su valor debe
   ser code (desocultar sólo bloques de código), commend (desocultar sólo comentarios), t
   (desocultar tanto bloques de código como comentarios), o nil (desocultar ni bloques de código
   ni comentarios). El valor por defecto es código.

43.8 Finalización de nombres de símbolos

La finalización se realiza normalmente en el minibúfer (ver Finalización), pero también puede completar nombres de símbolos en los búferes normales de Emacs.

En los modos de programación en lenguaje, escriba C-M-i o M-<TAB> para completar el símbolo parcial antes del punto. En las pantallas gráficas, el gestor de ventanas suele reservar la tecla M-<TAB> para cambiar de ventana gráfica, por lo que debe escribir C-M-i o <ESC> <TAB> en su lugar.

En la mayoría de los modos de lenguaje de programación, C-M-i (o M-<TAB>) invoca el comando completion-at-point, que genera su lista de finalización de forma flexible. Si el modo Semántico está habilitado, intenta utilizar los datos del analizador Semántico para completarlo (ver Semántica). Si el modo Semántico no está habilitado o falla al realizar la finalización, intenta completarlo usando la tabla de etiquetas seleccionadas (ver Etiquetas). Si está en modo Lisp de Emacs, realiza la finalización utilizando los nombres de función, variable o propiedad definidos en la sesión actual de Emacs.

En todos los demás aspectos, la terminación de símbolos en el búfer se comporta como la terminación de minibúfer. Por ejemplo, si Emacs no puede completar un símbolo único, muestra una lista de alternativas de finalización en otra ventana. Véase Terminación.

En el modo Texto y modos relacionados, M-<TAB> completa palabras basadas en el diccionario del corrector ortográfico. Ver Ortografía.

43.9 Modo menor glasses

El modo glasses es un modo menor de búfer local que facilita la lectura de símbolos de cajas mixtas (o "CamelCase") como "unReadableSymbol", alterando la forma en que se muestran. Por defecto, muestra guiones bajos adicionales entre cada letra minúscula y la siguiente letra mayúscula. Esto no altera el texto del búfer, sólo la forma en que se muestra.

Para cambiar al modo glasses, escriba M-x glasses-mode (consulte Modos menores). Cuando el modo glasses está activado, el indicador de modo menor 'oo' aparece en la línea de modo. Para más información sobre el modo glasses, escriba C-h P glasses <RET>.

43.10 Semántico

Semantic es un paquete que proporciona comandos de edición compatibles con lenguajes basados en analizadores de código fuente.

La mayoría de las funciones de Emacs que tienen en cuenta el lenguaje, como el modo de bloqueo de fuentes (ver Bloqueo de fuentes), se basan en "reglas generales" que suelen dar buenos resultados, pero que nunca son completamente exactas. En contraste, los analizadores utilizados por Semantic tienen una comprensión exacta de la sintaxis del lenguaje de programación. Esto permite a Semantic proporcionar comandos de búsqueda, navegación y finalización que son potentes y precisos.

Para empezar a usar Semantic, escriba M-x semantic-mode o haga clic en el elemento de menú llamado 'Source Code Parsers (Semantic)' en el menú 'Tools'. Esto habilita el modo semántico, un modo menor global.

Cuando el modo Semántico está activado, Emacs intenta analizar automáticamente cada archivo que visita. Actualmente, Semantic entiende C, C++, Scheme, JavaScript, Java, HTML y Make. Dentro de cada búfer analizado, están disponibles los siguientes comandos:

C-c , j
   Solicitar el nombre de una función definida en el fichero actual, y mover el punto allí
   (semantic-complete-jump-local).

C-c , J
   Petición del nombre de una función definida en cualquier fichero que Emacs haya analizado,
   y mover el punto allí (semantic-complete-jump).

C-c , <SPC>
   Mostrar una lista de posibles completaciones para el símbolo en el punto
   (semantic-complete-analyze-inline). Esto también activa un conjunto de encuadernaciones
   especiales para elegir un acabado: <RET> acepta la finalización actual, M-n y M-p ciclo
   a través de las posibles finalizaciones, <TAB> completa en la medida de lo posible y
   luego ciclos, y C-g o cualquier otra clave aborta la finalización.

C-c, l
   Mostrar una lista de las posibles terminaciones del símbolo en el punto, en otra ventana
   (semantic-analyze-possible-completions).

Además de los comandos anteriores, el paquete Semántica ofrece una variedad de otras maneras de hacer uso de la información del analizador. Por ejemplo, se puede utilizar para mostrar una lista de terminaciones cuando Emacs está inactivo.

43.11 Otras características útiles para la edición de programas

Sin embargo, algunos comandos de Emacs que no están diseñados específicamente para editar programas son útiles para ello.

Los comandos Emacs que funcionan con palabras, frases y párrafos son útiles para editar código. La mayoría de los nombres de los símbolos contienen palabras (ver Palabras), mientras que las oraciones se pueden encontrar en cadenas y comentarios (ver Frases). En cuanto a los párrafos, se definen en la mayoría de los modos de lenguaje de programación para que comiencen y terminen en líneas en blanco (ver Párrafos). Por lo tanto, el uso sensato de líneas en blanco para hacer más claro el programa también proporcionará trozos útiles de texto para que los comandos de párrafo funcionen. El modo de llenado automático, si está habilitado en el modo principal de un lenguaje de programación, sangrará las nuevas líneas que crea.

El modo Electric Layout (M-x electric-layout-mode) es un modo menor global que inserta automáticamente nuevas líneas cuando se escriben ciertos caracteres; por ejemplo, '{', '}' y ';' en modo JavaScript.

Aparte del modo Hideshow (ver Hideshow), otra forma de mostrar selectivamente partes de un programa es utilizar la función de visualización selectiva (ver Selective Display). Los modos de programación a menudo también soportan el modo Menor de contorno (ver Modo de contorno), que se puede utilizar con el paquete Foldout (ver Foldout).

43.12 C y modos relacionados

Esta sección ofrece una breve descripción de las características especiales disponibles en los modos C, C++, Objective-C, Java, CORBA IDL, Pike y AWK. (Estos se denominan "Modo C y modos relacionados".) Para más detalles, consulte el manual de información del modo CC, que se distribuye con Emacs.

Moción en C:       Órdenes para moverse por las sentencias C, etc.
Eléctrico C:       El colon y otros caracteres pueden reajustarse automáticamente.
Borrar:            Un comando DEL más potente.
Otros comandos C:  Llenado de comentarios, visualización de macros y otras funciones.

43.12.1 Modo C Comandos de movimiento

En este apartado se describen los comandos para el punto en movimiento, en el modo C y en los modos relacionados.

C-M-a, C-M-e
   Mover el punto al principio o al final de la función actual o de la definición de nivel superior.
   En los lenguajes con ámbitos de inclusión (como las clases de C++) la función actual es la
   inmediata, posiblemente dentro de un ámbito de aplicación. De lo contrario, es la que se define
   por las llaves menos cerradas. (Por el contrario, la búsqueda de las llaves de inicio y fin de
   la muerte en la columna cero). Ver Moving by Defuns.

C-c C-u
   Mover el punto hacia atrás al condicional del preprocesador que contiene, dejando la marca atrás.
   Un argumento de prefijo actúa como un recuento de repetición. Con un argumento negativo, mueva
   el punto hacia adelante hasta el final del condicional del preprocesador de contenido.

   #elif' es equivalente a '#elif' seguido de '#if', por lo que la función se detendrá en '#elif'
   cuando vaya hacia atrás, pero no cuando vaya hacia delante.

C-c C-p
   Mover el punto hacia atrás sobre un condicional del preprocesador, dejando la marca atrás.
   Un argumento de prefijo actúa como un recuento de repetición. Con un argumento negativo, siga
   adelante.

C-c C-n
   Mover el punto hacia adelante a través de un preprocesador condicional, dejando la marca atrás.
   Un argumento de prefijo actúa como un recuento de repetición. Con un argumento negativo,
   retroceda.

M-a
   Punto de movimiento hacia el principio de la expresión C más interna
   (c-principio de la expresión). Si el punto ya está al principio de una expresión, vaya al
   principio de la expresión anterior. Con el argumento del prefijo n, retrocede n - 1 sentencias.

   En comentarios o en cadenas que abarcan más de una línea, este comando se mueve por frases en
   lugar de por estamentos.

M-e
   Mover el punto al final de la frase o enunciado de C más interna; como M-a excepto que se mueve
   en la otra dirección (c-end-of-statement).

43.12.2 Caracteres electric C

En el modo C y modos relacionados, algunos caracteres de impresión son eléctricos; además de insertarse a sí mismos, también reindican la línea actual y, opcionalmente, también insertan líneas nuevas. Los caracteres "eléctricos" son {, }, :, #, ;, ,, <, >, /, *, (, y ).

Es posible que la indentación eléctrica le resulte inconveniente si está editando código con indentación caótica. Si es nuevo en CC Mode, puede que le resulte desconcertante. Puede conmutar la acción eléctrica con el comando C-c C-l; cuando está habilitado, aparece '/l' en la línea de modo después del nombre del modo:

C-c C-l
   Conmutar la acción eléctrica (c-toggle-electric-state). Con un argumento de prefijo positivo,
   este comando permite la acción eléctrica, con uno negativo la desactiva.

Los caracteres eléctricos insertan líneas nuevas sólo cuando, además del estado eléctrico, la función de línea nueva automática está activada (indicada por '/la' en la línea de modo después del nombre del modo). Puede activar o desactivar esta función con el comando C-c C-a:

C-c C-a
   Alterna la función de línea nueva automática (c-toggle-auto-newline). Con un argumento de
   prefijo, este comando activa la función de línea automática si el argumento es positivo y
   desactiva si es negativo.

Normalmente, el estilo CC Mode configura las circunstancias exactas en las que Emacs inserta líneas nuevas automáticas. También puede configurarlo directamente.

43.12.3 Función de eliminación en C

Si desea eliminar un bloque entero de espacio en blanco en un punto, puede utilizar la eliminación hungry. Esto elimina todos los espacios en blanco contiguos, ya sea antes o después de un punto en una sola operación. El espacio en blanco aquí incluye pestañas y líneas nuevas, pero no comentarios ni comandos de preprocesador.

C-c C-<DEL>, C-c <DEL>
   Borrar todo el bloque de espacio en blanco del punto anterior (c-hungry-delete-backwards).

C-c C-d, C-c C-<DELETE>, C-c <DELETE>
   Borrar todo el bloque de espacio en blanco después del punto (c-hungry-delete-forward).

Como alternativa a los comandos anteriores, puede activar el modo de borrado hungry. Cuando esta característica está habilitada (indicada por '/h' en la línea de modo después del nombre del modo), un solo <DEL> borra todos los espacios en blanco precedentes, no sólo un espacio, y un solo C-c C-d (pero no un solo <DELETE>) borra todos los espacios en blanco siguientes.

M-x c-toggle-hungry-state
   Activa la función de eliminación hungry (c-toggle-hungry-state). Con un argumento de prefijo,
   este comando activa la función de eliminación hungry si el argumento es positivo y desactiva
   si es negativo.

La tecla c-hungry-delete-key controla si la función de borrado hungry está activada.

43.12.4 Otros comandos para el modo C

C-c C-w, M-x subword-mode
   Habilitar (o deshabilitar) el modo de subword. En el modo de subpalabra, los comandos de
   palabra de Emacs reconocen las mayúsculas de 'StudlyCapsIdentifiers' como límites de
   palabra. Esto se indica con el flag '/w' en la línea de modo después del nombre del modo
   (por ejemplo, 'C/law'). Incluso puede utilizar M-x subword-mode en búferes que no sean
   de modo CC.

   En el proyecto GNU, recomendamos usar guiones bajos para separar palabras dentro de un
   identificador en C o C++, en lugar de usar distinciones de casos.

M-x c-context-line-break
   Este comando inserta un salto de línea y sangrará la nueva línea de manera apropiada al
   contexto. En código normal, hace el trabajo de C-j (newline-and-indent), en una línea de
   preprocesador C inserta adicionalmente un '\' en el salto de línea, y dentro de los
   comentarios es como M-j (c-indent-new-comment-line).

   c-context-line-break no está vinculado a una clave por defecto, pero necesita un enlace
   para ser útil. El siguiente código lo enlazará con C-j. Usamos c-initialization-hook aquí
   para asegurarnos de que el mapa de teclas está cargado antes de intentar cambiarlo.

     (defun mi-bind-clb ()
       (define-key c-mode-base-map "\C-j")
                   c-context-line-break)))
     (add-hook 'c-initialization-hook 'my-bind-clb)

C-M-h
   Ponga una marca al final de una definición de función y un punto al principio (c-mark-function).

M-q
   Llenar un párrafo, manejando los comentarios C y C++ (c-fill-paragraph). Si alguna parte de la
   línea actual es un comentario o está dentro de un comentario, este comando rellena el comentario
   o el párrafo en el que se encuentra ese punto, preservando la sangría del comentario y los
   delimitadores de comentarios.

C-c C-e
   Ejecute el preprocesador C en el texto de la región y muestre el resultado, que incluye la
   expansión de todas las llamadas de macro (c-macro-expand). El texto del búfer antes de la región
   también se incluye en el preprocesamiento, por el bien de las macros definidas allí, pero no
   se muestra la salida de esta parte.

   Cuando está depurando código C que utiliza macros, a veces es difícil saber con precisión cómo
   se expanden las macros. Con este comando, no tienes que descifrarlo; puedes ver las expansiones.

C-c C-\
   Insertar o alinear caracteres '\' en los extremos de las líneas de la región (c-backslash-region).
   Esto es útil después de escribir o editar una definición de C macro.

   Si una línea ya termina en '\', este comando ajusta la cantidad de espacios en blanco antes que
   ella. De lo contrario, inserta un nuevo "\". Sin embargo, la última línea de la región se trata
   de forma especial; no se inserta ningún "\" en esa línea y se suprime cualquier "\" que haya en
   ella.

M-x cpp-highlight-buffer
   Resalta partes del texto según los condicionales de su preprocesador. Este comando muestra otro
   búfer llamado *CPP Edit*, que sirve como un menú gráfico para seleccionar cómo mostrar tipos
   particulares de condicionales y sus contenidos. Después de cambiar varios ajustes, haga clic
   en '[A]pply these settings' (o vaya a ese búfer y pulse "a") para volver a resaltar el búfer
   del modo C en consecuencia.

C-c C-s
   Muestra la información sintáctica sobre la línea fuente actual (c-show-syntactic-information).
   Esta información dirige la forma en que se sangrará la línea.

M-x cwarn-mode, M-x global-cwarn-mode
   El modo menor de CWarn resalta ciertas construcciones sospechosas de C y C++:

   -Asignaciones dentro de las expresiones.
   -Punto y coma inmediatamente después de 'if', 'for', y 'while' (excepto después de una
       declaración 'do ... while').
   -Funciones C++ con parámetros de referencia.

   Puede habilitar el modo para un búfer con el comando M-x cwarn-mode, o para todos los búferes
   adecuados con el comando M-x global-cwarn-mode o personalizando el variable global-cwarn-mode.
   También debe activar bloqueo de fuentes para que funcione

M-x hide-ifdef-mode
   Oculta el código seleccionado dentro de los bloques de preprocesador '#if' y'#ifdef'. Si cambia
   la variable hide-ifdef-shadow a t, los bloques de preprocesador de modo menor de Hide-ifdef
   "sombras" se muestran de una forma menos prominente, en lugar de ocultarlos por completo.
   Consulte la cadena de documentación del modo hide-ifdef para obtener más información.

M-x ff-find-related-file
   Encontrar un archivo "relacionado" de forma especial con el archivo visitado por el búfer
   actual. Normalmente este será el archivo de cabecera correspondiente a un archivo fuente
   C/C++, o viceversa. La variable ff-related-file-alist especifica cómo calcular los nombres
   de archivos relacionados.

43.13 Modo Asm

El modo Asm es un modo principal para editar archivos de código ensamblador. Define estos comandos:

<TAB>
   de tabulación a tabulación.

C-j
   Insertar una nueva línea y luego sangrar usando tab-to-tab-stop.

:
   Inserte dos puntos y luego quite la sangría de antes de la etiqueta que precede a los dos
   puntos. Entonces hazlo de tabulación en tabulación.

;
   Insertar o alinear un comentario.

La variable asm-comment-char especifica qué carácter inicia los comentarios en la sintaxis del ensamblador.

43.14 Modo Fortran

El modo Fortran está pensado para editar el código fuente de "forma fija" (y también "formato tabulación") (normalmente Fortran 77). Para editar código fuente más moderno de "forma libre" (Fortran 90, 95, 2003, 2008), utilice el modo F90 (f90-mode). Emacs normalmente utiliza el modo Fortran para archivos con la extensión '.f', '.F' o '.for', y el modo F90 para las extensiones '.f90', '.f95', '.f03' y '.f08'. Personalice la lista de modos automáticos para añadir más extensiones. GNU Fortran soporta tanto formas libres como fijas. Este manual documenta principalmente el modo Fortran, pero las características correspondientes del modo F90 se mencionan cuando son relevantes.

El modo Fortran proporciona comandos especiales de movimiento para sentencias Fortran y subprogramas, y comandos de indentación que entienden las convenciones Fortran de anidamiento, números de línea y sentencias de continuación. El modo Fortran tiene soporte para el modo de llenado automático que rompe las líneas largas en líneas de continuación de Fortran adecuadas. El modo Fortran también soporta el modo Hideshow minor (ver Hideshow), e Imenu (ver Imenu).

Se proporcionan comandos especiales para los comentarios porque los comentarios de Fortran son diferentes a los de otros lenguajes. Las abreviaturas incorporadas opcionalmente guardan la escritura al insertar palabras clave de Fortran.

Utilice M-x fortran-mode para cambiar a este modo principal. Este comando ejecuta el hook fortran-mode-hook. Ver Hooks.

Moción:       Punto de desplazamiento mediante sentencias o subprogramas.
Sangría:      Comandos de indentación para Fortran.
Autorrelleno: Soporte de llenado automático para Fortran.
Columnas:     Columnas de medición para Fortran válidas.
Abbrev:       Abreviaturas incorporadas para las palabras clave de Fortran.

43.14.1 Fortran, comandos de movimiento

Además de los comandos normales para moverse y operar en "dfuns" (funciones y subrutinas de los subprogramas de Fortran, así como módulos para el modo F90, utilizando los comandos fortran-end-of-subprogram y fortran-beginning-of-subprogram), el modo Fortran proporciona comandos especiales para moverse por instrucciones y otras unidades de programa.

C-c C-n
   Moverse al principio de la siguiente declaración (fortran-next-statement/f90-next-statement).

C-c C-p
   Ir al principio de la frase anterior (fortran-previous-statement/f90-previous-statement).
   Si no hay ninguna instrucción anterior (es decir, si se llama desde la primera instrucción
   del búfer), vaya al inicio del búfer.

C-c C-e
   Avanzar el punto hasta el comienzo del siguiente bloque de código, o hasta el final del bloque
   actual, lo que ocurra primero (f90-next-block). Un bloque de código es una subrutina, una
   sentencia if-endif, etc. Este comando existe sólo para el modo F90, no para el modo Fortran.
   Con un argumento numérico, avanza tantos bloques.

C-c C-a
   Punto de desplazamiento hacia atrás al bloque anterior (f90-previous-block). Esto es como
   f90-next-block, pero se mueve hacia atrás.

C-M-n
   Moverse al final del bloque de código actual (fortran-end-of-block/f90-end-of-block). Con un
   argumento numérico, mueva hacia adelante ese número de bloques. La marca se coloca antes del
   punto en movimiento. La versión en modo F90 de este comando comprueba la consistencia de los
   tipos de bloques y etiquetas (si están presentes), pero no comprueba el bloque más externo,
   ya que puede estar incompleto.

C-M-p
   Ir al principio del bloque de código actual (fortran-beginning-of-block/f90-beginning-of-block).
   Esto es fortran-end-of-block, pero se mueve hacia atrás.

Los comandos para fortran-beginning-of-subprogram y fortran-end-of-subprogram se mueven al principio o al final del subprograma actual, respectivamente. Los comandos fortran-mark-do y fortran-mark-if marcan el final del bloque actual 'do' o 'if', y se mueven hacia el punto de inicio.

43.14.2 Fortran sangría

Se necesitan comandos y características especiales para sangrar el código Fortran del formulario fijo (o tabulado) para asegurar que varias entidades sintácticas (números de línea, indicadores de la línea de comentarios e indicadores de la línea de continuación) aparezcan en las columnas requeridas.

Comandos:     Comandos para el sangrado y llenado de Fortran.
Continuacion: Cómo se sangran las líneas de continuación.
Números:      Cómo los números de línea se desvían automáticamente.
Conv:         Convenciones que usted debe obedecer para evitar problemas.
Vars:         Variables que controlan el estilo de sangrado Fortran.
  1. Fortran sangría y comandos de relleno
    C-M-j
       Romper la línea actual en el punto y establecer una línea de continuación (fortran-split-line).
    
    M-^
       Unir esta línea a la línea anterior (fortran-join-line).
    
    C-M-q
       Indentar todas las líneas del subprograma en el que se encuentra el punto
       (fortran-indent-subprogram).
    
    M-q
       Rellenar un bloque de comentarios o una declaración (usando fortran-fill-paragraph o
       fortran-fill-statement).
    

    La tecla C-M-q ejecuta el subprograma fortran-indent-subprogram, un comando para rebobinar todas las líneas del subprograma Fortran (función o subrutina) que contienen el punto.

    La clave C-M-j ejecuta fortran-split-line, que divide una línea de la manera apropiada para Fortran. En una línea sin comentarios, la segunda mitad se convierte en una línea de continuación y se sangrará en consecuencia. En una línea de comentario, ambas mitades se convierten en líneas de comentario separadas.

    M-^ o C-c C-d ejecuta el comando fortran-join-line, que une una línea de continuación con la línea anterior, aproximadamente como la inversa de fortran-split-line. El punto debe estar en una línea de continuación cuando se invoca este comando.

    M-q en modo Fortran rellena el bloque de comentarios o declaración en la que se encuentra ese punto. Esto elimina cualquier exceso en la continuación de los estados de cuenta.

  2. Líneas de Continuación

    La mayoría de los compiladores de Fortran 77 permiten dos formas de escribir líneas de continuación. Si el primer carácter no espaciado de una línea está en la columna 5, entonces esa línea es una continuación de la línea anterior. Llamamos a este formulario fijo. (En Emacs de GNU siempre contamos las columnas desde 0; pero tenga en cuenta que el estándar de Fortran cuenta desde 1.) La variable fortran-continuation-string especifica el carácter que debe figurar en la columna 5. Una línea que comienza con un carácter de tabulación seguido de cualquier dígito excepto '0' es también una línea de continuación. A este estilo lo llamamos formato de pestaña de continuación. (Fortran 90 introdujo "free form", con otro estilo de líneas de continuación).

    El modo Fortran puede usar cualquier estilo de línea de continuación. Cuando entra en el modo Fortran, intenta deducir automáticamente el estilo de continuación adecuado del contenido del búfer. Para ello, escanea fortran-analyze-depth (por defecto 100) desde el inicio del búfer. La primera línea que comienza con un carácter de tabulación o seis espacios determina la elección. Si el análisis falla (por ejemplo, si el búfer es nuevo y, por lo tanto, está vacío), se utiliza el valor de fortran-tab-mode-default (nil para el formulario fijo y non-nil para el formato de ficha). '/t' (fortran-tab-mode-string) en la línea de modo indica que el formato de pestaña está seleccionado. El modo Fortran ajusta el valor de indent-tabs-mode.

    Si el texto en una línea comienza con el marcador de continuación de Fortran '$', o si comienza con cualquier carácter que no sea un espacio en blanco en la columna 5, el modo Fortran lo trata como una línea de continuación. Cuando sangras una línea de continuación con <TAB>, convierte la línea al estilo de continuación actual. Cuando se divide una instrucción Fortran con C-M-j, el marcador de continuación en la nueva línea se crea de acuerdo con el estilo de continuación.

    La configuración del estilo de continuación afecta a otros aspectos de la edición en modo Fortran. En el modo de formulario fijo, el número mínimo de columna para el cuerpo de una sentencia es 6. Las líneas dentro de los bloques de Fortran que están sangradas con números de columna más grandes deben usar sólo el carácter de espacio para espacios en blanco. En el modo de formato de ficha, el número mínimo de columna para el cuerpo de la expresión es 8, y el espacio en blanco antes de la columna 8 debe consistir en un carácter de ficha.

  3. Los números de línea Fortran

    Si un número es el primer no-espacio en la línea, la sangría de Fortran asume que es un número de línea y lo mueve a las columnas 0 a 4. (Las columnas siempre cuentan desde 0 en Emacs.)

    Los números de línea de cuatro dígitos o menos normalmente tienen un espacio con sangría. La variable fortran-line-number-indent controla esto; especifica la sangría máxima que puede tener un número de línea. El valor por defecto de la variable es 1. El modo Fortran intenta evitar que los dígitos del número de línea pasen de la columna 4, reduciendo la sangría por debajo del máximo especificado si es necesario. Si fortran-line-number-indent tiene el valor 5, los números de línea se justifican a la derecha para terminar en la columna 4.

    Basta con insertar un número de línea para sangrar de acuerdo con estas reglas. A medida que se inserta cada dígito, se vuelve a calcular la sangría. Para desactivar esta función, ajuste el número de línea eléctrica variable fortran-eléctrica a nil.

  4. Convenciones sintácticas

    El modo Fortran asume que usted sigue ciertas convenciones que simplifican la tarea de entender un programa Fortran lo suficientemente bien como para sangrarlo correctamente:

    Dos bucles 'do' anidados nunca comparten una sentencia 'continue'.
    
    Las palabras clave de Fortran como 'if', 'else', 'then', 'do' y otras se escriben sin espacios
    en blanco o saltos de línea incrustados.
    
    Los compiladores de Fortran generalmente ignoran los espacios en blanco fuera de las constantes
    de cadena, pero el modo Fortran no reconoce estas palabras clave si no son contiguas.
    Construcciones como 'else if' or 'end do' son aceptables, pero la segunda palabra debe estar
    en la misma línea que la primera y no en una línea de continuación.
    

    Si no se siguen estas convenciones, los comandos de indentación pueden sangrar algunas líneas de forma inestética. Sin embargo, un programa Fortran correcto conserva su significado cuando se retiene aunque no se sigan las convenciones.

  5. Variables para Fortran sangría

    Varias variables adicionales controlan cómo funciona la indentación de Fortran:

    fortran-do-indent
       Extra sangría dentro de cada nivel de la declaración 'do' (por defecto 3).
    
    fortran-if-indent
       Extra sangría dentro de cada nivel de las sentencias 'if', 'select case', or 'where' (por
       defecto 3).
    
    fortran-structure-indent
       Sangría adicional dentro de cada nivel de las sentencias 'structure', 'union', 'map', or 'interface'
       (por defecto 3).
    
    fortran-continuation-indent
       Extra sangría para los cuerpos de las líneas de continuación (por defecto 5).
    
    fortran-check-all-num-for-matching-do
       En Fortran 77, una instrucción 'do' numerada se termina con cualquier instrucción con un número
       de línea coincidente. Es común (pero no obligatorio) utilizar una declaración `continuar'
       para este propósito. Si esta variable tiene un valor nn-nil, la sangría de cualquier instrucción
       numerada debe comprobar si hay un "do" que termine allí. Si siempre termina las sentencias 'do'
       con una línea 'continue' (o si usa la más moderna 'enddo'), entonces puede acelerar la sangría
       poniendo esta variable a nil (la predeterminada).
    
    fortran-blink-matching-if
       Si esto es t, al sangrar una sentencia `endif' (o `enddo') el cursor se mueve momentáneamente a
       la sentencia 'if' (o `do') para mostrar dónde está. El valor por defecto es nil.
    
    fortran-minimum-statement-indent-fixed
       Mínima sangría para aclaraciones Fortran cuando se usa el estilo de línea de continuación de
       formulario fijo. Los cuerpos de las declaraciones nunca están sangrados por menos de esto.
       El valor predeterminado es 6.
    
    fortran-minimum-statement-indent-tab
       Mínima sangría para las sentencias Fortran para el estilo de línea de continuación de formato
       de tabulación. Los cuerpos de las declaraciones nunca están sangrados por menos de esto.
       El valor predeterminado es 8.
    

    En la siguiente sección se describen las variables que controlan la sangría de los comentarios.

43.14.3 Relleno automático en el modo Fortran

El modo Fortran tiene soporte especializado para el modo de llenado automático, que es un modo menor que divide automáticamente las sentencias a medida que las inserta cuando se vuelven demasiado anchas. La partición de una expresión implica la creación de líneas de continuación utilizando fortran-continuation-string (véase el contenido de ForIndent). Esta división ocurre cuando se escribe <SPC>, <RET>, o <TAB>, y también en los comandos de indentación de Fortran. Se activa el modo de Autocompletar Fortran de la manera normal. Vea Llenado automático.

El relleno automático rompe las líneas en los espacios o delimitadores cuando las líneas son más largas que el ancho deseado (el valor de fill-column). Los delimitadores (además de los espacios en blanco) en los que puede romperse el relleno automático son '+', '-', '/', '*', '=', '<', '>'. El salto de línea viene después del delimitador si la variable fortran-break-before-delimiters es nil. De lo contrario, (y por defecto), la pausa viene antes que el delimitador.

Para habilitar la función de Autorelleno Automático en todos los búferes de Fortran, agregue el modo de llenado automático al hook de modo fortran. Ver hooks.

43.14.4 Comprobación de columnas en Fortran

En el Fortran 77 estándar, cualquier cosa más allá de la columna 72 se ignora. La mayoría de los compiladores proporcionan una opción para cambiar esto (por ejemplo, '-ffixed-line-length-N' en gfortran). Personalice la variable fortran-line-length para cambiar la longitud de la línea en modo Fortran. Cualquier cosa más allá de este punto se bloquea como un comentario. (A menos que esté dentro de una cadena: las cadenas que se extienden más allá de la longitud fortran-line-length confundirán el font-lock.)

C-c C-r
   Muestra una "regla de columna" momentáneamente por encima de la línea actual
   (fortran-column-ruler).

C-c C-w
   Dividir la ventana actual horizontalmente de forma temporal de forma que fortran-line-length
   sea ancha en las columnas (fortran-window-create-momentarily. Esto puede ayudarle a evitar
   hacer líneas más largas que el límite impuesto por su compilador Fortran.

C-u C-c C-w
   Dividir la ventana actual horizontalmente de modo que fortran-line-length sea ancha en las
   columnas de entrada (fortran-window-create). A continuación, puede continuar el tratamiento.

M-x fortran-strip-sequence-nos
   Eliminar todo el texto de la columna fortran-line-length y más allá.

El comando C-c C-r (fortran-column-ruler) muestra una regla de columna momentáneamente por encima de la línea actual. La regla de comentarios es dos líneas de texto que muestran la ubicación de las columnas con especial significado en los programas de Fortran. Los corchetes cuadrados muestran los límites de las columnas para los números de línea, y los corchetes rizados muestran los límites de las columnas para el cuerpo de la expresión. Los números de columna aparecen encima de ellos.

Tenga en cuenta que los números de columna cuentan desde cero, como siempre en Emacs de GNU. Como resultado, los números pueden ser uno menos que aquellos con los que usted está familiarizado; pero las posiciones que indican en la línea son estándar para Fortran.

El texto utilizado para mostrar la regla de la columna depende del valor de la variable indent-tabs-mode. Si el modo indent-tabs-mode es nil, entonces el valor de la variable para la fortran-column-ruler-fixed se utiliza como regla de columna. De lo contrario, se visualiza el valor de la variable para la etiqueta de la fortran-column-ruler-tab. Al modificar estas variables, puede modificar la visualización de la regla de la columna.

C-c C-w (fortran-window-create-momentally) divide temporalmente la ventana actual horizontalmente, haciendo que una ventana fortran-line-length sea de longitud mas ancha, para que pueda ver cualquier línea que sea demasiado larga. Escriba un espacio para restaurar el ancho normal.

También puede dividir la ventana horizontalmente y continuar la edición con la división en su lugar. Para ello, utilice C-u C-c C-w (M-x fortran-window-create). Editando en esta ventana puedes ver inmediatamente cuando haces una línea demasiado ancha para ser correcta en Fortran.

El comando M-x fortran-strip-sequence-nos elimina todo el texto en la columna fortran-line-length y más allá, en todas las líneas del buffer actual. Esta es la manera más fácil de deshacerse de los números de secuencia antiguos.

43.14.5 Fortran palabra clave abreviaturas

El modo Fortran proporciona muchas abreviaturas incorporadas para palabras clave y declaraciones comunes. Son el mismo tipo de abreviaturas que usted mismo puede definir. Para utilizarlos, debe activar el Abbrev mode. Ver Abbrevs.

Las abreviaturas incorporadas son inusuales en un sentido: todas comienzan con punto y coma. Por ejemplo, una abreviatura incorporada de Fortran es ';c' para 'continue'. Si inserta ';c' y luego inserta un carácter de puntuación como un espacio o una nueva línea, el ';c' se expande automáticamente a 'continue', siempre y cuando el modo Abbrevs esté habilitado.

Escriba ';?' o ';C-h' para mostrar una lista de todas las abreviaturas Fortran incorporadas y lo que significan.

44 Programas de compilación y pruebas

El capítulo anterior trata sobre los comandos de Emacs que son útiles para realizar cambios en los programas. Este capítulo trata sobre los comandos que ayudan en el proceso de compilación y prueba de programas.

Recopilación:      Compilación de programas en lenguajes distintos de Lisp (C, Pascal, etc.).
Compilación:       El modo para visitar los errores del compilador.
Shell compilación: Personalizar correctamente su shell para su uso en el buffer.
Grep Searching:    Búsqueda con grep.
Flymake:           Encontrar errores de sintaxis sobre la marcha.
Depuradores:       Ejecución de depuradores simbólicos para programas que no son de Lisp.
Ejecución de Lisp: Varios modos de edición de programas Lisp.
Bibliotecas:       Cómo se cargan los programas Lisp en Emacs.
Eval:              Ejecutar una sola expresión de Lisp en Emacs.
Interacción:       Ejecutar Lisp en un buffer de Emacs.
Lisp:              Comunicación a través de Emacs con un Lisp separado.

44.1 Las compilaciones que corren bajo Emacs

Emacs puede ejecutar compiladores para lenguajes como C y Fortran, alimentando el registro de compilación en un búfer de Emacs. También puede analizar los mensajes de error y mostrarle dónde se produjeron los errores.

M-x compile
   Ejecute un compilador asincrónicamente en Emacs, con mensajes de error que van al búfer
   *compilatión*.

M-x recompile
   Invocar nuevamente el compilador con el mismo comando anterior M-x compile.

M-x kill-compilation
   Matar el subproceso de compilación en ejecución.

Para ejecutar make u otro comando de compilación, escriba M-x compile. Lee una línea de comandos del shell usando el minibuffer, y luego ejecuta el comando ejecutando un shell como un subproceso (o proceso inferior) de Emacs. La salida se inserta en un búfer llamado compilatión. El directorio por defecto del búfer actual se utiliza como directorio de trabajo para la ejecución del comando; normalmente, por lo tanto, la compilación tiene lugar en este directorio.

El comando de compilación por defecto es 'make -k', que suele ser correcto para programas compilados usando la utilidad make (el indicador '-k' indica a make que continúe compilando tanto como sea posible después de un error). Si ha realizado M-x compile anteriormente, el comando que especificó se almacena automáticamente en la variable compile-command; éste se utiliza por defecto la próxima vez que escriba M-x compile. Un archivo también puede especificar un valor local de archivo para el comando de compilación (ver Variables de archivo).

Iniciar una compilación muestra el búfer de compilatión en otra ventana pero no lo selecciona. Mientras la compilación está en ejecución, la palabra 'run' se muestra en el indicador de modo principal para el búfer compilatión, y la palabra 'Compilatión' aparece en todas las líneas de modo. No es necesario que mantenga visible el búfer compilatión mientras se ejecuta la compilación; en cualquier caso, continúa. Cuando la compilación termina, por la razón que sea, la línea de modo del búfer de compilatión cambia para decir 'exit' (seguido por el código de salida: '[0]' para una salida normal), o 'signal' (si una señal termina el proceso).

Si desea ver la transcripción de la compilación tal y como aparece, cambie al búfer compilatión y mueva el punto al final del búfer. Cuando el punto está al final, la nueva salida de compilación se inserta encima del punto, que permanece al final. De lo contrario, el punto permanece fijo mientras se añade la salida de compilación al final del búfer.

Si cambia la variable compilation-scroll-output a un valor non-nil, el búfer compilation se desplaza automáticamente para seguir la salida. Si el valor es el primer error, el desplazamiento se detiene cuando aparece el primer error, dejando un punto en ese error. Para cualquier otro valor que no sea nil, el desplazamiento continúa hasta que no haya más salida.

Para volver a ejecutar la última compilación con el mismo comando, escriba M-x recompile. Esto reutiliza el comando de compilación de la última invocación de M-x compile. También reutiliza el búfer compilatión e inicia la compilación en su directorio predeterminado, que es el directorio en el que se inició la compilación anterior.

Iniciar una nueva compilación también mata cualquier compilación que ya se esté ejecutando en compilatión, ya que el búfer sólo puede manejar una compilación en cualquier momento. Sin embargo, M-x compile pide confirmación antes de matar una compilación que se está ejecutando; para matar siempre automáticamente la compilación sin preguntar, cambie la variable compilation-always-kill * a *t. También puede matar un proceso de compilación con el comando M-x kill-compilation.

Para ejecutar dos compilaciones a la vez, inicie la primera, luego renombre el búfer de compilatión (tal vez usando rename-uniquely; ver Misc Buffer), luego cambie de búfer e inicie la otra compilación. Esto creará un nuevo búfer de compilatión.

Puede controlar el entorno pasado al comando de compilacion con la variable compilation-environment. Su valor es una lista de ajustes de variables de entorno; cada elemento debe ser una cadena de la forma "envvarname=value". Estos ajustes de las variables de entorno sustituyen a los habituales.

44.2 Modo de compilación

El búfer compilatión utiliza un modo principal llamado Compilatión mode. El modo de compilación convierte cada mensaje de error del búfer en un hipervínculo; puede mover el punto a él y escribir <RET>, o hacer clic en él con el ratón (ver Referencias del ratón), para visitar el lugar del mensaje de error en una ventana separada. El lugar es la posición específica en un archivo donde ocurrió el error.

Si cambia la variable compilation-auto-jump-to-first-error a un valor non-nil, Emacs visita automáticamente el lugar del primer mensaje de error que aparece en el búfer compilatión.

El modo de compilación proporciona los siguientes comandos adicionales. Estos comandos también se pueden utilizar en los búferes grep, donde los hipervínculos son coincidencias de búsqueda en lugar de mensajes de error (ver Búsqueda grep).

M-g M-n, M-g n, C-x `
   Visitar el lugar del siguiente mensaje de error o coincidencia (next-error).

M-g M-p, M-g p
   Visite el lugar del mensaje de error o coincidencia anterior (previous-error).

M-n
   Mover el punto al siguiente mensaje de error o coincidencia, sin visitar su lugar
   (compilation-next-error).

M-p
   Mover el punto al mensaje de error o coincidencia anterior, sin visitar su lugar
   (compilation-previous-error).

M-}
   Mover el punto al siguiente mensaje de error o coincidencia que aparece en un archivo
   diferente (compilation-next-file).

M-{
   Mover el punto al mensaje de error anterior o coincidencia que aparece en un archivo
   diferente (compilation-previous-file).

C-c C-f
   Toggle Next Error Follow minor mode, hace que el movimiento del cursor en el búfer de
   compilación produzca una visualización automática de la fuente.

Para visitar los errores secuencialmente, escriba C-x ` (next-error), o los equivalentes M-g M-n o M-g n. Este comando puede ser invocado desde cualquier búfer, no sólo desde un búfer del modo Compilación. La primera vez que lo invocas después de una compilación, visita el lugar del primer mensaje de error. Cada C-x ` subsiguiente visita el siguiente error, de manera similar. Si visita un error específico con <RET> o un clic del ratón en el búfer de compilatión, los siguientes comandos C-x ` avanzan desde allí. Cuando C-x ` no encuentra más mensajes de error que visitar, indica un error. C-u C-x ` comienza de nuevo desde el principio del buffer de compilación, y visita el primer lugar.

M-g M-p o M-g p (previous-error) itera a través de errores en la dirección opuesta.

Los comandos de error siguiente y anterior no sólo actúan sobre los errores o coincidencias listados en los búferes compilatión y grep; también saben cómo iterar a través de listas de errores o coincidencias producidas por otros comandos, tales como M-x occur (ver Otros tipos de búsqueda repetitiva). Si ya está en un búfer que contiene mensajes de error o coincidencias, estos son los que se iteran; de lo contrario, Emacs busca un búfer que contenga mensajes de error o coincidencias entre las ventanas del búfer seleccionado, luego uno que contenga el siguiente error o el anterior previamente iterado, y finalmente entre todos los demás búferes. Si el búfer elegido para iterar a través no se muestra actualmente en una ventana, se mostrará.

Por defecto, los comandos de next-error y previous-error se omiten los mensajes menos importantes. La variable compilation-skip-threhold controla esto. El valor por defecto, 1, significa omitir algo menos importante que una advertencia. Un valor de 2 significa omitir algo menos importante que un error, mientras que 0 significa no omitir ningún mensaje.

Cuando Emacs visita el lugar de un mensaje de error, resalta momentáneamente la línea de origen relevante. La duración de este resaltado se determina por la variable next-error-highlight.

Si el búfer compilatión se muestra en una ventana con un margen izquierdo (ver Fringes), los comandos de visita del lugar ponen una flecha en el margen, apuntando al mensaje de error actual. Si la ventana no tiene ningún margen izquierdo, como en un terminal de texto, estos comandos desplazan la ventana de modo que el mensaje actual se encuentre en la parte superior de la ventana. Si cambia la variable compilation-context-lines a un valor entero n, estos comandos desplazan la ventana de modo que el mensaje de error actual sea n líneas desde arriba, exista o no un margen; el valor por defecto, nil, da el comportamiento descrito anteriormente.

Para analizar los mensajes del compilador, el modo Compilación utiliza la variable compilation-error-regexp-alist que lista varios formatos de mensajes de error y le indica a Emacs cómo extraer el lugar de cada uno. Una variable similar, grep-regexp-alist, le dice a Emacs cómo analizar la salida de un comando grep (ver Búsqueda de grep).

El modo de compilación también define las teclas <SPC> y <DEL> para desplazarse por las pantallas; M-n (compilation-next-error) y M-p (compilation-previous-error) para pasar al siguiente o anterior mensaje de error; y M-{ (compilation-next-file) y M-} (compilation-previous-file)