問題タブ [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.

0 投票する
1 に答える
50 参照

applescript - Cocoa Scripting: "whose 句" は特定のプロパティにアクセスできません

アプリケーションをスクリプト可能にする作業を行っています。「誰の」フィルター句に苦労しています。

私はこれを機能させたいのですが、name使用できますが、使用countryできません:

sdef の関連部分は次のようになります。

country「whos」と連携するにはどうすればよいですか? どうやら、「whose」句はプロパティ名ではなく型指定子を必要としていますが、これは意味がありません。

を実装しましたが、それは forではなく forindicesOfObjectsByEvaluatingObjectSpecifier:でしか呼び出されません。namecountry

0 投票する
2 に答える
574 参照

macos - Cocoa Scripting: 「null」と「欠損値」を返す

AppleScript は特別な値nullを認識しているようです。

スクリプト可能なプロパティの Cocoa Scripting ベースのアプリからそのような値を返すにはどうすればよいですか?

nilCocoa Scripting ベースのアプリから( NULL) またはスクリプト可能なプロパティ ゲッターを返すNSNullと、スクリプト エディターはそれを欠損値として解釈します。

を返す[NSAppleEventDescriptor nullDescriptor]と、AppleScript はエラーを表示します。

0 投票する
1 に答える
101 参照

applescript - Cocoa Scripting: "any" 型の浮動小数点 (double) 値を返す

Sdef でコマンド結果の型を指定する場合、any単純に などの NS 型を返すことはできないようNSNumberです。代わりに、 を返す必要がありNSAppleEventDescriptorます。

ただし、NSAppleEventDescriptor処理できる値にはかなり制限があります。doubleC型などの浮動小数点数はサポートされていないようです。

anyでは、その型の double 値を返すにはどうすればよいでしょうか?

0 投票する
2 に答える
146 参照

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" を削除すると、コードはエラーなしで実行されます。

0 投票する
1 に答える
127 参照

applescript - Cocoa Scripting: コンテナー内のスクリプト可能なオブジェクトのインデックスを取得する

スクリプト可能なオブジェクトの が与えられた場合NSScriptObjectSpecifier、コンテナ内のオブジェクトのインデックスをどのように伝えるのですか?

NSScriptObjectSpecifierまたはそのサブクラスで、そのアクセサ メソッドが見つかりません。

オブジェクトが の場合NSIndexSpecifier、インデックスを取得するのは簡単です。しかし、それが a などの他のものである場合はNSNameSpecifier、照会する必要があります。Cocoa Scripting guide には、インデックスを学習する必要があるときにフレームワークが自動的にそれを行うと書かれていますが、それがどのように行われるかについては説明されていません。

スクリプト可能なオブジェクトがそのようなインデックスを返すために実装できるメソッドがありindicesOfObjectsByEvaluatingObjectSpecifierますが、それはオプションのメソッドであるため、スクリプト可能なオブジェクトで単純に呼び出すことはできないと思います。

インデックスを学習する他の簡単な方法はありますか、それとも指定子をたどってすべての可能なケースを独自に処理する独自のメソッドを実装する必要がありますか?

0 投票する
2 に答える
129 参照

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は、 (また: 、) が想定どおりに値を返さないという問題を確認しています。duplicatemoveopen