From: hayashi Date: Tue, 21 Jul 1998 06:07:21 +0000 (+0000) Subject: Add Appendices X-Git-Tag: gnus-6_8_2~3 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e51976dff6fc2dba5efb3e365f549edddc524ad;p=elisp%2Fgnus.git- Add Appendices --- diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index a3b1c77..23515de 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -318,8 +318,9 @@ results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). -この段落が取り除かれているのを除き、これと同じ複製に関する許可文が表示され -ている限り、このファイルを Tex にかけて、その結果を印刷することを許可する。 +この段落が取り除かれているのを除き、これと同じ複製に関する許可文が表示さ +れている限り、このファイルを Tex にかけて、その結果を印刷することを許可 +する (この段落は印刷されたマニュアルでは参照されません)。 @end ignore Permission is granted to copy and distribute modified versions of this @@ -15211,3 +15212,4336 @@ but at the common table.@* @end quotation +@node Appendices +@chapter 付録 + +@menu +* History:: どうやって gnus が今日のようになったか。 +* Terminology:: 我々は本当に難しい、語のような語を使う。 +* Customization:: あなたの要求に沿って gnus を仕立てる。 +* Troubleshooting:: 上手く行かなかったときに試すかもしれない事。 +* A Programmers Guide to Gnus:: 色々な技術的なもの。 +* Emacs for Heathens:: Emacs の用語の手短な導入。 +* Frequently Asked Questions:: 質問と答。 +@end menu + + +@node History +@section 歴史 + +@cindex history +@sc{gnus} は 梅田 政信氏によって書かれました。94年の夏が忍び寄ってくるこ +ろ、Lars Magne Ingebrigtsen は飽きてきて、Gnus を書き直そうと決心しまし +た。 + +この無礼を行った人物を調べてみたいのなら、あなたの (くそ!) ウェブブラウ +ザーを @file{http://www.stud.ifi.uio.no/~larsi/} に向ける事ができます。 +これは新しくて粋な版の gnus の第一配布場所で、Newsrc をぶっ壊して人々を +激怒されるサイトとして知られています。 + +最初のアルファ版の開発期間に、新しい Gnus は ``(ding) Gnus'' と呼ばれて +いました。@dfn{(ding)} はもちろん、@dfn{ding is not Gnus} の短縮形で、こ +れは全く完全な嘘ですが、だれがそんなことを気にするでしょうか?(ところで、 +この短縮形の ``Gnus'' はおそらく梅田さんの意図通り ``ニュース'' と発音さ +れるべきで、そうするともっと適切な名前になります。そう思いませんか?) + +どちらにせよ、全てのエネルギーを新しい元気の良い名前を付けるのに使い果た +した後、その名前は @emph{あまりに} 元気が良すぎるという事になり、それを +``Gnus'' と再び命名しました。でも、今回は大文字と小文字を混ぜています。 +``Gnus'' と ``@sc{gnus}'' です。 新しいもの と 古いもの。 + +最初の ``適切な'' Gnus 5 のリリースは1995年11月に Emacs 19.30 の配布に含 +まれたときになされました (132 の (ding) Gnus のリリース 足すことの +Gnus5.0 の15リリース)。 + +1996年3月に次の世代の Gnus (別名 ``September Gnus'' (99リリースの後で)) +が ''Gnus 5.2`` という名前でリリースされました (40リリース)。 + +1996年の7月28日に Red Gnus の作業が始まり、それは1997年1月25日に (84リリー +スの後で) ``Gnus 5.4'' としてリリースされました。 + +もし接頭辞を持った版の Gnus -- ``(ding) Gnus'', ``September Gnus'', +``Red Gnus'', ``Quassia Gnus'' -- に出会っても、混乱しないでください。あ +なたが恐がっている事を知られてはいけません。後ろに下がりなさい。ゆっくり +と。他に何をしても、走っては行けません。それが届かくなるまで、静かに歩き +去りなさい。適切にリリースされた版の Gnus を見つけて、代わりにそれに寄り +添って下さい。 + +@menu +* Why?:: Gnus の目的は何? +* Compatibility:: Gnus は @sc{gnus} とどれくらい互換性があるの? +* Conformity:: Gnus は全ての標準を満たそうとする。 +* Emacsen:: Gnus はいくつかの現代的な Emacs 環境で実行できる。 +* Contributors:: 大量の人々。 +* New Features:: Gnus の新しい事に関する手がかり。 +* Newest Features:: あまりにも新しいためにまだ書かれていないもの。 +@end menu + + +@node Why? +@subsection なぜ? + +Gnus の目的は何ですか? + +私は、あなたの考え付く事を全てできる ``すばらしい'' ``かっこいい'' ``い +かす'' ``はやりの'' ニュースリーダを提供したいと思います。これは私の大元 +の動機ですが、Gnus の作業をしている間に、この世代のニュースリーダーは本 +当に石器時代に属しているという事が明らかになりました。ニュースリーダーは、 +インターネットの幼児期からほとんど発展していませんでした。もしk現在の増 +加率で量が増加しつづければ、全ての現在のニュースリーダーは全く役に立たな +くなるでしょう。一日に1000やもっとたくさんの新しい記事のあるニュースグルー +プを扱うにはどうすれば良いのでしょう? 投稿をする百万やそれより多い人々 +に遅れないように付いていくにはどうすれば良いのでしょう? + +Gnus はこれらの質問に本当の解決を提案しますが、私は Gnus がニュースを読 +み、取得するための新しい方法を実験する場として使われて欲しいです。梅田さ +んのニュースリーダーをバックエンドから分離するという賢明な方針を拡張する +事によって、Gnus はメールを取得したり、違ったところからニュースを取得す +るための新しいバックエンドを書きたい人のために、簡単で単純なインターフェー +スを提供しています。私は、役に立つであろうという部分にすべて、カスタマイ +ズのためのフックを加えました。それをする事によって、探検し、発明したい全 +ての人を招いているのです。 + +おそらく Gnus は完成する事はないのかもしれません。 @kbd{C-u 100 M-x +all-hail-emacs} と @kbd{C-u 100 M-x all-hail-xemacs} です。 + + +@node Compatibility +@subsection 互換性 + +@cindex compatibility +Gnus は @sc{gnus} と完全に互換性があるように設計されています。ほとんど全 +てのキーバインディングはそのまま残っています。もちろん、多くのキーバイン +ディングが追加されましたが、一つか二つのあいまいな場合を除いて、古いバイ +ンディングが変更された事はありません。 + +我々のモットーは: +@quotation +@cartouche +@center 鋼鉄の骨組みの空高く。 +@end cartouche +@end quotation +です。 + +全ての命令はその名前が変わっていません。いくつかの内部関数は名前を変えま +した。 + +@code{gnus-uu} パッケージは劇的に変化しています。@xref{Decoding +Articles}. + +一つの主要な互換性の質問は、いくつかの概略バッファが存在する事です。全て +のグループを読み込むときに関連する変数はそれが属する概略バッファのバッファ +固有です。多くの重要な変数はそれの全体の版にも複製されますが、概略バッファ +で命令が実行されると、この変更は、あなたが注意していないと、正しくない値 +になるかも知れません。 + +@sc{gnus} の内部の知識に依存した全てのコードは実行できないでしょう。2つ +例を挙げます: @code{gnus-newsrc-alist} の並び替え (もしくは、実際は何ら +かの方法でそれを変更する事) は絶対に禁止されています。 Gnus はこの連想リ +ストの登録を指し示すハッシュテーブルを保持しており (それは多くの関数の速 +度を上げます)、直接連想リストを変更する事は異常な結果をもたらすでしょう。 + +@cindex hilit19 +@cindex highlighting +古い hilit19 のコードは全く動作しません。実際のところ、おそらく全ての +hilit コードを全ての Gnus のフック (@code{gnus-group-prepare-hook} と +@code{gnus-summary-prepare-hook}) から取り除くべきでしょう。Gnus はハイ +ライトのためのいろいろな統合された関数を提供します。これらはもっと速くもっ +と正確です。全ての人の人生を楽にするために、Gnus は初期設定で全ての +hilit フックから全ての hilit 呼び出しを取り除きます。きたないもの! とん +でけ! + +@code{expire-kill} のようなパッケージはもう動作しません。実際、Gnus を使 +い始めたときには、おそらく全ての古い @sc{gnus} パッケージ (と他のコード) +を消去するべきでしょう。@sc{gnus} に実行させるために書いたコードは、Gnus +が既に実行しているという事は良くある事です。 (くすくす。) + +物事を実行する古い方法はまだ使用できますが、新しい方法だけがこのマニュア +ルに記載されています。もしこのマニュアルを読んでいる間に何かをする新しい +方法を発見しても、古い方法を止めなければならないという事ではありません。 + +Gnus は全ての @sc{gnus} 起動ファイルを理解します。 + +@kindex M-x gnus-bug +@findex gnus-bug +@cindex reporting bugs +@cindex bugs +全体として、@sc{gnus} の内部に依存したコードをほとんど書いていない普通の +利用者は問題に苦しむ事はないでしょう。問題が起これば、魔法の命令 +@kbd{M-x gnus-bug} を実行する事によって私に知らせて下さい。 + +@vindex gnus-bug-create-help-buffer +@emph{非常に} よくバグ報告を送る癖があるのであれば、しばらくすると役に立 +つ help バッファがうるさいと感じるかもしれません。そうであれば、それが表 +示されるのを避けるために、@code{gnus-bug-create-help-buffer} を +@code{nil} に設定して下さい。 + + +@node Conformity +@subsection 一致性 + +ここには手がかりの無い反抗はありません、奥さん。我々は全てのしられている +標準に沿っています。もちろん、我々が賛成できない標準と/もしくは習慣は除 +きますが。 + +@table @strong + +@item RFC 822 +@cindex RFC 822 +この標準への知られている違反はありません。 + +@item RFC 1036 +@cindex RFC 1036 +この標準も知られている違反はありません。 + +@item Son-of RFC 1036 +@cindex Son-of RFC 1036 +これにはいくつかの違反があります。 + +@table @emph + +@item MIME +Gnus は MIME の扱いをせず、この標準になるものは すごく良いと考えているの +で、我々はここに大きな穴が空いている事になります。 + +@item X-Nesreader +これは ``つまらないヘッダー'' と考えられていますが、私は消費者の情報であ +ると見なしています。@code{tin} と @code{Netscape} から送られてくる非常に +多くの様式に沿っていない記事を見た後で、私はそれらを記事を投稿するために +は使わない方が良いという事を知りました。もし @code{X-Nesreader} ヘッダー +が無ければ私はその情報を得る事はなかったでしょう。 +@end table + +@end table + +上に書かれている文章に関する事で、Gnus がそれを満たしていないような動作 +をしている事に気付いたら、ためらわずに Gnus タワーと我々に知らせて下さい。 + + +@node Emacsen +@subsection Emacsen +@cindex Emacsen +@cindex XEmacs +@cindex Mule +@cindex Emacs + +Gnus は以下のもので動作します: + +@itemize @bullet + +@item +Emacs 19.32 とそれ以降。 + +@item +XEmacs 19.14 とそれ以降。 + +@item +Emacs 19.32 とそれ以降に基づいた Mule。 + +@end itemize + +Gnus はこれより古いどんな Emacsen でも完全に動作しないでしょう。少なくと +も、信頼できる動作はしないでしょう。 + +いろいろなプラットフォームの Gnus の間にはいくつかの漠然とした違いがあり +ます---XEmacs はもっと画像機能 (ロゴとツールバー) を特徴にしています--し +かし、その他は、全ての Emacsen でほとんど同じはずです。 + + +@node Contributors +@subsection 貢献者 +@cindex contributors + +新しい Gnus の版は (ding) メーリングリストの全ての人の助けが無ければでき +なかったでしょう。一年以上、私は毎日とてもたくさんの素敵なバグレポートを +受け取り、そのそれぞれが私を喜びで満たしました。愛撫。このリストの人々は +忍耐を超えて私の ``あぁ、それはすばらしい考えだ 、うん、私は +待たずにそれをすぐリリースしよう 、それは全く動作しない 、うん、私はすぐに出そう いや、纏う、それは全く動作しな +いぞ''' というリリースに関する主義を変えて試してきた人々です。 +Micro$oft---あぁ。アマチュア。私は @emph{もっと} 悪い。 (もしくは、``よ +り悪い''? ``もっと悪い''? ``最悪''?) + +私はこの機会にこの学会に... おおっと、違った。 + +@itemize @bullet + +@item +梅田 政信---元の @sc{gnus} を書いた人です。 + +@item +Per Abrahamsen--custom、スコア、ハイライトと @sc{soup} コード (他の多く +の事と共に)。 + +@item +Luis Fernandes---デザインとグラフィック。 + +@item +Erik Naggum---援助、考え、サポート、コードとその他。 + +@item +Wes Hardaker---@file{gnus-picon.el} と @dfn{picon} の部分のマニュアル +(@pxref{Picons})。 + +@item +Kim-Minh Kaplan---picon コードに置ける更なる作業。 + +@item +Brad Miller---@file{gnus-gl.el} と Grouplens の部分のマニュアル +(@pxref{GroupLens})。 + +@item +Sudish Joseph---数え切れないほどのバグの修正。 + +@item +Ilja Weis---@file{gnus-topic.el}。 + +@item +Steven L. Baur---たくさんのたくさんのたくさんのバグの発見と修正。 + +@item +Vladimir Alexiev---refcard とリファレンスの小冊子。 + +@item +Felix Lee & Jamie Zawinski---私は Felix Lee と JWZ の XGnus 配布からいく +つかの部分を盗みました。 + +@item +Scott Byer---@file{nnfolder.el} の拡張と改訂。 + +@item +Peter Mutsaers---古事記事のスコアコード。 + +@item +Ken Raebburn---POP メールサポート。 + +@item +Hallvard B Furuseth---いろいろな小さな物や部分、特に .newsrc ファイルを +扱う部分。 + +@item +Brian Edmonds---@file{gnus-bbdbb.el}。 + +@item +David Moore--@file{nnvirtual.el} の改訂と多くの他の事。 + +@item +Kevin Davidson---@dfn{ding} の名前を思い付きました。ですから、彼を責めて +下さい。 + +@item +Fran,Agois Pinard---多くの、多くの興味深く完全なバグレポートと autoconf の +サポート。 + +@end itemize + +このマニュアル (Gnus 英語版) は Adrian Aichner と Ricardo Nassif、Mark +Borges によって校正され、Jost Krieger によって一部分を校正されました。 + +以下の人々は多くのパッチと提案で貢献しました: + +Christopher Davis, +Andrew Eskilsson, +Kai Grossjohann, +David K,Aegedal, +Richard Pieri, +Fabrice Popineau, +Daniel Quinlan, +Jason L. Tibbitts, III, +and +Jack Vinson. + +それと、以下の人にもパッチやその他のものを感謝します: + +Jari Aalto, +Adrian Aichner, +Vladimir Alexiev, +Russ Allbery, +Peter Arius, +Matt Armstrong, +Marc Auslander, +Frank Bennett, +Robert Bihlmeyer, +Chris Bone, +Mark Borges, +Mark Boyns, +Lance A. Brown, +Kees de Bruin, +Martin Buchholz, +Joe Buehler, +Kevin Buhr, +Alastair Burt, +Joao Cachopo, +Zlatko Calusic, +Massimo Campostrini, +Castor, +Dan Christensen, +Kevin Christian, +Michael R. Cook, +Glenn Coombs, +Frank D. Cringle, +Geoffrey T. Dairiki, +Andre Deparade, +Ulrik Dickow, +Dave Disser, +Rui-Tao Dong, @c ? +Joev Dubach, +Michael Welsh Duggan, +Dave Edmondson, +Paul Eggert, +Enami Tsugutomo, @c Enami +Michael Ernst, +Luc Van Eycken, +Sam Falkner, +Nelson Jose dos Santos Ferreira, +Sigbjorn Finne, +Decklin Foster, +Gary D. Foster, +Paul Franklin, +Guy Geens, +Arne Georg Gleditsch, +David S. Goldberg, +Michelangelo Grigni, +D. Hall, +Magnus Hammerin, +Kenichi Handa, @c Handa +Raja R. Harinath, +Yoshiki Hayashi, @c ? +P. E. Jareth Hein, +Hisashige Kenji, @c Hisashige +Marc Horowitz, +Gunnar Horrigmo, +Richard Hoskins, +Brad Howes, +Fran,Agois Felix Ingrand, +Ishikawa Ichiro, @c Ishikawa +Lee Iverson, +Iwamuro Motonori, @c Iwamuro +Rajappa Iyer, +Andreas Jaeger, +Randell Jesup, +Fred Johansen, +Simon Josefsson, +Greg Klanderman, +Karl Kleinpaste, +Peter Skov Knudsen, +Shuhei Kobayashi, @c Kobayashi +Thor Kristoffersen, +Jens Lautenbacher, +Seokchan Lee, @c Lee +Carsten Leonhardt, +James LewisMoss, +Christian Limpach, +Markus Linnala, +Dave Love, +Mike McEwan, +Tonny Madsen, +Shlomo Mahlab, +Nat Makarevitch, +Istvan Marko, +David Martin, +Jason R. Mastaler, +Gordon Matzigkeit, +Timo Metzemakers, +Richard Mlynarik, +Lantz Moore, +Morioka Tomohiko, @c Morioka +Erik Toubro Nielsen, +Hrvoje Niksic, +Andy Norman, +Fred Oberhauser, +C. R. Oldham, +Alexandre Oliva, +Ken Olstad, +Masaharu Onishi, @c Onishi +Hideki Ono, @c Ono +William Perry, +Stephen Peters, +Jens-Ulrik Holger Petersen, +Ulrich Pfeifer, +John McClary Prevost, +Mike Pullen, +Jim Radford, +Colin Rafferty, +Lasse Rasinen, +Lars Balker Rasmussen, +Joe Reiss, +Renaud Rioboo, +Roland B. Roberts, +Bart Robinson, +Christian von Roques, +Jason Rumney, +Wolfgang Rupprecht, +Jay Sachs, +Dewey M. Sasser, +Loren Schall, +Dan Schmidt, +Ralph Schleicher, +Philippe Schnoebelen, +Andreas Schwab, +Randal L. Schwartz, +Justin Sheehy, +Danny Siu, +Matt Simmons, +Paul D. Smith, +Jeff Sparkes, +Toby Speight, +Michael Sperber, +Darren Stalder, +Richard Stallman, +Greg Stark, +Sam Steingold, +Paul Stodghill, +Kurt Swanson, +Samuel Tardieu, +Teddy, +Chuck Thompson, +Philippe Troin, +James Troup, +Aaron M. Ucko, +Aki Vehtari, +Didier Verna, +Jan Vroonhof, +Stefan Waldherr, +Pete Ware, +Barry A. Warsaw, +Christoph Wedler, +Joe Wells, +Katsumi Yamaoka, @c Yamaoka +and +Shenghuo Zhu. @c Zhu + +それぞれの人々が行った事の完全な概観を得るために、ChangeLog が Gnus のア +ルファ配布には含まれていて、豊富な読み物を与えるでしょう。(550KB といく +らか)。 + +私が忘れた全ての人に謝罪します。間違いなくたくさんの人を忘れている事でしょ +う。 + +わぁ、これはなんとも多い人のリストだなぁ。おそらく実際に Gnus 入るという +事に違いないでしょう。それに誰が感謝したでしょう! + + +@node New Features +@subsection 新しい機能 +@cindex new features + +@menu +* ding Gnus:: 最初の新しい Gnus である Gnus 5.0/5.1 の新しい事。 +* September Gnus:: 公式に GNus 5.2/5.3 として知られているもの。 +* Red Gnus:: 3番目の最上のもの---Gnus 5.4/5.5 +* Quassia Gnus:: 2かける2は4、もしくは Gnus 5.6.22。 +@end menu + +このリストは、もちろん、@emph{たいていの} 重要な新しい機能に関する +@emph{短い}概観でしかありません。いいえ、本当はそうではありません。もっ +ともっとたくさんのものがあります。はい、我々は創造性の完全な効果を感じて +いるのです。 + + +@node ding Gnus +@subsubsection (ding) Gnus + +Gnus 5.0/5.1 の新しい機能: + +@itemize @bullet + +@item +全てのバッファの外観はフォーマットのような変数 (@pxref{Group Buffer +Format} と @pxref{Summary Buffer Format}) によって設定を変える事ができる +ようになりました。 + +@item +ローカルスプールと、いくつかの @sc{nntp} サーバーを同時に使う事がでるよ +うになりました (@pxref{Select Methods})。 + +@item +グループを事実上のグループに結合できるようになりました (@pxref{Virtual +Groups})。 + +@item +多くの違ったメール様式 (@pxref{Getting Mail}) を読めるようになりました。 +全てのメールバックエンドは便利なメール期限切れ消去機構を実装しています +(@pxref{Expiring Mail})。 + +@item +Gnus は根っこ (root) を失ったスレッドを集めるためのいろいろな戦略 (それ +によってまばらな副スレッドを一つのスレッドにする) を使ったり、一旦戻って +完全なスレッドをくみ上げるのに十分なヘッダーを取得しする事ができます +(@pxref{Customizing Threading})。 + +@item +切られたグループ (killed group) はぐループバッファに表示する事ができて、 +それも読む事ができます (@pxref{Listing Groups})。 + +@item +Gnus は部分的グループ更新をする事ができます---2,3 のグループの新しい記事 +を調べるために現状ファイル全体をを取得する必要はありません (@pxref{The +Active File})。 + +@item +Gnus はグループの段階的購読度を実装しました (@pxref{Group Levels})。 + +@item +任意の数の基準に従って記事にスコアを付ける事ができます (@pxref{Scoring})。 +あなたのために記事をどのようにスコアを付けるかを Gnus に見つけさせる事も +できます (@pxref{Adaptive Scoring})。 + +@item +Gnus は普通の Emacs の方法で自動保存されるドリブルバッファを保持していま +すので、あなたのマシンが落っこちたときでもあまりデータを失わないでしょう +(@pxref{Auto Save})。 + +@item +Gnus は今やファイル @file{.emacs} をぐちゃぐちゃにする事を避けるために専 +用の起動ファイル (@file{.gnus}) を持つようになりました。 + +@item +グループと記事の両方にプロセス印を付けることができ、全ての印の付いた項目 +に演算をする事ができます (@pxref{Process/Prefix})。 + +@item +グループの一部を grep して、その結果からグループを作る事ができます +(@pxref{Kibozed Groups})。 + +@item +えーと、全てにしたがって、グループの一覧を挙げる事ができます +(@pxref{Listing Groups})。 + +@item +外部サーバーを概観して、それらのサーバーのグループを購読する事ができます +(@pxref{Browse Foreign Server})。 + +@item +Gnus はサーバーとの2つ接続で、記事を非同期にとってくる事ができます +(@pxref{Asynchronous Fetching})。 + +@item +記事をローカルにキャッシュする事ができます (@pxref{Article Caching})。 + +@item +uudecode の関数が拡張され、一般化されました (@pxref{Decoding Articles})。 + +@item +過去の @sc{gnus} のあまり知られていない機能の uuencode された記事をまだ +投稿する事ができます (@pxref{Uuencoding and Posting})。 + +@item +親記事 (と他の記事) の取得は今や、実際に突然故障する事無く動作するように +なりました (@pxref{Finding the Parent})。 + +@item +Gnus は FAQ とグループの記述を取得する事ができます (@pxref{Group +Information})。 + +@item +記事をハイライトし、カスタマイズする事ができます (@pxref{Customizing +Articles})。 + +@item +URL と他の外部参照がボタンになるようになりました (@pxref{Article +Buttons})。 + +@item +Gnus のウィンドウとフレームの設定でたくさんの変な事をできるようになりま +した (@pxref{Windows Configuration})。 + +@item +キーボードを使う代わりに、ボタンをクリックできるようになりました +(@pxref{Buttons})。 + +@end itemize + + +@node September Gnus +@subsubsection September Gnus + +@iftex +@iflatex +\gnusfig{-28cm}{0cm}{\epsfig{figure=tmp/september.ps,height=20cm}} +@end iflatex +@end iftex + +Gnus 5.2/5.3 の新しい機能: + +@itemize @bullet + +@item +新しいメッセージ作成モードが使われます。@code{mail-mode}、 +@code{rnews-reply-mode} と @code{gnus-msg} の全ての古いカスタマイズ変数 +は今や旧式になりました。 + +@item +Gnus は @dfn{まばら} スレッドを作成する事ができるようになりました---スレッ +ドの失われた記事があるところは空の節で表現されるようになっています +(@pxref{Customizing Threading})。 + +@lisp +(setq gnus-build-sparse-threads 'some) +@end lisp + +@item +外に出ていく記事は特別な保管サーバーに保存されるようになりました +(@pxref{Archived Messages})。 + +@item +記事が参照されたときに、スレッドの部分作成が起こるようになりました。 + +@item +Gnus は GroupLens の予言を使う事ができるようになりました +(@pxref{GroupLens})。 + +@item +Picons (personal icons) (個人アイコン) が XEmacs で表示できるようになり +ました (@pxref{Picons})。 + +@item +@code{trn} のような木バッファが表示されるようになりました (@pxref{Tree +Display})。 + +@lisp +(setq gnus-use-trees t) +@end lisp + +@item +@code{nn} のような取って読むマイナーモードが概略バッファで使う事ができる +ようになりました (@pxref{Pick and Read})。 + +@lisp +(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) +@end lisp + +@item +バイナリーグループで特別なバイナリーマイナーモードを使う事ができるように +なりました (@pxref{Binary Groups})。 + +@item +Group が折り畳みトピック階層にグループ分けできるようになりました +(@pxref{Group Topics})。 + +@lisp +(add-hook 'gnus-group-mode-hook 'gnus-topic-mode) +@end lisp + +@item +Gnus が失敗メールを再送できるようになりました (@pxref{Summary Mail +Commands})。 + +@item +グループがスコアを持つ事ができるようになり、訪れる回数に基づいて並び替えを +できるようになりました (@pxref{Group Score})。 + +@lisp +(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group) +@end lisp + +@item +グループにプロセス印を付けられるようになり、グループのぐループに命令が実行 +できるようになりました (@pxref{Marking Groups})。 + +@item +事実上のグループでキャッシュができるようになりました。 + +@item +@code{nndoc} は全ての集配配送、メールボックス、rnews ニュース一括、 +ClariNet 短収集、そして全てのその他を理解できるようになりました +(@pxref{Document Groups})。 + +@item +Gnus は SOUP パケットを作成/読み込みをするための新しいバックエンド +(@code{nnsoup}) を持っています。 + +@item +Gnus キャッシュがずっと速くなりました。 + +@item +グループを多くの基準に従って並び替えできるようになりました +(@pxref{Soring Groups})。 + +@item +アドレスのリストと期限切れ消去の時間を設定する新しいグループパラメータが +導入されました (@pxref{Group Parameters})。 + +@item +全てのフォーマット指定が使われるフェイスを指定できるようになりました +(@pxref{Formatting Fonts})。 + +@item +@kbd{M P} 副マップにプロセス印の付いた記事の設定/削除/実行のためのいくつ +かの命令があります (@pxref{Setting Process Marks})。 + +@item +広い範囲の基準に基づいて、概略バッファが可能な記事の部分の表示に制限でき +るようになりました。これらの命令は @kbd{/} 副マップのキーにバインドされ +ています (@pxref{Limiting})。 + +@item +@kbd{*} 命令によって、記事を永続にする事ができるようになりました +(@pxref{Presistent Articles})。 + +@item +記事の要素を隠す全ての関数は切り替え関数になりました。 + +@item +記事のヘッダーがボタンにする事ができるようになりました (@pxref{Article +Washing})。 + +@lisp +(add-hook 'gnus-article-display-hook + 'gnus-article-add-buttons-to-head) +@end lisp + +@item +全てのメールバックエンドで @code{Message-ID} による記事の取得を使用でき +るようになりました。 + +@item +重複メールを適切に扱う事ができるようになりました (@pxref{Duplicates})。 + +@item +全ての概略モード命令が記事バッファから直接使用できるようになりました +(@pxref{Article Keymap})。 + +@item +フレームが @code{gnus-buffer-configuration} の部分になる事ができます +(@pxref{Windows Configuration})。 + +@item +デーモンのプロセスでメールを再走査することができるようになりました +(@pxref{Daemons})。 +@iftex +@iflatex +\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}} +@end iflatex +@end iftex + +@item +Gnus はスパムを根絶やしにするために NoCeM ファイルを使う事ができるように +なりました (@pxref{NoCeM})。 + +@lisp +(setq gnus-use-nocem t) +@end lisp + +@item +グループを永久可視にする事ができるようになりました (@pxref{Listing +Groups})。 + +@lisp +(setq gnus-permanently-visible-groups "^nnml:") +@end lisp + +@item +カスタマイズを簡単にするために多くの新しいフックが導入されました。 + +@item +Gnus は @code{Mail-Copies-To} ヘッダーに注意を払うようになりました。 + +@item +@code{References} ヘッダーを集める事によりスレッドを集める事ができるよう +になりました (@pxref{Customizing Threading})。 + +@lisp +(setq gnus-summary-thread-gathering-function + 'gnus-gather-threads-by-references) +@end lisp + +@item +既読記事は再取得を避けるために特別なバックログバッファに貯められるように +なりました (@pxref{Article Backlog})。 + +@lisp +(setq gnus-keep-backlog 50) +@end lisp + +@item +簡単な扱いのために、現在の記事のきれいな複製がいつも別バッファに蓄積され +るようになりました。 + +@item +Gnus がどこに記事を保存するかを提案できるようになりました (@pxref{Saving +Articles})。 + +@item +Gnus は保存するときに同じくらいの促進をしなくても良いようになりました +(@pxref{Saving Articles})。 + +@lisp +(setq gnus-prompt-before-saving t) +@end lisp + +@item +@code{uu} は記事を取得している間に非同期で復号化されたファイルを閲覧でき +るようになりました (@pxref{Other Decode Variables})。 + +@lisp +(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view) +@end lisp + +@item +引用された文章に対して、記事バッファでの折り返しが適切に動作するようにな +りました (@pxref{Article Washing})。 + +@item +隠された引用文は隠す事を切り替えるボタンを加え、どのくらいの引用文を隠す +かをカスタマイズできるようになりました (@pxref{Article Hiding})。 + +@lisp +(setq gnus-cited-lines-visible 2) +@end lisp + +@item +退屈なヘッダーを隠す事ができます (@pxref{Article Hiding})。 + +@lisp +(add-hook 'gnus-article-display-hook + 'gnus-article-hide-boring-headers t) +@end lisp + +@item +スコアの初期値がメニューバーから設定できるようになりました。 + +@item +出て行く記事の更なる構文チェックができるようになりました。 + +@end itemize + + +@node Red Gnus +@subsubsection Red Gnus + +Gnus 5.4/5.5 の新しい機能: + +@iftex +@iflatex +\gnusfig{-5.5cm}{-4cm}{\epsfig{figure=tmp/red.ps,height=20cm}} +@end iflatex +@end iftex + +@itemize @bullet + +@item +@file{nntp.el} は非同期の流儀で完全に改訂されました。 + +@item +スコア付けは @code{and}、@code{or}、@code{not} のような論理演算子と、親 +の再方向で実行できるようになりました (@pxref{Advanced Scoring})。 + +@item +記事の洗濯状態が記事モード行に表示されるようになりました (@pxref{Misc +Article})。 + +@item +@file{gnus.el} が多くの小さいファイルに分割されました。 + +@item +Message-ID に基づいた、重複記事の抑制がなされるようになりました +(@pxref{Duplicate Suppression})。 + +@lisp +(setq gnus-suppress-duplicates t) +@end lisp + +@item +どのスコアと適応ファイルがホームのスコアと適応ファイルであるかを指定する +(@pxref{Home Score File}) 新しい変数が加えられました。 + +@item +@code{nndoc} が簡単に拡張可能になるように改訂されました (@pxref{Document +Server Internals})。 + +@item +グループは親のトピックからグループパラメータを継承できるようになりました +(@pxref{Topic Parameters})。 + +@item +記事編集が改訂され、実際に使用可能になりました。 + +@item +署名がもっと知的な方法で認識されるようになりました (@pxref{Article +Signature})。 + +@item +概略ピックモードがもっと @code{nn} のようになりました。行数が表示されて、 +命令 @kbd{.} が記事を取るために使う事ができるようになりました +(@code{Pick and Read})。 + +@item +あるサーバーから別のサーバーへ @file{.newsrc.eld} を移動する命令が加えら +れました (@pxref{Changing Servers})。 + +@item +今や、バッファの行を作成するときに、抑制される ``おもしろくない'' 部分を +指定する方法があります (@pxref{Advanced Formatting})。 + +@item +グループバッファでのいくつかの命令は @kbd{M-C-_} で元に戻す事ができるよ +うになりました (@pxref{Undo})。 + +@item +新しいスコアの型 @code{w} を使う事で、語にスコア付けをする事が可能になり +ました (@pxref{Score File Format})。 + +@item +表題に1語1語を基にして適応スコアをできるようになりました +(@pxref{Adaptive Scoring})。 + +@lisp +(setq gnus-use-adaptive-scoring '(word)) +@end lisp + +@item +スコアが腐敗できるようになりました (@pxref{Score Decays})。 + +@lisp +(setq gnus-decay-scores t) +@end lisp + +@item +日付のヘッダーに正規表現を使ってスコア付けを実行できるようになりました。 +日付はまず短縮 ISO 8601 様式で正規化されます (@pxref{Score File Format})。 + +@item +基本サーバーの記事に関する全てのデータを取り除く命令が加えられました +(@pxref{Changing Servers})。 + +@item +文書の集合を読むための新しい命令 (@code{nndoc} と @code{nnvirtual} の上 +で) が加えられました---@kbd{M-C-d} (@pxref{Really Various Summary +Commands})。 + +@item +プロセス印の設定が push と pop できるようになりました (@pxref{Setting +Process Marks})。 + +@item +新しいメールからニュースへのバックエンドが NNTP サーバーが投稿を許可して +いない場合でも、投稿できるようになりました (@pxref{Mail-To-News +Gateways})。 + +@item +ウェブ検索エンジン (@dfn{DejaNews}、@dfn{Alta Vista}、@dfn{InReference}) +からの検索結果を読む新しいバックエンドが加えられました (@pxref{Web +Searches})。 + +@item +標準の並び替え関数を使ってグループの中のトピックを並び代えする事ができ、 +それぞれのトピックが独立して並び替えできるようになりました (@pxref{Topic +Sorting})。 + +@item +グループの一部分が独立して並び替えできるようになりました +(@code{Sorting})。 + +@item +キャッシュされた記事がグループに入れられるようになりました +(@pxref{Summary Generation Commands})。 +@iftex +@iflatex +\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}} +@end iflatex +@end iftex + +@item +スコアファイルがもっと信頼できる順番で適用できるようになりました +(@pxref{Score Variables})。 + +@item +メールメッセージがどこに行くかの報告を作成する事ができるようになりました +(@pxref{Splitting Mail})。 + +@item +入って来たメールを保存する前にがらくたを取り除くフックと関数がもっと追加 +されました (@pxref{Washing Mail})。 + +@item +強調文が適切にフォントが変更されるようになりました: + +@lisp +(add-hook 'gnus-article-display-hook 'gnus-article-emphasize) +@end lisp + +@end itemize + + +@node Quassia Gnus +@subsubsection Quassia Gnus + +Gnus 5.6.22 の新しい機能: + +@itemize @bullet + +@item +Gnus をオフラインニュースリーダーとして使う新機能が加えられました。過剰 +なほどの新しい命令とモードが追加されました。完全な話に付いては +@pxref{Gnus Unplugged} を見て下さい。 + +@item +@code{nndraft} バックエンドが戻ってきましたが、依然とは違うように動作す +るようになりました。全てのメッセージバッファは @code{nndraft} グループの +記事でもあり、それは自動的に作成されます。 + +@item +@code{gnus-alter-header-function} がヘッダーの値を変えるために使われるよ +うになりました。 + +@item +@code{gnus-summary-goto-article} が Message-ID を受け付けるようになりま +した。 + +@item +リージョンの外のメッセージの本文の文章を消去するための新しいメッセージ命 +令があります: @kbd{C-c C-v}。 + +@item +@kbd{C-u C-c C-c} によって @code{nnvirtual} グループを生成しているグルー +プに投稿できるようになりました。 + +@item +@code{nntp-rlogin-program}---カスタマイズを簡単にするための新しい変数で +す。 + +@item +@code{gnus-article-edit-mode} の @code{C-u C-c C-c} は記事バッファの再ハ +イライトを禁止するようになりました。 + +@item +@code{gnus-boring-article-headers} に新しい要素があります--- +@code{long-to}。 + +@item +@kbd{M-i} シンボル接頭引数命令があります。詳細は "Symbolic Prefixes" の +部分を見て下さい。 + +@item +概略バッファの @kbd{L} と @kbd{I} はファイル "all.SCORE" にスコア法則を +加えるためにシンボル接頭引数 @kbd{a} を受け付けるようになりました。 + +@item +変数 @code{gnus-simplify-subject-functions} により単純化をもっと制御でき +るようになりました。 + +@item +@kbd{A T}---現在のスレッドを取得するための新しい命令です。 + +@item +@kbd{/ T}---現在のスレッドを制限に含めるための新しい命令です。 + +@item +@kbd{M-RET} は引用文を止めるための新しいメッセージ命令です。 + +@item +@samp{\\1} 表現が @code{nnmail-split-methods} で有効になりました。 + +@item +関数 @code{custom-face-lookup} が取り除かれました。あなたの初期化ファイ +ルでこの関数を使っているのなら、代わりに @code{face-spec-set} を使うよう +に書き直さなければなりません。 + +@item +投稿取り消しは現在の選択方法を使うようになりました。シンボル接頭辞 +@kbd{a} は普通の投稿方法を強制します。 + +@item +M******** sm*rtq**t*s を適切な文章に翻案する新しい命令があります--- +@kbd{W d}。 + +@item +@code{nntp} のより簡単なデバッグのために、@code{nntp-record-commands} を +@code{nil} でない値に設定する事ができます。 + +@item +@code{nntp} は @file{~/.authinfo} を使うようになり、これは @file{.netrc} +のようなファイルで、どこでどのように @sc{authinfo} を @sc{nntp} サーバー +に送るかを制御するためのものです。 + +@item +概略バッファのグループパラメータを編集するための命令が加えられました。 + +@item +メールがどこに分割されたかの履歴を使用可能になりました。 + +@item +新しい記事日付命令が加えられました---@code{article-date-iso8601}。 + +@item +@code{gnus-score-thread-simplify} を設定する事によりスレッドを作成してい +るときは表題が単純化されるようになりました。 + +@item +メッセージで引用をするための新しい関数が加えられました--- +@code{message-cite-original-without-signature}。 + +@item +@code{article-strip-all-blank-lines}---新しい記事命令です。 + +@item +記事の終わりまでを切る新しいメッセージ命令が加えられました。 + +@item +変数 @code{gnus-adaptive-word-minimum} を使う事により最小限適応スコアを +指定する事ができます。 + +@item +命令 @code{gnus-start-date-timer} により ``過失日付'' 記事ヘッダーが継続 +的に更新されるようになりました。 + +@item +ウェブ listserv アーカイブが @code{nnlistserv} バックエンドにより読む事 +ができるようになりました。 + +@item +古い dejanews アーカイブが @code{nnweb} から読む事ができるようになりまし +た。 + +@end itemize + + + +@node Newest Features +@subsection 最新の機能 +@cindex todo + +@dfn{todo list} としても知られています。次の千年祭までには確実に実装され +るでしょう。 + +恐れて下さい。非常に恐れて下さい。 + +(この一覧に現われている機能は必ずしも私がそれを実際に実装しようと決めた +というわけではありません。それは私がおもしろそうだな、と思ったというだけ +です。) + +(はい、これは実際の、最優先からその次への todo list です。) + +@itemize @bullet + +@item +Native @sc{mime} support is something that should be done. + +@item +Really do unbinhexing. + +@item + I would like the zombie-page to contain an URL to the source of the +latest version of gnus or some explanation on where to find it. + +@item + A way to continue editing the latest Message composition. + +@item + http://www.sonicnet.com/feature/ari3/ + +@item + facep is not declared. + +@item + Include a section in the manual on why the number of articles +isn't the same in the group buffer and on the SPC prompt. + +@item + Interacting with rmail fcc isn't easy. + +@item +@example + Hypermail: + + + + +http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610/index.html + +http://www.miranova.com/gnus-list/ + +@end example + +@item +@samp{^-- } is made into - in LaTeX. + +@item + gnus-kill is much slower than it was in GNUS 4.1.3. + +@item + when expunging articles on low score, the sparse nodes keep hanging on? +@item + starting the first time seems to hang Gnus on some systems. Does +NEWGROUPS answer too fast? +@item + nndir doesn't read gzipped files. +@item + FAQ doesn't have an up node? +@item + when moving mail from a procmail spool to the crash-box, +the crash-box is only appropriate to one specific group. +@item + `t' `t' makes X-Faces disappear. +@item + nnmh-be-safe means that crossposted articles will +be marked as unread. +@item + Orphan score entries don't show on "V t" score trace +@item + when clearing out data, the cache data should also be reset. +@item + rewrite gnus-summary-limit-children to be non-recursive +to avoid exceeding lisp nesting on huge groups. +@item + expunged articles are counted when computing scores. +@item + implement gnus-batch-brew-soup +@item + ticked articles aren't easy to read in pick mode -- `n' and +stuff just skips past them. Read articles are the same. +@item + topics that contain just groups with ticked +articles aren't displayed. +@item + nndoc should always allocate unique Message-IDs. +@item + implement gnus-score-thread +@item + If there are mail groups the first time you use Gnus, Gnus'll +make the mail groups killed. +@item + no "no news is good news" when using topics. +@item + when doing crosspost marking, the cache has to be consulted +and articles have to be removed. +@item + nnweb should fetch complete articles when they are split into several +parts. +@item + scoring on head immediate doesn't work. +@item + finding short score file names takes forever. +@item + canceling articles in foreign groups. +@item + nntp-open-rlogin no longer works. +@item + C-u C-x C-s (Summary) switches to the group buffer. +@item + move nnmail-split-history out to the backends. +@item + nnweb doesn't work properly. +@item + using a virtual server name as `gnus-select-method' doesn't work? +@item + when killing/yanking a group from one topic to another in a slave, the +master will yank it first to one topic and then add it to another. +Perhaps. + +@item + warn user about `=' redirection of a group in the active file? +@item + really unbinhex binhex files. +@item + take over the XEmacs menubar and offer a toggle between the XEmacs +bar and the Gnus bar. +@item +@example + push active file and NOV file parsing down into C code. +`(canonize-message-id id)' +`(mail-parent-message-id references n)' +`(parse-news-nov-line &optional dependency-hashtb)' +`(parse-news-nov-region beg end &optional dependency-hashtb fullp)' +`(parse-news-active-region beg end hashtb)' + +@end example + +@item + nnml .overview directory with splits. +@item + asynchronous cache +@item + postponed commands. +@item + the selected article show have its Subject displayed in its summary line. +@item + when entering groups, get the real number of unread articles from +the server? +@item + sort after gathering threads -- make false roots have the +headers of the oldest orphan with a 0 article number? +@item + nndoc groups should inherit the score files of their parents? Also +inherit copy prompts and save files. +@item + command to start up Gnus (if not running) and enter a mail mode buffer. +@item + allow editing the group description from the group buffer +for backends that support that. +@item +gnus-hide,show-all-topics +@item + groups and sub-topics should be allowed to mingle inside each topic, +and not just list all subtopics at the end. +@item + a command to remove all read articles that are not needed to connect +threads -- `gnus-summary-limit-to-sparse-unread'? +@item + a variable to turn off limiting/cutting of threads in the tree buffer. +@item + a variable to limit how many files are uudecoded. +@item + add zombie groups to a special "New Groups" topic. +@item + server mode command: close/open all connections +@item + put a file date in gnus-score-alist and check whether the file +has been changed before using it. +@item + on exit from a digest group, go to the next article in the parent group. +@item + hide (sub)threads with low score. +@item + when expiring, remove all marks from expired articles. +@item + gnus-summary-limit-to-body +@item + a regexp alist that says what level groups are to be subscribed +on. Eg. -- `(("nnml:" . 1))'. +@item + easier interface to nnkiboze to create ephemeral groups that +contain groups that match a regexp. +@item + allow newlines in urls, but remove them before using +the URL. +@item + If there is no From line, the mail backends should fudge one from the +"From " line. +@item + fuzzy simplifying should strip all non-alpha-numerical info +from subject lines. +@item + gnus-soup-brew-soup-with-high-scores. +@item + nntp-ping-before-connect +@item + command to check whether NOV is evil. "list overview.fmt". +@item + when entering a group, Gnus should look through the score +files very early for `local' atoms and set those local variables. +@item + message annotations. +@item + topics are always yanked before groups, and that's not good. +@item + (set-extent-property extent 'help-echo "String to display in minibuf") +to display help in the minibuffer on buttons under XEmacs. +@item + allow group line format spec to say how many articles there +are in the cache. +@item + AUTHINFO GENERIC +@item + support qmail maildir spools +@item + `run-with-idle-timer' in gnus-demon. +@item + stop using invisible text properties and start using overlays instead +@item + C-c C-f C-e to add an Expires header. +@item + go from one group to the next; everything is expunged; go to the +next group instead of going to the group buffer. +@item + gnus-renumber-cache -- to renumber the cache using "low" numbers. +@item + record topic changes in the dribble buffer. +@item + `nnfolder-generate-active-file' should look at the folders it +finds and generate proper active ranges. +@item + nneething-look-in-files-for-article-heads variable to control +whether nneething should sniff all files in the directories. +@item + gnus-fetch-article -- start Gnus, enter group, display article +@item + gnus-dont-move-articles-to-same-group variable when respooling. +@item + when messages are crossposted between several auto-expirable groups, +articles aren't properly marked as expirable. +@item + nneething should allow deletion/moving. +@item + TAB on the last button should go to the first button. +@item + if the car of an element in `mail-split-methods' is a function, +and the function returns non-nil, use that as the name of the group(s) to +save mail in. +@item + command for listing all score files that have been applied. +@item + a command in the article buffer to return to `summary' config. +@item + `gnus-always-post-using-current-server' -- variable to override +`C-c C-c' when posting. +@item + nnmail-group-spool-alist -- says where each group should use +as a spool file. +@item + when an article is crossposted to an auto-expirable group, the article +should be marker as expirable. +@item + article mode command/menu for "send region as URL to browser". +@item + on errors, jump to info nodes that explain the error. For instance, +on invalid From headers, or on error messages from the nntp server. +@item + when gathering threads, make the article that has no "Re: " the parent. +Also consult Date headers. +@item + a token in splits to call shrink-window-if-larger-than-buffer +@item + `1 0 A M' to do matches on the active hashtb. +@item + duplicates -- command to remove Gnus-Warning header, use the read +Message-ID, delete the "original". +@item + when replying to several messages at once, put the "other" message-ids +into a See-Also header. +@item + support setext: URL:http://www.bsdi.com/setext/ +@item + support ProleText: +@item + when browsing a foreign server, the groups that are already subscribed +should be listed as such and not as "K". +@item + generate font names dynamically. +@item + score file mode auto-alist. +@item + allow nndoc to change/add/delete things from documents. Implement +methods for each format for adding an article to the document. +@item + `gnus-fetch-old-headers' `all' value to incorporate +absolutely all headers there is. +@item + function like `|', but concatenate all marked articles +and pipe them to the process. +@item + cache the list of killed (or active) groups in a separate file. Update +the file whenever we read the active file or the list +of killed groups in the .eld file reaches a certain length. +@item + function for starting to edit a file to put into +the current mail group. +@item + score-find-trace should display the total score of the article. +@item + "ghettozie" -- score on Xref header and nix it out after using it +to avoid marking as read in other groups it has been crossposted to. +@item + look at procmail splitting. The backends should create +the groups automatically if a spool file exists for that group. +@item + function for backends to register themselves with Gnus. +@item + when replying to several process-marked articles, +have all the From end up in Cc headers? Variable to toggle. +@item + command to delete a crossposted mail article from all +groups it has been mailed to. +@item + `B c' and `B m' should be crosspost aware. +@item + hide-pgp should also hide PGP public key blocks. +@item + Command in the group buffer to respool process-marked groups. +@item + `gnus-summary-find-matching' should accept +pseudo-"headers" like "body", "head" and "all" +@item + When buttifying things, all white space (including +newlines) should be ignored. +@item + Process-marking all groups in a topic should process-mark +groups in subtopics as well. +@item + Add non-native groups to the list of killed groups when killing them. +@item + nntp-suggest-kewl-config to probe the nntp server and suggest +variable settings. +@item + add edit and forward secondary marks. +@item + nnml shouldn't visit its .overview files. +@item + allow customizing sorting within gathered threads. +@item + `B q' shouldn't select the current article. +@item + nnmbox should support a newsgroups file for descriptions. +@item + allow fetching mail from several pop servers. +@item + Be able to specify whether the saving commands save the original +or the formatted article. +@item + a command to reparent with the child process-marked (cf. `T ^'.). +@item + I think the possibility to send a password with nntp-open-rlogin +should be a feature in Red Gnus. +@item + The `Z n' command should be possible to execute from a mouse click. +@item + more limiting functions -- date, etc. +@item + be able to limit on a random header; on body; using reverse matches. +@item + a group parameter (`absofucking-total-expiry') that will make Gnus expire +even unread articles. +@item + a command to print the article buffer as postscript. +@item + variable to disable password fetching when opening by nntp-open-telnet. +@item + manual: more example servers -- nntp with rlogin, telnet +@item + checking for bogus groups should clean topic alists as well. +@item + canceling articles in foreign groups. +@item + article number in folded topics isn't properly updated by +Xref handling. +@item + Movement in the group buffer to the next unread group should go to the +next closed topic with unread messages if no group can be found. +@item + Extensive info pages generated on the fly with help everywhere -- +in the "*Gnus edit*" buffers, for instance. +@item + Topic movement commands -- like thread movement. Up, down, forward, next. +@item + a way to tick/mark as read Gcc'd articles. +@item + a way to say that all groups within a specific topic comes +from a particular server? Hm. +@item + `gnus-article-fill-if-long-lines' -- a function to fill +the article buffer if there are any looong lines there. +@item + `T h' should jump to the parent topic and fold it. +@item + a command to create an ephemeral nndoc group out of a file, +and then splitting it/moving it to some other group/backend. +@item + a group parameter for nnkiboze groups that says that +all kibozed articles should be entered into the cache. +@item + It should also probably be possible to delimit what +`gnus-jog-cache' does -- for instance, work on just some groups, or on +some levels, and entering just articles that have a score higher than +a certain number. +@item + nnfolder should append to the folder instead of re-writing +the entire folder to disk when accepting new messages. +@item + allow all backends to do the proper thing with .gz files. +@item + a backend for reading collections of babyl files nnbabylfolder? +@item + a command for making the native groups into foreign groups. +@item + server mode command for clearing read marks from all groups +from a server. +@item + when following up multiple articles, include all To, Cc, etc headers +from all articles. +@item + a command for deciding what the total score of the current +thread is. Also a way to highlight based on this. +@item + command to show and edit group scores +@item + a gnus-tree-minimize-horizontal to minimize tree buffers +horizontally. +@item + command to generate nnml overview file for one group. +@item + `C-u C-u a' -- prompt for many crossposted groups. +@item + keep track of which mail groups have received new articles (in this session). +Be able to generate a report and perhaps do some marking in the group +buffer. +@item + gnus-build-sparse-threads to a number -- build only sparse threads +that are of that length. +@item + have nnmh respect mh's unseen sequence in .mh_profile. +@item + cache the newsgroups descriptions locally. +@item + asynchronous posting under nntp. +@item + be able to control word adaptive scoring from the score files. +@item + a variable to make `C-c C-c' post using the "current" select method. +@item + `limit-exclude-low-scored-articles'. +@item + if `gnus-summary-show-thread' is a number, hide threads that have +a score lower than this number. +@item + split newsgroup subscription variable up into "order" and "method". +@item + buttonize ange-ftp file names. +@item + a command to make a duplicate copy of the current article +so that each copy can be edited separately. +@item + nnweb should allow fetching from the local nntp server. +@item + record the sorting done in the summary buffer so that +it can be repeated when limiting/regenerating the buffer. +@item + nnml-generate-nov-databses should generate for +all nnml servers. +@item + when the user does commands in the group buffer, check +the modification time of the .newsrc.eld file and use +ask-user-about-supersession-threat. Also warn when trying +to save .newsrc.eld and it has changed. +@item + M-g on a topic will display all groups with 0 articles in +the topic. +@item + command to remove all topic stuff. +@item + allow exploding incoming digests when reading incoming mail +and splitting the resulting digests. +@item + nnsoup shouldn't set the `message-' variables. +@item + command to nix out all nnoo state information. +@item + nnmail-process-alist that calls functions if group names +matches an alist -- before saving. +@item + use buffer-invisibility-spec everywhere for hiding text. +@item + variable to activate each group before entering them +to get the (new) number of articles. `gnus-activate-before-entering'. +@item + command to fetch a Message-ID from any buffer, even +starting Gnus first if necessary. +@item + when posting and checking whether a group exists or not, just +ask the nntp server instead of relying on the active hashtb. +@item + buttonize the output of `C-c C-a' in an apropos-like way. +@item + `G p' should understand process/prefix, and allow editing +of several groups at once. +@item + command to create an ephemeral nnvirtual group that +matches some regexp(s). +@item + nndoc should understand "Content-Type: message/rfc822" forwarded messages. +@item + it should be possible to score "thread" on the From header. +@item + hitting RET on a "gnus-uu-archive" pseudo article should unpack it. +@item + `B i' should display the article at once in the summary buffer. +@item + remove the "*" mark at once when unticking an article. +@item + `M-s' should highlight the matching text. +@item + when checking for duplicated mails, use Resent-Message-ID if present. +@item + killing and yanking groups in topics should be better. If killing one copy +of a group that exists in multiple topics, only that copy should +be removed. Yanking should insert the copy, and yanking topics +should be possible to be interspersed with the other yankings. +@item + command for enter a group just to read the cached articles. A way to say +"ignore the nntp connection; just read from the cache." +@item + `X u' should decode base64 articles. +@item + a way to hide all "inner" cited text, leaving just the most +recently cited text. +@item + nnvirtual should be asynchronous. +@item + after editing an article, gnus-original-article-buffer should +be invalidated. +@item + there should probably be a way to make Gnus not connect to the +server and just read the articles in the server +@item + allow a `set-default' (or something) to change the default +value of nnoo variables. +@item + a command to import group infos from a .newsrc.eld file. +@item + groups from secondary servers have the entire select method +listed in each group info. +@item + a command for just switching from the summary buffer to the group +buffer. +@item + a way to specify that some incoming mail washing functions +should only be applied to some groups. +@item + Message `C-f C-t' should ask the user whether to heed +mail-copies-to: never. +@item + new group parameter -- `post-to-server' that says to post +using the current server. Also a variable to do the same. +@item + the slave dribble files should autosave to the slave file names. +@item + a group parameter that says what articles to display on group entry, based +on article marks. +@item + a way to visually distinguish slave Gnusae from masters. (Whip instead +of normal logo?) +@item + Use DJ Bernstein "From " quoting/dequoting, where applicable. +@item + Why is hide-citation-maybe and hide-citation different? Also +clear up info. +@item + group user-defined meta-parameters. + + + +From: John Griffith +@item + I like the option for trying to retrieve the FAQ for a group and I was +thinking it would be great if for those newsgroups that had archives +you could also try to read the archive for that group. Part of the +problem is that archives are spread all over the net, unlike FAQs. +What would be best I suppose is to find the one closest to your site. + +In any case, there is a list of general news group archives at +ftp://ftp.neosoft.com/pub/users/claird/news.lists/newsgroup_archives.html + + + + +@item +@example +From: Jason L Tibbitts III +(add-hook 'gnus-select-group-hook + (lambda () + (gnus-group-add-parameter group + (cons 'gnus-group-date-last-entered (list (current-time-string)))))) + +(defun gnus-user-format-function-d (headers) + "Return the date the group was last read." + (cond ((car (gnus-group-get-parameter gnus-tmp-group 'gnus-group-date-last-entered))) + (t ""))) +@end example + +@item + tanken var at n,Aer du bruker `gnus-startup-file' som prefix (FOO) til ,Ae lete +opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den v,Afre en +liste hvor du bruker hvert element i listen som FOO, istedet. da kunne man +hatt forskjellige serveres startup-filer forskjellige steder. + + +@item +LMI> Well, nnbabyl could alter the group info to heed labels like +LMI> answered and read, I guess. + +It could also keep them updated (the same for the Status: header of +unix mbox files). + +They could be used like this: + + +@example +`M l RET' add label to current message. +`M u RET' remove label from current message. +`/ l RET' limit summary buffer according to . + + would be a boolean expression on the labels, e.g. + +`/ l bug & !fixed RET' +@end example + +would show all the messages which are labeled `bug' but not labeled +`fixed'. + +One could also imagine the labels being used for highlighting, or +affect the summary line format. + + +@item +Sender: abraham@@dina.kvl.dk + +I'd like a gnus-find-file which work like find file, except that it +would recognize things that looks like messages or folders: + +- If it is a directory containing numbered files, create an nndir +summary buffer. + +- For other directories, create a nneething summary buffer. + +- For files matching "\\`From ", create a nndoc/mbox summary. + +- For files matching "\\`BABYL OPTIONS:", create a nndoc/baby summary. + +- For files matching "\\`[^ \t\n]+:", create an *Article* buffer. + +- For other files, just find them normally. + +I'd like `nneething' to use this function, so it would work on a +directory potentially containing mboxes or babyl files. + +@item +Please send a mail to bwarsaw@@cnri.reston.va.us (Barry A. Warsaw) and +tell him what you are doing. + +@item +Currently, I get prompted: + +decend into sci? +- type y +decend into sci.something ? +- type n +decend into ucd? + +The problem above is that since there is really only one subsection of +science, shouldn't it prompt you for only descending sci.something? If +there was a sci.somethingelse group or section, then it should prompt +for sci? first the sci.something? then sci.somethingelse?... + +@item +Ja, det burde v,Afre en m,Aete ,Ae si slikt. Kanskje en ny variabel? +`gnus-use-few-score-files'? S,Ae kunne score-regler legges til den +"mest" lokale score-fila. F. eks. ville no-gruppene betjenes av +"no.all.SCORE", osv. + +@item +What i want is for Gnus to treat any sequence or combination of the following +as a single spoiler warning and hide it all, replacing it with a "Next Page" +button: + + +^L's + +more than n blank lines + +more than m identical lines +(which should be replaced with button to show them) + +any whitespace surrounding any of the above + + +@item +Well, we could allow a new value to `gnus-thread-ignore-subject' -- +`spaces', or something. (We could even default to that.) And then +subjects that differ in white space only could be considered the +"same" subject for threading purposes. + +@item +Modes to preprocess the contents (e.g. jka-compr) use the second form +"(REGEXP FUNCTION NON-NIL)" while ordinary modes (e.g. tex) use the first +form "(REGEXP . FUNCTION)", so you could use it to distinguish between +those two types of modes. (auto-modes-alist, insert-file-contents-literally.) + +@item + Under XEmacs -- do funny article marks: +tick - thumb tack +killed - skull +soup - bowl of soup +score below - dim light bulb +score over - bright light bulb + +@item +Yes. I think the algorithm is as follows: + +@example +Group-mode + + show-list-of-articles-in-group + if (key-pressed == SPACE) + if (no-more-articles-in-group-to-select) + if (articles-selected) + start-reading-selected-articles; + junk-unread-articles; + next-group; + else + show-next-page; + + else if (key-pressed = '.') + if (consolidated-menus) # same as hide-thread in Gnus + select-thread-under-cursor; + else + select-article-under-cursor; + + +Article-mode + if (key-pressed == SPACE) + if (more-pages-in-article) + next-page; + else if (more-selected-articles-to-read) + next-article; + else + next-group; +@end example + +@item +My precise need here would have been to limit files to Incoming*. +One could think of some `nneething-only-files' variable, but I guess +it would have been unacceptable if one was using many unrelated such +nneething groups. + +A more useful approach would be to, in response to the `G D' prompt, be +allowed to say something like: `~/.mail/Incoming*', somewhat limiting +the top-level directory only (in case directories would be matched by +the wildcard expression). + +@item +It would be nice if it also handled + + + +which should correspond to `B nntp RET sunsite.auc.dk' in *Group*. + + +@item + + Take a look at w3-menu.el in the Emacs-W3 distribution - this works out +really well. Each menu is 'named' by a symbol that would be on a +gnus-*-menus (where * would be whatever, but at least group, summary, and +article versions) variable. + + So for gnus-summary-menus, I would set to '(sort mark dispose ...) + + A value of '1' would just put _all_ the menus in a single 'GNUS' menu in +the main menubar. This approach works really well for Emacs-W3 and VM. + + +@item + nndoc should take care to create unique Message-IDs for all its +articles. +@item + gnus-score-followup-article only works when you have a summary buffer +active. Make it work when posting from the group buffer as well. +(message-sent-hook). +@item + rewrite gnus-demon to use run-with-idle-timers. + +@item + * Enhancements to Gnus: + + Add two commands: + + * gnus-servers (gnus-start-server-buffer?)--enters Gnus and goes + straight to the server buffer, without opening any connections to + servers first. + + * gnus-server-read-server-newsrc--produces a buffer very similar to + the group buffer, but with only groups from that server listed; + quitting this buffer returns to the server buffer. + +@item + add a command to check the integrity of an nnfolder folder -- +go through the article numbers and see that there are no duplicates, +and stuff. + +@item + `unsmileyfy-buffer' to undo smileification. + +@item + a command to give all relevant info on an article, including all +secondary marks. + +@item + when doing `-request-accept-article', the backends should do +the nnmail duplicate checking. + +@item + allow `message-signature-file' to be a function to return the +value of the signature file. + +@item + In addition, I would love it if I could configure message-tab so that it +could call `bbdb-complete-name' in other headers. So, some sort of +interface like + +(setq message-tab-alist + '((message-header-regexp message-expand-group) + ("^\\(To\\|[cC]c\\|[bB]cc\\)" bbdb-complete-name))) + +then you could run the relevant function to complete the information in +the header + +@item + cache the newsgroups file locally to avoid reloading it all the time. + +@item + a command to import a buffer into a group. + +@item + nnweb should allow fetching by Message-ID from servers. + +@item + point in the article buffer doesn't always go to the +beginning of the buffer when selecting new articles. + +@item + a command to process mark all unread articles. + +@item + `gnus-gather-threads-by-references-and-subject' -- first +do gathering by references, and then go through the dummy roots and +do more gathering by subject. + +@item + gnus-uu-mark-in-numerical-order -- process mark articles in +article numerical order. + +@item + (gnus-thread-total-score + (gnus-id-to-thread (mail-header-id (gnus-summary-article-header)))) +bind to a key. + +@item + sorting by score is wrong when using sparse threads. + +@item + a command to fetch an arbitrary article -- without having to be +in the summary buffer. + +@item + a new nncvs backend. Each group would show an article, using +version branches as threading, checkin date as the date, etc. + +@item + http://www.dejanews.com/forms/dnsetfilter_exp.html ? +This filter allows one to construct advance queries on the Dejanews +database such as specifying start and end dates, subject, author, +and/or newsgroup name. + +@item + new Date header scoring type -- older, newer + +@item + use the summary toolbar in the article buffer. + +@item + a command to fetch all articles that are less than X days old. + +@item + in pick mode, `q' should save the list of selected articles in the +group info. The next time the group is selected, these articles +will automatically get the process mark. + +@item + Isn't it possible to (also?) allow M-^ to automatically try the +default server if it fails on the current server? (controlled by a +user variable, (nil, t, 'ask)). + +@item + make it possible to cancel articles using the select method for the +current group. + +@item + `gnus-summary-select-article-on-entry' or something. It'll default +to t and will select whatever article decided by `gnus-auto-select-first'. + +@item + a new variable to control which selection commands should be unselecting. +`first', `best', `next', `prev', `next-unread', `prev-unread' are +candidates. + +@item + be able to select groups that have no articles in them +to be able to post in them (using the current select method). + +@item + be able to post via DejaNews. + +@item + `x' should retain any sortings that have been performed. + +@item + allow the user to specify the precedence of the secondary marks. Also +allow them to be displayed separately. + +@item + gnus-summary-save-in-pipe should concatenate the results from +the processes when doing a process marked pipe. + +@item + a new match type, like Followup, but which adds Thread matches on all +articles that match a certain From header. + +@item + a function that can be read from kill-emacs-query-functions to offer +saving living summary buffers. + +@item + a function for selecting a particular group which will contain +the articles listed in a list of article numbers/id's. + +@item + a battery of character translation functions to translate common +Mac, MS (etc) characters into ISO 8859-1. + +@example +(defun article-fix-m$word () + "Fix M$Word smartquotes in an article." + (interactive) + (save-excursion + (let ((buffer-read-only nil)) + (goto-char (point-min)) + (while (search-forward "\221" nil t) + (replace-match "`" t t)) + (goto-char (point-min)) + (while (search-forward "\222" nil t) + (replace-match "'" t t)) + (goto-char (point-min)) + (while (search-forward "\223" nil t) + (replace-match "\"" t t)) + (goto-char (point-min)) + (while (search-forward "\224" nil t) + (replace-match "\"" t t))))) +@end example + +@item +@example + (add-hook 'gnus-exit-query-functions +'(lambda () + (if (and (file-exists-p nnmail-spool-file) + (> (nnheader-file-size nnmail-spool-file) 0)) + (yes-or-no-p "New mail has arrived. Quit Gnus anyways? ") + (y-or-n-p "Are you sure you want to quit Gnus? ")))) +@end example + +@item + allow message-default-headers to be a function. + +@item + new Date score match types -- < > = (etc) that take floating point +numbers and match on the age of the article. + +@item + gnus-cacheable-groups + +@item +@example +> > > If so, I've got one gripe: It seems that when I fire up gnus 5.2.25 +> > > under xemacs-19.14, it's creating a new frame, but is erasing the +> > > buffer in the frame that it was called from =:-O +> +> > Hm. How do you start up Gnus? From the toolbar or with +> > `M-x gnus-other-frame'? +> +> I normally start it up from the toolbar; at +> least that's the way I've caught it doing the +> deed before. +@end example + +@item + all commands that react to the process mark should push +the current process mark set onto the stack. + +@item + gnus-article-hide-pgp +Selv ville jeg nok ha valgt ,Ae slette den dersom teksten matcher +@example +"\\(This\s+\\)?[^ ]+ has been automatically signed by" +@end example +og det er maks hundre tegn mellom match-end og ----linja. Men -det- +er min type heuristikk og langt fra alles. + +@item + `gnus-subscribe-sorted' -- insert new groups where they would have been +sorted to if `gnus-group-sort-function' were run. + +@item + gnus-(group,summary)-highlight should respect any `face' text props set +on the lines. + +@item + use run-with-idle-timer for gnus-demon instead of the +home-brewed stuff for better reliability. + +@item + add a way to select which NoCeM type to apply -- spam, troll, etc. + +@item + nndraft-request-group should tally autosave files. + +@item + implement nntp-retry-on-break and nntp-command-timeout. + +@item + gnus-article-highlight-limit that says when not to highlight (long) +articles. + +@item + (nnoo-set SERVER VARIABLE VALUE) + +@item + nn*-spool-methods + +@item + interrupitng agent fetching of articles should save articles. + +@item + command to open a digest group, and copy all the articles there to the +current group. + +@item + a variable to disable article body highlights if there's more than +X characters in the body. + +@item + handle 480/381 authinfo requests separately. + +@item + include the texi/dir file in the distribution. + +@item + format spec to "tab" to a position. + +@item + Move all prompting to the new `M-n' default style. + +@item + command to display all dormant articles. + +@item + gnus-auto-select-next makeover -- list of things it should do. + +@item + a score match type that adds scores matching on From if From has replied +to something someone else has said. + +@item + Read Netscape discussion groups: +snews://secnews.netscape.com/netscape.communicator.unix + +@item +One command to edit the original version if an article, and one to edit +the displayed version. + +@item +@kbd{T v} -- make all process-marked articles the children of the +current article. + +@item +Switch from initial text to the new default text mechanism. + +@item +How about making it possible to expire local articles? Will it be +possible to make various constraints on when an article can be +expired, e.g. (read), (age > 14 days), or the more interesting (read +& age > 14 days)? + +@item +New limit command---limit to articles that have a certain string +in the head or body. + +@item +Allow breaking lengthy NNTP commands. + +@item +gnus-article-highlight-limit, to disable highlighting in big articles. + +@item +Editing an article should put the article to be edited +in a special, unique buffer. + +@item +A command to send a mail to the admin-address group param. + +@item +A Date scoring type that will match if the article +is less than a certain number of days old. + +@item +New spec: %~(tab 56) to put point on column 56 + +@item +Allow Gnus Agent scoring to use normal score files. + +@item +Rething the Agent active file thing. `M-g' doesn't update the active +file, for instance. + +@item +With dummy roots, `^' and then selecing the first article +in any other dummy thread will make gnus highlight the +dummy root instead of the first article. + +@item +Propagate all group properties (marks, article numbers, etc) up to the +topics for displaying. + +@item +`n' in the group buffer with topics should go to the next group +with unread articles, even if that group is hidden in a topic. + +@item +Solve the halting problem. + +@c TODO +@end itemize + +@iftex + +@page +@node The Manual +@section マニュアル +@cindex colophon +@cindex manual + +このマニュアルは TeXinfo ファイルから作成され、それから @code{texi2dvi} +@iflatex +もしくは、Lars さんの作られた Texinfo to \LaTeX 変換を通り、それから、 +@code{latex} と @code{dvips} +@end iflatex +を実行して、手元にあるもになりました。 + +以下の習慣が用いられました: + +@enumerate +これは @kbd{キー打鍵} です。 + +@item +これは @file{ファイル} です。 + +@item +これは @code{シンボル} です。 + +@end enumerate + +ですから、私が ``@code{flargnoze} を @samp{yes} に設定する'' と言ったと +きは、次のような意味です: + +@lisp +(setq flargnoze "yes") +@end lisp + +もし、私が ``@code{flargnoze を @code{yes} に設定する'' と言ったときは、 +次のような意味です: + +@lisp +(setq flumphel 'yes) +@end lisp + +@samp{yes} と @code{yes} は2つの @emph{全く} 違ったものです---絶対に混同 +しないでください。 + +@iflatex +@c @head +もちろん、このマニュアルの全ては重大な興味のあることですので、あなたは全 +て読むべきです。何度も。しかし、マニュアルを斜め読みしたいのであれば、そ +このマージンにあるヌーの頭を見るべきでしょう---それはそこで議論されてい +るのが残りのものより重要であるということです。 (一方、全てが無限に重要の +であれば、どうすればそれよりもっと重要なものができるのでしょう? この世 +界の、不思議の1つでしょう、たぶん。) +@end iflatex + +@end iftex + + +@page +@node Terminology +@section 用語 + +@cindex terminology +@table @dfn + +@item ニュース (news) +@cindex news +これはあなたがそのためにこのものを使いたいと思っているものです---ニュー +スを読む事です。ニュースは一般的には近くの @sc{nntp} サーバーから取得さ +れ、普通は全ての人に広く利用可能なものです。もしニュースを投稿すれば、全 +世界があなたがちょうど書いたものを読む可能性があり、それらは全ていたずらっ +ぽくクスクス笑われるでしょう。あなたの知らないところで。 + +@item メール (mail) +@cindex mail +あなたに個人的に配送されるもの全てがメールです。いくつかのニュース/メー +ルリーダー (gnus のような) はメールとニュースの違いをぼやけさせますが、 +そこには違いは存在します。メールは私的です。ニュースは公的です。メールを +送信する事は投稿ではなく、返信はフォローアップではありません。 + +@item 返信 (reply) +@cindex reply +あなたが読んでいるものを書いた人にメールを送る事です。 + +@item フォローアップ (follow up) +@cindex follow up +あなたが読んでいる記事に応答して現在のニュースグループに記事を投稿する事 +です。 + +@item バックエンド (backend) +@cindex backend +Gnus はニュースとメールの両方のいろいろなバックエンドが与えた記事を得ま +す。Gnus はは、いわゆる下に横たわっているメディアを扱う事はしません---こ +れはすべてバックエンドによってなされます。 + +@item 基本 (native) +@cindex native +Gnus はいつも一つの方法 (とバックエンド) をニュースを得るための @dfn{基 +本}、もしくは初期設定 として使います。 + +@item 外部 (foreign) +@cindex foreign +同時に任意の数の外部グループを活動状態にすることもできます。これらはニュー +スを取得するための、基本でなく、2番目でもないバックエンドを使うグループ +です。 + +@item 二番目 (secondary) +@cindex secondary +2番目のバックエンドは、基本と外部の間くらいにあるバックエンドで、ほとん +ど基本と同じように動作するものです。 + +@item 記事 (article) +@cindex article +ニュースとして投稿されたメッセージです。 + +@item メールメッセージ (mail message) +@cindex mail message +メールで送られたメッセージです。 + +@item メッセージ +@cindex message +メールメッセージもしくはニュース記事です。 + +@item ヘッド (head) +メッセージの最上部で、認証情報 (等) が入れられているところです。 + +@item 本体 (body) +@cindex body +記事の残りの部分です。ヘッドでないものはすべて本体です。 + +@item ヘッダー (header) +@cindex header +記事のヘッドからの行です。 + +@item ヘッダー群 (headers) +@cindex headers +そのような行の集合もしくは、ヘッドの集合です。もしくは、@sc{nov} 行の集 +合です。 + +@item @sc{nov} +@cindex nov +Gnus がグループに入ると、グループの全ての未読記事のヘッダーをバックエン +ドに求めます。ほとんどのサーバーは News OverView 様式が使用可能で、それ +は普通の @sc{head} 様式よりもっと手短でもっと速く読んで解析 (parse) する +ことができます。 + +@item レベル (level) +@cindex levels +それぞれのグループは何らかの @dfn{レベル} か他のもの (1-9) で購読されて +います。低いレベルのものは高いレベルのものより ``より'' 購読されています。 +実際のところ、レベル 1-5 のグループは @dfn{購読}; 6-7 は @dfn{未購読}; 8 +は @dfn{ゾンビ}; 9 は @dfn{切られた} と見なされます。グループをリストした +り、新しいグループを走査したりする命令はすべて数値接頭引数を @dfn{動作レ +ベル} として使います。 + +@item 切られたグループ (killed groups) +@cindex killed groups +切られたグループの情報は蓄積されたり更新されたりしませんので、切られたグ +ループを購読されたグループより簡単に扱えるようになります。 + +@item ゾンビグループ (zombie groups) +@cindex zombie groups +ほとんど切られたグループと同じで、それより少し死んでいるだけです。 + +@item 現状ファイル (active file) +@cindex active file +ニュースサーバーはどの記事を運んでいるか、どのグループが存在するかを記録 +しておかなければなりません。全てのこの情報は現状ファイルに蓄積され、それ +はあなたが想像するように比較的大きいです。 + +@item 偽グループ (bogus groups) +@cindex bogus groups +ファイル @file{.newsrc} に存在するグループですが、サーバーに知られていな +いグループ (すなわち、それは現状ファイルにありません) は @emph{偽グルー +プ} です。これは、おそらく (すでに) そのグループは存在していないのでしょ +う。 + +@item 活動化 (activating) +@cindex activating groups +サーバーにグループの情報を尋ね、未読記事の数を演算する行為は @dfn{グルー +プを活動化する} と呼ばれています。非活動グループはグループバッファに +@samp{*} とともに一覧表示されます。 + +@item サーバー (server) +@cindex server +接続して、ニュース (もしくはメール) を取得する事のできるグループです。 + +@item 選択方法 (select method) +@cindex select method +バックエンド、サーバーと、事実上のサーバー設定を指定する構造です。 + +@item 事実上のサーバー (virtual server) +@cindex virtual server +命名された選択方法です。選択方法は (物理的) サーバーに接続するために必要 +な方法を定義するため、物事を全体として受けるのは事実上のサーバーになりま +す。 + +@item 洗濯 (washing) +@cindex washing +バッファを持ってきて、何らかの種類の選別機にかける事です。結果は (多かれ +少なかれ) 元のものよりもよりきれいで喜ばしいものになるでしょう。 + +@item 一時グループ (ephemeral groups) +@cindex ephemeral groups +たいていのグループはどの記事を読んだかのデータを蓄積します。@dfn{一時} +グループはデータが溜められないグループです---グループを出ると、それは天 +空に消え去ります。 + +@item 固定グループ (solid groups) +@cindex solid groups +これは一時グループの反対です。グループバッファに挙げられている全てのグルー +プは固定グループです。 + +@item まばら記事 (sparse articles) +@cindex sparse articles +@code{gnus-build-sparse-threads} の機能を使用しているときは、概略バッファ +に記事の入れ場所が表示されます。 + +@item スレッド作り (threading) +@cindex threading +それが応答した記事の直後にその記事への応答を置くことです---階層的流儀で。 + +@item 根 (root) +@cindex root +@cindex thread root +スレッドの最初の記事が根です。それはスレッドの全ての記事の祖先です。 + +@item 親 (parent) +@cindex parent +応答のある記事です。 + +@item 子 (child) +@cindex child +違った記事---その親 に応答する記事です。 + +@item 集配 (digest) +@cindex digest +複数のメッセージを一つのファイルに集めたものです。もっとも普通の集配様式 +は RFC1153 で指定されています。 + +@end table + + +@page +@node Customization +@section カスタマイズ +@cindex gerenal customization + +全ての変数はこのマニュアルのどこか別のところで適切に説明されています。こ +の部分は非常に良くある状況でどのように gnus をカスタマイズすれば良いかの +総合適指示先を与えるために考案されています。 + +@menu +* Slow/Expensive Connection:: ローカルの Emacs を立ち上げて、 + 他のところからニュースを得る事ができる。 +* Slow Terminal Connection:: 遠隔 Emacs を実行する。 +* Little Disk Space:: 大きな起動ファイルを持つ事はまずい。 +* Slow Machine:: 速い機械を買おうと感じるであろう。 +@end menu + + +@node Slow/Expensive Connection +@subsection 遅い/高い @sc{nntp} 接続 + +もし Emacs をローカルのマシンで実行していて、非常に細い線の向こうのマシ +ンからニュースを取得しているのであれば、gnus が @sc{nntp} サーバーから取 +得するデータの総量を減らしたいと思うでしょう。 + +@table @code + +@item gnus-read-activie-file +これを @code{nil} にして下さい。そうすれば、gnus にサーバーから現状ファ +イル全体を要求する事を禁止できます。このファイルはしばしば非常に大きくなっ +ています。それに加えて、gnus が突然とにかく現状ファイルを取得しようと決 +定しない事を確実にするために、@code{gnus-check-new-newsgroups} と +@code{gnus-check-bogus-newsgroups} も @code{nil} に設定しなければなりま +せん。 + +@item gnus-nov-is-evil +これも @code{nil} にしていなければなりません。もしそうでなければ、 +@sc{nntp} サーバーから記事のヘッダーをつかんでくるのがあまり速くなりませ +ん。全ての @sc{nntp} サーバーが @sc{xover} の機能を提供しているわけでは +ありません。Gnus が自分自身でそれを検査します。 +@end table + + +@node Slow Terminal Connection +@subsection 遅いターミナル接続。 + +あなたは、ホームコンピューターを Emacs と gnus を実行しているシステムに +ダイアルアップするために使っているとしましょう。もしあなたのモデムが遅け +れば、(可能な限り) 線を伝って送られているデータの総量を減らしたいと思う +でしょう。 + +@table @code + +@item gnus-auto-center-summary +Gnus が常に概略バッファを中心再設定をすることを禁止するためにこれを +@code{nil} に設定して下さい。これが @code{vertical} であると、垂直方向の +(vertical) 中心再設定のみをします。@code{nil} でも @code{vertical} でも +無ければ、水平方向と垂直方向の両方の中心再設定を行います。 + +@item gnus-visible-headers +記事に含まれるヘッダーを最小限に減らします。実際のところ、全部なくしてし +まっても何とかなります---とにかく、たいていの役に立つデータは概略バッファ +にあります。この変数を @samp{^NEVVVVER} や @samp{From:} や、何でも好きな +ものに設定して下さい。 + +@item gnus-article-display-hook +このフックに全ての使用可能な隠匿命令を設定します: +@lisp +(setq gnus-article-display-hook + '(gnus-article-hide-headers gnus-article-hide-signature + gnus-article-hide-citation)) +@end lisp + +@item gnus-use-full-window +これを @code{nil} に設定する事で、全てのウィンドウを小さくする事ができま +す。これは総じてそんなに減らしません。これは、記事をどっちにしろ読みたく +ないという事を決定する前に、少しの部分しか見る必要が無いという事です。 + +@item gnus-threada-hide-subtree +これが @code{nil} でなければ、全ての概略バッファのスレッドは初めに隠され +ます。 + +@item gnus-updated-mode-lines +これが @code{nil} であると、gnus はバッファのモード行に情報を入れません +ので、時間を節約できるでしょう。 +@end table + + +@node Little Disk Space +@subsection 少しのディスク容量 +@cindex disk space + +起動ファイルは比較的大きくなりますので、空き容量が少なくなってきていると +きはその大きさを少し小さくしたいと思うでしょう。 + +@table @code + +@item gnus-save-newsrc-file +これが @code{nil} であると、gnus は決して @file{.newsrc} を保存しません--- +それは @file{.newsrc.eld} のみを保存します。これは、gnus の他のニュース +リーダーを使えないという事です。この変数は初期設定で @code{t} です。 + +@item gnus-save-killed-list +これが @code{nil} であると、gnus は死んだグループのリストを保存しません。 +この変数を @code{nil} に設定したときは、@code{gnus-check-new-newsgroups} +を @code{ask-server} に、@code{gnus-check-bogus-newsgroups} を +@code{nil} に設定するべきでしょう。この変数は初期設定で @code{t} です。 + +@end table + + +@node Slow Machine +@subsection 遅い機械 +@cindex slow machine + +もし遅い機械を持っているか、もしくは単に本当に忍耐力がない時は、gnus の +実行を把握するためにできる事が少しあります。 + +起動を速くするために @code{gnus-check-new-newsgroups} と +@code{gnus-check-bogus-newsgroups} を @code{nil} に設定して下さい。 + +概略バッファに入る事と抜ける事を速くするために、@code{gnus-show-threads} +と @code{gnus-use-cross-reference} と @code{gnus-nov-is-evil} を +@code{nil} に設定して下さい。 + +記事に関する実行を少し速くするために、@code{gnus-article-display-hook} +を @code{nil} に設定して下さい。 + + +@page +@node Troubleshooting +@section 問題解決 +@cindex troubleshooting + +Gnus は箱から出してすぐに @emph{非常に} よく動作します---何も問題の起こ +ることは想像できません、本当に。 + +オッホン。 + +@enumerate + +@item +あなたのコンピュータのスイッチが入っている事を確かめて下さい。 + +@item +本当に現行の gnus 版を読み込んでいる事を確認して下さい。今まで @sc{gnus} +を実行してきたのであれば、gnus が動作するように一度 Emacs を終了して再起 +動する必要があります。 + +@item +@kbd{M-x gnus-version} を試して下さい。もし、@samp{Semi-gnus 6.8.0 +(based on Gnus 5.6.22; for SEMI 1.8/FLIM 1.8); nntp 5.0;} のようなものが +出てきたなら、正しいファイルが読み込まれています。もし、@samp{NNTP 3.x} +や @samp{nntp flee} のようなものが出てきたときは、そこにあるいくつかの古 +い @file{.el} ファイルが読み込まれています。それらを消して下さい。 + +@item +FAQ と how-to を読むためにヘルプグループ (グループバッファで @kbd{G h}) +を読んで下さい。 + +@item +@vindex max-lisp-eval-depth +Gnus は多くの多くの再帰構造で動作し、何らかの極端な (そして非常にまれな) +事例では、gnus は再帰を ``あまりに深く'' 降りすぎて、Emacs があなたにビー +プ音を鳴らす事があります。もしこれが起こったなら、 +@code{max-lisp-eval-depth} を 500 かそれくらいの値に設定して下さい。 +@end enumerate + +もし他の全てが失敗したなら、バグとして問題を報告して下さい。 + +@cindex bugs +@cindex reporting bugs + +@kindex M-x gnus-bug +@findex gnus-bug +もし gnus のバグを見つけたなら、命令 @kbd{M-x gnus-bug} によってそれを報 +告する事ができます。@kbd{M-x set-variable RET debug-on-error RET t RET} +として、それから私にバックトレースを送って下さい。私はバグを修正しようと +しますが、あなたがバグを再現させる方法を正確に書いてくれたときのみ、それ +を修正する事ができます。 + +バグ報告では、詳細すぎることは決してありません。バグ報告をするときは、そ +れが使うたびに 10Kb メールを作り、もしあなたの環境を以前私に 500 回送っ +てきたとしても、命令 @kbd{M-x gnus-bug} を使って下さい。 + +私は、記憶という種類のものは全く持っていない事を覚えておく事も重要です。 +もしあなたがバグ報告を送ると、私が返答を送ります。そして、それからあなた +が ``いや、そうではない! このばか者!'' とだけ送り返してくると、私はあ +なたが何に対して私を侮辱しているかがわかりません。常に、全てを説明しすぎ +て下さい。それは我々全てにとってもっと簡単になります---もし私が必要な全 +ての情報を得られなかったら、私はあなたにメールを送ってさらなる情報を求め、 +その結果全てがより多くの時間を取る事になります。 + +もしあなたの直面している問題が非常に視覚的で、それを上手く説明できない場 +合は、Emacs のウィンドウをファイルにコピーして (例えば、@kbd{xwd} で)、 +それをどこか手の届くどこかにおいて、その画像の URL をバグ報告に含めて下 +さい。 + +もし援助が欲しいだけであれば、@samp{gnu.emacs.gnus} で尋ねるのが良いでしょ +う。私はあまり役に立ちません。 + +@cindex gnu.emacs.gnus +@cindex ding mailing list +また、ding メーリングリスト---@samp{ding@@gnus.org} に訊ねる事もでき +ます。購読するためには @samp{ding-request@@gnus.org} に書いて下さい。 + + +@page +@node A Programmers Guide to Gnus +@section Gnus のプログラマーズガイド + +私の願いは、他の誰かが gnus でできる何か賢いものを考え出し、その +上その賢いものを書いてくれるということです。これを容易にするため +には、gnus の内部動作を記述するのが良い方法だろうと私は思いまし +た。あと、そんなに内部じゃない動作をいくつかと、私が今やってるこ +とと。 + +プログラムの内部構造が変更されることはない、などと思ってはいけま +せんが、gnus とそのバックエンド間のインターフェース(これは完全に +記述されている)や、スコアファイルの形式(これも同様)、データ構造 +(これは他より変更されやすいものもある)、操作用の一般メソッド、な +どを(細部にわたって)定義していきます。 + +@menu +* Gnus Utility Functions:: 使用できる共通の関数と変数。 +* Backend Interface:: Gnus はどうやってサーバーと通信するのか。 +* Score File Syntax:: スコアファイル規格の BNF 定義。 +* Headers:: Gnus はヘッダーを内部的にどのように格納するか。 +* Ranges:: たくさんの数を格納する便利な形式。 +* Group Info:: グループ情報形式。 +* Extended Interactive:: 記号接頭辞など。 +* Emacs/XEmacs Code:: Gnus は全ての近代 Emacsen で動作する。 +* Various File Formats:: Gnus の使用するファイルの形式。 +@end menu + + +@node Gnus Utility Functions +@subsection Gnus の有用な関数 +@cindex Gnus utility functions +@cindex utility functions +@cindex functions +@cindex internal variables + +フックなどから実行される小さな関数を書くときは、gnus の内部関数 +や変数にアクセスすることは絶対必要です。以下が最もよく使われるも +のの一覧です。 + +@table @code + +@item gnus-newsgroup-name +@vindex gnus-newsgroup-name +この変数は現在のニュースグループの名前を保持しています。 + +@item gnus-find-method-for-group +@findex gnus-find-method-for-group +@var{group} の選択方法を返す関数です。 + +@item gnus-group-real-name +@findex gnus-group-real-name +正規の (接頭辞付きの) gnus グループ名を受け取り、接頭辞無しの名前 +を返します。 + +@item gnus-group-prefixed-name +@findex gnus-group-prefixed-name +接頭辞無しのグループ名と選択方法を受け取り、正規の (接頭辞付きの) +gnus グループ名を返します。 + +@item gnus-get-info +@findex gnus-get-info +@var{group} のグループ情報一覧を返します。 + +@item gnus-add-current-to-buffer-list +@findex gnus-add-current-to-buffer-list +Gnus 終了時に消去するバッファの一覧に現在のバッファを追加します。 + +@item gnus-continuum-version +@findex gnus-continuum-version +引数として gnus のバージョン文字列を受け取り、浮動小数点数を返し +ます。古いバージョンは必ず新しいバージョンよりも小さい数になりま +す。 + +@item gnus-group-read-only-p +@findex gnus-group-read-only-p +@var{group} が読み出し専用であるかどうかを示します。 + +@item gnus-news-group-p +@findex gnus-news-group-p +@var{group} がニュースバックエンドであるかどうかを示します。 + +@item gnus-ephemeral-group-p +@findex gnus-ephemeral-group-p +@var{group} が短期グループであるかどうかを示します。 + +@item gnus-server-to-method +@findex gnus-server-to-method +@var{server} に対応している選択方法を返します。 + +@item gnus-server-equal +@findex gnus-server-equal +二つの仮想サーバーが同一のものであるかどうかを示します。 + +@item gnus-group-native-p +@findex gnus-group-native-p +@var{group} が基本グループであるかどうかを示します。 + +@item gnus-group-secondary-p +@findex gnus-group-secondary-p +@var{group} が二次グループであるかどうかを示します。 + +@item gnus-group-foreign-p +@findex gnus-group-foreign-p +@var{group} が外部グループであるかどうかを示します。 + +@item group-group-find-parameter +@findex group-group-find-parameter +@var{group} のパラメータ一覧を返します。二つ目の引数を与えると、 +@var{group} 用のそのパラメータの値を返します。 + +@item gnus-group-set-parameter +@findex gnus-group-set-parameter +三つの引数 @var{group}、 @var{parameter}、@var{value} を取ります。 + +@item gnus-narrow-to-body +@findex gnus-narrow-to-body +現在のバッファの記事の本文を制限表示します。 + +@item gnus-check-backend-function +@findex gnus-check-backend-function +二つの引数 @var{function}、@var{group} を取ります。@var{group} +バックエンドが @var{function} をサポートしているなら、 +@code{nil} 以外を返します。 + +@lisp +(gnus-check-backend-function "request-scan" "nnml:misc") +=> t +@end lisp + +@item gnus-read-method +@findex gnus-read-method +利用者に選択方法をプロンプト入力してもらいます。 + +@end table + + +@node Backend Interface +@subsection バックエンドインターフェース + +Gnus は @sc{nntp} やスプール、メール、仮想グループについては何に +も知りません。ただ仮想サーバー @dfn{virtual servers} と対話する +方法を知っているだけです。仮想サーバーはバックエンド +@dfn{backend} といくつかのバックエンド変数 @dfn{backend +variables} からなります。前者の例としては @code{nntp}、 +@code{nnspool}、 @code{nnmbox} などがあります。後者の例としては +@code{nntp-port-number} や @code{nnmbox-directory} があります。 + +Gnus がバックエンド --- 例えば @code{nntp} --- に何かの情報を要 +求するときは、通常関数の引数として仮想サーバー名を含めます。 (も +しなければ、バックエンドは ``現在の'' 仮想サーバーを使用します。) +例えば、@code{nntp-request-list} はその唯一の (省略可能な) 引数 +として仮想サーバーを取ります。もしこの仮想サーバーが開かれていな +ければ、この関数は失敗します。 + +仮想サーバー名は、物理的なサーバー名とは何の関係も無いことに注意 +してください。この例を見てください。 + +@lisp +(nntp "odd-one" + (nntp-address "ifi.uio.no") + (nntp-port-number 4324)) +@end lisp + +ここで、物理サーバー名は @samp{ifi.uio.no} であるのに対し、仮想 +サーバー名は @samp{odd-one} です。 + +バックエンドは複数の仮想サーバーを切り替え可能でなければなりませ +ん。標準のバックエンドはこれを、仮想サーバー環境を必要なときに取 +り出し・押し込みを行なう連想リストを保持することによって実現して +います。 + +インターフェース関数は二つのグループがあります。必ず存在しなけれ +ばならない必須関数 @dfn{required functions} と、gnus が呼び出し +を行なう前にそれが存在するかを常に確認する任意関数 @dfn{optional +functions} です。 + +これらの関数は全て、返却データを @code{nntp-server-buffer} +(@samp{ *nntpd*}) バッファーに返すことが求められます。これはちょっ +と不運な名前付けですが、これで我慢しなければなりません。私が結果 +のデータ @dfn{resulting data} と言ったときは、そのバッファーの中 +のデータを指しています。返却値 @dfn{return value} と言ったときは、 +関数呼び出しによって返される関数の値のことを言っています。関数が +失敗したときは返却値として @code{nil} を返さなくてはいけません。 + +バックエンドにはサーバー形式 @dfn{server-forming} のバックエンド +であると呼ばれるものがあり、またそう呼ばれないものもあります。後 +者は一般には、同時には一つだけしか操作しないバックエンドで、``サー +バー'' の概念がありません。このサーバーとは、グループを持ち、そ +のグループに情報を配送するもので、それ以上のものではありません。 + +ここでの例と定義では、想像上のバックエンド @code{nnchoke} を引き +合いに出すことにします。 + +@cindex @code{nnchoke} + +@menu +* Required Backend Functions:: 実装しなければならない関数。 +* Optional Backend Functions:: 実装しなくてもよい関数。 +* Error Messaging:: メッセージやエラー報告を得る方法。 +* Writing New Backends:: 古いバックエンドの拡張。 +* Hooking New Backends Into Gnus:: Gnus 側でしなければならないこと。 +* Mail-like Backends:: メール風バックエンドのための助言 +@end menu + + +@node Required Backend Functions +@subsubsection 必須バックエンド関数 + +@table @code + +@item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD) + +@var{articles} は記事番号の範囲かあるいは @code{Message-ID} のリ +ストです。現在のバックエンドではどちらも完全にはサポートしていま +せん --- 連続した記事番号 (のリスト) だけで、多くのバックエンド +では @code{Message-ID} による取得はサポートしていません。でもど +ちらもサポートしていくべきでしょう。 + +結果のデータは HEAD か NOV 行のいずれかであり、返却値はこれを反 +映した @code{headers} か @code{nov} のいずれかでなくてはなりませ +ん。これは今後、HEAD と NOV 行が混在する @code{various} に拡張さ +れるかもしれませんが、現在の gnus ではサポートされていません。 + +@var{fetch-old} が @code{nil} 以外であれば、ある意味での「余分な +ヘッダー」を取得しようとします。これは通常、@code{articles} の中 +の最小番号の記事よりも小さい記事から (少なくとも) +@var{fetch-old} 個の余分なヘッダーを取得し、空所を埋めることを行 +ないます。もしバックエンドがこの要求に従うことを煩わしいと思った +場合には、このパラメータの存在は無視されることもあります。この値 +が @code{nil} でも数字でもなければ、最大限の取得を行ないます。 + +これが HEAD の例です。 + +@example +221 1056 Article retrieved. +Path: ifi.uio.no!sturles +From: sturles@@ifi.uio.no (Sturle Sunde) +Newsgroups: ifi.discussion +Subject: Re: Something very droll +Date: 27 Oct 1994 14:02:57 +0100 +Organization: Dept. of Informatics, University of Oslo, Norway +Lines: 26 +Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no> +References: <38jdmq$4qu@@visbur.ifi.uio.no> +NNTP-Posting-Host: holmenkollen.ifi.uio.no +. +@end example + +つまり、返却値が @code{headers} であるときは、データバッファにこ +れらヘッダーがいくつかあるということを意味します。 + +これがそのバッファーの BNF 定義です。 + +@example +headers = *head +head = error / valid-head +error-message = [ "4" / "5" ] 2number " " eol +valid-head = valid-message *header "." eol +valid-message = "221 " " Article retrieved." eol +header = eol +@end example + +もし返却値が @code{nov} であれば、データバッファーには +@dfn{network overview database} 行が含まれてなくてはなりません。 +これは基本的には複数の欄をタブで区切ったものです。 + +@example +nov-buffer = *nov-line +nov-line = 8*9 [ field ] eol +field = +@end example + +これらの欄にどのようなものが含まれるかをより詳しく見たければ、 +@pxref{Headers} を参照してください。 + + +@item (nnchoke-open-server SERVER &optional DEFINITIONS) + +ここでの @var{server} は仮想サーバー名です。@var{definitions} は +この仮想サーバーを定義する @code{(VARIABLE VALUE)} 組のリストで +す。 + +もしサーバーを開くことができなければ、エラーはシグナルでは通知さ +れません。そしてバックエンドは、それ以後のこのサーバーへの接続要 +求を拒否することもできます。実際、そうすべきです。 + +もしそのサーバーがすでに開いていれば、この関数は @code{nil} 以外 +の値を返却しなければなりません。このとき、返される結果のデータは +ありません。 + + +@item (nnchoke-close-server &optional SERVER) + +@var{server} への接続を閉じ、これに関連するすべての資源を開放し +ます。もし何らかの理由でサーバーを閉じることができなければ、 +@code{nil} を返却します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-close) + +全てのサーバーの接続を閉じ、バックエンドが保有している全ての資源 +を開放します。このバックエンドによって作成されたバッファは全て削 +除されます。(@code{nntp-server-buffer} は削除されませんが。) こ +の関数は通常、gnus が終了するときにのみ呼び出されます。 + +返される結果のデータはありません。 + + +@item (nnchoke-server-opened &optional SERVER) + +もし @var{server} が現在の仮想サーバーで、その物理サーバーへの接 +続が生きていれば、この関数は @code{nil} 以外の値を返します。この +関数はどんな場合でも、接続が失われたサーバーへの再接続を行なうこ +とはありません。 + +返される結果のデータはありません。 + + +@item (nnchoke-status-message &optional SERVER) + +この関数は @var{server} からの最後のエラーメッセージを返却します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER) + +この関数の結果のデータは、@var{article} で指定された記事です。こ +の指定は @code{Message-ID} か番号のいずれかです。 +@code{Message-ID} による記事の取得を実装するかどうかは任意ですが、 +可能であると嬉しいですね。 + +@var{to-buffer} が @code{nil} 以外であれば、結果のデータは通常の +データバッファの代わりに、このバッファに返されます。これにより多 +量のデータをあるバッファから別のバッファにコピーすることを避ける +ことができ、そして gnus は通常、記事バッファに直接記事を挿入する +ように要求しています。 + +もし可能であるのなら、この関数は、@code{car}が取得した記事のある +グループ名で、@code{cdr} が記事番号である cons セルを返すべきで +す。これにより @code{Message-ID} によって記事を取得したとき、 +gnus が本当のグループと記事番号を知ることができるようになるでしょ +う。これが不可能な場合には、記事の取得が成功したときは @code{t} +を返します。 + + +@item (nnchoke-request-group GROUP &optional SERVER FAST) + +@var{group} のデータを取得します。この関数は、@var{group} を現在 +のグループにする、という副作用もあります。 + +@var{FAST} があれば、便利なデータを返す面倒を行なわずに、単に +@var{group} を現在のグループにします。 + +これが結果のデータの例と、それの定義です。 + +@example +211 56 1000 1059 ifi.discussion +@end example + +最初の数字は状態で、これは 211 でなくてはなりません。次はそのグ +ループにある記事の総数、最小の記事番号、最大の記事番号、そして最 +後がグループ名です。記事の総数は、最大・最小記事番号から単純に考 +えられる数よりも小さいことがあることに注意してください。いくつか +の記事は取り消されているかもしれません。Gnus は総数は単に捨てて +しまっているので、(もしそれが問題となるときに) 正しい値を生成す +る面倒を負うべきかどうかは、読者への課題として残してあります。 + +@example +group-status = [ error / info ] eol +error = [ "4" / "5" ] 2 " " +info = "211 " 3* [ " " ] +@end example + + +@item (nnchoke-close-group GROUP &optional SERVER) + +@var{group} を閉じ、それに接続されている全ての資源を開放します。 +これはほとんどのバックエンドでは何もすることがないでしょう。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-list &optional SERVER) + +@var{server} 上で利用可能な全てのグループの一覧を返します。これ +は @emph{全部} という意味です。 + +これが、たった二つしかグループを持っていないサーバーからの例です。 + +@example +ifi.test 0000002200 0000002000 y +ifi.discussion 3324 3300 n +@end example + +各行にはグループ名があり、そしてそのグループ内の最大の記事番号、 +最小の記事番号、そして最後にフラグです。 + +@example +active-file = *active-line +active-line = name " " " " " " flags eol +name = +flags = "n" / "y" / "m" / "x" / "j" / "=" name +@end example + +フラグは、そのグループが読み出し専用 (@samp{n}) であるか、司会者 +付き (@samp{m}) であるか、死んでいる (@samp{x}) か、どこか他のグ +ループの別名 (@samp{=other-group}) であるか、上記のどれでもない +(@samp{y}) か、ということを示しています。 + + +@item (nnchoke-request-post &optional SERVER) + +この関数は、現在のバッファを投稿します。これは投稿が成功したかど +うかを返却しても構いませんが、必須ではありません。例えば、投稿が +非同期に行われるのであれば、この関数が終了した時点では投稿は普通 +完了していません。その場合この関数は、投稿を完了させることができ +ないとき、それをはっきりと利用者に知らせる見張り関数のようなもの +を設定するべきでしょう。 + +この関数から返される結果のデータはありません。 + +@end table + + +@node Optional Backend Functions +@subsubsection 任意バックエンド関数 + +@table @code + +@item (nnchoke-retrieve-groups GROUPS &optional SERVER) + +@var{groups} はグループのリストであり、この関数はそれら全部のグ +ループのデータを要求します。どうやってそれを行なうかは gnus の知っ +たことではありませんが、これはできるだけ迅速な方法で行なわなけれ +ばなりません。 + +この関数の返却値は @code{active} か @code{group} のいずれかで、 +結果のデータの形式が何であるかを示します。前者は +@code{nnchoke-request-list} によるデータと同じ形式であり、一方後 +者は @code{nnchoke-request-group} が与えるものと同じ形式の行でバッ +ファは埋められます。 + +@example +group-buffer = *active-line / *group-status +@end example + + +@item (nnchoke-request-update-info GROUP INFO &optional SERVER) + +Gnus グループ情報 (@pxref{Group Info}) が変更箇所としてバックエ +ンドに渡されます。これはバックエンドが (仮想グループや imap グルー +プの場合のように) 本当に全ての情報を持っている場合に便利になりま +す。この関数は、その要求に適合させる情報を破壊的に置き換え、その +(置き換えられた) グループ情報を返します。 + +この関数から返される結果のデータはありません。 + + +@item (nnchoke-request-type GROUP &optional ARTICLE) + +利用者が ``ニュースを送信する'' 命令 (例えば、概略バッファで +@kbd{F}) を実行したとき、gnus は利用者がフォローアップしようとし +ている記事がニュースであるかメールであるかを知らなくてはなりませ +ん。この関数は @var{group} の中の @var{article} がニュースであれ +ば @code{news} を、メールであれば @code{mail} を、その種別を決定 +できなければ @code{unknown} を返却します。(@var{article} 引数は、 +メールグループとニュースグループがごちゃまぜになってるかもしれな +い @code{nnvirtual} において必要です。) @var{group} と +@var{article} は両方とも @code{nil} であるかもしれません。 + +この関数から返される結果のデータはありません。 + + +@item (nnchoke-request-update-mark GROUP ARTICLE MARK) + +もし利用者が、このバックエンドの気に入らない印を設定しようとした +ら、この関数が印を変更することができます。Gnus はもとの +@var{mark} の代わりに、この関数が返したものを @var{article} への +印として使います。バックエンドが気にすることが特になければ、元の +@var{mark} を返さなければなりません。@code{nil} やその他のゴミを +返してはいけません。 + +私が知っているこれのこれの利用法は、@code{nnvirtual} が行なって +いることだけです --- もし構成グループが自動期限切れ消去可能であ +れば、この仮想グループで既読の印を付けると、結果としてその記事に +期限切れ消去の印が付けられます。 + +この関数から返される結果のデータはありません。 + + +@item (nnchoke-request-scan &optional GROUP SERVER) + +この関数は、バックエンドが到着記事を確認する要求を行なうときにい +つでも (gnus かそれ以外によって) 、あれやこれやと呼び出されるこ +とがあります。メールバックエンドはこの関数が起動されたとき、典型 +的にはスプールファイルを読むか POP サーバーに問い合わせにいきま +す。@var{group} は特に気に留める必要はありません --- もしバック +エンドが、一つだけのグループを走査するのは大変すぎると判断した場 +合には、全グループの全走査を行なっても構いません。ですが、実用的 +にできればそれを局所的に閉じておく方が良いでしょう。 + +この関数に返される結果のデータはありません。 + + +@item (nnchoke-request-group-description GROUP &optional SERVER) + +この関数によって返される結果のデータは、@var{group} の説明です。 + +@example +description-line = name description eol +name = +description = +@end example + +@item (nnchoke-request-list-newsgroups &optional SERVER) + +この関数によって返される結果のデータは、サーバー上で利用できるグ +ループ全ての説明です。 + +@example +description-buffer = *description-line +@end example + + +@item (nnchoke-request-newgroups DATE &optional SERVER) + +この関数から返される結果のデータは、@samp{date} 以降に作成された +全てのグループです。@samp{date} は通常の人間が読める日付の形式で +す。データは active バッファの形式でなければなりません。 + + +@item (nnchoke-request-create-group GROUP &optional SERVER) + +この関数は、@var{group} という名前の空のグループを作成します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE) + +この関数は、@var{articles} の範囲の全ての記事に対して期限切れ消 +去処理を行ないます。 (@var{articles} は現在は記事番号の単純なリ +ストです。) この関数で消去される前の、記事がどれだけ古い記事であ +るかの決定はバックエンドに任されています。@var{force} が +@code{nil} 以外であれば、それがどんなに新しいものであっても、全 +ての @var{articles} が消去されます。 + +この関数は削除しなかった、あるいは削除することができなかった記事 +のリストを返します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM +&optional LAST) + +この関数は @var{article} (番号) を、 @var{group} から +@var{accept-form} を呼び出して移動します。 + +この関数は、問題の記事を移動させるための準備として、記事に付加さ +れたヘッダー行を全て削除し、一般に記事を「きれいさっぱり」にしま +す。そして ``きれいな'' 記事のあるバッファーで @var{accept-form} +を @code{eval} します。これは本当に複製を行ないます。もし +@code{eval} が @code{nil} 以外の値を返したら、その記事は削除され +ません。 + +@var{last} が @code{nil} であれば、この直後にさらに要求が発行さ +れる見込みが高い、という意味になり、これによって最適化がいくらか +できるようになります。 + +この関数は、グループ名が @code{car} で、その記事の移動先の記事番 +号が @code{cdr} である cons セルを返します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-accept-article GROUP &optional SERVER LAST) + +この関数は、現在のバッファを取り、それを @var{group} の中に挿入 +します。@var{last} が @code{nil} であれば、この関数へのさらなる +呼び出しが直ちに行われるという意味です。 + +この関数はグループ名が @code{car} で、その記事の移動先の記事番号 +が @code{cdr} である cons セルを返します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-replace-article ARTICLE GROUP BUFFER) + +この関数は @var{article} (番号) を @var{group} から削除し、代わ +りに @var{buffer} をそこに挿入します。 + +返される結果のデータはありません。 + + +@item (nnchoke-request-delete-group GROUP FORCE &optional SERVER) + +この関数は @var{group} を消去します。 もし @var{force} があれば、 +そのグループ内の全ての記事を本当に消去し、そしてそのグループ自身 +を消去します。 (もし ``グループ自身'' というものがあれば。) + +返される結果のデータはありません。 + + +@item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER) + +この関数は @var{group} から @var{new-name} に名前を変更します。 +@var{group} 内にある記事は全て @var{new-name} に移動します。 + +返される結果のデータはありません。 + +@end table + + +@node Error Messaging +@subsubsection エラーメッセージ表示 + +@findex nnheader-report +@findex nnheader-get-report +バックエンドはエラー状況を報告するのに @code{nnheader-report} を +使わなくてはなりません --- 要求を実行できないときにエラーを生起 +させてはいけません。この関数の最初の引数はバックエンド名のシンボ +ルで、残りは、複数の引数があれば @code{format} への引数として解 +釈され、一つであればただの文字列になります。この関数は常に +@code{nil} を返さなくてはなりません。 + +@lisp +(nnheader-report 'nnchoke "You did something totally bogus") + +(nnheader-report 'nnchoke "Could not request group %s" group) +@end lisp + +一方 gnus は、サーバーから @code{nil} を返されたときに +@code{nnheader-get-report} を呼び出し、そしてこの関数が問題のバッ +クエンドに対して最後に報告されたメッセージを返します。この関数は +一つの引数 --- サーバーのシンボルを取ります。 + +内部的には、これらの関数は @var{backend}@code{-status-string} に +アクセスます、つまり @code{nnchoke} バックエンドはそのエラーメッ +セージを @code{nnchoke-status-string} に格納します。 + + +@node Writing New Backends +@subsubsection 新しいバックエンドを書く + +多くのバックエンドはとても類似しています。@code{nnml} は +@code{nnspool} にとても似ていますが、サーバー上の記事を編集する +ことができます。@code{nnmh} は @code{nnml} にとても似ていますが、 +これはアクティブファイルを使わず、概要データベースも保持しません。 +@code{nndir} は @code{nnml} にとても似ていますが、これには ``グ +ループ'' の概念はなく、記事の修正はできません。 + +新しいバックエンドを書くときに他のバックエンドから関数を ``継承'' +することが可能であってほしい、と思うのは理に適っています。そして +まさに、あなたがそうしたければ、それができるのです。(あなたがそ +うしたくなければしなくても良いですよ、もちろん。) + +全てのバックエンドは公開変数と公開関数を、 @code{nnoo} と呼ばれ +るパッケージを使って宣言します。 + +他のバックエンドから関数を継承するには (そして現在のバックエンド +から他のバックエンドに関数を継承できるようにするには) 、以下のマ +クロを使用しなければなりません。 + +@table @code + +@item nnoo-declare +このマクロは、最初の引数を、その後に続く引数の子供であることを宣 +言します。例えば、 + +@lisp +(nnoo-declare nndir + nnml nnmh) +@end lisp + +これで @code{nndir}は、@code{nnml} と @code{nnmh} の両方から関数 +を継承しようとしていることを宣言します。 + +@item defvoo +このマクロは @code{defvar} と同義ですが、その変数を公開サーバー +変数として登録します。ほとんどの状態指向型の変数は @code{defvar} +ではなく @code{defvoo} によって宣言するべきです。 + +通常の @code{defvar} 引数に加えて、このマクロは親バックエンドの +変数のリストを取り、この関数がそのバックエンド内で実行されるとき +に変数を置き換えます。 + +@lisp +(defvoo nndir-directory nil + "Where nndir will look for groups." + nnml-current-directory nnmh-current-directory) +@end lisp + +これは @code{nndir} のために @code{nnml} の関数が呼び出されたと +きに、@code{nnml-current-directory} は @code{nndir-directory} に +設定されるという意味です。(@code{nnmh} も同様です。) + +@item nnoo-define-basics +このマクロは、ほとんど全部のバックエンドが持つべき共通関数をいく +つか定義します。 + +@example +(nnoo-define-basics nndir) +@end example + +@item deffoo +このマクロはまさに @code{defun} のようなもので、同一の引数を取り +ます。通常の @code{defun} 処理に加えて、このマクロはその関数を公 +開しているものとして登録し、他のバックエンドがそれを継承できるよ +うにします。 + +@item nnoo-map-functions +このマクロは現在のバックエンドの関数から親バックエンドの関数への +置き換えを行なえるようにします。 + +@example +(nnoo-map-functions nndir + (nnml-retrieve-headers 0 nndir-current-group 0 0) + (nnmh-request-article 0 nndir-current-group 0 0)) +@end example + +これは @code{nndir-retrieve-headers} が呼び出されたとき、一番目、 +三番目、四番目の引数が @code{nnml-retrieve-headers} に渡され、一 +方、二番目の引数は @code{nndir-current-group} の値として設定され +る、という意味です。 + +@item nnoo-import +このマクロは他のバックエンドから関数を取り込みます。これは単にま +だ定義されていない関数を定義するだけなので、ソースファイルの最後 +の処理として書かなければなりません。 + +@example +(nnoo-import nndir + (nnmh + nnmh-request-list + nnmh-request-newgroups) + (nnml)) +@end example + +これは、 @code{nndir-request-list} への呼び出しは単に +@code{nnmh-request-list} に引き渡され、一方、@code{nnml} の公開 +関数でまだ @code{nndir} で定義されていないものをここで定義します。 + +@end table + +以下は @code{nndir} バックエンドのちょっと短縮した版です。 + +@lisp +;;; nndir.el --- single directory newsgroup access for Gnus +;; Copyright (C) 1995,96 Free Software Foundation, Inc. + +;;; Code: + +(require 'nnheader) +(require 'nnmh) +(require 'nnml) +(require 'nnoo) +(eval-when-compile (require 'cl)) + +(nnoo-declare nndir + nnml nnmh) + +(defvoo nndir-directory nil + "Where nndir will look for groups." + nnml-current-directory nnmh-current-directory) + +(defvoo nndir-nov-is-evil nil + "*Non-nil means that nndir will never retrieve NOV headers." + nnml-nov-is-evil) + +(defvoo nndir-current-group "" nil nnml-current-group nnmh-current-group) +(defvoo nndir-top-directory nil nil nnml-directory nnmh-directory) +(defvoo nndir-get-new-mail nil nil nnml-get-new-mail nnmh-get-new-mail) + +(defvoo nndir-status-string "" nil nnmh-status-string) +(defconst nndir-version "nndir 1.0") + +;;; Interface functions. + +(nnoo-define-basics nndir) + +(deffoo nndir-open-server (server &optional defs) + (setq nndir-directory + (or (cadr (assq 'nndir-directory defs)) + server)) + (unless (assq 'nndir-directory defs) + (push `(nndir-directory ,server) defs)) + (push `(nndir-current-group + ,(file-name-nondirectory (directory-file-name nndir-directory))) + defs) + (push `(nndir-top-directory + ,(file-name-directory (directory-file-name nndir-directory))) + defs) + (nnoo-change-server 'nndir server defs)) + +(nnoo-map-functions nndir + (nnml-retrieve-headers 0 nndir-current-group 0 0) + (nnmh-request-article 0 nndir-current-group 0 0) + (nnmh-request-group nndir-current-group 0 0) + (nnmh-close-group nndir-current-group 0)) + +(nnoo-import nndir + (nnmh + nnmh-status-message + nnmh-request-list + nnmh-request-newgroups)) + +(provide 'nndir) +@end lisp + + +@node Hooking New Backends Into Gnus +@subsubsection 新しいバックエンドを gnus に繋げる + +@vindex gnus-valid-select-methods +あなたの新しいバックエンドを gnus で使いはじめるのはとても簡単で +す --- 単に @code{gnus-declare-backend} 関数で宣言するだけです。 +これはバックエンドを @code{gnus-valid-select-methods} 変数に追加 +します。 + +@code{gnus-declare-backend} は二つの引数を取ります --- バックエ +ンドの名前と適当な数の能力 @dfn{abilities} です。 + +これが例です。 + +@lisp +(gnus-declare-backend "nnchoke" 'mail 'respool 'address) +@end lisp + +能力には以下のものがあります。 + +@table @code +@item mail +これはメール風バックエンドです --- フォローアップは (たいていは) +メールで送られます。 +@item post +これはニュース風バックエンドです --- フォローアップは (たいてい +は) ニュースで送られます。 +@item post-mail +このバックエンドはメールとニュースの両方をサポートします。 +@item none +これはニュースでもメールでもないバックエンドです --- 全く違った +何かです。 +@item respool +これは再スプールをサポートします --- というよりは、その元の記事 +とグループを修正することができます。 +@item address +仮想サーバー名の中にサーバーの名前が含まるということです。これは +ほとんど全部のバックエンドで必要になります。 +@item prompt-address +グループバッファで @kbd{B} などでこの命令を実行したとき、ユーザ +はアドレスのプロンプト入力を求められます。これは例えば、 +@code{nntp} のようなバックエンドでは必要で、@code{nnmbox} では必 +要ではありません。 +@end table + + +@node Mail-like Backends +@subsubsection メール風バックエンド + +メールバックエンドがその他のバックエンドに対して一線を画している +点は、メールバックエンドは @file{nnmail.el} の中の共通関数に強く +依存しているという点です。例えば、@code{nnml-request-scan} の定 +義はこのようになります。 + +@lisp +(deffoo nnml-request-scan (&optional group server) + (setq nnml-article-file-alist nil) + (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group)) +@end lisp + +単に @code{nnmail-get-new-mail} にいくつか引数を与えて呼び出すだ +けで、@code{nnmail} がメールの移動や分離を全ての面倒を見てくれま +す。 + +この関数は四つの引数を取ります。 + +@table @var +@item method +これは、この呼び出しをどのバックエンドが責任を負うかを指示するシ +ンボルです。 + +@item exit-function +この関数は分離が実行された後に呼び出されます。 + +@item temp-directory +一時ファイルを格納する場所です。 + +@item group +この省略可能な引数は、分離が一つのグループに対してのみ実行される +べきであるときのグループ名です。 +@end table + +@code{nnmail-get-new-mail} は各記事を保存するために +@var{backend}@code{-save-mail} を呼び出します。 +@var{backend}@code{-active-number} はこの記事に割り当てられた記 +事番号を調べるために呼び出されます。 + +この関数は次の変数も使用します。 +@var{backend}@code{-get-new-mail} (このバックエンドの新着メール +を調べるかどうか) と、新しいアクティブファイルを生成するための +@var{backend}@code{-group-alist} と +@var{backend}@code{-active-file} です。 +@var{backend}@code{-group-alist} グループのアクティブ連想リスト +で、以下のようなものです。 + +@example +(("a-group" (1 . 10)) + ("some-group" (34 . 39))) +@end example + + +@node Score File Syntax +@subsection スコアファイルの構文 + +スコアファイルは簡単に分析可能で、しかし非常に柔軟なように意図されていま +す。それには Emacs Lisp のリストと同じ読み込み構文な様なものがその指定に +合うだろうという事が決定されました。 + +これは良くあるスコアファイルです: + +@lisp +(("summary" + ("win95" -10000 nil s) + ("Gnus")) + ("from" + ("Lars" -1000)) + (mark -100)) +@end lisp + +スコアファイルの BNF 定義です。 + +@example +score-file = "" / "(" *element ")" +element = rule / atom +rule = string-rule / number-rule / date-rule +string-rule = "(" quote string-header quote space *string-match ")" +number-rule = "(" quote number-header quote space *number-match ")" +date-rule = "(" quote date-header quote space *date-match ")" +quote = +string-header = "subject" / "from" / "references" / "message-id" / + "xref" / "body" / "head" / "all" / "followup" +number-header = "lines" / "chars" +date-header = "date" +string-match = "(" quote quote [ "" / [ space score [ "" / + space date [ "" / [ space string-match-t ] ] ] ] ] ")" +score = "nil" / +date = "nil" / +string-match-t = "nil" / "s" / "substring" / "S" / "Substring" / + "r" / "regex" / "R" / "Regex" / + "e" / "exact" / "E" / "Exact" / + "f" / "fuzzy" / "F" / "Fuzzy" +number-match = "(" [ "" / [ space score [ "" / + space date [ "" / [ space number-match-t ] ] ] ] ] ")" +number-match-t = "nil" / "=" / "<" / ">" / ">=" / "<=" +date-match = "(" quote quote [ "" / [ space score [ "" / + space date [ "" / [ space date-match-t ] ] ] ] ")" +date-match-t = "nil" / "at" / "before" / "after" +atom = "(" [ required-atom / optional-atom ] ")" +required-atom = mark / expunge / mark-and-expunge / files / + exclude-files / read-only / touched +optional-atom = adapt / local / eval +mark = "mark" space nil-or-number +nil-or-number = "nil" / +expunge = "expunge" space nil-or-number +mark-and-expunge = "mark-and-expunge" space nil-or-number +files = "files" *[ space ] +exclude-files = "exclude-files" *[ space ] +read-only = "read-only" [ space "nil" / space "t" ] +adapt = "adapt" [ space "ignore" / space "t" / space adapt-rule ] +adapt-rule = "(" *[ *[ "(" ")" ] ")" +local = "local" *[ space "(" space
")" ] +eval = "eval" space +space = *[ " " / / ] +@end example + +スコアファイルの認識不可能な要素は無視されるべきですが、捨てられるわけで +はありません。 + +ご覧の通り、空白が必要ですが、空白の量と型は無関係です。これはスコアファ +イルの様式はプログラマーに任されているという事です---全てを一つの長ーー +い行に吐き出すのが簡単であれば、それは構いません。 + +いろいろなアトムの意味はこのマニュアルのどこかで説明されています +(@pxref{Score File Format})。 + + +@node Headers +@subsection ヘッダー + +内部的には gnus は不思議な流儀で、@sc{nov} 様式に対応する記事のヘッダー +を溜めておく様式を使います。ある人は、作者が @sc{nov} の仕様を見て恥じる +事無く全てを @emph{盗んだ} と思うかもしれませんが、その人は正しいです。 + +@dfn{ヘッダー} は非常に負担のかけられすぎた語です。 ``ヘッダー'' は +RFC1036 では記事の頭の行の事 (例えば、@code{From}) を話すのに用いられて +います。それは多くの人から ``ヘッド''---``ヘッダーと本体'' の同義語とし +て使われています。 (これは、私の意見では避けられるべきです。) そして、 +gnus は内部では ``ヘッダー'' と呼ぶ様式を使っており、私はここでそれにつ +いて説明します。これは9つの要素からなるベクトルで、基本的に、それぞれの +ヘッダー (あ痛) が一つの空き場所を占めています。 + +これらの空き場所は、順番に: @code{number}、@code{subject}、@code{from}、 +@code{date}、@code{id}、@code{chars}、@code{lines}、@code{xref} です。こ +れらの空き場所に触って設定するマクロがあります---それらは全て、それぞれ +@code{mail-header-} と @code{mail-header-set-} いう予想される名前を持っ +ています。 + +場所 @code{xref} は本当は @code{misc} の場所です。いろんな追加の情報はそ +こに入れられます。 + + +@node Ranges +@subsection 範囲 + +@sc{gnus} は私には非常に役に立つと思われる概念を導入しましたので、私はそ +れをたくさん使い、かなり念入りに作り上げてきました。 + +質問は単純です: もしあなたが大量の数字により同一性を保証される もの +(object) (@emph{乱暴な} 例を上げると、記事がそうです) を ``含まれている'' +として見なしたいときは、普通の連続的行為はあまり役に立ちません。 (長さ +200,000 の連続物は少し息が長すぎます。) + +これの解決策は質問と同じくらい単純です。単にその連続物を壊せば良いだけで +す。 + +@example +(1 2 3 4 5 6 10 11 12) +@end example + +は次のものに変形されます。 + +@example +((1 . 6) (10. 12)) +@end example + +あの嫌な @samp{(13. 13)} のような要素を避けるために、それのみの もの +(object) を示すために @samp{13} は有効な要素になっています。 + +@example +((1 . 6) 7 (10 . 12)) +@end example + +これは2つの範囲を比較してそれが等価 (equal) であるかを調べる事は少し手の +こんだことになります: + +@example +((1 . 5) 7 8 (10 . 12)) +@end example + +と + +@example +((1 . 5) (7. 8) (10 . 12)) +@end example + +は等価です。実際のところ、下降しないリストは範囲です: + +@example +(1 2 3 4 5) +@end example + +は完全に有効な範囲です。とても息の長いものですが。これも有効です: + +@example +(1 . 5) +@end example + +そして、これは前の範囲と等価です。 + +これは範囲の BNF 定義です。もちろん、数字の意味上の要求は下降していない +という事は覚えておく必要があります。 (任意の回数の同じ数字の繰り返しは許 +されていますが、範囲の扱いからは消え去る傾向があります。) + +@example +range = simple-range / normal-range +simple-range = "(" number " . " number ")" +normal-range = "(" start-contents ")" +contents = "" / simple-range *[ " " contents ] / + number *[ " " contents ] +@end example + +Gnus は現在のところ既読記事と記事の印の情報を付けておくために範囲を使っ +ています。私は 次の権力者 が私にさせてくれるのであれば、C で数の範囲の実 +装を計画しています。 (私はまだその人に尋ねていません。と言うのは、私はそ +れを普通の連続物に変換し直さないで世の中を完全に範囲に基づいたものにする +ためにもう少し考える必要があるからです。) + + +@node Group Info +@subsection グループ情報 + +Gnus はグループの全ての永続情報を @dfn{group info} リストに保存します。 +このリストの長さは3から6 (もしくはもっと) の要素で徹底的にグループを記述 +します。 + +ここにあるのはグループ情報 (group info) の2つの例です。1つは非常に単純な +グループで、2つめはもっと複雑なものです: + +@example +("no.group" 5 (1 . 54324)) + +("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55)) + ((tick (15 . 19)) (replied 3 6 (19 . 3))) + (nnml "") + ((auto-expire . t) (to-address . "ding@@gnus.org"))) +@end example + +最初の要素は @dfn{グループ名} です---どのようにしろ、gnus がそれによって +グループを知っているものです。2番目の要素は @dfn{購読度} で、普通は小さ +な整数です。(それは @dfn{階級} になる事もできます。それは、コンスセルで、 +@code{car} がレベルで、@code{cdr} がスコアです。) 3番目の要素は既読記事 +の範囲のリストです。4番目の要素はいろいろな種類の記事の印のリストのリス +トです。5番目の要素は選択方法です (もしくは、こちらの方が良いのであれば +事実上のサーバーです)。6番目の要素は @dfn{グループパラメータ} のリストで、 +この部分はそのためにあります。 + +最後の3つの要素はどれでも、必要が無ければ存在しない事もあります。実際、 +グループの非常に大部分は最初の3つの要素だけを持ち、それはたくさんのコン +スセルを節約する事ができます。 + +これはグループ情報様式の BNF 定義です: + +@example +info = "(" group space ralevel space read + [ "" / [ space marks-list [ "" / [ space method [ "" / + space parameters ] ] ] ] ] ")" +group = quote quote +ralevel = rank / level +level = +rank = "(" level "." score ")" +score = +read = range +marks-lists = nil / "(" *marks ")" +marks = "(" range ")" +method = "(" *elisp-forms ")" +parameters = "(" *elisp-forms ")" +@end example + +実のところ法則 @samp{marks} は嘘です。@samp{marks} は @samp{} が +@samp{range} の上に校正されているものですが、疑似 BNF でそれを現すのは不 +愉快なものです。 + +もし gnus 情報を持っていて、要素を調べたいのときは、gnus はそれらの要素 +を取得/設定 (get/set) するための一連のマクロを提供しています。 + +@table @code +@item gnus-info-group +@itemx gnus-info-set-group +@findex gnus-info-group +@findex gnus-info-set-group +グループ名を取得/設定 (get/set) します。 + +@item gnus-info-rank +@itemx gnus-info-set-rank +@findex gnus-info-rank +@findex gnus-info-set-rank +グループの階級 (rank) を取得/設定します (@pxref{Group Score})。 + +@item gnus-info-level +@itemx gnus-info-set-level +@findex gnus-info-level +@findex gnus-info-set-level +グループのレベルを取得/設定します。 + +@item gnus-info-score +@itemx gnus-info-set-score +@findex gnus-info-score +@findex gnus-info-set-score +グループスコアを取得/設定します (@pxref{Group Score})。 + +@item gnus-info-read +@itemx gnus-info-set-read +@findex gnus-info-read +@findex gnus-info-set-read +既読記事の範囲を取得/設定します。 + +@item gnus-info-marks +@itemx gnus-info-set-marks +@findex gnus-info-marks +@findex gnus-info-set-marks +印しつき記事の範囲のリストを取得/設定します。 + +@item gnus-info-method +@itemx gnus-info-set-method +@findex gnus-info-method +@findex gnus-info-set-method +グループ選択方法を取得/設定します。 + +@item gnus-info-params +@itemx gnus-info-set-params +@findex gnus-info-params +@findex gnus-info-set-params +グループパラメータを取得/設定します。 +@end table + +全ての取得関数は1つの引数を取ります---情報のリストです。設定関数は2つの +引数を取ります---情報リストと新しい値です。 + +グループ情報の最後の3つの要素は強制的なものではありませんので、要素を設 +定する前にグループ情報を拡張する必要があるかも知れません。もしこれが必要 +な場合は、これが自動的に起こるために @code{nil} でない3番目の引数を3つの +最終設定関数に与えるだけです。 + + +@node Extended Interactive +@subsection 拡張対話 +@cindex interactive +@findex gnus-interactive + +Gnus は Emacs の標準の @code{interactive} 指定をシンボル接頭辞を簡単に使 +えるために少し拡張しています (@pxref{Symbolic Prefixes})。これはその使い +方の例です: + +@lisp +(defun gnus-summary-increase-score (&optional score symp) + (interactive (gnus-interactive "P\ny")) + ... + ) +@end lisp + +最上の方法は @code{gnus-interactive} を式 @code{interactive} を返すマク +ロとして実装する事でしょうが、これは Emacs は関数が対話的であるかどうか +をラムダ式に対して単純に @code{assq} を行う事により調べる事から不可能で +す。 + +この関数は (ほとんど) 全ての @code{interactive} 指定を受付けますが、もう +少し加えます。 + +@table @samp +@item y +@vindex gnus-current-prefix-symbol +現在の接頭引数シンボル---変数 @code{gnus-current-prefix-symbol} です。 + +@item Y +@vindex gnus-current-prefix-symbols +現在の接頭引数シンボルのリストです---変数 +@code{gnus-current-prefix-symbol} です。 + +@item A +現在の記事番号です---関数 @code{gnus-summary-article-number} です。 + +@item H +現在の記事ヘッダーです---関数 @code{gnus-summary-article-header} です。 + +@item g +現在のグループ名です---関数 @code{gnus-group-group-name} です。 +@end table + + +@node Emacs/XEmacs Code +@subsection Emacs/XEmacs コード +@cindex XEmacs +@cindex Emacsen + +Gnus は Emacs、XEmacs と Mule で動作しますので、そのうちの一つを主環境と +する事に決めました。私は Emacs を選びました。私が XEmacs や Mule を好き +ではないと言う事ではなく、それがアルファベットで最初に来たからです。 + +これは gnus は Emacs で全く警告なくバイトコンパイルできるのに対して、 +XEmacs はバイトコンパイルをしている間にギガバイトくらいの警告を出すと言 +う事です。私は些細な失敗を見つけ出すことを助けるためにバイトコンパイルの +警告を使っていますので、それは非常に役に立ちます。 + +私は継続的に Emacs の関数の界面 (interface) を使ってきましたが、関数には +gnus の別名関数 (alias) を使ってきました。例を出しましょう: Emacs は関数 +@code{run-at-time} を定義していますが、XEmacs は関数 @code{start-itimer} +を定義しています。そこで私は @code{gnus-run-at-time} と呼ばれる関数を定 +義し、それは Emacs の @code{run-at-time} と同じ引数を取ります。Gnus を +Emacs で実行しているときは、前の関数は単に後のものの別名関数 (alias) に +なっています。しかし、XEmacs で実行したときは、前者は次の関数の別名関数 +(alias) となっています: + +@lisp +(defun gnus-xmas-run-at-time (time repeat function &rest args) + (start-itimer + "gnus-run-at-time" + `(lambda () + (,function ,@@args)) + time repeat)) +@end lisp + +この種類のものが多くの関数に対してなされています。Gnus は XEmacs で実行 +しているときに、元からある Emacs の関数を再定義しません---それは、代わり +に gnus の等価なものと @code{defalias} をする事によって実行します。全体 +的に、よりきれいになります。 + +XEmacs の関数界面の方が明らかにきれいな場合は、私は代わりにそれを使いま +す。例えば、@code{gnus-region-active-p} は XEmacs では +@code{region-active-p} の別名であるのに対して、Emacs では関数です。 + +もちろん、私は XEmacs を私の基本プラットフォームに選んで、関数の割り当て +を逆にする事もできました。でも、私はそうしませんでした。XEmacs で gnus +を実行するときに、こういう逆向きのための速度低下は少しでしょう。 + + +@node Various File Formats +@subsection いろいろなファイル様式 + +@menu +* Active File Format:: 使用可能な記事グループの情報。 +* Newsgroups File Format:: グループの記述。 +@end menu + + +@node Active File Format +@subsubsection 現状ファイル様式 + +現状ファイルは当のサーバーの全ての使用可能なグループの一覧を挙げます。そ +れはそれぞれのグループの最低と最高の記事番号の一覧もあります。 + +これは普通の現状ファイルからの抜粋です: + +@example +soc.motss 296030 293865 y +alt.binaries.pictures.fractals 3922 3913 n +comp.sources.unix 1605 1593 m +comp.binaries.ibm.pc 5097 5089 y +no.general 1000 900 y +@end example + +これはこのファイルの疑似 BNF 定義です。 + +@example +active = *group-line +group-line = group space high-number space low-number space flag +group = +space = " " +high-number = +low-number = +flag = "y" / "n" / "m" / "j" / "x" / "=" group +@end example + +このファイルの完全な記述を得るためには、@samp{innd} のマニュアル頁、特に +@samp{active(5)} を見て下さい。 + + +@node Newsgroups File Format +@subsection ニュースグループファイル様式 + +ニュースグループファイルはグループをその記述と共に一覧を挙げます。サーバー +にある全てのグループが一覧にされなければならないのではなく、また、ファイ +ルの全てのグループがサーバーに存在しなければならないのではありません。こ +のファイルは純粋に利用者の情報のためにあります。 + +様式は非常に簡単です: グループ名、タブ、そして記述です。これは定義です: + +@example +newsgroups = *line +line = group tab description +group = +tab = +description = +@end example + + +@page +@node Emacs for Heathens +@section 異教徒への Emacs + +信じるかどうかは知りませんが、gnus を使う人の中には Gnus Love Boat での +旅に搭乗する前にあまり Emacs を使った事が無いという人がいます。もしあな +たが ``@kbd{M-C-a}'' や ``リージョンを切る''、そして +``@code{gnus-flargblossen} を連想リストに設定してください。そのキーはグ +ループ名に合致するために使われる正規表現です'' が少しの意味か全く意味の +無い魔法の言葉である不幸な人であれば、この付録はあなたのためにあります。 +もしあなたが既に Emacs に親しんでいるのであれば、これを無視して車を可愛 +がりに行って下さい。 + +@menu +* Keystrokes:: 文章を入力して命令を実行する。 +* Emacs Lisp:: 備え付けの Emacs プログラミング言語。 +@end menu + + +@node Keystrokes +@subsection 打鍵 + +@itemize @bullet +@item +Q: 経験のある Emacs の利用者とは何ですか? + +@item +A: 端末がペダルを持っていたらなぁと願う人の事です。 +@end itemize + +はい、あなたが Emacs を使うと、あなたはコントロールキー、シフトキー、メ +タキーをたくさん使うようになるでしょう。これは一部の人 (主に、@code{vi} +利用者) には非常にうるさく感じられるでしょう。残りの人々は、それによりも +たらされる地獄を愛します。あきらめて服従して下さい。Emacs は本当は +``Escape-Meta-Alt-Control-Shift'' の略で、他の評判の悪い出所 (Emacs の作 +者のような) から聞いた ``Editing Macros'' ではありません。 + +シフトキーは普通は小指の近くに位置しており、普通は大文字やその他のもを得 +るために使われます。あなたはずっとそれを使う事でしょう。コントロールキー +は普通は ``CTRL'' やそのようなもので印が付いています。メタキーは、おもし +ろい事に、どのキーボードでもそのように印が付けられていません。それは普通 +はキーボードの左手側に位置していて、普通は最下段にあります。 + +これから、我々 Emacs の人々は、それがあまりに不便なため、 +``meta-control-m キーを押す'' とは言いません。私たちは ``@kbd{M-C-m} を +押す'' と言います。@kbd{M-} は ``メタ'' を現す接頭辞で、``C-'' は ``コン +トロール'' を意味する接頭辞です。ですから、``@kbd{C-k} を押す'' は ``コ +ントロールキーを下に押し、@kbd{k} を押している間、それを下に保ちなさい'' +と言う事です。``@kbd{M-C-k} を押す'' は ``メタキーとコントロールキーを押 +して下に保った後で @kbd{k} を押す'' と言う事です。簡単でしょ。ね? + +これは全てのキーボードがメタキーを持っているわけではないと言う事実により +少し複雑になっています。そのような場合は、``エスケープ'' キーを使う事が +できます。それはメタキーを持っているときよりもっと作業が大変になりますの +で、そういう場合は、私はメタキーのあるキーボードを手に入れる事を恭しくお +勧め致します。それ無しでは生きて行けないでしょう。 + + + +@node Emacs Lisp +@subsection Emacs Lisp + +Emacs はそれが本当は Lisp インタープリターである事から、エディターの王様 +です。あなたが叩く、それぞれの全てのキーは何らかの Emacs Lisp のコードの +小片を実行し、Emacs Lisp はインタープリターで実行される言語である事から、 +それはどんなキーでも任意のいろいろなコードを実行するように設定できると言 +う事です。あなたは、単に、そうすれば良いだけです。 + +Gnus は Emacs Lisp によって書かれていて、それはたくさんの逐次解釈実行さ +れる関数により実行されます。 (これらは速度のためにバイトコンパイルされて +いますが、それでもまだ逐次解釈されます。) もし gnus がするある事を好きで +はないと思ったなら、違ったように実行させるのは取るに足らない事です。 (えー +と、少なくとも Lisp コードの書き方を知っていれば。) しかし、それはこのマ +ニュアルの範囲外なので、我々は単に gnus をカスタマイズするためにファイル +@file{.emacs} で普通使われるいくつかの普通の構文についてだけ話をします。 + +もし変数@code{gnus-florgbnize} を四 (4) に設定したいのであれば、以下のも +のを書きます: + +@lisp +(setq gnus-florgbnize 4) +@end lisp + +この関数 @code{setq} (本当は ``特殊形式'' (special form)) を使って、変数 +を何かの値に設定する事ができます。これは本当にあなたが知るべき全ての事で +す。これからは gnus の動作を変更するために、たくさんのこのようなものでファ +イル @code{.emacs} を埋め尽くす事ができます。 + +もしあなたがそのようなものをファイル @code{.emacs} に入れたら、それは次 +回に Emacs を起動したときに読み込まれ @code{評価} (それは ``実行'' の +lisp 語です) されます。もし変数をすぐに変更したいのであれば、閉じ括弧の +後で単に @kbd{C-x C-e} とするだけです。それは前にある ``式'' を @code{評 +価} し、それはここでは簡単な @code{setq} 文です。 + +がんばって---もしあなたが Emacs の前にあるのであればちょっと試して下さい。 +@kbd{C-x C-e} の後で、反響区域 (echo area) に @samp{4} が現われるのが見 +えるでしょう。それはあなたが @code{評価} した式の返り値です。 + +いくつかの落とし穴: + +もしマニュアルが ``@code{gnus-read-active-file} を @code{some} に設定し +なさい'' と言ったなら、それは: + +@lisp +(setq gnus-read-active-file 'some) +@end lisp + +と言う事です。 + +一方、マニュアルが ``@code{gnus-nntp-server} を @samp{nntp.ifi.uio.no} +に設定しなさい'' と言ったなら、それは: + +@lisp +(setq gnus-nntp-server "nntp.ifi.uio.no") +@end lisp + +と言う事です。 + +ですから、文字列 (後者) を シンボル (前者) と混同しないように注意して下 +さい。マニュアルは明確に区別していますが、混乱しやすいかもしれません。 + +@page +@include gnus-faq-ja.texi + +@node Index +@chapter Index +@printindex cp + +@node Key Index +@chapter Key Index +@printindex ky + +@summarycontents +@contents +@bye + +@iftex +@iflatex +\end{document} +@end iflatex +@end iftex + +@c End: + +