В Mac OS X Yosemite помимо кошмарного AppleScript добавлена поддержка JavaScript. Теперь для написания различной автоматизации наконец можно воспользоваться более-менее вменяемым языком программирования: из JavaScript будет доступно все то, что раньше было доступно из AppleScript.
Одно «но»: документирован джаваскриптовый API пока практически никак — на сайте Apple есть единственная страничка с довольно скудным описанием. И готовых скриптов в сети пока что очень мало.
Восполним этот пробел несколькими примерами, на которых хорошо видно некоторые неочевидные вещи.
Проверка: существует ли файл или папка
function file_exists(name) {
try {
return Application('System Events').files.byName(name).exists()
} catch (e) {
return false;
}
}
function folder_exists(name) {
try {
return Application('System Events').folders.byName(name).exists()
} catch (e) {
return false;
}
}
file_exists('~/Desktop/exists.txt'); // true
file_exists('~/Desktop/no-exists.txt'); // false
folder_exists('/Library'); // true
folder_exists('/somethingelse'); // false
Гист на гитхабе.
Особенность вызовов files.byName
и folders.byName
в том, что если вместо файла окажется существующий каталог (или наоборот: файл вместо каталога), то будет сгенерирована ошибка. Поэтому вызовы обернуты в try {} catch(e) {}
.
Диалоговые окна
var result,
my_app = Application.currentApplication();
my_app.includeStandardAdditions = true;
result = my_app.displayDialog(
'What is your name',
{
defaultAnswer: 'John Doe'
}
);
my_app.displayNotification (
'Nice to see you',
{
withTitle: 'Cool script',
subtitle: 'Hello, ' + result.textReturned + '!'
}
);
result = my_app.displayDialog(
'Choose Red or Blue (10 seconds to answer)',
{
buttons: ['Red', 'Blue'],
defaultButton: 'Red',
givingUpAfter: 10
}
);
my_app.say('You choose ' + (result.buttonReturned === '' ? 'Red' : result.buttonReturned));
Гист на гитхабе.
Две особенности. Во-первых доступиться к самому себе скрипт может через Application.currentApplication()
.
Во вторых, чтобы заработали диалоговые окна и прочее необходимо установить свойство приложения includeStandardAdditions = true
. Подробное описание библиотеки StandardAdditions
доступно в Script Editor, меню File > Open Dictionary
или Cmd+Shift+O
.
Вывести ссылки на основные библиотеки можно через меню Window > Library
или с клавиатуры Cmd+Shift+L
.
Работа с iTunes
var my_app = Application.currentApplication(),
itunes = new Application('iTunes'),
selection;
my_app.includeStandardAdditions = true;
itunes.includeStandardAdditions = true;
selection = itunes.selection();
if (selection.length > 0) {
for (var i in selection) {
itunes.play(selection[i]);
my_app.displayNotification (
selection[i].artist() + ' is my favorite artist',
{
withTitle: 'Cool jukebox',
subtitle: 'Now playing: ' + selection[i].name()
}
);
delay(7);
}
} else {
itunes.activate();
itunes.displayDialog('Please select a few tracks in iTunes and try again!');
}
Гист на гитхабе.
Настройка Script Editor
Указать язык можно в правом верхнем углу редактора:
Либо в настройках Script Editor указать JavaScript в качестве Default Language.