Esto es algo que busqué hace tiempo y para lo que no encontré una solución satisfactoria. Tu pregunta me ha inspirado para terminar el proyecto que empecé cuando buscaba una solución.
Echa un vistazo menubarnotifier en GitHub. Puedes 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ú de OS X. Al hacer clic en la notificación saldrá de la aplicación.
![Screenshot]()
Añade la ubicación del script a tu ruta (o simplemente crea un alias al propio script) y podrás usarlo desde cualquier parte del Terminal.
El problema con la implementación existente es que registra usando NSLog, que escribe en stderr por defecto. Necesitarás suprimir los mensajes NSLog para obtener algún uso real del script.
Mi enfoque es añadir la siguiente función a su ~/.bash_profile
y luego llama a la función cuando quieras añadir una notificación a la barra de menú:
# menubarnotifier.py function
mn () {
/path/to/menubarnotifier.py "$1" 2>/dev/null &
}
Así que se puede utilizar con sólo:
mn "Notification Text Here"
Y no se registrará en stdout. También se ejecutará en segundo plano para no requerir Ctrl+C.
El script utiliza PyObjC, por lo que tendrás que instalarlo si no lo tienes ya. Yo lo instalé usando MacPorts fácilmente con sudo port install py27-pyobjc*
pero creo que puede salirse con la suya con sólo sudo port install py27-pyobjc py27-pyobjc-cocoa
.
La idea es utilizar 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)
Más adelante añadiré más funcionalidades (como las imágenes que mencionas en tu pregunta). También tengo que encontrar un mejor mecanismo de registro para que pueda ejecutarlo y no ver la salida NSLog. Por ahora, usa la función bash que escribí arriba para que funcione como quieres.