Scheme 带有非法函数错误的Gimp脚本fu

Scheme 带有非法函数错误的Gimp脚本fu,scheme,gimp,script-fu,Scheme,Gimp,Script Fu,我正在写我的第一个剧本,我的计划还不是很清楚 我的脚本工作正常,但我想添加一个其他参数(onlyvisible),我有一行代码在某个地方导致非法函数错误,但在另一个地方没有 谢谢您的帮助:-) 这是我的台词: (display " onlyvisible: ")(display onlyvisible)(newline) 这是我的密码: (define (pitibalrog-test img filename onlyvisible) (let* ( (imgcopy

我正在写我的第一个剧本,我的计划还不是很清楚

我的脚本工作正常,但我想添加一个其他参数(onlyvisible),我有一行代码在某个地方导致非法函数错误,但在另一个地方没有

谢谢您的帮助:-)

这是我的台词:

(display " onlyvisible: ")(display onlyvisible)(newline)
这是我的密码:

(define (pitibalrog-test img filename onlyvisible)
(let*
    (
        (imgcopy (car ( gimp-image-duplicate img))) ; Copy to avoid changes on the original image
    )
    (display " onlyvisible: ")(display onlyvisible)(newline)
    (pitibalrog-export-layers imgcopy (gimp-image-get-layers imgcopy) filename onlyvisible) 
)
)


(define (pitibalrog-export-layers img listlayers filename onlyvisible)
(let*
    (
        (nblayers (car listlayers))
        (layers (cadr listlayers))
        (display "EXPORT LAYERS: LAYERS = ")(display layers)(newline)

        (display " onlyvisible: ")(display onlyvisible)(newline) ; <--- HERE IT WORKS
        (index 0)

        (basename (unbreakupstr (butlast (strbreakup filename ".")) "."))
        (extension (car (last (strbreakup filename "."))))
        (layer)
    )

    (display " onlyvisible: ")(display onlyvisible)(newline) ; <--- HERE IS THE PROBLEM


    (while (< index nblayers)
        (set! layer (aref layers index))
        (gimp-item-set-visible layer FALSE)
        (set! index (+ index 1))
    )
    (set! index 0)
    (while (< index nblayers)
        (set! layer (aref layers index))
        (set! filename (string-append basename (car(gimp-drawable-get-name layer)) "." extension))

        (pitibalrog-export-layer img layer filename onlyvisible)

        (set! index (+ index 1))
    )
)
)

(define (pitibalrog-export-layer img layer filename onlyvisible)
    (display " - export layer: ")(display layer)(newline)

    (gimp-item-set-visible layer TRUE)

    ; LAYER GROUP
    (when (= (car(gimp-item-is-group layer)) 1)
        (display "Layer ")(display layer)(display " is a group")(newline)
        (pitibalrog-export-layers img (gimp-item-get-children layer) filename onlyvisible)
    )
    ; REAL LAYER
    (when (= (car(gimp-item-is-group layer)) 0)
        (display "Layer ")(display layer)(display " is not a group")(newline)
        ; (gimp-file-save RUN-NONINTERACTIVE img layer filename filename) ; NO MASK HANDLING!!!
        (gimp-file-save RUN-WITH-LAST-VALS img layer filename filename)
    )

    (gimp-item-set-visible layer FALSE)
)

(script-fu-register "pitibalrog-test"
"<Image>/Script-Fu/Utils/pitibalrog-test..."
"Export all layers of the image in separete files" ;comment
"pitiBalrog" ;author
"pitiBalrog" ;copyright
"November 2012" ;date
"*A"
SF-IMAGE "img" 0
SF-FILENAME "destination" ""
SF-TOGGLE   "Export only visible layers" TRUE
)
(定义(仅pitibalrog测试img文件名可见)
(让*
(
(imgcopy(car(gimp图像复制img));复制以避免更改原始图像
)
(显示“仅可见:”)(仅显示可见)(换行符)
(pitibalrog导出层imgcopy(gimp图像获取层imgcopy)仅文件名可见)
)
)
(定义(pitibalrog导出图层img listlayers仅文件名可见)
(让*
(
(nblayers(汽车列表层))
(层(cadr列表层))
(显示“导出图层:图层=”)(显示图层)(换行)

(display“onlyvisible:”)(display onlyvisible)(newline);免责声明:我从未使用script fu做过任何工作,因此我不知道那些script fu特定的过程做什么。但是,Scheme我可以做

请仔细查看
let
特殊表单所需的语法:

(let <List of forms that assign values>
   <body>)
最后,请不要将scheme代码的格式设置为C或Java等。以下是第一个过程的schemer友好版本:

(define (pitibalrog-test img filename onlyvisible)
  (let ((img copy (car (gimp-image-duplicate img))))
    (display " onlyvisible: ")
    (display onlyvisible)
    (newline)
    (pitibalrog-export-layers imgcopy (gimp-image-get-layers imgcopy) filename onlyvisible)))

格式良好的代码会让Schemer感到高兴,你也更容易得到快速的帮助。

一个简单的(显示“FOO”)会犯同样的错误,你知道你也可以用Python编写GIMP,不是吗?(这样你只需要学习GIMP APi和怪癖-而不是GIMP APi,怪癖,以及其他非常不同的语言you也可以使用)@jsbueno:是的,我看到了,但我不懂python,当我不得不选择的时候,我看到scheme是标准脚本,所以我决定选择scheme。在那之后,我发现scheme和我所知道的其他语言之间的差距。但是现在我很高兴学习一种非常不同的其他语言。我只是尝试了你的建议,效果很好。我irst不明白,因为我已经尝试在分配部分中不显示,但我有2个显示行!我不明白的是在scheme中,您可以更改几乎任何东西的值。它与我所知道的其他语言非常不同。对于缩进,感谢您的回答,我将在这里发布时对此非常小心,但请注意现在,它帮助我更好地理解所有括号后面的代码……这是我的第一个方案脚本:-s@Alex--很乐意提供帮助!关于格式还有一件事:确保您使用的任何编辑器都能够为您突出显示匹配的括号。如果您必须计算括号,编写Lisp就没有那么有趣了。是的,我注意到了那个!我使用记事本+,它突出显示匹配的括号。但我知道如果我想有很多乐趣,我可以使用记事本:-)
(define (pitibalrog-test img filename onlyvisible)
  (let ((img copy (car (gimp-image-duplicate img))))
    (display " onlyvisible: ")
    (display onlyvisible)
    (newline)
    (pitibalrog-export-layers imgcopy (gimp-image-get-layers imgcopy) filename onlyvisible)))