5 points par GN⁺ 2023-08-23 | 1 commentaires | Partager sur WhatsApp
  • AutoHotKey est un outil d’automatisation Windows puissant mais intimidant pour les débutants, donc l’auteur publie sa collection de scripts personnels comme support d’apprentissage
  • Le contenu se compose de 14 fichiers au total, principalement centrés sur des exemples d’automatisation immédiatement utilisables comme l’ouverture de dossiers, l’insertion de texte ou l’extension de raccourcis propres à certains programmes
  • On y trouve aussi bien la saisie rapide de la date du jour, d’un tiret cadratin et de ¯\_(ツ)_/¯ qu’un système de raccourcis modal pour utilisateurs de vim et une simple démo d’interface graphique
  • Un script permettant de convertir des horodatages en UTC et heure locale est également inclus, montrant une automatisation de flux de travail pratique qui va au-delà des simples raccourcis
  • Chaque fichier contient des commentaires expliquant ce que fait le code et, pour certains, pourquoi il a été implémenté ainsi, ce qui en fait une codebase pédagogique agréable à lire

Une collection d’exemples AutoHotKey proches d’un usage réel

Une lecture comme codebase pédagogique

  • Ce dépôt est un exemple de codebase pédagogique conçue pour permettre aux gens d’apprendre en lisant le code
  • Chaque fichier contient de nombreux commentaires sur ce que fait le code et, pour certaines implémentations, sur les raisons du choix technique
  • Une explication séparée sur les codebases pédagogiques se poursuit dans cet article de newsletter
  • Les parties qui demanderaient davantage d’explications peuvent être signalées via une issue GitHub

1 commentaires

 
GN⁺ 2023-08-23
Avis de Hacker News
  • Pour la première fois, j’ai l’impression de pouvoir apporter quelque chose d’utile à une discussion liée au code. En tant que personne qui écrit, je me suis fait un script AutoHotkey qui ouvre rapidement un notepad.exe vide à tout moment : la touche ~ l’ouvre, une nouvelle pression le ferme, et s’il contient du texte, une boîte de dialogue d’enregistrement apparaît
    C’est tout ce que fait mon AHK

    • C’est amusant de constater que cette même touche est aussi couramment utilisée pour le terminal toggle. De la même façon que les programmeurs « vivent » dans leur terminal, je me demande si les graphistes numériques font apparaître de manière similaire un carnet de croquis ou un logiciel de dessin
      Quand on veut passer rapidement de la fenêtre précédente à l’actuelle sans fermer ni réduire quoi que ce soit, le raccourci Windows natif Alt + Escape est utile. Contrairement à Alt+Tab, il n’affiche pas l’aperçu des fenêtres et bascule directement vers la dernière fenêtre qui avait le focus
      Dans AutoHotkey v1, on peut se faire un boilerplate de switcher/launcher qui cherche un fragment de titre de fenêtre pour l’activer, revient en arrière avec send, !{escape} si elle est déjà active, et la lance si elle n’existe pas. Si l’on ne veut pas encombrer la barre des tâches, on peut aussi utiliser WinHide/WinShow, mais cela ne convient pas toujours à certaines fenêtres ; pour la détection de fenêtres, ahk_exe ou ahk_class sont parfois plus adaptés
    • Notepad++ serait peut-être mieux grâce à l’enregistrement automatique. Je trouve que la sauvegarde automatique, même des documents non enregistrés, est l’une de ses meilleures fonctionnalités
    • En portant le script ci-dessus vers AutoHotkey 2, on peut l’écrire plus simplement, du genre « Tilde opens Notepad ». L’idée est de vérifier WinActive("Untitled - Notepad") et WinExist("*Untitled - Notepad") pour fermer ou activer la fenêtre, et sinon d’exécuter Run "Notepad"
    • C’est à peine plus rapide que d’appuyer sur la touche Windows, taper « Notepad », puis Entrée. En revanche, si on le fait ouvrir un unique document notes.txt, on pourrait rappeler ses notes, y ajouter du texte, puis enregistrer/fermer avec un seul raccourci, ce qui serait plus sympa
    • C’est une bonne approche. Avec les fonctions WinActive() ou WinExist(), on peut combiner plusieurs conditions de titre avec or, et au besoin ajouter aussi une condition ahk_class, comme dans "Untitled - Notepad ahk_class Notepad"
  • AutoHotkey est génial, mais j’aimerais que le langage soit un peu plus normal. J’ai galéré en essayant de faire une version stable d’Aero Snap basée sur le nombre d’or ; gérer plusieurs moniteurs et tailles ne devrait pas être aussi difficile, mais entre la syntaxe bizarre de Loop et les échecs silencieux dus à de simples erreurs, ça m’a coupé l’envie et j’ai abandonné
    J’ai aussi trouvé le module ahk pour Python, mais combiné au module keyboard, il ne fonctionnait pas aussi bien qu’AutoHotkey comme écouteur de raccourcis
    https://github.com/idbrii/daveconfig/blob/main/win/autohotke...
    https://pypi.org/project/ahk/

    • C’est précisément pour cela qu’il y a AutoHotkey v2. C’est un peu le moment Python 3 d’AHK : disponible depuis plusieurs années, avec une version stable sortie il y a environ un an, mais son adoption ne semble pas encore très large
    • C’est pour ça que je n’ai pas vraiment réussi à l’utiliser beaucoup, à part pour transformer CapsLock en Control. Peut-être qu’il est temps de créer un DSL Lisp qui se compile en AHK
    • Oui, c’est le plus gros problème d’AHK, et v2 améliore beaucoup cet aspect. Je rêve d’un écouteur de raccourcis générique utilisable depuis n’importe quel langage, avec une sorte de magie de plugin wasm
  • Pour mon mariage, j’ai créé une cabine photo avec AutoHotKey. J’ai utilisé un petit logiciel qui contrôlait le Nikon de ma fiancée en USB, ainsi qu’IrfanView sur l’ordinateur portable ; IrfanView était configuré pour surveiller un dossier et toujours afficher la photo la plus récente
    Avec AutoHotKey, j’ai créé une petite interface graphique avec des boutons Preview, Autofocus et « SNAP ». Quand on appuyait sur SNAP, un grand compte à rebours se lançait, la photo était prise, le logiciel de l’appareil photo était réduit, puis IrfanView s’affichait. Quelques secondes plus tard, on revenait à l’interface avec les boutons. Les invités ont adoré, et nous avons économisé plusieurs centaines d’euros de location de cabine photo tout en obtenant de bonnes photos

  • Ce script AutoHotKey a vraiment changé la donne pour moi. Il mappe Ctrl + Shift + V au collage sans mise en forme : il convertit le presse-papiers en texte, colle, attend un court instant, puis restaure le presse-papiers d’origine

    • À noter que c’est aussi possible sans AutoHotKey avec Powertoys ou PureText. C’est très utile
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • C’est vraiment étrange que le collage avec mise en forme soit le comportement par défaut. Je n’ai jamais voulu coller en conservant la mise en forme, et je ne comprends pas vraiment quel cas d’usage cela vise
    • Ctrl+Shift+V est vraiment excellent. Cela devrait devenir le raccourci standard du système d’exploitation pour le presse-papiers
      Un presse-papiers à valeurs multiples, comme les cinq derniers éléments copiés, serait bien aussi, mais c’est peut-être trop demander
  • AHK fait partie de ces applis qui vous attachent à Windows. Je l’utilise pour ajouter au clavier des caractères comme äöüß ou áóúñ, contrôler la luminosité des lumières de ma chambre et de mon appartement, insérer en un ou deux boutons des horodatages comme 08:39 –, 2023-08-22 08:39:46 ou 2023-08-22 — Tuesday, ou encore allumer/éteindre l’alimentation de mes écrans via une prise compatible Tasmota quand je bascule la touche Pause
    Cela dit, j’aimerais bien une fonction permettant d’utiliser un second clavier comme pavé de boutons tout en « consommant » ses frappes. Du coup, pour gagner davantage de boutons, j’utilise un petit clavier Bluetooth connecté à un Raspberry Pi Zero

    • Sur macOS, Hammerspoon semble être la meilleure option
      https://www.hammerspoon.org/
    • Si le coût est acceptable, on peut chercher un clavier bon marché prenant en charge QMK ou un autre firmware personnalisé, puis mapper certaines touches sur F13 à F24 ou sur des combinaisons difficiles à presser comme Ctrl+Alt+Shift+P
    • J’ai déjà obtenu de bons résultats avec Luamacros pour intercepter un second clavier et transmettre ses frappes à AutoHotKey
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      Il y a aussi ceci : https://github.com/evilC/AutoHotInterception
    • Sous Linux, j’utilise AutoKey. C’est moins puissant qu’AHK, mais j’aime bien le fait qu’il utilise du Python standard
      https://github.com/autokey/autokey
    • Avec AutoHotInterception, AHK peut distinguer différents claviers/souris à partir de leur ID matériel. On peut ainsi avoir une disposition et des macros propres à un clavier séparé
  • Moi aussi, j’utilise AutoHotKey en permanence. J’y ai mis 6 raccourcis de date/heure, des lanceurs PuTTY/SSH pour les hôtes et ports série fréquents, des lanceurs contextuels pour plus de 10 applis comme Outlook, Windows Terminal ou Total Commander, le collage sans mise en forme partout, le collage avec suppression des retours à la ligne, une couche de saisie AltGr pour caractères spéciaux et emoji, ainsi que des raccourcis média/volume

  • Sur mon portable Linux personnel, j’ai interverti Caps Lock et Escape, et je m’y suis habitué. Quand je démarrais aussi Windows en dual boot, j’avais fait le même réglage avec Powertoys, mais au travail je ne peux pas installer Powertoys ni Uncap, donc AutoHotKey est ma seule option
    En suivant une réponse StackOverflow, Caps Lock et Escape se sont retrouvées à envoyer toutes les deux les deux touches en même temps, ce qui sabote parfois mes messages Teams
    https://github.com/microsoft/PowerToys
    https://github.com/susam/uncap
    https://stackoverflow.com/questions/38558376/how-to-map-caps...

    • Kanata est excellent. Il prend en charge Linux comme Windows, mais comme je travaille surtout sous Linux, je ne l’ai pas encore essayé sous Windows
      https://github.com/jtroo/kanata
    • Je recommande aussi les modificateurs sur la rangée de repos. Le principe est qu’une touche se comporte normalement lorsqu’on l’appuie brièvement, et déclenche une autre fonction lorsqu’on la maintient enfoncée
      Par exemple, https://github.com/evilC/TapHoldManager implémente cela dans AHK. Placer Shift/Ctrl/Win/Alt sous fdsa et jkl; réduit l’usage des auriculaires et permet de garder davantage les doigts sur la rangée de repos
    • J’ai interverti ces touches avec AHK pendant des années, et un script aussi simple que celui-ci fonctionne : CapsLock::Esc, Esc::CapsLock
      J’ai aussi réuni d’autres améliorations rapides avec AHK, comme lancer des programmes via des raccourcis globaux : https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • La base de registre de la carte des scancodes vaut aussi le coup d’être essayée. Je l’utilise pour échanger Ctrl/CapsLock, et cela fonctionne bien même avec des logiciels RDP ou des applis lancées en administrateur que PowerToys ne gérait pas
      https://superuser.com/questions/550679/where-can-i-find-wind...
    • J’ai été bloqué par le même problème, puis j’ai fini par bricoler quelque chose qui fonctionne
      https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
      Cela implémente aussi une double fonction où CapsLock agit comme Ctrl lorsqu’elle est pressée avec une autre touche, et comme Esc lorsqu’elle est pressée brièvement
  • Comme d’autres l’ont dit, AHK permet de faire un nombre étonnant de choses sous Windows. Personnellement, je dirais qu’AHK m’a fait économiser ou gagner plus de 100 000 dollars
    Mais le langage AHK lui-même n’est pas des plus agréables à écrire. Je me demande pourquoi il n’existe pas d’outil aussi puissant en Python ou en Lua, et https://github.com/pywinauto/pywinauto ne fonctionnait pas aussi bien qu’AHK en pratique. Au fond, en dessous c’est la WinAPI, donc C# pourrait aussi être une option s’il existait une bonne bibliothèque wrapper. À mon avis, AHK est populaire parce qu’il est laid, mais qu’il marche

    • Si ce n’est pas déjà fait, vous devriez essayer de passer à la v2. Elle est sortie plus tôt cette année et le langage est nettement moins laid. La distinction commandes/fonctions a disparu : tout est devenu une fonction
    • Il existe une tentative de réécrire AHK en C# et de prendre aussi en charge d’autres systèmes d’exploitation
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • AHK est populaire en grande partie parce que sa laideur, que la plupart des « vrais » langages de programmation n’accepteraient pas, le rend plus accessible au début
    • PyAutoGui est également très bon. Je l’utilise depuis longtemps et, récemment, j’ai réécrit quelques automatisations AHK simples avec. Ce n’est pas un remplaçant 1:1, donc j’utilise toujours AutoHotKey, mais ses fonctionnalités d’automatisation d’UI sont bien conçues
  • AutoHotKey est excellent. Je l’utilise pour changer d’application plus rapidement et, dans mon cas, je contrôle tout avec la touche Alt droite comme touche d’« activation des raccourcis »
    En la maintenant enfoncée et en appuyant sur une touche alphabétique, je fais défiler les instances de l’application correspondante. Par exemple, Alt+C bascule vers une fenêtre VS Code, et les combinaisons Alt+F ouvrent une nouvelle instance d’application, comme une nouvelle fenêtre Chrome avec un profil donné. Alt+chiffre peut être assigné à la fenêtre actuellement au premier plan, et en tapotant Alt on active un mode d’édition qui permet d’assigner la fenêtre actuelle à une touche numérique. En mode édition, H/J/K/L deviennent les touches de navigation haut/bas/gauche/droite, ce qui rend le changement d’application beaucoup plus rapide

  • Le script qui m’a le plus marqué est celui que j’avais trouvé et modifié à l’époque où je jouais à Diablo 3. Je commençais à avoir des problèmes de trouble musculosquelettique lié aux mouvements répétitifs parce que j’appuyais trop fort la main de la souris sur le tapis, alors j’ai cherché un moyen de jouer à la manette
    Ce script liait le déplacement analogique à un petit cercle autour du personnage, ce qui permettait de courir fluidement dans n’importe quelle direction, et une pression sur un bouton déplaçait la portée plus loin pour lancer des capacités à distance. Avec un peu de personnalisation selon la classe, ça marchait étonnamment bien