2024年11月25日月曜日

GIMP 3 時代のスクリプティング 殊に Script-Fu 続

GIMP 3 時代のスクリプティング 殊に Script-Fu  の続きです。
GIMP 3 時代の Script-Fu v3 ですが、やはり、変化しています。
今後、長く使っていくには、書き換えが必須 と思っています。
では、何が違うのか? ... 。


実際のコードを使っての説明は 別の機会 を設けるとして、
此処では、公式のドキュメント が存在する事を書きます。

其の前に、ちょっと、脱線。

新しい事を始める場合、
何か参考になるものを探す訳です。
例えば、公式に標準添付される コード とか。

此処で留意すべきは、GIMP 3.0.0-RC1 に添付されるものには2種類がある事。
v2 と v3 とふた種類のものが含まれています。
v3 は test-sphere-v3.scm ですね。
C:¥Program Files¥GIMP 3¥lib¥gimp¥3.0¥plug-ins¥test-sphere-v3¥test-sphere-v3.scm
です。

Script-Fu で書いた事がある人なら、
今迄とは違う事に気付かれるでしょう。

具体的にコードで指摘する前に、
或いは、実際に自前のものを書き出す/書き直す前に、
是非、読んで置かなければ いけない もの があります。

Changes in ScriptFu v3
https://developer.gimp.org/resource/script-fu/script-fu-changes-v3/

相当な長文ですが、諦めず、全文を読破しましょう!。
えっ!、
だって、英語だけどぉ~、 と嘆く其処のあなたへ。
私も英語は苦手です。

其処で、翻訳(機械翻訳)したものを掲載します。
Firefox の拡張機能 TWP - Translate Web Pages で取得したもの。
翻訳エンジン は 恐らく Google 翻訳 の筈。

  2024/11/22 時点での訳。  意訳や校正はしていませぬ。  悪しからず。


ScriptFu v3 の変更点
目次

    について
    クイックスタート
        必要な変更
        オプションの変更
        なぜ今このような変更が行われたのでしょうか?
    PDB APIの変更
    引数の SF-VALUE タイプは廃止されました
        一部のユースケースでは SF-STRING を使用する
        任意精度浮動小数点数
        理論的根拠
    オプションで、他の言語のプラグインなどのスクリプトをインストールできます
    新規登録機能を利用する
        登録関数 script-fu-register は 非推奨になりました。
        ScriptFu プラグインの設定の改善
        スクリプトの登録プロシージャ
        スクリプトのレジスターフィルター
    PDB 戻り値に v3 ダイアレクトを使用する
    FALSE および TRUE シンボルは非推奨になりました
        理論的根拠
        変更例
    quit 関数を使用してスクリプトを中止する
        スクリプトが値を返さない
    表示機能を使用して端末に書き込む

について

対象者は Scriptfu プラグインの作成者です。 ここでは、v2 スクリプトを編集して GIMP 3 で実行できるようにする方法を説明します。 また、ScriptFu とその言語の機能強化についても説明します。

ScriptFu バージョン 3 は、GIMP バージョン 3 の一部である ScriptFu です。 ScriptFu は 個別にバージョン管理されません 。
クイックスタート

幸運なことに、いくつかの既存のスクリプトは変更せずに GIMP v3 で動作する可能性があります。
必要な変更

既存のプラグインではいくつかの変更が 必要 です。

    多くの PDB プロシージャが廃止されたり、名前が変更されたり、署名が変更されたりしています
    SF-VALUE という記号は廃止されました

これらの変更に合わせてスクリプトを編集すると、そのスクリプトは GIMP v2 では機能しなくなります。

PDB API が変更されたため、ほとんどのスクリプトは編集が必要になります。
オプションの変更

スクリプトに対するその他の変更は オプション です。 このような変更では、ScriptFu の改良された機能が使用されます。

重要性のおおよその順序:

    他の言語のプラグインなどのスクリプトをインストールできます
    汎用の script-fu-register の代わりに、新しい特定の登録関数を使用できます。
    スクリプトは GIMP の新しいマルチレイヤー選択機能を使用できます
    スクリプトは、PDB 呼び出しからの戻り値のより自然なバインディングを持つ v3 方言を使用できます。
    シンボリック定数 TRUE および FALSE は、SF-TOGGLE を除き、非推奨です。
    スクリプトは 終了する可能性があります エラー コードで
    スクリプトは、 display を 呼び出して端末に出力できます。

ScriptFu の機能強化は、既存のプラグインに影響を与えない可能性があります。 これらの拡張機能を理解する必要があるのは、使用する場合だけです。
なぜ今このような変更が行われたのでしょうか?

GIMP 3 は、新機能を備えたメジャー バージョン変更です。 メジャー バージョンでは API の破壊が許可されます。 つまり、古いプラグインやスクリプトが動作しない可能性があります。

GIMP 開発者は、これらの変更が面倒になる可能性があることを理解しています。 スクリプト開発者は、スクリプトの 2 つの異なるバージョンを維持する必要がある場合があります。 しばらく GIMP 2 を使い続けるユーザーもいれば、GIMP 3 に切り替えるユーザーもいます。

次に進むにはメジャー バージョンが必要です。 この状況は、Python 2 から 3 への移行によって引き起こされた混乱と似ています。
PDB APIの変更

PDB API のバージョン 3 に準拠するようにスクリプトを編集する必要があります。

スクリプトで呼び出すことができる GIMP PDB (プログラマ データベース) は、GIMP バージョン 3 で変更されました。 また、スクリプトの編集が必要になる場合もあります。

    PDB プロシージャの署名の変更については、 devel-docs/GIMP3-plug-in-porting-guide/porting_scriptfu_scripts.md を参照してください。
    追加、削除、および置換された PDB プロシージャについては、 devel-docs/GIMP3-plug-in-porting-guide/removed_functions.md を参照してください。

変更の一部は、GIMP 3 のマルチレイヤー選択機能に関するものです。 多くの PDB プロシージャは、ドローアブルのコンテナ (Scheme ベクトル) を受け取るようになりました。 単一のドローアブルの代わりに。
引数の SF-VALUE タイプは廃止されました

v2 スクリプトを編集して、記号 SF-VALUE を置き換える必要があります。

v2 では、SF-VALUE は引用符で囲まれていない任意の文字列である仮引数を宣言しました。 通常、SF-VALUE は整数値の引数に使用されます。 スクリプトのダイアログで、ScriptFu はテキスト入力ウィジェットを表示しました。 通常、ウィジェットにはデフォルトの整数リテラルが表示されますが、 ただし、ウィジェットを使用すると、文字列に任意のテキストを入力できます。

通常はこれを SF-ADJUSTMENT のような形式的な引数に置き換えます。 ここで、SF-ADJUSTMENT の「数字」フィールドは 0、 小数点以下の桁がないこと、つまり整数値を意味します。 他のフィールド (下限値と上限値など) も指定する必要があります。

SF-VALUE を SF-ADJUSTMENT に置き換えたスクリプト GIMP 2 との互換性は維持されます。

例:

SF-VALUE      "Font size"  "50"
=>
SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 SF-SPINNER)

ここで、7 タプルの 0 は、小数点以下の桁がないことを示します。

別の例として、以前は SF-VALUE を使用して浮動小数点数の仮引数を宣言しました。

SF-VALUE      "Lighting (degrees)"  "45.0"
=>
SF-ADJUSTMENT "Lighting (degrees)" '(45.0 0 360 5 10 1 SF-SLIDER)

ここで、1 は次のことを示します。小数点以下 1 桁を表示します (例: 「45.0」)。 ダイアログウィジェット内。
一部のユースケースでは SF-STRING を使用する

v2 では、SF-VALUE 引数により、ユーザーは実行可能なスキーム コードを入力できます。 「'(1 g 1)」と言うと、リストリテラルです。 プラグインへの Scheme 呼び出しに挿入されます。 その使用はもう不可能です。 それを行う必要がある場合は、SF_STRING を使用して文字列を取得します。 その後、プラグインは文字列を評価できます。
任意精度浮動小数点数

v2 では、SF-VALUE 引数により、ユーザーは任意の精度で浮動小数点数を入力できます。 例:「0.00000001」

それはもう不可能です。スクリプト作成者は SF-ADJUSTMENT を使用する必要があります 意味のある最大精度を指定します。ユーザーはできなくなります より正確な値 (小数点以下の桁数) を入力します。 アルゴリズムの数学を理解し、精度を知る必要があります。 目に見える結果という点では過剰です。

例:

SF-ADJUSTMENT "Lighting (degrees)" '(45.0 0 360 5 10 4 SF-SLIDER)

ここでは、ユーザーは小数点以下 4 桁のみを入力できます。 たとえば、ウィジェットに「0.0001」と入力します。

実際に任意の精度が必要な場合は、SF_STRING を使用して文字列を取得します。 その後、プラグインは文字列を評価してスキーム数値を取得できます Scheme がサポートする最大精度。
理論的根拠

以前は、SF-VALUE 引数を使用すると、ユーザーは引数にガベージを入力できました。 これによりスクリプトでエラーが発生しました。 SF-ADJUSTMENT または SF-STRING の方が使いやすいです。
オプションで、他の言語のプラグインなどのスクリプトをインストールできます

新しいプラグインにはこれをお勧めします。

v3 では、ScriptFu スクリプトを /plug-ins ディレクトリにインストールできます。 他の言語のプラグインと同様です。 これはプラグインを分離するのに役立ちます。

最初の行にシバンを含めるようにスクリプトを編集する必要があります。

#!/usr/bin/env gimp-script-fu-interpreter-3.0
;!# Close comment started on first line.

スクリプトに翻訳可能な文字列が含まれている場合は、2 行目も含める必要があります。 上記と同様に、gettext による解析に対応します。 (ScriptFu は実際には #! を使用した複数行のコメントをサポートしていないことに注意してください。 これは gettext を騙すトリックであり、スクリプトを次のように解析します。 複数行のコメントはサポートされていました。)

v2 では、すべての ScriptFu スクリプトは /scripts ディレクトリにインストールされました。 v3 では、Shebang を使用して ScriptFu スクリプトをインストールできます。 /plug-ins ディレクトリのサブディレクトリにあります。

シバンを使用したスクリプトのインストールは、解釈されたプラグインのルールに従う必要があります。 スクリプト ファイルは次のことを行う必要があります。

    最初の行にシバンを入れます
    同じベース名を持つディレクトリに存在する
    実行権限がある
    インタプリタに対応するファイル接尾辞を持つ

スクリプトへのパスの例:

~/.config/GIMP/2.99/plug-ins/script-fu-my/script-fu-my.scm

/plug-ins ディレクトリにスクリプトをインストールする利点は、次のとおりです。 このようなスクリプトは独自のプロセスで実行されます。 クラッシュしても、GIMP や他のスクリプトには影響しません。

逆に、v2 では、/scripts ディレクトリ内のすべてのスクリプト これらは長命プロセス「extension-script-fu」によって実行されます。 これらのスクリプトのいずれかがクラッシュすると、ScriptFu によって実装されたメニュー項目が消えます GIMP アプリから削除した場合は、GIMP を再起動する必要があります。

スクリプトに「script-fu-」で始まる名前を付けるのは単なる慣例です。
新規登録機能を利用する

これをお勧めします。

新しい登録機能により、プラグイン ダイアログのルック アンド フィールが新しくなりました そして改善された設定。 ScriptFu の「登録」関数を使用すると、プラグイン PDB プロシージャを宣言できます。 そしてダイアログがどのように見えるか。

ScriptFu v3 には 2 つの新しい登録関数があります。

    スクリプトの登録プロシージャ
    スクリプトのレジスターフィルター

用語: 宣言します 登録関数を使用してプラグインの属性と署名を 。 。 定義します 同様のシグネチャを使用して run 関数を ScriptFu は 登録します。 プラグインを PDB に

ScriptFu v2 には script-fu-register のみがあります。 これは、次のいずれかのプロシージャを宣言するために使用される汎用関数です。

    一般的な手順 (イメージなしで操作します。)
    フィルター/レンダラー (画像上で操作)

登録関数 script-fu-register は 非推奨になりました。

新しい ScriptFu スクリプトでは script-fu-register を使用しないでください。

将来、GIMP プロジェクトでは script-fu-register が 廃止される可能性があります。

非推奨ですが、 script-fu-register は 引き続き機能するはずです。 ただし、プラグインダイアログでは次のようになります。

    古い外観と雰囲気を持っています。
    設定の処理など、いくつかの利点が失われます。

また、 script-fu-register を 使用すると、 1 つのドローアブル (レイヤーまたはマスク) を受け取るプラグインのみを宣言できます。 しかし、GIMP v3 では、ドローアブルのベクトルを渡すこのようなプラグインを呼び出すようになりました。 GIMP v2 は、1 つのドローアブルを渡すこのようなプラグインを呼び出しました。 つまり、宣言された署名と実際の署名は一致しません。 GIMP は、このような非推奨のスクリプトのメニュー項目を有効にします。 画像と描画可能を取得するように宣言されています。 ユーザーが少なくとも 1 つのドローアブルを選択するたびに。
ScriptFu プラグインの設定の改善

GIMP 3 はプラグイン設定をより適切に処理できるようになりました。 (すべての言語のプラグインに共通する GIMP のより強力な機構を使用することで、 Scheme 言語プラグインに固有の ScriptFu の限定された機構によるものではありません。)

新しい登録関数で宣言されたスクリプトには永続的な設定が含まれます Gimp セッション内およびセッション間で。 つまり、次回ユーザーがスクリプトを呼び出すとき、 ダイアログには、最後にフィルターを選択したときと同じ設定が表示されます。 には当てはまりません これは、v2 script-fu-register 。 ここで設定は GIMP セッション中にのみ保持されます。

新しい登録関数で宣言されたスクリプトのダイアログ 設定を初期値または工場出荷時の値にリセットするためのボタンもあります。 および一連の設定を名前で保存および復元するためのボタン。
スクリプトの登録プロシージャ

を使用して script-fu-register-procedure 、フィルタではない PDB プロシージャを宣言します またはレンダラー。 「手順」とは一般的な場合を指します。 フィルターまたはリナーラーであるプラグイン、 画像の取得とドローアブルは特殊です 代わりに script-fu-register-filter を使用してそれらを宣言します。

Script-fu-register-filter は、 次のスクリプトを宣言します。

    常に有効になっています
    セッション間で設定を保存できる

「画像タイプ」を宣言していません の場合と同様です script-fu-register 。 GIMP は、ユーザーが選択した画像のモードに関係なく、プラグインを有効にします。

「マルチレイヤー機能」を宣言していません の場合と同様です script-fu-register-filter 。 プラグインには必ずしも画像やドローアブルが必要なわけではありません。 (ユーザーに代わって、ScriptFu はドローアブルを必要としないことを PDB に宣言します。)

スクリプトで定義した run 関数には同じシグネチャがあります 登録関数で宣言したとおりです。 (登録関数は PDB 内のプロシージャ署名も宣言します。 似ていますが、C 言語に関して言えば、 実行モード用の追加の引数があります。 ScriptFu v2 と同様に、他の言語のプラグインとは異なり、 run-mode 引数は ScriptFu によって隠蔽されます。)


省略した例を次に示します。

(define script-fu-my-plugin (radius)
    body)

(script-fu-register-procedure "script-fu-my-plugin"
  "My plugin..."
  "Example plugin."
  "author/copyright holder"
  "copyright dates"
  SF-ADJUSTMENT "Radius" (list 100 1 5000 1 10 0 SF-SPINNER)
)

別の例: コンテキストを使用するプラグイン

プラグインは、コンテキスト メニューに表示されるメニュー項目を定義できます。 の一般的な使用例です これはscript-fu-register-procedure 。 コンテキストは、描画操作に影響を与える GIMP 内の一連の選択肢です。 たとえば、現在のブラシです。

プラグインは ない コンテキスト内の選択を受け取ら ことに注意してください ただし、操作する前にコンテキストから取得する必要があります。

上記と同じ登録を使用します。

(define script-fu-my-plugin (radius)
    ; do something with the current brush
    (gimp-context-get-brush))

(script-fu-register-procedure "script-fu-my-brush-plugin"
   ...same registration as above...)

(script-fu-menu-register "script-fu-my-brush-plugin"
                     "<Brushes>/Brushes Menu")

この例では、メニュー項目「My plugin…」 コンテキスト メニューに表示されます (マウスの右ボタンでポップアップします)。 ドッキング可能なウィンドウで ブラシの 、 常に有効になっています。 スクリプト実行関数は現在のブラシを取得します そしてそれに対して、またはそれを使って何かをします。
別の例: 未開封のファイルを使用するプラグイン

ファイルの使用を必要とする場合があります。 プラグインは、画像として開かれていない

(define script-fu-my-plugin (filename)
    ; open and do something with the file
    )

(script-fu-register-procedure "script-fu-my-plugin"
  "My plugin..."
  "Example plugin."
  "author/copyright holder"
  "copyright dates"
  SF-FILENAME "Image to do something with" ""
)

(script-fu-menu-register "script-fu-my-plugin"
                     "<Image>/File")

この例では、メニュー項目 「My plugin…」 メニューに表示されます 「ファイル」 メニューバーの 。 常に有効になっています。

ユーザーがメニュー項目を選択すると、 ユーザーがファイルを選択できるダイアログが表示されます。 ユーザーが [OK] をクリックすると、 プラグインはファイルを開いて、それに対して何らかの処理を行います。
スクリプトのレジスターフィルター

使用して script-fu-register-filter を 、イメージおよびイメージのドローアブル コンポーネントを取得する PDB プロシージャを宣言します。

Script-fu-register-filter は、 次のスクリプトを宣言します。

    フィルターまたはレンダラーです。ユーザーが選択した画像とその選択されたコンポーネントを取得します。
    マルチレイヤー対応で、1 つ以上のドローアブルを処理します
    セッション間で設定を保存できる
    ユーザーが画像コンポーネントを選択すると有効化/敏感になるメニュー項目があります

最初の 2 つの引数「image」と「drawables」を指定しません と同様です v2 のscript-fu-register 。 これらの引数は暗黙的なものです。 便宜上、ScriptFu はこれらの引数を PDB に登録します。

スクリプトで定義する run 関数 それらの形式的な引数が必要です。例えば:

(define script-fu-my-plugin (image drawables arg1 arg2) body)

ScriptFu は、ドローアブルの Scheme ベクトルを 1 つだけではなく渡します。 スクリプトに script-fu-register-filter を使用して登録します。

GIMP はスクリプトのメニュー項目を有効にします の画像を選択した場合 ユーザーが宣言された画像モード (例: Grayscale ) 、 できるだけ多くのドローアブルを選択しました (レイヤー/マスク/チャンネル) マルチレイヤー機能について宣言したとおりです。
マルチレイヤー機能を宣言する

Script-fu-register-filter に は引数「multilayer-capability」があります。 (一部の文書では、この議論を「描画可能なアリティ」と呼ぶ場合があります。) 引数はプラグインの機能を宣言します 複数のドローアブル (通常はレイヤー) を処理するため。 引数は「画像タイプ」引数の後に続きます。 プラグインの処理能力を宣言します。 さまざまな画像モード。

以下に例を示します。

(script-fu-register-filter "script-fu-test-sphere-v3"
  "Sphere v3..."
  "Test script-fu-register-filter: needs 2 selected layers."
  "authors"
  "copyright holders"
  "copyright dates"
  "*"  ; image modes: any
  SF-TWO-OR-MORE-DRAWABLE  ; multi-layer capability argument
  SF-ADJUSTMENT "Radius" (list 100 1 5000 1 10 0 SF-SPINNER)
)

「multilayer-capability」引数には次の値を指定できます。

SF-ONE-DRAWABLE           expects exactly one drawable
SF-ONE-OR-MORE-DRAWABLE   expects and will process one or more drawables
SF-TWO-OR-MORE-DRAWABLE   expects and will process two or more drawables

これは単なる宣言にすぎません。定義した実行関数が期待通りの動作をするかどうかは別の問題です。

SF-ONE-DRAWABLE を宣言するスクリプトは引き続きドローアブルのベクトルを受け取ります。 ただし、ベクトルの長さは 1 である必要があります。

これらは、スクリプトがドローアブルを処理する方法を指定するものではありません。 通常、SF-ONE-OR-MORE-DRAWABLE は、スクリプトがフィルタリングすることを意味します。 指定されたドローアブルを独立して順次に実行します。 通常、SF-TWO-OR-MORE-DRAWABLE は、スクリプトが 指定されたドローアブルを結合し、たとえばバイナリ演算によって別のドローアブルを結合します。

「multilayer-capability」引数は、GIMP にスクリプトのメニュー項目を有効にするよう指示します。 ユーザーが適切な数のドローアブルを選択したとき。
適切に書かれたスクリプトでは、渡されたドローアブルの数をチェックする必要があります。

適切に作成されたスクリプトは、それが渡されない場合にエラーをスローする必要があります。 宣言されたドローアブルの数 (宣言された数より多いか少ない)。

GIMP 3 以降、 画像を取得するプラグインは、おそらく多数のドローアブルのコンテナを取得します。 これはいわゆる「マルチレイヤー選択」機能です。 そうでない既存のプラグインは廃止されます。 GIMP の将来のバージョンでは廃止される可能性があります。

プラグインは処理できるドローアブルの数を宣言する必要があります。 アルゴリズムの「多層機能」または「描画可能性」とも呼ばれます。

宣言された描画可能なアリティ アルゴリズムが処理できるドローアブルの数のみを説明します。 宣言されたドローアブル アリティは、PDB プロシージャの署名を示しません。 適切に作成されたイメージ プロシージャは、常にドローアブルのコンテナを受け取ります。

ユーザーが対話的に呼び出すプラグインの場合、ドローアブル アリティは以下を記述します。 ユーザーが選択すると予想されるドローアブルの数。 GIMPはプラグインプロシージャのメニュー項目を無効/有効にします 宣言された描画可能なアリティに従って。 したがって、ユーザーによって直接呼び出されたプラグイン プロシージャは決して受信すべきではありません。 プラグインが処理できないドローアブルの数。

ただし、PDB プロシージャは他の PDB プロシージャからも呼び出されます。 別のプロシージャからの呼び出しは、実際には ドローアブル アリティに対して宣言された数よりも多くのドローアブルを渡します。 これは、呼び出しプロシージャのプログラミング エラーです。

宣言された数よりも多くのドローアブルが渡される、よく書かれた呼び出されたプラグイン ドローアブルを処理する代わりにエラーを返す必要があります。 宣言された数よりも少ない場合も同様です。
PDB 戻り値に v3 ダイアレクトを使用する

新しいスクリプトにはこれをお勧めします。

GIMP バージョン 3 の ScriptFu は、オプションで v3 方言を解釈します。 方言は Scheme 言語にとってより自然です。 この方言は、PDB への呼び出しからの戻り値のバインドに影響します。

スクリプトは、script-fu-use-v3 を呼び出すことにより、実行時に v3 ダイアレクトを選択します。 実行関数の開始時。

v3 方言の利点は、スクリプトが小さいことです。 車への呼び出しが減ります。 また、より自然にブール値を調べることができます。

詳細については、GIMP ソースのドキュメント /plugins/script-fu/docs/using-v3-binding.md を参照してください。
FALSE および TRUE シンボルは非推奨になりました

SF-TOGGLE 引数を除き、新しいスクリプトでは TRUE と FALSE を使用しないことをお勧めします。

FALSE および TRUE シンボルは、ScriptFu 言語では非推奨になりました。 彼らは決して Scheme 言語を使用していませんでした。

代わりに、v3 方言を使用する必要があります。 そして、Scheme 言語記号 #f と #t を使用します。

ScriptFuではFALSEは0です そしてTRUEは1です。 ただし、FALSE は #f と同等ではありません。

FALSE と TRUE を比較するには、= 演算子を使用する必要があります。 FALSE と TRUE は数値です。 Scheme の = 演算子は数値演算子であり、論理演算子ではありません。

Scheme では、#f を除くすべての値が true です。 空のリストは真実です。 数字の 0 が真実です。 #f だけが真実ではありません。

v3 方言では、単一のブール値 (述語) を返す PDB プロシージャ #f や #t などの 1 つの要素を返します。

v2 方言では、依然として (0) または (1) を返します。 つまり、数値 0 または 1 がリストにラップされます。

ブール値の SF_TOGGLE 引数を TRUE および FALSE を使用してスクリプトと比較する必要があります。 これらは #t と #f ではありません 。
理論的根拠

ScriptFu 言語はよりシンプルで小さいです。 TRUE と FALSE は、Scheme 言語にすでに存在する概念と重複します。
変更例

スクリプトの SF_TOGGLE 引数の宣言では、引き続き TRUE と FALSE を使用できます。

SF-TOGGLE     "Gradient reverse"   FALSE

ブール引数とスクリプトの比較は、 なりません。 v2 方言のままでなければ

(if (= should-invert TRUE)
    ; do invert )

ブール値を取得して PDB プロシージャを呼び出します。

(gimp-context-set-feather TRUE)
=>
(gimp-context-set-feather #t)

変数の真偽を論理的に検査します。

(if (= shadow TRUE) ...
=>
(if shadow ...

quit 関数を使用してスクリプトを中止する

quit を使用してエラーを宣言することをお勧めします。 gimp-message とともに

「quit」という機能はSchemeにあります。 これにより、スクリプトが終了、つまりシステムに戻ります。 この関数はスクリプト内のどこでも使用できます。 他の言語の「return」ステートメントと同様です。

ScriptFu v3 では、インタプリタがスクリプトの解釈を停止します。 GimpPDBStatus タイプのエラーが発生します。 つまり、すぐに GIMP アプリまたは他の呼び出し元にエラーを返します。 GIMP アプリでは、次のフレーズを含むエラー メッセージが表示されます。 「スクリプトはエラー コード x で終了しました。」

呼び出し元が別の PDB プロシージャ (プラグインまたはスクリプト) の場合 呼び出し元はスクリプトの呼び出しの結果を確認する必要があります そしてエラーを伝播させます。 ScriptFu 自体は常に PDB への呼び出しの結果をチェックします。 そしてエラーを伝播させます。 エラーメッセージ文字列を連結します。

ScriptFu v2 では、(quit -1) などの呼び出しによってスクリプトが中止されました。 しかし、呼び出し元にエラーは返されませんでした (通常は GIMP アプリ) エラーコードは返されませんでした。
スクリプトが値を返さない

ScriptFu では、スクリプトは void を返します。 有用な値を返すプラグイン スクリプトを定義することはできません。 スクリプト登録関数は戻り値を宣言しないことに注意してください。 スクリプトには副作用しかありません。

スクリプト プラグインの最後の式は はありません プラグインの値で 。 スキームにあるとおりです。

PDB プロシージャとして、スクリプトは成功することも失敗することもあります。 ただし、成功は最後に評価された式の値には依存しません。 スクリプトが失敗を返すようにするには、quit 関数を呼び出す必要があります。
理論的根拠

以前は、スクリプトは通常、エラー時に gimp-message を呼び出していましたが、 呼び出し元にエラーを与えることなく。 ユーザーはエラー メッセージを見落としがちでした。

quit を呼び出す直前に gimp-message を呼び出す必要があります。 有益なエラーメッセージが表示されます。 印刷を終了する数値コードはユーザーにとって有益ではありません。 スクリプト作成者にのみ。


このスクリプトは早期に終了します。

(define (script-fu-my-plugin)
    ...
  (gimp-message "Too many drawables.")
  (quit -1)
  (display "this never evaluated")
)
...

表示機能を使用して端末に書き込む

スクリプトのデバッグやログ記録に表示機能を使用することをお勧めします。 ただし、ユーザー入力を求めるプロンプトは表示されません。

Display は R5RS 標準の Scheme 関数です。 開いているターミナル (Linux の stdout など) に文字列を書き込む必要があります。

ScriptFu v3 ではそうなります。 GIMP アプリが起動されたターミナルに出力が表示されます。 (これはオプションであり、通常はグラフィカル デスクトップでは実行されません。)

ScriptFu v2 では、ターミナルに書き込めませんでした。 ディスプレイはストリームに書き込み、GIMP アプリに返され、通常は破棄されました (エラーが発生した場合を除き、ストリームは はエラー メッセージのプレフィックスでした。)

例:

(display "The script is here") (newline)

displayln は ScriptFu にないことに注意してください。



長文でしたね。
お疲れ様でした。  ;)



0 件のコメント:

コメントを投稿