Implement window presets in hammerspoon
This commit is contained in:
parent
25e93ab45c
commit
71a1a67f16
70
home-manager/hammerspoon/C3CWorkspace.spoon/init.lua
Normal file
70
home-manager/hammerspoon/C3CWorkspace.spoon/init.lua
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
return (function()
|
||||||
|
spoon = {
|
||||||
|
name = "C3C Workspace";
|
||||||
|
version = "0.0.1";
|
||||||
|
author = "Arnie";
|
||||||
|
license = "MIT";
|
||||||
|
}
|
||||||
|
|
||||||
|
-- DELL S2722DGM: 0F6BDB5B-840D-40BE-AAC9-B467A78E057A
|
||||||
|
-- DELL S2721DGF: D3142823-261D-46EF-B9C2-5181C7FE2CA5
|
||||||
|
-- AV Receiver: B5A65BB6-E73E-4C3D-977C-33C86798AA5A
|
||||||
|
local appScreenMap = {
|
||||||
|
Slack = {
|
||||||
|
desktop = 1,
|
||||||
|
screen = "0F6BDB5B-840D-40BE-AAC9-B467A78E057A",
|
||||||
|
fullscreen = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local fullscreen = function(win)
|
||||||
|
local screen = win:screen()
|
||||||
|
|
||||||
|
local cell = hs.grid.get(win, screen)
|
||||||
|
|
||||||
|
cell.x = 0
|
||||||
|
cell.y = 0
|
||||||
|
cell.w = 24
|
||||||
|
cell.h = 24
|
||||||
|
|
||||||
|
hs.grid.set(win, cell, screen)
|
||||||
|
end
|
||||||
|
|
||||||
|
function spoon:restoreAppsToScreens()
|
||||||
|
local screens = {}
|
||||||
|
for _, screen in ipairs(hs.screen.allScreens()) do
|
||||||
|
screens[screen:getUUID()] = screen
|
||||||
|
end
|
||||||
|
|
||||||
|
for appName, def in pairs(appScreenMap) do
|
||||||
|
local scr = screens[def.screen]
|
||||||
|
if scr ~= nil then
|
||||||
|
local app = hs.application.get(appName)
|
||||||
|
if app then
|
||||||
|
local wf = hs.window.filter.new(appName)
|
||||||
|
if wf then
|
||||||
|
-- TODO: Really bad performance
|
||||||
|
for _, win in pairs(wf:getWindows()) do
|
||||||
|
win:moveToScreen(scr)
|
||||||
|
if def.fullscreen then
|
||||||
|
fullscreen(win)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- https://github.com/Hammerspoon/hammerspoon/blob/master/SPOONS.md#hotkeys
|
||||||
|
function spoon:bindHotKeys(mapping)
|
||||||
|
local spec = {
|
||||||
|
restoreAppsToScreens = hs.fnutils.partial(self.restoreAppsToScreens, self)
|
||||||
|
}
|
||||||
|
|
||||||
|
hs.spoons.bindHotkeysToSpec(spec, mapping)
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
return spoon
|
||||||
|
end)()
|
||||||
@ -40,11 +40,25 @@ in
|
|||||||
font-size = 14
|
font-size = 14
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
"${homedir}/.hammerspoon/hmSpoons/C3CWorkspace.spoon" = {
|
||||||
|
source = ./hammerspoon/C3CWorkspace.spoon;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
|
||||||
"${homedir}/.hammerspoon/init.lua" = {
|
"${homedir}/.hammerspoon/init.lua" = {
|
||||||
text = ''
|
text = ''
|
||||||
${builtins.readFile ./hammerspoon/window-tiling.lua}
|
${builtins.readFile ./hammerspoon/window-tiling.lua}
|
||||||
|
|
||||||
${builtins.readFile ./hammerspoon/window-move.lua}
|
${builtins.readFile ./hammerspoon/window-move.lua}
|
||||||
|
|
||||||
|
package.path = package.path .. ";" .. hs.configdir .. "/hmSpoons/?.spoon/init.lua"
|
||||||
|
|
||||||
|
hs.loadSpoon("C3CWorkspace")
|
||||||
|
|
||||||
|
spoon.C3CWorkspace:bindHotKeys({
|
||||||
|
restoreAppsToScreens = {{"ctrl", "alt", "cmd"}, "F12"}
|
||||||
|
})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user