--- === Move Window === local obj = {} obj.__index = obj -- Metadata obj.name = "MoveWindow" obj.version = "0.1" obj.license = "MIT - https://opensource.org/licenses/MIT" function obj:init() hs.window.animationDuration = 0.1 dofile(hs.spoons.resourcePath("worklayout.lua"))() -- bind hotkey hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "n", function() -- get the focused window local win = hs.window.focusedWindow() -- get the screen where the focused window is displayed, a.k.a. current screen local screen = win:screen() -- local nextScreen = screen:next() -- compute the unitRect of the focused window relative to the current screen -- and move the window to the next screen setting the same unitRect win:moveToScreen(screen:next(), true, true, 0) end) hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "b", function() local win = hs.window.focusedWindow() local screen = win:screen() win:moveToScreen(screen:previous(), true, true, 0) end) -- Maximize hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "m", function() -- get the focused window local win = hs.window.focusedWindow() local frame = win:frame() -- maximize if possible local max = win:screen():fullFrame() frame.x = max.x frame.y = max.y frame.w = max.w frame.h = max.h win:setFrame(frame) -- -- first maximize to grid -- hs.grid.maximizeWindow(win) -- -- then spam maximize -- for i = 1, 8 do -- win:maximize() -- end end) -- Half-maximize (right) hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "o", function() -- get the focused window local win = hs.window.focusedWindow() local frame = win:frame() -- maximize if possible local max = win:screen():fullFrame() frame.x = max.w / 2 frame.y = max.y frame.w = max.w / 2 frame.h = max.h win:setFrame(frame) end) -- Half-maximize (left) hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "u", function() -- get the focused window local win = hs.window.focusedWindow() local frame = win:frame() -- maximize if possible local max = win:screen():fullFrame() frame.x = max.x frame.y = max.y frame.w = max.w / 2 frame.h = max.h win:setFrame(frame) end) end return obj