Growl + Applescript = Aplicaciones cool

La verdad es que da gusto cuando ejecutamos un script o una aplicación y nos informa correctamente de lo que está haciendo, o de lo que hizo, sobre todo si lo hace mediante un gestor de mensajes como Growl.

Además, como es un tema interesante, a la par que constructivo, pues voy a tratarlo en este artículo así que vamos a allá con… la comunicación con el usuario desde nuestros applescript.

Lo primero que tenemos que hacer es, además de tener Growl instalado (Evidentemente 😉 ) es conocer el nombre del proceso para referirnos a él, que es GrowlHelperApp.

De esta forma comenzaremos el proceso con un bloque «Tell» hacia dicho proceso:
tell application "GrowlHelperApp"

La mejor forma de conocer todas las posibilidades que tenemos de interactuar con Growl es añadir su diccionario a la biblioteca del editor de applescript, ya que por defecto no aparece. Para ello tendremos que añadir el archivo GrowlHelperApp (Está ubicado dentro del paquete Growl.prefpane) a dicha biblioteca y así podremos ver todos los comandos y parámetros que admite.

Biblioteca Applescript

Biblioteca Applescript

En este caso nos limitaremos mostrar una notificación muy básica para la cúal, la siguiente linea tras la sentencia «Tell» será definir un nombre para el mensaje. Para este ejemplo lo definiremos con la variable Notificacion a fin de poder usarla de nuevo en la próxima línea :

set Notificacion to "Título del mensaje"
La cabecera está lista, ahora ya nos metemos con el mensaje en cuestión. Como hemos dicho, en este ejemplo vamos a mostrar un aviso muy básico por lo que con una sola linea más, crearemos el cuerpo del mensaje:
notify with name Notificacion title "Esto es el Título" description "Esto es el mensaje" application name Notificacion
Tras eso solamente nos quedaría cerrar de nuevo el Bloque «Tell». Veamos como queda todo junto:

Ejemplo de mensaje básico

Ejemplo de mensaje básico


tell application "GrowlHelperApp"
set Notificacion to "Nombre de la notificación"
notify with name Notificacion title "TITULO" description "Esto es el mensaje" application name Notificacion
end tell

Lo normal es que el nombre de la notificación (La variable Notificacion) sea igual que el título de la misma, pero no tiene por que ser así obligatoriamente, de hecho en el ejemplo, lo he cambiado por la cadena «TITULO».

Como ejemplo, la anterior notificación ya nos sirve perfectamente pero ahora vamos a rizar el rizo un poco más. Vamos a crear una SUBRUTINA o HANDLER (Si no conoce nada del mundo de la programación, no se asuste, que lo explicaré todo) llamada ComunicacionUsuario, al que le podremos pasar la variable MensajeUsuario.

Esto nos servirá para poder llamar a dicha subrutina desde nuestros programas, sin tener el codigo de la misma (En este caso, el codigo que mostrará las notificaciones) mezclado con nuestro código, permitiendo así que sea mucho mas facil la lectura y comprension del programa en general.

El tema para llamar a una subrutina incluida en nuestro script o aplicación, basicamente funciona así:

(*
Estas son unas lineas de ejemplo de lo que podría ser un programa cualquiera
Las siguientes lineas declaran la variable que contendrá el mensaje a mostrar
y llamaremos a la subrutina para mostrar dicho mensaje
*)
set MensajeUsuario to "Mensaje que queremos mostrar al usuario"
ComunicacionUsuario(MensajeUsuario)

El anterior código es un ejemplo sencillo de como llamar a la subrutina de mensajes que vamos a crear a continuación. Si es un programa que puede mostrar varios mensajes, dependiendo del punto en el que se encuentre, bastará con escribir al final del programa una subrutina como la que viene a continuación y a la cual podremos llamar todas las veces que queramos con 2 simples lineas como las anteriores, en vez de escribir todo el codigo de llamar a Growl cada vez que necesitamos invocar los mensajes. Para que nos muestre un mensaje u otro, solamene tendremos que declarar el mensaje que queramos que nos muestre en cada ocasión a través de la variable MensajeUsuario antes de llamar a la subrutina.

Además el ejemplo de subrutina que vamos a crear hace una comprobación más, ya que es posible que el equipo donde se lance nuestra aplicación o Script no tenga Growl, por lo que seria un fallo bastante grande dar por hecho que estamos informando al usuario y que no sea verdad (A parte de que lo más probable es que se genere un error que termine con la ejecución del Script o aplicación). Por esto mismo, añadiremos unas lineas para comprobar si Growl se está ejecutando y, en el caso de que no esté habilitado en el equipo, mostraremos un diálogo estándar de applescript como el que muestra la siguiente imagen:

Diálogo estándar de Applescript

Diálogo estándar de Applescript

Aunque se podría compactar el código bastante más, he decidido dejarlo así para que sea más sencillo de comprender para la gente que no sabe programación:
on ComunicacionUsuario(MensajeUsuario)

tell application "System Events"
if exists process "GrowlHelperApp" then
set ExisteGrowl to 1
else
set ExisteGrowl to 0
end if
end tell

if ExisteGrowl is 1 then
tell application "GrowlHelperApp"
set Notificacion to "Extractor de Enlaces"
set LosMensajes to {Notificacion}
register as application Notificacion all notifications LosMensajes default notifications {Notificacion} icon of application "Finder.app"
notify with name Notificacion title Notificacion description MensajeUsuario application name Notificacion
end tell
else
display dialog MensajeUsuario & ". (Se muestra este mensaje al no detectar Growl)" with title "Notificación al usuario" buttons "OK" with icon 2
end if

end ComunicacionUsuario

En este ejemplo, también hemos mejorado un poco más la notificación de Growl añadiéndole alguna cosilla más como el icono del Finder, haciendo que tenga un aspecto un poquito más cuidado. Además tenga en cuenta que esto es solamente un ejemplo cuya finalidad es servir de guía haciéndole ver las posibilidades de este sistema de notificaciones. De la misma manera que añadimos el icono del Finder, podremos añadir cualquier otro icono.

Mensaje de Growl con icono personalizado

Mensaje de Growl con icono personalizado

Eso si, ahora como siempre, el tema lo comienzo yo pero el límite del mismo lo pone usted ya que esto puede dar mucho más de si, haciendo vuestras aplicaciones o scripts mucho más «Cool».

2 Comentarios

  1. ¡Muy buena explicación!

  2. Me alegro de que te guste 🙂

Menciones/Notificaciones

  1. UK TV Abroad - TV Catchup Abroad... After I originally commented I clicked the -Notify me when new feedback are added- checkbox and now…