AppleScript - фильтрация выделения (Yojimbo)

210
David Cullen

В настоящее время я пытаюсь отфильтровать выделение с помощью 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
CJK

Я не использую Йоджимбо . Однако whoseфильтры AppleScript необходимо применять к множественному объекту. Хотя 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 

Похожие вопросы