1

AppleScriptduplicateコマンドは、コピーされたオブジェクトを返すことになっています。

また、元の AE ベースの関数を使用するアプリはそれを行うように見えますが、Cocoa Scripting フレームワークに基づくアプリは、欠損値以外は何も返さないようです。

のコマンド ハンドラーがNSCloneCommand、複製されたオブジェクトの指定子を返さないことに責任があるようです。

コマンドをサブクラス化し、複製されたオブジェクト指定子を収集してから返すことで、スクリプト可能なアプリでこれを修正しようとしていました。

これは、アイテムが 1 つだけ複製されている場合にうまく機能します。

toコマンドでパラメーターを使用して複数のアイテムが複製された場合にも機能します ( のように)。次に、それらの複製されたアイテムの最初と最後を指定するduplicate every widget to end型の指定子を返すことができます。NSRangeSpecifier

ただし、パラメータを指定せずに複数のアイテムに対して duplicate コマンドを使用すると、アイテムはto連続しない方法で配列にソートされます。たとえば、最初に ID が 1 と 2 の 2 つの "x" 要素がある場合、duplicate every x各要素のコピーが元の要素の直後に挿入されるため、1、3、2、4 の順序になります。

では、これの指定子、つまり項目 3 と 4 の指定子をどのように返すのでしょうか?

のサブクラスには「リスト」指定子NSScriptObjectSpecifierがなく、個人ごとに NSArray を返すこともできないNSScriptObjectSpecifierようです。またNSAppleEventDescriptor、リストの作成はサポートしていますが、オブジェクト指定子を NSAppleEventDescriptors に変換する方法がわかりません。

クローン化されたオブジェクトの連続した順序を強制する以外に、これをどのように解決できますか (これには、NSCloneCommandの操作を完全に再実装する必要があります)。

ところで、Script Debugger の作成者であるMark Aldrittは、 (また: 、) が想定どおりに値を返さないという問題を確認しています。duplicatemoveopen

4

2 に答える 2

0

トーマス、タイプミスかどうかはわかりませんが、Standard Suite の複製コマンドに「at」パラメーターが表示されません。

<command name="duplicate" code="coreclon" description="Copy an object.">
    <cocoa class="NSCloneCommand"/>
    <direct-parameter type="specifier" .../>
    <parameter name="to" ...</parameter>
    <parameter name="with properties" ...</parameter>
</command>

また、<result ...>要素がないため、定義により、コマンドは値を返しません。何か不足していますか?

于 2016-05-15T20:36:02.833 に答える