[HN Gopher] Hammerspoon - Lua-based powerful tool automation of ... ___________________________________________________________________ Hammerspoon - Lua-based powerful tool automation of macOS Author : gurjeet Score : 65 points Date : 2021-12-12 20:52 UTC (2 hours ago) (HTM) web link (www.hammerspoon.org) (TXT) w3m dump (www.hammerspoon.org) | endymi0n wrote: | Really nice at first sight. | | I'm getting melancholic vibes of AutoHotKey reading the docs, | which was arguably my first entry into professional programming. | Knowing nothing about coding, I built a service desk automation | back then -- with (network file-) shared hotkeys and a real GUI, | all in one single file... good times. | | Anyway, ever since switching to MacOS more than a decade ago, | I've always been searching for an AHK analog for those simple | keystroke automations, text-based, with just enough of a glue | language to hold it all together -- Automator never quite cut it | for me, after wielding the full power of AHK, it always felt too | limited, rigid and clicky-colory. | | Even though I don't have immediate use cases for it anymore, it | makes me very happy that I know where to go back now! | blondin wrote: | do you mean simple text-based replacements and keyboard | shortcuts? as opposed to full automation? | | you can set those in the keyboard settings in system | preferences. i have used the text replacement tab a lot in the | past. i used it to auto-insert smileys and text snippets on | various platforms. i haven't used shortcuts much though. you | always end up with complicated shortcuts so you don't conflict | with your apps. | blacksmith_tb wrote: | I have been enjoying espanso[1], which at first glance is just | a text-expanding keystoke saver, but can run shell scripts when | it's doing its thing. So I can type :extip anywhere and it will | curl ipinfo.io then pipe the json response through jq -r and | leave my current external IP in whatever app I was typing in. | | 1: https://espanso.org/ | artdigital wrote: | Have you tried AppleScript scripting? You can glue applications | together and even use JavaScript if you're not a fan of | AppleScript | endymi0n wrote: | Did some, but the syntax wasn't my cup of tea. The _really_ | great feature of AHK to me was having the triggers and the | actions all in one place though, which is something I | couldn't really replicate with AppleScript that only has the | actions, with the triggers in Automator. | | So with that runtime you could easily just write whatever | would happen if you press which key combo (or do cronjob-like | things managed by the runtime) and then write what happens | inline. | | Write it all to a single script, copy it to a coworker's | computer, run it, several dozen key combos just work now. | | That's something I couldn't manage to pull off in AppleScript | or Automator, but then again maybe I was just too dumb. | 1123581321 wrote: | Try Keyboard Maestro or BetterTouchTool. They remind me the | most of AHK out of all the Apple options. | | I also really like Hammerspoon. The desktop automation | scene on macOS is strong. | christiangenco wrote: | I love Hammerspoon. It's one of the first must-have-for-a-usable- | laptop tools I set up when I get a new MacBook. | | Here are the top ways I'm using it right now: | | 1) Hide/show apps similar to how iTerm lets you bind a hotkey to | hide/show a terminal. I've got ctrl+space set to Vimcal, | alt+space set to midnight.app (a time tracker I'm building), and | ctrl+alt+space set to Things. | | 2) Start/stop playing my work playlist of lofi hiphop. I got | tired of the friction around opening Spotify, going into my work | playlist, hitting play, waiting several moments for the playlist | to load, etc, so I downloaded a bunch of mp3s from YouTube and | put them in ~/Music/work/. Now my work music is a single keyboard | shortcut (semicolon+m) and a few miliseconds away. | | 3) Set up screen recording. There are a few things that need to | happen before I start a screen recording (opening CamHead.app, | setting my screen resolution, and showing the dock at a certain | height so I can later crop the video to 16:9) and I have it all | bound to a single hotkey (semicolon+r). I've got another hotkey | set up to unset it (semicolon+e). | | 4) You may have noticed I'm using keyboard shortcuts with | semicolon as a modifier key. That's done with Hammerspoon too! | I've got an extra layer of hotkeys available to me to set up | whatever else I can think of in the future. The code I wrote to | use semicolon like this sometimes breaks if I try to type too | many _actual_ semicolons in a row but I usually rely on JS | Beautify to add those for me. | VWWHFSfQ wrote: | Hammerspoon is fantastic. And Lua is a such a fun little language | to program in. And with LuaJIT [0] you can run it on your nginx | webserver [1] at basically the speed of C code. It's really a | marvel of engineering. | | [0] https://luajit.org/ | | [1] https://openresty.org/ | dorian-graph wrote: | I use this! | | - Mute my computer when I put it to sleep or when I change wifi | networks | | - Hyper key | | - Mail.app menubar indicator | | - Spotify menubar current song | | - Shortcut to move mouse cursor to another monitor | | - Window switcher that only lists apps in the current workspace | pkukkapalli wrote: | Just curious do people use these types of automations to help | with coding/software engineering? If so, in what way? | riston wrote: | I really like HS especially filling the macOS missing features | place like for windows management + either opening/focusing | specific applications with shortcuts. | pjm331 wrote: | I like hammerspoon. I've been using it for years and never got | beyond setting up window resizing with the visual grid - which I | think is like one of the very first steps in the tutorial - but | I'd recommend it just for that. | [deleted] | cmsj wrote: | Since we've hit the front page of HN again, I've just released | Hammerspoon 0.9.92, which contains a few fixes and some | additions, but mostly refactored a significant amount of internal | project structure to allow our build system to be replaced with | something that isn't 5 years old and terrible. | | As a result, it's possible that something broke which we didn't | find in our internal testing. Please file GitHub issues :) | | Happy Christmas y'all! | nsonha wrote: | Does anyone knows a cross platform tools that can map keyboard | keys to mouse button? Preferably in a layer? | Arubis wrote: | I've especially enjoyed using Hammerspoon in combination with the | prebaked config "Spacehammer" | (https://github.com/agzam/spacehammer), which takes a lot of | inspiration from Spacemacs (and, of course, enables a systemwide | "edit this text field with emacs" workflow). | wasyl wrote: | I like Hammerspoon, but it's a bit of a pain to write the scripts | with Lua - I don't use the language often and it usually takes a | while to figure out syntax and necessary stdlib/Hammerspoon | functions. Does someone have a hint on how to set up e.g. VSCode | or IJ with Lua support and completion for Hammerspoon functions? | faizshah wrote: | Is there something like this for python? | Syzygies wrote: | I fell briefly in love with Hammerspoon, but stopped using it. | | My MacOS automation is now my QMK keyboard calling Alfred | workflows; I use Yabai for window management. | | I admire Lua, but ran into some sharp edges learning to program | in it. Still, one can get up to speed quickly if one knows other | scripting languages. | | Hammerspoon window management was deathly slow. Yabai is close to | instantaneous. | cranekam wrote: | Hammerspoon is great. I use it to manage windows (eg set vscode | and a browser side-by-side when connected to an external display, | full screen when not), add a hotkey to translate selected text | with Deepl, to mute sound when the machine sleeps, and to launch | a terminal with an fzf-based browser history searcher that beats | Firefox's hands down. | | It's easy to use and has great docs. Lua is fun to write. HS is a | really nice project. ___________________________________________________________________ (page generated 2021-12-12 23:00 UTC)