Como fazer o Hammerspoon redimensionar janelas suavemente no OSX?

3

Estou usando o Hammerspoon para redimensionar minhas janelas no OSX. Particularmente, quero poder fazer com que as janelas ocupem metade da tela, vertical ou horizontalmente, além de ocupar toda a tela.
No entanto, há um grande atraso de redesenho quando alterno entre eixos (por exemplo, vertical para horizontal). Anteriormente, eu usei o Spectacle , que executa a mesma tarefa rapidamente.

Para demonstrar, aqui estão clipes curtos de mim redimensionando janelas em Hammerspoon vs Spectacle.
Hammerspoon - link
Espetáculo - link

Esta é uma limitação de como o Hammerspoon redimensiona janelas ou eu poderia otimizar minha configuração melhor?

Aqui está o meu 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)
    
por Prashanth Chandra 29.11.2016 / 04:46

2 respostas

2

Parece que você ativou a animação da janela, você pode desligá-lo com hs.window.animationDuration = 0

link

    
por 14.02.2017 / 16:23
1

A resposta anterior é boa (o valor padrão de animationDuration é 0.2), mas você estará alterando um valor global. Localmente, em vez de win: setFrame (f) você pode fazer

win:setFrame(f, 0)

terá o mesmo efeito.

    
por 26.04.2017 / 14:43