AppleScript y Finder: cómo detectar una selección "vacía" al copiar rutas al portapapeles (pregunta ampliada)

4

Estoy intentando crear un servicio que haga lo siguiente:

  • Si se seleccionan algunas carpetas / archivos en el Finder, copie (todas) las rutas al portapapeles
  • Si no se selecciona nada, copie la "Ruta" de la ventana.

Rebuscar y obtener inspiración de publicaciones como Copiando el la ruta del directorio actual al portapapeles y la de MacYourself Copie la ruta del archivo o carpeta al portapapeles en Mac OS X Lion Tengo que el punto en el que puedo obtener las rutas de la selección, pero parece que estoy bloqueado al intentar obtener la ruta de la ventana actual si la selección está vacía.

ACTUALIZACIÓN 13-dic-2013. Recibí algunos comentarios útiles (consulte enlace ; gracias @Flavin), así que he actualizado el código al de abajo:

    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 y cuando tenga "algo" seleccionado en el 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í:

PerointentaractivarelServiciomuestraunalistadeservicios"vacía":

Cuandotengoalgoseleccionado,lalistadeServiciossellena:

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

    
pregunta JJarava 12.12.2013 - 16:35

2 respuestas

1

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":

Entonces,enlasPreferencias,elServicioestáasociadoaArchivosyCarpetas:

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

Cambiandoladefinicióndelservicioa"Sin entrada":

SignificaqueelServicioestádisponiblecuandonohayunaselecciónenelFinder:

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

Y el comportamiento es el esperado.

    
respondido por el JJarava 13.12.2013 - 23:45
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 elimine not y cambie los casos

set sel to (get selection)
if sel = {} then
    --no stuff is selected
else
    --stuff is selected
end if
    
respondido por el Flavin 12.12.2013 - 16:48

Lea otras preguntas en las etiquetas