Как я могу добавить напоминания через командную строку?

18

Время от времени может быть полезно добавить некоторые напоминания в Reminders.app из командной строки - особенно потому, что они синхронизируются с iCloud. Есть ли способ сделать это?

Решение, которое не опирается на AppleScript, является предпочтительным : а) по причинам производительности (возможно, глупым) и б) решения AppleScript часто кажутся мне неуклюжими или слишком многословными.

myhd
источник
2
Почему вы предпочитаете не использовать AppleScript?
Даниил

Ответы:

9
osascript - title <<END
on run a
tell app "Reminders"
tell list "Reminders" of default account
make new reminder with properties {name:item 1 of a}
end
end
end
END

Вы также можете создать рабочий процесс Automator с помощью пустого действия «Создать элемент напоминания», а затем запустить его с помощью automator -i title test.workflow.

Смотрите также этот пост в Mac OS X Советы .

LRI
источник
Спасибо за ваш ответ. К сожалению, это не выполняется ни в сценарии оболочки, ни в редакторе сценариев. Что мне не хватает?
myhd
1
Либо добавьте #!/usr/bin/env bashв качестве первой строки и запустите chmod +x /path/to/script, либо запустите bash /path/to/script.sh. Или удалите первую и последнюю строки и сохраните их в AppleScript Editor.
Lri
1
Подсказка Automator сделала свое дело! В отличие от решения AppleScript, ему не нужно запускать Reminders.app, а это именно то, что я хотел.
myhd
14

Вот еще одна версия, которая позволяет вам установить заголовок, дату и время окончания с помощью аргументов командной строки.

#!/usr/bin/env bash                                                                                                               
# Make a new reminder via terminal script                                                                                         
# args: remind <title> <date> <time>                                                                                                                                                                                 

osascript - "$1" "$2" "$3" <<END                                                                                                        
on run argv                                                                                                                       
    set stringedAll to date (item 2 of argv & " " & item 3 of argv)                                                               
    tell application "Reminders"                                                                                                  
        make new reminder with properties {name:item 1 of argv, due date:stringedAll}                                             
    end tell                                                                                                                      
end run                                                                                                                           
END    

Таким образом, если вы назовете этот скрипт «напоминать» и дадите ему исполняемые привилегии (напоминание chmod 755), вы можете сделать это:

$ ./remind "Go to grocery store" 12/15/2013 10:00:00PM                              
renfredxh
источник
Это работает для меня, но как я могу добавить будильник. То есть, как сделать так, чтобы оно всплыло и напомнило мне дату и время напоминания? Как есть, у меня есть напоминание, но я не получаю уведомления.
GrouchyGaijin
2
tell application "Reminders"
    activate
    show list "Reminders"
end tell
set stringedDate to "12/11/2015"
set stringedHour to "10:00:00PM"
set stringedAll to date (stringedDate & " " & stringedHour)
tell application "Reminders" to tell list "Reminders" of default account to make new reminder with properties {name:"this is just test remainder", remind me date:stringedAll, due date:stringedAll, priority:1}
Калпеш Гамит
источник
1
Привет спасибо! Это работает только в системах, где английский является языком интерфейса пользователя. На других языках имена списков локализованы, например, «Напоминания» на немецком языке «Erinnerungen»
myhd
Этот пример на самом деле иллюстрирует использование «напоминать мне дату», а не «срок выполнения» выше. И «напомни мне дату» - это именно то, что нужно использовать, чтобы получить сигнал тревоги / оповещение.
Grrrr
2

Вот та же функциональность, что и вышеупомянутый AppleScript; но в JXA с ES6.

#!/usr/bin/env osascript -l JavaScript

const RemindersApp = Application('Reminders');

function run(argv) {
    [name, date, time] = argv;
    dueDate = new Date(date + " " + time);
    reminder = RemindersApp.Reminder({name: name, dueDate: dueDate});
    RemindersApp.defaultList.reminders.push(reminder);
}
Тони Лоттс
источник