Curso Applescript: Intercomunicación entre scripts, por Julifos

En algún sitio hemos dicho que toda aplicación puede responder a ciertos Apple Events muy básicos, como mínimo, aunque no sea en absoluto scriptable (o sea, que carece de un diccionario de comandos). Por ejemplo, la aplicación que viene (o venía) con el sistema “SimpleSound”, no es en absoluto scriptable. Tú le hablas en AppleScript, pero él no entiende nada.

Pues bueno; a pesar de eso, aún puede comprender algunos comandos, como por ejemplo estos tres:

tell application “SimpleSound”

 run

 activate

 quit

end tell

En principio, cualquier aplicación debe entender estos comandos (y algún otro por ahí), dado que es el sistema mismo quien se los envía a través de nosotros.

Este es el primer término de nuestro silogismo: “Toda aplicación entiende ciertos comandos”.

El segundo término es: “Un script salvado como aplicación es una aplicación”.

Y, para terminar, el tercero: “Por tanto, una aplicación de script entiende ciertos comandos”.

Esto es “por defecto”. Ahora bien, en el apartado de handlers (o subrutinas), hemos dicho que un handler es un auténtico comando creado por el usuario (yo, tú, él…). La palabra “handler”, en inglés, viene a ser algo así como “guardian”, pero en programación AppleScript, es un verbo sustantivado que hace referencia al verbo “handle”, que significa “manejar”.

O sea, que un “handler” es un “manejador de eventos”. Quiere decirse que si yo llamo a mi handler “karakapullo”, entonces puedo utilizar el mencionado “handler” como manejador del evento recién bautizado como “karakapullo”.

Veamos el ejemplo:

karakapullo()

on karakapullo()

 display dialog “Tu padre”

end karakapullo

Bien. Tenemos una aplicación o script capaz de responder a este evento nuevo que hemos inventado, y podemos utilizarlo sin problemas desde dentro de nuestra aplicación (o script).

Ahora, por fin, se descorre el velo semi-transparente que da título a este apartado: también podemos utilizar este “comando” desde fuera de nuestra aplicación. ¿Cómo? Comiendo. Haciéndolo. Y, concretamente desde AppleScript, llamando al contenedor del comando (la aplicación o script) y utilizándolo sin más.

Cuando el “contenedor” del comando (o comandos) es una aplicación, entonces no hay problema. Se le trata como a una aplicación cualquiera, como hicimos más arriba con “SimpleSound”:

tell application “Aplicación de script de ejemplo”

 karakapullo()

end tell

Cuando el “contenedor” del comando es un script, entonces tenemos que “cargar” el script en memoria, y ya podemos utilizarlo igual que en el caso anterior (pero sin llamarlo “aplicación”, porque no lo es).

set el_script to (choose file with prompt “¿Dónde está el script para cargar?”)

set Script_Cargado to (load script el_script)

tell Script_Cargado

 karakapullo()

end tell

En la primera línea hemos obtenido un “alias” del script (por ejemplo, alias “HD:Desktop Folder:script de ejemplo”), que es lo que necesitamos para cargar el script (en la segunda línea, con el comando “load script”, de las Adiciones Estándar).

Y, una vez cargado, podemos llamarlo y utilizar sus comandos (el resto de líneas).

El comando “load script” lo que hace, realmente, es cargar los scripts contenidos en el recurso “scpt” (que podemos ver cuando abrimos un script en ResEdit o Resorcerer). Por tanto, cualquier cosa que tenga un recurso “scpt” válido puede ser cargado, incluyendo, por supuesto, scripts salvados como aplicaciones (applets o droplets).

Muchas veces me habría gustado también que hubiera un comando llamado “unload script”, para descargarlos de memoria, y creo que hasta puede que haya existido. Habitualmente no es necesario, ya que se utiliza para rutinas no demasiado “grandes”, pero a veces sí se echa en falta cuando uno quiere cargar una “biblioteca de comandos” muy grande y, una vez utilizada, descargarla para que las cosas vayan más rápido, aunque puede que tal vez esto no sea tan útil como para ser tenido en cuenta por nadie, ya que las bibliotecas se “descargan” solas cuando termina de correr la aplicación que las cargó.

Como hemos visto, o veremos, o lo que sea, podemos ejecutar los “handler” contenidos en otros scripts y, por tanto, pasarles y devolverles parámetros. Un ejemplo sencillito:

tell Script_Cargado

 dime_Algo(“kapullo”)

 –> “y tu padre también”

end tell

Y el “Script_Cargado” contiene:

on dime_Algo(x)

 display dialog x

 return “y tu padre también”

end dime_Algo

Cuando ejecutemos el original, enviaremos un parámetro cualquiera (“kapullo”, en este caso) y también recibiremos el resultado de ejecutar ese handler (“y tu padre también”). Facilito.

Los restantes artículos sobe AppleScript se pueden encontrar en la categoría de Tutorial

0 0 votos
Article Rating
Subscribe
Notify of
0 Comments
Opiniones Inline
Ver todos los comentarios
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x