XEmacs and APEL
Katsumi Yamaoka
yamaoka @ jpl.org
2002年 7月 26日 (金) 09:58:24 JST
>>>>> In [apel-ja : No.00711]
>>>>> Shuhei KOBAYASHI <shuhei @ aqua.ocn.ne.jp> wrote:
山岡> とても良いと思います。ただ、def*-maybe はそのままにして、新たに
山岡> def*-when-void を作るというのも捨て難いです。
小林さん> def*-maybe は(def*-when-void の動作を期待して)広く使われてい
小林さん> るので,やはり「安全」なものに変更した上で, これはこれで新た
小林さん> に作りませんか?
小林さん> def*-maybe と両方に「普通は def*-when-void の方を使え」と書
小林さん> いておいて.
ということは def*-maybe-enable-compile-time-hack のデフォルト値
は t で良いですね(?)。
うーん、ぼくみたいな「危険」な人がたくさんいるかどうか定かではあ
りませんが、今のところ障害が起きた話は (自分の口以外からは ^^;;)
聞いたことが無いので、def*-when-void を併設するならばそんなフラ
グは要らない気もしますが。
;; (let ((def*-maybe-enable-compile-time-hack nil))
;; (defun-maybe FOO (ARG) "DOC" BODY))
;; のような感じで部分的に切り替えるのは無理ですね。^^;;
ちょっと書いてみました。
(defmacro defun-maybe (name &rest everything-else)
"Define NAME as a function if NAME is not defined.
Take notice that it will normally never produce a byte-compiled code
when the function NAME has already been defined at the compile-time.
Use `defun-when-void' to check for the existence of the function at
the load-time. See also the function `defun' and the variable
`def*-maybe-enable-compile-time-hack'."
...)
(defmacro defun-when-void (name &rest everything-else)
"Define NAME as a function if NAME is not defined at the load-time.
See also the function `defun' and the macro `defun-maybe'."
(` (if (not (fboundp (quote (, name))))
;; Use `defalias' to register the function in `load-history'.
(defalias (quote (, name)) (lambda (,@ everything-else))))))
Lisp 関数の defalias が FSF Emacs に登場したのがいつだったのか
ChangeLog からはよくわからないのですが、Nemacs (18.55) には無い
ので、もし上記の定義を使うならば pym.el は poe.el を load しなけ
ればなりませんから、やはり current-load-list を操作する方が良い
のでしょうね。もっとも Emacs 18 には load-history なんて無いので
すが。:)
それから少し気になること。
http://mail.gnu.org/pipermail/emacs-devel/2002-July/010629.html
http://mail.gnu.org/pipermail/emacs-devel/2002-July/010684.html
二本目の記事で RMS師が load-history の内部形式を変えるような話を
しています。たぶん current-load-list だけを操作する分には問題無
いのでしょうけれども、やはりこういった Emacs の内部資源をいじる
のはちょっと怖いですね。^^;;
--
Katsumi Yamaoka <yamaoka @ jpl.org>
More information about the APEL-ja
mailing list