Álvaro Ramírez
Cycling through window layouts (revisited)
Last year, I wrote a little script to cycle through window layouts via Hammerspoon. The cycling set I chose didn't stick, so here's another go.
function reframeFocusedWindow() local win = hs.window.focusedWindow() local maximizedFrame = win:screen():frame() maximizedFrame.x = maximizedFrame.x + 15 maximizedFrame.y = maximizedFrame.y + 15 maximizedFrame.w = maximizedFrame.w - 30 maximizedFrame.h = maximizedFrame.h - 30 local leftFrame = win:screen():frame() leftFrame.x = leftFrame.x + 15 leftFrame.y = leftFrame.y + 15 leftFrame.w = leftFrame.w / 2 - 15 leftFrame.h = leftFrame.h - 30 local rightFrame = win:screen():frame() rightFrame.x = rightFrame.w / 2 rightFrame.y = rightFrame.y + 15 rightFrame.w = rightFrame.w / 2 - 15 rightFrame.h = rightFrame.h - 30 if win:frame() == maximizedFrame then win:setFrame(leftFrame) return end if win:frame() == leftFrame then win:setFrame(rightFrame) return end win:setFrame(maximizedFrame) end hs.hotkey.bind({"alt"}, "F", reframeFocusedWindow)
Looping through layouts is done with a global key-binding of option f
or, if familiar with a macOS keyboard, ⌥ f
.
For those unfamiliar with Hammerspoon… If you're a tinkerer and a macOS user, you'd love Hammerspoon. Like elisp gluing all things Emacs, Hammerspoon uses Lua to glue all things macOS. For example, here's a stint at writing a narrowing utility for macOS using chooser.