L'Isola di Niente
L'Isola di Niente » macOS Tips » macOS アプリを JXA (AppleScript) で拡張

macOS アプリを JXA (AppleScript) で拡張

# 最終更新日 2019.04.07

概要
拡張スクリプトを有効にするには Script Editor.app の設定から
[メニューバーにスクリプトメニューを表示] にチェックを入れます。

img/se.png

メニューに表示されたアイコンをクリックするとスクリプトメニューが出る。
[スクリプトフォルダを開く] で開いたディレクトリに *.scpt か *.js を入れます。

img/finder_menu.png

*.js の場合はシバンと実行パーミッションを忘れずに。
*.scpt なら実行パーミッションは不要です。

Finder での例
端末を使わずに選択ファイルに実行パーミッションを付ける。
#!/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
// 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();
};

現在 Finder で開いているディレクトリから端末を開始
#!/usr/bin/osascript

let app = Application.currentApplication();
app.includeStandardAdditions = true;

let uri = Application('Finder').finderWindows()[0].target().url();
let path = decodeURI(uri).slice(7);
app.doShellScript(`open -a Terminal "${path}"`);

Windows の「送る」のように使う(Visual Studio Code.app での例)
#!/usr/bin/osascript

let selections = Application('Finder').selection();
let fullpath = decodeURI(selections[0].url()).slice(7);

let app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript(`open -a "Visual Studio Code" ${fullpath}`);

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