Есть ли способ отображения вывода AppleScript в строке меню?


8

Прежде чем читать дальше: я знаю про дворецкого и подобные программы. Я ищу встроенный способ сделать это без стороннего приложения.

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


Поскольку AppleScriptObjC является частью macOS (2014), можно использовать его основу (включая методы NSMenu) для достижения того, что, вероятно, было невозможно в 2012 году. , , , , Смотрите мой ответ ниже на How-to-do-it!
Clemsam Lang

Ответы:


2

Как правило, без сторонней программы, такой как Growl, не существует встроенного способа сделать это.

Тем не менее, вы можете написать скрипт или другую программу, такую ​​как я нашел здесь, которая предоставляет вам сервис меню. Я уверен, что интеграция Growl будет гораздо проще осуществить.


1

В OS X нет встроенного способа сделать это. Однако, используя Growl , вы можете получать уведомления. Вот пример сценария для этого:

--Make sure Growl is running
tell application "System Events"
    set isRunning to (count of (every process whose bundle identifier is "com.Growl.GrowlHelperApp")) > 0
end tell

if isRunning then
    tell application id "com.Growl.GrowlHelperApp"
        set the allNotificationsList to ¬
            {"Test Notification", "Another Test Notification"}
        --Notifications can be enabled in System Preferences>Growl>Applications>Display Options
        set the enabledNotificationsList to ¬
            {"Test Notification"}
        register as application ¬
            "Growl AppleScript Sample" all notifications allNotificationsList ¬
            default notifications enabledNotificationsList ¬
                    -- Set the icon. You can use any icon from any application
            icon of application "AppleScript Editor"

        notify with name ¬
            "Test Notification" title ¬
            "Test Notification" description ¬
            "This is a test AppleScript notification." application name "Growl AppleScript Sample"

        notify with name ¬
            "Another Test Notification" title ¬
            "Another Test Notification :) " description ¬
            "Alas — you won't see me until you enable me..." application name "Growl AppleScript Sample"

    end tell
end if

Это должно отобразить это:

И если у вас включено другое уведомление:

Более продвинутые методы описаны здесь.


1

Поскольку AppleScriptObjC является частью macOS, можно использовать его основу (включая методы NSMenu) для достижения того, что, вероятно, было невозможно в 2012 году.

Я нашел интересный скрипт для создания пользовательских меню из AppleScript; Из этого я извлек подходящий код для размещения текста в строке меню macOS . Фактически он использует только «заголовок» меню для вставки некоторого контента.

Чтобы продемонстрировать это, я реализовал очень простой диалоговый скрипт, который запрашивает у пользователя ввод текста (ожидание 6 секунд), который затем временно отображается в строке меню (5 секунд).
Вот:

use framework "Foundation"
use framework "AppKit"
use scripting additions
property StatusItem : missing value
property newMenu : class "NSMenu"

display dialog "Write something:" default answer "" giving up after 6
set myText to text returned of the result
if myText is "" then set myText to "TOOOOO slow … try again !"
set myText to ">>    " & myText & "    <<"

set bar to current application's NSStatusBar's systemStatusBar
set StatusItem to bar's statusItemWithLength:-1.0
StatusItem's setTitle:myText
set newMenu to current application's NSMenu's alloc()'s initWithTitle:"Custom"
StatusItem's setMenu:newMenu

delay 5
current application's NSStatusBar's systemStatusBar()'s ¬
        removeStatusItem:StatusItem  

Этот код AppleScript можно использовать в любом вашем скрипте. (Его «диалоговая» часть необязательна…)

user3439894 помог с закрытием моего "меню", см. последнюю строку скрипта. Большое спасибо!


У вас случайно есть ссылка на исходный код, из которого вы получили свой ответ? Было бы приятно увидеть. Спасибо.
user3439894

1
Да - это последний обработчик принятого ответа на этот вопрос /programming/29168474/creating-a-simple-menubar-app-using-applescript. , , , , Я боюсь, однако, что моя последняя строка (работает половину времени), которую я нашел где-то еще - и адаптировал - НЕ верна . , , , , , Я не программист, поэтому мне нужно больше времени для понимания кода.
Clemsam Lang

1
Кстати, это хороший ответ, и если бы не "он несколько раз падал - из-за" dealloc () "?" Я бы +1. Тем не менее, есть некоторая пища для размышлений ... если вы используете этот код в качестве отдельного приложения AppleScriptObjC, возможно, это было бы лучше, тогда StatusItem's dealloc()он применим только к приложению AppleScriptObjC, а не к редактору сценариев и случайно его вылетает.
user3439894

FWIW Первая set myText to ...строка кода , то один , прежде чем display dialog команда действительно ничего не делает на основе последующего кода и , следовательно, вообще не требуется. Другими слова, единственные используемое значение в myTextтом , что , который присваивается после того , как display dialog команда будет работать и почему установить его на что - либо до в display dialog команде не используется кодирование и нет необходимости в контексте кода в настоящее время представлены.
user3439894

1
Вместо StatusItem's dealloc()или StatusItem's setTitle:""я бы использовал:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.