最近、Gnus と Namazu を連携して利用できるように、 gnus-namazu.el とい
うプログラムを作りました。このプログラムの特長として、「あるサマリーバッ
ファ中で、更に検索を行うことができる」という点があります。
例えば、C-c C-n CCL RET として、「CCL」を検索キーとして全グループを対
象に検索を実行すると、CCL という語を含む全記事を含む仮想グループが作成
されます。このサマリーバッファ内では gnus-current-select-method の値は、
以下のようになります。
(nnvirtual
"nnvirtual:namazu-search?query=CCL&groups=ALL&id=152591936483473-ephemeral"
(nnvirtual-address "nnvirtual:namazu-search?query=CCL&groups=ALL&id=152591936483473")
(nnvirtual-component-groups
("comp.emacs.apel-ja" "comp.emacs.elisp" "comp.emacs.mime-ja" "comp.emacs.tm"))
(namazu-gnus-target-groups nil)
(namazu-gnus-current-query "CCL"))
この記事群を閲覧中に、Mule-UCS というキーワードが重要であることに気が
付いたので、今度はそのキーワードで検索すると、そのサマリーバッファ内で
は gnus-current-select-method の値は、次のようになります。
(nnvirtual
"nnvirtual:namazu-search?query=Mule-UCS&groups=ALL&id=1525919548496119-ephemeral"
(nnvirtual-address "nnvirtual:namazu-search?query=Mule-UCS&groups=ALL&id=1525919548496119")
(nnvirtual-component-groups ("comp.emacs.elisp"))
(namazu-gnus-target-groups nil)
(namazu-gnus-current-query "Mule-UCS"))
ここまでは、ごく妥当な動作だと思うのですが、この記事群の閲覧を終わった
あと、q (gnus-summary-exit) で、「CCL」をキーとするサマリーバッファに
戻ると、gnus-current-select-method の値は、次のように変化し、実情と合
わないようになります。
(nnml "")
そのため、このサマリーバッファ内では、幾つかの動作がおかしくなります。
実は、上記の値は、私の環境の gnus-select-method の値と等しいのですが、
gnus-summary-exit() 内部に
(setq gnus-current-select-method gnus-select-method) という命令が含ま
れていますから、観察結果とコードは一致します。
ですが、このコードは妥当なのでしょうか? この記述は、「Gnus は複数のサ
マリーバッファを同時に開くことを想定していない」ということを意味するこ
とになると思うのですが。gnus-namazu.el を利用する時以外でも、複数のフ
レームを同時に開き、個々のフレームで別のメーリングリストのサマリーを相
互に閲覧する、などの使い方を私はしているのですが、こういう使い方も想定
外ということになるのでしょうか。
さて、そういうことを考えていると、gnus-current-select-method はサマリー
バッファ毎に異なる値をとるべきなのではないか、という気がしてくるのです
が、どうでしょうか。
gnus-current-select-method が参照されている個所は、grep で確認したとこ
ろ、以下の6個所でした。
・gnus-request-article-this-buffer()
(eq gnus-override-method 'current) の場合に参照される。
・gnus-start-news-server()
Gnus が起動済か否かを検査するのに使っている。non-nil であれば、
特に問題なし。
・gnus-clear-system()
nil を代入しているだけ
・gnus-select-newsgroup()
グループに入ったときに、そのグループの method を設定している
・gnus-summary-exit()
グループから抜けるときに、gnus-select-method の値を代入している
・gnus-refer-article-methods()
記事が所属している可能性のある method のリストを返す?
バッファローカル変数に変更することによって問題になりそうなのは、
gnus-request-article-this-buffer() と gnus-refer-article-methods() で
すが、後者は gnus-sum.el で定義され、サマリーバッファのコマンドとして
動作する関数からのみ呼び出されているので、問題にはならないと思います。
よって、前者の gnus-request-article-this-buffer() のみ対策しておけば良
いはずだと考え、以下のようなパッチを作成しました。
土屋さん> そういうわけで、ご意見と動作確認をお願いします。
動作確認するまでも無いような気もしましたが、ちょっと試した限りで
は何も問題無いのではないかと思いますよ。
土屋さん> 私の環境ではこれでうまく動いているのですが、ちょっと微妙な部
土屋さん> 分の変更であること、gnus の動作自体の変更になること、を考え
土屋さん> ると commit は少し躊躇っています。
この微妙さは、Oort Gnus と T-gnus 仕様に違いを作ってしまうことで
しょう。順序はどっちが先でも構いませんが、ぼくは Gnus にも同じ変
更を加えて下さることを *強く* お願いします。
;; Oort Gnus で行なわれた変更は、ぼくが逐次 T-gnus に取り込んで
;; いるので、土屋さんは Gnus tower にパッチを提出するだけで十分
;; です。:-)
土屋さん> ですが、このコードは妥当なのでしょうか? この記述は、「Gnus
土屋さん> は複数のサマリーバッファを同時に開くことを想定していない」と
土屋さん> いうことを意味することになると思うのですが。gnus-namazu.el
土屋さん> を利用する時以外でも、複数のフレームを同時に開き、個々のフレー
土屋さん> ムで別のメーリングリストのサマリーを相互に閲覧する、などの使
土屋さん> い方を私はしているのですが、こういう使い方も想定外ということ
土屋さん> になるのでしょうか。
Gnus は、ユーザによるカスタマイズを強力にバックアップする姿勢を
info の随所で表明しています。もしカスタマイズ手段が無ければ、そ
れは Gnus が提供しなければなりません。ユーザオプションによるカス
タマイズだけにとどまらず、できることはできるようにしなければなら
ない、というのが Gnus の思想の一つであるとぼくは信じています。
実際に ding リストや bu...@gnus.org にパッチなどを出すと、あっと
言う間に本編に採用されてしまうのが最近の傾向です。
ですから、変更案を提出する側としてはある程度の責任を持つ必要があ
ります。その責任とは、技術的な面ではもちろんですが、
間、髪を入れずに変更案を採用してくれるメインテイナ
間、髪を入れずに試用してくれるテスタ
から
間、髪を入れずに質問や反対意見が来た
場合に
間、髪を入れずに応答する
ことも含んでいるとぼくは思います。
;; ShengHuo さんらから、間、髪を入れずに返ってきた返事が
;; "Thanks" の一言だけだと、心底ほっとします。^^;;
それからもう一点、もし土屋さんがそう思うなら、Emacs 21 に同梱さ
れる Gnus v5.9 への変更も行なって下さい。たいてい Gerd さんから
も、間、髪を入れずに返事が返ってくると思います。今でこそユーザは
多くありませんが、Gnus v5.9 は Emacs が初めて提供する各国語対応
の MUA で Emacs 21 の目玉の一つですから、release された暁には、
そのユーザは無視できない勢力になるでしょう。
以上は、最近のぼくが行なっている活動そのものでもあります。なお、
以前に T-gnus を元にしたパッチを ding に出したら無視されたことが
あったので、ぼくは必ず最新の Gnus (emacs-pr...@gnu.org に
出すときは最新の Emacs 21 pretest) を元に作って、行ずれが無いよ
うにしています。
では、ご健闘を祈ります。
--
Katsumi Yamaoka <yam...@jpl.org>
山岡> 順序はどっちが先でも構いませんが、ぼくは Gnus にも同じ変更を加え
山岡> て下さることを *強く* お願いします。
書き忘れました。最近の Gnus のメンテの傾向として、提出するパッチ
は無審査に近い状態で採用されるような気がするので、
Dear Gnus developers,
I am trying to use the search engine namazu with latest Gnus.
I noticed that the variable `gnus-current-select-method' shoud
be buffer-local for each summary buffer.
ChangeLog ...
Patch ...
といった程度のものを送れば十分かもしれません。
;; ぼくの英語はこの程度でしかありません。できればもっとマシなも
;; のに書き換えて下さい。^^;;
--
Katsumi Yamaoka <yam...@jpl.org>
山> この微妙さは、Oort Gnus と T-gnus 仕様に違いを作ってしまうことで
山> しょう。順序はどっちが先でも構いませんが、ぼくは Gnus にも同じ変
山> 更を加えて下さることを *強く* お願いします。
との、山岡さんの意見にしたがい、パッチを bu...@gnus.org に投稿しました。
--
土屋 雅稔 ( TSUCHIYA Masatoshi )
http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/
土屋さん> との、山岡さんの意見にしたがい、パッチを bu...@gnus.org に投
土屋さん> 稿しました。
遅くなりましたが、どうもありがとうございます。
ところで、わざわざ出て来たのは、土屋さんの記事などが Google で読
めること↓をお知らせするためでした。:-p
;; ここに SPAMMER の人はいないだろね。