¿Existe una utilidad de línea de comandos para mostrar una cadena o una imagen en la barra de estado en Mavericks?

3

Básicamente quiero emitir un comando en un script de bash o un script de Apple y vea alguna cadena (o icono) en la barra de estado, también conocida como "donde está el reloj".

Algo similar a osascript pero para la barra de estado:

/ usr / bin / osascript -e 'muestra la notificación "Lorem ipsum dolor sit amet" con el título "Título"'

    
pregunta user151851 23.09.2014 - 22:24

1 respuesta

6

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_profileyluegollamaralafunció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.

    
respondido por el aglasser 24.09.2014 - 02:28

Lea otras preguntas en las etiquetas