4 votes

AppleScript et Finder - Comment détecter une sélection "vide" lors de la copie de chemins dans le presse-papiers (Question élargie)

J'essaie de créer un service qui fait ce qui suit :

  • Si certains dossiers/fichiers sont sélectionnés dans le Finder, copiez (tous) les chemins d'accès dans le presse-papiers.
  • Si rien n'est sélectionné, copiez le "Chemin" de la fenêtre.

En fouillant et en s'inspirant de posts tels que Copie du chemin d'accès du répertoire courant dans le presse-papiers et celui de MacYourself Copier le chemin d'accès d'un fichier ou d'un dossier dans le presse-papiers sous Mac OS X Lion Je suis arrivé au point où je peux obtenir les chemins de la sélection, mais je semble être bloqué lorsque j'essaie d'obtenir le chemin de la fenêtre actuelle si la sélection est vide.

MISE À JOUR 13-Dec-2013. J'ai reçu des commentaires utiles (voir https://apple.stackexchange.com/a/113612/7488 (merci @Flavin) donc j'ai mis à jour le code avec celui ci-dessous :

    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 logique semble solide, et cela fonctionne tant que j'ai "quelque chose" de sélectionné dans le Finder.

Je soupçonne que le service n'est pas "actif" lorsque rien n'est sélectionné (c'est-à-dire lorsque le résultat souhaité est de copier le chemin actuel dans le presse-papiers).

Dans cette situation, la fenêtre du Finder apparaît comme suit :

Finder With nothing selected

Mais en essayant d'activer le service, la liste des services est "vide" :

Finder No services apply

Lorsque j'ai sélectionné quelque chose, la liste des services est remplie :

Services Available when some File is selected

Le "chemin d'accès au fichier de copie" que j'ai défini est associé aux "fichiers et dossiers" dans les préférences des services - quel est le problème ?

2voto

Flavin Points 553

Creo que = est ce que vous recherchez.

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

Ou retirez le not et retourner les affaires

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

1voto

JacquesB Points 19878

Cela fonctionne maintenant. La clé réside dans la manière dont le service "Automator" est défini.

Lors de la configuration initiale, le service Automator était défini comme "Fichiers ou dossiers" dans le "Finder" :

Service for Input Files and Folders in Finder

Ainsi, dans les préférences, le service est associé aux fichiers et aux dossiers :

Preferences-File-Folders

Et le résultat est que le service n'est pas "actif" quand il n'y a pas de sélection (on obtient la même image que dans la question) :

Finder No services apply

Changement de la définition du service en "No Input" :

Service with No Input

Signifie que le service est disponible lorsqu'il n'y a pas de sélection dans le Finder :

Service associated with Finder and no input

En vérifiant dans les préférences des services, le service est maintenant associé à la catégorie "Général" :

Service in the General Category

Et le comportement est conforme aux attentes.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X