窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

Automatorで大きなディスプレイでも快適カーソル移動を目指した

新しい環境に移り,開発環境(物理)も大きく変化しました. 今まで研究室のデスクでMacBookPro (13inch)と22型ワイドのディスプレイを使っていたのですが,MacBookPro (15inch)と27型ワイド(しかも4k!(予定))というようにデカくなります.

さて,そこまで大きくなると何が問題になるかというと,ポインタの移動およびポインタどこにいる問題です. 広いディスプレイの中の米粒のようなポインタを探すのは非常に困難で,ある意味でのホームポジションである左上のリンゴマークに逃してから移動とかをやってきた人もいるかもしれません(私です). 今のような解決方法は非常に無駄な動きが多く,手首とまたポインタを探す首や目を労る必要がある私達エンジニアには解消すべき問題だと考えます.

そこで本記事ではそういった問題を少しでも解消できるように自分が行っている解決策を紹介いたします.

まず初めに,簡単にできるポインタどこにいる問題の解消です.

ポインタのサイズを(一時的,恒久的に)大きくする

f:id:yamachu_co:20180503163133p:plain

システム環境設定のアクセシビリティ内の項目であるディスプレイにある設定をいじりましょう. はじめはポインタを大きくすると違和感がすごいですが,慣れると非常に便利です. またシェイクすると大きくなる設定も環境によっては有効です.というのもデュアルディスプレイなどディスプレイが複数枚の時はどのディスプレイにいるかわからないので,シングルディスプレイの環境では有効でしょう. 素早く動かすの面倒だからWindowsみたいにCtrlキー押したら波紋みたいにポインタ中心に何か出てくれないかなぁ...

ポインタの移動

この解決方法は友人の困った声から生まれたものです.

実際に作業をしてみるとアクティブなウィンドウが別のディスプレイに移った時が一番ポインタの移動量が多く,また見つけにくい状況であるというに気づきました. であれば,アクティブなウィンドウのセンターにマウスポインタを持っていけばいいではないかという解決策が出てきました.

ということで,AppleScriptAutomator,そしてKarabiner-Elementsを併用して実際に行ってみました.

GitHub - yamachu/CursorCentering: (Mac) アクティブなウィンドウにカーソルを移動させる支援スクリプト

詳しいインストールや使い方に関してはリポジトリのREADMEを見ていただければと思います.

f:id:yamachu_co:20180503192027g:plain

このようにキーボード操作のみでマウスポインタを指定の位置に移動させることが出来ると無駄に手首を動かすことなく,また首を振ることなくポインタを探すことが出来ます. ぜひ試してみてください.(gifだとちょっとわかりづらいですね...)

開発裏話

GUIの自動化や,他のコマンドラインアプリケーションとの連携でAppleScriptAutomatorを使ったことはあったのですが,最近全く使っていなかったので制約が増えていたことに気づきませんでした. というのも,Sierra以降だとSIPだったりセキュリティの強化により,GUIアクセシビリティへのアクセスが非常に制限されるようになりました.

本来であればKarabiner-Elementsを使わずとも,AutomatorGUIの操作をサービス化し,OS付属のキーバインドで設定が行えるのですが, 実際に制御するのに使用しているosascriptへ許可を渡すことが出来ずに利用することが出来なくなっていたのです. アクセシビリティのコンピュータの制御の許可は~.appなどのアプリケーション化したものが前提となっているためosascriptのようなコマンドラインアプリケーションには許可することが出来ない,といった感じです.

スクリプトエディタからAppleScriptをアプリケーション化することも可能ですが,今回自分が作成したコードはアクティブなアプリケーションが保持するWindowを制御するという内容だったために,制御アプリケーションをアクティブにしてはいけないという制限がありました. そのため今回はグローバルにキーボードのイベントをフックしてくれるKarabiner-Elementsを採用した,というわけです. 他にいい解決手段をご存じの方がいましたら,ぜひともコメントやTwitterなどで教えてくださると嬉しいです.