Чи є спосіб відображення AppleScript у меню?


8

Перш ніж читати далі: я знаю про butler та подібні програми. Я шукаю BUILT-IN спосіб зробити це без сторонньої програми.

У всякому разі, я написав AppleScript, який виконує команду shell. Я хочу відобразити цей вихід у меню вгорі ... без Батлера, як це зробити?


Оскільки AppleScriptObjC є частиною macOS (2014), можна використовувати його "Фонд" (включаючи методи NSMenu), щоб досягти того, що, можливо, не було можливим у 2012 році. . . . . Дивіться мою відповідь нижче про те, як зробити це!
clemsam lang

Відповіді:


2

Взагалі, без сторонньої програми, такої як 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 допоміг закрити моє "меню", дивіться останній рядок сценарію. Дуже дякую!


Чи випадково у вас є посилання на оригінальний вихідний код, з якого ви отримали свою відповідь? Було б непогано бачити. Дякую.
користувач3439894

1
Так - це в останньому обробник загальноприйнятої відповіді на це питання: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Я боюся, що мій останній рядок (працює половину часу), який я знайшов десь в іншому місці - і адаптований - НЕ коректний . . . . . . Я не програміст, тому мені потрібно ще трохи часу, щоб зрозуміти код.
clemsam lang

1
BTW Це гарна відповідь, а якби не "кілька разів вийшов з ладу - через" dealloc () "?" Я мав би +1. Деяка їжа для роздумів ... якщо ви використовуєте цей код як окремий додаток AppleScriptObjC, можливо, це було б і краще, тоді StatusItem's dealloc()це застосовне лише до програми AppleScriptObjC, а не до редактора сценаріїв і випадково виходить з ладу.
користувач3439894

FWIW Перший set myText to ...рядок коду , display dialog команда перед командою, дійсно нічого не робить на основі коду, що випливає, і тому зовсім не потрібен. Іншими слова, єдині використовується значення в myTextтому , що , який присвоюється після того , як display dialog команда буде працювати і чому встановити його на що - або до в display dialog команді не використовується кодування і немає необхідності в контексті коду в даний час представлені.
користувач3439894

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.