Paepoi

Paepoi » macOS Tips » macOS をクイックアクションで拡張

macOS をクイックアクションで拡張

# 最終更新日 2019.10.13

Catalina での動作確認、及び 72dpi 変換を JXA 拡張に移動。
ZIP 作成でキャンセルしても zip ファイルが作成されていたのを修正。

概要
Finder の拡張スクリプトはクイックアクションという手段もあります。
こちらは AppleScript, JXA だけでなくシェルスクリプトも使えます。

Automator を起動し「新規書類」ボタンを押します。
クイックアクションを選択し「選択」ボタンを押します。
「指定されたFinder項目を取得」のアクションをドラッグで配置します。
「シェルスクリプトを実行」又は「JavaScriptを実行」を配置。
「シェルスクリプトを実行」の場合は入力の引渡し方法を「引数として」にする。
後は以下のようにスクリプトを書き名前を付けて保存。

img/qa02.png

スクリプト名がそのままメニューに出ます、日本語も使えます。
Safari や TextEdit 等でも使えるようです。
保存したアクションは以下に保存されます。
~/Library/Services
$@ や argv の引数はフルパスで渡ってきます。
シェルを利用する場合のカレントディレクトリはルート(/)です、注意。

Finder での例
実行パーミッションを GUI で切り換える (sh)
for name in "$@"; do
    [ -x $name ] && chmod -x $name || chmod +x $name
done

拡張子を消したスクリプト等を一発で Atom にて開く (sh)
open -a Atom "$@"

__MACOSX の無い ZIP 作成、アーカイブ名を指定するプロンプト付き (sh)
dpath=`dirname "$1"`
cd $dpath
dname=`basename $dpath`

res=`osascript -e "set result to display dialog \"Archive Name ?\" default answer \"$dname\"
text returned of result"`

if [[ -n $res ]]; then
    for f in "$@"; do
    	s=`basename $f`
    	param+=" $s"
    done
    zip -r $res.zip $param
fi

選択したファイルのフルパスをクリップボードにコピー (JXA)
ObjC.import("Cocoa");
function run(argv) {
    let s = argv.join('\n');
    let clipboard = $.NSPasteboard.generalPasteboard;
    clipboard.clearContents;
    clipboard.setStringForType($(s), $.NSPasteboardTypeString);
}
Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.