AppleScript - Filterauswahl (Yojimbo)

311
David Cullen

Ich versuche gerade, eine Auswahl mit Applescript zu filtern.

Das funktioniert:

tell application "Yojimbo" to set theYojimboSelection to selection 

aber das tut nicht:   

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

Was mache ich falsch?

Muss ich zuerst die gesamte Auswahl auswählen und dann jedes ausgewählte Element mit den Längenkriterien durchlaufen?

Kann alles in einem Schritt gemacht werden?

1

1 Antwort auf die Frage

0
CJK

Ich benutze Yojimbo nicht . AppleScript- whoseFilter müssen jedoch auf mehrere Objekte angewendet werden. Während selection es sich dabei um eine Liste von Objekten handelt, selection-objectist das eine einzige Entität und kann daher nicht von aktiviert werden whose. items of selectionTheoretisch wäre dies eine geeignetere Sammlung zum Filtern, aber es itemswird einfach ein dereferenziertes Element generiert list, das tatsächlich nicht gefiltert werden kann.

In anderen Apps, die verwendet werden selection-objects, ist die selectionEigenschaft zum Teil störend deseferenziert und daher nicht mit dem Filter möglich whose.

Wenn dies möglich wäre length of its name(was die Syntax ist, die in einem solchen Filter verwendet würde), ist dies keine gültige Eigenschaft, nach der gefiltert werden soll.

Aufgrund der Funktionsweise anderer Apps mit einem ähnlichen selectionObjekt müssen Sie die Liste leider manuell durchlaufen.

Wenn jedoch die Effizienz ein Problem ist, können Sie dies mit Hilfe des selectionObjekts im Finder, das eine Liste von Dateien und Ordnern darstellt, recht effizient durchführen :

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