Script-Fu その他


GIMP の高速起動

起動時に引数を与えれば、高速起動できます。

 -d は、パターン、グラデーション、パレット、ブラシを読込まず
-f は、フォントを読込まない

>gimp-2.8 -d -f

Script-Fu コンソールの複数行入力

load で読み込む

適当な .scm ファイルを作って、それをロードする。

; C ドライブにファイルを作り、それをロードする場合

(load "C:\\test.scm")

Script-Fu を手軽に拡張

for-each などが使えない場合、TinyScheme の init.scm を GIMP の script フォルダに入れましょう。

もちろん、あなたのコードを配布する際は、使った関数の定義も併せて配布する。

スクリプトの登録を楽に

ラッパー関数を用意して、引数の数を減らす。

作者名や著作権など決まりきった入力はなくす。

; 定義
(define register (lambda (name)
  (script-fu-register name  
                      "Hello Hoge (label)..." 
                      "(description)" 
                      "morinaga" 
                      "(c) morinaga 2014" 
                      "2014.10.15" 
                      "(image type)")
  (script-fu-menu-register name "<Image>/Filters")))

; 使用
(register "hoge")

グローバル空間の汚染

GIMP に読み込まれる全ての Script-Fu スクリプトは、1つのグローバル空間に投げ込まれる。

そのため、他のスクリプトで書かれたコードが、後から読み込まれたコードによって汚染される危険性がある。

手続きでカプセル化するなど、大域変数の使用を控える必要がある。

internal define

Script-Fu は、define の内部で define が使用できます。

つまり、局所変数を define で定義できます。

letrec が存在するより前は、internal define で局所関数を作っていたようです。


(define foo (lambda ()
  (define bar 1)
  (define baz 2)
  (+ bar baz)))

macro

define-syntax や define-macro とは違い、定義時の引数にはマクロ名も含まれる。

; init.scm では、when は次のように定義されていますが、
; form に when の名前が含まれているためそれを避けて処理している

(macro (when form)
  `(if ,(cadr form) (begin ,@(cddr form))))