Esto es algo que busqué hace mucho tiempo y no encontré una solución satisfactoria. Su pregunta me ha inspirado a terminar el proyecto que comencé cuando estaba buscando una solución para esto.
Consulte menubarnotifier en GitHub. Puede mostrar una notificación en la barra de menú pasando una cadena al script:
./menubarnotifier.py "Notification Text Here"
... y se mostrará en la barra de menú OS X. Al hacer clic en la notificación se cerrará la aplicación.
Agreguelaubicacióndelscriptasuruta(osimplementecreeunaliasalscriptensímismo)ypodráusarlodesdecualquierpartedelTerminal.
ElproblemaconlaimplementaciónexistenteesqueregistrausandoNSLog,queescribeenstderrdeformapredeterminada.DeberásuprimirlosmensajesdeNSLogparaobtenerunusorealdelscript.
Mienfoqueesagregarlasiguientefunciónasu~/.bash_profile
yluegollamaralafuncióncuandodeseeagregarunanotificaciónalabarrademenú:
#menubarnotifier.pyfunctionmn(){/path/to/menubarnotifier.py"$1" 2>/dev/null &
}
Para que puedas usarlo solo:
mn "Notification Text Here"
Y no se registrará en la salida estándar. También se ejecutará en segundo plano para no requerir Ctrl + C.
El script usa PyObjC, por lo que deberá instalarlo si aún no lo tiene. Lo instalé utilizando MacPorts fácilmente con sudo port install py27-pyobjc*
, pero creo que puedes salirte con solo sudo port install py27-pyobjc py27-pyobjc-cocoa
.
La idea es usar NSStatusBar.systemStatusBar().statusItemWithLength_()
para crear un nuevo elemento en la barra de menú de OS X.
self.statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
self.statusItem.setTitle_(display_text)
Agregaré más funcionalidad más adelante (como imágenes como las que mencionó en su pregunta). También necesito encontrar un mejor mecanismo de registro para que pueda ejecutarlo y no ver la salida de NSLog. Por ahora, usa la función bash que escribí anteriormente para que funcione de la manera que deseas.