Paepoi

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

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

# 最終更新日 2023.10.09

macOS 14 Sonoma での動作確認と WebP 変換の追記
概要
Finder の拡張スクリプトはクイックアクションという手段もあります。
コンテキストメニューにあるアレに機能を追加できるんです。
こちらは AppleScript, JXA だけでなくシェルスクリプトも使えます。

Automator を起動し「新規書類」ボタンを押します。
クイックアクションを選択し「選択」ボタンを押します。
ワークフローが受け取る現在の項目は必要に応じて、自動のままでもかまわない。
「指定されたFinder項目を取得」のアクションをドラッグで配置します。
「シェルスクリプトを実行」又は「JavaScriptを実行」を配置。
入力の引渡し方法を「引数として」に変更する。
後は以下のようにスクリプトを書き名前を付けて保存。

img2/q_action.webp

スクリプト名がそのままメニューに出ます、日本語も使えます。
保存したアクションは以下に保存されますのでバックアップはそこから。
~/Library/Services
  • $@ や argv の引数はフルパスで渡ってきます
    入力の引き渡し方法は stdin がデフォルトなので「引数として」に変更を忘れずに
  • クイックアクションのシェルは初期化ファイルを読み込みしません
    パスを .zshrc 等で追加している場合は自前で読み込む必要があります
  • シェルを利用する場合のカレントディレクトリはルート(/)ですので注意
  • 自作コマンドを使うコマンドもありますのでそちらも参照

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

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

__MACOSX の無い ZIP 作成、アーカイブ名を指定するプロンプト付き (shell)
# zsh だと何故かエラーなので bash を指定、原因は調査中

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);
}

画像を WebP に変換 (shell + 自作コマンド)
# 自作の img2webp コマンドを使った方法です
# zsh の初期化ファイルを読み込まないのでドットコマンドで初期化する
. ~/.zprofile
. ~/.zshrc
img2webp "$@"

スクリーンショットを 72dpi の WebP に変換 (shell + 自作コマンド)
# 同上、自作コマンドをこんなふうに GUI から呼出できます
. ~/.zprofile
. ~/.zshrc
ss2webp "$@"

Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.