Menü çubuğunda AppleScript çıktısının görüntülenmesinin bir yolu var mı?


8

Daha fazla okumadan önce: Uşak ve benzeri programları biliyorum . Üçüncü taraf uygulaması olmadan bunu yapmak için OLUŞTURULMASI bir yol arıyorum.

Her neyse, bir kabuk komutu çalıştıran bir AppleScript yazdım. Bu çıktıyı üstteki menü çubuğunda görüntülemek istiyorum ... Butler olmadan bunu nasıl yapabilirim?


Yana AppleScriptObjC MacOS (2014) bir parçası olan 2012 yılında değil muhtemelen mümkün ne elde etmek onun "Vakıf" çerçeve (dahil. NSMenu en yöntemleri) kullanmak mümkündür. . . . . Nasıl Yapılır! Hakkındaki cevabımı aşağıda görebilirsiniz!
clemsam lang

Yanıtlar:


2

Genel olarak, Growl gibi bir üçüncü taraf programı olmadan, bunu yapmanın bir yolu yoktur.

Ancak, burada bulduğum bir program veya sizin için menulet hizmeti sağlayan başka bir program yazabilirsiniz . Eminim Growl entegrasyonunun başarılması çok daha kolay olacaktır.


1

OS X'te bunu yapmanın yerleşik bir yolu yoktur. Ancak, Growl'i kullanarak bildirimleriniz olabilir. İşte bunun için örnek bir komut dosyası:

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

Bunu göstermelidir:

Ayrıca diğer bildirimi etkinleştirdiyseniz:

Daha gelişmiş teknikler burada açıklanmaktadır .


1

Yana AppleScriptObjC MacOS parçasıdır 2012 yılında değil muhtemelen mümkün ne elde etmek onun "Vakıf" çerçeve (dahil. NSMenu en yöntemleri) kullanmak mümkündür.

AppleScript içinden özel menüler oluşturmak için ilginç bir komut dosyası buldum; bundan metin macOS menü çubuğuna yerleştirmek için uygun kodu çıkardı . Aslında bazı içerik eklemek için sadece bir menünün "başlığını" kullanır.

Bunu göstermek için, kullanıcılardan daha sonra menü çubuğunda geçici olarak (5 sn.) Görüntülenen metin girişi (6 sn. Beklemek) isteyen çok temel bir iletişim betiği uyguladım.
İşte burada:

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  

Bu AppleScript kodu, herhangi bir komut dosyasında kullanılabilir. ("İletişim kutusu" kısmı isteğe bağlıdır ...)

user3439894 " menümü " kapatmama yardım etti, betiğin son satırına bakın. Çok teşekkürler!


Şans eseri cevabınızı aldığınız orijinal kaynak koduna bir bağınız var mı? Bunu görmek güzel olurdu. Teşekkürler.
user3439894

1
Evet - Bu soruya cevap kabul son işleyicisinde var: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Yine de korkuyorum ki, başka bir yerde bulduğum ve uyarladığım son satırım (yarı yarıya çalışıyor) doğru DEĞİL . . . . . . Ben bir programcı değilim bu yüzden kodu anlamak için biraz daha zamana ihtiyacım var.
clemsam lang

1
BTW Güzel bir cevap ve eğer değilse "birkaç kez çöktü - çünkü" dealloc () "?" +1 olurdu. Düşünmek için biraz yiyecek ... Bu kodu bağımsız bir AppleScriptObjC uygulaması olarak kullanırsanız, bu daha iyi olabilir, o zaman StatusItem's dealloc()Script Editor için değil, AppleScriptObjC uygulaması için geçerlidir ve yanlışlıkla kilitlenir.
user3439894

FWIW İlk kodset myText to ... satırı, komuttan önceki satır sonraki koda dayalı olarak hiçbir şey yapmaz ve bu nedenle hiç gerekli değildir. Başka bir deyişle, sadece kullanılan değer arasında sonra atandığı yani komut edilir çalıştırmak ve öncesinde bir şey ayarlamadan neden komuta bağlamında gerekli kodlama kullanılmayan ve olmayan kod anda sundu. display dialog myTextdisplay dialog display dialog
user3439894

1
Bunun yerine StatusItem's dealloc()veya StatusItem's setTitle:""ben kullanacağım:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894 15:18 '
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.