Existe-t-il un moyen d'afficher la sortie AppleScript dans la barre de menus?


8

Avant de lire plus loin: Je connais le majordome et les programmes similaires. Je recherche un moyen INTÉGRÉ de le faire sans application tierce.

Quoi qu'il en soit, j'ai écrit un AppleScript qui exécute une commande shell. Je veux afficher cette sortie dans la barre de menu en haut ... sans Butler, comment puis-je faire cela?


Étant donné qu'AppleScriptObjC fait partie de macOS (2014), il est possible d'utiliser son framework "Foundation" (y compris les méthodes NSMenu) pour réaliser ce qui n'était probablement pas possible en 2012.. . . . . Voir ma réponse ci-dessous sur Comment faire!
clemsam lang

Réponses:


2

En règle générale, sans un programme tiers, comme Growl, il n'y a aucun moyen intégré de le faire.

Cependant, vous pouvez écrire un script ou un autre programme tel que celui que j'ai trouvé ici qui vous fournit le service de menulet. Je suis sûr que l'intégration de Growl serait beaucoup plus facile à réaliser.


1

Il n'y a pas de méthode intégrée pour le faire dans OS X. Cependant, en utilisant Growl , vous pouvez avoir des notifications. Voici un exemple de script pour cela:

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

Cela devrait afficher ceci:

Et si vous avez également activé l'autre notification:

Des techniques plus avancées sont décrites ici.


1

Étant donné qu'AppleScriptObjC fait partie de macOS, il est possible d'utiliser son framework "Foundation" (y compris les méthodes NSMenu) pour réaliser ce qui n'était probablement pas possible en 2012.

J'ai trouvé un script intéressant pour créer des menus personnalisés à partir d'AppleScript; à partir de cela, j'ai extrait le code approprié pour placer du texte dans la barre de menus de macOS . En fait, il utilise juste le "titre" d'un menu pour insérer du contenu.

Afin de le démontrer, j'ai implémenté un script de dialogue très basique qui demande aux utilisateurs de saisir du texte (6 secondes d'attente) qui est ensuite affiché temporairement dans la barre de menus (5 secondes).
C'est ici:

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  

Ce code AppleScript peut être utilisé dans l'un de vos scripts. (Sa partie "dialogue" est optionnelle…)

user3439894 m'a aidé à fermer mon "menu", voir dernière ligne du script. Merci beaucoup!


Avez-vous par hasard un lien vers le code source d'origine dont vous avez tiré votre réponse? Ce serait bien de voir. Merci.
user3439894

1
Oui - il est dans le dernier gestionnaire de la réponse acceptée à cette question: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . J'ai cependant peur que ma dernière ligne (qui fonctionne la moitié du temps) que j'ai trouvée ailleurs - et adaptée - ne soit PAS correcte . . . . . . Je ne suis pas programmeur, j'ai donc besoin de plus de temps pour comprendre le code.
clemsam lang

1
BTW C'est une bonne réponse et sinon pour "il s'est écrasé plusieurs fois - à cause de" dealloc () "?" J'aurais +1. Un peu de réflexion cependant ... si vous utilisez ce code en tant qu'application AppleScriptObjC autonome, ce serait peut-être mieux, alors il StatusItem's dealloc()ne s'applique qu'à l'application AppleScriptObjC et non à l'éditeur de script et le plante accidentellement.
user3439894

FWIW La première set myText to ...ligne de code , la display dialog commande one before ne fait vraiment rien en fonction du code qui en résulte et n'est donc pas du tout nécessaire. En d' autres termes, la seule occasion valeur de myTextest celle qui est attribué après la display dialog commande est exécutée et pourquoi la mise à quoi que ce soit avant la la display dialog commande est utilisé de codage et non nécessaire dans le contexte du Code actuellement présenté.
user3439894

1
Au lieu de StatusItem's dealloc()ou StatusItem's setTitle:""j'utiliserais:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.