AppleScript - seleção de filtragem (Yojimbo)

1

No momento, estou tentando filtrar uma seleção com o Applescript.

Isso funciona:

tell application "Yojimbo" to set theYojimboSelection to selection

mas isso não acontece:

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

O que estou fazendo de errado?

Preciso primeiro selecionar toda a seleção e, em seguida, percorrer cada item selecionado com os critérios de tamanho?

Pode ser feito tudo em um passo?

    
por David Cullen 01.10.2018 / 16:27

1 resposta

0

Eu não uso Yojimbo . No entanto, os filtros AppleScript whose precisam ser aplicados a um objeto plural . Embora selection seja uma lista de objetos, o selection-object é uma entidade única, portanto, não pode ser promulgada em whose . items of selection seria, teoricamente, uma coleção mais apropriada para filtrar, mas items simplesmente geraria um list desreferenciado que, na verdade, também não pode ser filtrado.

Em outros aplicativos que usam selection-objects , a propriedade selection é irritantemente parcialmente desreferenciada e, portanto, não é possível filtrar com whose .

Se fosse possível, length of its name (que é a sintaxe que seria usada em tal filtro) não é uma propriedade válida para filtrar.

Infelizmente, com base em como outros aplicativos com um objeto selection semelhante operam, você precisará percorrer a lista manualmente.

No entanto, se a eficiência é uma preocupação, então aqui está um meio bastante eficiente de fazê-lo, conforme ilustrado usando o objeto selection no Finder , que é uma lista de arquivos e pastas:

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
    
por 02.10.2018 / 21:32