文字通り例に従ったと思いますが、うまくいきません。マクロを使用するdefimage
と、イメージ記述子は作成されませんが、使用create-image
するとすべて同じ引数になります。以下は私が試したものです:
(defimage test ((:type png :file "/home/wvxvw/Projects/haxe-mode/trunk/ede/etc/images/interface.png")))
test ; nil
(defimage test (:type png :file "/home/wvxvw/Projects/haxe-mode/trunk/ede/etc/images/interface.png"))
test ; nil
(insert-image test) ; error
(setq test (create-image "/home/wvxvw/Projects/haxe-mode/trunk/ede/etc/images/interface.png" 'png nil))
(image :type png :file "/home/wvxvw/Projects/haxe-mode/trunk/ede/etc/images/interface.png")
(insert-image test) ; shows image
ヒントはありますか?
編集:
上記のコードは問題を示しているはずですが、実行しようとしている実際のコードはもう少し複雑です。念のため投稿する:
(require 'cl)
(defvar haxe-images-dir
(concat (file-name-directory load-file-name) "etc/images/"))
(defmacro haxe-define-images (images)
(append
'(progn)
(loop for image in images
collect
`(defimage ,(intern (concat "haxe-" image "-icon"))
((:type png :file
(concat haxe-images-dir ,(concat image ".png"))))))))
(haxe-define-images
("private" "public" "static" "instance" "inline"
"volatile" "variable" "class" "interface" "macro"
"enum" "deftype" "function"))
EDIT2:
これが最終的に機能する方法です。おそらく、コードの一部をコンパイルして別の場所からロードしたか、そのような謎...
(require 'cl)
(require 'haxe-project)
(defmacro haxe-define-images (images)
(append
`(progn)
(loop for image in images
with images-root = (concat haxe-install-dir "etc/images/")
collect
`(defimage ,(intern (concat "haxe-" image "-icon"))
((:type png :file
,(concat images-root image ".png")))))))
(haxe-define-images
("private" "public" "static" "instance" "inline"
"volatile" "variable" "class" "interface" "macro"
"enum" "deftype" "function"))