[hammerspoon] basic window management
change
commit 39fc5685608d0e98c05c1654f2e02bc83ee1f6ad
author Alpha Chen <alpha@kejadlen.dev>
date
parent 30a34700
diff --git a/.hammerspoon/init.lua b/.hammerspoon/init.lua
index 8516cc92..e9d4dce2 100644
--- a/.hammerspoon/init.lua
+++ b/.hammerspoon/init.lua
@@ -2,32 +2,25 @@ local mash = {"cmd", "alt", "ctrl"}
 local smash = {"cmd", "alt", "ctrl", "shift"}
 
 -- Window management
+wm = {
+  left = hs.layout.left50,
+  right = hs.layout.right50,
+  ne = { 0.5, 0, 0.5, 0.5 },
+  nw = { 0, 0, 0.5, 0.5 },
+  se = { 0.5, 0.5, 0.5, 0.5 },
+  sw = { 0, 0.5, 0.5, 0.5 },
+  max = hs.layout.maximized,
+}
 
--- TODO implement desktop and window gaps
-hs.urlevent.bind("wm", function(eventName, params)
-  local log = hs.logger.new("wm", "debug")
+function move(key)
+  local win = hs.window.focusedWindow()
+  local geo = wm[key]
+  win:move(geo, nil, true)
+end
 
-  local win = hs.window.focusedWindow() -- TODO figure out why focusedWindow doesn't work
-  -- local win = hs.window.frontmostWindow()
-  local f = win:frame()
-  local screen = win:screen()
-  local max = screen:frame()
-
-  local t = {
-    left = function(f) return hs.layout.left50 end,
-    right = function(f) return hs.layout.right50 end,
-    ne = function(f) return { 0.5, 0, 0.5, 0.5 } end,
-    nw = function(f) return { 0, 0, 0.5, 0.5 } end,
-    se = function(f) return { 0.5, 0.5, 0.5, 0.5 } end,
-    sw = function(f) return { 0, 0.5, 0.5, 0.5 } end,
-    max = function(f) return hs.layout.maximized end,
-  }
-
-  local unitRect = hs.geometry(t[params["layout"]](f))
-  local frame = unitRect:fromUnitRect(max)
-  win:setFrame(frame)
-  -- win:focus()
-end)
+hs.hotkey.bind(mash, "h", function() move("left") end)
+hs.hotkey.bind(mash, "l", function() move("right") end)
+hs.hotkey.bind(mash, "m", function() move("max") end)
 
 hs.loadSpoon("ReloadConfiguration")
 spoon.ReloadConfiguration:start()