Automator JXA and shell

サービスがいいMacBookにしておく – ザリガニが見ていた…。

Automator ってコンテキストメニューが作れるんだ!
この方法なら筆者が書いた Finder Script より簡単にシェルが使える。
macOS アプリを JXA (AppleScript) で拡張 – L’Isola di Niente
いや Nautilus スクリプトと同じように使えるというべきか。

では早速。
Mojave ではサービスではなく「クイックアクション」になっています。

リンク先ではテキストの選択だけど Finder での選択もイケそう。
「Finder 項目を表示」を挟む必要があるみたい。
早速同じ AppleScript を試すと、、、、、

あぁ、やはりパス名は古い mac 形式、いつものことだ。
しかしこの input は CR 改行区切りの文字列なのか配列なのか?
JXA でないと筆者は解らないので「JavaScript を実行」に置き換えて。

function run(input, parameters) {
	
	// Your script goes here
	let app = Application.currentApplication();
	app.includeStandardAdditions = true;
	//let s = input.toString().split('\r').join('\n');
	let s = input.join('\n');
	app.displayAlert(s);

	//return input;
}

うん、JXA だと input は JavaScript の配列になるようだ。
こっちだと UNIX パスになるな、何故かはワカンネ。
最後の return は次に続くチェーンが無いなら不要みたい。

んで、名前を付けて保存すると。

~/Library/Services/

以下に保存される、*.workfrow はディレクトリのようだ。
中にある info.plist の NSMenuItem キーからメニューを変名できる。

まて、よく見ると「シェルスクリプトを実行」のアクションがある。
AppleScript, JXA だけでなく直接 bash も使えるようで。
入力を「引数として」の選択肢もある、これならどうなる?

ところでカレントディレクトリは又してもルートなんだろうか。
と思って調べたら $HOME だった、どっちにしろ移動しなきゃ。
ファイル実行ではないので $0 では調べられない、と最初思ったけど。
ファイルを選択してコンテキストメニューなんだから $1 でいいヤン。

cd `dirname $1`
echo "$@" > out.txt

で保存して Finder で何か選択して実行。
選択したファイルがある位置に UNIX 形式パスが IFS 区切りでリダイレクトされるのが確認できるはず。
これでシェルを簡単に使えるようになるのでお好きなコマンドを。
JXA とチェーンを繋げればかなり高度な自動化ができそう。