Accueil | Téléchargement | Documentation | Historique | Support | Forum Substitutions de chaînes et Remplacement-Auto |
Note: Les substitutions de chaînes nécessitent Windows NT/2000/XP ou ultérieur.
Bien que les substitutions de chaînes soient principalement utilisées pour développer les abréviations au fur et à mesure que vous les tapez (remplacement-auto), elles peuvent aussi être utilisées pour charger n'importe quelle action scriptée. A cet égard, elles sont semblables aux combinaisons de touches excepté qu'elles sont typiquement composées de plus d'un caractère (c'est à dire, une chaîne).
Pour définir une substitution de chaîne, placez l'abréviation à déclencher entre des paires de double-points comme dans cet exemple:
::cad::c'est à dire
Dans l'exemple précédent, l'abréviation cad sera automatiquement remplacée par "c'est à dire" où que vous la tapiez -- mais vous devez terminer par un caractère de fin tel qu'espace, point ou entrée (la nécessité d'un caractère de fin peut être évitée au moyen de l'option astérisque).
L'exemple précédent "c'est à dire" est connu comme une substitution de chaîne d'auto-remplacement car le texte saisi est automatiquement effacé et remplacé par la chaîne spécifiée après la seconde paire de double-points. En revanche, une combinaison de chaîne pourrait aussi être définie pour accomplir n'importe quelle action personalisée comme dans les exemples suivants. Notez que les commandes doivent apparaître en dessous de la combinaison de chaîne:
::cad::
MsgBox Vous avez tapé "cad".
return
:*:]d:: ; Cette substitution de chaîne remplace "]d" par la date et l'heure courante.
FormatTime, CurrentDateTime,, M/d/yyyy h:mm tt ; Ca ressembera à 9/1/2005 3:53 PM
SetKeyDelay 0 ; Ceci paramètre les codes de touches précédents afin qu'ils soient envoyés plus rapidement qu'ils ne le sont par défaut.
Send %CurrentDateTime%
return
Même si les exemples ci-dessus ne sont pas des substitutions de chaîne de remplacement-auto, l'abréviation que vous tapez est effacée par défaut. Ceci est fait via le retour-arrière (backspacing) automatique, qui peut être désactivé via l'option b0.
A moins que l'option astérisque ne soit effective, vous devez saisir un caractère de fin après une abréviation de combinaison de chaîne pour la déclencher. Les caractères de fin consistent initialement en ce qui suit: -()[]{}':;"/\,.?!`n `t (notez que `n est Entrée, `t est Tab et qu'il y a un espace entre `n et `t). Ce jeu de caractères peut être modifié en éditant l'exemple suivant, qui fixe les nouveaux caractères de terminaison pour toutes les substitutions de chaînes, pas seulement celles qui se trouvent physiquement au-dessous de lui:
#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t
Le comportement par défaut d'une substitution de chaîne peut-être modifié de deux façons possibles:
Note: Lorsque plus d'une option de la liste ci-dessous est
spécifiée, des espaces pourraient être
optionellement inclus entre elles.
*(astérisque):
Un
caractère de fin (ex.:g. espace, point ou entée)
n'est
pas requis pour déclencher la substition de
chaîne.
Utilisez *0
pour suspendre cette option. Dans l'exemple ci-dessous, le remplacement
à lieu au moment où le caractère @ est
tapé:
:*:js@::jsmith@domaine.com
? (point d'interrogation): La substitution de chaîne sera déclenchée même lorsqu'elle se trouve à l'intérieur d'un autre mot; ; c'est à dire, lorsque le caractère tapé immédiatement avant lui est alphanumérique. Par exemple, si :?:al::airline est une substitution de chaîne, taper "practical " produirait "practicairline ". Utilisez ?0 pour suspendre cette option.
B0 (B suivi par un zéro): Le retout arrière automatique n'est pas effectué pour effacer l'abréviation que vous tapez. Utilisez un Bpour réactiver le retour arrière après qu'il ait été préalablement désactivé.
C: Sensible à la
casse: Quand vous tapez une
abréviation, elle doit correspondre exactement à
la casse
définie dans le script.
Utilisez C0
pour suspendre la sensibilité à la casse: Si vous
avez
besoin de définir deux substitutions de chaînes
identiques
excepté que la casse varie, utilisez un espace
supplémentaire entre les deux premiers doubles-points pour
les
distinguer l'une de l'autre. Ceci est nécessaire car les
substitutions de chaînes sont des étiquettes, et
chaque
étiquette doit être unique. Dans l'exemple
ci-dessous, la
première substitution de chaîne se distingue de la
seconde
par un espace supplémentaire inclus entre les deux premiers
doubles-points:
:p :pdg::president directeur général
:p:PDG::President Directeur Général
C1: Ne se conforme pas
à la casse
tapée. Utilisez cette option pour rendre les substitutions
de
chaînes de remplacement-auto insensibles à la
casse et les
empêcher de se conformer à la casse des
caractère
que vous êtes en train de taper. Utilisez C0
pour rendre les substitutions de chaînes à nouveau
conformes à la casse. Les substitutions de chaînes
conformes à la casse remplaceront le texte en majuscules si
vous
tapez l'abréviation en majuscules. Si vous tapez seulement
la
première lettre en majuscules, la première lettre
du
remplacement sera aussi en majuscules (si c'est une lettre).
Si vous tapez la casse de n'importe quelle autre manière, le
remplacement est envoyé exactement comme défini.
Kn: Décalage-de-touche: Un décalage de durée 0 est normalement fait entre deux codes de touches pour toutes les substitutions de chaînes qui utilisent le retour-arrière-auto et le remplacement-auto. Zéro est recommandé pour la plupart des fonctions puisqu'il est à la fois rapide et coopère bien avec les autres processus (en raison qu'il effectue intérieurement un Sleep 0). Si un décalage différent est désiré, spécifiez pour n le nouveau décalage.Utilisez -1 pour n'avoir aucun décalage du tout, ce qui est utile pour rendre les remplacements-auto plus rapides si votre CPU est fréquemment sous une charge lourde.
O: Omet le caractère de fin des substitutions de chaînes de remplacement-auto quand le remplacement est effectué. C'est utile lorsque que vous voulez qu'une substitution de chaîne ne soit pas ambigue en exigeant toujours un caractère de fin, mais ne voulez pas vraiment que le caractère de fin soit affiché à l'écran. Par exemple, si :o:ar::aristocrate est une substitution de chaîne, taper "ar" suivi par un espace produira "aristocrate" sans trace d'espace, ce qui vous permet de mettre le mot au pluriel sans avoir à faire de retour-arrière. Utilisez O0 (la lettre O suivie par un zéro) pour suspendre cette option.
Pn: La priorité de la substitution de chaîne (ex.: P1). Cette option n'a aucun effet sur les substitutions de chaînes de remplacement-auto.
R: Envoi le remplacement de texte brut; c'est à dire, exactement comme il apparaît plutôt que de translater {Enter} vers un code de touche ENTER, ^c vers Control-C, etc. Cette option est activée automatiquement pour les substitutions de chaînes qui ont une section de suite. Utilisez R0 pour suspendre cette option.
Z[v1.0.30+]: Réinitialise le système de reconnaissance de substitution de chaîne après chaque déclenchement de cette substitution de chaîne. En d'autres mots, le script commencera à attendre une substitution de chaîne entièrement nouvelle, éliminant de sa considération quoi que vous ayez tapé précédemment. Ceci peut empêcher les déclenchements de substitutions de chaînes non voulus. Par exemple, puisque l'option Z manque à la substitution de chaîne suivante, taper 111 produira deux déclenchement plutôt qu'un seul:
:b0*?:11::
Send xx
return
En ajoutant la lettre Z devant b0, vous auriez à taper 1111 au lieu de 111 pour déclencher la substitution de chaîne deux fois. Utilizez Z0 pour suspendre cette option.
Dans la version 1.0.32+, les substitutions de chaînes qui génèrent une grande quantité de texte de remplacement peuvent être rendues plus lisibles et maintenables en utilisant une section de suite. Par exemple:
::texte1::
(
N'importe quel texte entre le début et la fin des parenthèses est traité litéralement, incluant les virgules et les signes pourcents.
Par défaut, le retour chariot matériel (Entrée) entre la ligne précédente et celle-ci est aussi conservé.
De plus, l'indentation (tab) à gauche de cette ligne est conservé par défaut.
Voir la page section de suite pour savoir comment changer ces paramètres par défaut.
)
La présence d'une section de suite fait aussi que la substitution de chaîne passe en mode brut. La seule manière pour remplacer cette valeur par défaut spéciale est de spécifier r0 dans les options de chaque substitution de chaîne qui a une section de suite.
Les références aux variables telles que %MyVar% ne sont pas supportées actuellement dans le remplacement de texte. Pour contourner cela, ne faites pas de telles substitutions de chaînes d'auto-remplacement. A la place, utilisez la commande Send au-dessous de l'abréviation, suivi par une ligne contenant uniquement le mot Return. En utilisant Send, les codes de touches peuvent être paramétrés plus facilement en spécifiant la ligne SetKeyDelay 0 avant la ligne Send.
La variable intégrée A_EndCharcontient le caractère de fin que vous avez utilisé pour déclencher la substitution de chaîne de non-remplacement-auto la plus récente. Si aucun caractère de fin n'était requis (du à l'option *), elle sera vide. Cette variable est utile lorsque l'on fait des substitutions de chaînes qui utilisent la commande Send ou desquelles le comportement devrait varier en fonction du caractère de fin que vous avez tapé. Pour envoyer le caractère de fin lui-même, utilisez "SendRaw %A_EndChar%" (SendRaw est utilisé car les caractères tels que !{} ne seraient pas envoyés correctement par la commande Send normale).
Bien que les virgules, signes pourcents et double-point-seul dans les définitions de substitutions de chaînes n'ont pas besoin d'être "échappés", les accents et ces doubles-points ayant un espace ou une tabulation à leur gauche le nécessitent. Voir les séquences d'échappement pour une liste complète.
Bien que la syntaxe de la commande Sendsoit supportée dans le remplacement-auto de texte (à moins que l'option brut ne soit utilisée), les abréviations de substitutions de chaînes elles-mêmes n'utilisent pas celà. A la place, spécifiez `n pour la touche ENTREE et `t (ou une tabulation littérale) pour TAB (voir les séquences d'échappement pour une liste complète). Par exemple, la substitution de chaîne :*:ab`t:: serait déclenchée si vous tapiez "ab" suivi par une tabulation.
Les espaces et tabulations sont traités
littéralement
dans les définitions de substitutions de chaînes.
Par
exemple, ce qui suit produirait deux résultats
différents:
::cad::c'est à dire
::cad:: c'est à dire
Chaque abréviation de substitution de chaîne ne peut pas excéder les 30 caractères de long. Le programme vous avertira si la taille est dépassée. En revanche, la taille du texte de remplacement de la substitution de chaîne est seulement limité par la taille de lignes maximum de AutoH, qui est 16,383 caractères. Cette limitation peut être contournée en utilisant Send %MaVariable% dans le corps de la substitution de chaîne.
L'ordre dans lequel les substitutions de chaînes sont définies détermines leur priorité en se respectant les unes et les autres. En d'autres mots, si plus d'une substitution de chaîne correspond à quelque chose que vous tapez, seule la première prendra effet.
Chaque retour-arrière que vous faîtes est pris en compte dans le but de détecter des substitutions de chaînes. Cependant, l'utilisation des flèches de direction, Haut, Bas, Home et Fin pour naviguer dans un éditeur provoquera la réinitialisation du processus de reconnaissance de substitution de chaîne. En d'autres mots, il débutera l'attente d'une substitution de chaîne entièrement nouvelle.
Une substitution de chaîne peut être tapée même lorsque la fenêtre active ignore vos frappes. En d'autres mots, la substitution de chaîne se lancera toujours même si l'abréviation qui la déclenche n'est jamais visible. En plus, la touche retour-arrière (backspace) annulera la frappe la plus récente même si vous ne pouvez pas voir cet effet.
Il est possible d'utiliser Gosub ou Goto sur une étiquette de substitution de chaîne en incluant sa première paire de doubles-points (incluant tout symboles d'option) devant sont nom. Par exemple: Gosub ::xyz. Cependant, sauter vers une substitution de chaîne d'une seule ligne ne fera rien d'autre que d'exécuter un return.
Bien que les substitutions de chaînes ne soient pas sous surveillance et ne se déclencheront pas au cours d'une invisible commande Input, des "Inputs" visibles sont capables de les déclencher.
Les substitutions de chaînes ne peuvent jamais être déclenchées par des frappes produitent par un quelconque script Autohotkey. Ceci évite la possibilité d'une boucle infinie où les substitutions de chaînes se déclenchent les unes les autres.
La commande Input est plus fléxile que les substitutions de chaînes pour certains buts. Par exemple, elle permet que vos frappes soient invisibles dans la fenêtre active (tel qu'un jeu). Elle supporte aussi les touches de fin qui ne sont pas des caractères telles que Echap.
Le hook clavier est utilisé automatiquement par n'importe quel script qui contient des substitutions de chaînes.
Les substitutions de chaînes se comportent de façon identiques aux combinaisons de touches dans les cas suivants:
Andreas Borutta a suggéré le script suivant, qui pourrait être utile si vous être un grand utilisateur des substitution de chaînes. En pressant Win+H (ou une autre combinaison de touches de votre choix), le texte actuellement sélectionné peut être substantivé en une substitution de chaîne. Par exemple, si vous avez sélectionné "c'est à dire" dans un processeur de mots, presser Win+H vous demandera son abréviation (ex.: cad) et puis ajoutera la nouvelle substitution de chaîne au script. Il rechargera alors le script pour activer la substitution de chaîne.
#h:: ; Combinaison de touches Win+H
; Obtient le texte actuellement sélectionné. Le presse-papier est utilisé au lieu de
; "ControlGet Selected" parce qu'il fonctionne dans une grande variété d'éditeurs
; (à savoir des proccesseurs de mots). Sauvegarde le contenu actuel du presse papier pour
; le restaurer plus tard. Bien que ceci ne traite que le texte régulier, c'est mieux que rien:Autohotkey
AutoTrim Off ; Retient chaque espace vide dans le presse-paper.
ClipboardOld = %ClipboardAll%
Clipboard = ; Doit être vide au départ pour que la détection fonctionne.
Send ^c
ClipWait 1
if ErrorLevel ; ClipWait: temps dépassé.
return
; Remplace CRLF et/ou LF par `n pour utilisation dans une substitution de chaîne "envoi-brut":
; Il est fait de même pour n'importe quels autres caractères The same is done for any other characters that might otherwise
; ce qui pourraît être un problème en mode brut:
StringReplace, Hotstring, Clipboard, ``, ````, All ; Fait ce remplacement en premier pour éviter d'interférer avec les autres ci-dessous.
StringReplace, Hotstring, Hotstring, `r`n, ``r, All ; Utiliser `r fonctionne mieux que `n dans MS Word, etc.
StringReplace, Hotstring, Hotstring, `n, ``r, All
StringReplace, Hotstring, Hotstring, %A_Tab%, ``t, All
StringReplace, Hotstring, Hotstring, `;, ```;, All
Clipboard = %ClipboardOld% ; Restaure le contenu précédent du presse-papier.
; Ceci déplacera point d'insertion du champ de saisie vers une position plus conviviale:
SetTimer, MoveCaret, 10
; Champ de saisie, contenant la substitution de chaîne de base:
InputBox, Hotstring, New Hotstring, Tapez votre abréviation au point d'insertion indiqué. Vous pouvez aussi modifier le texte de remplacement si vous le désirez.`n`nExemple d'entrée: :R:cad`::c'est à dire,,,,,,,, :R:`::%Hotstring%
if ErrorLevel <> 0 ; L'utilisateur à appuyé sur Cancel (Annuler).
return
IfInString, Hotstring, :R`:::
{
MsgBox Vous n'avez pas fourni une abréviation. La substitutions de chaînes n'a pas été ajoutée.
return
}
; Autrement, ajoute la substitution de chaîne et recharge le script:
FileAppend, `n%Hotstring%, %A_ScriptFullPath% ; Place un `n au début au cas où il n'y aurait pas de ligne vide à la fin du fichier.
Reload
Sleep 200 ; Si c'est réussi, le rechargement fermera cette instance durant le Sleep, ainsi la ligne ci-dessous ne sera jamais atteinte.
MsgBox, 4,, La substitution de chaîne qui vient d'être ajoutée semble être mal formatée. Voudriez-vous ouvrir le script pour le modifier? Notez que la mauvaise substitution de chaîne se trouve à la fin du script.
IfMsgBox, Yes, Edit
return
MoveCaret:
IfWinNotActive, New Hotstring
return
; Sinon, déplace le point d'insertion du champ de saisie à l'endroit où l'utilisateur tapera l'abréviation.
Send {Home}{Right 3}
SetTimer, MoveCaret, Off
return