8.3. Complétion

Pour certains types d'arguments, vous pouvez utiliser la complétion pour entrer la valeur de l'argument. Complétion veut dire que vous tapez une partie de l'argument, puis Emacs remplit la suite et l'affiche, ou en remplit autant qu'il peut le déterminer à partir de la partie que vous avez tapée.

Lorsque la complétion est disponible, certaines touches (TAB, RET et SPC) sont redéfinies pour compléter le texte présent dans le mini-tampon en une chaîne plus longue qu'il représente, en le comparant à un ensemble d'alternatives de complétion fournies par la commande lisant l'argument. ? est définie pour afficher une liste de complétions possibles pour ce que vous avez inséré.

Par exemple, lorsque M-x utilise le mini-tampon pour lire un nom de commande, il fournit une liste de tous les noms de commandes d'Emacs complets. Les touches de complétion comparent le texte du mini-tampon avec tous les noms de commandes, trouvent tous les caractères additionnels déduits de ceux déjà présents dans le mini-tampon, et rajoutent ces caractères à ceux que vous avez donnés. C'est pourquoi il est possible de taper M-x ins SPC b RET plutôt que M-x insert-buffer RET (par exemple).

La casse est normalement significative pour la complétion, car elle est significative dans la plupart des noms que vous pouvez compléter (noms de tampons, noms de fichiers et noms de commandes). Ainsi, tot ne se complète pas en Toto. La complétion ignore les distinctions de casse pour certains arguments dans lesquels la casse n'importe pas.

8.3.1. Exemple de complétion

Un exemple concret pourra aider ici. Si vous tapez M-x au TAB, TAB cherche des alternatives (dans ce cas, des noms de commandes) commençant par au. Il y en a plusieurs, dont auto-fill-mode et auto-save-mode -- mais elles sont toutes identiques jusqu'à auto-, donc le au dans le mini-tampon se change en auto-.

Si vous tapez de nouveau TAB immédiatement, il y a différentes possibilités pour le prochain caractère (il pourrait être choisi parmi cfilrs) donc aucun caractère n'est ajouté ; au lieu de ça, TAB affiche une liste de toutes les complétions possibles dans une autre fenêtre.

Si vous tapez f TAB, ce TAB voit auto-f. Le seul nom de commande commençant ainsi est auto-fill-mode, la complétion remplit donc le mini-tampon avec ça. Vous avez maintenant auto-fill-mode dans le mini-tampon, après avoir juste tapé au TAB f TAB. Notez que TAB a cet effet car elle est reliée, dans le mini-tampon, à la commande minibuffer-complete lorsque la complétion est disponible.

8.3.2. Commandes de complétion

Voici une liste des commandes de complétion définies dans le mini-tampon lorsque la complétion est disponible :

TAB

Complète le texte dans le mini-tampon autant que possible (minibuffer-complete).

SPC

Complète le texte du mini-tampon, mais sans aller plus loin qu'un mot (minibuffer-complete-word).

RET

Envoie le texte du mini-tampon comme argument, en complétant avant si possible comme décrit ci-dessus (minibuffer-complete-and-exit).

?

Affiche une liste de toutes les complétions possibles du texte dans le mini-tampon (minibuffer-list-completions).

SPC complète comme TAB, mais ne va jamais plus loin que le prochain tiret ou espace. Si vous avez auto-f dans le mini-tampon et tapez SPC, la complétion trouvée est auto-fill-mode, mais la complétion s'arrête après fill-. Ce qui donne auto-fill-. Un autre SPC à ce moment complète jusqu'à auto-fill-mode. SPC dans le mini-tampon lorsque la complétion est disponible exécute la commande minibuffer-complete-word.

Voici quelques commandes que vous pouvez utiliser pour choisir une complétion dans une fenêtre affichant une liste de complétions :

Mouse-2

Cliquer le bouton 2 de la souris sur une complétion parmi une liste de complétions possibles choisit cette complétion (mouse-choose-completion). Vous utilisez normalement cette commande lorsque le point est dans le mini-tampon ; mais vous devez cliquer sur la liste des complétions, pas dans le mini-tampon lui-même.

PRIOR, M-v

Taper PRIOR, PAGE-UP ou M-v depuis le mini-tampon sélectionne la fenêtre montrant le tampon de la liste des complétions (switch-to-completions). C'est un préalable à l'utilisation des commandes suivantes. (Sélectionner cette fenêtre de la manière usuelle a le même effet, mais cette manière est plus commode.)

RET

Taper RET depuis le tampon de la liste des complétions choisit la complétion où se trouve le point ou juste après (choose-completion). Pour utiliser cette commande, vous devez d'abord vous déplacer vers la fenêtre affichant la liste des complétions.

RIGHT

Taper la touche de curseur droite RIGHT depuis le tampon de la liste des complétions déplace le point sur la complétion suivante (next-completion).

LEFT

Taper la touche de curseur gauche LEFT depuis le tampon de la liste des complétions déplace le point vers le début du tampon, sur la complétion précédente (previous-completion).

8.3.3. Complétion stricte

RET peut compléter le contenu du mini-tampon de trois manières différentes, selon l'usage de l'argument.

Les commandes de complétion affichent une liste de toutes les complétions possibles dans une fenêtre lorsqu'il existe plus d'une alternative pour le prochain caractère. Sinon, taper ? demande explicitement une telle liste. Si la liste des complétions est longue, vous pouvez la faire défiler avec C-M-v (Section 18.3).

8.3.4. Options de complétion

Lorsque la complétion est faite sur des noms de fichiers, certains noms de fichiers sont normalement ignorés. La variable completion-ignored-extensions contient une liste de chaînes ; un fichier dont le nom finit par une de ces chaînes est ignoré comme complétion possible. La valeur standard de cette variable a plusieurs éléments, dont ".o", ".elc", ".dvi" et "~". L'effet est que, par exemple, toto peut se compléter en toto.c même si toto.o existe aussi. Cependant, si toutes les complétions possibles finissent par des chaînes "ignorées", elles ne sont pas ignorées. Les extensions ignorées ne s'appliquent pas aux listes de complétions -- celles-ci mentionnent toujours toutes les complétions possibles.

Normalement, une commande de complétion qui trouve que le prochain caractère est indéterminé affiche automatiquement une liste de toutes les complétions possibles. Si la variable completion-auto-help est mise à nil, ce comportement est désaxctivé, et vous devez taper ? pour afficher les complétions possibles.

Le mode Complétion Partielle implémente un type de complétion plus puissant qui peut compléter plusieurs mots en parallèle. Par exemple, il peut compléter l'abréviation du nom de commande p-b en print-buffer, car aucune autre commande ne commence avec deux mots dont les initiales sont p et b.

La complétion partielle de répertoires dans les noms de fichiers utilise * pour indiquer les places pour la complétion ; ainsi, /u*/b*/f* pourrait se compléter en /usr/bin/foo.

Pour activer ce mode, utilisez la commande M-x partial-completion-mode, ou personnalisez l'option partial-completion-mode. Ceci relie les commandes de complétion partielle à TAB, SPC, RET, et ?. Les commandes de complétion usuelle sont disponibles sur M-TAB, M-SPC, M-RET et M-?.

Une autre fonction du mode Complétion Partielle est d'étendre find-file de telle sorte que <inclus> désigne le fichier appelé inclus dans un répertoire quelconque du chemin PC-include-file-path. Si vous réglez PC-disable-includes sur autre chose que nil, cette fonction est désactivée.

Le mode Icomplete présente un affichage constamment mis à jour qui vous indique quelles complétions sont disponibles pour le texte que vous avez entré jusque-là. Utilisez M-x icomplete-mode pour lancer ou arrêter ce mode mineur.