[Mew-dist 11123] Re: Symbol's value as variable is void: mew-marker-header-end
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
1999年 10月 29日 (金) 18:05:37 JST
From: Hirakawa Masaya <mhira at example.com> さん曰く
Subject: [Mew-dist 11104] Re: Symbol's value as variable is void: mew-marker-header-end
Message-ID: <19991028185101V.mhira at example.com>
Date: Thu, 28 Oct 1999 18:51:10 +0900
平川> > そうだと思います。mew-cite-color.el から (mew-header-p) とか
平川> > (mew-header-end) とか本体で defmacro されているものを呼んでいる
平川> > ので、一度きれいに Mew 1.94 を立ち上げてから mew-cite-color.el
平川> > を byte-comple すれば大丈夫だと思います。
平川>
平川> mew-cite-color.el は 1.94 で初めてインストールしたので、古いものを使っ
平川> てるわけではないと思うのですが、新たに mew-1.94.tar.gz を解凍して
平川> mew-cite-color.el を byte-compile してみたら、うまくいきました。
平川> しかし、1.94 をインストールした時の解凍ディレクトリで byte-compile す
平川> るとうまくいかないのは何故なのでしょう?
mew-cite-color.el に限らず contrib/*.el は mew で定義している関
数やマクロを呼んで使っています。mew に限った話では無いのですが、
defun で定義されているものを呼んでいる elisp は何も問題ないので
すが、defmacro で定義されているものは、byte-compile したときに
*.elc にその defmacro の内容を埋め込んでしまいます。
例えば、mew-cite-color.el で使っている mew-header-p() は
mew-syntax.el で
(defmacro mew-header-p ()
'(next-single-property-change (point-min) 'read-only))
とマクロで定義されているので、
byte-compile 前 (ようするに *.el の中身)が
(if (mew-header-p)
とすると、byte-compile 後 (ようするに *.elc の中身) は
(if (next-single-property-change (point-min) 'read-only)
となります。
ここで、mew 1.93 が load された状態(あるいは、load される状態)で
mew-cite-color.el を byte-compile すると、
平川> 1.94 は /usr/local/lib/mule/site-lisp/ にインストールされているのです
平川> が、/usr/local/lib/site-lisp/mew/ の中身が 1.93 のものでした。
平川> この mew ディレクトリで grep をかけたら、該当する variable が存在しま
平川> した。
平川> 今まで *.el にしか grep をかけていなかったのですが、試しに *.elc にも
平川> grep をかけてみたところ、mew-cite-color.elc で引っ掛かりました。
というように 1.93 の (defmacro mew-header-p () の中身が
mew-cite-color.elc に書き込まれてしまうため、平川さんの様な症状
になったと思われます。
また、byte-compile せず *.el の状態で使っていると、
mew-cite-color.el を load したときに defmacro の中身を探す(?)の
で問題が無いわけです。
# ちなみにこの件に引っかかる方は結構いらっしゃったりします。:-)
--
白井秀行 (mailto:shirai at example.com)
Mew-dist メーリングリストの案内