Gibt es eine Möglichkeit, die AppleScript-Ausgabe in der Menüleiste anzuzeigen?


8

Bevor ich weiter lese: Ich kenne mich mit Butler und ähnlichen Programmen aus. Ich suche nach einer eingebauten Möglichkeit, dies ohne eine Drittanbieter-App zu tun.

Wie auch immer, ich habe ein AppleScript geschrieben, das einen Shell-Befehl ausführt. Ich möchte diese Ausgabe in der Menüleiste oben anzeigen ... ohne Butler, wie kann ich das tun?


Da AppleScriptObjC Teil von macOS (2014) ist, ist es möglich, das "Foundation" -Framework (einschließlich der Methoden von NSMenu) zu verwenden, um das zu erreichen, was 2012 wahrscheinlich nicht möglich war. . . . . Siehe meine Antwort unten auf How-to-do-it!
Clemsam Lang

Antworten:


2

Im Allgemeinen gibt es ohne ein Programm eines Drittanbieters wie Growl keine eingebaute Möglichkeit, dies zu tun.

Sie können jedoch ein Skript oder ein anderes Programm wie das hier gefundene schreiben , das den Menulettdienst für Sie bereitstellt. Ich bin sicher, dass die Growl-Integration viel einfacher zu erreichen wäre.


1

In OS X gibt es keine integrierte Möglichkeit, dies zu tun. Mit Growl können Sie jedoch Benachrichtigungen erhalten. Hier ist ein Beispielskript dafür:

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

Das sollte Folgendes anzeigen:

Und wenn Sie auch die andere Benachrichtigung aktiviert haben:

Weiterführende Techniken werden hier beschrieben .


1

Da AppleScriptObjC Teil von macOS ist, ist es möglich, das "Foundation" -Framework (einschließlich der Methoden von NSMenu) zu verwenden, um das zu erreichen, was 2012 wahrscheinlich nicht möglich war.

Ich habe ein interessantes Skript gefunden, um benutzerdefinierte Menüs in AppleScript zu erstellen. Daraus habe ich geeigneten Code extrahiert, um Text in die Menüleiste von macOS zu platzieren . Tatsächlich wird nur der "Titel" eines Menüs zum Einfügen von Inhalten verwendet.

Um dies zu demonstrieren, habe ich ein sehr einfaches Dialogskript implementiert, das Benutzer zur Texteingabe auffordert (Wartezeit 6 Sek.), Das dann vorübergehend in der Menüleiste angezeigt wird (5 Sek.).
Hier ist es:

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  

Dieser AppleScript-Code kann in jedem Ihrer Skripte verwendet werden. (Sein "Dialog" Teil ist optional ...)

user3439894 half beim Schließen meines "Menüs", siehe letzte Zeile des Skripts. Vielen Dank!


Haben Sie zufällig einen Link zum ursprünglichen Quellcode, von dem Sie Ihre Antwort abgeleitet haben? Es wäre schön zu sehen. Vielen Dank.
user3439894

1
Ja - es ist der letzte Handler der akzeptierten Antwort auf diese Frage : /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Ich befürchte jedoch, dass meine letzte Zeile (die die Hälfte der Zeit funktioniert), die ich woanders gefunden und angepasst habe, NICHT korrekt ist . . . . . . Ich bin kein Programmierer, daher brauche ich etwas mehr Zeit, um Code zu verstehen.
Clemsam Lang

1
Übrigens ist es eine nette Antwort und wenn nicht für "es ist ein paar Mal abgestürzt - wegen" dealloc () "?" Ich hätte +1. Einige Denkanstöße ... Wenn Sie diesen Code als eigenständige AppleScriptObjC-App verwenden, ist dies möglicherweise besser. Dies StatusItem's dealloc()gilt nur für die AppleScriptObjC-App und nicht für den Skript-Editor, der versehentlich abstürzt.
user3439894

FWIW Die erste set myText to ...Zeile des Codes , die man vor display dialog Befehl wirklich tut nichts auf der Grundlage des nachfolgenden Code und ist daher nicht benötigt. Mit anderen Worten, der einzigen verwendete Wert von myTextist , dass die nach dem zugeordneten display dialog Befehl wird ausgeführt und warum es zu etwas Einstellung vor dem dem display dialog Befehl ist nicht verwendete Codierung und nicht notwendig , im Rahmen des Code zur Zeit dargestellt.
user3439894

1
Anstelle von StatusItem's dealloc()oder StatusItem's setTitle:""ich würde verwenden:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.