- Outil d’automatisation open source permettant de contrôler l’environnement macOS avec des scripts Lua, jouant un rôle de passerelle entre le système d’exploitation et le moteur de scripting
- Expose les fonctionnalités du système via divers modules d’extension (extensions), qu’il est possible de combiner pour automatiser des tâches complexes comme la gestion des fenêtres ou le contrôle des entrées
- L’installation est prise en charge via Homebrew ou par téléchargement manuel, mais l’outil ne fonctionne qu’après avoir rédigé soi-même le fichier de configuration
~/.hammerspoon/init.lua
- Le projet est un fork de Mjolnir et vise à offrir une expérience utilisateur plus intégrée, tout en poursuivant l’extension des API système et le renforcement de l’intégration entre extensions
- Il s’est imposé comme une plateforme d’automatisation avancée permettant aux développeurs et aux power users de contrôler macOS avec une grande finesse
Présentation de Hammerspoon
- Hammerspoon est un puissant outil d’automatisation pour macOS (anciennement OS X), qui fonctionne comme une passerelle reliant le système d’exploitation à un moteur de scripting Lua
- Les utilisateurs peuvent contrôler diverses fonctionnalités du système via des scripts Lua
- Les fonctionnalités principales sont fournies par des modules d’extension (extensions), qui exposent des fonctions spécifiques du système
- Cela permet d’automatiser de nombreuses tâches, comme la gestion des fenêtres, le contrôle audio ou la configuration des périphériques d’entrée
Installation
- Installation manuelle
- Télécharger la dernière release sur GitHub
- Déplacer
Hammerspoon.app dans le dossier Applications
- Installation avec Homebrew
- Commande :
brew install hammerspoon --cask
Configuration initiale et utilisation
- Juste après l’installation, l’outil ne fait rien par défaut : l’utilisateur doit créer lui-même le fichier
~/.hammerspoon/init.lua
- Ressources utiles :
Histoire du projet
- Hammerspoon a commencé comme un fork du projet Mjolnir
- Mjolnir visait une structure d’application minimale et gérait les extensions sous forme de packages Lua externes
- Hammerspoon a été développé sur cette base afin d’offrir une expérience utilisateur plus intégrée
Orientation future du projet
- Élargir la couverture des API système
- Renforcer l’intégration entre les modules d’extension
- Améliorer l’expérience utilisateur
Architecture technique et statistiques
- Répartition principale des langages : Objective-C 51 %, Lua 24,7 %, C 16,3 %, HTML 5,6 %, Shell 0,7 %, Python 0,5 %
- Statistiques GitHub : 14.9k stars, 678 forks, 133 contributeurs
- Licence : MIT License
- Site officiel : www.hammerspoon.org
Principaux tags
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
1 commentaires
Avis Hacker News
Hammerspoon est pour moi comme la colle qui tient tout mon Mac ensemble
Je peux vider des onglets Safari dans des documents Obsidian, ou lancer de nouvelles fenêtres pour Safari, Finder, Terminal, VS Code, Notes et d’autres applis clés avec une combinaison de touches Hyper (Ctrl+Opt+Cmd)
Je l’ai aussi intégré à AeroSpace pour déplacer des fenêtres vers un autre moniteur, en mettre deux côte à côte, les permuter ou rassembler toutes les fenêtres dans un même workspace, entre autres automatisations
Il redémarre aussi automatiquement les applis en arrière-plan quand elles plantent, et affiche une invite pour démonter une image disque quand elle est envoyée à la corbeille
Il y a aussi une intégration avec Skim qui permet de sauter vers une section précise d’un PDF via un lien Markdown
À l’origine j’utilisais un lien de partage Outlook, mais il s’est mis à exiger une authentification, donc je passe par Apple Calendar. En revanche, le fait que seulement 40 % des événements se synchronisent reste un mystère
Avant, j’aimais les tiling window managers, mais sur Mac j’utilise beaucoup d’applis visuellement complexes, donc la disposition à l’écran est devenue plus importante
J’ai créé des préréglages de taille de fenêtre pour le mail, l’IDE, le navigateur, le terminal et les applis de chat, puis je bascule entre eux avec des raccourcis Hammerspoon
Même quand l’IDE est en train de compiler, je peux ouvrir le navigateur tout en gardant les logs visibles en bas, et les raccourcis modaux rendent aussi le changement d’application plus rapide
Le concept de modes à plusieurs niveaux est intrigant
En tant que mainteneur de Hammerspoon, je travaille actuellement sur la v2, qui remplace Lua par JavaScript
Mon projet Spacehammer est une boîte à outils modale Hammerspoon inspirée de Spacemacs/Doom
Avec « alt+spc a b », on peut ouvrir un navigateur, avec « alt+spc m j/k » régler le volume, ou encore éditer dans Emacs du texte provenant de n’importe quelle application
C’est écrit en Fennel, avec développement en temps réel via REPL, et ça s’intègre aussi très bien avec des gestionnaires de fenêtres comme Yabai
J’ai implémenté un faux gestionnaire de fenêtres en mosaïque avec Hammerspoon
Il réorganise les fenêtres selon des proportions de l’écran, et permet aussi de les déplacer entre moniteurs via des raccourcis
J’ai essayé Hammerspoon pour la première fois récemment, et ChatGPT m’a généré un script AppleScript pour associer directement des raccourcis clavier à des options d’une application de barre de menus
C’est vraiment génial, et j’ai envie d’essayer encore plus d’automatisations à l’avenir
J’ai créé un script pour masquer les contrôles de partage d’écran de Zoom, afin qu’ils ne réapparaissent pas même quand on appuie sur ESC
Toute ma configuration tient en une seule ligne
Avec
ctrl + D, j’ouvre une interface en grille pour placer les fenêtres où je veuxC’est plus simple et plus intuitif que d’autres gestionnaires de fenêtres
hs.grid.setGrid('4x4')ou ajuster la taille du texte avechs.grid.ui.textSizeCtrl+Ddans le terminalGrâce à Hammerspoon, je me suis moi aussi libéré du stress lié au changement de fenêtres
J’utilise Cmd+1~9 pour passer d’une fenêtre Chrome à l’autre, et Cmd+0 pour ouvrir une boîte de dialogue de sélection
Mon fichier de configuration montre comment mémoriser les noms des fenêtres et les conserver même après redémarrage
Hammerspoon est plus puissant qu’Automator sur Mac
De la même façon qu’Automator prend désormais en charge JavaScriptCore, si Hammerspoon utilise JS au lieu de Lua, il pourra exploiter directement les paquets Node
S’il fallait tout réécrire en Lua, ce serait probablement assez pénible