4 ms·
I fake a tiling window manager on Mac with Hammerspoon, resizing to fit in specific corners/sizes: -- resize based on ratios function ratioResize(xr,
by zdw 7mo ago
I fake a tiling window manager on Mac with Hammerspoon, resizing to fit in specific corners/sizes:
-- resize based on ratios
function ratioResize(xr, yr, wr, hr)
return function ()
local win = hs.window.focusedWindow()
win:moveToUnit({x=xr,y=yr,w=wr,h=hr})
end
end
-- 4 corners, different sizes
hs.hotkey.bind({"cmd", "ctrl"}, "w", ratioResize(0, 0, 2/5, 2/3))
hs.hotkey.bind({"cmd", "ctrl"}, "e", ratioResize(2/5, 0, 3/5, 2/3))
hs.hotkey.bind({"cmd", "ctrl"}, "s", ratioResize(0, 2/3, 2/5, 1/3))
hs.hotkey.bind({"cmd", "ctrl"}, "d", ratioResize(2/5, 2/3, 3/5, 1/3))
And to throw windows to other monitors:
-- send to next screen
hs.hotkey.bind({"cmd", "ctrl"}, ";", function()
local win = hs.window.focusedWindow()
local screen = win:screen()
local next_screen = screen:next()
win:moveToScreen(next_screen)
end)
- comboy 7mo agoI highly recommend Aerospace[1], went through a few approaches, I cared about not completely compromising security either, it works really well if you come from something like i3 1. https://github.com/nikitabobko/AeroSpace https://github.com/nikitabobko/AeroSpace
- idle_zealot 7mo agoSeconding this. I find MacOS unusable without it. I'll ask here because websearch is failing me: is there a way to fix the focus stealing that happens when you have multiple windows of an application on different displays? Specifically, say workspace 1 and 2 are on monitor Left, while 3 and 4 are on Right. Application A has a window on workspace 1, B has one window on 2 and another on 3, and C has a window on 4. Workspace 1 is active on display Left, workspace 4 is active on Right. If I switch to workspace 3 the following happens: - the switch goes through, Left displays workspace 1, right displays 3 (desired state) - Application B is focused, presumably because its window on 3 becomes active (also desired) - Display Left switches to display workspace 2, presumably because it contains a window belonging to the newly focused application B? (I don't want this) - the window of application B on workspace 2 steals focus from the one on workspace 3 (???)
- airstrike 7mo agoThirding the recommendation, and I also have this same issue. It's quite frustrating—but still better than no Aerospace!
- JSR_FDED 7mo agoSo what you’re saying is: Charlie's paternal grandfather Reginald married twice—first to Mildred, mother of Charlie's father Arthur and his siblings Beatrice (a nun with spiritual godchildren) and Cecil (whose widow Dorothy married Charlie's maternal uncle Edward). What is the name of Charlie's goddaughter?
- jeberle 7mo agoI use it similarly, but I add spots for side x side as well as left, center, right. I only use Hammerspoon for this and a couple tiny things, but it's completely worth it for this alone. Use math to specify window sizes & location. Insanity. local mode = hs.screen.primaryScreen():currentMode() local mods = {"ctrl", "alt", "cmd"} -- mash those keys -- regular app windows do local w = 1094 -- no clip on GitHub, HN local h = 1122 -- tallish local x_1 = 0 -- left edge local x_2 = math.max(0, (mode.w - w - w) / 2) -- left middle local x_3 = (mode.w - w) / 2 -- middle local x_4 = math.min(mode.w - w, x_2 + w + 1) -- right middle local x_5 = mode.w - w -- right edge local y = 23 -- top of screen below menu bar hs.hotkey.bind(mods, "2", function() move_win( 0, y, mode.w, mode.h) end) -- max hs.hotkey.bind(mods, "3", function() move_win(x_1, y, w, h) end) hs.hotkey.bind(mods, "4", function() move_win(x_2, y, w, h) end) hs.hotkey.bind(mods, "5", function() move_win(x_3, y, w, h) end) hs.hotkey.bind(mods, "6", function() move_win(x_4, y, w, h) end) hs.hotkey.bind(mods, "7", function() move_win(x_5, y, w, h) end) end function move_win(x, y, w, h) hs.window.focusedWindow():setFrame(hs.geometry.rect(x, y, w, h)) end
- piskov 7mo agoMoom is really the best
- apazzolini 7mo agoI like the miro windows manager plugin: https://github.com/miromannino/miro-windows-manager https://github.com/miromannino/miro-windows-manager It's nice to be able to iterate through the halves/thirds configurations for different cases.
- ackfoobar 7mo agohttps://github.com/peterklijn/hammerspoon-shiftit https://github.com/peterklijn/hammerspoon-shiftit I use ShiftIt (a lovely project, but dead) reimplemented in Hammerspoon. It is very comprehensive.
- mortar 7mo agoI do this too, really happy with my setup - I use hyper+arrow keys to move windows around a monitor (split in thirds on 40”+ or halves on the built-in screen), or jump to another monitor, and hyper+enter to fullscreen. When you push against an edge in full screen it reduces the window size in stages, it all feels natural.