pages/sphinx/emacs29/doc/build/CapConSecciones/09_ElMinibufer.html

102 KiB
Raw Blame History

<html class="writer-html5" lang="es" data-content_root="../"> <head> </head>
GNU/Emacs 29.1
Traducción Revisón: 1.70
GNU/Emacs 29.1

9 El Minibúfer

El minibuffer es donde los comandos Emacs leen argumentos complejos, como nombres de ficheros, nombres de buffer, nombres de comandos Emacs o expresiones Lisp. Lo llamamos «minibuffer» porque es un buffer de propósito especial con una pequeña cantidad de espacio en pantalla. Puede usar los comandos de edición habituales de Emacs en el minibuffer para editar el texto del argumento.

9.1 Utilización del minibuffer

Cuando el minibuffer está en uso, aparece en el área de eco, con un cursor. El minibuffer comienza con un prompt, que suele terminar con dos puntos. En él se indica qué tipo de entrada se espera y cómo se utilizará. El prompt se resalta usando la cara configurada mediante minibuffer-prompt (ver 15.8. Caras de Texto).

La forma más sencilla de introducir un argumento en el minibuffer es teclear el texto, luego RETURN (RET) para enviar el argumento y salir del minibuffer. Alternativamente, puede teclear Ctrl-g (C-g) para salir del minibuffer cancelando el comando que pide el argumento (ver 51 Salir y Abortar).

A veces, el prompt muestra un argumento por defecto, entre paréntesis antes de los dos puntos. Este argumento por defecto se usará como argumento si teclea RETURN (RET). Por ejemplo, los comandos que leen nombres de buffer usualmente muestran un nombre de buffer como argumento por defecto; puede teclear RETURN ( para operar en ese buffer por defecto. Puede personalizar cómo se muestra el argumento por defecto con la opción de usuario minibuffer-default-prompt-format.

Si activa el modo Minibuffer Electric Default, un modo global menor, Emacs oculta el argumento por defecto tan pronto como modifica el contenido del minibuffer (ya que tecleando RETURN (RET) dejaría de presentar ese valor por defecto). Si alguna vez vuelve al texto original del minibuffer, el prompt vuelve a mostrar el argumento por defecto. Para activar este modo menor, escriba Alt-x minibuffer-electric-default-mode (M-x minibuffer-electric-default-mode).

Dado que el minibuffer aparece en el área de eco, puede entrar en conflicto con otros usos del área de eco. Si se emite un mensaje de error o un mensaje informativo mientras el minibuffer está activo, el mensaje se muestra entre corchetes tras el texto del minibuffer durante unos segundos, o hasta que se teclea algo; entonces el mensaje desaparece. Mientras el minibuffer está en uso, Emacs no hace eco de las pulsaciones de teclado.

Mientras usa el minibuffer, puede cambiar a un marco diferente, quizás para anotar texto que necesita introducir (ver 22.7 Comandos de Marco). Por defecto, el minibuffer activo se mueve a este nuevo marco. Si establece la opción de usuario minibuffer-follows-selected-frame a nil, entonces el minibuffer permanece en el marco donde lo abrió, y debe volver a ese marco para completar (o abortar) el comando actual. Si establece esa opción a un valor que no sea ni nil ni t, el minibuffer se mueve de marco sólo después de que se haya abierto un minibuffer recursivo en el comando actual (véase (elisp)Mini recursivo). Esta opción es principalmente para mantener (aproximadamente) el comportamiento anterior a Emacs 28.1. Tenga en cuenta que el efecto del comando, cuando finalmente termina de usar el minibuffer, siempre tiene lugar en el marco donde lo abrió por primera vez. La única excepción es que cuando ese marco ya no existe, la acción tiene lugar en el marco actualmente seleccionado.

9.2 Minibuffers para nombres de ficheros

Comandos como Ctrl-x Ctrl-f (C-x C-f, find-file) usan el minibuffer para leer un argumento de nombre de archivo (ver 8.5 Archivos). Cuando se usa el minibuffer para leer un nombre de fichero, normalmente empieza con un texto inicial que termina en una barra. Este es el directorio por defecto. Por ejemplo, puede empezar así:

Find file: /u2/emacs/src/

Aquí, Find file (Buscar archivo): es el prompt y /u2/emacs/src/ es el directorio por defecto. Si ahora escribe buffer.c como entrada, eso especifica el archivo /u2/emacs/src/buffer.c. Vea 19.1 Nombres de Archivos, para información sobre el directorio por defecto.

Los valores por defecto alternativos para el nombre de archivo que puede necesitar están disponibles tecleando (M-n), vea 9.5 Historial del Minibúfer.

Puede especificar un archivo en el directorio padre con ..: /a/b/../foo.el es equivalente a /a/foo.el. Alternativamente, puede usar Alt-DEL (M-DEL) para matar nombres de directorio al revés (vea 26.1 Palabras).

Para especificar un archivo en un directorio completamente diferente, puede eliminar todo el valor predeterminado con Ctrl-a Ctrl-k (C-a C-k) (consulte 9.3 Edición en el minibuffer). Alternativamente, puede ignorar el valor por defecto, e introducir un nombre de fichero absoluto que empiece con una barra o una tilde después del directorio por defecto. Por ejemplo, puede especificar /etc/termcap como sigue:

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

Una doble barra hace que Emacs ignore todo lo que hay antes de la segunda barra del par. En el ejemplo anterior, /u2/emacs/src/ es ignorado, por lo que el argumento suministrado es /etc/termcap. La parte ignorada del nombre del fichero se atenúa si el terminal lo permite. (Para desactivar este atenuación, desactive el modo File Name Shadow con el comando Alt-x file-name-shadow-mode (M-x file-name-shadow-mode)).

Cuando se completan nombres de ficheros remotos (ver 19.5 Reversión Automática: Mantener los Búferes Actualizados Automáticamente), una doble barra se comporta de forma ligeramente diferente: hace que Emacs ignore sólo la parte del nombre del fichero, dejando el resto (método, host y nombre de usuario, etc.) intacto. Escribir tres barras seguidas ignora todo en los nombres de ficheros remotos. Ver Completar Nombre de Fichero en el Manual de Tramp.

Emacs interpreta ~/ como su directorio personal. Así, ~/foo/bar.txt especifica un fichero llamado bar.txt, dentro de un directorio llamado foo, que a su vez se encuentra en su directorio personal. Además, ~user-id/ significa el directorio personal de un usuario cuyo nombre de usuario es user-id. Cualquier nombre de directorio delante de ~ se ignora: así, /u2/emacs/~/foo/bar.txt es equivalente a ~/foo/bar.txt.

En sistemas MS-Windows y MS-DOS, donde un usuario no siempre tiene un directorio home, Emacs usa varias alternativas. Para MS-Windows, ver HOME y Startup Directories en MS-Windows; para MS-DOS, ver Nombres de Archivo en MS-DOS. En estos sistemas, la construcción ~user-id/ está soportada sólo para el usuario actual, es decir, sólo si user-id es el nombre de inicio de sesión del usuario actual.

Para evitar que Emacs inserte el directorio por defecto al leer nombres de ficheros, cambie la variable insert-default-directory a nil. En ese caso, el minibuffer comienza vacío. No obstante, los argumentos relativos a nombres de fichero se siguen interpretando basándose en el mismo directorio por defecto.

También puede introducir nombres de archivos remotos en el minibuffer. Véase 19.15 Archivos Remotos.

9.3 Edición en el minibuffer

El minibuffer es un buffer Emacs, aunque peculiar, y los comandos Emacs habituales están disponibles para editar el texto del argumento. (El prompt, sin embargo, es de sólo lectura, y no puede cambiarse).

Como RETURN (RET) en el minibuffer envía el argumento, no puede usarlo para insertar una nueva línea. Puede hacerlo con Ctrl-q Ctrl-q (C-q C-j), que inserta un carácter de control Ctrl-j (C-j), que es formalmente equivalente a un carácter de nueva línea (véase 8.1 Inserción de Texto). También puede utilizar el comando Ctrl-o (C-o, open-line) (véase 8.7 Líneas en Blanco Líneas en Blanco).

Dentro de un minibuffer, las teclas TAB (TAB), SPACE (SPC) y ? (?) suelen estar vinculadas a comandos de completado, que permiten rellenar fácilmente el texto deseado sin tener que escribirlo todo. Véase 9.4 Completado. Al igual que con RETURN (RET), puede utilizar Ctrl-q (C-q) para insertar un TAB, SPC o un carácter ? Si quiere hacer que SPC y ? se inserten normalmente en lugar de iniciar el completado, puede poner lo siguiente en su archivo init:

(keymap-unset minibuffer-local-completion-map "SPC")
(keymap-unset minibuffer-local-completion-map "?")

Por comodidad, (C-a, move-beginning-of-line, mover-principio-de-línea) en un minibuffer mueve el punto al principio del texto del argumento, no al principio del prompt. Por ejemplo, esto le permite borrar todo el argumento con Ctrl-a Ctrl-k (C-a C-k).

Cuando el minibuffer está activo, el área de eco se trata como una ventana ordinaria de Emacs. Por ejemplo, puede cambiar a otra ventana (con Ctrl-o (C-x o)), editar texto allí, y luego volver a la ventana del minibuffer para terminar el argumento. Incluso puedes eliminar texto en otra ventana, volver a la ventana del minibuffer y arrastrar el texto al argumento. Sin embargo, la ventana del minibuffer tiene algunas restricciones: por ejemplo, no se puede dividir. Véase 21 Varias Ventanas.

Normalmente, la ventana del minibuffer ocupa una sola línea de pantalla. Sin embargo, si añade dos o más líneas de texto en el minibuffer, éste se expande automáticamente para acomodar el texto. La variable resize-mini-windows controla el cambio de tamaño del minibuffer. El valor por defecto es grow-only, que significa el comportamiento que acabamos de describir. Si el valor es t, la ventana del minibuffer también se encogerá automáticamente si eliminas algunas líneas de texto del minibuffer, hasta un mínimo de una línea de pantalla. Si el valor es nil, la ventana del minibuffer nunca cambia de tamaño automáticamente, pero puede usar los comandos habituales de redimensionamiento de ventanas (vea 21 Varias Ventanas).

La variable max-mini-window-height controla la altura máxima para redimensionar la ventana del minibuffer. Un número en coma flotante especifica una fracción de la altura del marco; un número entero especifica el número máximo de líneas; nil significa que no se redimensiona automáticamente la ventana del minibuffer. El valor por defecto es 0,25.

El comando Ctrl-Alt-v (C-M-v) en el minibuffer desplaza el texto de ayuda de los comandos que muestran texto de ayuda de cualquier tipo en otra ventana. También puede desplazar el texto de ayuda con Alt-PageUp (M-PageUp) y Alt-PageDown (M-PageDown) (o, equivalentemente, M-prior y M-next). Esto es especialmente útil con listas largas de posibles terminaciones. Véase 21.3 Utilización de Otras Ventanas.

Emacs normalmente deshabilita la mayoría de los comandos que usan el minibuffer mientras está activo. Para permitir tales comandos, configure la variable enable-recursive-minibuffers a t. Puede que también necesite habilitar minibuffer-depth-indicate-mode para mostrar la profundidad de recursión actual en el prompt del minibuffer durante el uso recursivo de este.

Cuando está activo, el minibuffer está normalmente en minibuffer-mode (modo minibúfer). Este es un modo interno de Emacs sin ninguna característica especial.

Cuando no está activo, el minibuffer está minibuffer-inactive-mode (en modo minibuffer-inactivo), y hacer clic con ratón-1 allí muestra el buffer *Messages*. Si usa un marco dedicado para minibúferes, Emacs también reconoce ciertas teclas allí, por ejemplo, n (n) para crear un nuevo marco.

9.4 Completado

A menudo puede usar una característica llamada completado para ayudar a introducir argumentos. Esto significa que después de teclear parte del argumento, Emacs puede rellenar el resto, o parte de él, basándose en lo tecleado hasta el momento.

Cuando el completado está disponible, ciertas teclas (normalmente TAB (TAB), RETURN (RET), y SPACE (SPC)) son redirigidas en el minibuffer a comandos especiales de completado ver 9.4.2 Comandos de Completado). Estos comandos intentan completar el texto en el minibuffer, basándose en un conjunto de alternativas de completado proporcionadas por el comando que solicitó el argumento. Normalmente puede teclear ? (?) para ver una lista de alternativas de completado.

Aunque el completado normalmente se lleva a cabo en el minibuffer, a veces esta función también está disponible en los buffers normales. Véase 27.8 Completado de Nombres de Símbolos.

9.4.1 Ejemplos de Completado

Un simple ejemplo puede ser de ayuda. Alt-x (M-x) usa el minibuffer para leer el nombre de un comando, por lo que el completado funciona comparando el texto del minibuffer con los nombres de los comandos Emacs existentes. Suponga que desea ejecutar el comando auto-fill-mode. Puede hacerlo tecleando Alt-x auto-fill-mode RETURN (M-x auto-fill-mode RET), pero es más fácil usar el completado.

Si escribe Alt-x au TAB (M-x a u TAB), el TAB busca alternativas de completado (en este caso, nombres de comandos) que empiecen por au. Hay varios, incluyendo auto-fill-mode y autoconf-mode, pero todos comienzan con auto, así que el au en el minibuffer se completa con auto. (Se pueden definir más comandos en su sesión Emacs. Por ejemplo, si se definiera un comando llamado authorize-me, Emacs sólo podría completar hasta aut).

Si vuelve a teclear TAB (TAB) inmediatamente, no puede determinar el siguiente carácter; podría ser -, a o c. Así que no añade ningún carácter; en su lugar, TAB muestra una lista de todas las posibles terminaciones en otra ventana.

A continuación, escriba -f. El minibuffer ahora contiene auto-f, y el único nombre de comando que comienza con esto es auto-fill-mode. Si ahora teclea TAB (TAB), el completado rellena el resto del argumento auto-fill-mode en el minibuffer.

Por lo tanto, teclear sólo uTAB-fTAB (u TAB - f TAB) le permite entrar en auto-fill-mode.

TAB también funciona cuando el punto no está al final del minibuffer. En ese caso, rellenará el texto tanto en el punto como al final del minibuffer. Si escribe Alt-x autocom (M-x autocm), luego presiona Ctrl-b (C-b) mover el punto antes de la m, puede escribir TAB (TAB) para insertar el texto onf- en el punto y ode al final del minibuffer, de modo que el este contenga autoconf-mode.

9.4.2 Comandos de Completado

Esta es una lista de los comandos de completado definidos en el minibuffer cuando esta opción está permitida.

TAB (TAB)

Completa el texto del minibuffer en la medida de lo posible; si no se puede completar, muestra una lista de posibles terminaciones (minibuffer-complete).

SPC (SPC)

Completa hasta una palabra del texto del minibuffer antes del punto (minibuffer-complete-word). Este comando no está disponible para argumentos que suelen incluir espacios, como los nombres de archivo.

RET

Envía el texto en el minibuffer como argumento, posiblemente completando primero (minibuffer-complete-and-exit). Véase 9.4.3 Salida del Completado.

?

Mostrará una lista de terminaciones.

TAB (minibuffer-complete) es el comando de completado más fundamental. Busca todas las terminaciones posibles que coincidan con el texto existente en el minibúfer e intenta completar todo lo que pueda. Vea 9.4.4. Cómo se Eligen las Alternativas de Completado, para saber cómo se eligen estas alternativas.

SPC (minibuffer-complete-word) completa como TAB, pero sólo hasta el siguiente guión o espacio. Si tiene auto-f en el minibuffer y teclee SPCACE (SPC), encuentra que la terminación es auto-fill-mode, pero sólo inserta ill-, dando auto-fill-. Otro :kbd:SPCACE (SPC) en este punto completa hasta auto-fill-mode.

Si TAB o SPC no puede completar, muestra una lista de alternativas de completado coincidentes (si las hay) en otra ventana. Puede mostrar la misma lista con ? (minibuffer-completion-help). Los siguientes comandos se pueden usar con la lista de finalización o completado:

M-DOWN (Alt-Down)
M-UP (Alt-Up)

Mientras se está en el minibuffer, M-DOWN (minibuffer-next-completion) y M-UP (minibuffer-previous-completion) navegan a través de las opciones de finalización y se muestran en el buffer de completado. Cuando minibuffer-completion-auto-choose es distinto de cero (que es el valor predeterminado), el uso de estos comandos también inserta el candidato de completado actual en el minibuffer. Si minibuffer-completion-auto-choose es nil, puede utilizar el comando (M-RET, minibuffer-choose-completion) para insertar los candidatos de finalización en el minibuffer. Por defecto, esto sale del minibuffer, pero con un argumento prefijo, Ctrl-u Alt-RETURN (C-u M-RET) inserta el candidato actualmente activo sin salir del minibuffer.

Alt-v (M-v)
PageUp (PageUp)
prior

Tecleando Alt-v (M-v), mientras se está en el minibuffer, se selecciona la ventana que muestra la lista de opciones de completado (switch-to-completions). Esto facilita el uso de los siguientes comandos. PageUp, prior y Alt-g Alt-c (M-g M-c) hace lo mismo. También puede seleccionar la ventana de otras formas (véase 21 Varias Ventanas).

RETURN (RET)
mouse-1
mouse-2

Mientras está en el buffer de la lista de finalizaciones, esto escoge una terminación en el punto (choose-completion, escoger-terminación). Con un argumento prefijo, (C-u RET) inserta la terminación en el punto en el minibuffer, pero no sale del minibuffer, por lo que puede cambiar de opinión y elegir otro candidato.

TAB (TAB)
(RIGHT)
n (n)

Mientras están en el buffer de la lista de finalización, estas teclas se mueven apuntando a la siguiente alternativa de completado (next-completion).

Shift-TAB (S-TAB)
(LEFT)
p (p)

Mientras están en el búfer de la lista de finalización, estas teclas se mueven apuntando a la alternativa de completado anterior (previous-completion, completado-anterior).

a (a)

En el búfer de la lista de completado, sale de la ventana que lo muestra y selecciona la ventana que muestra el minibúfer (quit-window).

z (z)

Mientras esta en el búfer de la lista de completado, lo elimina y borra la ventana que lo muestra (kill-current-buffer).

9.4.3 Salida del Completado

Cuando un comando lee un argumento utilizando el minibuffer con finalización, también controla lo que ocurre cuando se teclea RETURN (RET) (minibuffer-complete-and-exit) para enviar el argumento. Existen cuatro tipos de comportamiento:

  • La finalización estricta sólo acepta coincidencias de finalización exactas. Tecleando RETURN (RET) se sale del minibuffer sólo si el texto del minibuffer es una coincidencia exacta, o se completa con una. De lo contrario, Emacs se niega a salir del minibuffer; en su lugar intenta completar, y si no se puede completar muestra momentáneamente [No-match] ([Sin coincidencia]) después del texto del minibuffer. (Aún puede salir del minibuffer tecleando Ctrl-g (C-g) para cancelar el comando).

    Un ejemplo de comando que usa este comportamiento es M-x, ya que no tiene sentido que acepte un nombre de comando inexistente.

  • La terminación cautelosa es como la terminación estricta, excepto que RETURN (RET) sólo sale si el texto ya es una coincidencia exacta. Si el texto se completa con una coincidencia exacta, RET realiza esa compleción pero no sale todavía; debe teclear un segundo RET para salir.

    Este completado se usa para leer nombres de archivos que ya deben existir, por ejemplo.

  • El completado permisivo acepta cualquier entrada; los candidatos a completado son sólo sugerencias. Escribir RETUTRN (RET) no completa, sólo envía el argumento tal y como lo ha introducido.

  • El completado permisivo con confirmación es como el completado permisivo, con una excepción: si ha tecleado TAB (TAB) y esto ha completado el texto hasta algún estado intermedio (es decir, uno que todavía no es una coincidencia de completado exacta), teclear RETURN justo después no envía el argumento. En su lugar, Emacs pide confirmación mostrando momentáneamente [Confirm] después del texto; teclee RETURN de nuevo para confirmar y enviar el texto. Esto detecta un error común, en el que uno teclea RETURN antes de darse cuenta de que TAB no completó todo lo que deseaba.

    Puede modificar el comportamiento de la confirmación personalizando la variable confirm-nonexistent-file-or-buffer. El valor por defecto, after-completion, da el comportamiento que acabamos de describir. Si lo cambia a nil, Emacs no pide confirmación, volviendo al completado permisivo. Si lo cambia a cualquier otro valor que no sea nil, Emacs pide confirmación tanto si el comando precedente era TAB como si no.

    Este comportamiento es usado por la mayoría de los comandos que leen nombres de archivos, como Ctrl-x Ctrl-f (C-x C-f), y comandos que leen nombres de buffer, como Ctrl-x b (C-x b).

9.4.4. Cómo se Eligen las Alternativas de Completado

Los comandos de completado funcionan reduciendo una gran lista de posibles alternativas de completado a un subconjunto más pequeño que coincide con lo que ha escrito en el minibuffer. En Ejemplo de Completado, dimos un ejemplo simple de este tipo de comparación. El procedimiento para determinar qué constituye una coincidencia es bastante intrincado. En la mayoría de los casos, Emacs intenta ofrecer complementos plausibles.

Emacs lleva a cabo el compleción usando uno o más estilos de completado, conjuntos de criterios para emparejar el texto del minibuffer con las alternativas de completado. Durante el proceso, Emacs prueba cada estilo de completado uno por uno. Si un estilo produce una o más coincidencias, se usa como lista de alternativas de completado. Si no hay coincidencias, pasa al siguiente estilo.

La variable de lista completion-styles especifica los estilos de completado a usar. Cada elemento de la lista es el nombre de un estilo de completado (un símbolo Lisp). Los símbolos de estilo disponibles se almacenan en la variable completion-styles-alist (ver Variables de Completado en el Manual de Referencia de Emacs Lisp). Los estilos de completado por defecto son (en orden):

basic

Una alternativa de terminación o completado que coincida debe tener el mismo comienzo que el texto en el minibuffer antes del punto. Además, si hay algún texto en el minibúfer después del punto, el resto de la alternativa de finalización debe contener ese texto como subcadena.

partial-completion

Este estilo de completado dinámico 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 como emacs-lisp-mode).

Además, un * en el texto del minibuffer se trata como un comodín: coincide con cualquier cadena de caracteres en la posición correspondiente de la alternativa de compleción.

emacs22

Este estilo de completado es similar a basic, excepto que ignora el texto en el minibuffer después del punto. Se llama así porque corresponde al comportamiento de completado de Emacs 22.

También se definen los siguientes estilos de completado adicionales, que puede añadir a completion-styles si lo desea (consulte 50 Personalización ):

substring

Una alternativa de finalización que coincida debe contener el texto del minibúfer anterior a punto y el texto del minibúfer posterior a punto como subcadenas (en ese mismo orden).

De esta forma, si el texto en el minibuffer es foobar, con el punto entre foo y bar, coincide con afoobbarc, donde a, b, y c pueden ser cualquier cadena incluyendo la cadena vacía.

flex

Este dinámico estilo de completado dinámico, también conocido como flx, fluzzy, scatter (completado difuso o disperso), intenta completar usando subcadenas en orden. Por ejemplo, puede considerar que foo coincide con frodo o fbarbazoo.

initials

Este estilo de completado muy riguroso intenta completar acrónimos e inicialismos. Por ejemplo, al completar nombres de comandos, hace coincidir lch con list-command-history.

También existe un estilo de completado muy simple llamado emacs21. En este estilo, si el texto en el minibuffer es foobar, sólo se consideran las coincidencias que empiezan por foobar.

Puede usar diferentes estilos de completado en diferentes situaciones, configurando la variable completion-category-overrides. Por ejemplo, la configuración por defecto dice que sólo se utilice la terminación básica y de subcadena para los nombres de los búferes.

9.4.5 Opciones de Completado

El uso de mayúsculas y minúsculas es importante cuando se completan argumentos que distinguen entre mayúsculas y minúsculas, como los nombres de comandos. Por ejemplo, al completar nombres de comandos, AU no se completa con auto-fill-mode. Las diferencias entre mayúsculas y minúsculas se ignoran al completar argumentos en los que las mayúsculas y minúsculas no importan.

Al completar los nombres de archivo, se ignoran las diferencias entre mayúsculas y minúsculas si la variable read-file-name-completion-ignore-case es distinta de nil (nulo). El valor por defecto es nil en sistemas que distinguen entre mayúsculas y minúsculas, como GNU/Linux; es no-nil en sistemas que no distinguen entre mayúsculas y minúsculas, como Microsoft Windows. Cuando se completan nombres de búferes, se ignoran las diferencias entre mayúsculas y minúsculas si la variable read-buffer-completion-ignore-case no es nil; por defecto es nil.

Cuando se completan nombres de archivos, Emacs normalmente omite ciertas alternativas que se consideran poco probables de ser elegidas, tal y como determina la variable de lista completion-ignored-extensions. Cada elemento de la lista debe ser una cadena; cualquier nombre de fichero que termine en tal cadena se ignora como alternativa de completado. Cualquier elemento que termine en una barra (/) representa un nombre de subdirectorio. El valor estándar de completion-ignored-extensions tiene varios elementos, incluidos .o, .elc y ~. Por ejemplo, si un directorio contiene foo.c y foo.elc, foo se completa en foo.c. Sin embargo, si todas las terminaciones posibles terminan en cadenas omitidas, no se ignoran: en el ejemplo anterior, foo.e termina en foo.elc. Emacs no tiene en cuenta las extensiones ignoradas al mostrar las alternativas de completado en la lista de completado.

El completado Shell es una versión extendida del completado de nombre de fichero, ver 39.7 Opciones del Modo Shell.

Si completion-auto-help se establece a nil, los comandos de completado nunca muestran el búfer de la lista de completado; debe teclear ? (?) para mostrar la lista. Si el valor es lazy, Emacs sólo muestra el búfer de la lista de completado en el segundo intento de completar. En otras palabras, si no hay nada que completar, la primera TAB se hace eco de Next char not unique (Siguiente carácter no único); la segunda TAB muestra el búfer de la lista de completado. Si el valor es siempre, el búfer de la lista de finalización se muestra siempre que se intenta completar.

La visualización del búfer de la lista de completado después de que se muestre por primera vez también está controlada por completion-auto-help. Si el valor es t o lazy, la ventana que muestra las compleciones aparece cuando Emacs es capaz de completar (y puede aparecer de nuevo si Emacs es de nuevo incapaz de completar después de que escriba algo más de texto); si el valor es always, la ventana aparece sólo cuando sale de la compleción. El valor visible es un híbrido: se comporta como t cuando decide si abrir o no la ventana que muestra el búfer de la lista de completado, y como always cuando decide si cerrarla o no.

Emacs puede seleccionar opcionalmente la ventana que muestra las terminaciones cuando muestra esa ventana. Para habilitar este comportamiento, personalice la opción de usuario completion-auto-select a t, que cambia el comportamiento de TAB (TAB) cuando Emacs muestra las terminaciones: pulsando TAB cambiará al búfer de la lista de terminaciones, y entonces podrá moverse a un candidato mediante comandos de movimiento del cursor y seleccionarlo con RETURN (RET). Si el valor de completion-auto-select es second-tab, entonces el primer TAB abrirá el búfer de la lista de compleciones, y el segundo cambiará a él.

Si completion-cycle-threshold no es nulo, los comandos de completado pueden recorrer las alternativas de finalización. Normalmente, si hay más de una alternativa de completado para el texto en el minibúfer, un comando de completado completa hasta la subcadena común más larga. Si cambia el valor de completion-cycle-threshold a t, la orden de completado completará la primera de esas alternativas; cada invocación posterior de la orden de completado la sustituirá por la siguiente alternativa de forma cíclica. Si le da a completion-cycle-threshold un valor numérico n, los comandos de completado cambian a este comportamiento cíclico sólo cuando hay n o menos alternativas.

Cuando se muestran las compleciones, Emacs normalmente abrirá un nuevo búfer para mostrar las compleciones. Por defecto, las opciones se ordenarán horizontalmente, usando tantas columnas como quepan en el ancho de la ventana, pero esto puede cambiarse personalizando la opción de usuario completions-format. Si su valor es vertical, Emacs ordenará las compleciones verticalmente, y si es one-column (una columna), Emacs usará sólo una columna.

La opción de usuario completions-sort controla el orden en que se ordenan las terminaciones en el búfer *Completions*. El valor predeterminado es alphabetical, que ordena por orden alfabético. El valor nil desactiva la clasificación. El valor también puede ser una función, que se llamará con la lista de posibles terminaciones, y debe devolver la lista en el orden deseado.

Cuando completions-max-height es distinto de nil, limita el tamaño de la ventana de compleciones. Se especifica en líneas e incluye el modo, la línea de cabecera y un divisor inferior, si lo hay. Para un control más complejo de las propiedades de visualización de la ventana Completions, puede usar display-buffer-alist (vea Acción de Alistas para Visualización de Búfer en El Manual de Referencia de Emacs Lisp).

La variable completions-header-format es una cadena de especificaciones de formato para controlar la línea informativa que se muestra antes de la lista de candidatos a completar. Si contiene una construcción %s, se sustituye por el número de terminaciones mostradas en el búfer de la lista de terminaciones. Para suprimir la visualización de la línea informativa, personalice esta variable a nil. La cadena que es el valor de esta variable puede tener propiedades de texto para cambiar la apariencia visual de la línea de encabezado; algunas propiedades útiles face o cursor-intangible (ver Propiedades con Significados Especiales en El Manual de Referencia de Emacs Lisp).

Cuando completions-highlight-face nombra una cara, el candidato de compleción actual, el que será seleccionado tecleando RETURN (RET) o pulsando el ratón, será resaltado usando esa cara. El valor por defecto de esta variable es completions-highlight; el valor es nil desactiva este resaltado. Esta característica utiliza la propiedad de texto especial cursor-face.

9.5 Historial del Minibúfer

Todo lo que escriba en el minibúfer se guarda en una lista del historial del minibufer para que pueda volver a usarlo fácilmente más tarde. Esto incluye candidatos a completado (como nombres de archivos, nombres de búfer, nombres de comandos, etc.) y cualquier otro tipo de entrada en el minibúfer. Puede usar los siguientes comandos para obtener rápidamente una respuesta anterior o alternativa en el minibúfer:

Alt-p (M-p)

Se desplaza al elemento anterior del historial del minibúfer, un argumento anterior (previous-history-element, elemento-historial-anterior).

Alt-n (M-n)

Se pasa al siguiente elemento del historial del minibúfer (next-history-element).

(UP)
(DOWN)

Como Alt-n (M-n) y Alt-p (M-p) pero se desplaza a la línea anterior o siguiente de un elemento multilínea antes de ir al elemento anterior del historial (previous-line-or-history-element y next-line-or-history-element)

Alt-r expreg RETURN (M-r expreg RET)

Se mueve a un elemento anterior del historial del minibúfer que coincida con la expresión regular expreg (previous-matching-history-element).

Alt-s expreg RETURN (M-s expreg RET)

Se mueve a un elemento posterior en el historial del minibúfer que coincida con la expresión regular (next-matching-history-element).

Mientras está en el minibúfer, Alt-p (M-p, previous-history-element) se mueve por la lista del historial del minibúfer, un elemento cada vez. Cada Alt-p (M-p) recupera un elemento anterior de la lista del historial en el minibúfer, reemplazando su contenido existente. Si se escribe Alt-n (M-n, next-history-element), la lista del historial del minibúfer se desplaza en sentido inverso, recuperando entradas posteriores en el minibúfer.

Si tipea Alt-n (M-n) en el minibúfer cuando no hay entradas posteriores en la historia del minibúfer (e.g., si no ha tipeado previamente Alt-p (M-p)), Emacs intenta buscar desde una lista de argumentos por defecto: valores que es probable que ingrese. Esto se puede considerar como un movimiento a través del «historial futuro».

El «historial futuro» para nombres de archivo incluye varias alternativas posibles que puede encontrar útiles, como el nombre de archivo o la URL en el punto del búfer actual. Los valores por defecto puestos en el «historial futuro» en este caso están controlados por las funciones mencionadas en el valor de la opción file-name-at-point-functions. Por defecto, su valor invoca al paquete ffap (ver 47.5 Encontrar Archivos y URLs en un Punto), que intenta adivinar el archivo o URL por defecto a partir del texto alrededor del punto. Para desactivar esta suposición, personalice la opción a un valor nulo, entonces el «historial futuro» de nombres de archivos incluirá sólo el fichero, si lo hay, visitado por el búfer actual, y el directorio por defecto.

Las teclas y (flecha ARRIBA y ABAJO) funcionan como Alt-p y Alt-n, pero si el ítem actual del historial es más largo que una sola línea, le permiten moverse a la línea anterior o siguiente del ítem actual del historial antes de ir al ítem anterior o siguiente del historial.

Si edita el texto insertado por los comandos de historial del minibúfer M-p o M-n, esto no cambia su entrada en la lista de historial. Sin embargo, el argumento editado sí va al final de la lista del historial cuando lo envía.

Puede utilizar Alt-s (M-r, previous-matching-history-element, elemento histórico coincidente anterior) para buscar entre los elementos más antiguos de la lista histórica, y (M-s, next-matching-history-element, elemento histórico coincidente siguiente) para buscar entre las entradas más recientes. Cada uno de estos comandos pide una expresión regular como argumento y busca la primera entrada coincidente en el minibúfer. Véase 16.6 Sintaxis de las Expresiones Regulares, para una explicación de las expresiones regulares. Un prefijo numérico n significa que se busca la enésima entrada que coincida. Estos comandos son inusuales, ya que usan el minibúfer para leer el argumento de la expresión regular, aunque se invoquen desde el minibúfer. Una letra mayúscula en la expresión regular hace que la búsqueda distinga entre mayúsculas y minúsculas (véase 16.9. Coincidencia Laxa Durante la Búsqueda).

También puede buscar en el historial mediante una búsqueda incremental. Ver 16.1.7. Buscar en el Minibuffer.

Emacs mantiene listas de historial separadas para diferentes tipos de argumentos. Por ejemplo, hay una lista para nombres de ficheros, usada por todos los comandos que leen nombres de ficheros. Otras listas de historial incluyen nombres de búfer, nombres de comandos (usados por M-x), y argumentos de comandos (usados por comandos como query-replace).

La variable history-length especifica la longitud máxima de una lista de historial del minibúfer; al añadir un nuevo elemento se borra el más antiguo si la lista se alarga demasiado. Si el valor es t, no hay longitud máxima.

La variable history-delete-duplicates especifica si se borran los duplicados del historial. Si no es nula, al añadir un nuevo elemento se eliminan de la lista todos los elementos que sean iguales a él. Por defecto es nulo.

9.6 Repetición de Comandos del Minibúfer

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

Ctrl-x ESCESC (C-x ESC ESC)

Vuelve a ejecutar un comando reciente del minibúfer desde el historial de comandos (repeat-complex-command).

Alt-x list-command-history (M-x list-command-history)

Muestra el historial de comandos completo, con todos los comandos que Ctrl-x ESCESC (C-x ESC ESC) puede repetir, los más recientes primero

C-x ESC ESC vuelve a ejecutar un comando reciente que usó el minibúfer. Sin argumento, repite la última orden. Un argumento numérico especifica qué comando repetir; 1 significa el último, 2 el anterior, y así sucesivamente.

C-x ESC ESC funciona convirtiendo la orden anterior en una expresión Lisp y entrando en un minibúfer inicializado con el texto de esa expresión. Incluso si no conoce Lisp, probablemente será obvio qué comando se muestra para la repetición. Si escribe sólo RETURN, el comando se repetirá sin cambios. También puede cambiar el comando editando la expresión Lisp antes de ejecutarla. El comando ejecutado se añade al principio del historial de comandos a menos que sea idéntico al elemento más reciente.

Una vez dentro del minibúfer de C-x ESC ESC, puede usar los comandos habituales del historial del minibúfer (véase 9.5 Historial del Minibúfer) para moverse por la lista del historial. Después de encontrar el comando anterior deseado, puede editar su expresión como de costumbre y luego ejecutarlo tecleando RETURN.

La búsqueda incremental no usa, estrictamente hablando, el minibúfer. Por lo tanto, aunque se comporta como un comando complejo, normalmente no aparece en la lista del historial de C-x ESC ESC. Puede hacer que los comandos de búsqueda incremental aparezcan en el historial estableciendo isearch-resume-in-command-history a un valor no nulo. Véase 16.1 Búsqueda Incremental.

La lista de comandos anteriores que usan minibúfer se almacena como una lista Lisp en la variable command-history. Cada elemento es una expresión Lisp que describe una orden y sus argumentos. Los programas Lisp pueden volver a ejecutar una orden llamando a eval con el elemento command-history.

9.7 Ingresar Contraseñas

A veces, puede que necesite escribir una contraseña en Emacs. Por ejemplo, cuando le pide al Editor que visite un fichero en otra máquina a través de un protocolo de red como FTP, a menudo necesita proporcionar una contraseña para acceder a la máquina (vea 19.15 Archivos Remotos).

Ingresar una contraseña es similar a usar un minibúfer. Emacs muestra un prompt en el área de eco (como Password:); después de escribir la contraseña requerida, pulse RETURN (RET) para enviarla. Para evitar que otros vean su contraseña, cada carácter que escriba se muestra como un asterisco (*) en lugar de su forma habitual.

La mayoría de las características y comandos asociados con el minibúfer no pueden usarse cuando se introduce una contraseña. No hay historial ni completado, y no puede cambiar de ventana ni efectuar ninguna otra acción con Emacs hasta que haya introducido la contraseña.

Mientras esta escribiendo la contraseña, puede pulsar DEL (DEL) para borrar hacia atrás, eliminando el último carácter tecleado. Ctrl-u (C-u) borra todo lo que haya escrito hasta el momento. Ctrl-g (C-g) sale de la petición de contraseña (ver 51 Salir y Abortar). Ctrl-g (C-y) inserta el kill actual en la contraseña (ver 13 Matar y Mover Texto). Puede teclear RETURN (RET) o ESC (ESC) para enviar la contraseña. Cualquier otra tecla de autoinserción de caracteres inserta el carácter asociado en la contraseña, y cualquier otra entrada es ignorada.

9.8 Preguntas Sí o No

Un comando de Emacs puede requerir que responda a una pregunta de sí o no durante el curso de su ejecución. Hay dos tipos principales de preguntas de este tipo.

Para el primer tipo de pregunta sí o no, el prompt termina con (y or n). La respuesta se da con una sola tecla, y o n, que sale inmediatamente del minibúfer y proporciona la respuesta. Por ejemplo, si teclea (C-x C-w, write-file, escribir-archivo) para guardar un búfer, e introduce el nombre de un archivo existente, Emacs emite un prompt como este:

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

El segundo tipo de consulta yes-or-no (sí-o-no) se emplea normalmente si dar una respuesta errónea puede tener consecuencias graves; por tanto, presenta una pregunta más larga que termina con ((yes or no). Por ejemplo, si invoca Ctrl-x k (C-x k, kill-buffer) en un búfer que visita un fichero con cambios sin guardar, Emacs activa el minibúfer con un prompt como este:

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

Para responder, debe escribir yes o no en el minibúfer, seguido de RETURN (RET).

Con ambos tipos de consulta sí o no, el minibúfer se comporta como se describe en las secciones anteriores; puede recentrar la ventana seleccionada con Ctrl-l (C-l), desplazarse por esa ventana (Ctrl-v (C-v) o AvPag (AvPág) se desplaza hacia delante, Alt-v (M-v) o RePág (RePág) se desplaza hacia atrás), se cambia a otra ventana con Ctrl-x o (C-x o), utilizar los comandos de historial Alt-p (M-p) y Alt-n (M-n), etc. Escriba Ctrl-g (C-g) para salir de la consulta y abandonar el minibúfer y el comando de consulta (consulte 51 Salir y Abortar).


© Derechos de autor 2023, Tano.

Compilado con Sphinx usando un tema proporcionado por Read the Docs.
</html>