1 votes

AppleScript - filtrage de la sélection (Yojimbo)

J'essaie actuellement de filtrer une sélection avec Applescript.

Ça marche :

tell application "Yojimbo" to set theYojimboSelection to selection

mais ce n'est pas le cas :   

tell application "Yojimbo" to set theYojimboSelection to selection where length of (name of selection) > 12

Qu'est-ce que je fais de mal ?

Dois-je d'abord sélectionner toute la sélection, puis parcourir en boucle chaque élément sélectionné avec le critère de longueur ?

Peut-on le faire en une seule étape ?

0voto

CJK Points 426

Je n'utilise pas Yojimbo . Cependant, AppleScript whose doivent être appliqués à une au pluriel objet. Alors que selection es lui-même une liste d'objets, le selection-object est une entité unique, et ne peut donc pas être promulguée par whose . items of selection serait, en théorie, une collection plus appropriée à filtrer, mais items générera simplement un fichier déréférencé list qui, en fait, ne peuvent pas non plus être filtrés.

Dans d'autres applications qui utilisent selection-objects le selection est fâcheusement déréférencée partiellement et n'est donc pas filtrable avec la propriété whose .

Si c'était possible, length of its name (qui est la syntaxe qui serait utilisée dans un tel filtre) n'est pas une propriété valide pour filtrer.

Malheureusement, en se basant sur la façon dont d'autres applications avec une selection fonctionne, vous devrez itérer dans la liste manuellement.

Cependant, si l'efficacité est une préoccupation, voici un moyen assez efficace de le faire, comme illustré par l'utilisation de l'icône de l'utilisateur. selection objet dans Finder qui est une liste de fichiers et de dossiers :

property Finder : application "Finder"

to filterItems from (L as list) thru filter as handler into |L| as list : null
    local L, |L|, filter

    if |L| = null then set |L| to {}

    script filteredItems
        property array : L
        property fn : filter
        property list : |L|
    end script

    tell the filteredItems to repeat with x in its array
        if fn(x) = true ¬
            then set ¬
            end of its list ¬
            to x's contents
    end repeat

    return the list of filteredItems
end filterItems

on characterCount(x)
    set |name| to the name of x
    |name|'s length > 12
end characterCount

filterItems from (Finder's selection) thru characterCount

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X