如何让 Hammerspoon 在 OSX 上顺利调整窗口大小?

如何让 Hammerspoon 在 OSX 上顺利调整窗口大小?

我在用着锤子勺在 OSX 上调整窗口大小。特别是,我希望能够让窗口占据屏幕的一半,无论是垂直还是水平,以及占据整个屏幕。
但是,当我在轴之间切换时(例如垂直到水平),会出现严重的重绘延迟。以前我使用过奇观,它可以快速执行相同的任务。

为了演示,以下是我在 Hammerspoon 和 Spectacle 中调整窗口大小的短片。Hammerspoon
-死链接
奇观 -死链接

这是 Hammerspoon 调整窗口大小的限制吗,或者我可以更好地优化我的配置吗?

这是我的init.lua

--
-- Window management
--
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Left", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local max = win:screen():frame()

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

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Right", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local max = win:screen():frame()

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

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Up", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local max = win:screen():frame()

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

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Down", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local max = win:screen():frame()

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

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "f", function()
  local win = hs.window.focusedWindow()
  local f = win:frame()
  local max = win:screen():frame()

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

答案1

看起来你已经打开了窗口动画,你可以用以下方法关闭它hs.window.animationDuration = 0

http://www.hammerspoon.org/docs/hs.window.html#animationDuration

答案2

前面的答案很好(默认的 animationDuration 值为 0.2),但您将更改全局值。在本地,您可以执行 win:setFrame(f) 而不是 win:setFrame(f)

win:setFrame(f, 0)

也会有同样的效果。

相关内容