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, copie (todas) las rutas al portapapeles
  • Si no se selecciona nada, copie la "Ruta" de la ventana.

Indagando e inspirándome en publicaciones como Copiar la ruta del directorio actual al portapapeles y MacYourself Copiar la ruta del archivo o carpeta al portapapeles en Mac OS X Lion Llegué al punto en que puedo obtener las rutas de la selección, pero Parece que estoy atascado al intentar obtener la ruta de la ventana actual si la selección está vacía.

ACTUALIZACIÓN 13-dic-2013. Tengo algunos comentarios útiles (consulte https://apple.stackexchange.com/a/113612/7488 ; gracias @Flavin), así que actualicé el código al siguiente:

    on run {input, parameters}

        set l to {}
        tell application "Finder"
            set sel to (get selection)
            if not sel = {} then -- there are some file/folders selected

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

            else --no stuff is selected, get the current location path

                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 que tenga "algo" seleccionado en Finder.

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

En esta situación, la ventana del Finder aparece así:

Buscador sin nada seleccionado

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

Buscador No se aplican servicios

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

Servicios disponibles cuando se selecciona algún archivo

La "Copiar ruta de archivo" que he definido está asociada con "Archivos y carpetas" en las Preferencias de servicios. ¿Cuál podría ser el problema?

Respuestas (2)

Creo =que es lo que estás buscando.

set sel to (get selection)
if not sel = {} then
    --stuff is selected
else
    --no stuff is selected
end if

O quitar el noty voltear los casos

set sel to (get selection)
if sel = {} then
    --no stuff is selected
else
    --stuff is selected
end if
Gracias por la confirmación; la lógica parece sólida pero el comportamiento aún no es lo que necesito. Actualizaré la pregunta con información que podría ser relevante.

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 Carpeta" en "Finder":

Servicio para archivos y carpetas de entrada en Finder

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

Preferencias-Archivo-Carpetas

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

Buscador No se aplican servicios

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

Servicio sin entrada

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

Servicio asociado con Finder y sin entrada

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

Servicio en la Categoría General

Y el comportamiento es el esperado.