Config for Mac Window Management via Hammerspoon

-- Manish's take on Window Management via Hammerspoon.
--
-- local delta = 250
local mash  = {"cmd", "alt", "ctrl"}
local mash_win = {"cmd", "ctrl"}

-- Move to left.
hs.hotkey.bind(mash_win, "H", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local screen = win:screen()
  local max = screen:frame()
  local half = max.w / 2
  local errm = max.w / 50

  if f.x == max.x and math.abs(f.w - half) < errm then
    f.w = max.w / 4
  else
    f.w = half
  end

  f.x = max.x
  f.y = max.y
  f.h = max.h
  win:setFrame(f)
end)

-- Move to right.
hs.hotkey.bind(mash_win, "L", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local screen = win:screen()
  local max = screen:frame()

  local half = max.x + (max.w / 2)
  if f.x == half then
    f.x = half + (max.w / 4)
    f.w = max.w / 4
  else
    f.x = max.x + (max.w / 2)
    f.w = max.w / 2
  end
  f.y = max.y
  f.h = max.h
  win:setFrame(f)
end)

-- Move to top.
hs.hotkey.bind(mash_win, "J", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local screen = win:screen()
  local max = screen:frame()
  local half = max.h / 2
  local diff = math.abs(f.h - half)
  local errm = max.h / 50
  print("J key", diff, errm)

  if f.y == max.y and math.abs(f.h - half) < errm then
    f.h = max.h * 0.67
  else
    f.h = half
  end

  f.y = max.y
  win:setFrame(f)
end)

-- Move to bottom.
hs.hotkey.bind(mash_win, "K", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local screen = win:screen()
  local max = screen:frame()
  local half = max.h / 2
  local errm = max.h / 50

  if math.abs(f.y - max.y - half) < errm and math.abs(f.h - half) < errm then
    f.y = max.y + (max.h * 0.33)
    f.h = max.h * 0.67
  else
    f.y = max.y + half
    f.h = half
  end
  win:setFrame(f)
end)

hs.hotkey.bind(mash_win, "M", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local screen = win:screen()
  local max = screen:frame()

  f.x = max.x + (max.w / 4)
  f.y = max.y
  f.w = max.w / 2
  f.h = max.h
  win:setFrame(f)
end)


-- launch and focus applications with below shortkeys.
hs.fnutils.each({
  { key = "C", app = "Google Chrome" },
  { key = "S", app = "Slack" },
  { key = "T", app = "iTerm" }
}, function(object)
    hs.hotkey.bind(mash_win, object.key, function() hs.application.launchOrFocus(object.app) end)
end)

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "U", function()
  hs.reload()
end)

hs.alert.show("Config loaded")

--[[

hs.hotkey.bind(mash, "K", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()

  f.y = f.y - delta
  win:setFrame(f)
end)

hs.hotkey.bind(mash, "H", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()

  f.x = f.x - delta
  win:setFrame(f)
end)

hs.hotkey.bind(mash, "L", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()

  f.x = f.x + delta
  win:setFrame(f)
end)

hs.hotkey.bind(mash, "J", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()

  f.y = f.y + delta
  win:setFrame(f)
end)

hs.hotkey.bind(mash, "Y", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  f.w = f.w / 2
  f.h = f.h / 2
  win:setFrame(f)
end)

hs.hotkey.bind(mash, "N", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  f.w = f.w * 2
  f.h = f.h * 2
  win:setFrame(f)
end)

--]]

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.