4 votos

AppleScript y Finder - Cómo detectar una selección "vacía" al copiar rutas al portapapeles (Pregunta ampliada)

Estoy tratando de construir un Servicio que haga lo siguiente:

  • Si se seleccionan algunas carpetas/archivos en Finder, copiar (todos) los caminos al portapapeles
  • Si no se selecciona nada, copiar el "Camino" de la ventana.

Investigando y encontrando inspiración de publicaciones como Copying the current directory's path to the clipboard y MacYourself's Copy file or folder path to the clipboard in Mac OS X Lion he llegado al punto donde puedo obtener los caminos de la selección, pero parece que estoy atascado al intentar obtener el camino de la ventana actual si la selección está vacía.

ACTUALIZACIÓN 13-dic-2013. He recibido algunos comentarios útiles (ver https://apple.stackexchange.com/a/113612/7488; gracias @Flavin) así que he actualizado el código al siguiente:

    on run {input, parameters}

        set l to {}
        tell application "Finder"
            set sel to (get selection)
            if not sel = {} then -- hay algunos archivos/carpetas seleccionados

                repeat with f in (get selection)
                    set end of l to POSIX path of (f as alias)
                end repeat

            else --no hay nada seleccionado, obtener el camino de la ubicación actual

                set end of l to POSIX path of (insertion location as alias)

            end if
        end tell
        set text item delimiters to linefeed
        set the clipboard to (l as text)

    end run

La lógica parece sólida, y funciona siempre y cuando tenga "algo" seleccionado en Finder.

Sospecho que el Servicio puede no estar "Activo" cuando no hay nada seleccionado, (es decir, cuando el resultado deseado sería copiar el camino actual al portapapeles).

En esta situación, la ventana de Finder aparece de la siguiente manera:

Finder With nothing selected

Pero al intentar activar el Servicio muestra una lista de servicios "vacía":

Finder No services apply

Cuando tengo algo seleccionado, la lista de Servicios se llena:

Services Available when some File is selected

El "Copy File Path" que he definido está asociado con "Files and Folders" en las Preferencias de Servicios -- ¿cuál podría ser el problema?

2voto

Flavin Puntos 165

Creo que = es lo que estás buscando.

set sel to (get selection)
if not sel = {} then
    --se ha seleccionado algo
else
    --no se ha seleccionado nada
end if

O elimina el not y cambia los casos

set sel to (get selection)
if sel = {} then
    --no se ha seleccionado nada
else
    --se ha seleccionado algo
end if

1voto

JacquesB Puntos 19878

Ahora funciona. La clave está en cómo se define el servicio "Automator".

Cuando se configuró inicialmente, el Servicio de Automator se definió como "Archivos o Carpetas" en "Finder":

Servicio para Archivos y Carpetas de Entrada en Finder

Entonces en las Preferencias, el Servicio está asociado con Archivos y Carpetas:

Preferencias-Archivos-Carpetas

Y el resultado es que el servicio no está "activo" cuando no hay ninguna selección (obtenemos la misma imagen que en la pregunta):

Finder No se aplica ningún servicio

Cambiando la definición del servicio a "Sin Entrada":

Servicio sin Entrada

Significa que el Servicio está disponible cuando no hay ninguna selección en Finder:

Servicio asociado con Finder y sin entrada

Al verificar en las Preferencias de Servicios, ahora el Servicio está asociado con la categoría "General":

Servicio en la Categoría General

Y el comportamiento es el esperado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X