Maksym Prokopov personal blog
Idea is a something worth sharing

Скриптинг на AppleScript

11.01.2013

Reading time: 3 min.

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 можно делать очень мощные штуки.

Страшно удобно, всем рекомендую. 

 

Куча AppleScript для TaskPaper