Czy istnieje sposób wyświetlania danych wyjściowych AppleScript w pasku menu?

8

Przed dalszym czytaniem: Wiem o lokaju i podobnych programach. Szukam wbudowanego sposobu, aby to zrobić bez aplikacji innej firmy.

W każdym razie napisałem AppleScript, który uruchamia polecenie powłoki. Chcę wyświetlić te dane wyjściowe w pasku menu u góry ... bez Butlera, jak mogę to zrobić?

FALL3N
źródło
Ponieważ AppleScriptObjC jest częścią macOS (2014), możliwe jest użycie jego frameworku „Foundation” (w tym metod NSMenu), aby osiągnąć to, co prawdopodobnie nie było możliwe w 2012 roku. . . . . Zobacz moją odpowiedź poniżej, jak to zrobić!
clemsam lang

Odpowiedzi:

2

Ogólnie rzecz biorąc, bez programu stron trzecich, takiego jak Growl, nie ma wbudowanej możliwości, aby to zrobić.

Możesz jednak napisać skrypt lub inny program, taki jak ten, który tu znalazłem , który zapewnia usługę menultu dla Ciebie. Jestem pewien, że integracja z Growl byłaby znacznie łatwiejsza do osiągnięcia.

Stu Wilson
źródło
1

Nie ma wbudowanego sposobu, aby to zrobić w OS X. Jednak za pomocą Growl możesz otrzymywać powiadomienia. Oto przykładowy skrypt:

--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

To powinno wyświetlić:

A jeśli masz także włączone inne powiadomienie:

Bardziej zaawansowane techniki opisano tutaj.

daviesgeek
źródło
1

Ponieważ AppleScriptObjC jest częścią macOS, możliwe jest użycie jego frameworku „Foundation” (w tym metod NSMenu), aby osiągnąć to, co prawdopodobnie nie było możliwe w 2012 roku.

Znalazłem interesujący skrypt do tworzenia niestandardowych menu z poziomu AppleScript; z tego wyodrębniłem odpowiedni kod do umieszczenia tekstu w pasku menu macOS . W rzeczywistości używa tylko „tytułu” menu do wstawiania zawartości.

Aby to zademonstrować, zaimplementowałem bardzo prosty skrypt dialogowy, który prosi użytkowników o wpisanie tekstu (oczekiwanie 6 sekund), który jest następnie tymczasowo wyświetlany na pasku menu (5 sekund).
Oto on:

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  

Tego kodu AppleScript można używać w dowolnym skrypcie. (Część „dialogowa” jest opcjonalna…)

user3439894 pomógł w zamknięciu mojego „menu”, patrz ostatni wiersz skryptu. Wielkie dzięki!

clemsam lang
źródło
Czy przypadkiem masz link do oryginalnego kodu źródłowego, z którego otrzymałeś odpowiedź? Byłoby miło to zobaczyć. Dzięki.
user3439894,
1
Tak - to w ostatnim obsługi zaakceptowanej odpowiedzi na to pytanie: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Obawiam się jednak, że moja ostatnia linia (działa przez połowę czasu), którą znalazłem gdzie indziej - i dostosowałem - NIE jest poprawna . . . . . . Nie jestem programistą, więc potrzebuję więcej czasu na zrozumienie kodu.
clemsam lang
1
BTW To ładna odpowiedź, a jeśli nie „kilka razy się zawiesiła - z powodu„ dealloc () ”? Miałbym +1. Trochę do przemyślenia ... jeśli użyjesz tego kodu jako samodzielnej aplikacji AppleScriptObjC, być może byłoby to lepsze, to StatusItem's dealloc()ma zastosowanie tylko do aplikacji AppleScriptObjC, a nie edytora skryptów i przypadkowego awarii.
user3439894,
FWIW Pierwszy set myText to ...wiersz kodu , ten przed display dialog komendą, naprawdę nie robi nic w oparciu o kod wynikowy i dlatego nie jest wcale potrzebny. Innymi słowy, używane tylko wartość stanowi myTextto taka, która jest przypisana po display dialog komenda jest prowadzony i dlaczego ustawienie go do niczego przed tym display dialog poleceniu jest używany do kodowania i nie jest konieczne w kontekście kodu aktualnie prezentowanego.
user3439894,
1
Zamiast StatusItem's dealloc()lub StatusItem's setTitle:""current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
użyłbym