mirror of
https://github.com/nmasur/dotfiles
synced 2024-12-29 14:24:54 +00:00
5aea58df79
for some reason, i need to multiply x to line up half-max frames
82 lines
2.4 KiB
Lua
82 lines
2.4 KiB
Lua
--- === 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.x * 2 + 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
|