4

Я использую Hammerspoon, чтобы изменить размеры моих окон на OSX. В частности, я хочу, чтобы окна занимали половину экрана, вертикально или горизонтально, а также занимали весь экран.
Однако при переключении между осями наблюдается большая задержка перерисовки (например, вертикальная или горизонтальная). Ранее я использовал Spectacle, который быстро выполняет ту же задачу.

Чтобы продемонстрировать, вот короткие клипы меня изменения размеров окна в Hammerspoon против Spectacle.
Молотковая ложка - https://vid.me/xg8o
Спектакль - https://vid.me/7dLP

Является ли это ограничением того, как 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)

2 ответа2

2

Похоже, у вас включена анимация окна, вы можете отключить ее с помощью hs.window.animationDuration = 0

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

1

Предыдущий ответ хорош (значение animationDuration по умолчанию равно 0,2), но вы будете изменять глобальное значение. Локально, вместо win:setFrame (f) вы можете сделать

win:setFrame(f, 0)

это будет иметь тот же эффект.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .