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