4 points par GN⁺ 2026-03-15 | 1 commentaires | Partager sur WhatsApp
  • 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

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

 
GN⁺ 2026-03-15
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

    • Je ne l’utilise que pour deux choses — vérifier la liste des fenêtres Teams et, si je suis en réunion, envoyer un webhook à HomeAssistant pour changer le préréglage d’éclairage, puis télécharger le calendrier ical afin de basculer sur le préréglage « pending » s’il y a une réunion dans les 15 minutes
      À 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
    • Je me demande comment tu exportes les onglets Safari vers Obsidian. Je serais curieux de savoir si c’est une fonction simple ou s’il y a un script qui mérite d’être partagé
    • Du « spooning » vraiment impressionnant. Je ne l’utilise que pour la gestion des fenêtres, mais rien que pour ça, macOS est devenu bien plus agréable à utiliser
    • Je me demande si tu pourrais partager ton fichier de configuration
    • Tes exemples m’ont donné des idées sur la manière dont je pourrais m’en servir moi aussi
  • 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

    • J’aime beaucoup Lua, au point que c’était presque la seule raison pour laquelle Hammerspoon m’intéressait, donc le passage à JS me déçoit un peu, même si ça me semble être un choix réaliste
    • En tant qu’utilisateur de longue date, je suis curieux de savoir pourquoi abandonner Lua, mais quoi qu’il en soit merci pour cette excellente application
    • Quelqu’un plaisante en demandant : « Sortie dans 18 jours ? »
    • Je suis curieux de connaître la vision de la v2, les raisons des changements d’architecture et le contexte du choix de JS
    • Je me demande aussi s’il pourrait y avoir une synergie avec la prise en charge de JavaScript dans AppleScript
  • 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

    • Quelqu’un plaisante : « Il y a déjà des touches pour le volume sur le clavier… » Cela dit, il comprend les utilisateurs de Mac avec Touch Bar
  • 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

    • Je recommande AeroSpace. Ça fonctionne très bien, d’une manière familière pour les utilisateurs de i3
    • J’utilise quelque chose de similaire, mais j’ai aussi ajouté des placements à gauche, au centre et à droite. Calculer les tailles de fenêtre avec des formules, c’est bizarre mais génial
    • J’utilise hammerspoon-shiftit, un projet qui reproduit parfaitement le défunt ShiftIt
    • Moi aussi, j’utilise hyper+flèches pour déplacer les fenêtres et hyper+enter pour basculer en plein écran. J’aime cette sensation naturelle de déplacement des fenêtres
    • J’aime bien le plugin miro-windows-manager. Il est pratique pour faire tourner des dispositions en moitié ou en tiers
  • 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

    • Réaction : « Rien que pour ça, ça vaut l’installation »
  • Toute ma configuration tient en une seule ligne
    Avec ctrl + D, j’ouvre une interface en grille pour placer les fenêtres où je veux
    C’est plus simple et plus intuitif que d’autres gestionnaires de fenêtres

    • Quelqu’un est surpris : il ne savait pas que cette fonctionnalité existait. On peut changer la taille de la grille avec hs.grid.setGrid('4x4') ou ajuster la taille du texte avec hs.grid.ui.textSize
    • J’utilise quelque chose de proche, mais en plus flexible, par exemple en redimensionnant d’un seul côté
    • Synchroniser sa configuration entre plusieurs appareils peut virer à l’enfer des dotfiles. Malgré ça, c’est l’un des rares outils modernes qui permettent encore de contrôler les fenêtres sans souris
    • Je me demande s’il n’y a pas un conflit avec Ctrl+D dans le terminal
  • Grâ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