[Date Prev][Date Next][Thread Prev][][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>