Paepoi » macOS Tips » macOS アプリを JXA (AppleScript) で拡張
macOS アプリを JXA (AppleScript) で拡張
# 最終更新日 2020.01.25
Terminal や Atom で開くのは URL でもイケると解ったので書き換え。
sh 等のスクリプトでも実行パーミッションを付ければ使えると解ったので例を追記。
[メニューバーにスクリプトメニューを表示] にチェックを入れます。
メニューに表示されたアイコンをクリックするとスクリプトメニューが出る。
[スクリプトフォルダを開く] で開いたディレクトリに *.scpt か *.js を入れます。
ちなみにパスは以下です。
*.js の場合はシバンと実行パーミッションを忘れずに。
*.scpt なら実行パーミッションは不要です。
実は Python や sh でも実行パーミッションにて普通に使えます。
ただし選択アイテム等は得ることができませんので下記みたいな使い方で。
Retina Display ではスクリーンショットが 144dpi になる。
72dpi に変換し '72dpi-' の接頭子を付けて別名保存する (sh)
端末を使わずに選択ファイルに実行パーミッションを付ける。
__MACOSX の無い ZIP アーカイブの作成
プロンプトを出してアーカイブ名を決められるオマケ付き
デジカメからコピーした画像等のファイル名を全部小文字に変更
よく開くけど面倒なディレクトリを一発で開く (Quick Action)
同上 (アプリの plist)
現在 Finder で開いているディレクトリから端末を開始
Terminal や Atom で開くのは URL でもイケると解ったので書き換え。
sh 等のスクリプトでも実行パーミッションを付ければ使えると解ったので例を追記。
概要
拡張スクリプトを有効にするには Script Editor.app の設定から[メニューバーにスクリプトメニューを表示] にチェックを入れます。
メニューに表示されたアイコンをクリックするとスクリプトメニューが出る。
[スクリプトフォルダを開く] で開いたディレクトリに *.scpt か *.js を入れます。
ちなみにパスは以下です。
# 最後の Finder 等がアプリ名 ~/Library/Scripts/Applications/Finder
*.js の場合はシバンと実行パーミッションを忘れずに。
*.scpt なら実行パーミッションは不要です。
実は Python や sh でも実行パーミッションにて普通に使えます。
ただし選択アイテム等は得ることができませんので下記みたいな使い方で。
Finder での例
Windows の「送る」のように使う(Atom.app での例)
#!/usr/bin/osascript let uri = Application('Finder').selection()[0].url(); let app = Application.currentApplication(); app.includeStandardAdditions = true; app.doShellScript(`open -a Atom ${uri}`); /* URL 未対応アプリの場合 let fullpath = decodeURI(Application('Finder').selection()[0].url()).slice(7); app.doShellScript(`open -a AppName ${fullpath}`); */
Retina Display ではスクリーンショットが 144dpi になる。
72dpi に変換し '72dpi-' の接頭子を付けて別名保存する (sh)
#!/usr/bin/osascript // change72dpi.js let app = Application.currentApplication(); app.includeStandardAdditions = true; let selections = Application('Finder').selection(); for (let item of selections) { if (item.nameExtension() === 'png') { let fullPath = decodeURI(item.url()).slice(7); let pos = fullPath.lastIndexOf('/'); let path = fullPath.substr(0, pos); let name = item.name(); app.doShellScript(`cd '${path}' src_width=$(sips -g pixelWidth '${name}' | cut -s -d ':' -f 2 | cut -c 2-) width=$(($src_width / 2)) sips -s dpiHeight 72.0 -s dpiWidth 72.0 -Z $width '${name}' --out '72dpi-${name}'`); } };
端末を使わずに選択ファイルに実行パーミッションを付ける。
#!/usr/bin/osascript let app = Application.currentApplication(); app.includeStandardAdditions = true; let selections = Application('Finder').selection(); for (let item of selections) { let path = decodeURI(item.url()).slice(7); app.doShellScript(`chmod +x ${path}`); };
__MACOSX の無い ZIP アーカイブの作成
プロンプトを出してアーカイブ名を決められるオマケ付き
#!/usr/bin/osascript // create_zip.js (JXA Finder Script) // Zip compress without '__MACOSX' // and Ask ZIPFILE name prompt let app = Application.currentApplication(); app.includeStandardAdditions = true; // get pwd let finder = Application('Finder'); let uri = finder.finderWindows()[0].target().url(); let pwd = decodeURI(uri).slice(7, uri.length-1); // get dirname let dir = pwd.slice(pwd.lastIndexOf('/')+1); // ask Archive Name (Default: DirName) let name = app.displayDialog('Archive Name ?', { defaultAnswer:`${dir}` }).textReturned; // create command line if (name != "") { // let sh = `tar -zcvf ${name}.tar.gz`; // tar.gz let sh = `zip -r ${name}.zip`; let selections = finder.selection(); for (let item of selections) { sh += ` ${item.name()}`; }; app.doShellScript(`cd ${pwd} ${sh}`); }
デジカメからコピーした画像等のファイル名を全部小文字に変更
#!/usr/bin/osascript let selections = Application("Finder").selection(); for (let item of selections) { // Get Property let s = item.name(); // Set Property item.name = s.toLowerCase(); };
よく開くけど面倒なディレクトリを一発で開く (Quick Action)
#!/bin/sh open ~/Library/Services
同上 (アプリの plist)
#!/bin/sh open ~/Library/Preferences
現在 Finder で開いているディレクトリから端末を開始
#!/usr/bin/osascript let app = Application.currentApplication(); app.includeStandardAdditions = true; let uri = Application('Finder').finderWindows()[0].target().url(); app.doShellScript(`open -a Terminal "${uri}"`);
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.