Lisp 为什么可以';GIMP不能处理这个脚本吗?

Lisp 为什么可以';GIMP不能处理这个脚本吗?,lisp,scheme,gimp,script-fu,Lisp,Scheme,Gimp,Script Fu,我在Gimp中将此脚本作为.scm使用: ;MIT license. (define (script-fu-export-layers img drw path outnameformat) ; credit to Vijay Mathew on Stack Overflow for the expand keywords function (let ((expand-keywords (lambda(format tokens) (let loop ((slist (string

我在Gimp中将此脚本作为.scm使用:

;MIT license.

(define (script-fu-export-layers img drw path outnameformat)
; credit to Vijay Mathew on Stack Overflow for the expand keywords function
  (let ((expand-keywords (lambda(format tokens)
    (let loop ((slist (string->list string))
               (in-replace-mode #f)
               (result ""))
      (if (not (null? slist))
          (let ((c (car slist)))
            (cond (in-replace-mode
                   (let ((token (car (cdr (assoc c tokens)))))
                     (loop (cdr slist) #f (string-append result token))))
                  ((char=? c #\~)
                   (loop (cdr slist) #t result))
                  (else
                   (loop (cdr slist) #f (
                      string-append result (make-string 1 c))))))
          result)))))
  (for-each (lambda (layer)
    (let* (
        (name (expand-keywords outnameformat '(
          (#\i (car(gimp-image-get-name img)))
          (#\l (car(gimp-drawable-get-name layer))))))
        (outpath (string-append path "/" name)))
      (gimp-file-save RUN-NONINTERACTIVE img layer outpath name)
  )) (vector->list(cadr (gimp-image-get-layers img)))))
)

(script-fu-register
  "script-fu-export-layers"
  "L_ayers"
  "Export all layers as individual files."
  "Stuart P. Bentley <stuart@testtrack4.com>"
  "Copyright 2011 Stuart P. Bentley"
  "June 28, 2011"
  "*"
  SF-IMAGE       "The Image"         0
  SF-DRAWABLE    "The Layer"         0
  SF-DIRNAME     "Output directory"  ""
  SF-STRING      "Filename Format (~i = image name, ~l = layer name)"
                                                          "~i-~l.png"
)
(script-fu-menu-register "script-fu-export-layers" "<Image>/File/E_xport")
;麻省理工学院执照。
(定义(脚本fu导出图层img drw路径输出名称格式)
;要归功于Vijay Mathew的扩展关键字功能的堆栈溢出
(let((展开关键字)(lambda(格式化标记)
(let循环((slist(字符串->列表字符串))
(在替换模式下#f)
(结果“))
(如果(不是(空?列表))
(让((c(汽车滑行)))
(cond)(在更换模式下
(let((代币(car)cdr(关联c代币(()()))))
(循环(cdr slist)#f(字符串附加结果标记)))
((字符=?c#\~)
(循环(cdr slist)#t结果)
(其他
(环路(cdr滑动列表)#f(
字符串附加结果(使字符串1为c‘‘‘‘‘‘‘‘)
结果(())())
(对于每个(λ(层)
(让我们*(
(名称(将关键字展开为outnameformat'(
(#\i(car(gimp-image-get-name-img)))
(#\l(car(gimp可绘制的获取名称层()()())))
(输出路径(字符串附加路径“/”名称)))
(gimp文件保存运行-非交互式img层输出路径名称)
))(向量->列表(cadr(gimp图像获取层img())))
)
(手稿)
“导出层脚本”
“拉耶斯”
“将所有图层导出为单个文件。”
“斯图尔特·P·本特利”
“版权所有2011 Stuart P.Bentley”
“2011年6月28日”
"*"
SF-IMAGE“图像”0
SF-DRAWABLE“图层”0
SF-DIRNAME“输出目录”“”
SF-STRING“文件名格式(~i=图像名,~l=图层名)”
“~i-~l.png”
)
(脚本fu菜单注册“脚本fu导出层”“/File/E_导出”)

注释位于文件顶部时,脚本根本不会加载。删除注释后,GIMP在刷新脚本时抛出一个错误,即“加载C:\Users\Stuart.GIMP-2.6\scripts\export-layers.scm时出错:错误:不匹配的括号:1”。我不知道这是怎么回事,因为当我在代码板上运行它时,它解析得很好(它在脚本fu寄存器点处中断)。

这种行为与缺少行结尾(注释掉所有后续文本)时会发生的情况是一致的。检查以确保你的编辑器没有做一些可笑的事情,比如在Windows上用CR行结尾保存文件。

如果在第一条评论中出现呕吐,你是否尝试过不使用
;归功于
评论?@Alex K:D'oh。这让我找到了解决问题的正确途径。最终的脚本在GIMP插件注册表中列出。不,不是LF line endings-CR,就像“只有Mac OS使用过的那种,甚至在过去的十年里都没有使用过的那种”。