lisp - 为什么 GIMP 不能处理这个脚本?

标签 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->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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="96e5e2e3f7e4e2d6e2f3e5e2e2e4f7f5fda2b8f5f9fb" rel="noreferrer noopener nofollow">[email protected]</a>>"
  "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")

如果注释位于文件顶部,则脚本根本不会加载。删除注释后,GIMP 在刷新脚本时会抛出错误“加载 C:\Users\Stuart.gimp-2.6\scripts\export-layers.scm 时出错:错误:不匹配的括号:1”。我不知道那是什么,因为当我在 Codepad 上运行它时它解析得很好(它在 script-fu-register 点处中断)。

最佳答案

此行为与行结尾缺失(注释掉所有后续文本的注释)时发生的情况一致。检查以确保您的编辑器没有做一些荒谬的事情,例如在 Windows 上以 CR 行结尾保存文件。

关于lisp - 为什么 GIMP 不能处理这个脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6505184/

相关文章:

scheme - 如何更改 Atom 中的脚本包以使用 Scheme 而不是 Guile 运行代码?

list - 一切都是计划中的 list 吗?

recursion - 这个 Racket 程序是如何使用 add1 的?

GIMP 调色板文件 (.gpl) 格式/语法?

python - 如何使用 Gimp/OpenCV Color 将图像分成彩色 RGB 图层?

gimp - 如何将 "Tool Options"对接到 "Toolbox"?

lisp - defparameter vs defun 用于传递函数

methods - LISP - 从类中获取所有方法名称

merge - 在不同的文件中查找重复的函数名称

recursion - 如果在列表中找不到该数字,如何返回 false