[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: define-minor-mode and autoload
From: Katsumi Yamaoka <yamaoka@xxxxxxx> さん曰く
Subject: [emacs-w3m:09235] define-minor-mode and autoload (was Re: w3m-session-save|select)
Message-ID: <b4mtzwvqmcl.fsf_-_@xxxxxxx>
Date: Fri, 09 Mar 2007 09:42:02 +0900
> 1.
> w3m-fb.el では define-minor-mode を使って定義する w3m-fb-mode に
> ;;;###autoload クッキーがあります。このこと自体はまっとうです。
> それは w3m-load.el に登録され、これが w3m/auto-autoloads.elc を
> 介して読み込まれます。XEmacs 21.4 が w3m-load.el に登録するやり
> 方が問題で、ご覧になるとわかりますが、単に w3m-fb-mode の定義を
> ソースからコピーしただけのものが入っています。一方 XEmacs 21.5
> と Emacs 21 以上では、w3m-fb-mode コマンドのために w3m-fb.elc を
> autoload する設定 (など) に料理されたものが登録されます。
ふむふむ。
> 2.
> 上記の理由により、XEmacs 21.4 が w3m-load.el を読み込むときに
> define-minor-mode のマクロ定義が必要なのですが、それは
> xemacs-base/easy-mmode.elc にあって、同ディレクトリの
> auto-autoloads.elc に autoload の設定があるはずです。
はい、ありました。
auto-autoloads.el の頭に
(package-provide 'xemacs-base :version 2.03 :author-version "No-Upstream-Ver" :type 'regular)
(when (fboundp 'package-suppress) (package-suppress 'xemacs-base "regexp-opt" '(fboundp 'package-suppress)) (package-suppress 'xemacs-base "easy-mmode" '(fboundp 'package-suppress)))
とあり、
;;;### (autoloads (easy-mmode-define-navigation easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap easy-mmode-define-global-mode define-minor-mode) "easy-mmode" "xemacs-base/easy-mmode.el")
(defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
(autoload 'define-minor-mode "easy-mmode" "\
Define a new minor mode MODE.
This function defines the associated control variable MODE, keymap MODE-map,
toggle command MODE, and hook MODE-hook.
.....
です。
> xemacs-base/auto-autoloads.elc より早い時刻に
> w3m/auto-autoloads.elc が読み込まれてしまうのかと考えて、XEmacs
> の起動後に以下をやってみたのですが、
>
> ls -lut xemacs-packages/lisp/xemacs-base/auto-autoloads.elc\
> site-packages/lisp/w3m/auto-autoloads.elc
>
> 少なくともぼくの環境では xemacs-base/auto-autoloads.elc の方が先
> に読み込まれていました。
これがダメですね。
% ls -lut /usr/local/lib/xemacs/xemacs-packages/lisp/xemacs-base/auto-autoloads.elc /usr/local/lib/xemacs/site-packages/lisp/w3m/auto-autoloads.elc
-rw-r--r-- 1 shirai rd3 81747 Mar 9 10:43 /usr/local/lib/xemacs/xemacs-packages/lisp/xemacs-base/auto-autoloads.elc
-rw-r--r-- 1 shirai rd3 783 Mar 9 10:43 /usr/local/lib/xemacs/site-packages/lisp/w3m/auto-autoloads.elc
と、xemacs-base/auto-autoloads.elc の方が後からアクセスされてい
ます。なので、w3m/auto-autoloads.elc を読み込んだときは、まだ、
define-minor-mode が定義されておらずエラーになるのですね。
今思い出したのですが、実は、これ、ぼくだけじゃなくて他の人から相
談されたこともあります。その人は MacX 上の Carbon Emacs でした。
去年の 9月の CVS Head でのことなので今はどうだかわかりませんが。
> と、ここまでしか噛み砕くことができなかったんですが、これに沿って
> 白井さんも調べてみていただけますか? (それ以前にいろいろ問題があ
> るようですが ;-)
# もういや、XEmacs ^^;;;
> XEmacs 21.4 が define-minor-mode を auto-autoloads に登録するや
> り方の改善は、やってみたい気が少しします。
> [1] Gnus は XEmacs で make するときに -no-autoloads オプションを
> 使うので、すべての auto-autoloads.elc ファイルを読み込みません。
> そのため Gnus で初めて使うようになった define-minor-mode がマク
> ロ展開されないという問題が起きたのでした。一方 emacs-w3m では
> -vanilla オプションを使っているだけなので問題ありません。
> -no-autoloads を使う利点は build 時の環境に真に依存しないことの
> 他に、XEmacs 21.5 が Lisp shadows をうるさく報告しないことです。
へぇ〜〜〜。
今日はこれから出張なので、来週再インストールに挑戦してみます。
(時間があれば :-p)
--
白井秀行 (mailto:shirai@xxxxxxxxxxx)