Error: set!: unbound variable: copy-layer

tksmashiw2008-09-26

GIMP自作プラグインを作っている関係で、Script-Fu 青空教室のレイヤー複製スクリプトを「~/gimp-2.5/scripts/duplicate-layer.scm」に保存し、GIMPから呼び出してみると、

実行中にエラーが発生しました:
(script-fu-duplicate-layer 1 152)
Error: set!: unbound variable: copy-layer

とエラーが返ってきた。
調べてみると、晴れときどきGIMPに、Script-fuのSchemeインタプリタがSIODからTinySchemeへ変わり、未宣言の変数が使えなくなったためだと書いてあった。これを直すには突然!setではなく、letを使わなければいけないらしい。
Script-Fu 青空教室にletの使いかたが載っていたので、これを参考に書き換えてみた。(ついでにメニューバーでの表示位置を「レイヤー」以下に変更している。)
duplicate-layer.scm:

(define (script-fu-duplicate-layer img layer)

  (let ((copy-layer (car (gimp-layer-copy layer 1))))
    (gimp-image-add-layer img copy-layer -1)
    (gimp-displays-flush)
  )
)

(script-fu-register
  "script-fu-duplicate-layer"
  "<Image>/Layer/Test/Duplicate-layer"
  "description"
  "name"
  "copyright"
  "date"
  "RGB*"
  SF-IMAGE     "Image"     0
  SF-DRAWABLE  "Drawable"  0)

これで問題なく動作した。