Apakah ada cara untuk menampilkan keluaran AppleScript di menubar?

8

Sebelum membaca lebih lanjut: Saya tahu tentang kepala pelayan dan program serupa. Saya mencari cara BUILT-IN untuk melakukan ini tanpa aplikasi pihak ketiga.

Bagaimanapun, saya menulis AppleScript yang menjalankan perintah shell. Saya ingin menampilkan output di menubar di atas ... tanpa Butler bagaimana saya bisa melakukan ini?

JATUH
sumber
Karena AppleScriptObjC adalah bagian dari macOS (2014), dimungkinkan untuk menggunakan kerangka kerja "Foundation" (termasuk metode NSMenu) untuk mencapai apa yang mungkin tidak mungkin pada tahun 2012.. . . . . Lihat jawaban saya di bawah di How-to-do-it!
clemsam lang

Jawaban:

2

Secara umum, tanpa program pihak ketiga, seperti Growl, tidak ada cara untuk melakukannya.

Namun, Anda dapat menulis skrip atau program lain seperti yang saya temukan di sini yang menyediakan layanan menulet untuk Anda. Saya yakin integrasi Growl akan jauh lebih mudah untuk dicapai.

Stu Wilson
sumber
1

Tidak ada cara bawaan untuk melakukan ini di OS X. Namun, menggunakan Growl , Anda dapat memiliki notifikasi. Berikut ini contoh skrip untuk itu:

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

Itu akan menampilkan ini:

Dan jika Anda mengaktifkan notifikasi lain juga:

Teknik lebih lanjut dijelaskan di sini.

daviesgeek
sumber
1

Karena AppleScriptObjC adalah bagian dari macOS, dimungkinkan untuk menggunakan kerangka "Foundation" -nya (termasuk metode NSMenu) untuk mencapai apa yang mungkin tidak mungkin pada tahun 2012.

Saya menemukan skrip yang menarik untuk membuat menu khusus dari dalam AppleScript; dari sini saya mengekstrak kode yang sesuai untuk menempatkan teks di bilah menu macOS . Bahkan hanya menggunakan "judul" menu untuk memasukkan beberapa konten.

Untuk mendemonstrasikan ini, saya menerapkan skrip dialog yang sangat mendasar yang meminta pengguna untuk input teks (menunggu 6 detik) yang kemudian ditampilkan di bilah menu sementara (5 detik).
Ini dia:

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  

Kode AppleScript ini dapat digunakan dalam skrip apa pun milik Anda. (Bagian "dialog" nya adalah opsional ...)

user3439894 membantu dengan menutup "menu" saya, lihat baris terakhir skrip. Terima kasih banyak!

clemsam lang
sumber
Apakah Anda secara kebetulan memiliki tautan ke kode sumber asli tempat Anda memperoleh jawaban? Akan menyenangkan untuk dilihat. Terima kasih.
user3439894
1
Ya - itu dalam penangan terakhir dari jawaban yang diterima untuk pertanyaan ini: /programming/29168474/creating-a-simple-menubar-app-using-applescript. . . . . Saya takut, bahwa baris terakhir saya (bekerja separuh waktu) yang saya temukan di tempat lain - dan diadaptasi - TIDAK benar . . . . . . Saya bukan seorang programmer jadi saya perlu lebih banyak waktu untuk memahami kode.
clemsam lang
1
BTW Ini jawaban yang bagus dan jika bukan karena "itu crash beberapa kali - karena" dealloc () "?" Saya ingin memberi +1. Beberapa makanan untuk dipikirkan ... jika Anda menggunakan kode ini sebagai aplikasi AppleScriptObjC yang berdiri sendiri, mungkin itu akan lebih baik, maka StatusItem's dealloc()hanya berlaku untuk aplikasi AppleScriptObjC dan bukan Script Editor dan tanpa sengaja menabraknya.
user3439894
FWIW set myText to ...Baris kode pertama , display dialog perintah sebelum perintah benar-benar tidak melakukan apa-apa berdasarkan kode berikutnya dan oleh karena itu sama sekali tidak diperlukan. Dengan kata lain, satu-satunya digunakan nilai dari myTextadalah bahwa yang ditugaskan setelah display dialog perintah tersebut dijalankan dan mengapa pengaturan apa pun sebelum ini display dialog perintah tidak terpakai coding dan tidak diperlukan dalam konteks kode saat disajikan.
user3439894
1
Alih-alih StatusItem's dealloc()atau StatusItem's setTitle:""saya akan menggunakan:current application's NSStatusBar's systemStatusBar()'s removeStatusItem:StatusItem
user3439894