[Mac] Hammerspoonでウィンドウを上下左右に分割する

2023年2月1日

ShiftIt で画面分割を行なっていましたが開発も中断しており、Hammerspoon で同様の機能を実現してみます。Hammerspoon はキー・マウス・ウィンドウについてコントロールできるユーティリティです。Mac には Homebrew でインストールができます。

brew install hammerspoon

インストールが完了すると、アプリケーションに追加されていますので、起動します。Enable Accessibility をクリックして、アクセシビリティの許可を行います。

許可されるとグレーアウトします。自動起動するには Launch Hammerspoon at login にチェックします。

Open Confiig をクリックすると設定ファイルが開きます。

設定ファイルを編集したら保存します。実際のファイルは ~/.hammerspoon/init.lua になります。編集がおわったら Reload Config で設定を反映します。

ウィンドウを上下左右に分割する

ShiftIt と同様に、上下左右にウィンドウを分割したり、3分割も可能になります。下記はサンプルになります。
control + option + 左 左半分
control + option + 右 右半分
control + option + 上 上半分
control + option + 下 下半分
control + option + shift + 左 左3分の1
control + option + shift + 右 右3分の1
control + option + shift + 上 中3分の1

hs.window.animationDuration = 0
units = {
  right50  = { x = 0.50, y = 0.00, w = 0.50, h = 1.00 },
  left50   = { x = 0.00, y = 0.00, w = 0.50, h = 1.00 },
  top50    = { x = 0.00, y = 0.00, w = 1.00, h = 0.50 },
  bot50    = { x = 0.00, y = 0.50, w = 1.00, h = 0.50 },
  right33  = { x = 0.66, y = 0.00, w = 0.33, h = 1.00 },
  left33   = { x = 0.00, y = 0.00, w = 0.33, h = 1.00 },
  center33 = { x = 0.33, y = 0.00, w = 0.33, h = 1.00 }
}

ctl_opt = { 'ctrl', 'option' }
hs.hotkey.bind(ctl_opt, 'right', '', function() hs.window.focusedWindow():move(units.right50, nil, true) end)
hs.hotkey.bind(ctl_opt, 'left', '', function() hs.window.focusedWindow():move(units.left50, nil, true) end)
hs.hotkey.bind(ctl_opt, 'up', '', function() hs.window.focusedWindow():move(units.top50, nil, true) end)
hs.hotkey.bind(ctl_opt, 'down', '', function() hs.window.focusedWindow():move(units.bot50, nil, true) end)

ctl_opt_shift = { 'ctrl', 'option', 'shift' }
hs.hotkey.bind(ctl_opt_shift, 'right', '', function() hs.window.focusedWindow():move(units.right33, nil, true) end)
hs.hotkey.bind(ctl_opt_shift, 'left', '', function() hs.window.focusedWindow():move(units.left33, nil, true) end)
hs.hotkey.bind(ctl_opt_shift, 'up', '', function() hs.window.focusedWindow():move(units.center33, nil, true) end)

MacMac

Posted by kidatti