- Ein Open-Source-Automatisierungstool, mit dem sich die macOS-Umgebung per Lua-Skripten steuern lässt und das als Brücke zwischen Betriebssystem und Skript-Engine fungiert
- Über verschiedene Erweiterungsmodule (extensions) werden Systemfunktionen freigelegt, die sich kombinieren lassen, um komplexe Aufgaben wie Fensterverwaltung oder Eingabesteuerung zu automatisieren
- Die Installation wird über Homebrew oder per manuellem Download unterstützt; funktionsfähig wird es erst, wenn die Nutzer ihre Konfigurationsdatei
~/.hammerspoon/init.lua selbst schreiben
- Das Projekt wurde von Mjolnir geforkt, um eine stärker integrierte Nutzererfahrung zu bieten, und verfolgt kontinuierlich das Ziel, System-APIs zu erweitern und die Integration zwischen Erweiterungen zu stärken
- Es hat sich als fortgeschrittene Automatisierungsplattform etabliert, mit der Entwickler und Power-User macOS bis ins Detail steuern können
Überblick über Hammerspoon
- Hammerspoon ist ein leistungsstarkes Automatisierungstool für macOS (früher OS X), das als Brücke zwischen dem Betriebssystem und der Lua-Scripting-Engine arbeitet
- Nutzer können über Lua-Skripte verschiedene Systemfunktionen steuern
- Die Kernfunktionen werden über Erweiterungsmodule (extensions) bereitgestellt, die bestimmte Systemfunktionen freilegen
- Damit lassen sich verschiedenste Automatisierungsaufgaben ausführen, etwa Fensterverwaltung, Audiosteuerung oder die Konfiguration von Eingabegeräten
Installationsmethoden
- Manuelle Installation
- Die neueste Release auf GitHub herunterladen
Hammerspoon.app in den Ordner Applications verschieben
- Installation mit Homebrew
- Befehl:
brew install hammerspoon --cask
Ersteinrichtung und Nutzung
- Direkt nach der Installation passiert zunächst nichts; Nutzer müssen die Datei
~/.hammerspoon/init.lua selbst anlegen
- Nützliche Ressourcen:
Geschichte des Projekts
- Hammerspoon begann als Fork des Mjolnir-Projekts
- Mjolnir verfolgte eine minimale Anwendungsstruktur und verwaltete Erweiterungen als externe Lua-Pakete
- Hammerspoon wurde darauf aufbauend entwickelt, um eine stärker integrierte Nutzererfahrung zu bieten
Zukünftige Ausrichtung des Projekts
- Ausweitung des Umfangs der System-APIs
- Stärkere Integration zwischen Erweiterungsmodulen
- Verbesserung der Nutzererfahrung
Technischer Aufbau und Kennzahlen
- Wichtige Sprachanteile: Objective-C 51 %, Lua 24,7 %, C 16,3 %, HTML 5,6 %, Shell 0,7 %, Python 0,5 %
- GitHub-Statistik: 14.9k Stars, 678 Forks, 133 Mitwirkende
- Lizenz: MIT License
- Offizielle Website: www.hammerspoon.org
Wichtige Themen-Tags
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
1 Kommentare
Hacker-News-Kommentare
Hammerspoon ist für mich wie der Klebstoff, der meinen Mac zusammenhält
Ich dumpfe Safari-Tabs in Obsidian-Dokumente oder starte mit der Hyper-Tastenkombination (Ctrl+Opt+Cmd) neue Fenster für Safari, Finder, Terminal, VS Code, Notes und andere wichtige Apps
In Verbindung mit AeroSpace habe ich verschiedene Automatisierungen eingerichtet, etwa Fenster auf einen anderen Monitor zu verschieben, zwei Fenster nebeneinander anzuordnen, sie zu tauschen oder alle Fenster in einem Workspace zu sammeln
Außerdem werden abgestürzte Hintergrund-Apps automatisch neu gestartet, und wenn ein Disk-Image in den Papierkorb gelegt wird, erscheint eine Aufforderung zum Unmounten
Es gibt auch eine Integration mit Skim, mit der man per Markdown-Link zu einem bestimmten Abschnitt in einem PDF springen kann
Ursprünglich habe ich einen freigegebenen Outlook-Link verwendet, aber da inzwischen Authentifizierung nötig ist, gehe ich über Apple Calendar. Dass trotzdem nur 40 % der Termine synchronisiert werden, ist nach wie vor ein Rätsel
Früher mochte ich Tiling Window Manager, aber auf dem Mac nutze ich viele visuell komplexe Apps, daher ist das Bildschirm-Layout wichtiger geworden
Ich habe für Mail, IDE, Browser, Terminal und Chat-Apps jeweils passende Fenstergrößen-Presets erstellt und schalte sie per Hammerspoon-Hotkey um
Wenn die IDE gerade baut, kann ich trotzdem den Browser öffnen und weiterhin die Logs unten sehen, und per modalem Hotkey geht auch der App-Wechsel schnell
Das Konzept mehrstufiger Modi finde ich spannend
Als Maintainer von Hammerspoon entwickle ich derzeit v2, das von Lua auf JavaScript umstellt
Mein Projekt Spacehammer ist ein modales Hammerspoon-Toolkit, inspiriert von Spacemacs/Doom
Mit „alt+spc a b“ kann man den Browser öffnen, mit „alt+spc m j/k“ die Lautstärke regeln, oder beliebigen Text aus einer App in Emacs bearbeiten
Es ist in Fennel geschrieben und kann dank REPL in Echtzeit entwickelt werden, außerdem arbeitet es gut mit Window Managern wie Yabai zusammen
Ich habe mit Hammerspoon einen Pseudo-Tiling-Window-Manager gebaut
Fenster werden anhand von Bildschirmverhältnissen neu angeordnet, und per Hotkey kann man sie auch zwischen Monitoren verschieben
Ich habe Hammerspoon vor Kurzem zum ersten Mal ausprobiert, und ChatGPT hat mir per AppleScript ein Skript geschrieben, um Hotkeys direkt an Optionen einer Menüleisten-App zu binden
Wirklich großartig, und ich möchte künftig noch mehr Automatisierungen ausprobieren
Ich habe ein Skript gebaut, das die Bildschirmfreigabe-Steuerung von Zoom ausblendet, sodass sie auch nach dem Drücken von ESC nicht wieder erscheint
Meine gesamte Konfiguration besteht aus genau einer Zeile
Mit
ctrl + Döffne ich eine Grid-Oberfläche, um Fenster an die gewünschte Position zu setzenDas ist einfacher und intuitiver als bei anderen Window Managern
hs.grid.setGrid('4x4')kann man die Grid-Größe ändern, miths.grid.ui.textSizedie Schriftgröße anpassenCtrl+Dim Terminal kollidiertDank Hammerspoon bin auch ich den Stress beim Fensterwechsel losgeworden
Mit Cmd+1~9 wechsle ich zwischen Chrome-Fenstern, mit Cmd+0 öffne ich einen Auswahldialog
In meiner Konfigurationsdatei sieht man, dass Fensternamen gemerkt und auch nach einem Neustart beibehalten werden
Hammerspoon ist leistungsfähiger als Automator auf dem Mac
So wie Automator inzwischen JavaScriptCore unterstützt, könnte Hammerspoon bei einer Umstellung von Lua auf JS Node-Pakete direkt weiterverwenden
Wenn man alles in Lua neu schreiben müsste, wäre das ziemlich mühsam