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