BetterTouchTool が、いやにクラッシュする。

 Mac のタッチパッドには必須のアプリ、BetterTouchTool
 スワイプやタップの動作を細やかに設定できる、大変に便利──というよりもう、あるのとないのとでは、死活を制するようなアプリである。
 3 ドルから 50 ドルまで、好きな金額で課金できるシェアウェアだ。推奨は 6 ドルだそうで、おれはこの推奨金額でライセンスを購入させていただいた。


スポンサード リンク

 ところが最近、この BetterTouchTool が、スリープ復帰直後とか、あるいはなんでもない瞬間にやたらと落ちるようになっていたのである。これは MacBook において頻発していた問題で、Mac mini ではそんなこと一度もなかった。

 この問題、2018 年 2 月 9 日ごろにリリースされた、バージョン 2.340 で完全に解決したと思われる。少なくともおれの環境では、先述の不具合は一度も起きていない。
 おれはこの問題に対処するべく Hammerspoon で使える Lua のコードを書いており、いつかブログに載せようと思っていたのだが、もたもたしているうちに本家が対応しちまいやがった。
 そんなの許せない。
 もうおそらく、BetterTouchTool は勝手に落ちることはないかもしれないけど、おれは自分の書いたやつ、ここに発表すっからね。別に大したもんじゃないけどさ。

🔨 init.lua

hs.application.watcher というのは、ユーザがアプリを切り替えた時に発動するらしい、アプリケーションの状況を監視する命令と思われる。アプリケーションを起動したり終了したりするときも発動する。ここでは bttEvnet という名前をつけてみた。

hs.application.find(hint) というのは、起動中のアプリケーションの検索と思われる。
 ()内の hint というのは、アプリを探すさいの手がかりだ。
 PID 番号、アプリケーションの名前、BundleID 、ウィンドウタイトルで検索できるみたいだね。
 PID 番号で検索する場合は PID 番号を入力するんだろうな。
 アプリケーションの名前で検索する場合は、アプリケーションの名前を入力するんじゃねーの?!
 おれはいろいろ試した結果(上記ふたつの方法は、もうひとつうまく扱えなかった)、BudleID 最強ってことを発見した。詳細はわかんねーけど、実行中のアプリはなんか、バンドルアイディーってものを持っていて、それで制御され得るらしい。
 つまり BundleID さえ握ってしまえば、アプリケーションを生かすも殺すも自由自在。そして BundleID とやらは、簡単に入手できるのであった。

 まずターゲットとなるアプリケーションを起動する。
 続いてターミナルで以下を実行する。


lsappinfo info -only bundleid アプリケーション名

 アプリケーション名っていうのは、メニューの、アップルマークの横に表示されるアプリケーションの名前である。実行すると、
com.なんとか.かんとか
 とかいう形式のものが返ってくる。例えばファインダーだったらcom.apple.finderだ。

 このようにして調べた BundleID で hs.application.find(hint) を使い、目的のアプリケーションが実行されているかどうかチェックするわけ。
 お目当てのアプリケーションが起動していないと、nilっいうのが返ってくる。
 これで、アプリケーションが起動しているかどうかを確認できる。

 起動していない場合は、
hs.application.launchOrFocusByBundleID(bundleID)
 という命令で起動できる。先述のバンドルアイディーでアプリケーションを起動するのだ。すでに起動している場合は最前面に出してくれる。
 これで、ユーザがアプリケーションを切り替えるたびに、BetterTouchTool が起動しているかどうかをチェックし、落ちていたら起動し直してくれるようになる。

 これを応用して、もうひとつの問題に取り組む。
 最近 Clipy というクリップボードの拡張アプリケーションが、ログインとともに起動してくれなくなった。Clipy の環境設定画面に、「ログイン時に起動」という項目があり、それにチェックを入れても効かない様子なのである。
 こういう場合は、Mac のシステム環境設定「ユーザとグループ」内のログイン項目に手動で Clipy を追加すれば解決するものと思われる。
 ここではあえてそれをせず、Hammerspoon で対処する。

🔨 init.lua

 こうしておけば、Hammerspoon の起動時に、Clipy の起動状況を確認して、起動してなければ立ち上げてくれるようになる。Hammerspoon が起動項目に入っていないと、あまり意味はないけれども。

 この記事は、以下の記事を参考にさせていただきました。

🔗 Hammerspoon で Evernoteの特定ページを開く – rochefort’s blog
🔗 【OSX】利用しているアプリケーションのBundle Identifierを調べる – Qiita

スポンサードリンク