AppleScript - 过滤选择(Yojimbo)

AppleScript - 过滤选择(Yojimbo)

我目前正在尝试使用 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

我不使用用心棒。但是,AppleScriptwhose过滤器需要应用于复数对象。虽然selection 本身就是一个对象列表,而是selection-object一个单一实体,因此不能通过来制定whoseitems of selection在理论上,将是一个更适合过滤的集合,但items只会生成一个取消引用list,事实上,它也无法被过滤。

在使用 的其他应用中selection-objects,该selection属性令人烦恼地被部分取消引用,因此无法使用 进行过滤whose

如果可能的话,length of its name(这是在这种过滤器中所使用的语法)就不是有效的过滤属性。

不幸的是,根据具有类似selection对象的其他应用程序的操作方式,您需要手动遍历列表。

但是,如果效率是一个问题,那么这里有一个相当有效的方法,如使用对象selection所示发现者,这是文件和文件夹的列表:

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

相关内容