Я занят скриптом-fu и продолжаю получать «Ошибка (: 1) незаконная функция». Я не эксперт Scheme/Lisp, просто пытаюсь автоматизировать некоторые фотографические задачи. Документация редка - либо GiMP только пишет об их собственных внутренних действиях, но не о синтаксисе Схемы в Script-fu, или я нахожу «советы» для GiMP v1.0 (т. Е. Так устарели, что они бесполезны).GiMP (Scheme) Ошибка скрипта-fu «незаконная функция»
Я посмотрел на кучу скриптов, поставляемых с GiMP, пытаясь узнать больше и понять это, но безрезультатно. Я прошу сюда за помощью, чтобы удалить ошибку, не макета отступа или тот факт, что Python-фу существует и т.д.
И с этим, кодом (сводятся к функциональному скелету):
;;
;; license, author, blah blah
;; FOR ILLUSTRATION PURPOSES
;; GiMP 2.8 LinuxMint 18.1
;; does the work, but then blows up saying "Error (: 1) illegal function"
;;
(define (script-fu-ScriptFails InImage InLayer pickd mrge)
(let* (
(CopyLayer (car (gimp-layer-copy InLayer TRUE)))
)
(gimp-image-undo-group-start InImage)
(gimp-image-add-layer InImage CopyLayer -1)
(gimp-drawable-set-visible CopyLayer TRUE)
;; Perform CHOSEN action on CopyLayer
(if (equal? pickd 0) ( ;; keep just the RED
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 1.0 0 0 0 0 0 0 0 0)
(gimp-drawable-set-name CopyLayer "RED")
))
(if (equal? pickd 1) ( ;; keep just the GREEN
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 0 0 0 0 1.0 0 0 0 0)
(gimp-drawable-set-name CopyLayer "GRN")
))
(if (equal? pickd 2) ( ;; keep just the BLUE
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 0 0 0 0 0 0 0 0 1.0)
(gimp-drawable-set-name CopyLayer "BLU")
))
(if (equal? mrge #t) ( ;; to merge or not to merge
(gimp-layers-flatten InImage)
))
(gimp-image-undo-group-end InImage)
(gimp-display-flush)
)
)
(script-fu-register "script-fu-ScriptFails"
_"<Image>/Script-Fu/ScriptFails..."
"Runs but fails at the end. Why? Please help!"
"JK"
"(pop-zip,G-N-U)"
"2016.12"
"RGB*"
SF-IMAGE "The Image" 0
SF-DRAWABLE "The Layer" 0
;; other variables:
SF-OPTION "Effect" '("R_ed" "G_rn" "B_lu")
SF-TOGGLE "Merge Layers" FALSE
)
Спасибо так много, Сильвестра. Ваше объяснение «начать» имеет полный смысл - я не обратил внимания на это, пытаясь забрать немного Схемы. Я посмотрел на множество разных примеров и других сценариев, которые я начал загипнотизировать. Применяя это для правильного использования синтаксиса, когда все это работает. У меня был традиционный C-мозг, пытающийся создать блок для двух инструкций. Схема, еще одна маленькая история. Весело учиться. Еще раз спасибо! – fotonix