Trop long / Pas lu
Problématique de base
Suite à changement d'environnement de boulot (poste de dev linux -> windows) j'ai besoin de retrouver certaines habitudes et notamment
Oui je fais partie de ces gens qui ont besoin d'un terminal à portée d'une touche de clavier. Sauf qu’apparemment sous Windows ce fonctionnement n'existe pas. Depuis j'ai appris que c'était plus ou moins possible, voir la section alternative en bas de l'article.
C'est quoi AutoHotkey ?
D'après leur site web c'est The ultimate automation scripting language for Windows
. Ça a l'air plutôt cool présenté comme ça ! Et effectivement ahk permet aussi bien de simuler un clic souris que d'utiliser des dll windows. Sur le papier ça devrait permettre de résoudre le problème.
Le script
Cibler la touche de déclenchement
En temps normal c'est assez facile avec akh, il suffit d'écrire Matouche::
pour déclencher une action
j::
MsgBox, "vous avez appuyé sur 'j'"
return
Sauf que moi j'ai envie d'utiliser ma touche ². Naïvement j'ai essayé
²::
MsgBox, "vous avez appuyé sur '²'"
return
Il faut donc trouver un moyen d'identifier le code correspondant à la touche; la doc ahk sur le sujet est assez claire; il suffit d'ajouter #InstallKeybdHook
dans mon script et de regarder les logs.
Le code de la touche ² est donc SC029
; essayons ça :
SC029::
MsgBox, "vous avez appuyé sur '²'"
return
et ça marche! (il faut utiliser un encodage utf8 avec BOM pour avoir les caractères spéciaux affichés correctement)
La base : basculer sur une fenêtre existante
Maintenant il faut identifier la fenêtre cible et la rendre active. Pour ça le mode 'Window Spy' est très pratique, il permet d'afficher le titre, la classe, l'executable et le pid de la fenêtre active.
L'algo qu'on cherche à implémenter en pseudo code donnerait quelque chose comme
Si fenêtre active = terminal
minimiser
réactiver ancienne fenêtre
sinon
sauvegarder ancienne fenêtre
activer la fenêtre terminal
Pour ça on va se servir des fonctions ahk suivantes:
previous_active := ""
SC029::
if WinActive("ahk_exe WindowsTerminal.exe") {
WinMinimize, ahk_exe WindowsTerminal.exe
if (previous_active) {
WinActivate, ahk_id %previous_active%
}
} else {
previous_active := WinExist("A")
WinActivate, ahk_exe WindowsTerminal.exe
}
return
Et si mon terminal est fermé ?
Là encore c'est assez simple, run, C:\PATH_TO_MY_APP\app.exe
devrait faire le job. Mais comme mon terminal vient du windows store, je n'ai pas de lien direct pour l’exécutable. J'ai trouvé une astuce qui consiste à créer un raccourci pour l'appli en question et référencer le raccourci dans le script.
-
Win + R
shell:appsFolder
- clic droit créer un raccourci
-
run, path\to\raccourci
previous_active := ""
SC029::
if WinExist("ahk_exe WindowsTerminal.exe") {
if WinActive("ahk_exe WindowsTerminal.exe") {
WinMinimize, ahk_exe WindowsTerminal.exe
if (previous_active) {
WinActivate, ahk_id %previous_active%
}
} else {
previous_active := WinExist("A")
WinActivate, ahk_exe WindowsTerminal.exe
}
} else{
previous_active := WinExist("A")
run, C:\PATH_TO\terminal_shortcut
}
return
Pratique, mais si j'ai besoin de taper un ² ?
Ajoutons un deuxième raccourci : Maj + ²
+SC029::
Send ²
return
La liste des modificateurs est ici
Bonus
- une icône plus jolie :
I_Icon = C:\PATH_TO\icon.ico
IfExist, %I_Icon%
Menu, Tray, Icon, %I_Icon%
Alernatives
- En épinglant une appli à la barre des taches il est possible de reproduire l'ouverture/basculement. Il suffit d'appuyer sur Win + 1..9 correspondant au "numéro" de l'app dans la barre des taches
Top comments (0)