14.1. Recherche Incrémentale

Une recherche incrémentale commence à chercher dès que vous avez tapé le premier caractère de la cha^ine à rechercher. Alors que vous tapez la cha^ine recherchée, Emacs vous montre où la cha^ine (comme vous l'avez tapé à ce moment) serait trouvée. Lorsque vous avez tapé assez de caractères pour identifier l'endroit recherché, vous pouvez arrêter. Selon ce que vous désirez faire ensuite, vous pouvez ou non terminer la recherche par RET.

C-s

Recherche incrémentale en avant (isearch-forward).

C-r

Recherche incrémentale en arrière (isearch-backward).

C-s commence une recherche incrémentale. C-s lit des caractères depuis le clavier et positionne le curseur à la première occurence des caractères que vous avez tapé. Si vous tapez C-s puis F, le curseur se déplace juste après le premier F. Tapez un O, et voyez le curseur se déplacer juste après le premier FO. Après un autre O, le curseur est après le premier FOO suivant l'endroit où vous avez commencé la recherche. À chaque étape, le texte du tampon qui correspond à la cha^ine recherchée est illuminée, si le terminal le permet ; à chaque étape, la ch^ine recherchée courante est mise à jour dans la zone de répercussion.

Si vous fa^ites une erreur en tapant la cha^ine à rechercher, vous pouvez annuler des caractères avec DEL. chaque DEL annule le dernier caractère de la cha^ine recherchée. Ceci n'arrive pas avant qu'Emacs soit prêt à lire un nouveau caractère ; il doit d'abord soit trouver, soit échouer dans la recherche du caractère que vous vuolez annuler. Si vous ne voulez pas attendre que cela arrive, utilisez C-g comme décrit plus bas.

Lorsque vous êtes satisfait de la place que vous avez atteint, vous pouvez taper RET, qui stoppe la recherche, laissant le curseur où la recherche l'a mené. Se plus, toute commande n'ayant pas rapport avec la recherche stoppe la recherche, puis est exécutée. Ainsi, taper C-a fait terminer la recherche puis vous déplace en début de ligne. RET est nécessaire seulement si la commande suivante que vous voulez taper est un caractère imprimable, DEL, RET, ou un autre caractère de contrôle qui est utilisé durant la recherche (C-q, C-w, C-r, C-s, C-y, M-y, M-r, or M-s).

Parfois vous recherchez FOO et le trouvez, mais pas celui que vous espériez trouver. Il y avait un second FOO que vous aviez oublié, précédant celui que vous recherchez. Dans ce cas, tapez de nouveau C-s pour aller à la prochaine occurence de la cha^ine recherchée. Vous pouvez répéter cela un nombre quelconque de fois. Si vous en fa^ites trop, vous pouvez annuler des caractères C-s avec DEL.

Après avoir quitté une recherche, vous pouvez de nouveau chercher la même cha^ine en tapant juste C-s C-s : le premier C-s est la touche qui invoque la recherche incrémentale, et le second C-s signifie "cherche de nouveau."

Pour réutiliser des recherches ultérieures, utilisez l'anneau de recherche. Les commandes M-p et M-n vous déplace dans l'anneau pour retrouver une cha^ine de recherche à utiliser. Ces commandes introduisent l'élément de l'anneau de recherche sélectionné dans le mini-tampon, où vous pouvez l'éditer. Tapez C-s ou C-r pour terminer l'édition de la cha^ine et la rechercher.

Si votre cha^ine n'est pas trouvée du tout, la zone de répercussion indique Failing I-Search. Le curseur se trouve après la place où Emacs a trouvé le plus de caractères possibles de la cha^ine recherchée. Ainsi, si vous recherchez FOOT, et qu'il n'y a pas de FOOT, vous pourrez voir le curseur après le FOO de FOOL. À partir de là, vous pouvez faire un certain nombre de choses. Si votre cha^ine a été mal tapée, vous pouvez en supprimer une partie et la corriger. Si la place que vous avez trouvée vous convient, vous pouvez taper RET ou toute autre commande pour "accepter ce que la recherche a offerte." Ou vous pouvez taper C-g, qui retire de la cha^ine recherchée les caractères non trouvés (le T de FOOT), laissant ceux trouvés (le FOO de FOOT). Un second C-g à ce point annule entièrement la recherche, et renvoie le point à l'endroit où il se trouvait en début de recherche.

Une lettre majuscule dans la cha^ine recherchée rend la recherche sensible à la casse. Si vous supprimez le caractère majuscule de la cha^ine de recherche, il cesse d'avoir cet effet. Section 14.6.

Pour rechercher un caractère newline, tapez C-j. Pour rechercher un autre caractère de contrôle, comme Control-S ou carriage return, vous devez le citer en tapant d'abord C-q. Cette utilisation de C-q est analogue à son utilisation pour l'insertion (Section 7.1) : elle permet au caractère suivant d'être traité comme tout autre caractère "ordinaire" est traité dans le même contexte. Vous pouvez aussi spécifier un caractère par son code octal : entrez C-q suivi d'une séquence de chiffres octaux.

Pour rechercher des caractères non ASCII, vous devez utiliser une méthode d'entrée (Section 20.4). Si une méthode d'entrée est activée dans le tampon courant lorsque vous commencez la recherche, vous pouvez aussi l'utiliser lorsque vous entrez la cha^ine à rechercher. Emacs indique cela en incluant la mnémonique de la méthode d'entrée dans son prompt, comme ceci :

I-search [im]:

im est la mnémonique de la méthode d'entrée active. Vous pouvez activer ou désactiver la méthode d'entrée lorsque vous tapez la cha^ine à rechercher avec C-\ (isearch-toggle-input-method). Vous pouvez activer une certaine méthode d'entrée (non par défaut) avec C-^ (isearch-toggle-specified-input-method), qui vous demande le nom de la méthode d'entrée. Notez que la méthode d'entrée que vous activez durant la recherche incrémentale est aussi activée pour le tampon courant.

Si une recherche échoue et que vous demandez de la recommencer en tapant de nouveau C-s, il recommence à partir du début du tampon. Recommencer une recherche inverse échouée avec C-r recommence depuis la fin. Ceci est appelé le bouclage. Wrapped (bouclé) appara^it dans le prompt de recherche une fois que c'est arrivé. Si vous continuez et dépassez le point d'origine de votre recherche, il se change en Overwrapped (reboulcé), qui veut dire que vous revisitez des correspondances que vous avez déjà vues.

Le caractère "quitter" C-g opère de manière spéciale durant la recherche ; ce qu'il fait exactement dépend du status de la recherche. Si la recherche a trouvé ce que vous avez spécifié et attend une entrée, C-g annule la recherche entière. Le curseur revient au point de départ de la recherche. Si C-g est tapé alors que des caractères de la cha^ine de recherche n'ont pas été trouvés--car Emacs recherche encore ces caractères, ou parce qu'il a échoué dans cette recherche--alors les caractères de la cha^ine qui n'ont pas été trouvés sont retirés de la cha^ine de recherche. Une fois ces caractères retirés, la recherche est alors satisfaite et attend une nouvelle entrée, ainsi un nouveau C-g annulera la recherche entière.

Vous pouvez changer pour rechercher en arrière avec C-r. Si une recherche échoue parce qu'elle a été initiée trop en avant dans le tampon, vous devriez faire ça. Des C-r répétés continuent de rechercher d'autres occurences précédentes. Un C-s commence à chercher vers l'avant de nouveau. C-r dans une recherche peut être annulé avec DEL.

Si vous savez initialement que vous voulez chercher en arrière, vous pouvez utiliser C-r plutôt que C-s pour commencer la recherche, car C-r comme touche exécute une commande (isearch-backward) qui recherche en arrière. Une recherche arrière trouve des correspondances qui sont entièrement avant le point de départ, exactement comme la recherche avant trouve des correspondances qui commencent après ce point.

Les caractères C-y et C-w peuvent être utilisés durant la recherche incrémentale pour prendre du texte dans un tampon et le placer dans la cha^ine de recherche. Ceci rend facile de rechercher une autre occurence du texte qui se trouve au point. C-w copie le mot après le point dans la cha^ine de recherche, avançant le point après ce mot. Un autre C-s pour répéter la recherche va alors rechercher une cha^ine contenant ce mot. C-y est similaire à C-w mais copie toute la suite de la ligne dans la cha^ine de recherche. C-y et C-w convertissent toutes deux le texte qu'elles copient en minuscule si la recherche n'est pas sensible à la casse ; c'est ainsi que la recherche reste insensible à la casse.

Le caractère M-y copie le texte du presse-papiers dans la cha^ine de recherche. Elle utilise le même texte que C-y comme commande collerait. Mouse-2 dans la zone de répercussion a le même effet. Section 11.8.

Lorsque vous quittez la recherche incrémentale, elle place la marque à l'endroit où était le point avant la recherche. Ceci est utile pour retourner à cet endroit. En mode de Marque Transitoire, la recherche incrémentale place la marque sans l'activer, et le fait seulement si la marque n'est pas déjà active.

Lorsque vous faites une petite pause durant une recherche incrémentale, toutes les autres correspondances possibles sont mises en surbrillance. Ceci rend plus facile d'anticiper l'endroit où vous vous trouverez en tapant C-s ou C-r pour répéter la recherche. Le court délai avant la mise en surbrillance des autres correspondances aide à indiquer quelle correspondance est celle e, cours. Si vous n'aimez pas cette fonctionnalité, vous pouvez la désactiver en définissant la variable isearch-lazy-highlight à nil.

Vous pouvez contrôler l'aspect de la mise en surbrillance des correspondances en personnalisant les faces isearch (utilisée pour la correspondance en cours) et isearch-lazy-highlight-face (utilisée pour les autres correspondances).

Pour personnaliser les caractères spéciaux que la recherche incrémentale comprend, altérez ses raccourcis dans la table de touches isearch-mode-map. Pour une liste de raccourcis, consultez la documentation de isearch-mode avec C-h f isearch-mode RET.

14.1.1. Recherche Incrémentale sur Terminaux Lents

La recherche incrémentale sur un terminal lent utilise un style modifié d'affichage conçu pour prendre moins de temps. Plutôt que de réafficher le tampon à chaque endroit où la recherche s'arrête, elle crée une nouvelle fenêtre d'une seule ligne et l'utilise pour afficher la ligne que la recherche a trouvée. Cette fenêtre d'une ligne entre en jeu aussitôt que le point sort du texte couramment affiché à l'écran.

Lorsque vous terminez la recherche, la fenêtre d'une ligne est enlevée. Emacs réaffiche alors la fenêtre dans laquelle la recherche a été faite, pour montrer la nouvelle position du point.

Le style d'affichage sur terminal lent est utilisé lorsque la vitesse de transmission du terminal est inférieur ou égal à la valeur de search-slow-speed, initialement 1200.

Le nombre de lignes à utiliser pour l'affichage de la recherche sur un terminal lent est contrôlé par la variable search-slow-window-lines. Sa valeur normale est 1.