XEmacs and APEL
Katsumi Yamaoka
yamaoka @ jpl.org
2002年 7月 24日 (水) 13:53:12 JST
>>>>> In [apel-ja : No.00701]
>>>>> Shuhei KOBAYASHI <shuhei @ aqua.ocn.ne.jp> wrote:
小林さん> 何となく山岡さんの問題意識がわかってきたような...
山岡> (defun-maybe md5 (args) ....)
山岡> のような微妙なものを書いてしまうと失敗するので、
小林さん> ええと, これの状況がよく理解できないのですが.
ごめんなさい、的確な具体例が思い出せません。それは md5 ではなかっ
たかもしれません。ですが、
小林さん> * Emacs-w3 は, 自身の compile 時の warning を無くすために
小林さん> (eval-when-compile (defun md5 (args) ...)) のようなことをし
小林さん> ている?
そういう理由で defun-maybe で関数が生成されないことはよくありました。
小林さん> * (defun-maybe md5 (args) ...) を含むファイルが (require 'w3)
小林さん> している?
小林さん> いや, これでは問題は起きないはずだなぁ... あぁ, なるほど,
それは自分の数ある失敗例にありますが、比較的簡単に原因が見つかり
ますね。
小林さん> * Emacs-w3 は md5 を含む(本当?)多くの emulating functions を
小林さん> 持っている.
小林さん> * (defun-maybe md5 (args) ...) を含むファイルが warning を無
小林さん> くすだけの目的で (eval-when-compile (require 'w3)) してい
小林さん> る.
こういうのも簡単に原因が見つかる失敗の例です。そして
小林さん> => compile 時に Emacs-w3 によって定義された md5 を見つけた
小林さん> defun-maybeは, その環境には常に md5 が存在すると判断して
小林さん> 何もしない.
となってしまうことは何度か経験しました。
小林さん> ということでしょうか? これはこれで変なことをしているという気
小林さん> もしますが;-p
うーん、やっぱり md5 ではなかった気がします。とは言え lpath.el
や dgnushack.el をいじる機会が多いぼくは、defun-maybe が関数を生
成しない例を何度も経験しており、以前は単に「無かったら関数を生成」
する便利なマクロとしてしか認識していなかったために、失敗を繰り返
していたのでした。
山岡> しかし、たいていの環境には存在している、でもそうでない場合も確か
山岡> にあるから何とかしようという場合は、例えば XEmacs にある
山岡> (macroexpand '(defun-when-void FOO (BAR) BODY))
山岡> => (if (fboundp 'FOO)
山岡> nil
山岡> (defun FOO (BAR)
山岡> BODY))
山岡> のようなものを使えばよかったのですよね。
小林さん> ;; この定義では (symbol-file FOO) が出来なくなるような...
あ、これはすごい。
(if (fboundp 'FOO)
nil
(defalias 'FOO (lambda (BAR)
BODY)))
これなら良いのでしょうか。
小林さん> 「たいていの環境」から「そうでない環境」に .elc を持って行く
小林さん> という話ならそうです. うーん, そうか, XEmacs では多くのもの
小林さん> が base system の外に出されてしまって, edebug なども常に存在
小林さん> するとは限らなくなっているのだよなぁ.
小林さん> ;; (require 'pym) しても edebug-def-spec の存在は保証されな
小林さん> ;; いということ.
小林さん> (XEmacs Packages に限らない) package system というのは
小林さん> *-maybe よりも後から広まったので想定外なのだよなぁ. package
小林さん> system が入ってきたことで, compile 時には存在したはずのもの
小林さん> が .elc が load された環境では存在しないということが起こりや
小林さん> すくなっていて, *-maybe の使用には細心の注意が必要になってい
小林さん> るのか.
各パッケージの auto-autoloads.elc が正しく作られていて、同じパッ
ケージが存在する環境で使うぶんには問題無いと思いますよ。
山岡> ;; XEmacs with/without Mule の件は、ちょっと話が違いますが。
小林さん> ひとつ確認したいのですが, XEmacs Packages というのはどんな範
小林さん> 囲の XEmacsを対象としているのでしょうか? 安定版と開発版の最
小林さん> 新の version だけですか?
XEmacs 21.1 以上のすべての版で共通であると認識しています。
with/without Mule で共通なのが xemacs-package で、Mule 専用のも
のが mule-package としてそれぞれ別のディレクトリにインストールす
ることになっています。
小林さん> ;; ところで, XEmacs with Mule で Packages を作る特別な理由は
小林さん> ;; あるのかな?
え? ユーザの利便性、って、そんなことおっしゃってるのではないです
ね。あまりにパッケージの存在になれてしまったので、わかりませんが。
^^;;
小林さん> "Use `*-maybe' only when you exactly know what you are doing!"
小林さん> ↑こう思われていないことが問題なのね.
さよう、いつでも使える便利なマクロ。:-p
--
Katsumi Yamaoka <yamaoka @ jpl.org>
More information about the APEL-ja
mailing list