1

В настоящее время я пытаюсь отфильтровать выделение с помощью Applescript.

Это работает:

tell application "Yojimbo" to set theYojimboSelection to selection

но это не   

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

Что я делаю неправильно?

Нужно ли мне сначала выбрать все выделение, а затем просмотреть каждый выбранный элемент с критериями длины?

Можно ли все это сделать за один шаг?

1 ответ1

0

Я не использую Йоджимбо. Тем не менее, AppleScript, whose фильтры должны применяться к множественному объекту. Хотя selection представляет собой список объектов, selection-object представляет собой единую сущность, поэтому не может быть применен с помощью whose . Теоретически, items of selection были бы более подходящей коллекцией для фильтрации, но items просто генерировали бы разыменованный list который на самом деле также не может быть отфильтрован.

В других приложениях, которые используют selection-objects selection свойство выбора раздражает частичную разыменовку и, следовательно, не может фильтроваться с whose .

Если бы это было возможно, length of its name (то есть синтаксиса, который будет использоваться в таком фильтре) не является допустимым свойством для фильтрации.

К сожалению, в зависимости от того, как работают другие приложения с похожим объектом selection , вам придется выполнять итерацию по списку вручную.

Однако, если речь идет об эффективности, вот довольно эффективный способ сделать это, как показано на примере объекта selection в Finder, который представляет собой список файлов и папок:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .