🧑‍💻

Macデュアルディスプレイのフォーカスを一瞬で切り替える(Hammerspoon)

に公開

Macデュアルディスプレイのフォーカスを一瞬で切り替える(Hammerspoon)

デュアルディスプレイで別ディスプレイを触る際に、いちいちマウスを触りたくなかったので作りました。

  • 対象OS: macOS
  • 想定読者: マルチディスプレイ(水平配置)の開発者・ライター・デザイナー
  • この記事でできること: 「左右ディスプレイ間でマウスとフォーカスを切り替える」ショートカットをHammerspoonで作成

TL;DR(完成コード)

先にコードが欲しい方はこちらを ~/.hammerspoon/init.lua に保存してHammerspoonをReloadしてください。

-- ディスプレイ間でマウスフォーカスを切り替える
local toggleDisplayFocus = function()
    local mousePos = hs.mouse.getAbsolutePosition()
    local currentScreen = hs.mouse.getCurrentScreen()
    local screens = hs.screen.allScreens()
    if #screens < 2 then return end

    -- 左右判定
    local leftScreen, rightScreen
    if screens[1]:frame().x < screens[2]:frame().x then
        leftScreen = screens[1]
        rightScreen = screens[2]
    else
        leftScreen = screens[2]
        rightScreen = screens[1]
    end

    -- 切り替え先決定
    local targetScreen
    if currentScreen == leftScreen then
        targetScreen = rightScreen
    else
        targetScreen = leftScreen
    end

    -- カーソルを切り替え先の中央へ移動
    local frame = targetScreen:frame()
    local targetPos = {x = frame.x + frame.w / 2, y = frame.y + frame.h / 2}
    hs.mouse.setAbsolutePosition(targetPos)

    -- 左クリックしてフォーカス
    hs.eventtap.leftClick(targetPos)
end

-- ctrl + space に割り当て
hs.hotkey.bind({"ctrl"}, "space", toggleDisplayFocus)
  • 使い方: Ctrl + Space で左右ディスプレイ間のマウスとフォーカスを切り替え。

1. Hammerspoonをインストールする(Homebrew)

  • Homebrewのcask から入れるのが簡単です。
brew install --cask hammerspoon

⚙️ 初回起動時に「アクセシビリティ」許可を求められます。システム設定 → プライバシーとセキュリティ → アクセシビリティ で Hammerspoon を有効にしてください。許可が無いとウィンドウ操作ができません。


2. init.lua を作る(実コードと解説)

  1. メニューバーの Hammerspoon アイコン → Open Config を開く(ない場合は ~/.hammerspoon/ を作成)。
  2. 上の TL;DRのコード を貼り付けて保存。
  3. メニューバーから Reload Config

仕組みのポイント

  • hs.mouse.getCurrentScreen() で現在のスクリーンを取得
  • ディスプレイの x 座標で左右判定
  • hs.mouse.setAbsolutePosition() でカーソルを中央に移動
  • hs.eventtap.leftClick() でフォーカスを取得
  • hs.hotkey.bind() でショートカット割り当て

これにより、隣のディスプレイに瞬時にマウスフォーカスを移動できます。


3. 実際の動き

スクショで分かりづらくてすみません。。

  1. 右ディスプレイを使用中
    右画面を使用中のスクリーンショット

  2. Ctrl + Spaceで左ディスプレイにフォーカス
    Ctrl + Spaceを押した後、カーソルが左ディスプレイ中央に移動してフォーカスされている


おわりに

こちらの記事が、誰かのお役に立てれば光栄です。
もっと良いやり方があればご教示いただけると嬉しいです。

Discussion