C'è un modo per visualizzare l'output di AppleScript nella barra dei menu?


8

Prima di leggere oltre: conosco maggiordomo e programmi simili. Sto cercando un modo INTEGRATO per farlo senza un'app di terze parti.

Comunque, ho scritto un AppleScript che esegue un comando shell. Voglio visualizzare quell'output nella barra dei menu in alto ... senza Butler come posso farlo?


Poiché AppleScriptObjC fa parte di macOS (2014), è possibile utilizzare il suo framework "Foundation" (inclusi i metodi di NSMenu) per ottenere ciò che probabilmente non era possibile nel 2012.. . . . . Vedi la mia risposta qui sotto su Come fare!
Clemsam Lang

Risposte:


2

Come generalità, senza un programma di terze parti, come Growl, non esiste un modo per farlo.

Tuttavia, potresti scrivere uno script o un altro programma come quello che ho trovato qui che fornisce il servizio di menu per te. Sono sicuro che l'integrazione di Growl sarebbe molto più facile da realizzare.


1

Non esiste un modo integrato per farlo in OS X. Tuttavia, usando Growl , puoi ricevere notifiche. Ecco uno script di esempio per questo:

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

Questo dovrebbe mostrare questo:

E se hai abilitato anche l'altra notifica:

Le tecniche più avanzate sono descritte qui.


1

Poiché AppleScriptObjC fa parte di macOS, è possibile utilizzare il suo framework "Foundation" (inclusi i metodi di NSMenu) per ottenere ciò che probabilmente non era possibile nel 2012.

Ho trovato uno script interessante per creare menu personalizzati all'interno di AppleScript; da questo ho estratto il codice adatto per posizionare il testo nella barra dei menu di macOS . In realtà usa solo un "titolo" di menu per inserire del contenuto.

Per dimostrarlo, ho implementato uno script di dialogo molto semplice che richiede agli utenti l'immissione di testo (in attesa di 6 secondi) che viene quindi temporaneamente visualizzato nella barra dei menu (5 secondi).
Ecco qui:

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  

Questo codice AppleScript può essere utilizzato in qualsiasi tuo script. (La sua parte "finestra di dialogo" è facoltativa ...)

user3439894 mi ha aiutato a chiudere il mio "menu", vedere l'ultima riga dello script. Molte grazie!


Per caso hai un link al codice sorgente originale da cui hai ricavato la tua risposta? Sarebbe bello da vedere. Grazie.
user3439894

1
Sì - è l'ultimo gestore della risposta accettata a questa domanda: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Temo però che la mia ultima riga (funziona metà del tempo) che ho trovato da qualche altra parte - e adattato - NON sia corretta . . . . . . Non sono un programmatore, quindi ho bisogno di più tempo per capire il codice.
Clemsam Lang,

1
A proposito, è una bella risposta e se non per "si è schiantato alcune volte - a causa di" dealloc () "?" Avrei +1. Qualche spunto di riflessione però ... se usi questo codice come app AppleScriptObjC autonoma, forse sarebbe meglio, allora StatusItem's dealloc()è applicabile solo all'app AppleScriptObjC e non a Script Editor e si blocca accidentalmente.
user3439894

FWIW La prima set myText to ...riga di codice , quella prima del display dialog comando non fa davvero nulla in base al codice che segue e quindi non è affatto necessaria. In altre parole, l'unico utilizzato il valore di myTextè quella che viene assegnato dopo che il display dialog comando di viene eseguito e perché impostandolo su qualsiasi cosa prima del il display dialog comando è inutilizzato codifica e non necessaria nel contesto del codice attualmente presentata.
user3439894

1
Invece di StatusItem's dealloc()o StatusItem's setTitle:""current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
userei
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.