AppleScript на поверку оказался довольно милым скриптовым движком, очень желавшим быть похожим на обычный человеческий язык.
Типовой скрипт выглядит как
tell application «TaskPaper»
tell front document
get name of selected entry
end tell
end tell
данная конструкция покажет строку, на которой сейчас стоит курсор в приложении. И все бы классно, да вот, за такой простотой иногда скрывается неудобство. Например, в моей довольно простой задаче была потребность получить дату у текущего проекта, прибавить один день и перескочить на следующий проект. Так вот, в AppleScript работа с датой довольно нетривиальная. Сейчас покажу две функции, и вы поймете почему.
on getDateFromText(dateText)
set vDate to null
set AppleScript‘s text item delimiters to {«-«}
if (count of text item of dateText) is 3 then
set vYear to text item 1 of dateText
set vMonth to text item 2 of dateText
set vDay to text item 3 of dateText
if (vYear > 1000) and (vMonth > 0 and vMonth < 13) and (vDay > 0 and vDay < 32) then
set vDate to current date
set year of vDate to (vYear as integer)
set month of vDate to vMonth as integer
set day of vDate to vDay as integer
set time of vDate to 0
end if
end if
return vDate
end getDateFromText
on getTextFromDate(vDate)
set dText to ((year of vDate) as text) & «-«
set dayText to (month of vDate as number) as text
if length of dayText is 1 then
set dayText to «0» & dayText
end if
set dText to dText & dayText & «-«
set dayText to (day of vDate as number) as text
if length of dayText is 1 then
set dayText to «0» & dayText
end if
return dText & dayText
end getTextFromDate
они делают именно то, о чем их название, зато как круто (код на ruby был бы в одну строку)!
Для чего нужно увлечение AppleScript? В самом частом случае – интеграция приложений с определенным, нужным только вам функционалом. Мне, например, потребовалось в TaskPaper (так как я уже полностью освоил его для Getting Results Agile Way), вести в одном файле, в котором помещается вся неделя, дела на каждый день, где каждый день – проект с называнием типа «2013-01-10» для 10 января. И обычно я фильтрую задачи на сегодня по текущей дате Cmd-L, но бывает довольно часто надо что-то перебросить на следующий день, или на предыдущий. И тогда я беру и фильтрую по 2013-01-11.
Теперь у меня появилось время и желание, дошли руки и я автоматизировал это процесс через Keyboard Maestro + AppleScript для TaskPaper. По нажатию Option+Up и Optoin+Down происходит инкремент или декремент даты 2013-01-10 и в строку поиска пуляется «project=2013-01-11», что фильтрует задачи на следующий день.
Также заскриптил, что Cmd+Option+Down добавляет к фильтру и этот и следующий день, что вообще удобнее некуда. С AppleScript можно делать очень мощные штуки.
Страшно удобно, всем рекомендую.