Curso AppleScript: file spec, reference, path, alias…, por Julifos

((En OS X, “:” as alias devolverá un alias al disco principal (alias “mengano:”). Así que, estos trucos del almendruco no nos sirven…))

En OSX usaremos:

set rutafichero to (path to me) as string

tell application “Finder”

set parentfolder to (container of item rutafichero) as text

end tell

El resultado es:

–> rutafichero es la ruta completa al script.

–> parentfolder es la ruta completa al folder que contiene al script

(de nada, que hay que actualizarse!!!)

Dependiendo de la aplicación o contexto, solemos tener tres maneras de especificarlo (según lo pida la aplicación, como diga en el diccionario):

file spec y reference

file spec es una abreviatura no muy abreviada de "file specification".

En cuanto a reference se refierence, vamos a hablar sólo de la parte que toca a archivos del Finder, ya que reference se suele utilizar de muchas maneras, para referirse a objetos propios de las aplicaciones. Por ejemplo, un reference válido para trabajar con QuickTime, podría ser "movie 1" para el comando "play", la primera ventana abierta en QuickTime. Y ésta sería una reference válida para el comando "play" de QuickTime y no para el resto del mundo, que tiene sus propios objetos y referencias.

Así pues, y ciñéndonos sólo a lo que a documentos del Finder se refiere, aquí cabría casi cualquier cosa que suponga una referencia válida. Por ejemplo, para el comando "open" del Finder, si queremos abrir la papelera, podemos hacerlo de diversas maneras.

tell application "Finder"

   open trash

   open item "Papelera"

   open (first item whose name = "Papelera")

   open (first folder whose id = 815717) –en mi ex-ordenador, corriendo OS 9.1

   open folder "HD:Trash:"

   open alias "HD:Trash:"

end tell

Y aún me quedo corto con el ejemplo.

En el primer ejemplo utilizamos la palabra reservada "trash", que es un objeto perteneciente al Finder. Por ejemplo, desde "Tex-Edit Plus", un editor de textos, que también admite reference para abrir documentos, no podríamos utilizar "trash", ya que es un objeto que sólo reconoce el Finder cuando estamos en su contexto.

En el segundo ejemplo, utilizamos también una palabra que sólo reconocerá el Finder: "item"; seguido del nombre del ítem: "Papelera".

Los dos ejemplos siguientes trabajan asimismo con elementos propios del Finder: "name" y "id". Luego, antes de poder abrir la papelera, primero tiene que localizarla por nombre o por identidad.

Los dos últimos son más "puras y universales" maneras de hacer las cosas. El "open folder…" sería el file spec más puro, y está compuesto de un "class" (el tipo de cosa) y un "path" (lo veremos más adelante). Aquí le estamos diciendo al Finder que abra una carpeta que está en tal sitio. Más claro, agua. El último de todos es un alias, que es una manera de referenciar que comprenderán casi todas las aplicaciones en casi todos los contextos.

Últimamente, en tiempos de OS 10.2.4, parece que el Finder es un poco cutre, y muchas veces podemos encontrarnos con estos errores:

tell application "Finder" to open (path to trash)

Dará error, mientras que:

set x to (path to trash)

tell application "Finder" to open x

Hará lo que le pedimos. Se trata de ir experimentando y ver qué nos viene mejor…

path

Ya hemos soslayado que el path es una especie de ruta absoluta dentro del ordenador, y que queda delimitada por el símbolo tipográfico de "dos puntos".

Por ejemplo, un documento de texto llamado "kapullo.txt" que tenemos en el Escritorio, daría un path así:

"Disco Rígido:Desktop Folder:kapullo.txt"

Tenemos que tener en cuenta dos cosas. Una, muy sencilla, es que un path es un texto y, por tanto, siempre va entre comillas. La otra, que no tenemos que confundirlo con el comando "path to" de las Adiciones Estándar, que siempre devuelve un alias, no un path.

Hay pocas aplicaciones que admitan un path así, a palo seco. Suelen preferir un file spec, del tipo que sea, o un alias. Por tanto, el path es más para el applescripter un "elemento para construir" otras cosas, como aliases o referencias. Por ejemplo, podemos construir un alias ficticio así:

setalias_ficticio to "HD:Desktop Folder:kapullín.html" as alias

Evidentemente, si al ejecutar este texto no existe "kapullín.html" en el Escritorio, dará error. Pero eso a nosotros nos da igual, porque lo que queríamos era compilar la expresión con un alias.

Suele ser el path una cosa útil, ya que podemos utilizarla para varias cosas al mismo tiempo. Por ejemplo, si tenemos que manipular el mismo archivo desde varias aplicaciones que tienen referenciasdistintas, podemos tener como base el path, y luego construir lo que necesite mcada aplicación.

set el_path to "HD:Aplicaciones:Navegador de red"

tell application "Finder" to open file el_path

tell application "Sólo acepto alias" to open alias el_path

Por si acaso, dejo dicho que los "dos puntos" se utilizan para cualquier cosa carpetosa, ya sea un disco, una carpeta, un "package" o la papelera. O sea, para "contenedores" potenciales de cosas. Si quisiéramos referenciar una carpeta del Escritorio, tendríamos que poner, lógicamente, los dos puntitos al final:

set la_carpetilla to "HD:Desktop Folder:carpetilla:"

alias

Un alias es una cosa muy seria. A la hora de compilar un alias, el archivo/carpeta a que hace referencia debe existir obligatoriamente. Por ejemplo:

alias "HD:Varios:flauta.fh9"

Si al compilar esta expresión no existe el documento "flauta.fh9" dentro de la carpeta "Varios" en el disco "HD", simplemente recibiremos un error tipo "oiga usted, no existe eso" y no podremos compilar nada de nada.

Cuando uno escribe applescripts para el gran público, en general, entonces los alias son un coñazo, porque yo en mi ordenador utilizo, por ejemplo: alias "Marilyn Monroe:"; y el disco de fulatino se llamará "Fulanito" y el de más allá "Menganito". Por tanto, tenemos que acudir a la construcción

de alias ficticios mediante una coercion, que es simplemente decir: "este path, como si fuera un alias"; que es lo que hemos visto justo hace un poquito. Para ello se suele utilizar el comando "path to" de las Adiciones Estándar:

set la_carpeta_del_sistema to (path to system folder) as text

— que, en el disco de menganito devolverá "Menganito:Carpeta del Sistema:" (o "System Folder")

set el_finder_de_menganito to la_carpeta_del_sistema & "Finder" as alias

Esto ya devuelve el alias correcto para el Finder que se encuentra en el disco duro de Menganito, algo así como:

–> alias "Menganito:Carpeta del Sistema:Finder"

Y ya podemos trabajar con él, estando seguros de que el método es universal para cualquier ordenador, ya sea de no sé quién, o en francés o en rumano.

:

¿? ¿Dos puntos? ¿Qué es esto?.

Ante todo, un apartado dedicado a los no-usuarios de OS X.

Ya hemos dejado dicho que los dos puntos eran la marca de que una cosa es carpeta y no documento. Eso puede servir como introducción al famosísimo truco tan discutido en la AUL que resulta extremadamente útil cuando queremos trabajar con un path relativo.

":" as alias

Así, de sopetón, nos devuelve el alias de la carpeta que nos contiene. Si somos un script ejecutado desde el Editor de Scripts, nos devolverá la carpeta que contiene al editor. Si somos una aplicación de script o un droplet, la carpeta que nos contiene.

¡Es muy rápido!.

Otras opciones que tendríamos para obtener el mismo resultado serían:

tell application "Finder"

   container of (path to me) as alias

end tell

set AppleScript’s text item delimiters to ":"

set x to text items 1 thru -2 of (path to me as text) & "" as text

set AppleScript’s text item delimiters to {""}

x as alias

Ambas rutinas son más lentas que la primera que hemos dicho, y un tanto aparatosas.

¡Pues nada! A partir de lo dicho, podemos empezar a construir. Supongamos que hemos desarrollado un pequeño script que utiliza un documento llamado "lenteja.txt", que está en la carpeta "extras" que acompaña a nuestro script. Pues obtener un alias relativo es tan sencillo como:

set lenteja to ":extras:lenteja.txt" as alias

Ya está. Con el path hemos especificado: la carpeta que me contiene (":") también contiene la carpeta "extras" ("extras:"), que contiene "lenteja.txt".

¡Más difícil todavía!

Supongamos que junto a "lenteja.txt" (dentro de la carpeta "extras") tenemos un script que sirve para no sé qué y que necesita un alias para el script principal, que se encuentra en un nivel superior.

Pues parecido a intenné:

set script_principal to "::" & "El Script Principal" as alias

Suponiendo que el script principal se llame así ("El Script Principal"), acabamos de obtener un alias a él, sin necesidad de saber dónde puñetas ha colocado el usuario nuestras carpetita descargada desde intenné (o desde un diské o un cedé). ¡Y lo hemos hecho desde una carpeta en un nivel inferior! ¡Uf! ¡Cáspita! ¡Qué guay somos!

En OS X, ":" as alias devolverá un alias al disco principal (alias "mengano:").

Eso, de momento. Así que, estos trucos del almendruco no nos sirven… 🙁

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

0 0 votos
Article Rating
Subscribe
Notify of
6 Comments
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
Anónimo
Anónimo
19 years ago

((En OS X, “:” as alias devolverá un alias al disco principal (alias “mengano:”). Así que, estos trucos del almendruco no nos sirven…))

En OSX para llamar a la carpeta que contiene el script usaremos:

set rutafichero to (path to me) as string
tell application “Finder”
set parentfolder to (container of item rutafichero) as text
end tell

–> rutafichero será la ruta completa al script
–> parentfolder será la ruta completa al folder que contiene el script

(de nada, que hay que actualizarse!!!)

Anónimo
Anónimo
19 years ago

Hola, pedroooo.
En OSX hay muchas maneras de adivinar la carpeta que contiene el script (como la que tú mencionas, que a su vez está mencionada en el artículo), pero sólo 2 si utilizas un script compilado: desde Script Debugger o Smile, y desde FastScripts (a partir de la última beta).
Lo que se explicaba en la parte final del artículo era la abolición en OSX del viejo uso de los dos puntos “:” + “as alias” como manera de localizar el script, no la imposibilidad de conocer su ruta 😉

Anónimo
Anónimo
19 years ago

Es cierto, comentas:
xxxxxxxxxxxxxx
Otras opciones que tendríamos para obtener el mismo resultado serían:
——–
tell application “Finder”
   container of (path to me) as alias
end tell
——-
set AppleScript’s text item delimiters to “:”
set x to text items 1 thru -2 of (path to me as text) & “” as text
set AppleScript’s text item delimiters to {“”}
x as alias
——-
Ambas rutinas son más lentas que la primera que hemos dicho, y un tanto aparatosas.
xxxxxxxxxxxxx
No me había dado cuenta, como estás tan enfrascado con el OS9 (es broma!) jeje.
¡Que son muy buenos tus tutoriales!, yo estoy aprendiendo mucho, no tenía ni idea.

Anónimo
Anónimo
19 years ago

Hola

necesito saber cual es la palabra reservada para las comillas, para hacer algo como
set myvar to “mi alias es:”MyAlias””

Gracias..

Carlos

Anónimo
Anónimo
19 years ago

Hola, Carlos. Para “escapar” las cosas “escapables” (que son sólo las comillas y el mismo carácter de “escapación”), se utiliza el llamado backslash (barra invertida). Ej:
set x to “me llamo “pepito grillo”” –> me llamo “pepito grillo”
Y, si quisiésemos utilizar un backslash en nuestro texto:
set y to “esto es un backslash: \” –> esto es un backslash:
Y así sucesivamente:
set z to “backslash + comillas: \”” –> backslash + comillas: “

Anónimo
Anónimo
17 years ago

podrian decirme como abrir el path de una aplicacion con codigo php

6
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x