問題タブ [cocoa-scripting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
applescript - Cocoa Scripting: "whose 句" は特定のプロパティにアクセスできません
アプリケーションをスクリプト可能にする作業を行っています。「誰の」フィルター句に苦労しています。
私はこれを機能させたいのですが、name
使用できますが、使用country
できません:
sdef の関連部分は次のようになります。
country
「whos」と連携するにはどうすればよいですか? どうやら、「whose」句はプロパティ名ではなく型指定子を必要としていますが、これは意味がありません。
を実装しましたが、それは forではなく forindicesOfObjectsByEvaluatingObjectSpecifier:
でしか呼び出されません。name
country
macos - Cocoa Scripting: 「null」と「欠損値」を返す
AppleScript は特別な値nullを認識しているようです。
スクリプト可能なプロパティの Cocoa Scripting ベースのアプリからそのような値を返すにはどうすればよいですか?
nil
Cocoa Scripting ベースのアプリから( NULL
) またはスクリプト可能なプロパティ ゲッターを返すNSNull
と、スクリプト エディターはそれを欠損値として解釈します。
を返す[NSAppleEventDescriptor nullDescriptor]
と、AppleScript はエラーを表示します。
applescript - Cocoa Scripting: "any" 型の浮動小数点 (double) 値を返す
Sdef でコマンド結果の型を指定する場合、any
単純に などの NS 型を返すことはできないようNSNumber
です。代わりに、 を返す必要がありNSAppleEventDescriptor
ます。
ただし、NSAppleEventDescriptor
処理できる値にはかなり制限があります。double
C型などの浮動小数点数はサポートされていないようです。
any
では、その型の double 値を返すにはどうすればよいでしょうか?
applescript - Cocoa Scripting: テキスト スイートの統合
Text Suite
スクリプト可能な Mac アプリでを使用しようとしています。
Cocoa Scripting Guide で見つけた小さなドキュメントでは、NSTextStorage
. ただし、Sdef とコーディング側の両方で、残りをどのように設定する必要があるかについては説明していません。
特に、より豊富なコマンドで Text Suite を使用する場合と使用しない場合を、スクリプト定義にどのように伝えるかが気になります。問題は、Text Suite が という名前の独自の型を宣言していることtext
です。しかし、それはすでにプレーンテキストにも使用される定義済みの型です。
そのため、Sdef エディタの要素のプロパティのテキスト セレクターで 2 つの「テキスト」を選択することになり、書き込まれる Sdef には同じタイプになります。つまり、コードが常にそれらを使用しているわけではありませんが、テキスト スイートをサポートするテキストを処理するプロパティとそうでないプロパティを Sdef で区別することはできませんNSTextStorage
。
これは、すべてのスクリプト可能なプロパティを class のオブジェクトに格納する必要があるということNSTextStorage
ですか? そうしないと、ユーザーは任意のテキスト プロパティで拡張 Text Suite コマンドを使用することを期待するかもしれませんが、それらNSString
の代わりに使用すると実行時エラーが発生NSTextStorage
しますよね?
しかし、アプリの名前など、単純なプレーン テキスト文字列のみを返す単純なプロパティの場合、Text Suite をサポートするのはやり過ぎですよね?
では、これについてどうすればよいでしょうか。NSTextStorage
リッチ テキストのサポートに値すると思われるプロパティのみを使用するため、Text Suite をいつ使用できるか、どこで使用できるかをユーザーに理解させるだけでよいでしょうか? 他の人はこれをどのように解決しますか?
アップデート
Text Suite を Sdef に単純に追加すると (Sdef エディターの [ファイル] サブメニューで "NSTextSuite" として提供されるものを使用しています)、返されるすべてのプロパティが機能しtext
なくなります (エラー -10000 が発生します)。Text Suite のエントリを他のアプリのエントリと比較しましたが、明らかな違いは見られません。
Text Suite を追加すると、タイプが「text」のプロパティを持つすべてのプロパティが破損するのはなぜですか?
以下は簡略化された Sdef であり、私が何をしているかを見ることができます。
このスクリプトを実行すると、エラー -10000 が発生します。
Sdef から "Text Suite" を削除すると、コードはエラーなしで実行されます。
applescript - Cocoa Scripting: コンテナー内のスクリプト可能なオブジェクトのインデックスを取得する
スクリプト可能なオブジェクトの が与えられた場合NSScriptObjectSpecifier
、コンテナ内のオブジェクトのインデックスをどのように伝えるのですか?
NSScriptObjectSpecifier
またはそのサブクラスで、そのアクセサ メソッドが見つかりません。
オブジェクトが の場合NSIndexSpecifier
、インデックスを取得するのは簡単です。しかし、それが a などの他のものである場合はNSNameSpecifier
、照会する必要があります。Cocoa Scripting guide には、インデックスを学習する必要があるときにフレームワークが自動的にそれを行うと書かれていますが、それがどのように行われるかについては説明されていません。
スクリプト可能なオブジェクトがそのようなインデックスを返すために実装できるメソッドがありindicesOfObjectsByEvaluatingObjectSpecifier
ますが、それはオプションのメソッドであるため、スクリプト可能なオブジェクトで単純に呼び出すことはできないと思います。
インデックスを学習する他の簡単な方法はありますか、それとも指定子をたどってすべての可能なケースを独自に処理する独自のメソッドを実装する必要がありますか?
applescript - Cocoa Scripting: 「複製」コマンドから複製されたオブジェクトを返す
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は、 (また: 、) が想定どおりに値を返さないという問題を確認しています。duplicate
move
open