xshoji's blog

BetterTouchTool: グローバルなキーボードショートカットで固定のテキストファイルをVSCodeで開けるようにする

Macを使い始めた頃から、 BetterTouchTool (BTT) をフル活用していて、これなしでは生きていけない体になっています。色々カスタマイズして使ってますが、今回はグローバルなキーボードショートカットで特定のテキストファイルをVisual Studio Codeで開けるようにする方法を紹介します。

これ、何に使うの?って話なんですが、私はいつもデスクトップに memo.txt というファイルを置いておいて、そこにちょっとしたメモを書いたり、文章の調整や頭の中を整理したりするために使っていて、頻繁に参照/書き込みします。いつもはこのファイルを開きっぱなしにしておいてアプリ切り替えでウィンドウをアクティブにする方法だったのですが、ふとBTT使えばグローバルショートカットでどこからでも簡単に開けるんじゃ?と思い、試したところ実現できたので紹介しようと思います。

グローバルショートカットの要件

単純に open memo.txt で開けばいいだけかと思いきや、VScodeはプロジェクト単位やファイル単位で複数のウィンドウを扱える関係上、例えば memo.txt とは関係のないファイルやディレクトリをVSCodeで開いていたりすると、そのウィンドウ上に memo.txt が開かれてしまい、使いづらいです。

そこで、今回は以下の要件を満たすことを目指しました

  • グローバルショートカットで memo.txt を新規ウィンドウで開く
  • memo.txt がすでに開かれていたら、そのウィンドウをアクティブにする
  • VSCodeですでに他のプロジェクトやファイルを開いていても memo.txt は別ウィンドウとしてアクティブにしたり新規で開くようにする

ちなみに、最も単純な方法だと以下が考えられますが、それぞれ要件を満たしません。

  • code -n ~/Desktop/memo.txt : 新規ウィンドウで開くが、すでに開かれている場合でも新規ウィンドウで開いてしまう
  • code -r ~/Desktop/memo.txt : すでに開かれている場合はそのウィンドウをアクティブにするが、他のプロジェクトやファイルを開いている場合はそのウィンドウ上に開かれてしまう
  • open -a "Visual Studio Code" ~/Desktop/memo.txt : 他のプロジェクトやファイルを開いている場合はそのウィンドウ上に開かれてしまう

AppleScriptで実現する

ではどうやって実現するかというと、 AppleScript を使います。具体的には以下のようなシンプルなスクリプトを書きます。

tell application "System Events"
	tell process "Code"
		set windowList to windows
		repeat with w in windowList
			if name of w contains "memo.txt" then
				tell application "Visual Studio Code" to activate -- アプリを最前面に
				perform action "AXRaise" of w -- ウィンドウをアクティブに
				return
			end if
		end repeat
	end tell
end tell
-- なければ新規ウィンドウで開く
do shell script "/usr/local/bin/code --new-window /Users/user/Desktop/memo.txt"

このスクリプトは、まさにさっきの要件を満たすように動作します。まず、 System Events を使ってVSCodeのウィンドウ一覧を取得し、その中に memo.txt が開かれているウィンドウがあるかどうかを調べます。もし見つかったら、そのウィンドウをアクティブにして終了します。見つからなかった場合は、最後の行で code --new-window コマンドを使って新規ウィンドウで memo.txt を開きます。

BetterTouchToolでグローバルショートカットに設定する

では、このスクリプトをBetterTouchToolでグローバルショートカットに設定します。

  1. BetterTouchToolを起動し、上部のメニューから「キーボードショートカット」を選択します。
  2. 「+」マークでキーボードショートカットを追加します
  3. 一番右に表示されている詳細設定画面の「ショートカットを記録するには、下記をクリック」をクリックしキーボードショートカットを設定します
  4. 真ん中に表示されている「選択したトリガーに最初の処理を割り当てる」の「+」を押して「Apple Script を実行する(ブロック)」を選択します
  5. 表示されたAppleScriptの入力欄に、先ほどのスクリプトを貼り付けます
  6. Cmd + S などで保存します

使ってみる

↑の例では、 Cmd + Shift + \ にショートカットを割り当てました。 これにより、どのアプリを使っていても Cmd + Shift + \ を押すと memo.txt が新規ウィンドウで開かれたり、すでに開かれていたらそのウィンドウがアクティブになったりします。また、一番重要だった、すでにVSCodeで他のプロジェクトやファイルを開いていても、 memo.txt は別ウィンドウとして開かれたりアクティブになったりします!(重要)

まとめ

今回は、BetterTouchToolを使ってグローバルなキーボードショートカットで特定のテキストファイルをVisual Studio Codeで開けるようにする方法を紹介しました。AppleScriptを活用することで、細かい要件にも対応できる柔軟な設定が可能です。参考になれば幸いです。