【Mac】第二候補アプリでファイルを開く
例えば音声ファイルをダブルクリックすると、デフォルトでは iTunes で開かれる。
iTunes は音声ファイルをコピーしてインデックスし、再生リストに加えてくれる。
これはこれで、便利なので、「ダブルクリック > iTunes」という、デフォルトのアプリケーションの設定は残しておきたい。
しかし、iTunes に登録せず、ちょっとその音声ファイルを聞いてみたい。
という場合がある。
多くはスペースキーをポンと押してクイックルックで聞くだろう。
そうではなく、そのファイルを QuickTime Player で聞きたいんだ、という場合、これもあるはずだ。右クリックから、「このアプリケーションで開く」を使うことがほとんどだと思う。
たくさん出てくる「このアプリケーションで開く」の候補から、お目当てのアプリケーションを捜してやっと再生、というのはいかにもダルい。
これを省力化できないか、という話である。
Automator さんを使う
アプリケーションフォルダ内のユーティリティフォルダに入っている Automator は、オートマターと読むらしい。
作業の自動化に役に立つアプリだ。
Automator では、ファイルをシェルスクリプトに引き渡すことが出来る。Mac には「open」というコマンドがあるので、組み合わせれば目的のブツが作れそうだ。
ここでは「altOpen.app」というものを考えてみた。
音声ファイルをダブルクリックすると iTunes で開くが、altOpen では QuickTime Player で開く。
html ファイルをダブルクリックすると Safari で開くが、altOpen では CotEditor で開く。
画像ファイルをダブルクリックすると、プレビュー.app で開くが、altOpen では Pixelmator で開く。
さっそく Automator を起動して「新規書類」を作成してみる。
上のようなダイアログが出てくるので、堂々とアプリケーションを選択する。
Automator のアプリケーションは、ファイルやフォルダなどをドラッグ&ドロップで入力し、なんらかの処理をしてから出力する、という、形式だ。むかしドロップレットと呼ばれていたものに近いのではなかろうか。
今回の場合は、音声ファイルや html ファイルを入力し、拡張子からファイルの種類を判定し、決めておいたアプリケーションで出力する。
メインとなる処理はシェルスクリプトを使うので、一番左の欄「ユーティリティ」にある「シェルスクリプトを実行」を右欄にドラッグ&ドロップする。
右上の「入力の引き渡し方法」を「引数として」に設定する。
すると、以下のような構文があらわれる。
for f in "$@"
do
echo "$f"
done
複数のファイルをドロップした場合、forループでひとつひとつ、ファイルを処理するらしい。
"$@"
は特殊変数で、すべての引数を展開する。
つまり do と done の間にスクリプトを書けば、ドロップしたファイルすべてが処理されるはずだ。(echo "$f"
は削除する)
シェルスクリプトを書く
拡張子によるファイルの判定に使えそうな構文は case 文だ。
前置きが長かったが、実際に書いたのは、以下のような簡単なスクリプトである。
for f in "$@"
do
case "$f" in
*.m4a|*.mp3)
open -a "QuickTime Player.app" "$f"
;;
*.txt|*.html|*.htm)
open -a CotEditor.app "$f"
;;
*.png|*.jpg)
open -a Pixelmator.app "$f"
;;
*)
;;
esac
done
exit 0
open は macOS 固有のコマンド。
open -a アプリケーション名 ファイル名
で、開くアプリケーションを指定できる。
アプリケーション名に空白が入る場合、"QuickTime Player.app"
のようにクオートで囲む。
以上のスクリプトを書きこんで、アプリケーション形式で保存してみる。
これで出来上がりだ。アプリケーションが保存されている。
この altOpen.app は Finder のツールバーに置いて使いたい。
ツールバーへの登録は、command キーを押しながら、アプリ本体をツールバーへとドラッグする。
さっそく試してみる。
うまく動作してくれるようだ。
Automator で保存したアプリケーションは、Automator で編集できる。ファイルメニューの「開く」から開けば、さらに改良を加えたり、問題を修正したり気軽におこなる。
ファイルの引数をともなうシェルスクリプトは、Automator をもちいて、ドラッグ&ドロップできる形にする方向を考えてみてもいいかもしれない。