Как сделать всплывающее окно/оповещение терминала Mac? Помощью AppleScript?


Я хочу, чтобы моя программа отображала предупреждение, уведомление, все, что отображает мой пользовательский текст. Как это делается? Кроме того, можно ли сделать один с несколькими кнопками, которые устанавливают переменную?

аналогично пакету: echo msgbox""<a.vbs&a.vbs

7 84

7 ответов:

использовать osascript. Например:

osascript -e 'tell app "Finder" to display dialog "Hello World"' 

замена "Finder" с любым приложением вы хотите. Примечание если приложение работает в фоновом режиме, в диалоговом окне будет отображаться в фоновом режиме. Чтобы всегда показывать на переднем плане, используйте "системные события"в качестве приложения:

osascript -e 'tell app "System Events" to display dialog "Hello World"'

подробнее о Mac OS X подсказки.

Если вы используете любую версию Mac OS X, которая имеет Центр уведомлений, вы можете использовать terminal-notifier камень. Сначала установите его (вам может понадобиться sudo):

gem install terminal-notifier

а потом просто:

terminal-notifier -message "Hello, this is my message" -title "Message Title"

см. также это OS X Daily post.

используйте эту команду для запуска уведомления центра уведомлений от терминала.

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

Это позволит восстановить фокус на предыдущее приложение и выйти из сценария, если ответ был пуст.

a=$(osascript -e 'try
tell app "SystemUIServer"
set answer to text returned of (display dialog "" default answer "")
end
end
activate app (path to frontmost application as text)
answer' | tr '\r' ' ')
[[ -z "$a" ]] && exit

Если вы сказали системные события для отображения диалогового окна, будет небольшая задержка, если он не был запущен раньше.

для получения документации о диалоге отображения откройте словарь стандартных дополнений в Редакторе AppleScript или см. AppleScript Language Guide.

и мои 15 центов. Один лайнер для терминала mac и т. д. просто установите MIN= на что угодно и сообщение

MIN=15 && for i in $(seq $(($MIN*60)) -1 1); do echo "$i, "; sleep 1; done; echo -e "\n\nMac Finder should show a popup" afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Look away. Rest your eyes"'

бонусный пример для вдохновения, чтобы объединить больше команд; это поставит mac в режим ожидания сна на сообщение тоже :) логин sudo необходим тогда, умножение как 60*2 в течение двух часов идет также

sudo su
clear; echo "\n\nPreparing for a sleep when timers done \n"; MIN=60*2 && for i in $(seq $(($MIN*60)) -1 1); do printf "\r%02d:%02d:%02d" $((i/3600)) $(( (i/60)%60)) $((i%60)); sleep 1; done; echo "\n\n Time to sleep  zzZZ";  afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Time to sleep zzZZ"'; shutdown -h +1 -s

двойники вопрос и ответ будет доступен в: https://superuser.com/questions/246353/how-to-make-the-terminal-do-a-pop-up-alert-in-osx

Я сделал скрипт, чтобы решить эту, которая составляет здесь. Вам не нужно никакого дополнительного программного обеспечения для этого. Установка:
brew install akashaggarwal7/tools/tsay
Использование:
sleep 5; tsay

Не стесняйтесь вносить свой вклад!