[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: w3m-search customize
>>>>> In [emacs-w3m : No.02250]
>>>>> kkonishi <ironbeat@mail.st.rim.or.jp> wrote:
[...]
小西さん> byte-compile-fileすると、w3m-search.elcは作りますが
小西さん> ** The function `caddr' is not known to be defined.となります。
手動でファイルを一つだけ byte-compile していらっしゃるのでしたら、
その前に
M-x load-library
Load library: cl
とすれば良いのではないかと思います。
caddr は cl.elc が提供する関数なのですが、cl (と cl-macs) が
load された環境で byte-compile すると、
(caddr X) -> (car (cdr (cdr X)))
というソースレベルでの解凍が行なわれた後に compile され、実際に
それが使われるときも caddr という関数は呼ばれないので問題は起こ
りません。
小西さん> w3m_el-1.2.1tar.gzを解凍し、./configureする前にw3m-search.el
小西さん> のソースを変更し、そのままmake make installすれば、このエラー
小西さん> は出ずに無事インストールを完了する事が出来、w3m-searchも問題
小西さん> 無く機能します。
そのとき、まさに上記のことが行なわれるわけです。
小西さん> 何かやりかたにマズイところがあるのでしょうか?
ええと、マズいということはないのですが、一般的に複数のモジュール
で構成されるパッケージにおいて、ファイルの単品を byte-compile す
るのはあまりお勧めできません。これは emacs-w3m に限ったことでは
ありません。w3m-search.el については、ファイルの冒頭に
(eval-when-compile (require 'cl))
と書き込むことによって、「compile するときは cl を load する」と
いうことを自前で行なうようになるので、単品を byte-compile しても
問題は起こらなくなるでしょう。しかし、cl 以外にも何かのライブラ
リに依存している場合が多々ありますから、いつでも通用するとは限り
ません。
現在の emacs-w3m について明確な見解は出せませんが、単品 compile
は危険だと思っておいていただいた方が良いと思います。一方、開発者
の側は、単品 compile も可能なコードを書くように努力すべきです。
--
Katsumi Yamaoka <yamaoka@namazu.org>