\chapter{Editando archivos con Emacs}\label{emacs-chapter}

\begin{fortune}
  FUNNY SOMETHING OR OTHER
\end{fortune}

\bindex{emacs}
\section{¿Qué es Emacs?}

Para obtener algo en una computadora, necesita una forma de introducir
texto en los archivos, y una manera de cambiar el texto que ya está en
los archivos.  Un {\bf editor} es un programa para este tipo de
tareas.  \cmdnm{emacs} es uno de los editores más populares, en parte
porque es muy fácil para un principiante hacer trabajos con él.  (El
editor de \unix\ clásico, el \cmdnm{vi}\ttindex{vi}, se trata en el
Apendice~\ref{vi-chapter}.)

Para aprender \cmdnm{emacs}, tiene que encontrar un archivo de texto
(letras, números, etc.) cópielo a su directorio de usuario
\footnote{Por ejemplo, \cmdln{cp /usr/src/linux/LEAME ./LEAME}} (no
queremos modificar el archivo original, si éste contiene información
importante), y luego llame a Emacs con el archivo:

\begin{screen}
   \begin{tt}
{\tt /home/larry\$ emacs LEAME}
   \end{tt}
\end{screen}

(Por supuesto, si decide copiar \file{/etc/rc}, \file{/etc/inittab}, o
cualquier otro archivo, sustituya ese nombre de archivo por
\file{LEAME}.  Por ejemplo, si \cmdln{cp /etc/rc \~{}/rc}, entonces
\cmdln{emacs rc}.)

\xwarn ``Llamar'' a Emacs puede tener efectos diferentes dependiendo
en dónde lo haga.  Desde una consola que muestra sólo caracteres de
texto Emacs se apoderará de toda la consola.  Si lo llama desde X,
Emacs abrirá su propia ventana.  Asumiré que lo está haciendo desde
una consola de texto, pero todo sucede de la misma manera en la
versión de X, lógicamente ---simplemente sustituya la palabra
``ventana'' en los lugares en donde lea ``pantalla''.  ¡Además,
recuerde que debe mover el puntero del ratón a la ventana de Emacs
para escribir!

Su pantalla (o ventana, si está usando X) debería parecerse a la
Figura~\ref{emacs-shot-1}.  La mayor parte de la pantalla contiene su
documento de texto, pero las dos últimas líneas son especialmente
interesantes si está tratando de aprender Emacs.  La penúltima línea
(la que tiene una cadena larga de guiones) se denomina {\bf línea de
  modo} (``mode line'' en inglés).

\begin{figure}[tbh]\label{emacs-shot-1}
\begin{center}
\epsfig{file=ps-files/screen-shot-1.ps, width=5in}
\end{center}
\caption{Emacs se inició con \cmdln{emacs LEAME}}
\end{figure}

En mi línea de modo, ve ``Top''.  Debería decir ``All'', y puede haber
otras pequeñas diferencias.  (A muchas personas les aparece la hora
actual en la línea de modo).  La línea inmediatamente inferior a la
línea de modo se denomina {\bf minibuffer}, o a veces el {\bf área de
  eco}.  Emacs usa el minibuffer para enviar mensajes al usuario, y
ocasionalmente cuando es necesario, para leer información que
introduce el usuario.  De hecho, ahora mismo Emacs le está diciendo
``{\tt Para obtener información acerca del Proyecto GNU y sus
  objetivos, teclee C-h C-p.}'' (sólo que en inglés).  Ignórelo por
ahora; no vamos a usar mucho el minibuffer por un tiempo.

Antes de realizar cualquier cambio en el texto del archivo, necesita
aprender cómo moverse.  El cursor deberá estar al principio del
archivo, en la esquina superior-izquierda de la pantalla.  Para
avanzar, presione \key{C-f} (reteniendo la tecla \key{Control}
mientras presiona ``f'', para ``forward''(avanzar)).  Avanzará un
carácter cada vez, y si retiene ambas teclas, la repetición automática
de teclas de su sistema deberá surtir efecto en medio segundo
aproximadamente.  Notará como, cuando llega al fin de la línea, el
cursor automáticamente se mueve a la próxima línea.  \key{C-b} (para
``backward''(retroceder)) tiene el comportamiento opuesto.  Y, ya que
estamos en ello, \key{C-n} y \key{C-p} le llevan a las líneas
siguiente y anterior, respectivamente.  \footnote{En caso de que aún
  no lo haya notado, muchos de los comandos de movimiento de emacs
  consisten en combinar \key{Control} con una única letra
  mnemotécnica.}


Usar las teclas de control es comúnmente la manera más rápida de
moverse cuando está editando.  El objetivo de Emacs es mantener sus
manos sobre las teclas alfa-numéricas del teclado, donde se realiza la
mayoría del trabajo.  Sin embargo, si quiere, las teclas de movimiento
deberán funcionar también.

\xwarn De hecho, cuando usa X, debería ser capaz de ubicar el puntero
del ratón y hacer ``click'' con el botón izquierdo para mover el
cursor donde quiera.  Sin embargo, esto es muy lento---¡tiene que
mover la mano hasta el ratón!  La mayoría de la gente que usa Emacs
usa principalmente el teclado para moverse por el texto.

Use \key{C-p} y \key{C-b} para ir a la esquina superior-izquierda.
Ahora mantenga \key{C-b} un poco más.  Debería oír un sonido molesto
de campana, y ver el mensaje ``{\tt Beginning of buffer}'' (Principio
del buffer) que aparece en el minibuffer.  En este punto se puede
preguntar, ``¿Pero qué es un buffer?''


Cuando Emacs trabaja sobre un archivo, no trabaja realmente sobre el
archivo en sí.  En vez de eso, copia los contenidos del archivo en un
área de trabajo especial de Emacs llamada {\bf buffer}, donde puede
modificar el contenido.  Cuando ha acabado de trabajar, debe decirle a
Emacs que guarde los buffers --- en otras palabras, que escriba el
contenido de los buffers en el archivo correspondiente.  Hasta que
haga esto, el archivo permanece sin cambiar, y el contenido de los
buffers existe únicamente dentro de Emacs.

Con esto en mente, prepárese a insertar su primer carácter en el
buffer.  Hasta ahora, todo lo que hemos hecho ha sido ``no
destructivo'', este es un gran momento.  Puede escoger cualquier
carácter que quiera, pero si quiere hacer esto con estilo, yo sugiero
usar una bonita y sólida, ``X'' mayúscula.  Mientras lo teclea, eche
un vistazo al principio de la línea de modo al pie de la pantalla.
Cuando cambia los buffer de modo que sus contenidos no sean iguales
que los del archivo sobre el disco, Emacs muestra dos asteriscos a
principios de la línea de modo, para hacerle saber que el buffer ha
sido modificado:


\begin{screen}
   \begin{verbatim}
--**- Emacs:  algun_archivo.txt (Fundamental)--Top------------------------ 
\end{verbatim}
\end{screen}

Estos dos asteriscos se muestran tan pronto como modifica el buffer, y
permanecen visibles hasta que guarde el buffer.  Puede guardar los
buffer muchas veces durante una sesión de edición ---el comando para
hacerlo es simplemente \key{C-x~C-s} (presione \key{Control} y pulse
``x'' y ``s'' mientras la mantiene apretada, ¡probablemente ya se lo
imaginó!).  Es deliberadamente fácil de escribir, porque lo mejor es
salvar sus buffers al principio y frecuentemente.


Ahora voy a enumerar más comandos, además de los que ya ha aprendido,
y los puede practicar del modo que prefiera.  Yo sugiero
familiarizarse con ellos antes de proseguir:


\begin{tabular}{ll}
{\bf {\tt C-f}}     & Avanza un carácter. \\
{\bf {\tt C-b}}     & Retrocede un carácter. \\
{\bf {\tt C-n}}     & Va a la próxima línea. \\
{\bf {\tt C-p}}     & Va a la línea anterior.  \\
{\bf {\tt C-a}}     & Va al comienzo de la línea. \\
{\bf {\tt C-e}}     & Va al final de la línea. \\
{\bf {\tt C-v}}     & Va a la próxima página/pantalla de texto.\\
{\bf {\tt C-l}}     & Redibuja la pantalla, con la línea actual en el centro. \\
{\bf {\tt C-d}}     & Borra este carácter (practica este).  \\ 
{\bf {\tt C-k}}     & Borra el texto desde aquí hasta el fin de línea. \\ 
{\bf {\tt C-x C-s}}     & Salva el buffer en su archivo correspondiente. \\ 
\key{Retroceso}     & Borra el carácter anterior (el último que
 escribiste). 
\end {tabular}


\section {Comenzar rápidamente en X}

\xwarn Si está interesado en editar unos archivos rápidamente, un
usuario de X no tiene que ir mucho más allá de los menús en la parte
superior de la pantalla:


\begin{center}
\epsfig{file=ps-files/screen-shot-2.ps, width=\textwidth}
\end{center}


Estos menús no están disponibles en el modo texto.

Cuando ejecute por primera vez Emacs, habrá cuatro menús en la parte
superior de la pantalla: {\sf Buffers}, {\sf File}, {\sf Edit}, y {\sf
  Help}.  Para usar un menú, simplemente mueva el puntero del ratón
sobre el nombre (como {\sf File}, haga click y retenga el botón
izquierdo).  Entonces, mueva el puntero a la acción que quiere y
libere el botón del ratón.  Si cambia de idea, retire el puntero del
ratón del menú y libere el botón.

El menú {\sf Buffers} enumera los diferentes archivos que han sido
editados en esta instancia de Emacs.  El menú {\sf Files} muestra un
grupo de comandos para cargar y guardar archivos ---muchos de ellos se
describirán más adelante.  El menú {\sf Edit} muestra algunos comandos
para editar un buffer, y el menú {\sf Help} debería dar la
documentación en línea.

Notará que las equivalencias del teclado se enumeran junto a las
opciones del menú. Puesto que, a largo plazo, éstas serán más rápidas,
podría quererlas aprender.  También, para bien o para mal, la mayoría
de la funcionalidad de Emacs está {\em únicamente\/} disponible
mediante el teclado ---así que puede que le interese leer el resto de
este capitulo.

\section{Editando varios archivos al mismo tiempo}

Emacs puede trabajar sobre más de un de archivo a la vez.  De hecho,
el único límite sobre cuantos buffers puede contener Emacs es la
cantidad real de memoria disponible en la máquina.  El comando para
traer un nuevo archivo a un buffer de Emacs es \key{C-x~C-f}.  Cuando
lo teclee, se le pedirá un nombre de archivo en el minibuffer:


\begin{screen}
   \begin{verbatim}
Find file (Buscar archivo):~/
   \end{verbatim}
\end{screen}

La sintaxis, aquí, es la misma que la usada para especificar archivos
desde la línea de comandos; las barras representan subdirectorios,
\verb+~+ es su directorio de usuario.  También consigue {\bf
  terminación automática de nombre de archivo}, significa que si ha
escrito suficiente de un nombre de archivo en la línea de comandos
para identificar el archivo singularmente, puede simplemente presionar
\key{Tab} para completarlo (o para ver las terminaciones posibles, si
hay más de una).  \key{Espacio} también tiene un papel en la
terminación automática de nombres de ficheros en el minibuffer,
parecido a \key{Tab}, pero dejaré que experimente para que averigüe
cómo difieren las dos.  Una vez que tiene el nombre completo en el
minibuffer, presione \key{Intro}, y Emacs creará un buffer mostrando
el archivo.  En Emacs, este proceso es conocido como {\bf encontrar}
un archivo.  Siga adelante y busque ahora algún otro archivo de texto
sin importancia y tráigalo a Emacs (haga esto desde nuestro buffer
original {\tt algun\_archivo.txt}).  Ahora tiene un nuevo buffer;
Supondré que se llama {\tt otro\_archivo.txt}, ya que no puedo ver su
línea de modo.

Su buffer original parece haber desaparecido ---probablemente se
pregunta dónde fue.  Está todavía dentro de Emacs, y puede volver a él
con \key{C-x~b}.  Cuando teclee esto, verá que en el minibuffer le
pide el nombre un buffer al que cambiar, y nombra uno por defecto.  El
buffer por defecto lo consigue sólo con presionar \key{Intro} en la
línea de comandos, sin escribir un nombre de buffer.  El buffer por
defecto al que cambiar, es siempre el más recientemente usado, para
que cuando esté haciendo mucho trabajo entre dos buffers, \key{C-x~b}
tenga por defecto el ``otro'' buffer (salvándole de tener que escribir
el nombre del buffer).  Incluso si el buffer por defecto es el que
quiere, debería probar a teclear su nombre de todos modos.

Note que consigue el mismo tipo de terminación automática que obtuvo
al buscar un archivo: al pulsar \key{Tab} completa todo lo que puede
del nombre de un buffer y así sucesivamente.  Cada vez que se le pida
algo en el minibuffer, es una buena idea ver si Emacs hace terminación
automática.  Aprovechando la terminación automática cuando se le
ofrezca, ahorrará teclear mucho.  Emacs comúnmente hace la terminación
automática cuando elige un elemento de alguna lista predefinida.

Todo lo que ha aprendido para moverse y editar texto en el primer
buffer se aplica a los nuevos.  Siga adelante y cambie algún texto en
el nuevo buffer, pero no lo guarde (es decir, no teclee
\key{C-x~C-s}).

Déjeme asumir que quiere desechar los cambios sin guardarlos en el
archivo.  El comando para esto es {\tt C-x~k}, que ``mata'' (kill) el
buffer.  Tecléelo ahora.  Primero se le preguntará qué buffer matar,
pero por defecto es el buffer actual, y casi siempre es el que se
quiere matar, simplemente presione \key{Intro}.  Entonces le
preguntará si {\em realmente\/} quiere matar el buffer --- Emacs
siempre controla antes de matar un buffer que tiene cambios sin
salvar.  Simplemente escriba ``yes'' (sí) y presione \key{Intro}, si
quiere matarlo.

Siga adelante y practique cargar archivos, modificarlos, guardarlos, y
matar sus buffers.  Por supuesto, cerciórese de no modificar ningún
archivo de sistema importante de una forma que cause problemas
\footnote{De cualquier manera, si no es el usuario ``root'' de la
  máquina, no debería ser capaz de dañar el sistema, pero tenga
  cuidado igualmente.}, pero trate de tener por lo menos cinco buffers
abiertos al mismo tiempo, para que se pueda dar el gusto de moverse
entre ellos.

\section{Terminando una sesión de edición}

Cuando haya hecho su trabajo en Emacs, asegúrese de que se guarden
todos los buffers que deben guardarse, y salga de Emacs con
\key{C-x~C-c}.

A veces \key{C-x~C-c} le hará una pregunta o dos en el minibuffer
antes de dejarle salir ---no se alarme, simplemente conteste en las
maneras obvias.  Si piensa que podría volver a Emacs luego, no use
\key{C-x~C-c}; use \key{C-z}, que suspenderá Emacs.  Puede volver
luego con el comando \cmdln{fg} del shell. Esto es más eficiente que
detener a Emacs y comenzar varias veces, especialmente si tiene que
editar los mismos archivos nuevamente.
 
\xwarn Bajo X, presionar \key{C-z} reducirá a icono la ventana.  Mire
la sección sobre minimizar en el Capitulo~\ref{x-chapter}. Esto le da
dos formas de minimizar Emacs ---la manera normal que ofrece el gestor
de ventanas, y \key{C-z}.  Recuerde, cuando minimice, un simple
\cmdln{fg} no traerá la ventana anterior ---tendrá que usar el gestor
de ventanas.

\section{La tecla Meta}

Ha aprendido ya sobre una ``tecla modificadora'' en Emacs, la tecla
\key{Control}.  Hay una segunda, llamada la tecla {\bf Meta}, que se
usa casi tan frecuentemente.  Sin embargo, no todos los teclados
tienen su tecla Meta en el mismo lugar, y algunos ni siquiera la
tienen.  Lo primero que necesita hacer es encontrar dónde se encuentra
su tecla Meta.  Es probable que las teclas \key{Alt} de su teclado
sean también teclas Meta, si usa un PC IBM o algún otro teclado que
tenga una tecla \key{Alt}.

La forma de probar esto es mantener presionada una tecla que crea que
puede ser una tecla Meta y teclear ``x''.  Si ve que un pequeño prompt
aparece en el minibuffer (como esto: \key{M-x}) entonces la ha
encontrado. Para librarse del prompt y regresar al buffer de Emacs,
teclee \key{C-g}.

Si no consigue un prompt, entonces todavía queda una solución.  Puede
usar la tecla \key{Escape} como una tecla Meta. Pero en vez de
mantenerla pulsada mientras teclea la próxima letra, tiene que
pulsarla y soltarla rápidamente, y {\em entonces\/} teclee la letra.
Este método funcionará tenga o no una tecla Meta verdadera, también es
la manera más segura para hacerlo.  Intente ahora pulsar ligeramente
\key{Escape} y entonces teclee ``x''.  Debería conseguir otra vez ese
pequeño prompt. Simplemente use \key{C-g} para salir.  \key{C-g}
\index{interrumpir a emacs!} es la manera general en Emacs para salir
de algún lugar donde no quiere estar.  Los fastidiosos y comunes
pitidos son para hacerle saber que ha interrumpido algo, pero está
bien, porque es lo que quería hacer cuando tecleó \key{C-g}\/
\footnote{Ocasionalmente, un \key{C-g} no es suficiente para persuadir
  a emacs que realmente quiere interrumpir lo que hace.  Simplemente
  insista, y normalmente Emacs volverá a un modo más cuerdo.}


La notación \key{M-x} es análoga a \key{C-x} (ponga cualquier carácter
en el lugar de la `` {\tt x}'').  Si ha encontrado una verdadera tecla
Meta, use ésta, de otra manera simplemente use la tecla \key{Escape}.
Yo escribiré simplemente \key{M-x} y ud. tendrá que usar su propia
tecla Meta.

\section{Cortar, pegar, destruir y tirar}

Emacs, como cualquier buen editor, le permite cortar y pegar bloques
de texto.  A fin de hacer esto, necesita una forma de definir el
comienzo y fin del bloque.  En Emacs, se hace esto estableciendo dos
ubicaciones en el buffer, conocidas como {\bf marca}\index{marcar a
  emacs!} y {\bf puntero}\index{apuntar en emacs!}.  Para colocar la
marca, vaya al lugar donde quiere que comience el bloque y teclee
\key{C-SPC} (``{\tt SPC}'' significa \key{Espacio}, por supuesto).
Debería ver el mensaje ``Mark set'' (Marca establecida) que aparece en
el minibuffer\footnote{Sobre algunos terminales, \key{C-SPC} no
  funciona. Para estas máquinas, debe usar \key{C-@}.}.  Ahora la
marca ha sido establecida en ese lugar.  No habrá ningún indicador
especial destacando este hecho, pero Ud. sabe dónde la ha puesto, y
eso es lo que importa.

¿Y qué hay del {\bf puntero}? Bien, resulta que ha colocado un puntero
cada vez que ha movido el cursor, porque ``puntero'' simplemente se
refiere a su ubicación actual en el buffer.  En términos formales, el
puntero es el punto donde se insertará el texto si escribe algo.  Al
colocar la marca, y luego moverse al final del bloque, ha definido un
bloque de texto.  Este bloque es conocido como la {\bf
  región}\index{la región emacs!}.  La región siempre significa el
área entre la marca y el puntero.

El sólo hecho de definir la región no la deja disponible para pegar.
Tiene que decirle a Emacs que lo copie para poder ser capaz de
pegarlo.  Para copiar la región, asegúrese de que la marca y el
puntero están correctamente establecidos, y teclee \key{M-w}.  Ahora
ha sido grabada por Emacs.  Para pegarlo en alguna otra parte,
simplemente vaya allí y teclee \key{C-y}.  Esto es conocido como {\bf
  tirar}\index{tirar en emacs!} el texto en el buffer.

Si quiere mover el texto de la región a alguna otra parte, teclee
\key{C-w} en vez de \key{M-w}. Esto {\bf matará} \index{matar en
  emacs!}  la región ---todo el texto dentro de ella desaparecerá.  De
hecho, se ha guardado del mismo modo que si hubiera usado \key{M-w}.
Puede tirar de nuevo con \key{C-y}, como siempre.  El lugar donde
emacs guarda todo este texto es conocido como el {\bf círculo de
  muerte}.  Algunos editores lo llaman el ``porta papeles'' o el
``buffer de pegado''.

Existe otra manera para cortar y pegar: cuando usa \key{C-k} para
matar hasta el final de una línea, el texto matado se guarda en el
círculo de muerte.  Si mata más de una línea seguida, se guardarán
todas juntas en el círculo de muerte, para que la próxima tirada pegue
todas las líneas al mismo tiempo.  Por ello, casi siempre es más
rápido usar repetidas veces \key{C-k} para matar algún texto, que
establecer la marca y el puntero y usar \key{C-w}.  Sin embargo, de
una u otra manera funcionará.  Es realmente una cuestión de
preferencia personal cómo lo hace.

\section{Buscar y reemplazar} 

Hay varias maneras para buscar texto en Emacs.  Muchas son más bien
complejas, y no merece la pena tratarlas aquí.  La más fácil y la más
entretenida es usar {\bf isearch}\bindex{buscando en emacs!}.

``Isearch'' se refiere a ``incremental search'' (búsqueda
incremental).  Supongamos que quiere buscar la cadena ``tábano'' en el
siguiente buffer:


\begin{quote}
\begin{tt}
  Yo estaba temeroso que nos quedáramos sin gasolina, cuando mi tácito
 pasajero exclamó ``Auch un aguijón!  Hay un tábano aquí dentro!  ''.
\end{tt}
\end{quote}

Debería moverse al comienzo del buffer, o por lo menos a algún punto
que sabe que está antes de la primera aparición de la palabra,
``tábano'', y teclear \key{C-s}.  Eso le pondrá en el modo de búsqueda
isearch.  Ahora comience a escribir la palabra que está buscando,
``tábano''.  Pero tan pronto como escribe la ``t'', ve que Emacs ha
saltado a la primera aparición de ``t'' en el buffer.  Si la cita de
arriba es todo el contenido del buffer, entonces la primera ``t'' es
de la palabra ``temeroso''.  Ahora escriba la ``á' de ``tábano'', y
Emacs saltará sobre ``tácito'', que contiene la primer ocurrencia de
``tá''.  Y finalmente, ``b'' consigue ``tábano'', sin haber tenido que
escribir la palabra entera.

Lo que hace en una isearch es definir una cadena para buscarla.  Cada
vez que agrega un carácter al final de la cadena, el número de
posibles cadenas se reduce, hasta que haya escrito lo suficiente para
definir la cadena singularmente.  Una vez que ha encontrado la
palabra, puede salir de la búsqueda con \key{Intro} o cualquiera de
los comandos normales de movimiento.  Si piensa que la cadena que
buscas esta atrás en el buffer, entonces debería usar \key{C-r}, que
hace isearch hacia atrás.

Si encuentra una palabra, pero no es la que buscaba, entonces presione
\key{C-s} nuevamente mientras todavía esté en la búsqueda.  Esto le
moverá hasta la próxima palabra coincidente, cada vez que lo haga.  Si
no existe una próxima palabra, dirá que la búsqueda fracasó, pero si
presiona \key{C-s} nuevamente en este punto, la búsqueda volverá a
comenzar desde el principio del buffer.  Se puede decir lo opuesto de
\key{C-r} ---comienza al final del buffer.

Intente introducir un buffer de texto en inglés y haga un isearch para
la cadena ``{\tt the}''.  Primero teclee todos los ``{\tt the}'' que
quiera y luego use \key{C-s} para ir a todas las apariciones.  Note
que también aparecerán palabras como `` {\tt them}'', dado que también
contiene la subcadena ``{\tt the}''.  Para buscar un único ``{\tt
  the}'', deberá agregar un espacio al final de la cadena de búsqueda.
Puede agregar nuevos caracteres a la cadena en cualquier punto de la
búsqueda, después tiene que presionar \key{C-s} repetidamente para
encontrar las próximas palabras coincidentes.  Puede usar también la
\key{Retroceso} o \key{Supr} para quitar caracteres de la cadena en
cualquier punto de la búsqueda, y presionando \key{Intro} sale de la
búsqueda, dejándole en la última coincidencia.

Emacs también permite reemplazar todas las apariciones de una cadena
con alguna nueva cadena --- esto es conocido como {\bf query-replace}
(preguntar-reemplazar).  Para invocarlo, teclee {\tt query-replace} y
\key{Intro}.

Como se hace terminación automática sobre el nombre del comando, una
vez que has escrito ``query-re', puede simplemente presionar \key{Tab}
para terminarlo.  Digamos que desea reemplazar todas las ocurrencias
de ``tábano'' por ``mosca''.  En el prompt ``{\tt Query
  replace:\,}''(preguntar-reemplazar), escriba ``tábano'', y presione
\key{Intro}.  Entonces aparecerá el prompt nuevamente, y deberá
introducir ``mosca''.  Entonces Emacs recorrerá el buffer, parando a
cada aparición de la palabra ``tábano'', y preguntando si quiere
reemplazarla.  Simplemente presione en cada instancia `` {\tt y}'' o
``{\tt n}'', por ``Yes'' o ``No', hasta que termine.  Si no entiende
esto mientras lo lee, pruébelo.  \eindex {la búsqueda de emacs!}

\section{¿Qué es lo que ocurre realmente?}

Realmente, todas estas {\bf teclas ligadas} que ha aprendido son los
atajos a funciones de Emacs.  Por ejemplo, \key{C-p} es una manera
abreviada de decirle a Emacs que ejecute la función interna {\tt
  previous-line} (línea previa).  Sin embargo, todas estas funciones
internas pueden ser llamadas por el nombre, usando \key{M-x}.  Si
olvida que {\tt previous-line} está ligado a \key{C-p}, puede escribir
simplemente \key{M-x} {\tt previous-line} \key{Intro}, y se moverá una
línea hacia arriba.  Pruebe esto ahora, para que comprenda como
\key{M-x} {\tt previous-line} y \key{C-p} son realmente la misma cosa.

El diseñador de Emacs comenzó desde la base hacia arriba, primero
definió un lote completo de funciones internas, y entonces les asoció
o ligó ciertas teclas a las más comúnmente usadas.  A veces es más
fácil llamar a una función explícitamente con \key{M-x} que recordar a
qué tecla está ligada.  La función {\tt query-replace}, por ejemplo,
está ligada a \key{M-\%} en algunas versiones de Emacs.  Pero ¿quién
puede recordar tan rara combinación?  A menos que use query-replace
muy frecuentemente, es más fácil simplemente llamarla con \key{M-x}.


La mayoría de las teclas que pulsa son letras, cuya función es ser
insertadas en el texto del buffer.  Cada una de esas teclas está {\bf
  ligada} a la función {\tt self-insert-command}, que no hace nada más
que insertar la letra en el buffer.  Las combinaciones que usan la
tecla \key{Control} con una letra generalmente están ligadas a
funciones que hacen otras cosas, como mover el cursor.  Por ejemplo,
\key{C-v} está ligada a una función llamada {\tt scroll-up (avanzar
  página)}, que mueve el buffer una pantalla hacia arriba (lo que
quiere decir que su posición en el buffer se mueve hacia {\em
  abajo\/}, por supuesto).


Si alguna vez quisiera realmente insertar un carácter de Control en el
buffer, entonces, ¿cómo lo haría?  Después de todo, los caracteres de
Control son caracteres {\tt ASCII}, aunque rara vez usados, y puede
querer tenerlos en un archivo.  Hay una manera para impedir que los
caracteres de Control sean interpretados como comandos por Emacs.  La
tecla \key{C-q}\footnote{Llamamos a \key{C-q} una ``tecla'', aunque se
  produce manteniendo presionada la tecla \key{Control} y presionando
  ``q'', porque es un único carácter {\tt ASCII}.} está ligada a una
función especial llamada {\tt quoted-insert} (insertar lo citado).
Todo lo que {\tt quoted-insert} hace es leer la próxima tecla e
insertarla literalmente en el buffer, sin tratar de interpretarla como
un comando.  Así es cómo puede poner los caracteres de Control en sus
archivos usando Emacs.  ¡Naturalmente, la manera de insertar un C-q es
presionar \key{C-q} dos veces!

Emacs también tiene muchas funciones que no están ligadas a ninguna
tecla.  Por ejemplo, si escribe un mensaje largo, y no quiere tener
que presionar \key{Intro} al final de cada línea.  Puede hacer que
emacs lo haga por Ud. (de hecho puede hacer que Emacs haga cualquier
cosa por Ud.) ---el comando para hacerlo se llama {\tt auto-fill-mode
  (modo de auto llenado}, pero no está ligado a ninguna tecla por
defecto.  A fin de invocar este comando, debe escribir ``{\tt
  M-x~auto-fill-mode}''.  ``{\bf \tt M-x}'' es la tecla usada para
llamar a funciones por el nombre.  Podría usarlo para llamar a
funciones como {\tt next-line} y {\tt previous-line}, pero eso sería
muy ineficaz, ya que esas funciones están ligadas a \key{C-n} y
\key{C-p}.

A propósito, si mira su línea de modo después de invocar {\tt
  auto-fill- mode}, notará que la palabra ``Fill'' se ha agregado al
lado derecho.  Mientras esté allí, Emacs llenará (rellenará) el texto
automáticamente.  Puede desactivarlo escribiendo ``{\tt
  M-x~auto-fill-mode}'' nuevamente ---es un comando de palanca.

La incomodidad de escribir largos nombres de función en el minibuffer
disminuye porque Emacs hace terminación automática en los nombres de
funciones de la misma manera que lo hace en los nombres de archivo.
Por lo tanto, rara vez debería encontrarse escribiendo el nombre
entero de la función letra a letra.  Si no está totalmente seguro de
si puede o no usar la terminación automática, simplemente presione
\key{Tab}.  No puede hacer daño: lo peor que puede suceder es que
consiga un carácter Tab, y si es afortunado, resultará que puede usar
la terminación automática.

\section{Pidiendo ayuda a Emacs}

Emacs tiene extensas facilidades de ayuda ---tan extensas de hecho,
que sólo podemos comentarlas un poco aquí.  A las facilidades de ayuda
más básicas se accede tecleando \key{C-h} y luego una única letra.
Por ejemplo, \key{C-h~k} muestra la ayuda sobre una tecla (le pide que
presiones una tecla, y entonces le dice lo que esa tecla hace).
\key{C-h~t} abre un breve manual sobre Emacs. Más importante aún,
\key{C-h~C-h~C-h} le da ayuda sobre la ayuda, para decirle que está
disponible una vez que ha tecleado \key{C-h} por primera vez.  Si sabe
el nombre de una función de Emacs ({\tt save-buffer} (grabar el
buffer), por ejemplo), pero no puede recordar cuál es la combinación
de teclas a la que está ligada, use \key{C-h~w}, para ``{\tt
  where-is}'' (dónde está), y escriba el nombre de la función.  O, si
quiere conocer qué hace una función con detalle, use \key{C-h~f}, que
preguntará por un nombre de función.


Recuerde, que como Emacs hace terminación automática del nombre de la
función, realmente no tiene que estar seguro de cómo se llama para
pedir ayuda sobre ella.  Si piensa que puedes adivinar la palabra con
la que podría comenzar, teclee ésa y presione \key{Tab} para ver si se
completa.  Si no, vuelva atrás e intente otra cosa.  Lo mismo ocurre
con los nombres de archivo: aún cuando no pueda recordar del todo como
nombró cierto archivo al que no ha accedido en tres meses, puede
probar y usar la terminación automática para averiguar si está en lo
cierto.  Usa la terminación automática como una forma de preguntar, y
no sólo como una manera de teclear menos.


Hay otros caracteres que puede pulsar después de \key{C-h}, y con cada
uno consigue ayuda de una manera diferente.  Los que usará más
frecuentemente son \key{C-h~k}, \key{C-h~w}, y \key{C-h~f}.  Una vez
que esté más familiarizado con Emacs, otra para probar es \key{C-h~a},
que le pregunta por una cadena y le comenta todas las funciones que
tienen esa cadena como parte de su nombre (la ``a'' sería para
``apropos'' [a propósito], o ``about''[acerca]).


Otra fuente de información es el lector de documentación {\bf Info}.
Info es demasiado complejo para tratarlo aquí, pero si está interesado
en explorarlo por si mismo, teclee \key{C-h~i} y lea el párrafo en la
parte superior de la pantalla.  Le dirá cómo conseguir más ayuda.


\section{Especializando buffers: Modos}\label{emacs-mail-mode}

Los buffers de Emacs tienen {\bf modos} asociados\footnote{para colmo
  de males, hay ``Modos Mayores'' y ``Modos Menores'', pero en este
  momento no necesita conocer nada acerca de esto.}.  La razón para
esto, es que sus necesidades cuando escribe un mensaje de correo son
muy diferentes de sus necesidades cuando, por ejemplo, escribe un
programa.  Mejor que tratar de crear un editor que satisfaga cada
necesidad particular en todo momento (que sería imposible), el
diseñador de Emacs\footnote{Richard Stallman\index{Stallman, Richard},
  a veces también conocido como ``{\tt rms} '', porque es su login.}
eligió hacer que Emacs se comporte de manera diferente dependiendo de
qué hace Ud. en cada buffer individual.  Así, los buffers tienen
modos, cada uno diseñado para alguna actividad específica.  Los
aspectos principales que distinguen un modo de otros son las
combinaciones de teclas, pero también pueden existir otras
diferencias.

El modo más básico es el modo {\tt Fundamental}, que realmente no
tiene ningún comando especial.  De hecho, esto es todo lo que Emacs
dice sobre el Modo Fundamental:

\begin{tt}
  \begin{verbatim}
Modo Fundamental: 

Modo mayor no especializado para nada en particular.  Los otros modos
mayores son definidos por comparación con este.
\end{verbatim}
\end{tt}

Obtuve así esa información: Teclee \key{C-x~b}, que es {\tt
  switch-to-buffer} (cambiar al buffer), e introduje ``foo'' cuando se
me preguntó por un nombre de buffer al que cambiar.  Como no había
anteriormente ningún buffer llamado ``{\tt foo}'', Emacs creó uno y me
cambio a él.  Estaba en {\tt el modo fundamental} por defecto, pero si
no lo hubiese estado, podría haber tecleado
\cmdln{M-x~fundamental-mode}'' para que estuviese.  Todos los nombres
de modo tienen un comando llamado {\tt <nombre-de-modo>-mode} que pone
el buffer actual en ese modo.  Entonces, para averiguar más sobre este
modo mayor, tecleé \key{C-h~m}, que consigue ayuda sobre el modo mayor
actual del buffer en que está.


Hay un modo ligeramente más útil llamado {\tt text-mode (modo texto},
que tiene los comandos especiales \key{M-S}, para {\tt centrar
  párrafo}, y \key{M-s}, que invoca {\tt centrar línea}.  \key{M-S}, a
propósito, significa exactamente lo que piensa: mantenga pulsadas la
\key{Meta} y la tecla \key{Shift}, y presiona ``S''.


Pero no me tome la palabra en esto ---cree un nuevo buffer, póngalo en
{\tt modo texto}, y teclee \key{C-h~m}. Puede que no entienda todo lo
que Emacs le diga cuando lo haga, pero debería ser capaz de conseguir
sacar alguna información útil de ello.


Esto es una introducción a algunos de los modos más comúnmente usados.
Si los usa, asegúrese de que teclea en cada uno \key{C-h~m} alguna
vez, para averiguar más sobre cada modo.


\section{Modos de programación}

\subsection{Modo C}


Si usa Emacs para programar en el lenguaje C\index{C}, puede conseguir
que él le haga toda la indentación automáticamente.  Los archivos
cuyos nombres terminan en \file{.c} o \file{.h} se abrirán
automáticamente en el {\bf modo c}.  Esto significa que ciertos
comandos especiales de edición, útiles para escribir programas en C,
están disponibles.  En el modo C, \key{Tab} está ligado a {\tt
  c-indent-command} (indentar comandos c).  Esto significa que
presionando la tecla \key{Tab} no inserta realmente un carácter de
Tabulación.  En cambio, si presiona \key{Tab} en cualquier parte de
una línea, Emacs automáticamente indenta esta línea correctamente para
su ubicación en el programa.  Esto implica que Emacs sabe algo sobre
la sintaxis de C, (aunque nada sobre semántica ---¡no puede asegurar
que su programa no tenga errores!).


Para hacer esto, asuma que las líneas anteriores están indentadas
correctamente. Esto significa que si en la línea anterior falta un
paréntesis, un punto y coma, llaves, o cualquier otra cosa, Emacs
indentará la línea actual de una manera peculiar inesperada.  Cuando
vea que hace esto, sabrá que debe buscar un error de puntuación en la
línea anterior.


Puede usar esta característica para verificar que ha puntuado
correctamente sus programas ---en vez de leer el programa entero
buscado problemas, simplemente comience a indentar las líneas desde
arriba hasta abajo con \key{Tab}, y cuando alguna se indenta de forma
rara, verifique las líneas inmediatamente anteriores.  En otras
palabras, ¡deje a Emacs hacer el trabajo por Ud.!


\subsection{Modo Scheme}


% kff: larry, Incluyo esta porque gente de nuestra escuela también usan este
% documento, y ellos necesitan scheme para las clases. También, con la
% disponibilidad de SCM, scheme parece estar ganando alguna popularidad
% entre usuarios de linux. Siéntete libre para quitar esta subsección si
% piensas que no es necesaria, aunque. Hay una manera condicional
% incluida en LaTeX?

Este es un modo mayor que no le servirá de nada a menos que tenga un
compilador o un interprete para el lenguaje de programación Scheme en
su sistema.  Tener uno no es tan normal como, digamos, un compilador
de C, pero se está haciendo cada vez más común, así que lo trataremos
también.  Mucho de lo que es cierto para el modo Scheme\index{scheme}
es también cierto para el modo Lisp, si prefiere escribir en Lisp
\index{lisp}.

Bien, para complicar las cosas, Emacs viene con dos modos Scheme
diferentes, porque la gente no podía decidir cómo querían que
funcionara.  El que estoy describiendo se llama {\tt
  cmuscheme}\ttindex{cmuscheme}, y luego, en la sección personalizando
a Emacs, hablaré de cómo puede haber dos modos Scheme diferentes y qué
hacer acerca de ello.  Por ahora, no se preocupe si las cosas en su
Emacs no coinciden con las que yo digo aquí.  Un editor personalizable
significa un editor impredecible, ¡y no hay vuelta de hoja!.

% confución: esto no trabajará a menos que Emacs sepa donde encontrar
% el interprete de scheme. Debemos hablar acerca de que? Si, en la sección 
% sobre elisp, la mención que coloca scheme-program-name. Usted puede 
% correr un proceso Scheme interactivo en Emacs, con el comando 
% {\tt M-x run-scheme}.

Puede ejecutar un proceso Scheme interactivo en Emacs con el comando
{\tt M-x run-scheme}.  Esto crea un buffer llamado ``{\tt *scheme*}'',
que tiene el prompt habitual de Scheme.  Puede teclear expresiones de
Scheme en el prompt, presionar \key{Intro}, y Scheme las evaluará y
mostrará la respuesta.  Así, a fin de interactuar con el proceso de
Scheme, podrá simplemente escribir todas sus aplicaciones y
definiciones de función en el prompt.  Es posible que haya escrito
previamente código fuente Scheme en un algún archivo, y sería más
fácil hacer su trabajo en el archivo y enviar las definiciones al
buffer de proceso Scheme según sea necesario.


Si el archivo fuente termina en \file{.ss} o \file{.scm},
automáticamente se abrirá en el {\bf modo Scheme} cuando lo encuentre
con \key{C-x~C-f}.  Si por alguna razón, no surge en el modo Scheme,
puede hacerlo a mano con {\tt M-x scheme-mode}.  Este {\tt modo
  scheme} no es lo mismo que el buffer que ejecuta el proceso Scheme;
más bien, el que el buffer de código fuente esté en {\tt modo scheme}
significa que tiene comandos especiales para comunicar con el buffer
de proceso.


Si está dentro de la definición de una función en el buffer de código
fuente Scheme y teclea \key{C-c~C-e}, entonces esa definición será
``enviada'' al buffer de proceso ---exactamente como si lo hubiera
tecleado Ud. mismo.  \key{C-c~M-e} envía la definición y entonces le
lleva al buffer de proceso para hacer algo de trabajo interactivo.
\key{C-c~C-l} carga un archivo de código Scheme (éste funciona desde
el buffer de proceso o el buffer de código fuente).  Y como otros
modos de lenguajes de programación, al presionar \key{Tab} en
cualquier lugar de una línea de código se indentará correctamente esa
línea.


Si está en el prompt del buffer de proceso, puede usar \key{M-p} y
\key{M-n} para moverse entre sus comandos anteriores (también conocido
como la {\bf historia de entrada}). Así que si está depurando la
función {\tt `rotar'{}}, y ya lo ha aplicado a los argumentos en el
buffer de proceso, como:

\begin{screen}
\begin{tt}
  {\tt >(rotar '(a b c d e))}
\end {tt}
\end{screen}

entonces puede recuperar ese comando anterior tecleando \key{M-p} en
el prompt.  Aquí no debería ser necesario volver a escribir
expresiones largas en el prompt de Scheme ---habitúese a usar la
historia de entrada y ahorrará mucho tiempo.


Emacs conoce bastantes lenguajes de programación: C, C++, Lisp, y
Scheme son simplemente algunos. Generalmente, sabe cómo indentarlos de
forma intuitiva.


\subsection{Modo de correo}

También puede editar y enviar correo\index{correo} en Emacs. Para
entrar en un buffer de correo, teclee \key{C-x~m}.  Necesita llenar
los campos {\tt To: (A:)} y {\tt Subjet: (Asunto:)}, y entonces use
\key{C-n} para ir, por debajo de la línea de separación, al cuerpo del
mensaje (que está vacío cuando comienza por primera vez).  No cambie o
borre la línea de separación, o sino Emacs no será capaz de enviar su
correo ---use esa línea para distinguir el encabezamiento del correo,
que le dice dónde enviar el correo, de los contenidos del mensaje.


Puede escribir lo que quiera por debajo de la línea de separación.
Cuando esté listo para enviar el mensaje, simplemente teclee
\key{C-c~C-c}, y Emacs lo enviará y hará que el buffer de correo
desaparezca.


\section{Como ser más eficiente aún}


Los usuarios experimentados de Emacs son fanáticos de la eficiencia.
¡De hecho, frecuentemente acaban derrochando mucho tiempo buscando
formas para ser más eficientes!.  No quiero que le suceda esto, aunque
hay algunas cosas fáciles con las que puede llegar a ser un mejor
usuario de Emacs.  A veces los usuarios experimentados hacen que los
novatos se sientan tontos por no saber todos estos trucos ---por
alguna razón, la gente llega a hacerse religiosas sobre el uso
``correcto'' de Emacs.  Allá vamos:


Cuando se mueve de un lado a otro, usa los medios más rápidos
disponibles.  Ud. sabe que \key{C-f} es {\tt forward-char} (un
carácter hacia adelante) ---¿suponía que \key{M-f} es {\tt
  forward-word} (una palabra hacia delante)? \key{C-b} es {\tt
  backward-char} (un carácter hacia atrás).  ¿Supone qué hace
\key{M-b}?  Sin embargo, esto no es todo, puede avanzar una frase cada
vez con \key{M-e}, siempre que escriba sus frases de modo que haya
siempre dos espacios después del punto final (de otra manera Emacs no
puede distinguir donde termina una frase y comienza la siguiente).
\key{M-a} es {\tt backward-sentence} (una frase atrás).


Si ve que usa repetidamente \key{C-f} para llegar al final de la
línea, avergüéncese, y asegúrese de usar \key{C-e} en su lugar, y
\key{C-a} para ir al principio de la línea.  Si usa muchos \key{C-n}
para bajar pantallas de texto, avergüéncese mucho, y usa \key{C-v}
siempre.  Si usa repetidamente \key{C-p} para avanzar pantallas, no se
atreva a enseñar la cara, y use \key{M-v} en su lugar.


Si se está acercando al final de una línea y se da cuenta de que hay
una palabra mal tecleada o de que se ha olvidado alguna en algún lugar
anterior de la línea, {\em no} use la \key{Retroceso} o \key{Supr}
para volver a ese punto.  Eso requeriría volver a escribir porciones
enteras de texto perfecto.  En vez de eso, use combinaciones de
\key{M-b}, \key{C-b}, y \key{C-f} para moverse a la ubicación precisa
del error, arréglelo, y entonces use \key{C-e} para moverse al fin de
la línea nuevamente.


Cuando tiene que escribir un nombre de archivo, nunca teclee el nombre
completo.  Solamente escriba lo suficiente para identificarlo
singularmente, y deje que Emacs termine el trabajo presionando
\key{Tab} o \key{Espacio}.  ¿Por qué teclear de más cuando puede
derrochar ciclos de CPU en su lugar?


Si escribe algún tipo de texto simple, y de algún modo su
auto-llenando (auto-filling)lo ha fastidiado, use \key{M-q}, que es
{\tt rellenado de párrafo} en los modos de texto comunes.  Esto
``ajustará'' el párrafo en el que está, como si hubiese sido llenado
línea a línea, pero sin tener que liarse haciéndolo a mano.  \key{M-q}
trabajará desde dentro del párrafo, o desde su comienzo o final.


A veces es útil usar \key{C-x~u}, ({\bf undo} (deshacer)), que tratará
de ``deshacer'' el (los) último(s) cambio(s) que hizo. Emacs decidirá
cuanto deshacer; habitualmente decide muy inteligentemente.
Llamándolo repetidamente deshará más y más, hasta que Emacs no pueda
recordar qué cambios se hicieron.


\section{Personalizando Emacs}


¡Emacs es {\em tan} grande, y {\em tan} complejo, que de hecho tiene
¡su propio lenguaje de programación!.  No bromeo: para personalizar
Emacs ajustándolo a sus necesidades, tiene que escribir programas en
este lenguaje.  Se llama Emacs Lisp, y es un dialecto de Lisp, así que
si tiene experiencia previa en Lisp, le parecerá bastante amistoso.
Si no, no se preocupe: no voy a profundizar mucho, porque
definitivamente se aprende mejor practicando.  Para aprender realmente
a programar Emacs, deberá consultar las páginas de información de
Emacs Lisp, y leer mucho código fuente de Emacs Lisp.


La mayor parte de la funcionalidad de Emacs está definida en archivos
de código de Emacs Lisp\footnote{A veces llamados no oficialmente
  ``Elisp''.}.  La mayoría de estos archivos se distribuyen con Emacs
y colectivamente son conocidos como la ``Biblioteca de Emacs Lisp''.
La ubicación de esta biblioteca depende de cómo se instaló Emacs en su
sistema ---son ubicaciones comunes \file{/usr/lib/emacs/lisp},
\file{/usr/lib/emacs/19.19/lisp/}, etc. El \file{19.19} es el número
de versión de Emacs, y podría ser diferente en su sistema.


No necesita hurgar por su sistema de archivos buscando la biblioteca
de lisp, porque Emacs tiene la información almacenada internamente, en
una variable llamada {\tt\bf load-path} (trayectoria de carga).  Para
averiguar el valor de esta variable, es necesario {\bf evaluarla};
esto es, hacer que el intérprete de lisp de Emacs consiga su valor.
Hay un modo especial para evaluar las expresiones de Lisp en Emacs,
llamado {\tt\bf modo lisp interactivo} (lisp-interaction-mode).
Comúnmente, hay un buffer llamado ``{\tt *scratch*}'' que está ya en
este modo.  Si no lo puede encontrar, cree un nuevo buffer con
cualquier nombre, y escriba {\tt M-x lisp-interaction-mode} dentro de
él.


Ahora tiene un espacio de trabajo para interactuar con el intérprete
Lisp de Emacs. Teclee esto:
 
\begin{screen}
\begin{tt}
load-path
\end{tt}
\end{screen}

y entonces presione \key{C-j} al finalizar.  En el modo Lisp
interactivo, \key{C-j} está ligado a {\tt eval-print-last-sexp}
(evaluar-imprimir-última-sexp).  Una ``{\tt sexp}'' es una ``{\tt\bf
  s-expresion}'', lo que significa un grupo balanceado de paréntesis,
incluído el caso de que no haya ninguno.  Bueno, esto es simplificarlo
un poco, pero irá entendiendo que son según programe con Emacs Lisp.
De cualquier manera, al evaluar {\tt load-path} debería conseguir algo
como esto:

\begin{screen}
 \begin{tt}
load-path \key{C-j} \\
 ("/usr/lib/emacs/site-lisp/vm-5.35" "/home/kfogel/elithp" \\
 "/usr/lib/emacs/site-lisp" "/usr/lib/emacs/19.19/lisp") 
 \end{tt}
\end{screen}


Por supuesto, no tendrá el mismo aspecto en cada sistema, puesto que
es dependiente de cómo se instaló Emacs.  El ejemplo de arriba viene
de mi PC~386 que funciona con Linux.  Como indica lo anterior, {\tt
  load-path} es una lista de cadenas.  Cada cadena nombra un
directorio que podría contener archivos de Emacs Lisp.  Cuando Emacs
necesita cargar un archivo de código Lisp, va buscándolo en cada uno
de estos directorios, en orden.  Si un directorio se nombra pero no
existe en el sistema de archivos, Emacs simplemente lo ignora.


Cuando Emacs arranca, automáticamente trata de cargar el archivo
\file{.emacs} desde su directorio de usuario.  Por lo tanto, si quiere
hacer personalizaciones en Emacs, deberá ponerlas en \file{.emacs}.
La personalización más común son las teclas ligadas, así que aquí está
cómo hacerlo:

\begin{screen}
 \begin{tt}
(global-set-key "\verb+\+C-cl" 'goto-line)
 \end{tt}
\end{screen}

{\tt global-set-key} (fijar teclas globalmente) es una función de dos
argumentos: la tecla a la que ha de ser ligada, y la función a la que
ligarla.  La palabra ``{\tt global}'' significa que esta tecla ligada
tendrá efecto en todos los modos mayores (hay otra función, {\tt
  local-set-key} (fijar teclas localmente), que liga una tecla en un
único buffer). Arriba, he ligado \key{C-c~l} a la función {\tt
  goto-line} (ir a tal línea).  La tecla se describe usando una
cadena.  La sintaxis especial ``{\tt \verb+\+C-<carácter>}'' significa
mantener pulsada la tecla \key{Control} mientras se presiona {\tt
  <carácter>}. Así mismo, ``{\tt \verb+\+M-<carácter>}'' indica la
tecla \key{Meta}.


Todo eso está muy bien, ¿pero cómo supe que el nombre de la función
era ``{\tt goto-line}''?.  Puedo saber que quiero ligar \key{C-c~l} a
alguna función que pregunta por un número de línea y mueve el cursor a
esa línea, pero ¿cómo hice para averiguar el nombre de esa función?


Aquí es donde intervienen las facilidades de ayuda de Emacs.  Una vez
que ha decidido qué tipo de función busca, puede usar Emacs para
rastrear su nombre exacto.  He aquí una manera rápida y sucia para
hacerlo: puesto que Emacs completa los nombres de función, simplemente
escriba \key{C-h~f} (que es {\tt describe-function} (describir
función), recuérdelo), y entonces presione \key{Tab} sin escribir nada
más.  Esto pide a Emacs que complete la cadena vacía ---en otras
palabras, ¡la terminación automática se corresponderá con cada una de
las funciones!.  Puede tardar un momento en construir la lista de
funciones, ya que Emacs tiene muchas funciones internas, pero mostrará
todo lo que entre en la pantalla cuando esté listo.


En este momento presione \key{C-g} para abandonar la función {\tt
  describir función}.  Habrá un buffer llamado ``{\tt
  *Completions*}'', que contiene la lista de terminaciones automáticas
que acaba de generar.  Cambie a este buffer.  Ahora puede usar
\key{C-s}, {\tt isearch}, para buscar las funciones probables.  Por
ejemplo, es una suposición segura que una función que pregunta por un
número de línea y entonces va a esa línea contendrá la cadena ``{\tt
  line} (línea)'' en su nombre.  Por lo tanto, simplemente comience
buscando la cadena ``{\tt line}'' , y acabará encontrando lo que
busca.


Si quiere otro método, puede usar \key{C-h~a}, {\tt command-apropos},
para mostrar todas las funciones cuyos nombres se ajustan a la cadena
dada.  La salida de {\tt command-apropos} es un poco más difícil de
clasificar, que simplemente buscar una lista de terminación
automática, en mi opinión, pero puede encontrar que tiene distintas
sensaciones.  Prueber ambos métodos y a ver que opina.


Siempre existe la posibilidad de que Emacs no tenga ninguna función
predefinida para hacer lo que está buscando.  En esta situación, tiene
que escribir la función Ud. mismo.  No voy a hablar de cómo hacer eso
---debería buscar en la biblioteca de Emacs Lisp ejemplos de
definiciones de función, y leer las paginas Info sobre Emacs Lisp.  Si
resulta que conoce a un gurú local de Emacs, pregúntele cómo hacerlo.
Definir sus propias funciones de Emacs no es un gran asunto ---para
darle una idea, yo he escrito 131 de ellas durante más o menos el
último año.  Requiere un poco de práctica, pero la curva de
aprendizaje no es empinada.


Otra cosa que la gente hace a menudo en su \file{.emacs} es asignar a
ciertas variables los valores preferidos.  Por ejemplo, ponga esto en
su \file{.emacs} y entonces inicie un nuevo Emacs:

\begin{screen}
 \begin{tt}
 (setq inhibit-startup-message t)
 \end{tt}
\end{screen}

Emacs verifica el valor de la variable {\tt inhibit-startup-message}
(bloquear mensaje de arranque) para decidir si muestra la información
sobre la versión y la falta de garantía cuando arranca.  La expresión
de Lisp de arriba usa el comando {\tt setq} para asignar a esa
variable el valor `{\tt t}', que es un valor especial de Lisp que
significa {\bf true} (verdadero).  Lo contrario de `{\tt t}' es `{\tt
  nil}' (nada o nulo), que es el valor {\bf false} (falso) designado
en Emacs Lisp.  He aquí dos cosas que están en mi \key{.emacs} que
podría encontrar útiles:

\begin{screen}
 \begin{tt}
 (setq case-fold-search nil);causa la insensibilidad a mayúsculas y minúsculas 
 para la búsqueda \\;
 ;; Hacer indentar los programas C  de la manera que me gusta: \\ 
 (setq c-indent-level 2)
 \end{tt}
\end{screen}

La primera expresión hace que las búsquedas (incluyendo {\tt isearch})
sean insensibles a mayúsculas y minúsculas; esto es, la búsqueda
encontrará versiones de un mismo carácter sea mayúscula o minúscula
aunque la cadena de búsqueda contenga únicamente la versión en
minúscula.  La segunda expresión establece que la indentación por
defecto para las sentencias en lenguaje C sea un poco menor de lo
normal---esto es solamente una preferencia personal; encuentro que
esto hace el código C más legible.


El carácter de comentario en Lisp es ``{\tt ;}''. Emacs ignora
cualquier cosa que siga a uno de éstos, a menos que aparezca dentro de
una cadena literal, como esta:

\begin{screen}
 \begin{tt}
 ;;estas dos líneas son ignoradas por el intérprete de Lisp, pero la \\; 
 ;;  s-expression que le sigue se evaluará totalmente:  \\ 
 (setq alguna-cadena-literal \dq Una pausa torpe; sin ningún propósito.\dq)
 \end{tt}
\end{screen}

Es una buena idea comentar sus cambios en los archivos Lisp, porque
seis meses después no se acordará en qué estaba pensando cuando los
modificó.  Si el comentario aparece sólo en una línea, precédalo con
dos punto y coma. Esto ayuda a Emacs a indentar los archivos Lisp
correctamente.


Puede encontrar información sobre las variables internas de Emacs de
las mismas formas que con las funciones.  Use \key{C-h~v}, {\tt
  describe-variable} para hacer una lista de terminación automática, o
use \key{C-h~C-a}, {\tt apropos}.  {\tt Apropos} difiere de
\key{C-h~a}, {\tt command-apropos}, en que muestra variables y
funciones en vez de solamente funciones.


La extensión por defecto para los archivos de Emacs Lisp es
\file{.el}, como en \file{c-mode.el}.  Sin embargo, para hacer que el
código Lisp se ejecute más rápido, Emacs permite que sea {\bf
  byte-compiled} (compilado a un formato interno), y estos archivos de
código Lisp compilado terminan en \file{.elc} en vez de \file{.el}.
La excepción a esto es su archivo \file{.emacs}, que no necesita la
extensión \file{.el} porque Emacs sabe buscarlo para arrancar.


Para cargar un archivo de código Lisp interactivamente, use el comando
{\tt M-x load-file} (cargar archivo).  Le preguntará por el nombre del
archivo.  Para cargar archivos Lisp desde dentro de otros archivos
Lisp, haga esto:

\begin{screen} 
 \begin{tt}
 (load "c-mode");fuerza a Emacs a cargar el contenido de c-mode.el o .elc 
 \end{tt}
\end{screen}

Emacs añadirá la extensión \file{.elc} al nombre del archivo e
intentará encontrarlo en algún lugar del {\tt load-path}.  Si falla,
lo intenta con la extensión \file{.el}; si falla esto, usa la cadena
literal tal y como es pasada a {\tt load}.  Puede compilar
(byte-compile) un archivo con el comando {\tt M-x byte-compile-file},
pero si modifica el archivo a menudo, probablemente no merezca la
pena.  Sin embargo no debería compilar de esa manera su \file{.emacs},
ni siquiera darle la extensión \file{.el}.


Después de que \file{.emacs} se ha cargado, Emacs busca un archivo
llamado \file{default.el} para cargarlo.  Comúnmente se ubica en un
directorio en la trayectoria de carga ({\tt load-path}) llamado
\file{site-lisp} o \file{local-elisp} o algo parecido (ver el ejemplo
{\tt load-path} que di hace un rato).  La gente que mantiene Emacs en
un sistema multiusuario usa \file{default.el} para hacer cambios que
afectarán los Emacs de todos, puesto que todos los Emacs lo cargan
después de los \file{.emacs} personales.  \file{default.el} no debería
ser compilado, ya que tiende a ser modificado frecuentemente.


Si el \file{.emacs} de una persona contiene algún error, Emacs no
intentará cargar \file{default.el}, sino que simplemente se detendrá,
destellando un mensaje diciendo ``{\tt Error in init file.}'' (Error
en el archivo de inicio) o algo similar.  Si ve este mensaje,
probablemente algo vaya mal con su \file{.emacs}.


Hay un tipo más de expresión que a menudo va en un \file{.emacs}.  La
libreria de Emacs Lisp a veces ofrece múltiples paquetes para hacer lo
mismo de diferentes formas.  Esto significa que tiene que especificar
cuál quiere usar (o tendrá el paquete por defecto, que no es siempre
el mejor para todos los propósitos).  Un área donde esto sucede es en
las características de interacción del Scheme de Emacs.  Hay dos
interfaces diferentes de Scheme distribuidos con Emacs (al menos en la
versión 19): {\tt xscheme} y {\tt cmuscheme}.


\begin{screen}
 \begin{verbatim}
 prompt> ls /usr/lib/emacs/19.19/lisp/*scheme* 
 /usr/lib/emacs/19.19/lisp/cmuscheme.el
 /usr/lib/emacs/19.19/lisp/cmuscheme.elc
 /usr/lib/emacs/19.19/lisp/scheme.el
 /usr/lib/emacs/19.19/lisp/scheme.elc
 /usr/lib/emacs/19.19/lisp/xscheme.el
 /usr/lib/emacs/19.19/lisp/xscheme.elc
 \end{verbatim}
\end{screen}


Resulta que el interfaz ofrecido por {\tt cmuscheme} me gusta mucho
más que el que ofrece {\tt xscheme}, pero el que Emacs usará por
defecto es {\tt xscheme}.  ¿Cómo puedo hacer que Emacs actúe de
acuerdo con mi preferencia?.  Puse esto en mi \file{.emacs}:

\begin{screen}
 \begin{tt}
 ;; note cómo la expresión puede quebrarse en dos líneas. Lisp \\
 ;; ignora los espacios en blanco, generalmente: \\
 (autoload 'run-scheme "cmuscheme" \\
     "Corre un Scheme inferior, de la forma que me gusta."  t) 
 \end{tt}
\end{screen}

La función {\tt autoload} (auto carga) toma el nombre de una función
(citada con ``{\tt '{}}'', por razones que tienen que ver con cómo
funciona Lisp) y le dice a Emacs que esta función está definida en un
determinado archivo.  El archivo es el segundo argumento, una cadena
(sin la extensión \file{.el} o \file{.elc}) indicando el nombre del
archivo a buscar en la trayectoria de carga {\tt load-path}.


Los argumentos restantes son opcionales, pero necesarios en este caso:
el tercer argumento es una cadena de documentación para la función, de
modo que si llama a {\tt describe-function} (describir-función),
consigue alguna información útil.  El cuarto argumento le dice a Emacs
que esta función autocargable puede ser llamada interactivamente (esto
es, usando \key{M-x}).  Esto es muy importante en este caso, porque
uno debería poder teclear {\tt M-x run-scheme} para comenzar un
proceso de scheme que se ejecuta bajo Emacs.


Ahora que {\tt run-scheme} ha sido definido como una función
autocargable, ¿qué sucede cuando tecleo {\tt M-x run-scheme}?.  Emacs
mira la función {\tt run-scheme}, ve que está establecida para ser
autocargable, y carga el archivo nombrado por la autocarga (en este
caso, \file{cmuscheme}).  El archivo compilado \file{cmuscheme.elc}
existe, así que Emacs lo cargará.  Ese archivo {\em debe} definir la
función {\tt run-scheme}, o habrá un error de autocarga.  Por suerte,
define {\tt run-scheme}, así que todo va sin tropiezos, y consigo mi
interfaz preferida de Scheme\footnote{A propósito, {\tt cmuscheme} era
  la interfaz de la que hablaba antes, en la sección sobre el trabajo
  con Scheme, así que si quiere usar algo de este manual, necesita
  asegurarse de que ejecuta {\tt cmuscheme}.}.


Una {\tt autocarga} es como una promesa a Emacs, de que cuando llegue
el momento, puede encontrar la función especificada en el archivo en
el que le dice que mire.  A cambio, consigue algún control sobre lo
que se carga.  También, la autocarga ayuda a reducir el tamaño de
Emacs en la memoria, al no cargar ciertas características hasta que se
pidan.  Muchos comandos no están definidos realmente como funciones
cuando Emacs se inicia.  Más bien, están simplemente preparados para
autocargarse desde cierto archivo.  Si nunca invoca el comando, nunca
se carga.  Este ahorro de espacio es vital para el funcionamiento de
Emacs: si cargara todos los archivos disponibles en la biblioteca
Lisp, Emacs tomaría veinte minutos simplemente para arrancar, y una
vez hecho, podría ocupar la mayor parte de la memoria disponible en su
máquina.  No se preocupe, no tiene que establecer todas estas
autocargas en su \file{.emacs}; ya se tomaron en cuenta cuando Emacs
se desarrolló.


\section{Averiguando más}


No le he contado todo lo que se puede saber sobre Emacs.  De hecho, no
creo haberle contado siquiera un 1\% de lo que se puede saber sobre
Emacs.  Aunque sabe suficiente para proseguir, todavía hay montones de
comodidades y trucos que ahorran tiempo que debería averiguar.  La
mejor forma de hacerlo es esperar hasta que vea que necesita algo, y
buscar entonces una función que lo haga.

 
La importancia de estar cómodo con las facilidades de ayuda en línea
de Emacs no puede enfatizarse lo suficiente.  Por ejemplo, suponga que
quiere poder insertar los contenidos de algún archivo en un buffer que
ya está trabajando sobre un archivo diferente, para que el buffer
contenga a ambos.  Si intuyese que hay un comando llamado {\tt
  insert-file} (insertar archivo), tendría razón.  Para verificar su
acertada suposición, teclee \file{C-h~f}.  En el prompt del
minibuffer, introduzca el nombre de una función sobre la que quiera
ayuda.  Puesto que sabe que hay terminación automática en los nombres
de funciones, y puede suponer que el comando que busca comienza con
``insert'', escriba insert y presiona \key{Tab}.  Esto le muestra
todos los nombres de función que comienzan con ``insert'', e
``insert-file' es uno de ellos.


De este modo completa el nombre de función y lee sobre como trabaja, y
entonces usa {\tt M-x insert-file}.  Si se está preguntando si también
está ligado a una tecla, escribe {\tt C-h~w~insert-file} \key{Intro},
y averígüelo.  Cuanto más sepa de las facilidades de ayuda de Emacs,
más fácilmente podrá hacer preguntas a Emacs acerca de sí mismo.  La
capacidad de hacerlo, combinada con un espíritu de exploración y un
deseo de aprender nuevas formas de hacer las cosas, puede acabar por
ahorrarle mucho tecleado.


Para pedir una copia del manual de usuario de Emacs (Emacs user's
manual) y/o el manual de Programación en Emacs Lisp (Emacs Lisp
Programming manual), debe escribir a:

\begin{samepage}
\begin{quote}
  Free Software Foundation \\
  675 Mass Ave \\
  Cambridge, MA 02139 \\
  USA
\end{quote}
\end{samepage}

Ambos manuales se distribuyen electrónicamente con Emacs, en una forma
legible usando el lector de documentación Info ({\tt C-h~i}), pero
puede encontrar más fácil tratar con freeware que con las versiones en
línea.  Además, sus precios son bastantes razonables, y el dinero va a
una buena causa---¡software gratuito de calidad!.  En algún momento,
debería teclear \file{C-h~C-c} para leer las condiciones de copyright
de Emacs.  Es más interesante de lo que puede pensar, y le ayudará a
aclarar el concepto de software libre.  Si cree que el termino ``free
software'' simplemente significa que el programa no cuesta nada, por
favor ¡lea el copyright en cuanto tenga tiempo!.
 
\eindex{emacs}
%Local Variables:
%mode:latex
%TeX-master:"guide"
%End:
