Window management utilities for macOS using Hammerspoon.
- Install Hammerspoon: https://www.hammerspoon.org/
- Clone and move the Spoon:
git clone https://github.com/ticklemynausea/WindowPilot.spoon.git mv WindowPilot.spoon ~/.hammerspoon/Spoons/
- Add to
~/.hammerspoon/init.lua
:local wp = hs.loadSpoon("WindowPilot") wp:initialize({ windowMargin = 6 }) wp:bindKeys({ switchWindow = { forward = { { "alt" }, "tab" }, backward = { { "alt", "shift" }, "tab" }, }, mouseCursor = { moveToNextScreen = { { "ctrl", "shift"}, "right" }, moveToPreviousScreen = { { "ctrl", "shift" }, "left" }, }, windowLayout = { layoutTiledBSP = { { "alt", "cmd" }, "Z" }, layoutFullScreen = { { "alt", "cmd" }, "F" }, layoutCascading = { { "alt", "cmd" }, "X" }, layoutMainAndStack = { { "alt", "cmd" }, "S" }, layoutThrees = { { "alt", "cmd" }, "D" }, layoutHalves = { { "alt", "cmd" }, "A" }, }, windowMovement = { moveWindowLeft = { {"alt", "cmd"}, "left" }, moveWindowRight = { {"alt", "cmd"}, "right" }, moveWindowTop = { {"alt", "cmd"}, "up" }, moveWindowBottom = { {"alt", "cmd"}, "down" }, moveWindowCenter = { {"alt", "cmd"}, "C" }, moveWindowToNextScreen = { { "cmd", "alt" }, "]" }, moveWindowToPreviousScreen = { { "cmd", "alt" }, "["}, moveWindowToNextSpace = { {"shift", "alt", "cmd"}, "]" }, moveWindowToPreviousSpace = { {"shift", "alt", "cmd"}, "[" }, }, wpHelp = { keyList = { { "alt", "cmd" }, "H" } }, }) wp:bindShortcuts({ { name = "Alacritty", keys = { { "cmd" }, "1" } }, { name = "Google Chrome", keys = { { "cmd" }, "2" } }, { name = "Slack", keys = { { "cmd" }, "3" } }, { name = "Obsidian", keys = { { "cmd" }, "4" } }, { name = "Zoom", keys = { { "cmd" }, "5" } }, { name = "Safari", keys = { { "cmd" }, "7" } }, { name = "Podcasts", keys = { { "cmd" }, "8" } }, { name = "Spotify", keys = { { "cmd" }, "9" } }, { name = "Gmail", keys = { { "shift", "cmd" }, "1" } }, { name = "Google Calendar", keys = { { "shift", "cmd" }, "2" } }, })
- Reload Hammerspoon:
hs.reload()
- Keyboard window switching
- Tiling layouts (BSP, fullscreen, cascading, main & stack)
- Move windows to screen edges
- Move windows between screens/spaces
- Keyboard-controlled cursor movement
These are intuitively fully costumizable
Action | Shortcut |
---|---|
Switch to next window | Alt + Tab |
Switch to previous window | Alt + Shift + Tab |
Move window to next screen | Cmd + Alt + ] |
Move window to previous screen | Cmd + Alt + [ |
Move window to next space | Shift + Alt + Cmd + ] |
Move window to previous space | Shift + Alt + Cmd + [ |
Layout: BSP Tiling | Alt + Cmd + Z |
Layout: Fullscreen | Alt + Cmd + F |
Layout: Cascading | Alt + Cmd + X |
Layout: Main & Stack | Alt + Cmd + S |
Layout: Threes | Alt + Cmd + D |
Layout: Halves | Alt + Cmd + A |
Move window left | Alt + Cmd + Left |
Move window right | Alt + Cmd + Right |
Move window up | Alt + Cmd + Up |
Move window down | Alt + Cmd + Down |
Move window center | Alt + Cmd + C |
Show key list/help | Alt + Cmd + H |
Alacritty | Cmd + 1 |
Google Chrome | Cmd + 2 |
Slack | Cmd + 3 |
Obsidian | Cmd + 4 |
Zoom | Cmd + 5 |
Safari | Cmd + 7 |
Podcasts | Cmd + 8 |
Spotify | Cmd + 9 |
Gmail | Shift + Cmd + 1 |
Google Calendar | Shift + Cmd + 2 |
Change keybindings in bindKeys
and bindShortcuts
as needed.
MIT License. See LICENSE.