Created
July 12, 2021 02:19
-
-
Save justsml/2155233a119af8a1977b29edcd157ce7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- credit: https://spinscale.de/posts/2016-11-08-creating-a-productive-osx-environment-hammerspoon.html | |
--[[ function factory that takes the multipliers of screen width | |
and height to produce the window's x pos, y pos, width, and height ]] | |
function baseMove(x, y, w, h) | |
return function() | |
local win = hs.window.focusedWindow() | |
local f = win:frame() | |
local screen = win:screen() | |
local max = screen:frame() | |
-- add max.x so it stays on the same screen, works with my second screen | |
f.x = max.w * x + max.x | |
f.y = max.h * y | |
f.w = max.w * w | |
f.h = max.h * h | |
win:setFrame(f, 0) | |
end | |
end | |
-- feature spectacle/another window sizing apps | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'Left', baseMove(0, 0, 0.5, 1)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'Right', baseMove(0.5, 0, 0.5, 1)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'Down', baseMove(0, 0.5, 1, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'Up', baseMove(0, 0, 1, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, '1', baseMove(0, 0, 0.5, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, '2', baseMove(0.5, 0, 0.5, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, '3', baseMove(0, 0.5, 0.5, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, '4', baseMove(0.5, 0.5, 0.5, 0.5)) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'M', hs.grid.maximizeWindow) | |
hs.hotkey.bind({'ctrl', 'alt', 'cmd'}, 'N', function() | |
local focusedWindow = hs.window.focusedWindow() | |
local focusedScreenFrame = focusedWindow:screen():frame() | |
local nextScreenFrame = focusedWindow:screen():next():frame() | |
local windowFrame = focusedWindow:frame() | |
windowFrame.x = ((((windowFrame.x - focusedScreenFrame.x) / focusedScreenFrame.w) * nextScreenFrame.w) + nextScreenFrame.x) | |
windowFrame.y = ((((windowFrame.y - focusedScreenFrame.y) / focusedScreenFrame.h) * nextScreenFrame.h) + nextScreenFrame.y) | |
windowFrame.h = ((windowFrame.h / focusedScreenFrame.h) * nextScreenFrame.h) | |
windowFrame.w = ((windowFrame.w / focusedScreenFrame.w) * nextScreenFrame.w) | |
focusedWindow:setFrame(windowFrame) | |
end) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment