🧑💻
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
-
caskページ(最新版の情報・インストールコマンド)
⚙️ 初回起動時に「アクセシビリティ」許可を求められます。システム設定 → プライバシーとセキュリティ → アクセシビリティ で Hammerspoon を有効にしてください。許可が無いとウィンドウ操作ができません。
2. init.lua を作る(実コードと解説)
- メニューバーの Hammerspoon アイコン → Open Config を開く(ない場合は
~/.hammerspoon/を作成)。 - 上の TL;DRのコード を貼り付けて保存。
- メニューバーから Reload Config
仕組みのポイント
- hs.mouse.getCurrentScreen() で現在のスクリーンを取得
- ディスプレイの x 座標で左右判定
- hs.mouse.setAbsolutePosition() でカーソルを中央に移動
- hs.eventtap.leftClick() でフォーカスを取得
- hs.hotkey.bind() でショートカット割り当て
これにより、隣のディスプレイに瞬時にマウスフォーカスを移動できます。
3. 実際の動き
スクショで分かりづらくてすみません。。
-
右ディスプレイを使用中

-
Ctrl + Spaceで左ディスプレイにフォーカス

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