Questo è qualcosa che ho cercato molto tempo fa e non ho trovato una soluzione soddisfacente. La tua domanda mi ha ispirato a finire il progetto che ho iniziato quando stavo cercando una soluzione a questo.
Dai un'occhiata a menubarnotifier su GitHub. È possibile visualizzare una notifica nella barra dei menu passando una stringa allo script:
./menubarnotifier.py "Notification Text Here"
... e verrà visualizzato nella barra dei menu di OS X. Facendo clic sulla notifica si esce dall'applicazione.
Aggiungilaposizionedelloscriptaltuopercorso(ocreasemplicementeunaliasperloscriptstesso)esaraiingradodiusarlodaqualsiasiposizionenelTerminale.
Ilproblemaconl'implementazioneesistenteècheregistrausandoNSLog,chescrivesustderrdidefault.SarànecessariosopprimereimessaggiNSLogperottenereunrealeutilizzodalloscript.
Ilmioapproccioconsistenell'aggiungerelaseguentefunzioneal~/.bash_profile
equindichiamarelafunzionequandosidesideraaggiungereunanotificaallabarradeimenu:
#menubarnotifier.pyfunctionmn(){/path/to/menubarnotifier.py"$1" 2>/dev/null &
}
Quindi puoi usarlo con:
mn "Notification Text Here"
E non accederà allo stdout. Verrà eseguito anche in background per non richiedere Ctrl + C.
Lo script usa PyObjC, quindi dovrai installarlo se non lo hai già. L'ho installato usando MacPorts facilmente con sudo port install py27-pyobjc*
, ma penso che puoi farcela con appena sudo port install py27-pyobjc py27-pyobjc-cocoa
.
L'idea è di utilizzare NSStatusBar.systemStatusBar().statusItemWithLength_()
per creare un nuovo elemento nella barra dei menu di OS X.
self.statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
self.statusItem.setTitle_(display_text)
Aggiungerò più funzionalità in seguito (ad esempio immagini come quelle citate nella tua domanda). Devo anche capire un meccanismo di registrazione migliore in modo da poterlo solo avviare e non vedere l'output NSLog. Per ora, usa la funzione bash che ho scritto sopra per farlo funzionare nel modo che preferisci.