This file documents gnus, the GNU Emacs newsreader.

このファイルは GNU Emacs のニュースリーダである gnus に関する説明書です。

Copyright (C) 1995,96 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

著作権表示とこの許可文がすべての複製に存在する限り、この説明書のまったく同一の複製を作り、配布することを許可する。

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

同一複製の条件の下で、それによって得られた結果もこの許可文の表示と同一の条件のもとで配布する限り、この説明書の修正版の複製をし、配布することを許可する。

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.

上記の修正版に関する条件の下で、この説明書の翻訳の複製を作り、配布することを許可する。

The gnus Newsreader
*******************

Gnus を使うことによって Emacs でニュース (news) を（それにメール (mail) も）読むことができます。ニュースは NNTP、ローカルスプール、mbox ファイルなどのあらゆる極悪な手段を駆使して手に入れることができます。運試しをしてみようと思うならば、全てを同時に用いることもできます。

Semi-gnus は SEMI API に基づく MIME 機能を提供します。そういう訳で、 Semi-gnus は、大きな絵が入っていたりさまざまな形式を用いたりしているちょっと変わった記事を読む権利を擁護します。Semi-gnus は MULE API に基づく国際化・地域化、および、多字化機能を提供します。よって、Semi-gnus はさまざまな言語圏を差別しません。ああ、クリンゴンの方は Unicode Next Generationをお待ちください。

この説明書は Semi-gnus 6.10.054 に対応します。

gnus の起動
********

システム管理者が適切な設定をしていたならば、gnus を起動してニュースを読むのは非常に簡単です。そう、Emacs で M-x gnus と打つだけです。

別のフレーム (frame) で gnus を起動したいときは、命令 M-x gnus-other-frame を使うことができます。

開始時に何かがうまくいかないときは ~/.gnus ファイルの中で変数をいくつかいじくりまわさなければならないでしょう。このファイルは ~/.emacs と似ていますが、こちらは gnus が起動するときに読み込まれます。

この説明書でよくわからない用語がでてきたときは、用語の項 (see Terminology) を参照してください。

ニュースを見つける
=========

変数 gnus-select-method は gnus がどこでニュースを探すべきかを示しています。この変数ははじめの要素がどのようにして、2 番目の要素がどこでを表すリストである必要があります。この方法はあなたの基本方法 (native method) になります。この方法で取ってこないグループは全て外の (foreign) グループです。

たとえば、NNTP サーバー news.somewhere.edu から毎日一定の量のニュース（薬のように）を摂取したいのであれば、

     (setq gnus-select-method '(nntp "news.somewhere.edu"))

のようにすることができます。

ローカル・スプールのディレクトリを読み込みたい場合は、

     (setq gnus-select-method '(nnspool ""))

のようにできます。

ローカルのスプールを使えるのであれば、かなりの確率でその方がずっと速いでしょうし、それを使うべきでしょう。

もしこの変数が設定されていなければ、gnus は NNTPSERVER 環境変数を読みにいきます。もしその変数が設定されていなければ、gnus は gnus-nntpserver-file（設定されていない場合は /etc/nntpserver）がこの件に関して何かを言っていないかを調べます。もしそれも失敗したなら、gnusは Emacs が動作しているサーバーを NNTP サーバーとして使おうとします。随分な当て推量ですけどね。

gnus-nntp-server が設定されていると、この変数は gnus-select-method を上書きします。ですから、 gnus-nntp-server は nil に設定するべきで、標準設定でもそのようになっています。

Gnus に NNTP サーバーの名前の入力を対話的に指定することもできます。 gnus に数値でない接頭引数を渡すと（例：C-u M-x gnus）、gnus は gnus-secondary-servers リスト（もし存在するならば）からサーバーを選ぶことができるようにします。ただ単に接続したいと思ったサーバーの名前を打つこともできます。 (気を付けてほしいのは、この操作によって gnus-nntp-server もセットされてしまうことです。それは、そのとき使っている Emacs で再び M-x gnus の操作を行なうと、gnus は gnus-nntp-server にセットされたサーバーに接続してしまうことを意味しています。)

しかし、普段日常的には一つの NNTP サーバを使い、違ったサーバーには興味のあるグループが少ししかない場合、グループバッファで B 命令を使うことの方が良いでしょう。それは、選択可能なグループを表示し、その中からどれでも好きなものを購読することができます。これは、.newsrc の保持をずっとやりやすくします。See Foreign Groups.

外のグループに対する少し違ったやり方は、変数 gnus-secondary-select-methods を設定することです。この変数に表されている選択方法は、多くの点で gnus-select-method サーバーとの選択方法と同じように扱われます。起動中にアクティブファイルを探しにいきますし（もし要求されていれば）、これらのサーバー上にできた新しいニュースグループは元々のグループと同じように購読（もしくは不購読）されます。

たとえば、メールを読むために nnmbox バックエンド (backend) を使いたいときは、普通、この変数を、

     (setq gnus-secondary-select-methods '((nnmbox "")))

と設定します。

一番初め
====

起動用ファイルが存在しないときは、gnus はディフォルトでどのグループが購読されているべきかを決定しようとします。

変数 gnus-default-sebscribed-newsgroups が設定されていると、gnus はそのリストの中のグループを購読し、残りを削除します。システム管理者はこの変数を何か役に立つものに設定しておくべきです。

そうでないときは、gnus は少しの任意のグループを購読します（例： *.newusers）。（任意はここでは、Lars さんが読むべきであると考えるものというように定義されています）

また、たいていの共通の問題の解決の手助けになるよう、gnus に関する文書のグループも購読することになるでしょう。

gnus-default-subscribed-newsgroups が t のときは、gnus は新しいグループを扱うのに普通の関数を使い、特別なことは何もしません。

サーバーが落ちている
==========

初期設定 (default) のサーバーが落ちているときは、当然 gnus の起動にいくつかの問題が発生します。しかし、ニュースグループの他にいくつかメールのグループがあれば、それにもかかわらず gnus を起動したいと思うかもしれません。

Gnus は、信頼できるプログラムの一つとして、サーバーと接続できないときは基本選択方法なしで続けるかどうかを尋ねます。これは実際にはサーバーが存在しないとき（例えば、アドレスを間違えた場合）やサーバーが何らかの理由で一時的に調子がおかしくなっているときに起こります。もしそのまま続行することにして、外のグループが一つも無い場合、実はグループバッファではほとんど何もできないということに気がつくでしょう。でも、ねぇ、それはあなたの問題です。ハハハッ。

サーバーが完全に落ちているのを知っているか、サーバーでわずらうことなくメールだけを読みたいときは、gnus を起動するのに、gnus-no-server 命令を使うことができます。急いでいるときにもぴったりでしょう。この命令は本来のサーバーには接続しません――その代わりに、レベル 1 と 2 にあるすべてのグループを活動状態にします（基本グループでないグループはその 2 つのレベルにしておくのが望ましいでしょう）。

gnus をスレーブにする
=============

あなたは 2 つ以上の Emacs と、2 つ以上の gnus を同時に動かしたいと思うかもしれません。違った .newsrc ファイルを使っているなら（例えば、2 つの違ったサーバーから読み込むために、2 つの違った gnus を動作させている場合）、まったく問題はありません。それを行えば良いだけです。

問題は、同じ .newsrc ファイルを使う２つの gnus を動かそうとしたときに起こります。

この問題に対処するために、gnus タワーのシンクタンクにいる我々は新しい概念にたどりつきました。マスター と スレーブ です。（我々はこの概念に特許を申請しました。そして、その言葉の著作権を得ました。お互いに関連してこれらの言葉を使いたいなら、１回使う毎に、私に $1 を送らなければなりません。もちろん、コンピューターアプリケーションのマスター／スレーブ関係の使用料はもっと高くなります。）

とにかく、M-x gnus（もしくは、普段やっている方法）で gnus を普通に起動します。その後のスレーブ gnus はそれぞれ M-x gnus-slave で起動します。スレーブは普通の .newsrc は保存しませんが、代わりにスレーブファイル にスレーブの起動中にどのようなグループが読まれたかという情報だけを保存します。マスター gnus が起動するとき、それはそれらのスレーブファイルを読み込み（そして消し）、それらからすべての情報を取り込みます。（スレーブファイルは、最終的な変更が優先されるようにそれらが作られた一連の動作の中で読まれます。）

もちろん、スレーブファイルからの情報は普通の（例えば、マスターの）ファイルよりも優先されます。

グループを取得する
=========

時々、“このグループを読みたいのであって、gnus が起動しているかどうかを気にしたくない。”ということができれば便利なことがあります。これは、利用者よりもプログラムのコードを書く人に便利な機能ですが、どちらにしろ、コマンド gnus-fetch-group はこの機能を提供します。そのコマンドは、グループの名前を引数としてとります。

新しいグループ
=======

新しいニュースグループを全く見ないで満足であるならば、 gnus-check-new-newsgroups を nil に設定することができます。これを設定した場合、起動にかかる時間が短くなります。この変数が nil に設定されていても、グループバッファで U を押せばいつでも新しいグループを購読することができます (see Group Maintenance)。設定されていない場合 (default) ではこの変数は ask-server です。この変数が always に設定されていると、命令 g を実行したときでも gnus はバックエンドに新しいグループを探すことを求めます (see Scanning New Messages)。

新しいグループを調べる
-----------

Gnus は、普通はグループが新しいかどうかを、購読しているグループと削除されているグループのリストと現状ファイル (active file) を比較することにより決定しています。この方法は特に速いというわけではありません。 gnus-check-new-newsgroups が ask-server であると、gnus はサーバーに、最後に接続してから新しいグループができているかどうかを尋ねます。この方法は速いし、安上がりです。これにより、削除されたグループのリストを保持しておくことからから完全に開放されます。ですから、 gnus-save-killed-list を nil にすることができるでしょう。そうすれば、起動、終了の両方、そして全体にわたって時間を節約できます。ディスク消費量も少なくなります。それなら、どうしてこれが初期設定 (default) ではないのでしょう？残念ながら、すべてのサーバーがこの命令を理解するわけではないのです。

私は今あなたが何を考えているかを当てられます。どうすればサーバーが ask-server を理解するかがわかるのでしょう？え、違うのですか？あぁ、良かった。というのは、確実な答は存在しないのです。私に言えることは、この変数を ask-server に設定して、数日間新しいグループが現れるかどうかを調べてください、ということだけです。もしいくつかのグループが現れたなら、それで動作しています。一つも現れなければ、それは動作しません。私は、gnus にサーバーが ask-server を理解するかどうかを推量させる関数を書くこともできますが、それは単に推量しているにすぎません。ですから、その関数を書くことはないでしょう。他の方法としては、サーバーに telnet をして、 HELP と打ち、サーバーが理解するコマンドの中に NEWGROUPS があるかどうかを調べることもできます。もしあれば、おそらく動作するでしょう（しかし、適切に機能を提供することなく NEGROUPS をリストに含めるサーバーもあります）。

この変数は、選択方法のリストであることもできます。そのときは、gnus は命令 ask-server をそれぞれの選択方法に対して実行し、普通の方法で購読（もしくは、不購読）します。これの副作用は、起動にかなり時間がかかるので、待っている間に瞑想できることです。永久の幸福を達成するために、マントラ ``dingnusdingnusdingnus'' を使ってください。

購読方法
----

新しいグループに遭遇したときに gnus が何をするかは、変数 gnus-subscribe-newsroup-method によって決定されます。

この変数は関数を含んでいる必要があります。この関数は新しいグループの名前を唯一の引数として呼ばれます。

いくつかの手軽なプレハブ関数は、以下のようになっています。

gnus-subscribe-zombies
     すべての新しいグループをゾンビ (zombie) にします。これが初期設定 (default) になっています。後でゾンビを (A z によって) 概観したり、（S z によって）適切に全てを削除したり、（u によって）購読したりできます。

gnus-subscribe-randomly
     任意の順番ですべての新しいグループを購読します。実際には、すべての新しいグループはグループバッファの『一番上』に加えられます。

gnus-subscribe-alphabetically
     すべての新しいグループをアルファベット順に購読します。

gnus-subscribe-hierarchically
     すべての新しいグループを階層的に購読します。この関数と gnus-subscribe-alphabetically の違いは少ししかありません。 gnus-subscribe-alphabetically は新しいグループを厳密にアルファベット順にならべますが、この関数はグループをその階層の中に入れます。ですから、 rec の階層を comp の階層の前に持ってきたい場合、この関数はその配置をぐちゃぐちゃにはしません。もしくは、そのようなものです。

gnus-subscribe-interactively
     新しいグループを対話的に購読します。これは gnus が 全て のグループに対して尋ねることを意味しています。購読するグループは階層的に購読されます。

gnus-subscribe-killed
     すべての新しいグループを削除します。

上の変数と良く関係した変数は、 gnus-subscribe-hierarchical-interactive です。この変数が nil でないと、gnus は階層的な方法で新しいグループを購読するかどうかを尋ねます。gnus はそれぞれの階層で、それを下に降りるかどうかを尋ねます。

良くある間違いは、数段落前の変数 (gnus-subscribe-newsgroup-method ) を gnus-subscribe-herarchical-interactive に設定することです。これは誤りです。これは動作しません。これはおめでたい人のすることです。ですから、絶対にしないでください。

新しいグループを選別する
------------

どの新しいグループが購読（もしくは、無視）されるべきかを管理する快適で手軽な方法は、ファイル .newsrc の先頭に options 行を挿入することです。次は、例です。

     options -n !alt.all !rec.all sci.all

この行は、明らかにまじめで理知的で科学的な人間（もしくは単なる古く退屈な人間）が書いたものです。なぜなら、これは alt と rec で始まる名前を持つグループは全て無視され、sci で始まる名前を持つグループは全て購読する、ということを表しているからです。Gnus はこれらのグループを購読するのに、普通の購読方法を用いません。代わりに、 gnus-subscribe-options-newsgroup-method が用いられます。この変数は標準 (default) では gnus-subscribe-alphabetically です。

ファイル .newsrc をいじりたくない場合は、 gnus-options-subscribe と gnus-options-not-subscribe の２つの変数だけを設定することもできます。この２つの変数はファイル .newsrc の optinos -n 行と全く同じことをします。どちらの変数も正規表現で、新しいグループは前者に合致すれば無条件に購読され、後者に合致すると無視されます。

さらにここでおせっかいをする変数は、gnus-auto-subscribed-groups です。それは gnus-options-subscribe と全く同じように動作しますので、本当は余分なものです。しかし、私はこの二つがあった方が良いと思いました。もう一方の変数はユーザがいじくるのに使われるのに対して、この変数はいくつかの基本的な規則を設定するためのものです。ディフォルトではこの変数はメールバックエンド (nnml 、nnbabyl 、nnfolder 、 nnmbox とnnmh) からできる全ての新しいグループを購読するようになっています。それが嫌であれば、この変数を nil に設定してください。

この正規表現に合致する新しいグループは gnus-subscribe-options-newsgroup-method を使って購読されます。

サーバーを換える
========

ときどき、ある NNTP サーバーから別のサーバーへ移動しなければならないことがあります。このようなことはめったにおきませんが、おそらくあなたが仕事を変えたり、使っているサーバーがとても不安定で、別のものに乗り換えたいというときに必要になるでしょう。

サーバーを変更するのはとても簡単ですよね？ gnus-select-method を新しいサーバーを指し示すように変更すればいいだけですね？

違います！

記事の番号は違った NNTP サーバーでも (どうにかして) 同じにしてある、ということはありません。そして、 guns がどの記事を読んだかを記録する唯一の方法は、記事番号を記録することです。ですから、 gnus-select-method を変更したときは、ファイル .newsrc は意味がなくなります。

Gnusはファイル .newsrc をあるサーバー用から別のサーバー用に変換する関数を2、3用意しています。それらには一つ共通点があります---実行にながーーい時間がかかることです。おそらく、どうしても必要になったとき以外にこの関数を使おうとは思わないでしょう。

もし両方のサーバーに接続できるなら、gnusはあなたが読んだ記事全てに対してヘッダー (headers) を要求して、Message-ID を比較し、読んだ記事と記事の印を新しく記録します。コマンド M-x gnus-change-server はこれをすべての基本グループに対して行います。そのコマンドは移動先の方法の入力を促します。

個々のグループを命令 M-x gnus-group-move-group-to-server で移動することもできます。これはあるサーバーから別のサーバーへ一つの (外の) グループを移動したいときに役に立ちます。

古いサーバーと新しいサーバーの両方に接続することができないとき、印と読んだ範囲はすべて意味が無くなります。そのようなときは、コマンド M-x gnus-group-clear-data-on-native-groups を使って、基本グループに関するデータをすべて消去することができます。このコマンドは注意して使ってください。

起動ファイル
======

今や、あなたはファイル .newsrc についてすべて知っています。すべての購読情報は伝統的にこのファイルに蓄積されます。

GNUS では物事が少々複雑になっています。ファイル .newsrc を最新のものにするだけではなく、ファイル .newsrc には合わない情報を保存しておくために .newsrc.el と呼ばれるファイルを使います。 (実際は、ファイル .newsrc の全ての情報を複製して保持しています。) GNUSはこれらの中で一番最後に保存されたものを使います。これをすることにより、GNUS と他のニュースリーダーを切り替えて使うことができます。

これはちょっとばかな方法なので、Gnus はもっと良い方法を編み出しました。 .newsrc と .newsrc.el ファイルに加えて、 Gnus は .newsrc.eld と呼ばれるファイルも持っています。Gnus はこれらの中で一番新しいファイルを読みますが、ファイル .newsrc.el に書き込むことはありません。ファイル .newsrc.eld は絶対に消すべきではありません。---それはファイル .newsrc にはないたくさんの情報を保持しています。

ちなみに、gnus は何も変えてません。Lars 同志、万歳！

gnus-save-newsrc-file を nil にすることによってファイル .newsrc に書き込むのを止めることができます。そうすれば、そのファイルを削除することができ、ディスク容量を節約することができ、gnus の終了が速くなります。しかし、そうすると他のニュースリーダーを使えなくなります。でも、ちょっと、誰かそうしたい人がいるでしょうか。

gnus-save-killed-list (ディフォルト では t) が nil であると、gnus は削除されたグループを起動ファイルに保存しません。これは、 (起動時と終了時の) 時間と、(ディスクの) 容量を節約します。こうすると、 gnusがどのグループが新しいかの記録を持っていないことになりますので、新しいグループの自動購読方法は意味が無くなります。この変数を nil にしたときは、gnus-check-new-newsgroups を常に nil か ask-server にしておくべきでしょう (see New Groups)。この変数は正規表現であることもできます。そのような場合は、ファイルを保存する直前にその正規表現に合致しないすべてのグループを消去します。これは、すべてのサーバーが ask-server を理解するわけではない、といったような、特定のあいまいな状況のときに役に立つでしょう。

変数 gnus-startup-file は起動ファイルがどこにあるかを指定します。ディフォルトの値は ~/.newsrc で、それがどのようなものであれ、末尾に .eld をつけたものが gnus (El Dingo) の起動ファイルになります。

gnus-save-newsrc-hook は newsrc ファイルの中のどれかを保存する前に実行されるのに対し、gnus-save-quick-newsrc-hook はファイル .newsrc.eld を保存する前に実行され、 gnus-save-standard-newsrc-hook はファイル .newsrc.eld を保存する前に実行されます。後の二つは普通は版管理を入れたり切ったりするのに使われます。ディフォルトでは、起動ファイルを保存するときに版管理に入ります。バックアップファイルの作成を止めたいときは、次のようにしてください。

     (defun turn-off-backup ()
       (set (make-local-variable 'backup-inhibited) t))

     (add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
     (add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)

Gnus が起動すると、gnus-site-init-file (ディフォルトでは .../site-lisp/gnus) と gnus-init-file (ディフォルトでは ~/.gnus) のファイルを読み込みます。これらは普通の Emacs Lisp ファイルで、~/.emacs や site-init ファイルを gnus 関係のもので乱雑にしないようにするために使うことができます。Gnus はこれらと同じ名前のファイルを調べますが、接尾語 .elc と .el がついているものも調べます。言い換えれば、gnus-init-file を ~/.gnus に設定すると、gnus は (この順番に) ~/.gnus.elc 、~/.gnus.el を探し、最後に ~/.gnus を探します。

自動保存
====

何か gnus のデータを変更すること (記事を読む、印を付ける、グループを削除または購読する) をしたとき、変更は特別なドリブルバッファ (dribble buffer) に書き込まれます。このバッファはEmacs が普通するように自動保存されます。ファイル .newsrc を保存する前に Emacsが落ちたときは、すべての変更をこのファイルから回復することができるでしょう。

起動時に gnus がこのファイルの存在を発見すると、gnus はそれを読み込むかどうかを利用者に尋ねます。本当の起動ファイルが保存されれば、自動保存ファイルは削除されます。

gnus-use-dribble-file が nil であると、gnus はドリブルバッファをつくったり、維持したりしません。ディフォルトは t です。

Gnus はドリブルファイルを gnus-dribble-directory に置きます。ディフォルトではそのようになっていますが、この変数が nil であると、 gnus はファイル.newsrc の置かれているディレクトリ (これは普通は利用者のホームディレクトリです) に入っていってドリブルファイルを作ります。ドリブルファイルは .newsrc と同じ許可属性を与えられます。

もし gnus-always-read-dribble-file が nil でなければ、gnus は利用者に尋ねる事無く、ドリブルファイルを起動時に読み込みます。

現状ファイル
======

Gnus は起動したときや、実際に新しい記事が到着しているかを決定しようとするときに、現状ファイルを読み込みます。これはとても大きなファイルで、そのサーバーの活動中のグループと記事のすべてのリストが入っています。

現状ファイルを検査する前に、gnus は正規表現 gnus-ignored-newsgroups に合うすべての行を削除します。これは主に偽の名前を持つグループを排除するために使われてきましたが、興味の無いグループの階層を無視するために使うこともできます。しかし、これはお勧めできません。本当のことを言うと、全く賛成できません。代わりに、そのような用途に用いられる変数の概略を知るために、see New Groups を参照してください。

現状ファイルは比較的大きくなる傾向があるので、遅い回線を使っているときは、現状ファイルを読み込まないように gnus-read-active-file を nil に設定することができます。この変数はディフォルトでは some です。

そのような時は、gnus は実際に購読されているグループに関する情報だけを得てやっていこうとします。

気を付けてほしいのは、あなたが山ほどのたくさんのグループを購読しているときにこの変数を nil 設定すると、gnus は速くなるどころか、遅くなってしまうということです。現状では、ニュースを 2400bps 以上のモデムを通して読んでいるのでない限り、gnus の速度はかなり遅くなるでしょう。

この変数は some という値も取ることができます。その時は、gnus は現状の情報を購読されているグループのものだけを得ようとします。いくつかのサーバー (命令LIST ACTIVE group を使うことのできる、最新鋭の INN サーバー) では、非常に早くなるでしょうが、他のサーバーでは速くはありません。どのようにせよ、遅い回線では some は nil よりも速く、それはもちろんt よりも速くなります。

もしこの変数が nil であると、gnus は完全にがんじがらめの方法でグループの情報を得ようとします。そして、これはあまり速くありません。もしそれが some で NNTP サーバーを使っているときは、gnus はできるだけ速く命令を出し、一撃ですべての返答を読み込みます。この方が普通はより良い結果をもたらしますが、サーバーが命令 LIST ACTIVE group を理解しないなら、サーバーにとってはあまり良いとは言えません。

some か nil を使うのであれば、どちらにしろ速度を上げるためにすべての興味の無いグループを必ず削除するべきでしょう。

この変数は２番目の (secondary) 方法の現状ファイル取得にも影響することに気を付けてください。

起動変数
====

gnus-load-hook
     Gnus が読み込まれているときに実行されるフックです。何度 gnus を起動しても、 Emacs が起動してから終了するまでに普通はこのフックは一回しか実行されないことに注意してください。

gnus-before-startup-hook
     Gnus の起動に成功した後に実行されるフックです。

gnus-startup-hook
     Gnus が起動された後に、一番最後に実行されるフックです。

gnus-started-hook
     Gnus の起動に成功した後に、一番最後に実行されるフックです。

gnus-started-hook

     ファイル .newsrc を読み込んだ後で、グループバッファを作成する前に実行されるフックです。

gnus-check-bogus-newsgroups
     もし nil でないと、gnus は起動時に調べてすべての偽グループを削除します。偽グループ (bogus group) はあなたの .newsrc ファイルには存在するけれど、ニュースサーバーには実際には存在しない、というグループのことです。偽グループを調べるのにはかなり時間がかかりますので、時間と資源を節約するために、この機能は使わないほうがいいでしょう。そして、代わりにグループバッファで時々偽グループを調べるのが良いでしょう (see Group Maintenance を参照してください)。

gnus-inhibit-startup-message
     もし nil でないと、起動時のメッセージは表示されません。そのようにすれば、仕事の代わりにニュースを読んでいるのを上司に気付かれにくくなるでしょう。この変数は .gnus.el がロードされる前に使われますので、 .emacs に設定するべきである点を注意してください。

gnus-no-groups-message
     グループが一つも存在しないときに gnus が表示するメッセージです。

gnus-play-startup-jingle
     もし nil でないと、起動時に gnus の短い曲を演奏します。

gnus-startup-jingle
     上の変数が nil でないときに演奏される短い曲です。ディフォルトは Tuxdemoon.Jingle4.au です。

グループバッファ
********

グループバッファ group buffer は有効なグループを全部（あるいは一部を）一覧表示します。これは gnus を起動したときに最初に表示されるバッファで、 gnus が生きている限り決して消されることはありません。

グループバッファの形式
===========

グループ行の仕様
--------

グループバッファのデフォルトでの形式はきれいでつまんないけど、これは君の好きなように、サイコーにダサくすることもできます。

これがグループ行の例です。

          25: news.announce.newusers
      *    0: alt.fan.andrea-dworkin

とっても簡単でしょ？

news.announce.newusers には 25 の未読記事があるのがわかります。 alt.fan.andrea-dworkin には未読記事はないけれども、印をつけた記事がいくつかあります（行頭のちっちゃなアスタリスクが見える？）。

この形式は gnus-group-line-format 変数をいじることで、どんな風にでも変えられます。この変数は format の仕様風に動作します。つまり（あのクソ）C 言語を使う人たちのため、printf の仕様とほぼ同じです。 See Formatting Variables

%M%S%5y: %(%g%)\n という値で上記の行を生成します。

コロンは、この行の中に必ず無くてはいけません。カーソルは、何かの操作をした後は常にコロンのところに移動するからです。他には何も必要ではありません―― グループ名さえもです。表示されている文字は全てただの画面の飾りであり、 gnus がそれを調べることはありません。Gnus は必要とする全ての実情報を、テキスト属性を使って憶えています。

（もし君が、すごくヘンな、素晴らしい、表計算風のレイアウトを作ったとしたら、みんな、君は会計の仕事が忙しくって、ニュースを読んで時間を無駄使いしたりなんかしてない、って信じてくれるよ。）

以下が使用できるフォーマット文字のリストです。

M
     そのグループが印のついた記事だけのときは、アスタリスク文字。

S
     そのグループが購読されているかどうか。

L
     購読度のレベル。

N
     未読記事の数。

I
     保留記事の数。

T
     印付き記事の数。

R
     既読記事の数。

t
     推定全記事数（これは実際は MAX-NUMBER - MIN-NUMBER + 1）。

y
     未読でも、印付きでも、保留でもない記事の数。

i
     印付き記事と保留記事の数。

g
     グループ名のフルネーム。

G
     グループ名。

D
     ニュースグループの説明。

o
     モデレーテッドの場合 m.

O
     モデレーテッドの場合 (m).

s
     選択メソッド。

n
     どこからの選択か。

z
     外部選択メソッドが使われている場合、<%s:%n> と同じ文字列。

P
     トピック (see Group Topics) のレベルに応じた字下げ。

c
     短い（省略した）グループ名。gnus-group-uncollapsed-levels 変数は、どのレベルまでグループ名を全部残すかを示します。デフォルトは 1 です――この意味は、gnu.emacs.gnus のようなグループ名を g.emacs.gnus に短縮するということです。

m
     そのグループに最近新着メールが届いている場合は % (gnus-new-mail-mark)。

d
     最後にいつこのグループを読んだかを示す文字列 (see Group Timestamp)。

u
     利用者定義指定。フォーマット文字列中で、この次の文字はアルファベット文字でなければいけません。Gnus は gnus-user-format-function-X 関数を呼び出します。ここで X は %u に続いている文字です。この関数は引数に、一つのダミーパラメータを渡されます。この関数は、他の各指定文字の情報と同様に、バッファに挿入される文字列を返さなければなりません。

全ての「〜の数」の指定で、もしその情報が利用できない場合にはアスタリスク (*) が埋められます――例えば、起動されていない外部グループや、不正なネイティブグループの場合です。

グループモード行の仕様
-----------

モード行は gnus-group-mode-line-format (see Mode Line Formatting) を設定することで変更できます。こいつは指定文字をあんまりたくさん知ってません。

S
     基本ニュースサーバー。

M
     基本選択方法。

グループのハイライト
----------

グループバッファのハイライトは gnus-group-highlight 変数によって制御されています。これは (FORM . FACE) のようなものを要素に持つ連想リストです。FORM が何か nil 以外に評価されるものなら、その行に対して FACE が使用されます。

以下がこの変数の値の例です。これは背景が暗い設定ではきれいに見えるかも知れません。

     (face-spec-set 'my-group-face-1
                    '((t (:foreground "Red" :bold t))))
     (face-spec-set 'my-group-face-2
                    '((t (:foreground "SeaGreen" :bold t))))
     (face-spec-set 'my-group-face-3
                    '((t (:foreground "SpringGreen" :bold t))))
     (face-spec-set 'my-group-face-4
                    '((t (:foreground "SteelBlue" :bold t))))
     (face-spec-set 'my-group-face-5
                    '((t (:foreground "SkyBlue" :bold t))))

     (setq gnus-group-highlight
           '(((> unread 200) . my-group-face-1)
     	((and (< level 3) (zerop unread)) . my-group-face-2)
     	((< level 3) . my-group-face-3)
     	((zerop unread) . my-group-face-4)
     	(t . my-group-face-5)))

see Faces and Fonts も参照してください。

この form が評価されるときに動的に束縛されている変数には以下のものがあります。

group
     グループ名。

unread
     そのグループの未読記事の数。

method
     選択メソッド。

mailp
     そのグループがメールのグループかどうか。

level
     そのグループのレベル。

score
     そのグループのスコア。

ticked
     そのグループ中の印の付いた記事の数。

total
     そのグループ中の全記事数。もっと正確に言うと、MAX-NUMBER - MIN_NUMBER + 1.

topic
     トピックマイナーモードを使用している時、この変数は挿入されている現在のトピックに束縛されます。

この form が評価 (eval) されるときは、ポイントは問題のグループの行頭にあります。従って、通常の gnus の関数のほとんどを使ってそのグループの情報を取ってくることができます。

gnus-group-update-hook はグループ行が変更されたときに呼び出されます。これは gnus-visual が nil のときは呼び出されません。このフックはデフォルトでは gnus-group-highlight-line を呼び出します。

グループ操作
======

全ての移動コマンドは数字プレフィックスを理解するので、期待する通りの動作をします。たぶんね。

n
     次の未読記事のあるグループに移動します (gnus-group-next-unread-group)。

p
DEL
     一つ前の未読記事のあるグループに移動します (gnus-group-prev-unread-group)。

N
     次のグループに移動します (gnus-group-next-group)。

P
     一つ前のグループに移動します (gnus-group-prev-group)。

M-n
     一つ前の同じレベル（もしくはそれより小さいレベル）の未読グループに移動します(gnus-group-prev-unread-group-same-level)。

M-p
     次の同じレベル(もしくはそれより小さいレベル)の未読グループに移動します (gnus-group-next-unread-group-same-level)。

次の３つの命令はグループにジャンプするためのものです：

j
     グループにジャンプします（それが見えるようになっていなかったら見えるようにします）(gnus-group-jump-to-group)。kill されているグループも、生きているグループと同様にジャンプできます。

,
     最も小さいレベルの未読グループにジャンプします (gnus-group-best-unread-group)。

.
     最初の未読記事のあるグループにジャンプします (gnus-group-first-unread-group)。

gnus-group-goto-unread が nil にすると、全ての移動コマンドは、次の未読グループではなく次のグループに移動するようになります。そのコマンドが次の未読グループに移動する、と言い張っていても、です。デフォルトは t です。

グループの選択
=======

SPACE
     現在のグループを選択し、サマリバッファに切り替えて最初の未読記事を表示します (gnus-group-read-group)。もしそのグループに未読記事が無い、もしくはこのコマンドに数字以外のプレフィックスを与えると、gnus はサーバからこのグループの全ての古い記事を取得しようとします。N の数字プレフィックスを与えると、gnus の取得する記事数は N になります。N が正の数であれば gnusは新しい方から N 個の記事を取得し、 N が負の数であれば gnus は古い方から N 個の記事を取得します。

RET
     現在のグループを選択し、サマリバッファに切り替えます (gnus-group-select-group)。gnus-group-read-group と同じ引数を取ります――唯一の違いは、グループに入ったときに最初の未読記事を表示しない、ということです。

M-RET
     これは上記のコマンドと同じ動作をしますが、「ゴタゴタ」は最低限にしようとします (gnus-group-quick-select-group)。スコア・kill の処理は行われず、ハイライトも記事消去もしません。これは、あなたが本当に急いでいて、どっかのやたらでっかいグループに入らなければいけないときに役に立つかもしれません。また、プレフィックスに 0 を与えれば（すなわち 0 M-RET）、gnus はサマリバッファを作ろうとさえしません。これはサマリバッファを作る前にスレッド表示を切り替えたいとき役に立ちます (see Summary Generation Commands)。

M-SPACE
     これは RET コマンドと同じ動作をするさらにもう一つのコマンドですが、このコマンドは記事消去と保留記事を隠す処理を行いません (gnus-group-visible-select-group)。

M-C-RET
     最後にこのコマンドは、現在のグループを一度限り、その内容に一切の処理をすることのないように選択します (gnus-group-select-group-ephemerally)。 スレッド表示さえも行われません。この方法で選択した後にこのグループに対して行ったことは全て、その後に影響を与えることはありません。

gnus-large-newsgroup 変数は、何を大きなグループと考えるべきか、を gnus に与えます。これは デフォルトでは 200 です。グループに（未読と印付きの）記事がこの数以上あれば、gnus はそのグループに入る前に利用者に確認を求めます。利用者はサーバからいくつの記事を取得するかを指定できます。もし利用者が負の数 (-n) を指定すれば、古い方から n 個の記事を取得します。正の数であれば、新しく到着した方から n 個の記事を取得します。

gnus-auto-select-first は、SPACE コマンドでグループに入ったときに、自動的に記事を選択するかどうかを制御します。

nil
     グループに入ったときにどの記事も選択しない。ただサマリバッファを表示するだけ。

t
     グループに入ったときに、最初の未読記事を選択する。

best
     グループに入ったときに、そのグループで最も高いスコアの記事を選択する。

もしあるグループで自動記事選択をやめたいのであれば（例えばでっかい記事のあるバイナリグループでは、とか）、グループが選択されたときに呼び出される gnus-select-group-hook の中でこの変数を nil に設定することができます。

購読制御コマンド
========

S t
u
     現在のグループの購読を切り替えます (gnus-group-unsubscribe-current-group)。

S s
U
     グループを購読するかどうかを確認し、購読します。すでに購読するようになっている場合には、購読を止めます (gnus-group-unsubscribe-group)。

S k
C-k
     現在のグループを kill します (gnus-group-kill-group)。

S y
C-y
     最後に kill したグループを yank します (gnus-group-yank-group)。

C-x C-t
     二つのグループの順序を置き換えます (gnus-group-transpose-groups)。 これはホントは購読コマンドではありませんが、kill と yank を何度か続ける代わりにこのコマンドが使えます。

S w
C-w
     リージョン内の全てのグループを kill します (gnus-group-kill-region)。

S z
     全てのゾンビグループを kill します (gnus-group-kill-all-zombies)。

S C-k
     あるレベルのグループを全て kill します (gnus-group-kill-level)。 kill した後、これらのグループを yank で戻すことはできないので、このコマンドはいくらか注意して使ってください。このコマンドが本当に便利になるのは、.newsrc に捨てちゃいたい未購読のグループがたくさんあるときだけです。レベル 7で S C-k を行うと、.newsrc ファイル中にメッセージ番号がない未購読グループを全て kill します。

see Group Levels も参照してくください。

グループデータ
=======

c
     そのグループ内の全ての無印の記事を既読にする (gnus-group-catchup-current)。グループバッファから既読にした場合は gnus-group-catchup-group-hook が呼び出されます。

C
     そのグループの全記事を、印付きの記事も含めて既読にします (gnus-group-catchup-current-all)。

M-c
     現在のグループの全てのデータをクリアします――マークと既読記事のリストを消し去ります (gnus-group-clear-data)。

M-x gnus-group-clear-data-on-native-groups
     もし NNTP サーバを別のものに切り替えたとすると、全てのマークと既読情報はもう役には立ちません。このコマンドを使ってネイティブグループの全てのデータをクリアすることができます。注意して使ってね。

グループレベル
=======

全てのグループは購読度 subscribedness のレベルを持ちます。例えば、あるグループがレベル 2 だとすれば、それはレベル 5 のグループよりも「より購読している」ということです。Gnus に対して、あるレベルかそれより小さいレベルのグループのみ一覧表示するように頼むこともできるし (see Listing Groups)、あるレベルかそれより小さいレベルのグループの新着記事のみを確認することもできます (see Scanning New Messages)。

忘れないで: グループのレベルが大きいほど、重要度は低くなるということ。

S l
     現在のグループのレベルを設定する。数字プレフィックスが与えられると、そこから N 個のグループのレベルが設定されます。レベルを入力するためのプロンプトが出ます。

Gnus はレベル 1 から gnus-level-subscribed（この値を含む）（デフォルトは 5）までのグループを購読、gnus-level-subscribed（この値を含まない）からgnus-level-unsubscribed（この値を含む）（デフォルトは 7）までのグループを非購読、gnus-level-zombie をゾンビ（歩く屍）（デフォルトは 8）、gnus-level-killed を kill されている（完全に死んでる）（デフォルトは 9）と判断します。Gnus は購読と非購読のグループは全く同様に扱いますが、ゾンビと kill グループは、どの記事を読んだか、存在するかなどの情報を一切持ちません。この死んでるグループと生きてるグループの区別は、別にそれがきれいだからとか賢いからというわけではなく、純粋に効率的な理由のためです。

メール用のグループは（もしあれば）非常に小さいレベル（例えば 1 か 2）にしておくことをお勧めします。

もしレベル変数で遊びたいのであれば、多少注意をしてまわる必要があります。一旦それを設定したら、二度とそれに触らないでください。さらに言えば、自分で何をやっているかを正確に理解していない限り、一切触らないでください。

身近に関係する2つの変数は gnus-level-default-subscribed（デフォルトは 3）と gnus-level-default-unsubscribed（デフォルトは 6）です。これらは新しいグループが（非）購読されたときのレベルです。もちろん、これら２つの変数の値は、意味のある正しい範囲でなくてはなりません。

gnus-keep-same-level が nil 以外であれば、移動コマンドのいくつかは同一（あるいはそれより小さい）レベルのグループのみの移動になります。特に、あるグループの最後の記事から次のグループに移るとき、次の同一（あるいはそれより小さい）レベルのグループに移動します。これは残りのグループを読むより先に、より重要なグループを読んでおきたいときには便利かもしれません。

デフォルトでは gnus-group-default-list-level と同じかそれより小さいレベルのグループが、グループバッファに一覧表示されます。

gnus-group-list-inactive-groups が nil 以外であれば、未読のグループに一緒にアクティブでないグループも表示します。この変数はデフォルトで t です。もしこれが nil であれば、アクティブでないグループは表示されません。

gnus-group-use-permanent-levels が nil 以外であれば、一旦レベルを g や l のプレフィックスに与えると、その後の全てのコマンドにおいてそのレベルが「作用する」レベルになります。

Gnus は通常、gnus-activate-level かそれより小さいレベルのグループのみを起動します（つまりサーバに問い合わせをする）。購読していないグループを起動したくなければ、この変数を例えば 5 に設定するとよいかもしれません。デフォルトは 6 です。

グループのスコア
========

普通は重要なグループは高レベルにしておくでしょうけれども、この方法では少々制限がきついですよね。ひょっとしたら、グループをどれくらい頻繁に読むかによってグループバッファをソートしたいなあ、なんて思わない？理にかなってるでしょ？

グループスコア group score はそのためのものです。それぞれのグループに対してスコアを指定することができます。そしてグループバッファをこのスコアを基にソートすることができます。あるいは、スコア順でソートしてその後レベルでソートすることもできます。（レベルとスコアをひとまとめにして、グループのランク rank と呼びます。レベルが 4 でスコアが 1 のグループは、レベルが 5 でスコアが 300 のグループよりも高いランクとなります。（レベルの方が重要度が高く、スコアの方は重要度が低くなります。））

頻繁に読むグループに、めったに読まないグループよりも高いスコアを与えたいときは、gnus-summary-exit-hook フックに gnus-summary-bubble-group 関数を追加することができます。これでバブルソートの実行結果が（ソートの後で）得られるでしょう。サマリモードを終了するたびにこの活動をさせたいのであれば、同じフックに gnus-group-sort-groups-by-rank か gnus-group-sort-groups-by-score を追加できますが、いくらか遅くなるでしょう。

グループへのマーク
=========

もしいくつかのグループに対して何らかの命令を実行したい場合で、それらがグループバッファに連続してある場合には、通常通り命令に対して数字プレフィックスを与えるだけです。そうすればほとんどのグループコマンドは、これらのグループに対してあなたの命令に従います。

しかしそれらのグループが順番に並んでいない場合においても、いくつかのグループに対して命令を実行することができます。単に始めにプロセスマークでグループにマークをつけておき、そして命令を実行するだけです。

#
M m
     現在のグループにマークをつける (gnus-group-mark-group)。

M-#
M u
     現在のグループからマークを削除する (gnus-group-unmark-group)。

M U
     全てのグループからマークを削除する (gnus-group-unmark-all-groups)。

M w
     ポイントとマークに間の全てのグループにマークをつける (gnus-group-mark-region)。

M b
     バッファ内の全てのグループにマークをつける (gnus-group-mark-buffer)。

M r
     ある正規表現にマッチする全てのグループにマークをつける (gnus-group-mark-regexp)。

see Process/Prefix も参照してください。

プロセスマークが付けられている全てのグループに対して何かの命令を実行したいときは、M-& (gnus-group-universal-argument) 命令を使うことができます。プロンプトから実行したい命令を入力します。

外部グループ
======

以下では、一般的な外部グループの作成、変更を行うグループモードの命令をいくつか、および特別な目的のグループの簡単に作成する命令を紹介します。これらの命令は全て、新規に作成したグループをポイント位置に挿入します―― gnus-subscribe-newsgroup-method は参照されません。

G m
     新しいグループを作成します (gnus-group-make-group)。Gnus はプロンプトを表示して、名前とメソッドと、場合によっては address の入力を求めてきます。より簡単に NNTP グループを購読する方法は、 see Browse Foreign Server を参照してください。

G r
     現在のグループの名前を、何か別のものに変更します (gnus-group-rename-group)。これはある種のグループ――主にメールグループに対してのみ有効です。このコマンドはバックエンドによっては非常に遅いことも有り得ます。

G c
     グループパラメータをカスタマイズする (gnus-group-customize)。

G e
     現在のグループの選択メソッドを修正するためのバッファに移動します (gnus-group-edit-group-method)。

G p
     グループパラメータを修正するためのバッファに移動します (gnus-group-edit-group-parameters)。

G E
     グループ情報を修正するためのバッファに移動します (gnus-group-edit-group)。

G d
     ディレクトリグループを作成します (see Directory Groups)。ディレクトリ名をプロンプト入力します (gnus-group-make-directory-group)。

G h

     Gnus ヘルプグループを作成します (gnus-group-make-help-group)。

G a
     Gnus アーカイブグループを作成します (gnus-group-make-archive-group)。デフォルトでは最も最近の記事を指しているグループが作成されますが (gnus-group-recent-archive-directory)、プレフィックスを与えると全ての記事を含むグループが gnus-group-archive-directory を基に作成されます。

G k
     kiboze グループを作成します。プロンプトで名前と、kiboze グループに「含めたい」グループにマッチする正規表現と、ヘッダとマッチする文字列の組を入力します (gnus-group-make-kiboze-group)。See Kibozed Groups。

G D
     任意のディレクトリを nneething バックエンドニュースグループであるかのように読み込みます (gnus-group-enter-directory)。 See Anything Groups.

G f
     ファイルなどをもとにグループを作成します (gnus-group-make-doc-group)。このコマンドにプレフィックスを与えた場合、ファイル名とファイルタイプをプロンプトで入力します。現在サポートされているファイルタイプは、babyl, mbox, digest, mmdf, news, rnews, clari-briefs, rfc934, rfc822-forward, forward です。プレフィックスなしでこのコマンドを実行すると、gnus はファイルタイプを推測します。 See Document Groups。

G u
     gnus-useful-groups にあるグループの一つをつくります (gnus-group-make-useful-group)。

G w
     ウェブ検索結果をもとに一時的なグループを作成します (gnus-group-make-web-group)。このコマンドにプレフィックスを与えると、一時的ではなく固定したグループを作成します。プロンプトで検索機関の種類 (search engine type) と検索文字列を入力します。有効な検索機関の種類には dejanews, altavista, reference があります。 See Web Searches.

     もし、dejanews 検索機関を用いる場合には、~g alt.sysadmin.recovery shaving のようなマッチする文字列を用いることによって、検索対象を特定のグループに限定することが可能です。

G DEL
     この関数は現在のグループを削除します (gnus-group-delete-group)。プレフィックスが与えられると、この関数はそのグループ内の全記事を本当に削除し、グループ自身をこの世から強制的に抹殺してしまいます。プレフィックスは、あなたが何をやろうとしているか、本当に自信があるときにのみ使ってください。まあ、このコマンドは（nntp グループのような）読み出し専用グループには使えませんけど。

G V
     新しい、新鮮な、空の nnvirtual グループを作成します (gnus-group-make-empty-virtual)。See Virtual Groups.

G v
     現在のグループを nnvirtual グループに追加します (gnus-group-add-to-virtual)。これはプロセスマーク・プレフィックスルールに従います。

さまざまな選択メソッドに関するさらなる情報は see Select Methods を参照してください。

もし gnus-activate-foreign-newsgroups が正の数であれば、gnus は起動時に、この数かそれよりも小さいレベルの外部グループを全てチェックします。これは特に違った NNTP サーバからたくさんのグループを購読している場合など、しばらく時間がかかるかもしれません。see Group Levels も参照して下さい。gnus-activate-level も外部ニュースグループの活動化に影響を及ぼします。

グループパラメータ
=========

グループパラメータは、ある特定のグループローカルな情報を格納します。以下はグループパラメータリストの例です：

     ((to-address . "ding@gnus.org")
      (auto-expire . t))

それぞれの要素は『点対』(dotted pair)――つまり点 (dot) の前に鍵、点の後ろに値があるもの、で構成されます。全てのパラメータはこの形式を取りますが、例外として局所変数の指定は点対ではなく通常のリストになります。

以下は利用可能なグループパラメータです：

to-address
     フォローアップとニュースへの投稿をするときに使用されるアドレス。

          (to-address .  "some@where.com")

     これは主に、クローズドなメーリングリストを表わすメールグループにおいて便利なものです――すなわちメーリングリストに投稿する人は全てそれを購読しているはず、というメーリングリストのことです。このパラメータを使用すると、メールはそのメーリングリストにしか投稿されないことが保証されるので、参加者はあなたのフォローアップ記事を２通受け取ることはありません。

     to-address を指定すると、そのグループが外部グループであるかどうかに関わらず有効になります。例えば fa.4ad-l というグループがサーバ上にあったとしましょう。これは本当のニュースグループですが、サーバはメールニュースゲートウェイを通して記事を受け付けます。つまりこのグループに対して直接投稿することは不可能で、代わりにそのメーリングリストにメールを送信しなければなりません。

to-list
     そのグループで a を押したときに使用されるアドレス。

          (to-list . "some@where.com")

     これはフォローアップをしたときは完全に無視されます――例外はそれがニュースグループを表わしているときは、f を押したときにメールグループのルールが適用されるということです。

     もし a コマンドをメールグループで実行したときに、to-list グループパラメータも to-address もグループパラメータも無ければ、 to-list グループパラメータは、gnus-add-to-list が t に設定されていればメッセージ送信時に自動的に付加されます。

     もし a コマンドをメールグループで実行したとき、to-list グループパラメータがなければ、送信時に自動的に付加されます。

visible
     グループパラメータのリスト中に (visible . t) という要素があれば、そのグループはグループバッファにおいて、未読記事があるかどうかに関わらず、常に表示されます。

broken-reply-to
     (broken-reply-to . t) という要素があれば、そのグループでは Reply-To は無視される、という意味です。これはある listserv によるメーリングリストを購読していて、それが Reply-To 欄を listserv 自身に返すようにつけられている場合に有効でしょう。これはおかしな振る舞いです。だからこれが要るんです！

to-group
     (to-group . "some.group.name") という要素は、そのグループへの投稿は全て some.group.name に送られる、という意味です。

newsgroup
     グループパラメータリストに (newsgroup . t) があれば、gnus は全てのレスポンスをニュース記事に対するレスポンスであるかのように扱います。これは実際にはニュースグループのミラーであるメールグループに対して有効です。

gcc-self
     グループパラメータリストに (gcc-self . t) があれば、新しく作成するメッセージは現在のグループに Gcc されます。もし (gcc-self . none) があれば、Gcc: 欄は生成されず、(gcc-self . "string") があればこの文字列はそのまま gcc 欄に挿入されます。このパラメータは以下で説明する全ての Gcc のデフォルトルールよりも優先されます (see Archived Messages)。

auto-expire
     グループパラメータに (auto-expire . t) のような要素があれば、全ての既読記事はエクスパイアされるようにマークされます。他の方法については see Expiring Mail を参照してください。

total-expire
     グループパラメータに (total-expire . t) のような要素があれば、既読記事は、エクスパイアのマークがついていなくとも全てエクスパイア処理を施されます。注意して使用してください。未読記事、印付き記事、保留記事はエクスパイアされません。

expiry-wait
     グループパラメータに (expiry-wait . 10) のような要素があれば、この値は記事をエクスパイアするときに nnmail-expiry-wait と nnmail-expiry-wait-function の設定よりも優先されます。この値はエクスパイアの日数（整数である必要はない）かもしくは never か immediate のシンボルを指定できます。

score-file
     (score-file . "file") のような要素は、file を現在のグループに適用されるスコアファイルにします。適用されるスコアエントリは全てこのファイルに入ります。

adapt-file
     (adapt-file . "file") のような要素は、file を現在のグループの適用ファイルにします。全ての適用スコアエントリはこのファイルに入ります。

admin-address
     メーリングリストから脱会するときは、脱会通知メールをそのメーリングリスト自身に送信してはいけません。代わりに管理用アドレスにメッセージを送信します。このパラメータにはどこか便利な管理用アドレスを書いておくことができます。

display
     (display . MODE) のような要素は、グループに入るときにどの記事を表示するかを指定します。有効な値は、

     all
          未読、既読記事の両方を全て表示します。

     default
          デフォルトの表示記事を表示します。これは通常は未読記事と印付き記事です。

comment
     (comment . "This is a comment") のような要素は、そのグループに対する任意のコメントです。これは現在の gnus では無視されますが、特定のグループに対する情報を格納する場所を提供します。

(VARIABLE FORM)
     グループに入るときに、そのグループローカルの変数を設定するグループパラメータを使用することができます。news.answers においてスレッド表示を行いたくないときは、そのグループにグループパラメータに (gnus-show-threads nil) と書けます。 gnus-show-threads は、そのサマリバッファの中のローカル変数になり、form の nil はそこで評価されます。

     これはもし必要であれば、グループ毎のフック関数としても使用できます。もしあるグループに入ったときにビープ音を鳴らしたければ、そのグループのパラメータに (dummy-variable (ding)) みたいなものを書いておくこともできます。 dummy-variable という変数に (ding) の評価結果が設定されますが、まあ、誰も気にしないでしょ？

グループパラメータの修正には G p 命令を使ってください。トピックパラメータについて読んでみることも面白いでしょう (see Topic Parameters)。

グループの一覧表示
=========

これらのコマンドは、利用できるグループをいろいろに切り分けて表示します。

l
A s
     未読記事を持つ全てのグループを表示します (gnus-group-list-groups)。数字プレフィックスを使うと、このコマンドは引数の数かそれよりも小さいレベルのグループのみを表示します。デフォルトでは、これはレベル 5（つまり gnus-group-default-list-level）かそれより小さいレベル（すなわち購読しているグループのみ）を表示します。

L
A u
     未読記事のあるなしに関わらず、全てのグループを表示します (gnus-group-list-all-groups)。数字プレフィックスを使用すると、このコマンドは引数の数かそれよりも小さいレベルのグループのみを表示します。デフォルトでは 7 かそれよりも小さいレベルのグループ（すなわち購読、非購読のグループのみ）が表示されます。

A l
     ある特定のレベルの未読記事のあるグループを表示します (gnus-group-list-level)。プレフィックスを与えると、未読記事のないグループも含めて表示します。

A k
     kill されたグループを全て表示します (gnus-group-list-killed)。プレフィックス引数を与えると、現在購読、非購読となっていない全ての利用可能なグループを表示します。これはサーバからアクティブファイルを読むことになるでしょう。

A z
     全てのゾンビグループを表示します (gnus-group-list-zombies)。

A m
     正規表現にマッチする名前を持つグループで、未読記事のある購読グループを全て表示します (gnus-group-list-matching)。

A M
     正規表現にマッチするグループを表示する (gnus-group-list-all-matching)。

A A
     今接続しているサーバのアクティブファイルにあるグループを、本当に全部表示します (gnus-group-list-active)。これはしばらく時間がかかることも有り得ます。たぶん A M を実行して、マッチさせたい部分を . として全てのマッチするリストを表示させた方が良いでしょう。また、このコマンドは（まだ）存在しないグループも表示するかも知れません――これは kill されたグループであるかのように表示されます。出力は多少割り引いて受け取ってね。

A a
     正規表現にマッチする名前を持つグループを全て表示する (gnus-group-apropos)。

A d
     正規表現にマッチする名前か説明文を持つグループを全て表示する (gnus-group-description-apropos)。

gnus-permanently-visible-groups 正規表現にマッチするグループは、未読記事があるかないかに関わらず常に表示されます。あるいはグループパラメータにおいて visible 要素を追加することでも同様の効果を得ることができます。

印付きの記事のみを持つグループは通常グループバッファに表示されます。もし gnus-list-groups-with-ticked-articles が nil であれば、そのグループは完全に空のグループであるかのように扱われます。デフォルトは t です。

グループのソート
========

C-c C-s (gnus-group-sort-groups) 命令は、グループバッファを gnus-group-sort-function 変数で与えられる関数に従って並べ替えます。利用可能な並べ替え関数 (sorting function) には以下のものがあります：

gnus-group-sort-by-alphabet
     グループ名でアルファベット順に並べ替えます。これが初期設定です。

gnus-group-sort-by-real-name
     グループを本当の（前に何もついていない）グループ名でアルファベット順に並べ変えます。

gnus-group-sort-by-level
     グループレベルで並べ替えます。

gnus-group-sort-by-score
     グループのスコアで並べ替えます。See Group Score.

gnus-group-sort-by-rank
     グループのスコアで並べ替え、次にグループレベルで並べ替えます。レベルとスコアは、ひとまとめにしてランクと呼ばれます。See Group Score.

gnus-group-sort-by-unread
     未読記事の数で並べ替えます。

gnus-group-sort-by-method
     選択メソッドのアルファベット順で並べ替えます。

gnus-group-sort-function は並べ替え関数のリストであっても構いません。この場合、もっとも重要な並べ替えの鍵を持つ関数は最後でなくてはなりません。

ある種の並べ替え用には、直接並べ替える命令もいくつかあります。

G S a
     グループバッファをグループ名のアルファベット順で並べ替えます (gnus-group-sort-groups-by-alphabet)。

G S u
     グループバッファを未読記事の数で並べ替えます (gnus-group-sort-groups-by-unread)。

G S l
     グループバッファをグループレベルで並べ替えます (gnus-group-sort-groups-by-level)。

G S v
     グループバッファをグループのスコアで並べ替えます (gnus-group-sort-groups-by-score)。See Group Score.

G S r
     グループバッファをグループのランクで並べ替えます (gnus-group-sort-groups-by-rank)。See Group Score.

G S m
     グループバッファをバックエンドの名前でアルファベット順に並べ替えます (gnus-group-sort-groups-by-method)。

プレフィックスを与えたときは、これらの命令は全て逆順に並べ替えます。

また、グループの一部を並べ替えることもできます。

G P a
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、グループ名のアルファベット順で並べ替えます (gnus-group-sort-selected-groups-by-alphabet)。

G P u
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、未読記事の数で並べ替えます (gnus-group-sort-selected-groups-by-unread)。

G P l
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、グループレベルで並べ替えます (gnus-group-sort-selected-groups-by-level)。

G P v
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、グループのスコアで並べ替えます (gnus-group-sort-selected-groups-by-score)。See Group Score.

G P r
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、グループのランクで並べ替えます (gnus-group-sort-selected-groups-by-rank)。See Group Score.

G P m
     グループバッファ内のプロセスマーク・プレフィックス指定されたグループを、バックエンドの名前でアルファベット順に並べ替えます (gnus-group-sort-selected-groups-by-method)。

グループの管理
=======

b
     不正なグループを見つけて、削除します (gnus-group-check-bogus-groups)。

F
     新しいグループを見つけて、それらを処理します (gnus-group-find-new-groups)。1回の C-u の後で押されると、サーバーに新しいグループを尋ねるために方法 ask-server を使います。 2回の C-u の後で押されると、サーバーに新しいグループを尋ねるために最も完全であると思われる方法を用い、新しいグループをゾンビとして購読します。

C-c C-x
     現在のグループのエクスパイア記事に対して（もしあれば）全てエクスパイア処理を行います (gnus-group-expire-articles)。

C-c M-C-x
     全てのグループの全ての記事に対して、エクスパイア処理を行います (gnus-group-expire-all-groups)。

外部サーバの閲覧
========

B
     選択メソッドとサーバ名を聞かれます。Gnus はこのサーバに接続し、そこにあるグループを閲覧しようとします (gnus-group-browse-foreign-server)。

利用可能なグループのリストを持った新しいバッファが現れます。このバッファは gnus-browse-mode を使用します。このバッファは通常のグループバッファにちょっと（というか、とっても）似ています。

以下が閲覧モード (browse mode) で使用できるキー操作のリストです：

n
     次のグループに移動します (gnus-group-next-group)。

p
     一つ前のグループに移動します (gnus-group-prev-group)。

SPACE
     現在のグループに入り、最初に記事を表示します (gnus-browse-read-group)。

RET
     現在のグループに入ります (gnus-browse-select-group)。

u
     現在のグループを非購読にする、つまりこの場合は購読することになるのだけれど (gnus-browse-unsubscribe-current-group)。

l
q
     閲覧モード (browse mode) を終了します (gnus-browse-exit)。

?
     閲覧モード (browse mode) を簡単に説明します（まあ、大して説明することもないんだけどさ）(gnus-browse-describe-briefly)。

Gnus の終了
========

そう、gnus は最後（サイコー）です（訳注: く、苦しい。原文は ``Yes, gnus is ex(c)iting.''）。

z
     Gnus を中断します (gnus-group-suspend)。これは gnus を実際には終了させず、グループバッファ以外の全てのバッファを消すだけです。僕はこれのうれしさがよくわかんないんだけど、誰か分かる人いる？

q
     Gnus を終了します(gnus-group-exit)。

Q
     .newsrc ファイルをセーブせずに gnus を終了します (gnus-group-quit)。ドリブルファイルはセーブされますけど (see Auto Save)。

Gnus を中断するときは gnus-suspend-gnus-hook が呼び出されます。 Gnusを終了するときは gnus-exit-gnus-hook が呼び出され、さらに gnus を終了するときの最後として gnus-after-exiting-gnus-hook が呼び出されます。

もし gnus とそれに関連するものを完全に処分したいのであれば、 gnus-unload コマンドが使えます。このコマンドは、メタ変数をカスタマイズしようとしているときにも便利です。

Note:

     ミス Lisa Cannifax は英語の授業中、後ろに座っている少年が彼女のプラスティックの椅子の背越しに、鉛筆で繰り返し線を描くのにつられて、足がしびれて重くなり、意識が朦朧としてきました。

Group Topics
============

もしあなたがたーくさんのグループを読んでいるのであれば、グループをトピック毎に階層分けできると便利でしょう。Emacs のグループをこっちへ、セックスのグループをあっちへ、で、残りを（え？グループが２つくらいしかないの？）邪魔にならないようにその他のセクションに入れましょう。あるいは Emacs セックスのグループを Emacs グループ、セックスグループのどちらかの副トピックとすることさえもできます――あるいは両方に！すんごいでしょう！

これが例です：

     Gnus
       Emacs -- こいつはすげーぜ!
          3: comp.emacs
          2: alt.religion.emacs
         えっちな Emacs
          452: alt.sex.emacs
            0: comp.talk.emacs.recovery
       その他
          8: comp.binaries.fractals
         13: comp.sources.unix

この素晴らしい機能を使うには、gnus-topic マイナーモードを（何と！）単にスイッチオンするだけ――グループバッファで、t を押してください（これはトグルコマンドです）。

さあやってみよう。とにかく試してみて。君が戻ってくるまで、僕はここで待ってるからさ。ララ、タララン…ん、いい曲だね、これ…ラ、ラ、ラ…え? 戻ってきた？よし、じゃ次は l を押してみて。ほら。これで全てのグループが misc の下に表示されました。興奮してクラクラしてこない？アツくって、いまいましいくらいでしょ？

これをずっと有効にしたければ、グループモードのフックにこのマイナーモードを追加してください。

     (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

トピック変数
------

さて、トピックを選ぶと、トピックは折り畳まれます。これ、とってもステキだと思うんだけど。

トピック行は、gnus-topic-line-format 変数の値に従って作成されます (see Formatting Variables)。有効な要素は、

i
     字下げ。

n
     トピック名。

v
     見えるかどうか。

l
     レベル。

g
     トピック中のグループの数。

a
     トピック中の未読記事の数。

A
     トピックと全ての副トピックの未読記事の数。

各副トピック（と副トピック内のグループ）は、トピックレベル数の gnus-topic-indent-level 倍の空白分の字下げが行われます。デフォルトは 2 です。

gnus-topic-mode-hook はトピックマイナーモードバッファで呼び出されます。

gnus-topic-display-empty-topics はトピックの中に未読記事が無い場合でもそのトピックを表示するようにします。デフォルトは t です。

トピック命令
------

トピックマイナーモードが有効であるときは、T サブマップが新しく利用できるようになります。さらに標準キーの中でも、定義がちょっと変わるものが少しあります。

T n
     新しいトピックの名前をプロンプト入力し、それを作成します (gnus-topic-create-topic)。

T m
     現在のグループを、どこか他のトピックに移動させます (gnus-topic-move-group)。このコマンドはプロセスマーク・プレフィックスルールに従います (see Process/Prefix)。

T c
     現在のグループを、どこか他のトピックにコピーします (gnus-topic-copy-group)。このコマンドはプロセスマーク・プレフィックスルールに従います (see Process/Prefix)。

T D
     グループを現在のトピックから削除します(gnus-topic-remove-group)。この命令は主にいくつかのトピックに同じグループがあって、それをトピックの一つから取り除きたいときに役立ちます。あなたはグループを全てのトピックから取り除きたいと思うかも知れませんが、その場合は、gnus はあなたが次回に gnus を起動したときにそれをルートトピックに付け加えます。実際のところ、全ての新しいグループ (もちろん、それはどのトピックにも属していません) はルートトピックに現われます。

     この命令はプロセス印/接頭引数の習慣に従います (see Process/Prefix)。

T M
     正規表現にマッチする全てのグループを、あるトピックに移動させます (gnus-topic-move-matching)。

T C
     正規表現にマッチする全てのグループを、あるトピックにコピーします (gnus-topic-copy-matching)。

T h
     空のトピックの表示・非表示を切り替えます (gnus-topic-toggle-display-empty-topics)。

T #
     現在のトピックにあるグループ全てにプロセスマークをつけます (gnus-topic-mark-topic)。

T M-#
     現在のトピックにある全てのグループからプロセスマークを消します (gnus-topic-unmark-topic)。

RET
SPACE
     グループを選択するか、あるいはトピックを折りたたみます (gnus-topic-select-group)。グループの上でこのコマンドを実行すると、通常通りそのグループに入ります。トピック行の上で行うと、そのトピックは（既に表示されているときは）折りたたまれるか、（既に折りたたまれているときは）展開されます。つまりトピックに対してはこれはトグルコマンドです。さらに、数字プレフィックスを与えると、そのレベル（とそれよりも小さいレベル）のグループが表示されます。

T TAB
TAB
     現在のトピックの ``字下げ'' を行い、その前のトピックの副トピックにします (gnus-topic-indent)。接頭引数を与えると、反対にそのトピックの字下げを戻します。

M-TAB
     現在のトピックの ``字下げ回復'' (un-indent) を行い、それが現在の親の親の副トピックになるようにします (gnus-topic-unindent)。

C-k
     グループあるいはトピックを kill します(gnus-topic-kill-group)。トピック内にあったグループも全て、トピックと一緒に削除されます。

C-y
     直前の kill されたグループあるいはトピックを yank します (gnus-topic-yank-group)。全てのトピックは、全てのグループの前に yank されることに気をつけてください。

T r
     トピックの名前を変更する (gnus-topic-rename)。

T DEL
     空のトピックを削除する (gnus-topic-delete)。

A T
     Gnus が知っているトピック化されたグループを全て表示します (gnus-topic-list-active)。

G p
     トピックパラメータを修正します (gnus-topic-edit-parameters)。 See Topic Parameters.

トピックの並べ替え
---------

以下に示す命令で、各トピック毎に別々にグループを並べ替えることができます：

T S a
     現在のトピックをグループ名のアルファベット順に並べ替えます (gnus-topic-sort-groups-by-alphabet)。

T S u
     現在のトピックを未読記事の数で並べ替えます (gnus-topic-sort-groups-by-unread)。

T S l
     現在のトピックをグループのレベルで並べ替えます (gnus-topic-sort-groups-by-level)。

T S v
     現在のトピックをグループのスコアで並べ替えます (gnus-topic-sort-groups-by-score)。See Group Score.

T S r
     現在のトピックをグループのランクで並べ替えます (gnus-topic-sort-groups-by-rank)。See Group Score.

T S m
     現在のトピックをバックエンドの名前でアルファベット順に並べ替えます (gnus-topic-sort-groups-by-method)。

グループのソートについてのさらなる情報は see Sorting Groups を参照してください。

トピックの位相構造
---------

それでは、グループバッファの例を見ていきましょう。

     Gnus
       Emacs -- こいつはすげーぜ!
          3: comp.emacs
          2: alt.religion.emacs
         えっちな Emacs
          452: alt.sex.emacs
            0: comp.talk.emacs.recovery
       その他
          8: comp.binaries.fractals
         13: comp.sources.unix

つまり、ここでは一つのトップレベルのトピック (Gnus) があり、その下に２つのトピックがあり、そのうちの一方の副トピック中に一つ副トピックがあります（トップレベルトピックは常に一つしかありません）。この構造は、以下のように表現できます：

     (("Gnus" visible)
      (("Emacs -- こいつはすげーぜ!" visible)
       (("えっちな Emacs" visible)))
      (("その他" visible)))

これは実に、上記の表示を行うための、変数 gnus-topic-topology の値そのものなのです。この変数は.newsrc.eld ファイルに保存され、手でいじくり回してはいけません――本当にやりたいときは別ですが。この変数は .newsrc.eld ファイルから読み込まれるので、その他のスタートアップファイルの設定には全く影響を与えません。

この構造は、どのトピックがどのトピックの副トピックであるかと、どのトピックが表示されているかを示しています。現在は二つの設定値――visible と invisible が許されています。

トピックパラメータ
---------

トピック内の全てのグループはグループパラメータを、その親（と先祖）のトピックパラメータから継承します。グループパラメータとして正しいものは全て、トピックパラメータとしても正しいものです(see Group Parameters)。

グループパラメータは（もちろん）トピックパラメータよりも優先され、副トピックのトピックパラメータは親トピックのトピックパラメータよりも優先されます。分かるよね。ごく普通の継承ルールです（ルール (Rules) はここでは名詞であって、動詞の「線を引く」ではありません。このルールには反対したくなるかも知れないけど、それはご自由に）。

     Gnus
       Emacs
          3: comp.emacs
          2: alt.religion.emacs
        452: alt.sex.emacs
         息抜き
          452: alt.sex.emacs
            0: comp.talk.emacs.recovery
       その他
          8: comp.binaries.fractals
         13: comp.sources.unix
        452: alt.sex.emacs

Emacs トピックはトピックパラメータ (score-file . "emacs.SCORE") を持っています。息抜き トピックはトピックパラメータ (score-file . "relief.SCORE") を持ち、その他 トピックはトピックパラメータ (score-file . "emacs.SCORE") を持っています。さらに、 alt.religion.emacs はグループパラメータ (score-file . "religion.SCORE") を持っています。

さて、ここで 息抜き トピックの alt.sex.emacs グループに入ったとき、relief.SCORE が基本スコアファイルとなります。もし Emacs トピックの同じグループに入ると、 emacs.SCORE が基本スコアファイルになるでしょう。

 alt.religion.emacs グループに入れば、 religion.SCORE が基本スコアファイルになるでしょう。

これってとっても簡単で自明のことのように見えるでしょ？まあ、その通りです。ですが問題がある場合もあります。特にtotal-expiry パラメータに関してです。例えばあるメールグループを二つのトピックの中に、一方は total-expiry ありで、もう一方はそれなしで持っているとしましょう。ここで M-x gnus-expire-all-expirable-groups を実行すると、何が起こるでしょうか？Gnus は、あなたがどちらのトピックから記事をエクスパイアしたいのかを知る方法がないため、最悪の事態が発生するかもしれません。実際、私はこのとき何が起こるのかは「未定義 undefined」である、とここに宣言します。この手のことをやりたい場合には十分注意しなければなりません。

その他のグループ関連
==========

^
     サーババッファモードに入る (gnus-group-enter-server-mode)。 See The Server Buffer。

a
     あるグループに記事を投稿する (gnus-group-post-news)。プレフィックスを与えると、現在のグループ名がデフォルトとして使用されます。

m
     メールをどこかに送る (gnus-group-mail)。

以下はグループバッファのための変数です：

gnus-group-mode-hook
     グループバッファが作成された時に呼び出されます。

gnus-group-prepare-hook
     グループバッファが生成されたあとに呼び出されます。これはバッファを何か変な、自然じゃない方法で修正したいときに使われるかもしれません。

gnus-group-prepared-hook
     グループバッファが生成された後の一番最後に呼び出されます。例えばポイントをどこかに移動させたいときなどに使えます。

gnus-permanently-visible-groups
     この正規表現にマッチするグループは、それが空であるかどうかに関わらず、常にグループバッファに表示されます。

新着メッセージを探す
----------

g
     サーバの新着記事をチェックします。数字プレフィックスを使用すると、この命令は引数 ARG かそれより小さいレベルのグループのみをチェックします (gnus-group-get-new-news)。数字以外のプレフィックスを与えると、この命令はそのバックエンドからアクティブファイルを強制的に全部読み直します。

M-g
     現在のグループに新着記事があるかどうかをチェックします (gnus-group-get-new-news-this-group)。 gnus-goto-next-group-when-activating はこの命令が次のグループ位置へ移動するかどうかを決めます。デフォルトは t です。

C-c M-g
     無条件に全てのグループを起動します (gnus-activate-all-groups)。

R
     Gnus をリスタートします (gnus-group-restart)。これは .newsrc ファイルをセーブし、全てのサーバの接続を閉じ、全ての gnus ランタイム変数をクリアした後、gnus をもう一度最初から開始します。

gnus-get-new-news-hook は新着ニュースをチェックする直前に実行されます。

gnus-after-getting-new-news-hook 新着ニュースをチェックした後に実行されます。

グループ情報
------

H f
     現在のグループの FAQ を取得しようとします(gnus-group-fetch-faq)。 Gnus は FAQ をgnus-group-faq-directory から取得しようとします。これは通常リモートマシン上のディレクトリです。この変数はディレクトリのリストであっても構いません。この場合、このコマンドにプレフィックスを与えることでいくつかのサイトの中から選ぶことができます。ファイルの取得には ange-ftp（または efs）が使用されます。

     もし最初のサイトからの取得が失敗した場合、gnus は gnus-group-faq-directory の値を全て、一つ一つオープンしてみようとします。

H d
C-c C-d
     現在のグループの説明を表示する (gnus-group-describe-group)。プレフィックスを与えると、説明文をサーバから強制的に再読み込みします。

M-d
     全てのグループの説明を表示します (gnus-group-describe-all-groups)。プレフィックスを与えると、説明文ファイルをサーバから強制的に再読み込みします。

H v
V
     現在の gnus のバージョン番号を表示します (gnus-version)。

?
     とても短いヘルプメッセージを与えます (gnus-group-describe-briefly)。

C-c C-i
     Gnus の info ノードに移動します (gnus-info-find-node).。

グループの日付
-------

Gnus に、あなたが最後にいつグループを読んだかを記録させると便利かもしれません。この活動を始めさせるには、 gnus-group-set-timestampを gnus-select-group-hook に追加してください。

     (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)

これを行った後、あなたがグループに入るたびにそれが記録されます。

この情報はさまざまな方法で表示できます――もっとも簡単なのは、グループ行フォーマットで %d 指定を使う方法です：

     (setq gnus-group-line-format
           "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")

この結果として、各行は以下のように表示されます：

     *        0: mail.ding                                19961002T012943
              0: custom                                   19961002T012713

見て分かるとおり、日付はコンパクトな ISO 8601 形式で表示されます。これではちょっとあんまりなので、以下のような感じにすると日付だけを表示できます。

     (setq gnus-group-line-format
           "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")

ファイル命令
------

r
     初期化ファイルの再読み込みを行う (gnus-init-file、このデフォルトは ~/.gnus) (gnus-group-read-init-file)。

s
     .newsrc.eldファイル（と、もしそうしたければ.newsrc ファイル）をセーブする(gnus-group-save-newsrc)。

概略バッファ
******

概略バッファ (summary buffer) ではそれぞれの記事が一行で表示されます。その中を動き回り、記事を読み、投稿し、返答をすることができます。

概略バッファに移る一番普通の方法は、グループバッファでグループを選択することです (see Selecting a Group)。

概略バッファは望むだけたくさん開いた状態にしておくことができます。

概略バッファの様式
=========

Gnus は変数 gnus-extract-address-components の値を From ヘッダーの名前とアドレスの部分を手に入れるための関数として使います。すでに定義されている関数が３つ存在します：gnus-extract-address-components はディフォルトですが、とても簡単に割り切った解決法で、非常に速く動作します。 mail-extract-address-components は良く動作しますが、やや遅くなります。そして、std11-extract-address-components はとても良く動作しますが、遅くなります。ディフォルトの関数は 5% の割合で間違って答えます。もしこれに我慢ならないのであれば、他の関数を代わりに使うことができます。

gnus-summary-same-subject は今読んでいる記事が、その前の記事と同じ表題 (subject) であることを示す文字列です。この文字列は仕様がこれを要求するときに使われます。ディフォルトでは "" です。

概略バッファの行
--------

変数 gnus-summary-line-format の値を変えることによって、概略バッファでの行の様式 (format) を変更することができます。いくつかの拡張 (see Formatting Variables) を除いて、普通の format 文字列と同じように動作します。

ディフォルトの文字列は %U%R%z%I%(%[%4L: %-20,20n%]%) %s\n です。

以下の様式指示文字を使うことができます:

N
     記事数。

S
     表題の文字列。

s
     スレッド (thread) の基記事であるときか直前の記事が違う表題のときはその題名で、それ以外は gnus-summary-same-subject。 (gnus-summary-same-subject のディフォルトの値は ""。)

F
     完全な From 欄。

n
     名前（From 欄より）。

a
     名前（From 欄より）。これと n との違いは、これは変数 gnus-extract-address-components で指定されている関数を使って名前を取得することです。この方が遅いですが、おそらくより完全に近いでしょう。

A
     名前（From 欄より）。これは a と同じように動作します。

L
     記事の行数。

c
     記事の文字数。

I
     スレッドのレベルによる字下げ (see Customizing Threading)。

T
     記事が本記事であれば何も表示せず、そうでない場合はたくさんの空白です（後のものをすべて画面の外に追い出してしまいます）。

[
     開き括弧。普通は [ ですが、養子記事には < にすることができます (see Customizing Threading)。

]
     閉じ括弧。普通は [ ですが、養子記事には < にすることができます。

>
     それぞれのスレッドのレベルに対して一つの空白。

<
     二十引くスレッドレベルの空白。

U
     未読。

R
     この紛らわしい名前指定子は secondary mark によって定義されます。このマークは記事が既に返答済みのものか、キャッシュされたものか、あるいは保存されたものかを表します。

i
     数字としてのスコア (see Scoring)。

z
     これは、zcore でディフォルトのレベルよりも上であれば + で、ディフォルトのレベルよりも下であれば - です。 gnus-summary-default-score との差が gnus-summary-zcore-fuzz よりも小さいと、この仕様は使われません。

V
     スレッド全体のスコア。

x
     Xref.

D
     日付 (Date)。

d
     DD-MM様式による日付。

o
     YYYYMMDDTHHMMSS様式による日付。

M
     Message-ID.

r
     References.

t
     現在の副スレッドの記事の数。この仕様を使うと概略バッファの生成が幾分遅くなります。

e
     記事に子記事があると、= (gnus-not-empty-thread-mark) が表示されます。

P
     行数。

O
     ダウンロードの印。

u
     利用者定義指定子。フォーマット文字列の中の次の文字が英字である必要があります。これにより gnus は関数 gnus-user-format-function-X を呼び出しますが、ここで X は %U の次の文字です。関数には現在の記事のヘッダーが引数として渡されます。関数は文字列を返し、他の概略指定と同様に概略に挿入されます。

%U（状態）、%R（返答済み）、%z (zcore) の扱いには気を付ける必要があります。効率のために、gnus はこれらの文字がどの桁に現れるかを計算し、『ハード・コード』します。これは、可変長の仕様の後では、これらは意味を持たないということです。まぁ、さすがに逮捕はされないでしょうが、概略バッファは変になります。それでも十分悲しいでしょうけど。

賢い選択はこれらの指定をできるだけ左に持ってくることです。（でも、そういうことはすべてに当てはまるのではないでしょうか。閑話休題。）

この制限は将来の版では無くなるかも知れません。

概略バッファのモード行
-----------

概略のモード行の様式も変更することができます (see Mode Line Formatting)。gnus-summary-mode-line-format を何でも好きなものに変更してください。ディフォルトは Gnus: %%b [%A] %Z です。

以下があなたが遊ぶことのできるそれぞれの要素です：

G
     グループ名。

p
     接頭語を取り除いた名前。

A
     現在の記事番号。

z
     現在の記事スコア。

V
     Gnus バージョン。

U
     そのグループでの未読記事の数。

e
     概略バッファに表示されていない未読記事の数。

Z
     未読と未選択の記事の数とともに表される文字列で、未読かつ未選択の記事がある場合は <%U(+%e) more> で、未読記事のみの場合は <%U more> です。

g
     短縮グループ名。例えば、rec.arts.anime は r.a.anime に短縮されます。

S
     現在の記事の表題。

u
     利用者定義の仕様 (see User-Defined Specs)。

s
     現在のスコアファイルの名前 (see Scoring)。

d
     保留記事の数 (see Unread Articles)。

t
     可視印付き記事の数 (see Unread Articles)。

r
     その一連の動作の間に既読として印がついた記事の数。

E
     スコアファイルによって抹消された記事の数。

概略のハイライト
--------

gnus-visual-mark-article-hook
     このフックは記事を選択した後に実行されます。これは何らかの方法で記事をハイライトするように意図されています。もし gnus-visual が nil である場合は実行されません。

gnus-summary-update-hook
     このフックは概略行が変更されたときに呼ばれます。もし gnus-visual が nil である場合は実行されません。

gnus-summary-selected-face
     これは概略バッファでの現在の記事をハイライトするために使われるフェイス (face)（もしくは、いくらかの人々が フォント (font) と呼ぶようなもの）です。

gnus-summary-highlight
     概略行はこの変数にしたがってハイライトされます。この変数は要素が (FORM . FACE) の形式のリストです。例えば、もし印付きの記事をイタリック、高いスコアの記事をボールドにしたければ、この変数を次のようにできます。

          (((eq mark gnus-ticked-mark) . italic)
           ((> score default) . bold))

     ご想像のとおり、もし FORM が nil でない値を返すと、 FACE がその行に適用されます。

概略間の移動
======

すべての直接移動命令は数値接頭引数を受け付け、あなたの期待によくしたがって動作するでしょう。

これらの命令はどれも記事を選択しません。

G M-n

M-n
     概略行の次の未読記事に移る (gnus-summary-next-unread-subject)。

G M-p
M-p
     概略行の前の未読記事に移る (gnus-summary-prev-unread-subject)。

G j

j
     記事番号か Message-ID を尋ね、それからその記事に行く。 (gnus-summary-goto-article)。

G g
     記事番号か Message-ID を尋ね、それからその記事を表示すること無く、概略行に行く (gnus-summary-goto-subject)。

Gnus が次のグループに移動することを確認をするために、キーを押すことを要求するときがあります。その時は、C-n と C-p を使って、グループバッファに戻ること無く次に読むグループを探すことができます。

概略の移動に関連した変数:

gnus-auto-select-next
     もし移動命令の一つ（n のような）を出し、現在の記事の後に未読が無ければ、gnus は次のグループに移動することを奨めます。この変数が tで次のグループが空であると、gnus は概略モードを終了して、グループバッファに戻ります。この変数が t や nil でないと、次のグループに記事があろうが無かろうが、gnus はそれを選択します。特別な場合として、この変数が quietly であると、gnus は確認をせずに、次のグループを選択します。この変数が almost-quietly であると、グループの一番最後の記事を読んでいたときに限り同じことが起こります。最後に、もしこの変数が slightly-quietly であると、命令 Z n は確認をせずに次のグループに移ります。see Group Levels も参照してください。

gnus-auto-select-same
     nil でないと、すべての移動命令は現在の記事と同じ表題の記事に移動しようとします。(同じ はここでは 大体同じ という意味かも知れません。詳細は gnus-summary-gather-subject-limit を見てください (see Customizing Threading も参照してください)。) 同じ表題の記事が無いときは最初の未読記事に移動します。

     この変数は、スレッド表示を行っているときはあまり役に立たないでしょう。

gnus-summary-check-current
     nil でないと、すべての『未読』移動命令は、次（もしくは前）の記事に移動しません。その代わりに、それらは現在の記事を選びます。

gnus-auto-center-summary
     nil でないと、gnus は概略バッファでのポイントを常に真中に保ちます。これをすると、とてもこぎれいになりますが、遅いネットワーク接続であったり、単にこの Emacsism でない行為を好きになれないのであれば、普通の Emacs のスクロールにするために、この変数を nil にすることができます。これは概略バッファの水平方向の真中への再移動も禁止しますので、非常に長いスレッドを読むときは不便かもしれません。

記事の選択
=====

命令の選択
-----

以下の移動コマンドはどれも数値接頭引数を受け付けず、記事を選択し、表示します。

SPACE
     現在の記事か、それが既に読まれている場合は次の未読記事を選択します (gnus-summary-next-page)。

G n
n
     次の未読記事に移動します (gnus-summary-next-unread-article)。

G p
p
     前の未読記事に移動します (gnus-summary-prev-unread-article)。

G N
N
     次の記事に移動します (gnus-summary-next-article)。

G P
P
     前の記事に移動します (gnus-summary-prev-article)。

G C-n
     同じ表題の次の記事に移動します (gnus-summary-next-same-subject)。

G C-p
     同じ表題の前の記事に移動します (gnus-summary-prev-same-subject)。

G f
.
     最初の未読記事に移動します (gnus-summary-first-unread-article)。

G b

,
     最高スコアの記事に移動します (gnus-summary-best-unread-article)。

G l
l
     直前の記事に移動します (gnus-summary-goto-last-article)。

G o
     概略の履歴 (history) から最後の記事を一つ取り出して選択します。 (gnus-summary-pop-article)。この命令が上の命令と違うのは、l が最終2つの記事の間を移動するのに対して、これは好きなだけ前の記事を履歴から選び出すことができる点です。何らかのこれに関係したことは（もしこれらの命令をたくさん使うのであれば）、see Article Backlog を参照してください。

選ぶための変数
-------

記事を移動し、選択するのに関連したいくつかの変数:

gnus-auto-extended-newsgroup
     この変数が nil でないと、すべての移動命令は、もしその記事が概略バッファに表示されていない場合でも、前（もしくは次）の記事に移動しようとします。その命令の後で、gnus はサーバーから記事を取得して、記事バッファに表示します。

gnus-select-article-hook
     このフックは記事が選択されたときに常に呼ばれます。ディフォルトでは、選択された記事の下に隠れているスレッドを見せるようになっています。

gnus-mark-article-hook
     このフックは記事が選択されたときに常に呼ばれます。それは記事に既読の印を付けるためにあります。ディフォルトの値は gnus-summary-mark-read-and-unread-as-read で、ほとんどすべての読んだ記事の印を gnus-read-mark に変更します。この関数に影響されない記事は、可視、保留、期限切れ削除可能記事だけです。もし、未読に既読の印を付けたいだけであれば、代わりに gnus-summary-mark-unread-as-read を使うことができます。それは、gnus-low-score-mark や gnus-del-mark（などなど）の印をそのまま残します。

記事のスクロール
========

SPACE
     SPACE は記事を一ページ先にスクロールします。記事の最後にいる場合は次の記事を選択します (gnus-summary-next-page)。

DEL
     現在の記事を一ページ前にスクロールします (gnus-summary-prev-page)。

RET
     現在の記事を一行先にスクロールします (gnus-summary-scroll-up)。

M-RET
     現在の記事を一行後ろへスクロールします (gnus-summary-scroll-down)。

A g
g
     現在の記事を（再）取得します。もし接頭引数が与えられると、現在の記事を取得しますが、記事を扱う関数は実行しません。これは、サーバーからきたままの、『生の』記事を与えます。

A <
<
     記事の最初までスクロールします。 (gnus-summary-beginning-of-article)。

A >
>
     記事の最後までスクロールします (gnus-summary-end-of-article)。

A s
s
     記事バッファでインクリメンタルサーチ (isearch) を行います (gnus-summary-isearch-article)。

h
     記事バッファを選択します (gnus-summary-select-article-buffer)。

返答、フォローアップ、投稿
=============

概略でのメールの命令
----------

メールメッセージを作成するための命令:

S r

r
     現在の記事を書いた人に返答のメールを送ります (gnus-summary-reply)。

S R
R
     現在の記事を書いた人に、本記事を含んだ返答のメールを出します (gnus-summary-reply-with-original)。この命令はプロセス/接頭引数の習慣を使います。

S w
     現在の記事を書いた人に対して、広い返答 (wide reply) をします (gnus-summary-wide-reply)。広い返答 とはヘッダーの To, From,（もしくは Reply-to) と Cc）のすべての人に返答をすることです。

S W
     現在の記事に本記事を含んだ広い返答のメールを送ります (gnus-summary-reply-with-original)。この命令はプロセス/接頭引数の習慣を使います。

S o m
     誰か他の人に現在の記事を転送します (gnus-summary-mail-forward)。接頭引数があると、転送記事の完全なヘッダーを取り込みます。

S m
m
     誰か他の人にメールを送ります (gnus-summary-mail-other-window)。

S D b
     メールを送ったのに、何らかの理由（アドレスの間違い、転送の不調）で戻ってきたときに、この命令を使って戻ってきたメールをもう一回送ることができます (gnus-summary-resend-bonced-mail)。もう一度メールを送る前にヘッダーを編集できるように、メールバッファにそのメールが現れるでしょう。この命令に接頭引数を与えて、戻ってきたメールが誰かへの返答であった場合、gnus はそのメールを取得して、それのヘッダーの精密調査ができるように画面に表示します。ま、これはとてもよく失敗しますけど。

S D r
     上の命令と混同しないように、gnus-summary-resend-message は現在のメッセージを送る先のアドレスの入力を促し、それからその場所にメールを送ります。メッセージのヘッダーは変更されません――しかし、Resent-To, Resent-From 等のヘッダーが付け加えられます。これは、（おそらく）あなた自身を To 欄に書いた本人にもメールを送ってしまうということです。これは混乱を招くでしょう。ですから、もちろん、本当に 邪悪 な気分のときにだけこれを使うでしょう。

     この命令は主に、あなたがいくつかのメールアカウント (account) を持っていて、自分自身の違ったアカウントにメールを転送したいときに用いられます。 (もしあなたが、ルート (root) であり、ポストマスター (postmaster) でもあり、ルート に ポストマスター へのメールを受け取った場合は、それを ポストマスター にも再送したいと思うでしょう。Ordnung mu,A_ sein!)

     この命令はプロセス/接頭引数の習慣に従います (see Process/Prefix)。

S O m
     現在の一連の記事 (see Decoding Articles) の要約を作り、メールでその結果を送ります (gnus-uu-digest-mail-forward)。この命令はプロセス/接頭引数の習慣に従います (see Process/Prefix)。

S M-c
     現在の記事の書き手に、過剰クロスポストへの苦情のメールを送ります (gnus-summary-mail-crosspost-complaint)。

     この命令は、現在 Usenet に横行している、クロスポストの世界的流行に対して反撃を行う手段として提供されています。これは変数 gnus-crosspost-complaint を序文にして、返答を作成します。この命令はプロセス/接頭引数の習慣 (see Process/Prefix) に従い、それぞれのメールを送る前に送信するかどうかの確認をします。

また see (message)Header Commands にさらなる情報があります。

概略の投稿命令
-------

ニュースの記事を投稿するための命令：

S p
a
     現在のグループに記事を投稿します (gnus-summary-post-news)。

S f
f
     現在の記事のフォローアップを投稿します (gnus-summary-followup)。

S F
F
     本記事を取り込んで、現在の記事にフォローアップをします (ggnus-summary-followup-with-original)。この命令はプロセス/接頭引数の習慣を用います。

S n
     メールのメッセージを受け取っていたとしても、本記事を引用して、現在の記事のフォローアップをニュースに投稿します (gnus-summary-followup-to-mail-with-original)。この命令はプロセス/接頭引数の習慣を用います。

S N
     Post a followup to the current article via news, even if you got the message through mail and include the original message (gnus-summary-followup-to-mail-with-original). この命令はプロセス/接頭引数の習慣を用います。

S o p
     現在の記事をニュースグループに転送します (gnus-summary-post-forward)。接頭引数が与えられたときは、転送記事のヘッダーを完全に取り込みます。

S O p
     現在の一連の記事を要約して、その結果をニュースグループに送ります (gnus-uu-digest-mail-forward)。この命令はプロセス/接頭引数の習慣を用います。

S u
     ファイルを Uuencode し、分割して、組にして投稿します (gnus-uu-post-news)。(see Uuencoding and Posting)。

また see (message)Header Commands にさらなる情報があります。

記事を取り消す
=======

何かを書いた後で、本当に、本当に、ほ ん と う にそれを投稿していなければなぁと思ったことはありませんか。

えーと、メールは取り消すことはできないのですが、ニュースの投稿は取り消すことができます。

取り消したい記事を見つけてください（取り消すことができるのは自分の記事だけです。変なことは試さないでください）。それから、 C か S cを押してください (gnus-summary-cancel-article)。あなたの記事が取り消されます――世界中の機械があなたの記事を取り消します。この命令はプロセス/接頭引数の習慣を用います (see Process/Prefix)。

しかし、注意してほしいのはすべてのサイト (site) が取り消しを扱っているわけではないことです。ですから、たいていのサイトが問題の記事を取り消しても、あちこちであなたの記事は生き残るかもしれません。

Gnus は、取り消すときに『現在』の選択方法を使います。標準の投稿方法を使いたいのであれば、文字接頭引数 a を使ってください(see Symbolic Prefixes)。

もし何か間違いをしたのに気付いて、訂正をしたいのであれば、代替 (superseding) 記事を投稿して本記事を置き換えることができます。

本記事のところへ移動して、S s を押してください (gnus-summary-supersede-article)。普通の方法でそれを送る前に、記事を好きなように編集することができます。代替に関しても、取り消しと同じことが当てはまります。こちらの方がもっとよく当てはまるかもしれません：いくつかのサイトは代替を受け付けません。これらのサイトでは、あなたがほとんど同じ記事を2回投稿したようになります。

もしさっき記事を投稿したばかりですぐに変更したくなた場合、記事が最初にあなたのサイトに現れる前に取り消し/代替をするための巧妙な手段があります。まず、投稿バッファ（*sent ... * のようになっています）に戻ります。そこにはあなたがちょうど投稿した記事があり、すべてのヘッダーがそのままあります。それらの中の Message-ID という語のところを変更することによって Message-ID ヘッダーを Cancel もしくは Supersedes に変更してください。

ちょっと覚えておいてください：`supersede'（代替）という語の中に `c' は無いということを。

記事に印を付ける
========

記事に付けられる印はいくつかあります。

記事の 購読度（おぉ、すんごい新語句だ！）を決定する印があります。英字の印は一般的には 既読を意味し、英字でない文字は一般的に未読を意味します。

加えて、購読度に影響しない印もあります。

これらの印を操作する過剰なくらいの命令があります：

未読記事
----

以下の印はいろいろな方法で記事に未読の（ような）印を付けます。

!
     可視記事 (Ticked) として印をつけます (gnus-ticked-mark)。

     可視記事とは、常に可視状態である記事のことです。おもしろいと思う記事があった場合や、単に読むのを先に延ばしたいときや、後で返答をしたいときに、普通は可視印を付けます。しかし、記事は期限切れ消去されることもありますので、永遠に記事を保存しておきたい場合は、その記事を永続にする必要があります (see Persistent Articles)。

?
     保留として印を付けます (gnus-dormant-mark)。

     保留記事はフォローアップがあったときにだけ概略バッファに現れます。フォローアップが無いときも表示させたいときは、命令 / D を使うことができます。

SPACE
     未読として印を付けます (gnus-unread-mark)。

     未読記事は今まで全く読まれていない記事のことです。

既読記事
----

以下のすべての印は記事に既読の印を付けます。

r
     利用者が手動やそのようなもので命令 d によって既読の印を付けた記事です (gnus-del-mark)。

R
     実際に読まれた記事 (gnus-read-mark)。

O
     前回のセッションで既読の印を付けて、今は古くなってしまった記事。

K
     削除の印 (gnus-killed-mark)。

X
     削除ファイルによって削除の印がついた記事 (gnus-kill-file-mark)。

Y
     低すぎるスコアのために既読の印がついた記事 (gnus-low-score-mark)。

C
     キャッチアップによって既読の印がついた記事 (gnus-catchup-mark)。

G
     取り消された記事 (gnus-canceled-mark)。

F
     SOUP されている記事 (gnus-souped-mark)。 See SOUP.

Q
     まばらに参照された記事 (gnus-sparse-mark)。 See Customizing Threading.

M
     重複抑制により既読の印のついた記事 (gnus-duplicated-mark)。 See Duplicate Suppression.

これらのすべての印は、本当はただ記事が既読として印がついていることを意味するだけです。適応スコアリングをしたときには違ったように解釈されますけれど。

もう一つ、特別な印があります：

E
     期限切れ削除可能として印のついた記事 (gnus-expirable-mark)。

     記事を期限切れ削除可能として印を付ける（もしくは、自動的にそのように印を付ける）ことは、普通のグループではあまり意味がありません――利用者はニューズ記事の期限による削除を制御していません。しかし、例えばメールグループでは、期限切れ削除可能として印のついた記事は、いつでも gnus によって削除されることがあります。

他の印
---

記事が読まれたかどうかには関係しない印がいくつかあります。

  * 現在の記事にしおりを挟むことができます。あなたは猫の尿の習慣に関する長い論文を読んでいて、それを読み終わる前に夕食を食べるために家に帰らなければならなかったとしましょう。そのときに、記事にしおりを挟むことができ、次にその記事に出くわしたときに、gnus はそのしおりのところへ移動するでしょう。 See Setting Marks

  * 返答をしたか、フォローアップをした（例えば、答えた）記事はすべて２桁目に A の印がつきます (gnus-replied-mark)。

  * 記事キャッシュに貯められている記事は２桁目に * の印がつきます (gnus-replied-mark)。 See Article Caching

  * （何らかの方法によって；必ずしも宗教的というわけではなく）『保存された』記事は２桁目に S の印がつきます (gnus-saved-mark)。

  * もし %e の仕様が使われると、スレッドがあるかどうかは、３桁目に gnus-not-empty-thread-mark と gnus-empty-thread-mark のそれぞれによって印がつきます。

  * 最後に プロセス印 があります(gnus-process-mark)。いろいろな種類の命令がプロセス印があるとそれに対して実行されます。例えば、X u (gnus-uu-decode-uu) はプロセス印の付いたすべての記事を uudecode して、表示します。プロセス印の付いた記事は２桁目に # があります。

これらの『非購読度』の印はディフォルトではたいてい２桁目に現れるということに気付いたかもしれません。ですから、キャッシュされていて、保存されていて、返答をした記事にプロセス印が付いている場合、どのようになるのでしょう？

たいしたことはありません。優先順位は次のようになっています： プロセス → キャッシュ → 返答済み → 保存。ですから、ある記事がキャッシュに入っていて、返答されていた場合、キャッシュ印があるだけで、返答済み印はありません。

印を付ける
-----

すべての印つけ命令は数値接頭引数を受け付けます。

M c
M-u
     現在の記事から、すべての購読度印を消去します (gnus-summary-clear-mark-forward)。要するに、記事に未読の印を付けます。

M t
!
     現在の記事に可視記事印を付けます (gnus-summary-tick-article-forward)。 See Article Caching

M ?
?
     現在の記事に保留記事印を付けます (gnus-summary-mark-as-read-forward)。

D
     現在の記事に既読の印を付け、前の行にポイントを移動します (gnus-summary-mark-as-read-backward)。

M k
k
     現在の記事と同じ表題を持つすべての記事を既読として印を付け、次の未読記事を選択します (gnus-summary-kill-same-subject-and-select)。

M K
C-k
     現在の記事と同じ表題を持つすべての記事を既読として印を付けます (gnus-summary-kill-same-subject)。

M C
     すべての未読記事に既読の印を付けます (gnus-summary-catchup)。

M C-c
     グループのすべての記事に――可視記事や保留記事でさえも、既読の印を付けます (gnus-summary-catchup-all)。

M H
     現在のグループのポイントまでを既読として印を付けます (gnus-summary-catchup-to-here)。

C-w
     ポイントとマークの間の記事に既読の印を付けます (gnus-summary-mark-region-as-read)。

M V k
     ディフォルトのスコア（もしくは数値接頭引数）よりも低いスコアの記事を削除します。

M e
E
     現在の記事を期限切れ削除可能として印を付けます (gnus-summary-mark-as-expirable)。

M b
     現在の記事にしおりを設定します (gnus-summary-set-bookmark)。

M B
     現在の記事のしおりを削除します (gnus-summary-remobe-bookmark)。

M V c
     ディフォルトのスコア（もしくは数値接頭引数）よりも大きいスコアを持つ記事のすべての印を消去します (gnus-summary-clar-above)。

M V u
     ディフォルトのスコア（もしくは数値接頭引数）よりも大きいスコアを持つすべての記事に可視印を付けます (gnus-summary-tick-above)。

M V m
     印の入力を促し、ディフォルトのスコア（もしくは数値接頭引数）よりも大きなスコアを持つすべての記事にその印を付けます(gnus-summary-mark-above)。

変数 gnus-summary-goto-unread は印が付けられた後にどのような動作がなされるかを決定します。もし nil でないと、ポイントは次/前の未読記事に移動します。もし nil であると、ポイントは一行上か下に行くだけです。特別な場合として、この変数が never であると、すべての印を付ける命令と（SPACE のような）他の命令は次の記事が未読であろうが無かろうがその記事に移動します。ディフォルトは t です。

プロセス印を付ける
---------

M P p
#
     スレッドか記事を未選択にします gnus-pick-unmark-article-or-thread)。変数 gnus-thread-hide-subtree が true であれば、このキーはスレッドの最初の記事で使われたときはスレッドを未選択にします。そうでない場合は、その記事だけを未選択にします。その行のスレッドか記事を未選択にするためにこのキーに数値接頭引数を与える事ができます。

M P u
M-#
     もし現在の記事にプロセス印があれば取り除きます (gnus-summary-unmark-as-processable)。

M P U
     すべての記事からプロセス印を取り除きます (gnus-summary-unmark-all-processable)。

M P i
     プロセス印の付いている記事とそうでない記事を逆にします (gnus-uu-mark-by-regexp)。

M P R
     正規表現によって記事に印を付けます (gnus-uu-mark-by-regexp)。

M P r
     リージョンの記事に印を付けます (gnus-uu-mark-region)。

M P t
     現在の（副）スレッドのすべての記事に印を付けます (gnus-uu-mark-thread)。

M P T
     現在の（副）スレッドのすべての記事から印を取り除きます (gnus-uu-unamrk-thread)。

M P v
     接頭引数よりも大きなスコアを持つすべての記事に印を付けます (gnus-uu-mark-over)。

M P s
     現在の一連の記事に印を付けます (gnus-uu-mark-series)。

M P S
     既にいくつか印の付いた記事を持つ一連の記事群全てに印を付けます (gnus-uu-mark-sparse)。

M P a
     一連の記事が出てくる順番にそれに属するすべての記事に印を付けます (gnus-uu-mark-all)。

M P b
     バッファのすべての記事を現れている順番に印を付けます (gnus-uu-mark-buffer)。

M P k
     現在のプロセス印をスタックに積んで、すべての記事を無印にします (gnus-summary-kill-process-mark)。

M P y
     スタックから前回のプロセス印を取り出して、それを復元します (gnus-summary-yank-process-mark)。

M P w
     現在のプロセス印をスタックに積みます (gnus-summary-save-process-mark)。

制限をする
=====

概略バッファが現在グループにある記事の一部だけを表示するように制限できれば便利なことがあります。多くの制限命令が持つ効果は概略バッファから少し（もしくは多く）の記事を概略バッファから削除することです。

すべての制限命令はサーバーから既に取得された記事の一部分に作用します。これらの命令はどれもサーバーに追加の記事を要求しません。

/ /
/ s
     概略バッファをいくつかの表題と合致するものだけに制限します (gnus-summary-limit-to-subject)。

/ a
     概略バッファを何人かの著者に合致するものだけに制限します (gnus-summary-limit-to-author)。

/ u
x
     概略バッファを既読の印が付いていない記事に制限します (gnus-summary-limit-to-unread)。もし接頭引数が与えられれば、バッファを厳密に未読記事のみに制限します。これは、可視と保留の記事は含まれないということです。

/ m
     印を尋ねて、その印が付いていない記事に制限します (gnus-summary-limit-to-marks)。

/ t
     数字を尋ねて、概略バッファをその数字の日より古い（もしくは同じ）記事に制限します (gnus-summary-limit-to-marks)。もし接頭引数が与えられれば、その数字の日よりも新しい記事に制限します。

/ n
     概略バッファを現在の記事に制限します (gnus-summary-limit-to-articles)。プロセス/接頭引数の習慣を使います (see Process/Prefix)。

/ w
     前の制限をスタックから取り出して、復元します (gnus-summary-pop-limit)。もし接頭引数を与えられれば、すべての制限をスタックから取り出します。

/ v
     概略バッファをあるスコアと同じか、それより大きなスコアを持つ記事に制限します (gnus-summary-limit-to-score)。

/ E
M S
     すべての消去された記事を表示します (gnus-summary-limit-include-expunged)。

/ D
     すべての保留記事を表示します (gnus-summary-limit-include-dormant)。

/ *
     すべてのキャッシュに入っている記事を表示します (gnus-summary-limit-include-cached)。

/ d
     すべての保留記事を隠します (gnus-summary-limit-exclude-dormant)。

/ T
     現在のスレッドのすべての記事を表示します (gnus-summary-limit-include-thread)。

/ c
     子記事の無いすべての保留記事を隠します (gnus-summary-limit-exclude-childless-dormant)。

/ C
     すべての未読のみの印の記事を既読として印を付けます (gnus-summary-limit-mark-excluded-as-read)。もし接頭引数が与えられれば、可視と保留のみの印の記事も既読として印を付けます。

スレッド
====

Gnus はディフォルトで記事をスレッドにします。スレッドにする とは、ある記事への応答を応答した記事の直後に置く――階層的流儀で ということです。

スレッドは記事の References 欄を調べることによって行われます。完全な世界では、これだけで良い木を作り上げるのに十分なのですが、不運なことに、 References 欄はしばしば壊れているか、時には単にないということがあります。不思議なニュースの増殖が問題を増やしますので、喜ばしい結果を得るためには他の発見法を採用しなければなりません。過剰な対策法は存在していて、その恐るべき詳細は see Customizing Threading に詳しく書いてあります。

まず、概念の概観です：

根本 (root)
     スレッドで一番頂点にある記事です；スレッドの最初の記事です。

スレッド (thread)
     木のような記事の構成です。

部分スレッド (sub-thread)
     木のような構造の（より）小さな部分です。

無束縛スレッド (loose threads)
     記事の期限切れ削除や、根本が既に前回のセッションで読まれたことにより概略バッファに表示されない、等の理由により、スレッドはしばしば根本を失います。そのようなときには、普通は多くの部分スレッドがあって、本当は１つのスレッドに属しているのですが、根本にはつながっていない、ということになります。こういうスレッドが無束縛スレッドと呼ばれています。

スレッド集め (thread gathering)
     まばらスレッドを大きなスレッドに集めようとする試みです。

まばらスレッド (sparse threads)
     無い記事が『推測された』スレッドで、概略バッファに空行で表示されます。

スレッドをカスタマイズする
-------------

無束縛スレッド
.......

gnus-summary-make-false-root
     もし nil でないと、gnus は全てのつながっていない部分木を１つの大きな木にして、頂上にみせかけの根本を作ります。（ちょっと待ってください。頂上に根元 (root) ですって？ええ、そうなのです。）つながっていない部分木は本当の根本が期限切れ削除されたか、前回のセッションで根本を読んだり削除したときにできます。

     本当のスレッドが無いときは、gnus は何かでっち上げをする必要があります。この変数は gnus が使うべきごまかしの方法を示しています。値としてとることができる４つの候補があります。

     養子 (adopt)
          Gnus は最初の孤児を親にします。この親はすべての他の記事を養子にします。この養子記事は、標準の角括弧 ([]) の代わりに、先の尖った括弧 (<>) で印付けられます。これがディフォルトの方法です。

     みせかけ (dummy)
          Gnus は親のふりをするみせかけの概略行をつくります。みせかけの行はどの本当の記事にも対応しませんので、それを選択することは、みせかけの記事の後の最初の本当の記事を選択をするだけになります。みせかけの根本の様式を指定するために、 gnus-summary-dummy-line-format が使われます。これはたった一つだけのフォーマットの仕様を受け付けます: S で、これは記事の表題です。 See Formatting Variables.

     空 (empty)
          Gnus は実際にはどの記事も親にはせず、単に最初の孤児を除いてすべての孤児の表題欄を空のままにします。（実際は、gnus-summary-same-subject を表題として使います。 (see Summary Buffer Format).）

     none
          全くどの記事も親にしません。スレッドを集めて、一つの記事の後に他の記事を表示するだけです。

     nil
          無束縛スレッドを集めません。

gnus-summary-gather-subject-limit
     無束縛スレッドは記事の表題を比較することによって集められます。もしこの変数が nil であると、gnus は無束縛スレッドを一つの大きな超スレッドに集める前に、無束縛スレッドの表題が完全に一致することを要求します。これは、長い表題の行を切り落としてしまう間抜けなニュースリーダーが存在する現在では、あまりに厳しい要求かも知れません。もしそう思うのなら、この変数を例えば 20 に設定して、表題の最初の 20 文字だけが一致することを要求するようにすることができます。この変数を本当に低い数字に設定すると、gnus が目に入る全てを一つのスレッドに集めるのを見ることができるでしょう。そして、それはあまり有用ではありません。

     この変数を特別な値 fuzzy に設定すれば、gnus は表題にあいまいな文字列比較アルゴリズムを使います (see Fuzzy Matching)。

gnus-sumplify-subject-fuzzy-regexp
     これは正規表現か、あいまい表題指定が使われているときに表題から合致したものが取り除かれる、正規表現のリストであることができます。

gnus-simplify-ignored-prefixes
     もし gnus-summary-gather-subject-limit を 10 くらいに低く設定したならば、この変数を何か意味のあるものに設定することを考えるでしょう：

          (setq gnus-simplify-ignored-prefixes
                (concat
                 "\\`\\[?\\("
                 (mapconcat
                  'identity
                  '("looking"
                    "wanted" "followup" "summary\\( of\\)?"
                    "help" "query" "problem" "question"
                    "answer" "reference" "announce"
                    "How can I" "How to" "Comparison of"
                    ;; ...
                    )
                  "\\|")
                 "\\)\\s *\\("
                 (mapconcat 'identity
                            '("for" "for reference" "with" "about")
                            "\\|")
                 "\\)?\\]?:?[ \t]*"))

     この正規表現に合致するすべての語は、２つの表題を比較する前に取り除かれます。

gnus-simplify-subject-functions
     nil でないと、この変数は gnus-summary-gather-subject-limit を上書きします。この変数は文字列 Subject を反復して簡単な形にたどり着くために適用する関数のリストである必要があります。

     このリストに入れて役に立つような関数は次のようなものです：

     gnus-simplify-subject-re
          前の方にある Re: を取り除きます。

     gnus-simplify-subject-fuzzy
          あいまいに簡単にします。

     gnus-simplify-whitespace
          余分な空白 (whitespace) を取り除きます。

     もちろん、あなた自身の関数を書くこともできます。

gnus-summary-gather-exclude-subject
     無束縛スレッド集めは表題のみに行われますので、特に や (none)のような良くある表題のときは、多くの間違いを起こす可能性があります。この状況を少しよくするために、どの表題が集める過程から除かれるかを決める正規表現 gnus-summary-gather-exclude-subject を使うことができます。ディフォルトは ^ *$\\|^(none)$ です。

gnus-summary-thread-gathering-function
     Gnus は Subject 欄を見ることによってスレッドを集めます。これは、結果的に全く関係の無い記事が同じ『スレッド』に含まれることがあるということで、これは混乱の元です。代替手段は、合致するものを見つけるために References 欄にある Message-ID をすべて探すことです。これは関係の無い記事が集められたスレッドに含まれることは全く無いことを保証しますが、こわれたニュースリーダーで投稿した記事は適切に集められないということでもあります。選択権はあなたにあります――疫病かコレラか。

     gnus-gather-threads-by-subject
          この関数はディフォルトの収集関数で、排他的に Subject を見ます。

     gnus-gather-threads-by-references
          この関数は排他的に References 欄を見ます。

     References によって集めることを試してみたいのであれば、次のようにすることができます：

          (setq gnus-summary-thread-gathering-function
                'gnus-gather-threads-by-references)

スレッドを埋める
........

gnus-fetch-old-headers
     もし nil でないと、gnus は古いスレッドをもっと古いヘッダー――既読印の付いている記事のヘッダー を取得することで大きくしようとします。もしできるだけ少ない概略行を表示したいけれど、できるだけたくさんの非密スレッドに接続しておきたいときは、この変数を some か数字に設定することができます。もし数字に設定したときは、それより多い追加のヘッダーは取得されません。どちらの場合でも、古いヘッダーの取得が動作するのは、使っているバックエンド (backend) が overview ファイルを使っているかどうかです――これは普通は nntp, nnspool と nnml です。スレッドのルートがサーバーによって期限切れ削除されたときは、gnus はどうしようもないことを覚えておいてください。

     この変数は invisible に設定することもできます。これは視覚的な効果は何もありませんが、命令 A T をよく使うのであれば役に立つでしょう (see Finding the Parent)。

gnus-build-sparse-threads
     古いヘッダーを取得すると遅くなることがあります。同じような低賃金の効果を得るために、この変数を some に設定することができます。そうすると、 gnus は全ての記事の完全な References 欄を見て、同じスレッドに属する記事をつなごうとします。これは gnus が記事がスレッドから失われていると推測したところのスレッド表示にずれを残すでしょう。（これらのずれは普通の概略行のように現れます。もしずれを選択したときは、gnus はその当の記事を取得しようとします。）この変数が t であると、gnusは全ての『ずれ』をスレッドを補完するのに役に立つかを考慮せずに表示します。最後に、この変数が more であると、 gnus はどこにもつながっていない枝葉のまばらな節を切り落としません。この変数はディフォルトでは nil です。

もっとスレッドを
........

gnus-show-threads
     この変数が nil であると、スレッドは作られず、ここにある残りのすべての変数は全く効果が無くなります。スレッド作りを止めるとグループの選択が少し速くなりますが、記事を読むのがもっと遅く、不便になることは確実です。

gnus-thread-hide-subtree
     これが nil でないと、すべてのスレッドは概略バッファが生成されたときに隠れます。

gnus-thread-expunge-below
     この数字より少ない総合的スコア (gnus-thread-score-function) を持つすべてのスレッドは消去されます。この変数はディフォルトでは nil で、これはどのスレッドも消去されないということです。

gnus-thread-hide-killed
     もしスレッドを削除して、この変数が nil でないと、部分木は隠されます。

gnus-thread-ignore-subject
     時々、誰かがスレッドの真中で表題を変更することがあります。もしこの変数が nil でないと、表題の変更は無視されます。もし nil だと、これがディフォルトですが、表題の変更をすると別のスレッドになります。

gnus-thread-indent-level
     この数字は部分スレッドがどれくらい字下げ (indent) されるべきかを決めます。ディフォルトは 4 です。

低レベルにおけるスレッド作成
..............

gnus-parse-headers-hook
     すべてのヘッダーを解析する前に実行されるフックです。ディフォルトの値は (gnus-set-summary-default-charset) です。これは変数 gnus-newsgroup-default-charset-alist で指定されている値から概略バッファの default-mime-charset を設定します。

gnus-alter-header-function
     これが nil でないと、ヘッダー構造の交換を可能にするようにこの関数が呼ばれます。関数は一つの引数、記事ヘッダーのベクトル、とともに呼ばれ、それが何らかの方法で交換されます。例えば、（接頭語やその他のものを付け加えることによる）体系的な方法で Message-ID を交換するメールからニュースへのゲートウェイがある場合、Message-ID がもっと意味のあるものにするために、この変数を設定して元に戻すことができます。これは一つの例です：

          (setq gnus-alter-header-function 'my-alter-message-id)

          (defun my-alter-message-id (header)
            (let ((id (mail-header-id header)))
              (when (string-match
                     "\\(<[^<>@]*\\)\\.?cygnus\\..*@\\([^<>@]*>\\)" id)
                (mail-header-set-id
                 (concat (match-string 1 id) "@" (match-string 2 id))
                 header))))

スレッドの命令
-------

T k
M-C-k
     現在の（部分）スレッドに既読の印を付けます (gnus-summary-kill-thread)。もし接頭引数が正であると、代わりにすべての印を取り除きます。接頭引数が負であると、代わりに記事を可視にします。

T l
M-C-l
     現在の（部分）スレッドのスコアを下げます (gnus-summary-lower-thread)。

T i
     現在の（部分）スレッドのスコアを上げます (gnus-summary-raise-thread)。

T #
     プロセス印を現在の（部分）スレッドに付けます (gnus-uu-mark-thread)。

T M-#
     現在の（部分）スレッドからプロセス印を取り除きます (gnus-uu-unmark-thread)。

T T
     スレッド表示を切り替えます (gnus-summary-toggle-threads)。

T s
     もしあれば、現在の記事の下に隠れているスレッドを表示します (gnus-summary-show-thread)。

T h
     現在の（部分）スレッドを隠します (gnus-summary-hide-thread)。

T S
     すべての隠されているスレッドを表示します (gnus-summary-show-all-threads)。

T h
     すべてのスレッドを隠します (gnus-summary-hide-all-threads)。

T t
     現在の記事のスレッドをもう一度作り直します (gnus-summary-rethread-current)。これは概略バッファがスレッド表示されていないときでも動作します。

T ^
     現在の記事を印付き（もしくは前の）記事の子記事にします (gnus-summary-reparent-thread)。

以下の命令はスレッド移動命令です。これらはすべて数値接頭引数を受け付けます。

T n
     次のスレッドに移動します (gnus-summary-next-thread)。

T p
     前のスレッドに移動します (gnus-summary-prev-thread)。

T d
     スレッドを降下します (gnus-summary-down-thread)。

T u
     スレッドを上昇します (gnus-summary-up-thread)。

T o
     スレッドの頂上に移動します (gnus-summary-top-thread)。

スレッドを作成するときに表題を無視すると、自然にスレッドにはいくつかの違った表題があることになります。それから `T k' (gnus-summary-kill-thread) のような命令を発するときに、全体のスレッドを削除するのではなく、現在の記事と同じ表題を持つ部分だけを削除したいときがあるかもしれません。もしこの発想が良いと思うのであれば、 gnus-thread-operation-ignore-subject をいじくることができます。これが nil でないと（これがディフォルトですが）、スレッドの命令を実行しているときに表題は無視されます。この変数が fuzzy であると、あいまいに等しい表題を持つ記事だけが含まれます (see Fuzzy Matching)。

並び替え
====

もしスレッドの概略表示を使っているのであれば、関数のリストである gnus-thread-sort-functions を設定することでスレッドを並び替えることができます。ディフォルトでは、並び替えは記事番号によってなされます。既に作られている並び替え述語関数は gnus-thread-sort-by-number, gnus-thread-sort-by-author, gnus-thread-sort-by-subject, gnus-thread-sort-by-date, gnus-thread-sort-by-score と gnus-thread-sort-by-total-score です。

各関数は２つのスレッドをとり、最初のスレッドが他のスレッドより先に並び替えられるべきであれば、nil でない値をかえします。普通、並び替えは本当はそれぞれのスレッドの根本を見るだけによりなされることに気を付けてください。もし２つ以上の関数を使う場合、優先的並び替えキーはリストの最後の関数です。おそらくいつも gnus-thread-sort-by-number を並び替え関数のリスト―― 最初が好ましい に入れておくべきでしょう。これは他の並び替え基準に関して等しいスレッドは記事が上がっていく順番に表示されることを保証します。

スコア、表題、そして最後に番号、の順に並び替えたいのであれば、次のようにできます：

     (setq gnus-thread-sort-functions
           '(gnus-thread-sort-by-number
             gnus-thread-sort-by-subject
             gnus-thread-sort-by-total-score))

最高スコアのスレッドが概略バッファの最初に表示されます。スレッドが同じスコアの場合は、英字順に並びかえられます。スコアと表題が同じスレッドは番号で並び替えられ、（普通は）記事が到着した順番になります。

スコア、到着の逆順に並び替えたいのであれば、次のようにできます：

     (setq gnus-thread-sort-functions
           '((lambda (t1 t2)
               (not (gnus-thread-sort-by-number t1 t2)))
             gnus-thread-sort-by-score))

変数 gnus-thread-score-function（ディフォルトは +）に入っている関数はスレッドの総合のスコアを計算するために用いられます。役に立つ関数は、max, min, もしくは２乗、もしくはあなたの好奇心をくすぐるような何かでしょう。

何か奇妙な理由などでスレッド表示を使っていないのなら、変数 gnus-article-sort-functions をいじくる必要があります。これは gnus-thread-sort-functions と非常に似ていますが、記事の比較には少々違った関数を使います。使用可能な並び替え述語関数は gnus-article-sort-by-number, gnus-article-sort-by-author, gnus-article-sort-by-subject, gnus-article-sort-by-date および gnus-article-sort-by-score です。

スレッドを使っていない表題の概略表示を並び替えたいのであれば、次のようなことをすることができます：

     (setq gnus-article-sort-functions
           '(gnus-article-sort-by-number
             gnus-article-sort-by-subject))

非同期記事取得
=======

もしニュースを遠くの NNTP サーバーから取得しているのであれば、ネットワークの待ち時間が記事を読むことは骨の折れることにしてしまうかもしれません。 n を押して次の記事が現れるまで、しばらく待たなければなりません。どうして前の記事を読んでいる間に gnus が先に行って記事を取得しないのでしょう？本当に、そうした方が良いのではないのでしょうか。

まず、いくつかの警告です。非同期記事取得、特に gnus がそれを行っている方法にはいくつかの落とし穴があります。

例えば、あなたは短い記事 1 を読んでいて、記事 2 はとても長くあなたはそれを読むことには興味が無いとしましょう。Gnus はこのことはわからないので、先に行って記事 2 を取得します。あなたは記事 3 を読むことにしますが、gnus は記事 2 を取得している最中なので、接続は封鎖されています。

この状況を避けるために、gnus はサーバーに２つの（それは２と数えてください）接続を張ることができます。これはあまりして良いことではないと考える人もいるでしょうが、私には実際の代替手段が見つからないのです。余分な接続をするためには何らかの時間がかかりますので、gnus の起動は遅くなります。

Gnus はあなたが読むであろう記事よりもたくさんの記事を取得します。これは記事の先-取得を使わないときよりも、あなたのマシンと NNTP サーバー間にもっと負荷がかかるということになるでしょう。サーバー自身ももっと負荷がかかるようになります――余分な記事の要求と、余分な接続で。

はい、これで本当はこのようなことをすべきで無い事が分かったでしょう... 本当にそうしたいと思わない限りは。

これが方法です： gnus-asynchronous を t に設定してください。残りのことは自動的に起こります。

gnus-use-article-prefetch を設定することにより、どれくらいの記事が先に取得されるべきかを操作することができます。これはディフォルトでは 30で、グループの記事を読んでいるときに、バックエンドが次の 30 記事を先-取得するということです。この変数が t であると、バックエンドは制限無く取得できるすべての記事を先-取得しようとします。これが nil であると、先-取得は行われません。

おそらく、先-取得をしたくない記事がいくつかあるでしょう――例えば、既読記事。変数 gnus-async-prefetch-article-p は記事が先に取得されるべきかどうかを制御します。この関数は問題の記事が先-取得されるべきであれば nil でない値をかえすべきです。ディフォルトは gnus-async-read-p で、それは既読記事には nil をかえします。この関数は記事のデータ構造を唯一の引数として呼ばれます。

例えば、もし 100 行よりも短い未読記事のみを先に取得したいのであれば、次のようにできます：

     (defun my-async-short-unread-p (data)
       "Return non-nil for short, unread articles."
       (and (gnus-data-unread-p data)
            (< (mail-header-lines (gnus-data-header data))
               100)))

     (setq gnus-async-prefetch-article-p 'my-async-short-unread-p)

これらの関数は何度も何度も呼ばれますので、gnus を遅くしすぎないように、短く甘美であるのが好ましいです。おそらく、このようなものをバイトコンパイル (byte-compile) するのは良い着想でしょう。

記事は非同期バッファから遅かれ早かれ削除されなければなりません。 gnus-prefetched-article-deletion-strategy はいつ記事を削除するかを指定しています。これは以下の要素を含むようなリストです：

read
     記事が読まれたときに削除します。

exit
     グループを抜けたときに記事を削除します。

ディフォルトの値は (read exit) です。

記事のキャッシュ
========

もし非常に遅い NNTP 接続であるならば、記事キャッシュをすることを考えるかもしれません。そうすると、それぞれの記事はあなたのホームディレクトリの下にローカルに溜めらます。既に推測されているかも知れませんが、これは巨大なディスクスペースを食い、iノードも非常に速く食いつぶす可能性があるため、それはあなたの頭を泳がせる事になるかもしれません。ウォッカの中で。

でも注意深く使われれば、それは記事を保存する簡単な方法になり得ます。

キャッシュを実行するためには、gnus-use-cache を t に設定します。ディフォルトでは、すべての可視または保留として印の付いている記事はローカルのキャッシュに複写されます。このキャッシュが平らな構造か階層的であるかは、いつもどおり、変数 gnus-use-long-file-name で制御されます。

可視か保留記事を再選択した場合は、サーバーの代わりにキャッシュから取得されます。キャッシュにある記事は期限切れ削除されませんので、記事が属しているところに残したままで記事を保存する方法として使う事ができるかもしれません。保存したい記事をすべて保留の印を付けて、後は心配は要りません。

記事に既読の印が付いたときに、それはキャッシュから削除されるのでしょうか。

キャッシュ へ入る/から削除される は変数 gnus-cache-enter-articlesと gnus-cache-remove-articles によって制御されます。これらは両方ともシンボルのリストです。前者はディフォルトでは (ticked dormant) で、可視と保留記事はキャッシュに入れられるという事です。後者はディフォルトでは (read) で、既読の印が付いた記事はキャッシュから削除されるという事です。おそらくこれらの２つのリストは ticked, dormant, unread および read からなるでしょう。

それで、どうやって大量の記事取得と貯蓄実現されるのでしょうか。命令 gnus-jog-cache は全ての購読グループに対して、すべての未読記事を要求し、スコアを付け、キャッシュに保存します。この命令を実際に、実際に実際に実際に、使うのは、 1) NNTP サーバーとの接続が本当に、本当に、本当に遅く 2) 本当に、本当に、本当に巨大なディスクを持っているときだけにするべきです。これは真面目にいっています。ダウンロードされる記事の数を少なくする一つの方法は、欲しくない記事のスコアを低くし、既読の印を付ける事です。そうした場合、それらはこの命令ではダウンロードされません。

いくつかのグループではキャッシュをしたくないというのは良くある事です。例えば、nnml メールディレクトリーがホームディレクトリーの下にあれば、それをあなたのホームディレクトリーの下の別の場所にキャッシュするのは意味の無い事です。あなたが２倍の容量を使う事が良いと感じない限りは。

キャッシュを制限するために、gnus-uncacheable-groups を をキャッシュするグループの連想リスト、例えば ^nntp、とするか、正規表現 gnus-uncacheable-group を例えば、^nnml に設定して下さい。両方の変数の初期値は nil です。もしグループが両方の正規表現に合致すると、そのグループはキャッシュされません。

キャッシュはどの記事が含まれているかの情報を現状ファイル (active file) (gnus-cache-active-file) に溜めます。このファイル（もしくはキャッシュの他の部分）が何らかの理由でぐちゃぐちゃになってしまった場合、gnus は物事を正しくするために２つの関数をお勧めします。M-x gnus-cache-generate-nov-databases はすべての NOV ファイルを（再）作成し、gnus-cache-generate-active は 現状ファイルを（再）作成します。

永続記事
====

記事のキャッシュと近い関係にあるもに、永続記事があります。実際、それはキャッシュの別の見方で、私の意見ではその方がもっと役に立ちます。

例えば、ニュースグループを読んでいて、そのまま永遠に保存して秘蔵したい、いくつかの価値ある宝石に出会ったとしましょう。普通はそれをファイルに保存します（多くの保存命令の一つを使って）。それの問題は、単にあの、嫌なだけです。理想的には、記事はグループであなたが見つけた場所に永遠に残っているべきでしょう。ニュースサーバーにおける期限削除には影響されないで。

これが永続記事です――記事は削除されません。それは普通のキャッシュ命令を使って実装されていますが、永続記事の管理をするために２つの明示的な命令を使います：

*
     現在の記事を永続にします (gnus-cache-enter-article)。

M-*
     現在の記事を永続記事から取り除きます (gnus-cache-remove-articles)。これは普通は記事を削除します。

この命令は両方ともプロセス/接頭引数の習慣を理解します。

もし永続記事にだけ興味があるのでしたら、可視記事（やその他のもの）がキャッシュに入るのを避けるために、gnus-use-cache を passive に設定するのが良いでしょう：

     (setq gnus-use-cache 'passive)

記事のバックログ
========

もし遅い接続しかない場合で、キャッシュを使うという発想はあまり魅力的ではないとき（実際そうなのですが）、バックログに切り替える事によって状況を何とかすることができます。これは既に読んだ記事を再取得しなくて良いように、 gnus が既に読んだ記事を一時保存しておくところです。これはもちろん、あなたに最近読んだ記事を再び選択する癖があるときだけに役立ちます。もし絶対にそれをしないのであれば、バックログをすることは gnus を少し遅くし、メモリーの使用量をいくらか増やします。

もし gnus-keep-backlog を数字 N に設定すると、gnus は最大で N の古い記事を後の再取得のためにバッファに溜めておきます。この変数が nil ではなく、数字でもない場合、gnus は全ての既読記事をたくわえます。これはあなたの Emacs が、暴発してあなたのマシンが落ちるまで制限なく膨れ上がるということです。私はあなた方全てが元気でいられるようにここに書き加えました。

この変数はディフォルトでは nil です。

記事の保存
=====

Gnus はたくさんの方法で記事を保存する事ができます。以下のものは非常に率直な方法（例えば、記事が保存する前にほとんど何もなされない）で記事を保存するための説明です。違った手段（uudecodeする、shar ファイルを展開する）についてはgnus-uu を使うのが良いでしょう (see Decoding Articles)。

gnus-save-all-headers が nil でないと、gnus は記事を保存する前に望ましくないヘッダーを消去しません。

もし上の変数が nil であると、正規表現 gnus-saved-headers に合致するすべてのヘッダーは残され、残りのものは保存する前に削除されます。

O o
o
     ディフォルトの記事保存を用いて現在の記事を保存します (gnus-summary-save-article)。

O m
     現在の記事をメールの様式で保存します (gnus-summary-save-article-mail)。

O r
     現在の記事を rmail の様式で保存します (gnus-summary-save-article-rmail)。

O f
     現在の記事を普通のファイル (plain file) 様式で保存します (gnus-summary-save-article-file)。

O F
     現在の記事を普通のファイル様式で保存し、以前のファイルの内容を上書きします (gnus-summary-write-article-file)。

O b
     現在の記事の本文 (body) を普通のファイル様式で保存します (gnus-summary-save-article-body-file)。

O h
     現在の記事を mh のフォルダーの様式で保存します (gnus-summary-save-article-folder)。

O v
     現在の記事を VM フォルダーに保存します (gnus-summary-save-article-vm)。

O p
     現在の記事をパイプに保存します。うーんと、あのぉ、私が言おうとしている事は―― 現在の記事をプロセスにパイプするということです (gnus-summary-pipe-output)。

すべてのこれらの命令はプロセス/接頭引数の習慣を使います (see Process/Prefix)。もしこれらの関数を使ってたくさんの記事を保存した場合、それぞれのすべての記事に対してファイル名の入力を要求される事に飽き飽きするでしょう。入力促進動作は変数 gnus-prompt-before-saving によって制御されます。これはディフォルトでは always で、あなたが知っていて嫌がっている、過剰な促進動作をします。代わりにこの変数を t に設定すると、あなたが保存するそれぞれの一連の記事に対して一回だけ促されます。本当に gnus にすべての思考をさせたいのであれば、この変数をnil にすることさえできます。そして、記事を保存するためのファイルを促される事はありません。Gnus は単純にすべての記事をディフォルトのファイルに保存します。

Gnus があなたの望むとおりになるように、変数 gnus-default-article-saver をカスタマイズする事ができます。下の４つの既製関数を使う事ができますし、自分自身の関数を作る事もできます。

gnus-summary-save-in-rmail
     これはディフォルトの様式、babyl です。変数 gnus-ramil-save-name に入っている関数を、記事を保存するためのファイル名を取得するために使用します。ディフォルトは gnus-plain-save-name です。

gnus-summary-save-in-mail
     Unix メール (mbox) ファイルに保存します。変数 gnus-mail-save-name に入っている関数を、記事を保存するためのファイル名を取得するために使用します。ディフォルトは gnus-plain-save-name です。

gnus-summary-save-in-file
     記事を通常のファイルの後に追加します。変数 gnus-file-save-name に入っている関数を、記事を保存するためのファイル名を取得するために使用します。ディフォルトは gnus-numeric-save-name です。

gnus-summary-save-body-in-file
     記事の本体を通常のファイルの後に追加します。変数 gnus-file-save-name に入っている関数を、記事を保存するためのファイル名を取得するために使用します。ディフォルトは gnus-numeric-save-name です。

gnus-summary-save-in-folder
     MH ライブラリーの rcvstore を用いる事によって記事を MH フォルダーに保存します。変数 gnus-folder-save-name に入っている関数を、記事を保存するファイル名を取得するために使用します。ディフォルトは gnus-folder-save-name ですが、gnus-Folder-save-name も使う事ができて、こちらは先頭が大文字、残りが小文字になった名前をつくります。

gnus-summary-save-in-vm
     記事を VM フォルダーに保存します。この設定を使うためには VM メールリーダーが必要です。

これらの全ての関数は最後の一つを除いて、環境変数 SAVEDIR によって初期化される gnus-article-save-directory に記事を保存します。これはディフォルトでは ~/News/ です。

上にあるように、記事を保存するためのファイルの適切な名前を見つけるために、関数は違った関数を用います。以下は名前を生成するために使用可能な関数のリストです：

gnus-Numeric-save-name
     ~/News/Alt.andera-dworkin/45 のようなファイル名。

gnus-numeric-save-name
     ~/News/alt.andera-dworkin/45 のようなファイル名。

gnus-Plain-save-name
     ~/News/Alt.andera-dworkin のようなファイル名。

gnus-plain-save-name
     ~/News/alt.andera-dworkin のようなファイル名。

連想リスト gnus-split-methods に正規表現を放り込む事によって、 gnus に記事を保存する場所を提案する事ができます。例えば、gnus に関連した記事をファイル gnus-stuff に、VM に関連した記事を vm-stuff 保存したければ、この変数を以下のようにする事ができます：

     (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
      ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
      (my-choosing-function "../other-dir/my-stuff")
      ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))

これはそれぞれの要素が、２つの要素――合致 と ファイル を持つリストであるリストであるという事がわかります。合致は文字列（この場合は記事のヘッダーに合致する正規表現として使われます）および、シンボル（グループ名を引数として、関数として呼ばれます）および、リスト（これは評価 (eval) されます）であることができます。もしこれらの動作の一つでも nil でない結果を返すと、ファイルがディフォルトの促進として使われます。加えて、呼ばれた関数か式が文字列か文字列のリストを返したときは、演算の結果自体が使われます。

基本的には、現在の記事を保存するのに使われる可能性のあるファイル名のリストを手に入れる事になります。（すべての『合致』が使われます。）それから本当に名前として使いたいものを促され、この変数を適用する事により得られた結果からファイル名補完をして入力します。

この変数はディフォルトでは ((gnus-article-archive-name)) で、gnus 保存する記事の Archive-name 行を調べて、それをファイル名の提案として使うという事です。

これはファイル名を少しきれいにする関数の例です。 nnml:mail.whatever のようなメールグループがたくさんあるのであれば、保存するためのファイル名を作る前にこれらのグループ名の最初を切り落としたいかもしれません。次の物はちょうどそれをします：

     (defun my-save-name (group)
       (when (string-match "^nnml:mail." group)
         (substring group (match-end 0))))

     (setq gnus-split-methods
           '((gnus-article-archive-name)
             (my-save-name)))

最後に gnus-use-long-file-name という変数があります。これが nil であると、すべての上記の関数はグループ名のすべてのピリオド (.) をスラッシュ (/) で置き換えます――これは関数はすべてのファイルを一番上のディレクトリーに置くのではなく、階層的なディレクトリーを作るという事です（~/News/alt.andrea-dworkin の代わりに ~/News/alt/andrea-dworkin。）この変数はたいていのシステムにおいてディフォルトで t です。しかし、歴史的な理由から Xenix と usg-unix-v マシンではディフォルトで nil です。

この関数は削除とスコアのファイル名に影響します。この変数がリストで、リストに要素 not-score があると、長いファイル名はスコアファイルには使われず、リストに要素 not-save があると、長いファイル名は保存には使われず、要素 not-kill があると、長いファイル名は削除ファイルには使われません。

もし記事をスプールのような階層に保存したいのであれば、次のようにできます

     (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
     (setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding

それから o によって記事を保存するだけです。それからこの階層を短命な nneething グループによって読む事ができます――グループバッファで G D とし、一番上のディレクトリーを引数 (~/News/) として渡します。

記事の復号化
======

ときどき利用者は何らかの方法で符号化された記事（もしくは記事群）を投稿します。Gnus はあなたのためにそれらを復号化する事ができます。

これらすべての関数はプロセス/接頭引数の習慣 (see Process/Prefix) を、『一つの記事』を『一つの群』と解釈する拡張をして、どの記事に操作をするかを見つけるために使います。Gnus は自分自身でどの記事がその群に属しているかを判断し、すべての記事を復号化して、その結果のファイルを 展開/閲覧/保存 することができます。

Gnus は以下の簡単な規則に則ってどの記事が群に属するのかを推測します： 表題は行の最後の２つの数字を除いて（ほとんど）同じである必要があります。（空白は大体無視されますが。）

例えば： cat.gif (2/3) というような表題を選ぶと、gnus は正規表現 ^cat.gif ([0-9]+/[0-9]+).*$ に合致するすべての記事を見つけようとします。

cat.gif (2/3) Part 6 of a series のような標準でない表題はどの自動閲覧命令によっても適切に認識されないため、手で記事に # の印を付けなければなりません。

uuencode された記事
--------------

X u
     現在の群を uudecode します (gnus-uu-decode-uu)。

X U
     現在の群を uudecode して保存します (gnus-uu-decode-uu-and-save)。

X v u
     現在の群を uudecode して、表示します (gnus-uu-decode-uu-view)。

X v U
     現在の記事を uudecode して、表示して保存します (gnus-uu-decode-uu-and-save-view)。

これらすべてはプロセス印によって印付けられた記事の存在に対して反応するということを覚えておいてください。例えば、もしニュースグループ全体を復号化して保存したいのであれば、普通は M P a (gnus-uu-mark-all) とし、それから X U (gnus-uu-decode-uu-and-save) とします。

この全ては、白日の下に明白にキーを打っていた GNUS 4.1 のときとは gnus-uu の動作が全く違っています。この版の gnus-uu は普通は何かの方法 (see Setting Process Marks) で記事に印を付けて、それから X u を押す事を前提としています。

注意： gnus-uu-notify-files に合致する名前、 [Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\) にハードコードされる、を持つ記事を復号化しようとしたときは、gnus-uu は問題の記事をちょうど閲覧した事を知らせるために、自動的に comp.unix.wizards に記事を投稿します。この機能を使わないようにする事はできません。

シェルアーカイブ
--------

シェルアーカイブ（『shar ファイル』）はソースを配布するための人気のある方法でしたが、今日ではそんなに使われていません。とにかくこれらを扱うための命令があります：

X s
     現在の群を解凍します (gnus-uu-decode-unshar)。

X S
     現在の群を解凍し保存します (gnus-uu-decode-unshar-and-save)。

X v s
     現在の群を解凍し表示します (gnus-uu-decode-unshar-view)。

X v S
     現在の群を解凍し、表示して保存します (gnus-uu-decode-unshar-and-save-view)。

ポストスクリプトファイル
------------

X p
     現在のポストスクリプト群を展開します (gnus-uu-decode-postscript)。

X P
     現在のポストスクリプト群を展開して保存します (gnus-uu-decode-postscript-and-save)。

X v p
     現在のポストスクリプト群を表示します (gnus-uu-decode-postscript-view)。

X v P
     現在のポストスクリプト群を表示し保存します (gnus-uu-decode-postscript-and-save-view)。

他のファイル
------

X o
     現在の群を保存します (gnus-uu-decode-save)。

X b
     現在の記事を binhex 解凍します (gnus-uu-decode-binhex)。これは本当は動作しません。

復号化のための変数
---------

形容詞です。動詞ではありません。

規則変数
....

Gnus はファイルを閲覧するのを決定するのに規則変数を用います。これらの変数はすべて以下のような様式です

           (list '(regexp1 command2)
                 '(regexp2 command2)
                 ...)

gnus-uu-user-view-rules
     この変数はファイルを閲覧するときに最初に調べられます。例えば、もし .au 音ファイルを変換するために sox を使いたいときは、次のようにできます：

          (setq gnus-uu-user-view-rules
                (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))

gnus-uu-user-view-rules-end
     この変数は gnus が利用者とディフォルトの閲覧規則から合致するものを見つけられなかったときに調べられます。

gnus-uu-user-archive-rules
     この変数はアーカイブを展開するときにどの命令が使われるべきかを決めるために使う事ができます。

他の復号化の変数
........

gnus-uu-grabbed-file-functions
     このリストのすべての関数はそれぞれのファイルが上手く復号化された直後に呼ばれます――ですから、すぐにファイルを移動や閲覧したりすることができ、何かをする前にすべてのファイルが復号化されるのを待つ必要はありません。このリストに入れる事のできる既製関数は：

     gnus-uu-grab-view
          ファイルを閲覧します。

     gnus-uu-grab-move
          ファイルを移動します（もし保存関数を使っているのであれば）。

gnus-uu-be-dangerous
     復号化の最中に変な状況が起こったときに何をするかを指定します。もし nil であると、できるだけ保守的になります。もし t であると、動作しないものは無視して、現存するファイルを上書きします。その他の場合は、それぞれのときに尋ねます。

gnus-uu-ignore-files-by-name
     この正規表現に合致する名前のファイルは閲覧されません。

gnus-uu-ignore-files-by-type
     この変数に合致する MIME の型を持つファイルは閲覧されません。Gnus はファイル名に基づいて型を推測している事に注意してください。gnus-uu は（まだ）MIME パッケージではありませんので、これは少し変です。

gnus-uu-tmp-dir
     gnus-uu がその仕事をする場所です。

gnus-uu-do-not-unpack-archives
     nil でないのは、gnus-uu は表示するためのファイルを探すためにアーカイブの中までは入っていかないという事です。

gnus-uu-view-and-save
     nil でないのは、利用者はファイルを閲覧した後に常に保存するかどうかを尋ねられるという事です。

gnus-uu-ignore-default-view-rules
     nil でないのは、gnus-uu はディフォルトの閲覧規則を無視するという事です。

gnus-uu-ignore-default-archive-rules
     nil でないのは、gnus-uu はディフォルトのアーカイブ展開命令を無視するという事です。

gnus-uu-kill-carriage-return
     nil でないのは、gnus-uu は記事からすべてのキャリッジリターン (carriage return) を取り去るという事です。

gnus-uu-unmark-articles-not-decoded
     nil でないのは、gnus-uu は復号化に失敗した記事に未読の印を付けるという事です。

gnus-uu-correct-stripped-uucode
     nil でないというのは、gnus-uu は続く空白が削除されてしまっている uuencode されたファイルを修復しようと試すという事です。

gnus-uu-pre-uudecode-hook
     uudecode にメッセージを送る前に実行されるフックです。

gnus-uu-view-with-metamail
     nil でないのは、gnus-uu は規則変数で定義された閲覧命令を無視して、ファイル名に基づいた MIME 内容の型に取り替えるという事です。その結果は閲覧のために metamail にかけられます。

gnus-uu-save-in-digest
     nil でないのは、gnus-uu が復号化をしないで保存をするように言われたときに、要約を保存するという事です。この変数が nil であると、gnus-uu は 何も飾りをしないで全てをファイルに保存します。要約は RFC1153 準じています――意味のある量を指定して、番号を発行する簡単な方法が見つからなかったので、単純にそれらは切り落としています。

uuencode と投稿
............

gnus-uu-post-include-before-composing
     nil でないのは、gnus-uu が記事を作成する前に符号化するファイルを尋ねるという事です。この変数が t であると、C-c C-i によって符号化されたファイルを取り込むか、記事を投稿するときに取り込むか、どちらかをする事ができます。

gnus-uu-post-length
     記事の最大の長さです。符号化されたファイルは全体のファイルを投稿するのに必要な量のファイルに分割されます。

gnus-uu-post-threaded
     nil でないのは、gnus-uu が符号化されたファイルをスレッドで投稿するという事です。これはあまり賢い方法ではないかも知れません。というのは、今まで私が見た中で uuencode された記事を集めるのに、スレッドを追っていく事のできる他の復号装置が存在しないからです。（えーと、私はそれをする一つのパッケージを見た事があります――gnus-uu です。しかしなぜか、それが数のうちに入るとは思えないのです...）ディフォルトは nil です。

gnus-uu-post-separate-description
     nil でないのは、記述は別の記事で投稿されるという事です。最初の記事は普通は (0/x) のように番号が付けられます。もしこの変数が nil であると、利用者の書いた記述は最初のファイルの始めに取り込まれ、(1/x) の番号が付けられます。ディフォルトは t です。

ファイルの閲覧
-------

復号化した後でファイルが何らかのアーカイブである場合、gnus はアーカイブを展開しようと試み、アーカイブの中に閲覧できるファイルがあるかを調べます。例えば、gzip された tar ファイル pics.tar.gz があって、ファイル pic1.jpg と pic2.gif を含んでいる場合、gnus は主ファイルを解凍して tar を展開し、それから２つの絵を閲覧します。この展開の過程は再帰的なので、アーカイブにアーカイブのアーカイブがあると、それはすべて展開されます。

最後に、gnus は普通はそれぞれの抽出された記事ごとに疑似記事を概略バッファに挿入します。これらの『記事』に移動した場合は、実行する命令（普通は gnus が提案をします）を入力するように促され、それから命令が実行されます。

gnus-view-pseudo-asynchronously が nil であると、Emacs は先へ進む前に閲覧が終わるまで待ちます。

gnus-view-pseudos が automatic であると、gnus は概略バッファに疑似記事を挿入しませんが、それらをすぐに閲覧します。この変数が not-confirm であると、利用者は閲覧が済む前に確認さえも求められません。

gnus-view-pseudos-separately が nil でないと、一つの疑似記事が閲覧されるそれぞれのファイルに対して作成されます。nil であると、同じ閲覧命令を使うすべての命令がその命令の引数のリストとして渡されます。

gnus-insert-pseudo-articles が nil でないと、復号化のときに疑似記事を挿入します。ディフォルトでは tです。

それで、そのような感じです。実質サーバーからの実質グループの疑似記事 読んでいます。そして考えます： どうして全てが現実ではなくなってしまったのだろうか？どうしてここに来てしまったのだろうか？

記事の扱い
=====

この巨大な説明文書を読んできて、人々が書いた事を読む、といったようなニューズリーダーの本当の目的を完全に忘れてしまったかも知れません。記事を読む事です。残念な事に、人々は書く事は非常に苦手としていますので、記事を読みやすくするための関数と変数が山のようにあります。

記事のハイライト
--------

記事バッファを果物サラダのようにしたいだけでなく、華やかな果物サラダのように見えるようにしたいでしょう。

W H a
     現在の記事をもっとハイライト (highlight) します。この関数は、ヘッダー、引用文、署名をハイライトし、本体 (body) と頭 (head) にボタンを加えます。

     たいていの利用者は代わりに gnus-article-highlight を gnus-article-display-hook (see Customizing Articles) で使うほうを好むでしょう。これは少しだけ積極性が減少します---それはヘッダーと署名だけをハイライトし、ボタンを加えます。

W H h
     ヘッダーをハイライトします (gnus-article-highlight-headers)。ハイライトは変数 gnus-header-face-alist にしたがってなされ、それはそれぞれの要素が (正規表現 名前 内容) という様式のリストです。正規表現はヘッダーに合致する正規表現、名前はヘッダーの名前をハイライトするのに使われるフェイス (face) (see Faces and Fonts)、内容はヘッダーの値をハイライトするフェイスです。最初に合致したものが使われます。正規表現は ^ が付けられるべきではない事に注意してください――gnus がそれを付け加えます。

W H c
     引用された文をハイライトします (gnus-article-highlight-citation)。

     引用ハイライトをカスタマイズするいくつかの変数は：

     gnus-cite-parse-max-size
          記事の大きさがこの変数（ディフォルトでは 25000）より大きい記事は、引用ハイライトは行われません。

     gnus-cite-prefix-regexp
          ある行が取り得る最大の引用接頭語に合致する正規表現です。

     gnus-cite-max-prefix
          引用接頭語の最大の長さです（ディフォルトでは 20 です）。

     gnus-cite-face-list
          引用をハイライトするために使われるフェイスのリストです (see Faces and Fonts)。同じメッセージの中に複数の記事からの引用があると、gnus はそれぞれの記事からの引用をそれ用のフェイスで表示しようとします。これにより、誰が何を書いたかが分かりやすくなるでしょう。

     gnus-supercite-regexp
          普通の Supercite 属性行に合致する正規表現です。

     gnus-supercite-secondary-regexp
          引き裂かれた Supercite 属性行に合致する正規表現です。

     gnus-cite-minimum-match-count
          それが引用であると決定する前に調べなければならない最小の同一接頭語です。

     gnus-cite-attribution-prefix
          属性行の始まりに合致する正規表現です。

     gnus-cite-attribution-suffix
          属性行の最後に合致する正規表現です。

     gnus-cite-attribution-face
          属性行に使われるフェイスです。その属性に属する文のためのフェイスと融合されます。

W H s
     署名 (signature) をハイライトします (gnus-article-highlight-signature)。 gnus-signature-separator (see Article Signature) の後の全てのものは署名と考えられ、gnus-signature-face でハイライトされます。それはディフォルトでは italic です。記事を自動的にハイライトする方法については see Customizing Articles を参照して下さい。

記事のフォント変更
---------

人々はよくニュースの記事で _これ_ や *これ* のようなものを使って単語を強調します。Gnus は 記事を命令 W e (gnus-article-emphasize) にかける事によって素敵に見えるようにできます。

強調がどのように演算されるかは変数 gnus-emphasis-alist によって制御されます。これは最初の要素が合致するべき正規表現である連想リストです。２番目の要素はどの正規表現のグループが強調語全体を見つけるために使われるかを示す数字です。３番目はどの正規表現のグループが表示されハイライトされるかを決める数字です。（この２つのグループの間の記事は隠されます。）４番目はハイライトのフェイスです。

     (setq gnus-emphasis-alist
           '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
             ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))

初期設定では７つの規則があり、それらは以下のフェイスを用います： gnus-emphasis-bold, gnus-emphasis-italic, gnus-emphasis-underline, gnus-emphasis-bold-italic, gnus-emphasis-underline-italic, gnus-emphasis-underline-bold, gnus-emphasis-underline-bold-italic.

これらのフェイスを変更したいのであれば、M-x customize か copy-face を使う事ができます。例えば、gnus-emphasis-italic に代わりに赤のフェイスを使うようにしたいときは、次のようにできます：

     (copy-face 'red 'gnus-emphasis-italic)

記事を自動的にフォンと変更させるためには see Customizing Articles を参照して下さい。

記事を隠す
-----

もしくは、それぞれの記事の特定のものを隠したいかもしれません。たいていの記事には普通はありすぎるくらい作りかえるものがあります。

W W a
     記事バッファでたくさんの隠匿をします (gnus-article-hide)。特に、この関数はヘッダー、PGP、引用文と署名を隠します。

W W h
     ヘッダーを隠します (gnus-article-hide-headers)。 See Hiding Headers.

W W b
     あまり興味のもてないヘッダーを隠します (gnus-article-hide-boring-headers)。 See Hiding Headers.

W W s
     署名を隠します (gnus-article-hide-signature)。 See Article Signature.

W W p
     PGP 署名を隠します (gnus-article-hide-pgp)。 PGP 署名が隠された後にフック gnus-article-hide-pgp-hook が実行されます。

W W P
     PEM (privacy enhanced messages（プライバシー拡張メッセージ）) 部分を隠します (gnus-article-hide-pem)。

W W c
     引用を隠します (gnus-article-hide-citation)。隠蔽をカスタマイズするいくつかの変数は：

     gnus-cited-opend-text-button-line-format
     gnus-cited-closed-text-button-line-format

          Gnus はどこの引用文が隠されているかを示すためにボタンを付け加え、文章の隠蔽を切り替えられるようにします。この変数の様式はこれらのフォーマットのような変数によって指定されます (see Formatting Variables)。次の指定は有効です：

          b
               隠された文の最初のポイントです。

          e
               隠された文の最後のポイントです。

          l
               隠されたリージョンの文字の数です。

          n
               隠された文の行の数です。

     gnus-cited-lines-visible
          引用文の最初からの表示される行数です。

W W C
     根本でない記事の引用文を隠します (gnus-article-hide-citation-in-followups)。これは対話的命令としてはあまり役に立たないかもしれませんが、gnus-article-display-hook に入れる事のできる手軽な関数であるでしょう (see Customizing Articles)。

W W C-c

     以下の2つの変数に基づいて引用を隠します (gnus-article-hide-citation-maybe):

     gnus-cite-hide-percentage
          もし引用文がこの変数 (初期値は 50) より大きい割合であれば、引用文を隠します。

     gnus-cite-hide-absolute
          隠される引用文は少なくともこの長さ (初期値 10) でなければなりません。

これらの全ての『隠蔽』命令は切り替え命令ですが、これらの命令に負の接頭引数を与えると、それらは前に隠されていたものを表示します。正の接頭引数を与えれば、それらは常に隠します。

引用カスタマイズのための他の変数の情報のために see Article Highlighting も参照してください。

自動的に記事の要素を隠すための方法は see Customizing Articles を参照して下さい。

記事洗濯
----

私たちはこれをもっともな理由の下で『記事洗濯』(article washing) と呼んでいます。すなわち、キー A は使われているので、代わりにキー W を使う必要があるのです。

私たちは洗濯を『何かの何かを何か別のものに変換する』と定義していますが、普通はもっと良く見える何かに落ち着きます。それにもっときれいです、たぶん。

W l
     ページの区切りを現在の記事から取り除きます (gnus-summary-stop-page-breaking)。ページの区切りに付いては see Misc Article を参照して下さい。

W r
     記事バッファでカエサル変換 (Caesar rotate) (rot13) をします (gnus-summary-caesar-message)。カエサル変換か rot13 を用いて読む事のできる、判読不可能な記事です（典型的には、攻撃的な冗談などです。）

     普通は ``rot13'' と呼ばれています。それはアルファベットの位置が 13 個回転するからです。例えば、B（２番目の文字） → O（15番目の文字）。これは時々『カエサル変換』と呼ばれる事もあります。というのは、カエサルがこの形式の、えーと、ちょっと簡単な暗号化を採用したという噂があるからです。

W t
     記事バッファにすべてのヘッダーを表示するかどうかを切り替えます (gnus-summary-toggle-header)。

W v
     記事バッファにすべてのヘッダーを永遠に表示するかどうかを切り替えます (gnus-summary-verbose-header)。

W m
     記事を MIME 記事として表示するかどうかを切り替えます (gnus-summary-toggle-mime)。

W o
     オーバーストライクを処理します (gnus-article-treat-overstrike)。

W d
     M******** sm*rtq**t*s を処理します (gnus-article-treat-dumbquotes)。

W w
     語の折り返しをします (gnus-article-fill-cited-articles)。もしこの関数を gnus-article-display-hook の中で使った場合、それはかなり後の方で実行されるべきで、当然すべてのハイライトの後になります。

     折り返しをするときに、幅を指定するために命令に数値接頭引数を与える事ができます。

W c
     キャリッジリターン (CR) (すなわち、行の最後の ^M) を取り除きます (gnus-article-remove-cr)。

W f
     すべての X-Face 欄を探して表示します(gnus-article-display-x-face)。この命令は変数 gnus-article-x-face-command によって与えられた関数によって実行されます。この変数が文字列ならば、この文字列がサブシェルで実行されます。関数ならば、この関数が顔を引数として呼ばれます。もし gnus-article-x-face-too-ugly（これは正規表現です）が From 欄に合致すれば、顔は表示されません。Emacs でのディフォルトの動作は xv をフォークして見ようとします。XEmacs でのディフォルトの動作は From 欄の前に顔を表示します。（XEmacs が X-Face 機能付きでコンパイルされていると良いでしょう――それは表示を少し早くします。もし根本的 X-Face 機能がないのであれば、gnus は pbmplus やその仲間の外部プログラムを使って X-Face 欄を変換しようと試みます。）この関数を表示フックに入れたいのであれば、おそらくそれあ最後になるべきでしょう。

W b
     クリックできるボタンを記事に加えます (gnus-article-add-buttons)。 See Article Buttons

W B
     クリックできるボタンを記事のヘッダーに加えます (gnus-article-add-buttons-to-head)。

W E l
     記事の始めからのすべての空白行を取り除きます (gnus-article-strip-leading-blank-lines)。

W E m
     すべての空白行を空行で置き換え、すべての複数の空行を一つの空行で置き換えます (gnus-article-strip-multiple-blank-lines)。

W E t
     記事の最後のすべての空白行を取り除きます (gnus-article-remove-trailing-blank-lines)。

W E a
     上の３つの命令をすべて行います (gnus-article-strip-blank-lines)。

W E A
     すべての空白行を取り除きます (gnus-article-strip-all-blank-lines)。

W E s
     記事の本体のすべての行の始めからのすべての空白を取り除きます (gnus-article-strip-leading-space)。

記事の洗濯を自動的にするための方法は see Customizing Articles を参照して下さい。

記事のボタン
------

よく記事の中に他のものへの参照が入れられる事があります。そして、gnus がそれに関する事を、それらの参照の上で RET を打つか、マウスの真中のボタンを使う事によって、最小限の努力で取得する事ができれば素敵でしょう。

Gnus はディフォルトで特定の標準の参照にボタンを付けます： ちゃんとした URL、メールアドレス、Message-ID です。これは２つの変数によって制御されていて、その一つは記事の本体を扱い、もう一つは記事のヘッダーを扱います。

gnus-button-alist
     それぞれの入力要素が次のような様式の連想リストです：

          (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)

     regexp
          この正規表現 (regexp) に合致するすべての文は外部参照であるとみなされます。これは埋め込まれた URL に合致する典型的な正規表現です <URL:\\([^\n\r>]*\\)>。

     button-par
          Gnus は合致したもののどの部分がハイライトされるのかを知らなければなりません。これは正規表現のどの副表現がハイライトされるかを指定する番号です。全てをハイライトしたいのなら、ここで 0 を使ってください。

     use-p
          この式は 評価 され、結果が nil でなければ、これは合致であるとみなされます。これは間違った合致を避けるために特別な選別をしたいときに役に立ちます。

     function
          この関数 (function) はこのボタンをクリックしたときに呼ばれます。

     data-par
          BUTTON-PAR のように、これは部分表現の番号ですが、これは合致のどの部分が FUNCTION にデータとして送られるかを指定します。

     ですから、URL をボタンにする完全な入力要素は

          ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)

gnus-header-button-alist
     それが記事のヘッダーだけに適用され、それぞれの入力要素がどのヘッダーにボタン化を適用するかを示す追加の要素がある事を除き、これは他の連想リストと同じようなものです：

          (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)

     HEADER は正規表現です。

gnus-button-url-regexp
     埋め込まれた URL に合致する正規表現です。それは上の変数のディフォルトの値で使われます。

gnus-article-button-face
     ボタンに使われるフェイスです。

gnus-article-mouse-face
     マウスのカーソルがボタンの上にあるときに使われるフェイスです。

記事を自動的にボタン化する方法は see Customizing Articles を参照して下さい。

記事の日付
-----

日付は聞いた事の無い何か辺鄙な時間帯 (timezone) で作成されている事が良くあるので、記事が送られたときに何時であったかを知る事ができるのは非常に良い事でしょう。

W T u
     UT (別名 GMT, ZULU) で日付を表示します (gnus-article-date-ut)。

W T i
     日付を国際的な形式、ISO 8601 で表示します (gnus-article-date-iso8601)。

W T l
     日付をその地域の時間帯で表示します (gnus-article-date-local)。

W T s
     日付を利用者定義の様式を使って表示します (gnus-article-date-user)。その様式は変数 gnus-article-time-format で指定され、 format-time-string に渡される文字列です。様式指定をする事ができる一覧は変数の説明文を見てください。

W T e
     記事が投稿されてから今までどれくらいの時間が経過したかを表示します (gnus-article-date-lapsed)。この行が連続して更新されるようにしたいのであれば、

          (gnus-start-date-timer)

     をあなたの .gnus.el ファイルに入れるか、何かのフックで実行するようにする事ができます。タイマーを止めたいのであれば、命令 gnus-stop-date-timer を使う事ができます。

W T o
     本来の日付を表示します (gnus-article-date-original)。これはあなたが普通は他の変換関数を使っていて、それが完全に間違った事をしているのではないかと心配しているときに役に立ちます。例えば、記事が 1854 年に投稿されたとなっているとしましょう。しかし、そのような事は完全に不可能です。私が信用できませんか？ *くすくす(笑)*

自動的に好む書式で日付を表示する方法は see Customizing Articles を参照して下さい。

記事の署名
-----

それぞれの記事は２つの部分に分けられます――見出し (header) と本体 (body) です。本体は署名部分と文章部分に分けられます。どれが署名とみなされるかを決める変数は gnus-signature-separator です。これは普通は son-of-RFC 1036 で指示されている標準の ^-- $ です。しかし、多くの人が標準でない署名分離を用いますので、この変数は一つ一つ試される、正規表現のリストであることもできます。（探索は本体の最後から始めへとなされます。）よくありそうな値は：

     (setq gnus-signature-separator
           '("^-- $"         ; 標準
             "^-- *$"        ; 普通の壊し方
             "^-------*$"    ; 多くの人は長ーーい横棒の
                             ; 行を使います。あぁ！
             "^ *--------*$" ; ２倍のあぁぁ！
             "^________*$"   ; 下線も人気があります
             "^========*$")) ; 邪道！

あなたが寛容であればあるほど、間違った結果を得る事になるでしょう。

gnus-signature-limit はどれが署名とみなされるかへの制限を提供します。

 1. これが整数であれば、署名はこの整数より（文字で）長くなっていてはいけません。

 2. これが浮動小数点数であれば、署名はその数字より（行で）長くなっていてはいけません。

 3. これが関数であれば、その関数は引数なしで呼ばれ、それが nil を返せば、バッファには署名がありません。

 4. これが文字列であれば、それは正規表現として使われます。もしそれが合致すれば、その当の文字列は署名ではありません。

この変数は要素が上に挙げられた型のリストである事もできます。これは例です：

     (setq gnus-signature-limit
           '(200.0 "^---*Forwarded article"))

これは署名分離物の後に 200 を超える行か、署名分離物の後の文章が正規表現 ^---*Forwarded article に合致すれば、結局それは署名ではないという事です。

記事命令
====

A P
     記事バッファのポストスクリプト (PostScript) イメージを作成して印刷します (gnus-summary-print-article)。gnus-ps-print-hook がバッファを印刷する直前に実行されるでしょう。

概略の並び替え
=======

私はどうしてあなたがそうしたいのかはわからないのですが、それでもあなたはたくさんの方法で概略バッファを並び替える事ができます。

C-c C-s C-n
     記事番号によって並び替えます (gnus-summary-sort-by-number)。

C-c C-s C-a
     著者によって並び替えます (gnus-summary-sort-by-author)。

C-c C-s C-s
     表題によって並び替えます (gnus-summary-sort-by-subject)。

C-c C-s C-d
     日付によって並び替えます (gnus-summary-sort-by-date)。

C-c C-s C-l
     行によって並び替えます (gnus-summary-sort-by-lines)。

C-c C-s C-i
     スコアによって並び替えます (gnus-summary-sort-by-score)。

これらの関数はスレッドを使っているときと使っていないときの両方で動作します。後者の場合は、すべての概略行が一行一行並び替えられます。前者の場合は、根本と根本を基本として並び替えられ、それはあなたが求めている事とは異なっているかもしれません。スレッドを使う事を切り替えるには T T を打ってください (see Thread Commands)。

親記事を探す
======

^
     現在の記事の親記事を読みたくて、それが概略バッファに表示されていないくても、おそらくそれは可能でしょう。というのは、現在のグループが NNTP で取得されていて、親がまだ期限消去されていない上、現在の記事の References がぶち壊されていなければ、ただ、^ か A r を押せば良いだけです (gnus-summary-refer-parent-article)。もし全てが上手く行けば、親記事を取得できるでしょう。もし親記事が既に概略バッファに表示されているのであれば、ポイントがその記事に移動するでしょう。

     正の数値接頭引数を与えられれば、祖先まで多くの記事を戻って取得します。負の数字接頭引数が与えられれば、その祖先の記事だけを取得します。ですから、 3 ^ とすれば、gnus は現在の記事の親と、祖父母と、曾祖父母を取得します。 -3 ^ とすれば、gnus は現在の記事の曾祖父母だけを取得します。

A R （概略）
     記事の References 欄にある全ての記事を取得します (gnus-summary-refer-references)。

A T （概略）
     現在の記事が出てきているスレッドの、完全なスレッドを表示します (gnus-summary-refer-thread)。この命令は動作するために現在のグループのすべてのヘッダーを取得しなければなりませんので、普通は少し時間がかかります。もし、これをしばしば行うのであれば、 gnus-fetch-old-headers を invisible に設定することを考えたほうが良いでしょう (see Filling In Threads)。これは普通は視覚的な効果はありませんが、この命令の動作をかなり速くするでしょう。もちろん、グループに入るのは少し遅くなります。

     変数 gnus-refer-thread-limit はこの命令を実行するときにどのくらい古い（すなわち、現在の記事で最初に表示されたよりも前の記事）ヘッダーを取得するかを指定します。ディフォルトは 200 です。もし t であれば、取得可能なすべてのヘッダーを取得します。この変数は命令 A T に数値接頭引数を与える事により上書きする事ができます。

M-^ （概略）
     どのグループに属しているかに関わらず、任意の記事を NNTP サーバーに尋ねる事ができます。M-^ (gnus-summary-refer-article) は Message-ID、それはあの長く、なかなか読む事のできない <38o6up$6f2@hymir.ifi.uio.no> のような参照をあなたに尋ねます。あなたはすべてを正確に打ち込まなければなりません。残念ながら、あいまいな検索はできないのです。

ニュースでない選択方法から Message-ID で取得するときには現在の選択方法が使われますが、この命令に接頭引数を与える事でこれを上書きする事ができます。

もしあなたの読んでいるグループが Message-ID での取得があまり良くできないようなグループ（nnspool など）である場合、 gnus-refer-article-method を NNTP に設定する事ができます。おそらく、あなたが会話している NNTP サーバーがあなたの読んでいるスプールを更新していると非常に良いでしょう。しかし、それはどうしても必要なわけではありません。

ほとんどのメールバックエンドは Message-ID での取得が可能ですが、あまり優雅な方法でやっているわけではありません。nnmbox と nnbabyl はどのグループからの記事も位置を得ることができますが、 nnml と nnfolder は現在のグループに投稿した記事の位置しか得る事ができません。（その他のものは時間がかかりすぎます。）nnmh では全く不可能です。

代替手段
====

違った人は違った方法を使ってニュースを読もうとします。これは gnus でもそうであるので、我々は概略バッファーのためのマイナーモード (minor mode) に少しの選択肢を与えてあります。

選んで読む
-----

いくつかのニュースリーダー（nn や、あのぉ、VM/CMS での Netnews など）は２相の読むための界面を使います。利用者はまず概略バッファで読みたい記事に印を付けます。それから、記事バッファだけを表示して記事を読みます。

Gnus はこれをするための概略バッファマイナーモードを提供します―― gnus-pick-mode です。これは基本的には簡単に印を付けられるように少しのプロセス印命令が１打鍵命令になり、概略バッファへ切り替えるための追加命令を1つ提供します。

これが pick mode を使ったときに使用可能なキーです：

.
     現在の行の記事かスレッドを選択します (gnus-pickd-article-or-thread)。もし変数 gnus-thread-hide-subtree が true であれば、このキーはスレッドの最初の記事で使われたときはスレッド全体を選択します。そうでなければ、それはその記事だけを選択します。もし数値接頭引数を与えられればそのスレッドか記事へと生んでいき、それを選択します。 (行数は普通は概略選択行の最初に表示されています。)

SPACE
     概略バッファを一ページ次にスクロールします (gnus-pick-next-page)。もしバッファの最後であれば、選択記事を読み始めます。

u
     スレッドか記事を未選択にします (gnus-pick-unmark-article-or-thread)。変数 gnus-thread-hide-subtree が true であれば、このキーはスレッドの最初で使われればスレッドを未選択にします。そうでない場合はそれは記事だけを未選択にします。その行にあるスレッドか記事を未選択にするためにこのキーに数値接頭引数を与える事ができます。

RET
     選択された記事を読み始めます (gnus-pick-start-reading)。接頭引数を与えられれば、まずすべての未選択記事に既読の印を付けます。 gnus-pick-display-summary が nil でないと、概略バッファは読んでいる間も表示されます。

全ての普通の概略モード命令は選択モード (pick-mode)でも使用可能ですが、 u は例外です。しかし、同じ関数 gnus-summary-tick-article-forward に割り当てられている ! を使う事ができます。

これが良い考えだと思うのであれば、次のようにする事ができます：

     (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)

gnus-pick-minor-mode-hook は pick マイナーモードバッファで実行されます。

pick モードでの概略行の様式は標準の様式とは少し違います。それぞれの行の最初に行数が表示されます。 Pick モードの行の様式は変数 gnus-summary-pick-line-format で制御されます (see Formatting Variables)。これは gnus-summary-line-format と同じ様式指定を受け付けます (see Summary Buffer Lines)。

バイナリーグループ
---------

もし多くの時間をバイナリーグループ (binary group) で過ごしているのなら、いつも X u, n, RET を叩くのが嫌になっているでしょう。 M-x gnus-binary-mode は記事を普通の方法で表示する代わりに、普通の gnus の記事選択関数を記事群を uudecode しその結果を表示するように変更する、概略バッファのためのマイナーモードです。

実際は、このモードにしたときに、現実の記事を見るための唯一の命令が g です (gnus-binary-show-article)。

gnus-binary-mode-hook がバイナリーマイナーモードバッファで呼ばれます。

木表示
===

もし普通の gnus の概略表示を好きでないならば、gnus-use-trees を t に設定してみると良いかもしれません。これは（ディフォルトで）追加の 木バッファ (tree buffer) を作成します。木バッファではすべての概略モード命令を実行する事ができます。

もちろん、木表示をカスタマイズする変数が少しあります：

gnus-tree-mode-hook
     すべての木モードバッファで実行されるフックです。

gnus-tree-mode-line-format
     木モードバッファでのモード行のためのフォーマット文字列です (see Mode Line Formatting)。ディフォルトは Gnus: %%b %S %Z です。使用可能な指定は see Summary Buffer Mode Line を参照してください。

gnus-selected-tree-face
     木バッファで選択された記事をハイライトするために使われるフェイスです。ディフォルトでは modeline です。

gnus-tree-line-format
     木の節のためのフォーマット文字列です。でもこの名前は少し誤った名称です―― それは行ではなく、ただ節を定義するだけです。ディフォルトの値は %(%[%3,3n%]%) で、それは投稿者の名前の最初の３文字を表示します。すべての節が同じ長さであるのは重要ですので、%4,4n のような指定を使わなければならない のです。

     有効な指定は：

     n
          投稿者の名前。

     f
          From 欄。

     N
          記事の番号。

     [
          開き括弧。

     ]
          閉じ括弧。

     s
          表題。

     See Formatting Variables。

     表示に関連した変数は：

     gnus-tree-brackets
          これは『本当の』記事と『まばら記事』に違いを付けるために使われます。様式は ((本当の開 . 本当の閉) (まばら開 . まばら閉) (偽の開 . 偽の閉)) となっていて、ディフォルトは ((?[ . ?]) (?( . ?)) (?{ . ?}) (?< . ?>)) です。

     gnus-tree-parent-child-edges
          これは親の節を子に接続するために使われる文字を含んだリストです。ディフォルトは (?- ?\\ ?|) です。

gnus-tree-minimize-window
     もしこの変数が nil でないと、他の gnus ウィンドウがもっと場所を取れるように gnus は木バッファをできるだけ小さくします。もしこの変数が数字であると、木バッファはその数字より大きくなる事はありません。ディフォルトは t です。フレームでいくつかのウィンドウが横に並んで表示されていて、木バッファがそのうちの一つである場合、木ウィンドウを最小化することはその隣に表示されているすべてのウィンドウの大きさを変更する事に注意してください。

gnus-generate-tree-function
     実際にスレッドの木を作成する関数です。２つの既定義の使用可能な関数は： gnus-generate-horizontal-tree と gnus-generate-vertical-tree（これがディフォルトです）です。

水平木バッファ (horizontal tree buffer) の例です：

     {***}-(***)-[odd]-[Gun]
          |      \[Jan]
          |      \[odd]-[Eri]
          |      \(***)-[Eri]
          |            \[odd]-[Paa]
          \[Bjo]
          \[Gun]
          \[Gun]-[Jor]

同じスレッドが垂直木バッファ (vertical tree buffer) で表示されたものです：

     {***}
       |--------------------------\-----\-----\
     (***)                         [Bjo] [Gun] [Gun]
       |--\-----\-----\                          |
     [odd] [Jan] [odd] (***)                   [Jor]
       |           |     |--\
     [Gun]       [Eri] [Eri] [odd]
                               |
                             [Paa]

もし水平木を使っているのなら、概略バッファで木を隣り合わせで表示できれば嬉しいでしょう。次のようなものをファイル .gnus.el に加える事ができます：

     (setq gnus-use-trees t
           gnus-generate-tree-function 'gnus-generate-horizontal-tree
           gnus-tree-minimize-window nil)
     (gnus-add-configuration
      '(article
        (vertical 1.0
                  (horizontal 0.25
                              (summary 0.75 point)
                              (tree 1.0))
                  (article 1.0))))

See Windows Configuration。

メールグループ命令
=========

いくつかの命令はメールグループのみで意味を持ちます。これらの命令が現在のグループで有効でないなら、それらは大騒ぎをしてあなたに知らせるでしょう。

すべてのこれらの命令は（期限削除と編集命令は除く）プロセス/接頭引数の習慣を使います (see Process/Prefix)。

B e
     グループのすべての期限削除可能な記事を期限切れ削除します (gnus-summary-expire-articles)。

B M-C-e
     グループのすべての期限削除可能な記事削除します (gnus-summay-expire-articles-now)。これは現在のグループの該当する全ての期限削除記事は永遠に空の大きな /dev/null へ消え去るという事です。

B DEL
     メール記事を削除します。これは『あなたのディスクから今から永遠に削除して、二度と戻らない』の『削除』です。注意して使ってください (gnus-summary-delete-article)。

B m
     あるメールグループから別のところへ記事を移動します (gnus-summary-move-article)。

B c
     あるグループ（メールグループや他のもの）からメールグループに記事を複製します (gnus-summary-copy-article)。

B B
     現在の記事を他のグループにクロスポストします (gnus-summary-crosspost-article)。これは他のグループ記事の新しい複製を作成し、記事の Xref 欄も適切に更新されます。

B i
     任意のファイルを現在のメールグループに取り込みます (gnus-summary-import-article)。あなたはファイル名と、From 欄と Subject 欄の入力を促されます。

B r
     メール記事をスプールし直します (gnus-summary-move-article)。 gnus-summary-respool-default-method が再スプールするときのディフォルトの選択方法として使用されます。この変数はディフォルトで nil で、これは現在のグループの選択方法が代わりに使われるという事です。

B w
e
     現在の記事を編集します (gnus-summary-edit-article)。編集を終了して変更を永遠にするために、C-c C-c を打ちます。もし命令 C-c C-c に数値接頭引数を与えると、gnus は記事を再ハイライトしません。

B q
     もし記事を再スプールしたいときは、再スプールをする前にどのグループに記事が移るかに興味があるでしょう。この命令でそれがわかります (gnus-summary-respool-query)。

B t
     同様に、この命令は再溜め込みをするときに使われた全ての特級分割方式を、もしそれがあれば表示します (gnus-summary-respool-trace)。

B p
     一部の人はあなたの投稿へのフォローアップをするときに、『親切な』複製を送る傾向があります。これらは普通はそこに Newsgroups 欄が付いているのですが、いつもそうであるとは限りません。この命令 (gnus-summary-article-posted-p) は現在の記事をあなたのニュースサーバーから（というよりは、むしろ gnus-refer-article-method や gnus-select-method から）取得しようとし、記事を発見できたかどうかを報告します。それが記事を発見しなかったとしても、それはとにかく投稿されているかもしれません――メールの伝達はニュースの伝達よりもずっと速く、ニュースの複製がまだ到着していないだけかもしれないのです。

もし、規則的に記事を移動（もしくは複製）するのであれば、gnus に記事をどこに入れれば良いか提案させたいと思うでしょう。 gnus-move-split-methods は gnus-split-methods と同じ構文を使う変数です (see Saving Articles)。あなたが妥当だと思うような提案をするようにその変数をカスタマイズする事ができます。

     (setq gnus-move-split-methods
           '(("^From:.*Lars Magne" "nnml:junk")
             ("^Subject:.*gnus" "nnfolder:important")
             (".*" "nnml:misc")))

いろいろな概略の物件
==========

gnus-summary-mode-hook
     概略モードバッファを作成するときにこのフックが呼ばれます。

gnus-summary-generate-hook
     これはスレッド作成と概略バッファ作成の前に実行する最後のものとして呼ばれます。これはニュースグループの持っているデータに基づいてスレッドの変数をカスタマイズするために非常に便利です。このフックはほとんどの概略バッファ変数が設定された後に呼ばれます。

gnus-summary-prepare-hook
     それは概略バッファが作成された後に呼ばれます。例えば、それは何か他の邪悪な方法で行をハイライトしたり、バッファの見え方を修正したりするのに使ったりするかも知れません。

gnus-summary-ignore-duplicates
     Gnus が同じ Message-ID を持つ２つの記事を発見したときは、何か思い切った事をしなければなりません。別の記事が同じ Message-ID を持つ事は許されていませんが、それは何らかの出所からメールを読んでいるときに起こるかもしれません。Gnus はこの変数によって何が起こるかをカスタマイズできるようになっています。もしそれが nil（これがディフォルトです）であれば、 gnus は Message-ID を付け替えて（表示のためだけに）記事を他の記事と同じように表示します。この変数が t であると、それは記事を表示しません---最初から存在しなかったかのように。

概略グループ情報
--------

H f
     現在のグループの FAQ（frequently asked questions（頻繁にされる質問）のリスト）を取得しようとします (gnus-summary-fetch-faq)。Gnus は普通は遠隔マシンのディレクトリである gnus-group-faq-directory から FAQ を取得しようとします。この変数はディレクトリーのリストである事もできます。その場合は、この命令に接頭引数を与える事でいろいろなサイト (site) から選ぶ事ができます。おそらく ange-ftp もしくは efs がファイルの取得に使われるでしょう。

H d
     現在のグループに関する短い記述を与えます (gnus-summary-describe-group)。接頭引数が与えられると、サーバーから強制的に記述の再読み込みをします。

H h
     最重要概略打鍵の非常に短い記述を与えます (gnus-summary-describe-briefly)。

H i
     Gnus の info の節 (node) に移動します (gnus-info-find-node)。

記事を探す
-----

M-s
     直後にある全ての記事を正規表現で検索します (gnus-summary-search-article-forward)。

M-r
     前にある全ての記事を正規表現で検索します (gnus-summary-search-article-backward)。

&
     この命令はあなたにヘッダー部分とその部分に合致する正規表現、合致した場合に実行される命令の入力を促進します (gnus-summary-execute-command)。もし接頭引数を与えられれば、代わりに後ろ向きに探します。

M-&
     プロセス印によって印付けられた全ての記事の操作を実行します (gnus-summary-universal-argument)。

概略生成命令
------

Y g
     現在の概略バッファを再作成します (gnus-summary-prepare)。

Y c
     全ての（現在のグループに）キャッシュされた記事 を概略バッファに挿入します (gnus-summary-insert-cached-articles)。

本当にいろいろな概略命令
------------

C-d
     もし現在のグループが他の記事の集まりであるならば（例えば、摘要 (digest)）、そのような記事でできているグループに入るためにこの命令を使うかもしれません (gnus-summary-enter-digest-group)。Gnus はこの命令に接頭引数を与えない限り、どのような型の記事が現在表示されているかを推測しようとし、それは強制的に『摘要』という解釈になります。基本的に、他の様式からなる他のメッセージの集合であったときは、C-d とすることによりもっと便利な方法でそれらのメッセージを読む事ができるようになります。

M-C-d
     この命令は上のものに非常に似ていますが、いくつかの文書を一つの大ーきいグループに集めます (gnus-summary-read-read-document)。それはいくつかの nndoc グループをそれぞれの文書のために 開き、それからこれらの nndoc グループの上に nnvirtual グループを開く事によってこの事を可能にしています。この命令はプロセス/接頭引数の習慣を理解します (see Process/Prefix)。

C-t
     概略行の切断を切り替えます (gnus-summary-toggle-truncation)。これはおそらく概略バッファの行中央表示関数を混乱させますので、記事を読んでいる間に切断を切っているのは良い考えではないでしょう。

=
     概略バッファのウィンドウを拡大します (gnus-summary-expand-window)。接頭引数を与えられれば、記事ウィンドウを拡大します。

M-C-e
     現在のグループのグループの媒介変数 (parameter) (see Group Parameters) を編集します (gnus-summary-edit-parameters)。

概略バッファを抜ける
==========

普通は概略バッファから抜けると、グループの全ての情報を更新してグループバッファに戻ります。

Z Z
q
     現在のグループを出て、グループの全ての情報を更新します (gnus-summary-exit)。抜け出るためのたいていの事をする前に gnus-summary-prepare-exit-hook が呼ばれ、それはディフォルトで gnus-summary-expire-articles を呼びます。抜け出る過程を追えた後に gnus-summary-exit-hook が呼ばれます。(未読の) グループが残っていないときにグループモードに戻るときに gnus-group-no-more-groups-hook が実行されます。

Z E
Q
     グループのどの情報も更新せずに現在のグループを抜け出ます (gnus-summary-exit-no-update)。

Z c
c
     グループの全ての保留でない記事 (unticked article) に既読の印を付けて、それから抜けます (gnus-summary-catchup-and-exit)。

Z C
     保留記事も含めて、全ての記事に既読の印を付けて、それから抜けます (gnus-summary-catchup-all-and-exit)。

Z n
     全ての記事に既読の印を付けて次のグループへ移動します (gnus-summary-catchup-and-goto-next-group)。

Z R
     現在のグループを出て、それから入り直します (gnus-summary-reselect-current-group)。もし接頭引数を与えられれば、既読と未読の両方の全ての記事を選択します。

Z G
M-g
     グループを抜け、グループの新しい記事を調べ、グループを選択します (gnus-summary-rescan-group)。もし接頭引数を与えられれば、既読と未読の両方の全ての記事を選択します。

Z N
     グループを抜けて、次のグループへ移動します (gnus-summary-next-group)。

Z P
     グループを抜けて、前のグループへ移動します (gnus-summary-prev-group)。

Z s
     現在の既読/印付き記事の数をドリブルバッファ (dribble buffer) に保存し、それからドリブルバッファを保存します (gnus-summary-save-newsrc)。もし接頭引数を与えられれば、ファイル .newsrc も保存します。この命令を使うと、更新なしで抜け出る事 (Q 命令) は意味が無くなります。

現在のグループを抜けるときに gnus-exit-group-hook が呼ばれます。

あなたにグループを抜けて、それから考えを変える癖があるのであれば、 gnus-kill-summary-on-exit を nil に設定するのが良いかもしれません。もしそうすれば、gnus はそれから抜け出るときに概略バッファを削除しません。（何という驚き！）その代わりに、それはバッファの名前を *Dead Summary ... * のようなものに変更し、 gnus-dead-summary-mode と呼ばれるマイナーモードを導入します。今や、そのバッファに切り替えれば、全てのキーが関数 gnus-summary-wake-up-the-dead に割り当てられていることに気付くでしょう。死んだ概略バッファ (dead summary buffer) でどれかのキーを叩く事と、生きた普通の概略バッファになるでしょう。

死んだ概略バッファは同時に一つしか存在する事はできません。

概略バッファを抜け出ると、現在のグループのデータは更新されます（どの記事を読んで、どの記事に返答したか、などなど。）もし変数 gnus-use-cross-reference が t であると（それがディフォルトです）、そのグループに相互参照された (cross referenced) 記事は既読の印が付き、それが相互投稿 (cross post) された他の購読しているグループでも既読の印が付きます。この変数が nil でも t でなければ、記事は購読と未購読の両方のグループで既読の印が付きます (see Crosspost Handling)。

相互投稿の扱い
=======

相互投稿 (cross post) された記事に既読の印を付ける事は、同じ記事を２回以上読まないですむという事を保証します。もちろん、だれかがそれをいくつかのグループに別々に投稿しない限りは。同じ記事をいくつかのグループに投稿する事（相互投稿でなくて）は spamming と呼ばれ、あなたはそのような憎むべき犯罪を行うものにに対して、法律によって不快な記事を送ることが義務づけられています。 spam を選別するために、NoCeM 取扱を試したいと思うかもしれません (see NoCeM)。

覚えてください： 相互投稿は構いませんが、同じ記事を別々にいくつかのグループに投稿するのは許されません。大量の相互投稿 (velveeta) はどうしても避けられるべきで、過剰相互投稿に対して不満を言うために命令 gnus-summary-mail-crosspost-complaint を使うことさえできます。

相互投稿を gnus が正しく扱えないようになる原因の一つは、NOV 行に Xref 欄を含まない、XOVER（これは非常に良いです、というのはそれは速度をとても速くするからです）の使用可能な NNTP サーバーを使っていることです。これは害悪なのですが、あぁ、悲しいかな、非常に良くある事です。 Gnus はあなたが読んだ全ての記事に Xref 行を登録する事で、正しい事をしよう としますが、記事を削除するか、読まないで既読の印を付けると、gnus はこれらの記事に Xref の行をのぞきまわる機会を得る事が無く、相互参照機構を用いる事ができません。

あなたの NNTP サーバーがその概観ファイル (overview file) に Xref 欄を含んでいるかを調べるには、telnet your.nntp.server nntp として、inn サーバーで More READER とし、それから LIST overview.fmt とする事を試してください。これは動作しないでしょうが、もし動作して、取得した最後の行が Xref:full でないならば、ニュースの管理者が概観ファイルに Xref 欄を含むようにするまで、ニュース管理者に叫び、泣き付く事を続けるべきでしょう。

Gnus にいつでも正しい Xref を取得するようにさせたいのであれば、 gnus-nov-is-evil を t にする必要があり、それは非常に速度を遅くします。

ま、人生はそのようなものです。

代替手段に付いては see Duplicate Suppression を参照してください。

重複の抑制
=====

ディフォルトでは gnus は相互投稿機構を利用する事によって、同じ記事を２回以上読まないようにしようとします (see Crosspost Handling)。しかし、その単純で効果的な方法は、いろいろな理由により、満足する結果をもたらさないかも知れません。

 1. NNTP サーバーは Xref 欄の生成に失敗するかも知れません。これは悪い事で、あまり起こりません。

 2. NNTP サーバーは .overview データベースに Xref 欄を含めるのに失敗するかも知れません。これは悪い事で、非常に良くある事です、あぁ悲しい。

 3. 同じグループ（もしくはいくつかの関連したグループ）を違った NNTP サーバーから読んでいるかもしれません。

 4. グループに投稿された記事と重複するメールを受け取ったかもしれません。

Xref の扱いに失敗する状況は他にもありますが、これら４つがとても良くある状況です。

もし、本当にもしも Xref の扱いに失敗したら、重複抑制に切り替える事を考えるかもしれません。そうすれば、gnus はあなたが読んだ全ての記事かそうでなければ、既読の印が付いた全ての記事の Message-ID を記憶し、それから、魔法のように、その後のそれらと出会った全ての場合に、既読の印を付けます――全てのグループで。この機構を使うのは非常に非効率的ですが、過度に非効率なわけではありません。もちろん同じ記事を一回以上読むほうが好ましいです。

重複抑制はあまり繊細なものではありません。どちらかというと、大槌のようなものです。それは非常に単純な方法で動作しています――もし記事に既読の印を付ければ、それはこの Message-ID を キャッシュに加えます。次にこのMessage-ID にであったときは、M 印によって記事に既読の印を付けます。それはその記事がどのグループにあるかは気にしません。

gnus-suppress-duplicates
     nil でなければ、重複抑制をします。

gnus-save-duplicate-list
     nil でなければ、重複のリストをファイルに保存します。これは起動と終了の時間を長くしますので、初期状態では nil です。しかし、これは単一の gnus の実行期で読まれた重複記事だけが抑制されるという事です。

gnus-duplicate-list-length
     この変数はどのくらい多くの Message-ID を重複抑制リストに保っておくかも決定します。ディフォルトは 10000 です。

gnus-duplicate-file
     重複抑制のリストを蓄積しておくファイルの名前です。ディフォルトは ~/News/suppression です。

何度も gnus を終了して起動する傾向があるのであれば、おそらく gnus-save-duplicate-list を t にするのは良い考えでしょう。もし gnus を続けて何週間も走らせておくのであれば、それを nil にするかもしれません。一方で、リストを保存する事は起動と終了をずっと遅くしますので、よく gnus を終了して起動するのであれば、 gnus-save-duplicate-list を nil に設定するべきであるという事になります。うーむ。私はあなたがどうするかに任せたい、と思います。

記事バッファ
******

記事は一つしかない記事バッファに表示されます。全ての概略バッファは（gnus に共有しないように指示しない限り）同じ記事バッファを共有します。

余分なヘッダーを隠す
==========

各記事の頭の部分はヘッダー(head)と呼ばれます（残りの部分はボディ (body)です。すでにお気づきでしょうが）。

ヘッダーにはたくさんの便利な情報が含まれています。記事を書いた人の名前、それが書かれた日付、記事の表題などです。これはとても良いんですが、ヘッダーには大部分の人には見たくもない情報――記事があなたのところに着くまでどんなシステムを経由してきたか、Message-ID, References などなど…もうやんなっちゃうくらい――もたくさん含まれています。たぶんあなたはこれらの行はいくつか取り除いてしまいたいと思うでしょう。もしこれらの行を全て記事バッファ内に残しておきたければ、gnus-show-all-headers を t に設定してください。

Gnus はヘッダーを選り分けるために２つの変数を用意しています。

gnus-visible-headers
     この変数が nil 以外であれば、どのヘッダーを記事バッファに残したいかを指定する正規表現であるとみなされます。この変数にマッチしないヘッダーは全て隠されます。

     例えば、記事を書いた人の名前と表題のみを見たければ、こう指定します。

          (setq gnus-visible-headers "^From:\\|^Subject:")

     この変数は、表示させたいヘッダーにマッチする正規表現をリストで指定することもできます。

gnus-ignored-headers
     この変数は gnus-visible-headers の反対です。この変数が設定されていれば（かつ gnus-visible-headers が nil であれば）、これは隠したいヘッダー行全てにマッチする正規表現であるとみなされます。この変数にマッチしない全てのヘッダー行は表示されます。

     例えば、単に References 欄と Xref 欄のみを消し去りたければ、以下のようにします：

          (setq gnus-ignored-headers "^References:\\|^Xref:")

     この変数は消したいヘッダーにマッチする正規表現のリストでも構いません。

     なお、gnus-visible-headers が nil 以外の場合は、この変数には効果が無いことに注意してください。

Gnus はヘッダーの並べ替え(sort)も行います（これはディフォルトで行われます）。この並べ替えは gnus-sorted-header-list 変数を設定することで制御することができます。これはヘッダーをどういう順序で表示するかを指定する正規表現のリストです。

例えば、記事の著者名を最初に、次に表題を表示したければ、こんな風になるでしょう。

     (setq gnus-sorted-header-list '("^From:" "^Subject:"))

表示するようになっているヘッダーでこの変数に指定されていないものは、この変数に指定されている全てのヘッダーの後に、適当な順序で表示されるでしょう。

gnus-article-hide-boring-headers を gnus-article-display-hook に入れることによって、もっとつまらないヘッダーを隠すことができます。この関数が何をするかは gnus-boring-article-headers 変数に依存します。この変数はリストですが、このリストには実際のヘッダーの名前が入るのではありません。代わりに gnus がチェックして視界から消し去るためのさまざまな「つまらない条件」boring conditions のリストを指定します。

この条件には以下のようなものがあります。

empty
     空のヘッダーを全て消去します。

newsgroups
     Newsgroups 欄が現在のグループ名しか含んでいない場合には消去します。

followup-to
     Followup-To 欄が Newsgroups 欄と同一である場合には消去します。

reply-to
     Reply-To 欄が From 欄と同じアドレスを示している場合には消去します。

date
     その記事が過去３日以内のものであれば、Date 欄を消去します。

long-to
     To 欄があまりにも長い場合には消去します。

many-to
     To 欄が一つよりも多ければ、それらを全て消去します。

上記の最初の４つの要素を入れたければ、こんな風になります。

     (setq gnus-boring-article-headers
           '(empty followup-to reply-to))

これはこの変数のディフォルト値でもあります。

MIME を使う
========

パントマイム (mime) とは、意味も無く空中で手を振るものとして広く知られており、その間観客はあくびをしながらぼんやりとしてます。

一方、MIME とは、意味も無く記事を符号化する標準であり、そのために全てのニュースリーダが恐怖で死んでしまうものです。

MIME はその記事がどんな文字集合を使用しているか、その文字をどう符号化しているかを指定することができ、さらには絵やその他のみだらなものを無邪気な格好の記事で埋め込むことさえ可能にします。

Gnus は gnus-article-display-method-for-mime に記事を押し付けることで MIME を扱います。この初期値は gnus-article-display-mime-message です。この関数は SEMI MIME-View プログラムを呼び出して実際の処理を行います。SEMI MIME-View に関する詳しい情報は、マニュアルを参照してください（まだないけど(;_;)）。

MIME を常に使用したければ、gnus-show-mime を t に設定してください。しかし、gnus-strict-mime が nil 以外であれば、MIME 処理は記事中に MIME ヘッダーがあるときのみ使用されます。gnus-show-mime を設定していると、運が悪いと記事バッファには故障したような画面が見えることもあるでしょう。これは避けようがありません。

GNUS や Gnus では、このたちの悪い問題で驚かされないようにするには、概略バッファにおいて切り替え機能を使うというのが最善かも知れません（例えば、 alt.sing-a-long グループに入ると、あなたの気づかないうちに MIME は記事中のサウンドファイルを復号して、何やら怪しげな長い長い歌があなたのスピーカーから大音響で流れ出し、あなたはボリュームボタンを見つけられず、というのはそんなものはもともとついてないからで、みんなはあなたの方を睨みはじめ、あなたはプログラムを止めようとするけどできなくて、ボリュームを制御するプログラムも見つけられなくて、そして部屋中の全員は突然あなたのことを軽蔑の眼差しで見るようになってしまい、あなたはちょっと面白くない思いをする、とか）。

現実の出来事と実在の人物に類似しているかもしれませんが、これは全てホントのことです。げほげほ。

まあ、そういう訳で、gnus では metamail-buffer を使うのを止めた訳です。そういう訳で、今では常に gnus-show-mime を nil 以外にしておき、周りに人がいない時を見計らって記事バッファに現われるボタンを押しましょう。

記事のカスタマイズ
=========

gnus-article-display-hook は記事が記事バッファに書き込まれた直後に呼び出されます。これは記事が表示される前の処理を全て扱う、ということです。

初期設定ではではこのフックには gnus-article-maybe-hide-headers, gnus-hide-boring-headers, gnus-article-treat-overstrike, gnus-article-maybe-highlight (XEmacs では、 gnus-article-display-x-face も) だけが含まれていますが、このフックに入れることができる関数は何千も、いや何百万もあります。各関数の概観は see Article Highlighting, see Article Hiding, see Article Washing, see Article Buttons, see Article Date を参照してください。注意点として、このフックでは関数の順序が影響することがあるので、お望みの結果を得るにはちょっと手間取ってしまうかもしれません。

もちろん、あなた独自の関数を書くこともできます。この関数は記事バッファ内から呼び出され、あなたのやりたいことをほとんど何でもできます。バッファに残しておかなければならない情報は何もありません――何でも変更することができます。ですが、ヘッダーは消去しない方が良いです。その代わり、ヘッダーをどこかにやってしまいたければ、それらを見えないようにしてください。

記事のキー操作
=======

概略バッファにおけるキー操作のほとんどは記事バッファでも使用できます。これらは概略バッファでそのキーを押したかのように動作します。つまり、実は記事を読んでいる間、概略バッファを表示させておく必要もないということです。全ての操作は記事バッファから行うことができるのです。

それらに加えていくつかのキー操作が利用できます。

SPACE
     一頁前にめくります (gnus-article-next-page)。

DEL
     一頁後ろに戻します (gnus-article-prev-page)。

C-c ^
     カーソル位置が Message-ID の近辺にあるときに C-c ^ を押すと、gnus はサーバーからその記事を取ってこようとします (gnus-article-refer-article)。

C-c C-m
     カーソル位置の近くにあるアドレスに返信を送ります (gnus-article-mail)。接頭引数を与えると、そのメールに引用します。

s
     バッファを再構成して、概略バッファを見えるようにします (gnus-article-show-summary)。

?
     利用できるキー操作のごく簡単な説明を出します (gnus-article-describe-briefly)。

TAB
     次のボタンがあればそこに移動します (gnus-article-next-button)。これはボタン機能をオンにしているときのみ意味を持ちます。

M-TAB
     一つ前のボタンがあればそこに移動します (gnus-article-prev-button)。

記事のその他
======

gnus-single-article-buffer
     nil 以外であれば、全てのグループに対して同じ記事バッファを使用します（これはディフォルトです）。nil であれば、各グループ毎の固有の記事バッファを持つようになります。

gnus-article-prepare-hook
     このフックは記事が記事バッファに書き込まれた直後に呼び出されます。これは主に、何か記事の内容に依存する処理をする関数のために用意されています。つまり記事バッファの内容を変更するような目的で使うべきではないでしょう。

gnus-article-display-hook
     このフックは記事を表示するときの最後に呼び出されるようになっていて、記事バッファの内容の修正、ハイライト処理、ヘッダーを隠す、などといったことを行うために用意されています。

gnus-article-mode-hook
     記事モードバッファで呼び出されるフックです。

gnus-article-mode-syntax-table
     記事バッファで用いられるシンタックステーブルです。これは text-mode-syntax-table をもとに初期化されます。

gnus-article-mode-line-format
     この変数は gnus-summary-mode-line-format と同じ行に従った様式文字列です (see Mode Line Formatting)。これは以下の一つの拡張を除いて、その変数と同じ様式指定を受付けます。

     w
          記事の「洗濯状態」wash status。これは記事に対して行われたであろう洗濯操作を示す一文字からなる短い文字列になります。

gnus-break-pages
     改頁 page breaking を行うかどうかを制御します。この変数が nil 以外であれば、記事中に頁区切り文字が現れた場所ごとに頁分割します。この変数が nil であれば頁分けは行われません。

gnus-page-delimiter
     これが上で触れた区切り文字です。ディフォルトでは ^L (フォームフィード、改頁) です。

メッセージの作成
********

全ての投稿とメールの命令は、C-c C-c を押す事によって、記事を送信する前に記事を好きなように編集する事のできる、メッセージバッファに移動します。 See The Message Manual。もし外部ニュースグループにいて、記事を外部サーバーを使って投稿したいのであれば、C-c C-c に接頭引数を与えて、gnus に外部サーバーを使って投稿しようと試させる事ができます。

投稿するべきでなかった記事を削除するための情報は see Canceling and Superseding を参照してください。

メール
===

出て行くメールをカスタマイズする変数です：

gnus-uu-digest-headers
     要約メッセージ (digested message) に含まれるヘッダーに合致する正規表現のリストです。ヘッダーは合致した順に取り込まれます。

gnus-add-to-list
     nil でなければ、a をしたときに、to-list グループパラメータをそれのないメールグループに付け加えます。

投稿
==

ニュース記事作成のための変数：

gnus-sent-message-ids-file
     Gnus は送信した全てのメールの Message-ID 履歴ファイル (history file) を保存します。もしメールを既に送った事が発見されたなら、利用者にメールを再送するかどうかを尋ねます。（これは主に同じパケットを複数回送る傾向のある SOUP パケットや、それに似たようなものを扱っているときに役に立ちます。）この変数はこの履歴ファイルがどこにあるかを指定します。ディフォルトでは ~/News/Sent-Message-IDs です。Gnus が履歴ファイルを保持する事を望まないのであれば、この変数を nil に設定する事ができます。

gnus-sent-message-ids-length
     この変数はどれくらい多くの Message-ID を履歴ファイルに保持するかを指定します。ディフォルトでは 1000 です。

投稿するサーバー
========

最新の（もちろん、非常に知的な）記事を送り出すために、あの魔法のような C-c C-c キーを押した時、それはどこにいくのでしょう？

尋ねてくれてありがとう。あなたを恨みます。

それは非常に複雑になり得ます。普通は、gnus は同じ基本サーバーを使用します。しかし。あなたの基本サーバーが投稿を許可せず、読むことのみを許可しているのならば、おそらくあなたの（非常に知的でとんでもなく興味深い）記事を投稿するために、他のサーバーを使いたいと思うでしょう。gnus-post-method を他の方法に設定する事ができます。

     (setq gnus-post-method '(nnspool ""))

さて、この設定をした後でサーバーがあなたの記事を拒否したり、サーバーが落ちていたりしたら、どうしたらよいのでしょう？この変数を上書きするために、命令 C-c C-c に零でない接頭引数を与える事で、投稿に『現在の』サーバーを使わせる事ができます。

もし、零接頭引数をその命令に与えたなら（すなわち、C-u 0 C-c C-c）、 gnus は投稿にどの方法を使うかをあなたに尋ねます。

gnus-post-method を選択方法のリストにする事もできます。その場合は、 gnus は常に投稿にどの方法を使うかをあなたに尋ねます。

メールと投稿
======

これはメールを出す事と投稿する事の両方に関連する変数のリストです：

gnus-mailing-list-groups

     もしあなたのニュースサーバーが本当にメーリングリストから NNTP サーバーへのゲートウェイを提供しているのであれば、それらのグループは問題なく読めるでしょう。しかし簡単にはそれらに投稿/フォローアップすることはできません。一つの解決法は グループパラメータ (see Group Parameters) に to-address を加える事です。簡単にできるのは、 gnus-mailing-list-groups を、本当にメーリングリストであるようなグループに合致する正規表現に設定することです。その後は、すくなくとも、メーリングリストへのフォローアップはたいていのときに動作します。これらのグループに投稿する事は (a) それでも苦痛を引き起こすでしょうけど。

あなたは自分が送るメッセージの綴りを調べたいと思うかも知れません。もしくは、もし手で綴り調べをしたくないのであれば、自動綴り調べを ispell パッケージを使う事によって付け加える事ができます：

     (add-hook 'message-send-hook 'ispell-message)

メッセージの保管
========

Gnus はあなたが送ったメールとニュースを貯めておくためのいくつかの違った方法を提供します。ディフォルトの方法はメッセージを保存するために事実上の書庫サーバー(archive virtual server)を使います。これを完全に禁止したいのであれば、変数 gnus-message-archive-group は nil になるべきで、これがディフォルトです。

gnus-message-archive-method は送ったメッセージを蓄積するためにどの事実上のサーバーを gnus が使うべきかを指定します。ディフォルトは：

     (nnfolder "archive"
               (nnfolder-directory   "~/Mail/archive")
               (nnfolder-active-file "~/Mail/archive/active")
               (nnfolder-get-new-mail nil)
               (nnfolder-inhibit-expiry t))

しかし、どのメール選択方法でも使う事ができます（nnml, nnmbox などなど）。しかし nnfolder はこのような事をするのにとても好ましい選択方法です。ディフォルトのディレクトリー選択を好きでないならば、次のようにできます：

     (setq gnus-message-archive-method
           '(nnfolder "archive"
                      (nnfolder-inhibit-expiry t)
                      (nnfolder-active-file "~/News/sent-mail/active")
                      (nnfolder-directory "~/News/sent-mail/")))

Gnus は外へ出て行く全てのメッセージに、一つかそれ以上のそのサーバーのグループへ向かう Gcc 欄を挿入します。どのグループを使うかは変数 gnus-message-archive-group によって決まります。

この変数は次のような事をするために使われます：

  * 文字列メッセージはそのグループに保存されます。

  * 文字列のリストメッセージはそれらの全てのグループに保存されます。

  * 正規表現、関数、様式の連想リストキーが『合致』すると、結果が使われます。

  * nil メッセージの保存は行われません。これがディフォルトです。

試してみましょう：

MisK と呼ばれる一つのグループに保存するならば：

     (setq gnus-message-archive-group "MisK")

２つのグループ、MisK と safe に保存するならば：

     (setq gnus-message-archive-group '("MisK" "safe"))

どのグループにいるかによって違ったグループに保存するなら：

     (setq gnus-message-archive-group
           '(("^alt" "sent-to-alt")
             ("mail" "sent-to-mail")
             (".*" "sent-to-misc")))

もっと複雑なもの：

     (setq gnus-message-archive-group
           '((if (message-news-p)
                 "misc-news"
               "misc-mail")))

全てのニュースメッセージを一つのファイルに保存して、メールメッセージを一月につき一つのファイルに保存するには：

     (setq gnus-message-archive-group
           '((if (message-news-p)
                 "misc-news"
               (concat "mail." (format-time-string
                                "%Y-%m" (current-time))))))

（XEmacs 19.13 には format-time-string はありませんので、その gnus-message-archive-group のために違った値を使わなければなりません。）

今や、メッセージを送ると、それは適切なグループに保存されます。（もし特定のメッセージに対して保存をしたくないのであれば、挿入された Gcc 欄を取り除いてください。）保管グループは次に gnus を起動したときか、次にグループバッファで F を押したときにグループバッファに現れます。他のグループと同じようにそのグループに入って、記事を読む事ができます。そのグループが本当に大きくなって嫌になったら、なにか良いものにその名前を変更する事ができます（グループバッファで G r を使う事によって）―― misc-mail-september-1995 や他のもに。新しいメッセージは古い（今は空になった）グループに溜められます。

以上が送ったメッセージを保管するディフォルトの方法です。Gnus はディフォルトの方法を好きではない人には違ったやり方を勧めています。そのような場合は、gnus-message-archive-group を nil に設定するべきです。これは保管をしないようにします。

gnus-outgoing-message-group
     全ての外にいくメッセージはこのグループに入れられます。もし全ての外に行くメールと記事をグループ nnml:archive に保管したいのであれば、この変数をその値に設定する事ができます。この変数はグループ名のリストである事もできます。

     もしそれぞれのメッセージをどのグループに入れるかをもっと制御したいのであれば、この変数を現在のニュースグループ名を調べて、適切なグループ名（もしくは名前のリスト）を返す関数に設定する事ができます。

     この変数は gnus-message-archive-group の代わりに使う事ができますが、後者の方が好ましい方法です。

投稿様式
====

それらはすべて変数で、それは私の頭を泳がせます。

それで、なぜどのグループに投稿するかによって違った Organization と署名を望むのでしょうか？そして、あなたは家庭のマシンと職場のマシンの両方から投稿して、違った From 行やその他のものを望むのですか？

そのような事をする方法の一つは変更される必要のある変数を変更する賢いフックを書く事です。それは少し退屈なので、利用者にこれらの事を手軽な連想リストで指定するというすばらしい着想にたどり着いた人がいました。これは変数 gnus-posting-styles の例です:

     ((".*"
        (signature "Peacs and happiness")
        (organization "What me?"))
      ("^comp"
       (signature "Death to everybody"))
      ("comp.emacs.i-love-it"
       (organization "Emacs is it")))

この例から推測されるように、この連想リストはいくつかの 様式 (style) からなっています。それぞれの様式は最初の要素が何らかの形で ``合致'' したときに適用されます。連想リスト全体は最初から最後まで反復して実行され、それぞれの合致が適用されます。これは、後の様式の属性が前に合致した様式の属性を上書きすると言う事です。ですから、 comp.programming.literate は、署名 Death to everybody と Organization ヘッダー What me? を持ちます。

それぞれの様式の最初の要素は 合致 (match) と呼ばれます。もしそれが文字列であれば、gnus はそれをグループ名に正規表現として合致操作を行います。もしそれが関数のシンボルであれば、その関数が引数無しで呼ばれます。それが変数のシンボルであれば、その変数が参照されます。それがリストであれば、そのリストが 評価 されます。どの場合でも、これが nil でない値を帰せば、様式は 合致した と言います。

それぞれの様式は任意の量の 属性 を持つ事ができます。それぞれの属性は (NAME . VALUE) の対により成り立っています。属性名は、 signature, signature-file, organization, address, name, body のどれかである事ができます。属性名は文字列である事もできます。その場合は、これはヘッダー名として使われ、その値が記事のヘッダーに挿入されます。

属性値は文字列 (そのまま使われます)、関数 (返り値が使われます)、変数 (その値が使われます)、リスト (それは 評価 されて、返り値が使われます) である事ができます。

もし、作成しようとしているメッセージがニュース記事かメールメッセージであるかを調べたいときは、2つの動的に束縛される変数 message-this-is-news と message-thiss-is-mail を調べる事ができます。

そして、これは例です:

     (setq gnus-posting-styles
           '((".*"
              (signature-file "~/.signature")
              (name "User Name")
              ("X-Home-Page" (getenv "WWW_HOME"))
              (organization "People's Front Against MWM"))
             ("^rec.humor"
              (signature my-funny-signature-randomizer))
             ((equal (system-name) "gnarly")
              (signature my-quote-randomizer))
             (message-this-is-news
              (signature my-news-signature))
             (posting-from-work-p
              (signature-file "~/.work-signature")
              (address "user@bar.foo")
              (body "You are fired.\n\nSincerely, your boss.")
              (organization "Important Work, Inc"))
             ("^nn.+:"
              (signature-file "~/.mail-signature"))))

下書き
===

もしメッセージ（メールもしくはニュース）を書いているときに、突然オーブンにステーキが入っている事を思い出したなら（もしくは、あなたがとーってもすごい菜食主義者で、茎をフードプロセッサーをいれているなら）、書いているメッセージを保存する方法があれば良いと思うでしょう。そうすれば、いつか別の日に編集を続ける事ができ、それが完成したと思ったときに送る事ができます。

えぇ、心配しないでください。Gnus のメールと投稿命令を使う何らかのメッセージを書き始めたときに、手に入れるバッファは自動的に特別な draft グループに関連付けられます。普通の方法でバッファを保存すれば（たとえば、 C-x C-s）、その記事はそこに保存されます。（自動保存ファイルも下書きグループ (draft group) に行きます。）

下書きグループは nndraft:draftx と呼ばれる特別なグループ です（もしあなたが全てを知らなければならないのであれば、それは nndraft グループとして実装されています）。変数 nndraft-directory はそのファイルを nndraft がどこに保管するべきかを指定します。このグループが特別であるというのは、その中の記事を永可視にしたり既読の印を付けたりできないからです――グループの全ての記事は永久に未読です。

もしグループが存在しないなら、それは作成され、購読されます。グループバッファからそれを消し去る唯一の方法は、それを未購読にすることです。

記事の編集を続けたいときは、下書きグループに入って D e (gnus-draft-edit-message) を押すだけです。あなたが残した状態のバッファに移動します。

拒否された記事もこの下書きグループに入れられます (see Rejected Articles)。

それ以上編集しないで投稿（もしくはメール）したい拒否されたメッセージがたくさんあるのであれば、命令 D s を使う事ができます。この命令はプロセス /接頭引数の習慣を理解します (see Process/Prefix)。命令 D S (gnus-draft-send-all-messages) はバッファの全てのメッセージを送り出します。

送りたくないメッセージがいくつかあるのであれば、命令 D t (gnus-draft-toggle-sending) を使ってメッセージを配送不可の印を付ける事ができます。これは切り替え命令です。

拒否された記事
=======

時々ニュースサーバーは記事を拒否します。おそらくサーバーはあなたの顔を好きではないのでしょう。おそらくそれは惨めに感じたからでしょう。おそらく悪魔 (demon) がいるのでしょう。 おそらく引用文を入れすぎたのでしょう。おそらくディスクが一杯だったのでしょう。おそらくサーバーが落ちていたのでしょう。

これらの状況は、もちろん、完全に gnus の扱える範囲外です。（Gnus は、もちろん、あなたの外見を愛しており、いつも機嫌が良く、中を飛び回る天使がいて、どれくらい引用文が含まれていようと気にせず、一杯になったり、落っこちたりしません。）ですから、gnus はこれらの記事を後でサーバーの気分がよくなるまで保存します。

拒否された記事は自動的に特別な下書きグループ (see Drafts) に入れられます。サーバーが戻ってきたなら、普通はそのグループに入って全ての記事を送ります。

選択方法
****

外部グループ (foreign group) とは、普通 (もしくはディフォルト) の方法で読まれないグループの事です。例えば、それは違った NNTP サーバーのグループであったり、事実上のグループであったり、個人的なメールグループであったりするでしょう。

外部グループ (もしくは、本当に全てグループ) は 名前 と選択方法 で指定されます。後者を先に例に出すと、選択方法は最初の要素がどのバックエンドを使うか (たとえば、nntp、nnspool、 nnml) で、2つめの要素が サーバー名 である連想リストです。選択方法には、その当のバックエンドにとって特別の意味を持つ値である追加の要素があるかも知れません。

選択方法は 事実上のサーバー を定義すると言うことができるかもしれません---ですから私たちはちょうどそれをしました (see The Server Buffer)。

グループの 名前 はバックエンドがグループを認識する名前です。

たとえば、NNTP サーバーのグループ soc.motss は名前 soc.motss と選択方法 (nntp "some.where.edu") を持ちます。 nntp バックエンドはこのグループを soc.motss として知っているだけですが、gnus はこのグループを nntp+some.where.edu:soc.motss と呼びます。

もちろん、違った方法は全てそれ特有のものがあります。

サーバーバッファ
========

伝統的に、サーバー はそれに接続して、それから情報を要求するマシンかソフトウェアです。

サーバーバッファを作成するときに gnus-server-mode-hook が実行されます。

サーバーバッファの表示様式
-------------

サーバーバッファの行の外見を、変数 gnus-server-line-format 変数を変更する事によって変える事ができます。これは format のような変数で、すこし単純な拡張がなされています:

h
     どのようにニュースが取得されるか---バックエンドの名前。

n
     サーバーの名前。

w
     どこからニュースが取得されるべきか---アドレス。

s
     サーバーの接続の 開いた/閉じた/拒否された 状態。

モード行も変数 gnus-server-mode-line-format を使う事によってカスタマイズする事ができます (see Mode Line Formatting)。以下の指定は理解されます:

S
     サーバー名。

M
     サーバー方法。

see Formatting Variables も参照してください。

サーバー命令
------

a
     新しいサーバーを追加します (gnus-server-add-server)。

e
     サーバーを編集します (gnus-server-edit-server)。

SPACE
     現在のサーバーをざっと眺めます (gnus-server-read-server)。

q
     グループバッファに戻ります (gnus-server-exit)。

k
     現在のサーバーを切ります (kill) (gnus-server-kill-server)。

y
     先ほど切られた (killed) サーバーを貼り付けます (yank) (gnus-server-yank-server)。

c
     現在のサーバーを複写します (gnus-server-copy-server)。

l
     全てのサーバーの一覧を挙げます (gnus-server-list-servers)。

s
     サーバーにその資源から新しい記事を調べるように要求します (gnus-server-scan-server)。これは主にメールサーバーに対して意味を持ちます。

g
     サーバーが全てのデータ構造を再作成するように求めます (gnus-server-regenerate-server)。これは同期からはずれてしまったメールバックエンドがあるときに役に立ちます。

方法の例
----

ほとんどの選択方法は非常に簡単で、自分自身をよく説明しています:

     (nntp "news.funet.fi")

直接スプールから読むのはもっと簡単です:

     (nnspool "")

見たとおり、選択方法の最初の要素はバックエンドの名前で、2番目はアドレス (address) 、もしくはそう呼びたいのであれば、名前 です。

これらの2つの要素の後には、任意の数の (変数 様式) の対を入れる事ができます。

最初の例に戻りましょう---そのマシンのポート15から読みたかったと思ってください。これがその時に、なるべき選択方法です:

     (nntp "news.funet.fi" (nntp-port-number 15))

どの変数が関連するかを見つけるために、それぞれのバックエンドの説明文書を読むべきでしょうが、これは nnmh の例です。

nnml はスプールのような構造で読むメールバックエンドです。例えば、接触を図りたい2つの構造があるとしましょう: 一つはあなたの私的なメールスプールで、他方は公的なものです。これは私的なメールのために使用可能な指定です:

     (nnmh "private" (nnmh-directory "~/private/mail/"))

(そうするとこのサーバーは private と呼ばれますが、あなたは既に推測していたかもしれません。)

これは公的スプールのための方法です:

     (nnmh "public"
           (nnmh-directory "/usr/information/spool/")
           (nnmh-get-new-mail nil))

防壁 (firewall) の中にいて、防壁マシンからの NNTP サーバーへの接続しかないのであれば、gnus に防壁マシンに rlogin して、そこから NNTP サーバーに telnet をするように指示する事ができます。これをする事は少しばからしいですが、事実上のサーバーの定義はおそらくこのようなものになるべきです:

     (nntp "firewall"
           (nntp-address "the.firewall.machine")
           (nntp-open-connection-function nntp-open-rlogin)
           (nntp-end-of-line "\n")
           (nntp-rlogin-parameters
            ("telnet" "the.real.nntp.host" "nntp")))

もし、すばらしい ssh プログラムを、モデム線からの圧縮された接続を提供するために使いたいのであれば、このような感じの事実上のサーバーを作る事ができます:

     (nntp "news"
           (nntp-address "copper.uio.no")
           (nntp-rlogin-program "ssh")
           (nntp-open-connection-function nntp-open-rlogin)
           (nntp-end-of-line "\n")
           (nntp-rlogin-parameters
            ("telnet" "news.uio.no" "nntp")))

これはもちろん、自動認証を提供するために ssh-agent を適切に設定しなければなりません。圧縮された接続を得るためには、sshのファイル config で Compression オプションがある必要があります。

事実上のサーバーを作成する
-------------

もしあなたは永続記事を使ってたくさんの記事をキャッシュに保存しているのであれば、キャッシュを読むための事実上のサーバーを作りたいと思うかもしれません。

最初に、新しいサーバーを付け加える必要があります。命令 a がそれをします。おそらくキャッシュを読むためには nnspool を使うのが一番良いでしょう。nnml や nnmh も使う事ができますけど。

a nnspool RET cache RET と打ってください。

今や全く新しい cache と呼ばれる nnspool の事実上のサーバーあるはずです。次はそれを編集して、正しい定義を与えるだけです。サーバーを編集するために e を打ってください。以下のものを含むバッファに入るでしょう。

     (nnspool "cache")

それを次のものに変更してください:

     (nnspool "cache"
              (nnspool-spool-directory "~/News/cache/")
              (nnspool-nov-directory "~/News/cache/")
              (nnspool-active-file "~/News/cache/active"))

サーバーバッファに戻るために C-c C-c と打ってください。今やこの事実上のサーバーで RET を押すと、閲覧バッファに入るべきで、表示されているどのグループにでも入る事ができるはずです。

サーバー変数
------

変数を定義する一つのやっかいな点は (バックエンドと Emacs 一般の両方で)、変数の定義がロードされるている間に、いくつかの変数は他の変数から初期化されるという事です。もし "基となる" 変数がロードされた後に変更しても、"導き出された" 変数は変更されません。

これは普通はディレクトリーやファイルの変数に影響します。例えば、 nnml-directory はディフォルトで ~/Mail ですが、全ての nnml ディレクトリー変数はその変数によって初期化されるので、 nnml-active-file は ~/Mail/active になります。もし新しい事実上の nnml サーバーを定義した場合、nnml-directory を設定するだけでは充分ではありません---あなたは望んだ状態になるように、全てのファイル変数を明示的に設定しなければなりません。それぞれのバックエンドに対する完全な変数のリストを見るためには、このマニュアルの後に続くそれぞれのバックエンドの部分を読んでください。でも、nnml の定義の例はここにあります:

     (nnml "public"
           (nnml-directory "~/my-mail/")
           (nnml-active-file "~/my-mail/active")
           (nnml-newsgroups-file "~/my-mail/newsgroups"))

サーバーと方法
-------

普通は選択方法を使うところ (例えば、外部サーバーを概観しているときのグループ選択方法での gnus-secondary-select-method) はどこでも、事実上のサーバー名をそれの代わりに使う事ができます。このことによりたくさんキーボードを叩かなくてすむ可能性があります。そして、全てにわたって、その方が良いです。

使用不可能なサーバー
----------

もしサーバーに接続不可能であるならば、gnus はサーバーを 拒否 として印を付けます。これはその後のそのサーバーとの接続をはかるどのような試みも無視されるという事です。Gnus は接続が開けないことが本当であるかどうかを少しも確かめず、``It can't be opend,'' (接続を開く事ができません) と告げます。

それは行儀が悪いと思う事があるかもしれませんが、それはたいていのときには良い方法です。例えば、サーバー nephelococcdyia.com に10個購読しているグループがあるとしましょう。サーバーはどこか非常に遠くにあり、マシンはとても遅いので、それが今日はあなたとの接続を拒否するかどうかを調べるだけで1分かかります。もし gnus がそれを10回試すようになっていたなら、あなたは非常にうるさく思うでしょう。ですから、gnus はそれを試そうとはしません。1度 ``connection refused'' (接続は拒否されました) を受け取ると、それはサーバーが ``down'' (落ちている) であるとみなします。

それで、一時的にそのマシンの機嫌が悪いだけだと何が起こるのでしょう? どうやってマシンが戻ってきているかどうかっを再び調べる事ができるでのしょう?

サーバーバッファに飛び移って (see The Server Buffer) 、以下の命令でつつくだけでできます:

O
     現在の行のサーバーとの接続を確立しようとします (gnus-server-open-server)。

C
     サーバーの接続 (もしあれば) を閉じます (gnus-server-close-server)。

D
     現在のサーバーに接続不可能の印を付けます (gnus-server-open-all-server)。

M-c
     バッファにある全てのサーバーとの接続を閉じます (gnus-server-close-all-servers)。

R
     Gnus がどれかのサーバーから接続拒否を受けたかどうかの全ての印を消去します (gnus-server-remove-denials)。

ニュースの取得
=======

ニュースリーダーは普通はニュースを読む事に使われます。Gnus は現在はニューズを取得するために2つだけの方法を提供しています---NNTP サーバーか、ローカルスプールから読む事ができます。

NNTP
----

NNTP サーバーの外部グループを購読するのは比較的簡単です。単に nntp を方法として指定し、NNTP サーバーのアドレス (address) を、うーん、アドレスとして指定するだけです。

もし NNTP サーバーが標準でないポート (port) に位置しているときは、選択方法の3番目の要素をこのポートの数字に設定する事で正しいポートに接続する事ができるでしょう。そのためにグループ情報を編集しなければなりません (see Foreign Groups)。

外部グループの名前は基本グループと同じである事ができます。実際、あなたの思うままに同じグループを可能な限りの違ったサーバーから購読する事ができます。名前の衝突は起こりません。

以下の変数は事実上の nntp サーバーを作るために使われます:

nntp-server-opened-hook
     は接続ができた後に実行されます。それは NNTP サーバーに接触した後にそれに命令を送るために使われる事ができます。ディフォルトでは関数 nntp-send-mode-reader により命令 MODE READER がサーバーに送られます。その関数は常にこのフックにあるべきです。

nntp-authinfo-function
     この関数は NNTP サーバーに AUTHINFO を送るために使われます。ディフォルトの関数は nntp-send-authinfo で、~/.authinfo (もしくは変数 nntp-authinfo-file に設定したどのようなものでも) を使用可能な記載を調べるために探します。もし一つも見つからなかったら、あなたにログイン名とパスワードの入力を促進します。ファイル ~/.authinfo の様式は (ほとんど) ftp のファイル ~/.netrc と同じで、それは ftp のマニュアルページに定義されていますが、ここのものは顕著な事実です:

      1. ファイルは一つ以上の行を含み、それぞれは一つのサーバーを定義します。

      2. それぞれの行は任意の数の 区切り印/値 の対を含む事ができます。有効な区切り印は machine、login、password、default、 force です。(最後のものは有効な .netrc/ftp の区切り印ではありません。これがファイル .authinfo が .netrc ファイル様式から逸れる唯一の方法です。)

     これがそのファイルの例です:

          machine news.uio.no login larsi password geheimnis
          machine nntp.ifi.uio.no login larsi force yes

     区切り印/値 の対はどのような順番ででも現れる事ができます。例えば、 machine は最初に現れる必要はありません。

     この例では、ログイン名とパスワードの両方が前者のサーバーには与えられているのに対して、後者はログイン名だけを挙げていて、利用者はパスワードの入力を促進されます。後者は force タグも持っていて、それは接続時に NNTP サーバーに認証情報 (authinfo) が送られるという事です。ディフォルト (すばわち、force タグが無いとき) では NNTP サーバーが認証情報を尋ねない限りそれを NNTP サーバーに送りません。

     machine 行に合致しない全てのサーバーに適用される default 行を追加する事もできます。

          default force yes

     これは以前に書かれていない全てのサーバーに命令 AUTHINFO を強制的に送ります。

     ファイル ~/.authinfo を世界中が読めるような設定に放置しないように注意してください。

nntp-server-action-alist
     これはサーバーの型に合致する正規表現と、合致が起こったときに取られる動作の連想リストです。例えば、gnus に innd に接続したときに毎回ビープ音を鳴らさせたい (beep) のであれば、次のようにする事ができます:

          (setq nntp-server-action-list
                '(("innd" (ding))))

     まぁ、そのような事はしたくないでしょうけど。

     ディフォルトの値は

          '(("nntpd 1\\.5\\.11t"
             (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)))

     で、これは nntpd 1.5.11t には命令 MODE READER を送らない事を確実にします。なぜなら、その命令はそのサーバーを固まらせると私は聞いているからです。

nntp-maximum-request
     もし NNTP サーバーが NOV ヘッダーの機能を提供していないのであれば、このバックエンドは命令 head をいくつも送って、ヘッダーを集めます。この動作を速くするために、バックエンドは返答を待たずにこの命令をたくさん送り、それから全ての返答を読みます。これは変数 nntp-maximum-request によって制御され、ディフォルトで400です。もしネットワークが故障がちであるなら、この変数を1に設定するべきでしょう。

nntp-connection-timeout
     定期的に接続する外部 nntp グループがたくさんあるなら、適切に応答しない nntp サーバーがあったり、あるサーバーは常識的な時間内では返答できないくらい負荷がかかっている、などの問題があるでしょう。これは困った問題になることがありますが、nntp-connection-timeout を設定する事によりある程度解消する事ができます。これは接続をあきらめるまえに、 nntp バックエンドが何秒待つかを示す整数です。もしこれが nil であると、これが初期設定ですが、時間切れ切断はなされません。

nntp-server-hook
     このフックは NNTP サーバーに接続する最後の一歩として実行されます。

nntp-open-connetcion-function
     この関数は遠隔システムに接続するために使われます。4つの既製関数が提供されています:

     nntp-open-network-stream
          これは初期設定で、単純に遠隔システムの何らかのポートか他のもに接続します。

     nntp-open-rlogin
          rlogin を遠隔システムに行って、そこから仕様可能な NNTP サーバーに telnet をします。

          nntp-open-rlogin に関連した変数です:

          nntp-rlogin-program
               遠隔マシンにログインをするために使われるプログラムです。ディフォルトは rsh ですが、ssh が人気のある代替手段です。

          nntp-rlogin-parameters
               このリストは rsh に与えられるパラメータのリストとして使われます。

          nntp-rlogin-user-name
               遠隔システムでの利用者名です。

     nntp-open-telnet
          遠隔システムに telnet をして、NNTP サーバーにたどり着くためにもう一度 telnet をします。

          nntp-open-telnet に関連した変数です:

          nntp-telnet-command
               telnet を始めるのに使われる命令です。

          nntp-telnet-switches

               命令 telnet のスイッチ (switch) として使われる文字列のリストです。

          nntp-telnet-user-name
               遠隔システムにログインするための利用者名です。

          nntp-telnet-passwd
               ログインするときに使われるパスワードです。

          nntp-telnet-parameters
               telnet でログインをした後に命令として実行される文字列のリストです。

          nntp-telnet-shell-prompt
               遠隔マシンでのシェルのプロンプトに合致する正規表現です。ディフォルトは bash\\|\$ *\r?$\\|> *\r? です。

          nntp-open-telnet-envuser
               nil でないなら、telnet セッションは (クライアントとサーバーの両方で) ENVIRON オプションを使用する事ができ、ログイン名入力を促進しません。これはたとえば Solaris の telnet に対して動作します。

     nntp-open-ssl-stream
          サーバーに 安全な チャンネルを使ってサーバーに接続します。これを使うためには、SSLay がインストールされていなければなりません (ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL と、ssl.el (例えば、 W3 の配布から) が必要になります)。それからサーバーを次のように定義します:

               ;; Type `C-c C-c after you'ver finished editing.
               ;;
               ;; "snews" is port 563 and is predefined in our /etc/services
               ;;
               (nntp "snews.bar.com"
                     (nntp-open-connection-function nntp-open ssl-stream)
                     (nntp-port-number "snews")
                     (nntp-address "snews.bar.com"))

nntp-end-of-line
     NNTP サーバーとお話をしているときに行の終わり (end-of-line) として使われる印です。これはディフォルトで \r\n ですが、サーバーとお喋りをするために rlogin を使っているときは \n であるべきです。

nntp-rlogin-user-name
     rlogin 接続関数を使っているときの遠隔システムでの利用者名です。

nntp-address
     NNTP サーバーが動いている遠隔システムのアドレスです。

nntp-port-number
     nntp-open-network-stream 接続関数を使っているときの接続するポート番号です。

nntp-buggy-select
     あなたの選択の一連の作業が故障がちであるときにこれを nil でない値に設定してください。

nntp-nov-is-evil
     NNTP サーバーが NOV 機能を提供していなければこの変数を t に設定する事ができますが、nntp は普通は NOV が使われるかどうかを自動的に調べます。

nntp-xover-commands
     サーバーから NOV 行を取得するための命令として使われる文字列のリストです。この変数のディフォルトの値は ("XOVER" "XOVERVIEW") です。

nntp-nov-gap
     nntp は普通はサーバーに NOV 行のための一つの大きな要求を送ります。サーバーは一つの巨大な、行のリストで応答します。しかし、もしグループの2-5000の記事を読んで、1と5001を読みたいだけなら、nntp は必要無い4999の NOV 行を取得する事になります。この変数は XOVER 要求がどれくらい大きな2つの連続した記事群の間のへだたり (gap) まで分割されないで送られるかを決定します。ネットワークが速い場合は、この変数を本当に小さな数字に設定するとおそらく取得が遅くなるという事に注意してください。この変数が nil であると、nntp は要求を分割しません。ディフォルトは5です。

nntp-prepare-server-hook
     NNTP サーバーに接続を試みる前に実行されるフックです。

nntp-warn-about-losing-connection
     この変数が nil でないと、サーバーが接続を閉じたときに少し雑音がたてられます。

nntp-record-commands
     もし nil でないと、nntp は NNTP サーバーに送った全ての命令を (時間と共に) *nntp-log* バッファに記録します。これは動作していないと思われる gnus/NNTP 接続をディバッグしているときに役に立ちます。

ニューススプール
--------

ローカルスプールから外部グループを購読する事は非常に簡単で、役に立ちます。たとえば、非常に大きな記事があるグループ---例えば alt.binaries.pictures.furniture を読む速度が速くなります。

とにかく、nnspool を方法として、 "" (もしくは何でも) をアドレスとして指定するだけです。

もしローカルスプールにつなぐ事が可能なら、おそらくそれを基本選択方法として使うべきでしょう (see Finding the News)。それは普通は nntp 選択方法より速いですが、そうでないかもしれません。それは状況に依存します。何があなたのサイトで一番良いかを見つけるために、いろいろと試してみなければなりません。

nnspool-inews-program
     記事を投稿するために使われるプログラムです。

nnspool-inews-switches
     記事を投稿するときに inews プログラムに与えられるパラメータです。

nnspool-spool-directory
     nnspool が記事を探すところです。これは普通は /usr/spool/news/ です。

nnspool-nov-directory
     nnspool が NOV ファイルを探すところです。これは普通は /usr/spool/news/over.view/ です。

nnspool-lib-dir
     ニュースのライブラリーディレクトリーの場所です (ディフォルトで /usr/lib/news/ です)。

nnspool-active-file
     現状ファイルへのパスです。

nnspool-newsgroups-file
     グループ記述ファイルへのパスです。

nnspool-history-file
     ニュース履歴ファイルへのパスです。

nnspool-active-times-file
     現状日付ファイルへのパスです。

nnspool-nov-is-evil
     nil でないと、nnspool はそれが見つけたどんな NOV ファイルも使おうとはしません。

nnspool-sift-nov-with-sed
     nil でないと、これがディフォルトですが、概観ファイル (overview) から関連する部分を得るために sed を使います。もし nil だと、 nnspool はファイル全体をバッファに読み込んで、そこで実行します。

メール取得
=====

ニュースリーダーでメールを読む---それは明白に超自然的な事ではないのですか？ いや、もちろんできます。

メールを読む事を始める
-----------

Gnus を使って新しいメールを読む事は非常に簡単です。あなたのメールバックエンドのあなたの選択を gnus-secondary-select-methods に放り込むだけで、あとのことは自動的に起こります。

例えば、nnml (これは "一メール一ファイル" バックエンドです) を使いたいなら、次のものをあなたの .gnus ファイルに入れる事ができます。

     (setq gnus-secondary-select-methods
           '((nnml "private")))

今や、次に gnus を起動したときには、このバックエンドは新しい記事を求め、それはあなたのスプールファイルから全てのメッセージをディレクトリー、ディフォルトでは ~/Mail/ 、に移動します。作成された新しいグループ (mail.misc) が購読され、他のグループと同じように読む事ができます。

あなたはおそらくメールをいくつかのグループに分割したいでしょうけど:

     (setq nnmail-split-methods
           '(("junk" "^From:.*Lars Ingebrigtsen")
             ("crazy" "^Subject:.*die\\^Organization:.*flabby")
             ("other" "")))

これは結果として3つの新しい nnml メールグループを作ります: nnml:junk、nnml:crazy、nnml:other です。最初の2つのグループに合わないメールは全て最後のグループに入れられます。

これは gnus でメールを読むために充分であるはずです。マニュアルのこの部分の他の項を熟読したいと思うかもしれませんが。特に see Choosing a Mail Backend と see Expiring Mail を。

メールの分割
------

変数 nnmail-split-methods は入ってくるメールをどのようにグループ分けするかを指定します。

     (setq nnmail-split-methods
       '(("mail.junk" "^From:.*Lars Ingebrigtsen")
         ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
         ("mail.other" "")))

この変数はリストのリストで、これらのリストの最初のそれぞれの要素がメールグループの名前で (ところで、それらは mail で始まる必要はありません)、2つめの要素がそれぞれのメールのヘッダーからそれがどのグループに属するかを決定する正規表現です。最初の文字列は、replace-match によって、合致した文章からの副表現を挿入するために使われるような、 samp\\1 の様式を含むかもしれません。たとえば:

     ("list.\\1" "From:.*\\(.*\\)-list@majordomo.com")

2番目の要素は関数である事もできます。その場合は、それは法則の最初の要素を引数として、ヘッダーに範囲を狭めて (narrowed to headers) 呼ばれます。それは、メールがそのグループに属すると考えるのであれば、nil でない値を帰す必要があります。

これらの最後は常に総合的なものであるべきで、他の正規表現に合致しないメールに合致するために、この正規表現は いつも であるべきです。 (これらの法則は連想リストの初めから終わりまで順番に実行されます。相互投稿 (crosspost) を使用可能にしていない限り、最初の合致した法則が "勝ちます"。相互投稿を使用可能にしている場合、全ての合致した法則が "勝ちます"。)

もしあなた自身でこれをいじくりまわしたいときは、あなたの選んだ関数をこの変数に設定する事ができます。この関数は入って来たメールメッセージのヘッダーに範囲を狭められたバッファで引数なしで呼ばれます。この関数は、それがこのメールメッセージを運ぶべきである、と考えるグループ名のリストを返すべきです。

全てのメールバックエンドは、入って来た貧乏で純粋なヘッダーを乱暴に扱っても良い事に注意してください。それらはすべて Lines ヘッダーを追加します。いくつかは X-Gnus-Group ヘッダーを加えます。たいていのものは Unix の mbox の From<SPACE> 行を何か別の名前に変えます。

メールバックエンドはすべて相互投稿の機能を提供しています。いくつかの正規表現が合致すると、メールは全てのグループに ``相互投稿'' されます。 nnmail-crosspost はこの機能を使うかどうかを指定します。どの記事も総合の グループに相互投稿されない事に注意してください。

nnmh と nnml は相互投稿された記事にハードリンク (hardlink) を作る事によって相互投稿を行います。しかし、全てのファイルシステムがハードリンクの機能を提供しているわけではありません。もしあなたがその場合に当てはまるのであれば、nnmail-crosspost-link-function を copy-file に設定してください。 (この変数はディフォルトで add-name-to-file です。)

前のメール分割がメッセージをどこに入れたかを見たい場合は、命令 M-x nnmail-split-history を使う事ができます。

Gnus はあなたに自分自身に跳ね返ってくるような可能性のある全ての機会を提供します。例えば、あなたの上司からくる全てのメールを含んだグループを作ったとしましょう。それから、偶発的にそのグループの購読取り止めが起こったとします。Gnus はそれでも上司からの全てのメールを未購読のグループに入れますので、上司が ''月曜日までにその報告書を準備しないと首だ！'' というメールをあなたに送っても、あなたはそれを見る事はなく、火曜日になって本当は翌月の家賃を払うために空のボトルを集めるべきであっても、まだ有給で雇われていると信じているかもしれません。

メールバックエンド変数
-----------

これらの変数は (たいていの場合) 全ての違ったメールバックエンドに関連します。

nnmail-read-incoming-hook
     メールバックエンドは新しいメールを読み込んだ後にこのフックを呼びます。もしそうしたいと思うなら、このフックをメール監視プログラムに知らせるために使う事ができます。

nnmail-spool-file
     バックエンドはこのファイルで新しいメールを探します。この変数が nil であると、メールバックエンドは決して自分自身ではメールを取得しようとしません。もし POP メールサーバーを使っていて、あなたの名前が larsi であるならば、この変数を po:larsi に設定するべきです。もしあなたの名前が larsi でないならば、おそらくこれを少し修正しなければなりませんが、既にあなたはそれを推測しているでしょう。この賢く顔立ちの良い悪魔さん！ この変数を pop に設定する事もでき、その時は gnus が自分自身で POP メール文字列を発見しようとします。どのような場合でも、gnus は 環境変数 MAILHOST で指定されている POP サーバーに接触を図ろうとする movemail を呼びます。POP サーバーがパスワードを必要とするなら、nnmail-pop-password-required を t に設定してパスワード入力を促進されるか、nnmail-pop-password をパスワードそのものに設定する事ができます。

     nnmail-spool-file はメールボックスのリストである事もできます。

     あなたの Emacs が コンパイル (compilation) の前に --with-pop と共に環境設定 (configure) されなければなりません。これはディフォルトですが、いくつかのインストールはその設定を切ってしまいます。

     メールバックエンドを使うときは、gnus は全てのメールを inbox から吸い上げて、ホームディレクトリーに放り投げます。あなたがメールバックエンドを使っていない場合は、gnus は1通もメールを移動しません---最初に魔法の呼び出しをたくさんしなければなりません。まず5角形を描き、蝋燭に火を付け、山羊を生け贄として捧げ終えた後で、gnus があなたのメールを移動しても本当にあまり驚いてはいけません。

pop3-fma-spool-file-alist
     もし、あなたが複数の Mail address を持ち、それを Gnus の上で読みたいと思うならば pop3-fma(POP3 for Multi Account) を使用しましょう。この pop3-fma を使用する場合、前述の nnmail-pop-password-required や nnmail-pop-password , nnmail-spool-file の設定は行わなくてかまいません。(ただし、backend はきちんと設定しましょう) 以下の設定を ~/.emacs にいれましょう。

          (require 'pop3-fma)
          (setq pop3-fma-spool-file-alist
                  '(
                  "po:user1@mailhost1" method
                  "po:user@mailhost" method
                  ))

     最低限これだけでできます。上の method はあなたの POP Mail Server のユーザー認証方式をいれます。 USER/PASS で認証する場合は pass , APOP 方式で認証する場合は apop とします。注意する事は、user@mailhost の形式は必ずしも E-mail address とは一致しません。なお、このパッケージを使用した場合は procmail の使用はできません。

pop3-fma-local-spool-file-alist
     この変数は、POP サーバーと local mail spool の両方を使用する場合に設定します。例えば、/var/spool/mail/user から読みだしたい場合は

            (setq pop3-fma-local-spool-file-alist '("/var/spool/mail/user"))

     とします。

pop3-fma-movemail-type
     この変数は、POP mail server から Mail を取得する際の起動するプログラムの種類を記述します。'exe ならば、movemail が起動され、'lisp ならば pop3-movemail(pop3.el) が起動されます。

pop3-fma-movemail-arguments
     この変数は外部プログラムの movemail のオプションを設定します。ただし、 inbox 等は設定しない事 ("-" で始まるオプションだけを記述の事)

nnmail-use-procmail
     もし nil でなければ、メールバックエンドは入ってくるメールを nnmail-procmail-directory で探します。そのディレクトリーで nnmail-procmail-suffix で終わっている名前を持つ全てのファイルは入って来たメールボックスとみなされ、そこで新しいメールが探されます。

nnmail-crash-box
     メールバックエンドがスプールファイルを読んだときに、メールは最初にこのファイルに移動されます。これはディフォルトで ~/.gnus-crash-box です。このファイルが既に存在する場合は、それは常に他のスプールファイルより先に読み込まれ (そして取り込まれ) ます。

nnmail-prepare-incoming-hook
     これは入って来た新しいメールを持っているバッファで実行され、えーと、本当に、全てのことについて使われます。

nnmail-split-hook
     それぞれのメッセージがそのヘッダーに基づいて分割がなされる直前にそれが保存されているバッファで実行されるフックです。このフックはそれが適合すると考えるように自由にバッファの内容を編集する事ができます---バッファは分割が終わった後で消去され、バッファで行われた変更はどのファイルにも現れません。gnus-article-decode-rfc1522 がこのフックに加える事が適切な関数の一つです。

nnmail-pre-get-new-mail-hook
nnmail-post-get-new-mail-hook
     これらは入ってくるメールを扱うときに実行される役に立つ2つのフックです--- nnmail-pre-get-new-mail-hook (これは新しいメールを扱う直前に呼ばれます) と nnmail-post-get-new-mail-hook (これはメールの扱いが終わったときに呼ばれます) です。次のものは、この2つのフックを使って新しいメールファイルに与えられるディフォルトのファイルモードを変更する例です:

          (add-hook 'gnus-pre-get-new-mail-hook
                    (lambda () (set-default-file-modes 511)))

          (add-hook 'gnus-post-get-new-mail-hook
                    (lambda () (set-default-file-modes 551)))

nnmail-tmp-directory
     この変数は入って来たメールをどこに移動するかを指定します -- それを実行している間に。これは普通はメールバックエンドが住んでいるものと同じディレクトリー (例、 ~/Mail/) で行われますが、この変数が nil でないと、それが代わりに使われます。

nnmail-movemail-program
     このプログラムは利用者のインボックスからホームディレクトリーに移動するために実行されます。ディフォルトは movemail です。

     これは関数である事もできます。その場合は、その関数は2つのパラメータ -- インボックスの名前と移動するファイル名前 と共に呼ばれます。

nnmail-delete-incoming
     nil でないなら、メールバックエンドはメールを適切なグループへ分割した後で一時新入ファイルを消去します。これはディフォルトで t です。

     ((ding) Gnus 0.10 (もしくはそのようなもの) からの Gnus のリリースは私が思うにメールを失った事はないのですが、でもそのことはここでは重要ではありません。 (特別なバージョンの Red Gnus を除きます。)) Incoming* ファイルを消去しない事で、メールを失わない事を確実にできます -- もし gnus が完全に強制的に吹っ飛んでも、いつも失われたものを取り戻す事ができます。

     いつでもあなたの意志で Incoming* ファイルを消去する事ができます。

nnmail-use-long-file-names
     nil でないなら、メールバックエンドは長いファイル名とディレクトリー名を使います。mail.misc のようなグループ名は mail.misc というディレクトリー (nnml バックエンドが使われているとみなすと) かファイル (nnfolder バックエンドが使われているとみなすと) という結果になります。もしそれが nil であるなら、同じグループは mail/misc という結果になります。

nnmail-delete-file-function
     ファイルを消去するために呼ばれる関数です。ディフォルトで delete-file です。

nnmail-cache-accepted-message-ids
     nil でないと、バックエンドに入って来た記事 (例えば、Gcc によって) の Message-ID をメール重複発見ファイルに入れます。ディフォルトは nil です。

特級メール分割
-------

比較的単純な標準のメール分割指定の方法ではあなたの望む事ができない場合、 nnmail-split-methods を nnmail-split-fancy に設定する事ができます。それから変数 nnmail-split-fancy で遊ぶ事ができます。

まずこの変数の値の例を見てみましょう:

     ;; メールデーモン (mailer deamon) は普通のグループには相互投稿されませ
     ;; ん。警告は本当のエラーとは違ったグループに入れられます。
     (| ("from" mail (| ("subject" "warn.*" "mail.warning")
                        "mail.misc"))
        ;; エラーでないメッセージは全ての関連したグループに相互投稿されます
        ;; が、(ding) リストと他の (ding) 関連のメールのためのグループには
        ;; 相互投稿しません。
        (& (| (any "ding@ifi\\.uio\\.no" "ding.list" "ding.list")
              ("subject "ding" "ding.misc"))
           ;; 他のメーリングリスト...
           (any "procmail@informatik\\.rwth-aachen\\.de" "procmail.list")
           (any "SmartList@informatik\\.rwth-aachen\\.de" "SmartList.list")
           ;; 人々...
           (any "larsi@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
        ;; 合致しなかったメールは全てを捕まえるグループへ行きます。
        "misc.misc")

この変数は 分割 の様式になっています。分割は (あるいは) それぞれの分割が他の分割を含む再帰的構造です。これは使用可能な5つの分割構文です:

 1. group: もし分割が文字列であると、それはグループ名としてみなされます。普通の正規表現の合致がなされます。例は下の方を見て下さい。

 2. (FIELD VALUE SPLIT): もし分割がリストで、最初の要素が文字列であり、ヘッダー FIELD (正規表現) が VALUE (これも正規表現) を含んでいる場合、メッセージを SPLIT で指定されたところに蓄積します。

 3. (| SPLIT...): 分割がリストで、最初の要素が | (垂直棒) であると、それぞれの SPLIT をそのうちの一つが合致するまで実行します。 SPLIT はメールメッセージが一つ以上のグループに蓄積されたときに ``合致した'' とします。

 4. (& SPLIT...): 分割がリストで、最初の要素が t であると、リストの全ての SPLIT を実行します。

 5. junk: もし分割がシンボル junk であると、そのメッセージを保存しません。非常に注意して使って下さい。

 6. (: FUNCTION ARG1 ARG2 ...): もし分割がリストで、最初の関数が : であると、2番目の要素が ARGS を引数として関数として呼ばれます。関数は SPLIT を返すべきです。

 7. nil: もし分割が nil であれば、それは無視されます。

これらの分割で、FIELD は完全なフィールド名に合致しなければなりません。VALUE は基礎モード (fundamental mode) 構文テーブル (syntax table) に従って完全に合致しなければなりません。正規表現でフィールド名か語の部分に合致させるために .* を使う事ができます。言い換えれば、全ての VALUE は \< と \> の対で囲まれます。

FIELD と VALUE は lisp シンボル (symbol) である事もでき、その場合はそれらは nnmail-split-abbrev-alist で指定されているように展開されます。これはセルの car がキーを含んでいて、cdr が関連付けられた値を持っているコンスセル (cons cell) の連想リストです。

nnmail-split-fancy-syntax-table がこれらの全ての分割が実行されているときに有効な構文テーブルです。

ヘッダーのいくつかの情報に基づいて、gnus に動的にグループを作らせたいのであれば (例えば、グループ名で replace-match のような代用をする)、次のような事ができます。

     (any "debian-\\b\\(\\w+\\)@lists.debian.org" "mail.debian.\\1")

もし文字列が要素 \& を含んでいると、代わりに前で合致した文字列が使われます。同様に、要素 \\1 から \\9 まではグループ付け 1 から 9 までで合致した文字文で代替されます。

メールと Procmail
-------------

多くの人は procmail (もしくは他のメール選別プログラムか外部配送代理---slocal、elm など) を入って来たメールをグループに分割するために使います。もしそうしているのであれば、メールバックエンドが自分自身でメールを取得しない事を確実にするために、nnmail-spool-file を procmail に設定するべきです。

もし複合 procmail/POP/mailbox 設定を使っているのであれば、以下のような事をする事ができます:

     (setq nnmail-use-procmail t)
     (setq nnmail-spool-file
          '("/usr/spool/mail/my-name" "po:my-name"))

これはいくつかの、おそらく、期待しない副効果をもたらすであろう nnmail-split-methods も設定したいとは思わないという事も意味します。

メールバックエンドがどのグループに運ぶかを尋ねられたときは、それは他の方法で運ぶ事を発見した他の全てのグループと共に、その変数の内容から値を帰します。nnmh 以外のバックエンドは実際にディスクへ行ってどのグループが実際に存在しているかを調べることはしません。 (利用者がどのグループをニュースグループのためで、どのグループが普通の古いファイルやディレクトリーのためであると考えているかを区別する事はささいな事ではありません。)

これは、あなたが gnus (とバックエンド) に手でどのグループが存在しているかを教えなければならないという事です。

nnmh バックエンドを例に取ってみましょう:

フォルダーは nnmh-directory に位置づけられています。そうですねぇ、 ~/Mail としましょう。そこには foo、bar、 mail.baz という3つのフォルダーがあります。

グループバッファへ行って、G m と打ってください。入力を促進されたときは、名前 (name) として foo を、方法 (method) として nnmh を答えてください。2つの他のグループ、bar と mail.baz のために同様の事を2回繰り返してください。全てのあなたのメールグループを含めるようにしてください。

これで全部です。もう、メールを読む事ができるように設定されています。この方法の現状ファイルは自動的に作成されます。

もし nnfolder や他の2通以上のメールを一つのファイルに溜めるバックエンドを使っているのなら、gnus が見るファイルに procmail がメールを加えないようにしなければなりません。代わりに、procmail は全ての入ってくるメールを nnmail-procmail-directory に入れるべきです。入って来たメールを入れるファイル名に到着するために、グループ名に nnmail-procmail-suffix を付加してください。メールバックエンドはこれらのファイルからメールを読み込みます。

Gnus が mail.misc.spool と呼ばれているファイルを読み込んだときは、このメールは期待通り、 mail.misc に入れられます。しかし、gnus に普通の方法でメールを分割させたい場合、nnmail-resplit-incoming を t に設定する事ができます。

もし procmail に入って来た物を分割して直接 nnmh のディレクトリーに入れるようにしている場合 (これはするべきではないことですが)、 gnus が最後の記事 (すなわち、もっとも大きい記事番号を持つ記事) を期限切れ削除するのを防ぐために、nnmail-keep-last-article を nil でない値に設定するべきです。

これは設定の例です: 入ってくるスプールは ~/incoming/ に置かれていて、"" を接尾語として持っています (すなわち、入ってくるスプールファイルはそれと等価なグループと同じ名前になっています)。 nnfolder バックエンドはメールインターフェースとして使われ、nnfolder ディレクトリーは ~/fMail/ です。

     (setq nnfolder-directory "~/fMail/*)
     (setq nnmail-spool-file 'procmail)
     (setq nnmail-procmail-directory "~/incoming/")
     (setq gnus-secondary-select-methods '((nnfolder "")))
     (setq nnmail-procmail-suffix "")

古いメールを取り込む
----------

たいていの人は色々なファイルフォーマットで蓄積されたたくさんの古いメールがあるでしょう。もし gnus に粋な gnus メールバックエンドの一つを使うように設定したのであれば、おそらく古いメールをメールグループに取り込みたいと思うでしょう。

それをする事はとても簡単です。

例を挙げましょう: nnml (see Mail Spool) を使ってメールを読んでいて、nnmail-split-methods を満足できる値に設定しています。古い Unix mbox ファイルが重要だけれど古いメールで満たされています。あなたはそれを nnml グループに移動したいと思っています。

方法です:

 1. グループバッファに行きます。

 2. `G f' と打って、mbox ファイルから nndoc グループを作成するように促進されたときに mbox ファイルへのパスを与えます (see Foreign Groups)。

 3. `SPACE' を打って、新しく作られたグループに入ります。

 4. `M P b' を打って、グループバッファの全ての記事に実行印を付けます (see Setting Process Marks)。

 5. `B r' を打って全てのプロセス印の付いた再スプールし、促進されたときに nnml と答えます (see Mail Group Commands)。

mbox ファイルの全てのメールメッセージも今やあなたの nnml グループに広がっています。それらに入って、変な故障もなく物事が上手く行っているかどうかを調べてください。もし大丈夫なようであれば、mbox ファイルを消す事を考えるかもしれませんが、私は全てのメールがあるべきところに納まっているのを完全に確認するまでは、そうはしません。

メールの期限切れ消去
----------

伝統的なメールリーダーは、何か、既読の印を付けると記事を削除する傾向があります。 Gnus はメールを読む事に対して、基本的に全く違った方法を取ります。

Gnus は基本的にメールを比較的特別な方法で受け取られたニュースであるとみなします。それは実際にメールを変更しあり、メールメッセージを消す権力があるとは考えません。メールグループに入って、記事に ``既読'' の印を付けたり、他の流儀で切ったりしても、メール記事はまだシステムに存在しています。繰り返します: gnus はあなたの古い、既読メールを消去しません。もちろん、あなたがそうしろと尋ねない限りの話ですが。

Gnus に望ましくないメールを削除させるためには、記事を 期限切れ消去可能 (expirable) として印を付けなければなりません。しかしながら、これは記事が即座に消え去るという事ではありません。一般的に、メール記事は次のような場合にシステムによって削除されます 1) 期限切れ消去可能の印を付けられる 2) 1週間以上経った記事である。 もし記事を期限切れ消去可能にしなければ、それは地獄が凍りつくまでシステムに残りつづけます。これはもう一度強調付きで繰り返されるに足るものです: ``もし'' あなたが記事を ``期限切れ消去可能'' であると ``しない'' なら、gnus は ``決して'' それらの ``記事'' を消去しません。

手で記事に期限切れ消去可能の印を付けなければならないわでではありません。正規表現 gnus-auto-expirable-newsgroups に合致するグループは全ての既読記事に自動的に期限切れ消去可能の印が付けられます。全ての期限切れ消去可能の印の付いた記事は概略バッファの最初の桁に E が表示されます。

ディフォルトでは自動期限切れ消去可能を使用すると、gnus はあなたが読んだ全ての記事を、それが既読であったか未読であったかに関わらず、期限切れ消去可能として印を付けます。既読の印の付いた記事が自動的に期限切れ消去可能として印付けられるのを避けるために、以下のようなものを .gnus ファイルに書く事ができます:

     (remove-hook 'gnus-mark-article-hook
                  'gnus-summary-mark-read-and-unread-as-read)
     (add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)

自動期限切れ消去可能グループを作る事は、全ての既読記事が期限切れ消去される事ではない事に気を付けてください---期限切れ消去可能として印の付いた記事だけが期限切れ消去されます。命令 dが自動的にグループを期限切れ消去可能にするのでは無いという事にも気を付けてください---半自動の、自動期限切れ消去可能グループで記事を既読に印付けることだけが記事を期限切れ消去可能にします。

     (setq gnus-auto-expirable-newgroups
           "mail.nosense-list\\|mail.nice-list")

自動期限切れ消去を実行する他の方法は、グループのグループパラメータとして、要素 auto-expirable を持つ事です。

もし適応スコア付け (see Adaptive Scoring) と自動期限切れ消去を使用しているなら、問題が起こるでしょう。自動期限切れ消去と適応スコア付けはあまり良く相互作用しません。

変数 nnmail-expiry-wait は期限切れ消去可能記事がどれくらいの期間生存しているかのディフォルトの時間設定を提供します。Gnus はメッセージが送られたときではなく、それが 到着 してからの日を計算します。ディフォルトは7日間です。

Gnus は記事がどのグループに属しているかに基づいて、それがどのくらい生存するかを成功に設定する関数も提供しています。グループ mail.private は期限を1ヶ月に、グループ mail.junk では期限を1日に、その他のものには期限を6日間にするには:

     (setq nnmail-expiry-wait-function
           (lambda (group)
            (cond ((string= group "mail.private")
                    31)
                  ((string= group "mail.junk")
                    1)
                  ((string= group "important")
                   'never)
                  (t
                    6))))

この関数に与えられるグループ名は ``装飾無し'' のグループ名です--- nnml: やその他の似たようなものは付きません。

変数 nnmail-expiry-wait と関数 nnmail-expiry-wait-function は数字 (整数である必要はありません) かシンボル immediate か never のどちらかである事ができます。

期限切れ期間を選択的に変更するためにグループパラメータ expiry-wait を使う事もできます (see Group Parameters)。

nnmail-keep-last-article が nil でないと、gnus はメールニュースグループの最後の記事を決して期限切れ消去しません。これは procmail の利用者の人生を楽にするためです。

ところで: そこにある、gnus が決して期限切れ消去可能でない記事を期限切れ消去する事はない、というのは嘘です。total-expire をグループパラメータに入れると、記事は期限切れ消去の印が付きませんが、全ての記事は期限切れ消去過程に入れられます。非常に注意して使ってください。さらにもっと危険なものは変数 gnus-total-expirable-newsgroups です。この正規表現に合致する全てのグループは全ての既読記事が期限切れ消去可能の過程に突っ込まれます。これは、当のグループの 全て の古いメール記事は少し後で削除されるという事です。非常に注意して使って、あなたが使用した正規表現が間違ったグループに合致して、あなたの全ての重要なメールが消えてしまったと言って、私のところに泣き付いて来ないでください。男になりなさい！ もしくは、女 になりなさい！ あなたが気持ちよいと感じる全てのものと！ ですからそこに！

たいていの人はほとんどのメールグループを total-expirable (全体期限切れ消去可能) にしますが。

メール洗濯
-----

メイラー (mailer) やリストサーバー (list server) は本当に本当に馬鹿げた事をすることで悪名高いです。 ``わぁ、RFC822 は我々のサーバーを通っていくメッセージの全ての行の最後に wE aRe ElIte!!!!!1!! を加える事を明示的に禁止はしていないぞ。さぁ、やってみよう!!!!1'' えぇ、そのとおりですが、RFC822 は能力の低い人によって読まれるようには書かれていません。明白な事はそこでは議論されていません。ですから。そういうことです。

問題点: ドイツ版 Microsoft Exchange は返答の表題に Re:  の代わりに AW:  を付け加えます。私はこれに動揺して狼狽しているふりをすることもできましたが、そうする気力がありませんでした。それは笑うべき事です。

Gnus は記事を表示するときにそれを洗濯するために過度の関数を提供していますが、メールをディスクに保存する前に選別をすることができた方が良いでしょう。その目的のために、3つのフックとそのフックに入れる事のできる色々な関数があります。

nnmail-prepare-incoming-hook
     このフックはメールに何かをする前に呼ばれ、基本的な、メールを掃いてきれいにする所作のためにあります。使う事のできる関数は:

     nnheader-ms-strip-cr
          それぞれの行から、最後にあるキャリッジリターン (carriage return) を取り除きます。これは MS のマシン上で動作している Emacs のディフォルトです。

nnmail-prepare-incoming-header-hook
     このフックはそれぞれのヘッダーに範囲を狭められて (narrowed) 呼ばれます。ヘッダーをきれいにするときに使う事ができます。使う事のできる関数は:

     nnmail-remove-leading-whitespace
          ヘッダーにそれが良く見えるように ``有用な'' リストサーバーが前の方に付け加えた空白を無くします。あぁぁ。

     nnmail-remove-list-identifiers
          いくつかのリストサーバーは同一識別子を付け加えます---例えば、 (idm)---を全ての Subject ヘッダーの最初に付けます。それは、石器時代のメールヘッダーを使っている人には良い事だと思います。この関数は正規表現 nnmail-list-identifiers に合致する文字列を取り除きます。それは正規表現のリストである事もできます。

          例えば、(idm) と nagnagnag 同一識別子を取り除きたいのなら:

               (setq nnmail-list-identifiers
                     '("(idm)" "nagnagnag"))

     nnmail-remove-tabs
          全ての TAB 文字を SPACE 文字に変換します。

nnmail-prepare-incoming-message-hook
     このフックはそれぞれのメッセージに範囲を狭められて呼ばれます。使う事のできる関数は:

     article-de-quoted-unreadable
          Quoted Readable 符号化を復号化します。

重複
--

いくつかのメーリングリストのメンバーなら、時々同じメールを2つ受け取る事があります。これはとてもうるさく感じることもありますので、nnmail はそれが発見するかもしれない重複を調べて扱います。これをするために、古い Message-ID を保存します---nnmail-messagge-id-cache-file に。これはディフォルトでは ~/.nnmail-cache です。それに保存される最大数の Message-ID は変数 nnmail-message-id-cache-length に制御され、それはディフォルトで1000です。 (ですから、1000 Message-ID が溜められます。) これが恐ろしいと思ったなら、 nnmail-treat-duplicates を warn (ディフォルトではそのようになっていますが) に設定する事ができ、そうすれば、nnmail は重複メールを消去しません。その代わりに、メールの先頭にこれは違ったメッセージの重複であるという警告を挿入します。

この変数は関数である事もできます。その場合は、関数は Message-ID を引数として、当のメッセージに範囲を狭められたバッファから呼ばれます。この関数は nil、warn、delete のどれかを返さなければなりません。

変数を nil に設定する事によって、この機能を完全に使わないようにする事ができます。

もし全ての重複メールを特別な duplicate グループに入れたいのであれば、普通のメール分割方法を使ってそれをすることができます:

     (setq nnmail-split-fancy
           '(| ;; 重複メッセージは分離されたグループへ行きます。
             ("gnus-warning" "duplication of message" "duplicate")
             ;; デーモンやポストマスターや似たようなものからの
             ;; メッセージは他のところへ。
             (any mail "mail.misc")
             ;; 他の法則。
             [ ... ] ))

もしくは次のようなもの:

     (setq nnmail-split-methods
           '(("duplicates" "^Gnus-Warning:")
             ;; 他の法則。
             [...]))

すばらしい機能があります: もし受け手がメールを gnus で読んでいる事を知っていて、nnmail-treat-duplicates が delete に設定してあると、あなたの知っている、その人が既に受け取ったメールの Message-ID を使って、考える限りたくさんの侮辱を送る事ができます。その楽しさを考えてみてください！ その人はそれらを決してみる事はありません！ わぉ！

メールを読むのではない
-----------

メールバックエンドを使い始めると、それらにはあなたがそれらでメールを読みたいと思っていると仮定するといううるさい癖があります。これはもっともでない事ではないかもしれませんが、あなたの望む事ではないかもしれません。

もし nnmail-spool-file を nil に設定すると、どのバックエンドも入ってくるメールを読もうと試みる事はなく、望む事の手助けになるでしょう。

例えば、nnml でメールを読む事に非常に満足していて、古い RMAIL ファイルが nnbabyl で隠されているのをさっと見たいだけなら、これは余分でしょう。すべてのバックエンドは バックエンド- get-new-mail という変数を持っています。もし nnbabyl のメール読み込みを使用不可にしたいのであれば、グループの事実上のサーバーを nnbabyl-get-new-mail を nil に設定するように編集します。

全てのメールバックエンドは入ってくるメールを読み込むときに、保存されるべき記事に範囲を狭めて nn*-prepare-save-mail-hook を呼びます。

メールバックエンドを選ぶ
------------

Gnus はメールグループを動作するようにするとメールスプールを読み込みます。メールファイルはまずあなたのホームディレクトリーに複写されます。その後に何が起こるかはメールをどの様式で溜めたいかによって変わります。

Unix メールボックス
............

nnmbox バックエンドはメールを蓄蔵するために標準の Un*x mbox ファイルを用います。nnmbox はそれぞれのメール記事にそれがどのグループに属しているかを示す追加のヘッダーを加えます。

事実上のサーバーの設定:

nnmbox-mbox-file
     利用者のホームディレクトリーのメールボックスの名前。

nnmbox-activate-file
     メールボックスの現状ファイルの名前。

nnmbox-get-new-mail
     nil でなければ、nnmbox は入って来たメールを読み込んでグループに分割します。

Rmail Babyl
...........

nnbabyl バックエンドはメールを蓄蔵するために babyl メールボックス (別名 rmail mbox) を使います。nnbabyl はそれぞれの記事にそれがどのグループに属しているかを示す追加のヘッダーを加えます。

事実上のサーバーの設定:

nnbabyl-mbox-file
     rmail mbox ファイルの名前

nnbabyl-active-file
     rmail box のための現状ファイルの名前。

nnbabyl-get-new-mail
     nil でなければ、nnbabyl は入ってくるメールを読み込みます。

メールスプール
.......

nnml スプールメール様式は他の知られた様式とは互換性がありません。それは少し注意して使われるべきです。

もしこのバックエンドを使うと、gnus は入ってくるメールを、それぞれのメールを1ファイルとしてファイルに分割し、記事を変数 nnml-directory で指定されたディレクトリーの下の対応するディレクトリーに入れます。ディフォルトの値は ~/Mail/ です。

前もってディレクトリーを作っておく必要はありません。それの面倒は gnus が見てくれます。

もしあなたのアカウントに蓄積できるファイルの数に厳密な制限があるなら、このバックエンドを使うべきではありません。それぞれのメールはそれ自身のファイルを得ますので、数週間でたくさんの iノードを占有する可能性は十分にあります。別にこれが問題でなく、親切なシステム管理者が、気が狂ったように ``誰が私の iノードを食いつぶしているんだ？ 誰だ？ 誰！？ と叫びながら歩き回る事が問題でないなら、これがおそらく使う事のできる一番速い様式であるということは知っておくべきでしょう。新しいメールを読むためだけに大きな mbox ファイルを重い足取りで探す必要はありません。

nnml は記事分割に関してはおそらく一番遅いバックエンドでしょう。それは多くのファイルを作らなければならず、それは入ってくるメールのための NOV データベースも作成しなければなりません。これのために、メールを読む事に関しては最速のバックエンドになります。

事実上のサーバーの設定:

nnml-directory
     全ての nnml ディレクトリーはこのディレクトリーの下に置かれます。

nnml-active-file
     nnml サーバーのための現状ファイル。

nnml-newsgroups-file
     nnml グループ記述ファイル。 See Newsgroups File Format。

nnml-get-new-mail
     nil でなければ、nnml は入って来たメール読み込みます。

nnml-nov-is-evil
     nil でなければ、このバックエンドはどの NOV ファイルも無視します。

nnml-nov-file-name
     NOV ファイルの名前。ディフォルトは .overview です。

nnml-prepare-save-mail-hook
     保存する前に記事に範囲を狭めて実行するフックです。

nnml グループと NOV ファイルが完全に良い状態でなくなってしまったなら、M-x nnml-generate-nov-databases と打つ事によって、完全に更新する事ができます。この命令は、それぞれ全てのファイルを見る事によって nnml 階層全体をトロール魚網でさらいますので、それが終わるまでには時間がかかるかもしれません。この機能へのより良いインターフェースはサーバーバッファで見つかるでしょう (see Server Commands)。

MH スプール
.......

nnmh は、NOV データベースを作らないことと現状ファイルを保持しない事を除いて、 nnml と似ています。そのことは nnmh を nnml より かなり 遅いバックエンドにしていますが、それは procmail のスクリプトを書くためにずっとやりやすくなってもいます。

事実上のサーバーの設定:

nnmh-directory
     全ての nnmh ディレクトリーはこのディレクトリーの下に置かれます。

nnmh-get-new-mail
     nil でなければ、nnmh は入ってくるメールを読み込みます。

nnmh-be-safe
     nil でなければ、nnmh はフォルダーにある記事が実際に gnus が考えているものと同じであるかを調べるという馬鹿げた事をやります。それは日付と目に入る全ての情報を調べますので、これを t に設定する事は深刻な速度低下が起こるという事です。もし nnmh 記事を読むのに gnus 以外のものを使っていないのであれば、この変数を t に設定する必要はありません。

メールフォルダー
........

nnfolder はそれぞれのメールグループを違ったファイルに蓄蔵するバックエンドです。それぞれのファイルは標準の Un*x mbox 様式です。 nnfolder は記事番号と到着日を記録しておくための追加のヘッダーを加えます。

事実上のサーバーの設定:

nnfolder-directory
     全ての nnfolder メールボックスはこのディレクトリーの下に置かれます。

nnfolder-active-file
     現状ファイルの名前。

nnfolder-newgroups-file
     グループ記述ファイルの名前。 See Newsgroups File Format。

nnfolder-get-new-mail
     nil でなければ、nnfolder は入ってくるメールを読み込みます。

nnfolder-save-buffer-hook
     フォルダーを保存する前に実行されるフックです。nnfolder バッファに対してさえも Emacs は通常のバックアップの変名をする事に注意して下さい。この機能を無効にしたいのであれば、ファイル .emacs で次のような事をする事ができます:

          (defun turn off-backup ()
            (set (make-local-variable 'backup-inhibited) t))

          (add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)

nnfolder で読みたいと思う、たくさんの nnfolder のようなファイルを持っているのであれば、nnfolder に nnfolder-directory にある全てのそのようなファイルに気付かせるために、命令 M-x nnfolder-generate-active-file を使う事ができます。

その他のグループ源
=========

Gnus はただ単にニュースやメールを読む以上のことができます。以下に示す方法によって、gnus でディレクトリーやファイルを、あたかもニュースグループであるかのように閲覧することができるようになります。

ディレクトリーグループ
-----------

もし、たくさんの記事が個別のファイルとして入っているディレクトリーがあれば、それをニュースグループとして扱うことができます。もちろん、ファイルは数字のファイル名をもっていなければなりません。

ここで Emacs の素晴らしいパッケージの中でも最も素晴らしい ange-ftp (とその後継の efs) について触れる良い機会でしょう。私が nndir を書いたときは、これ --- ディレクトリーを読むバックエンドについてはあまり考えていませんでした。とんでもないことだね。

ange-ftp はこの情況を劇的に変化させました。例えば、 ange-ftp ファイル名 /ftp.hpc.uh.edu:/pub/emacs/ding-list/ をディレクトリー名として入力したとすると、ange-ftp あるいは efs は実に、シナ の向こうのディレクトリーをニュースグループとして読むことを可能にするのです。おーい、分散ニュースよ!

nndir は NOV ファイルが存在すればそれを利用します。

nndir は ``読み出し専用'' のバックエンドです --- この選択方法では、記事の削除や期限切れ消去を行なうことはできません。 nndir が使えるものなら何でも nnmh あるいは nnml を使うことができるので、もし読み出し専用ではない nndir が必要だと思ったら、これらのどちらかの方法に切り替えることもできます。

なんでもグループ
--------

(一つのスプール風ディレクトリーと解釈できる) nndir バックエンドからnneething までは、ほんのすぐそこです。それはいかなるディレクトリーでもニュースグループに見せかけてしまう、というものです。不思議です、でも真実です。

nneething にディレクトリーを与えると、そのディレクトリーを走査し、各ファイルに記事番号を割り当てます。このようなグループに入ったときは、nneething は gnus が使う ``ヘッダー'' を作らなくてはなりません。つまるところ、gnus はニュースリーダなんです。忘れてるかもしれないので念のため。nneething はこれを 2 段階で処理します。最初に、問題となるファイルをそれぞれ詮索してまわります。もしそのファイルが記事のように見えたなら (すなわち、最初の数行がヘッダーのように見えたら) それをヘッダとして使います。もしそれがヘッダーのないただの適当なファイル (例えば C のソースファイル) であったなら、nneething はヘッダーを虚空から作り出します。これはファイルの所有者、名前、日付を使い、これらの要素に対してできることを何でもやります。

これはあなたにとっては全て自動的に起こることで、あなたはニュースグループにとても良く似た何かを見せられることになるでしょう。ほんとうに寸分違わない、ニュースグループのようなものを。記事を選択すると、それはいつものように、記事バッファに表示されるでしょう。

ディレクトリーを表わしている行を選択すると、gnus はあなたをこの nneething グループのための新しい概略バッファに連れて行くでしょう。以下同様で、もしあなたがそうしたければ、この方法で全ディスクを駆け巡ることができます。ですが、gnus は本当は dired ではなく、そのように意図されたものでもない、ということは覚えておいてください。

ここでの動作には全体的に 2 つのモードがあります --- 一時モードと固定モードです。一時的な操作を行なっているときは(すなわち、グループバッファで G D とする)、gnus はどのファイルを読んだか、どのファイルが新しいか、などの情報を憶えておきません。もしG m で普通に固定 nneething グループを作ると、gnusは記事番号とファイル名の対応表を憶えておき、このグループを他のグループと同様に扱うことができるようになります。固定nneething グループを作動させると、未読記事がいくつ含まれているかを知らされたり、などなど。

いくつかの変数があります。

nneething-map-file-directory
     全ての固定 nneething グループの対応表はこのディレクトリーに格納されます。この初期設定値は ~/.nneething/ です。

nneething-exclude-files
     この正規表現にマッチするファイルはすべて無視されます。自動保存ファイルなどを除くのに便利に使えます。そしてそれがまさに初期設定で行なわれる動作です。

nneething-map-file
     対応表ファイルの名前。

文書グループ
------

nndoc は一つのファイルをニュースグループとして読むことをできるようにする、ちょっと気の利いたやつです。いくつかのファイル種別がサポートされています。

babyl
     babyl (rmail) 形式のメールボックス。

mbox
     標準 Unix mbox ファイル。

mmdf
     MMDF 形式のメールボックス。

news
     いくつかのニュース記事が連結された一つのファイル。

rnews
     rnews のバッチ転送形式。

forward
     転送された記事。

mime-parts
     集配配送 (digest) の他の MIME 多部分メッセージ (multipart message) です。

mime-digest
     MIME (RFC 1341) まとめ送り形式。

standard-digest
     標準 (RFC 1153) まとめ送り形式。

slack-digest
     非標準まとめ送り形式 --- だいたいはうまくマッチするが、でも扱いは下手。

また、特別な ``ファイル種別'' guess を使うこともできます。これは nndoc は注目しているファイルの種別を推測しようとする、という意味です。digest は nndoc にそのファイルがどのまとめ送り形式かを推測させるという意味です。

nndoc はファイルを書き換えようとしたり、余分なヘッダーを挿入しようとしたりはしません --- 単純に、ファイルをそのグループの主成分として使えるようにする、というようなものです。それだけのことです。

もしあなたが古い保存記事を持っていて、それを新しくてかっこいい gnus のメールバックエンドに追加したいというときは、おそらく nndoc が助けになります。例えばあなたがメールを古い RMAIL で持っていて、それをあなたの新しい nnml グループに分配したいとします。あなたはそのファイルを nndoc を使って開いて (グループバッファで G f 命令を使う (see Foreign Groups))、バッファ内の全記事にプロセスマークを付け (例えば M P b)、そして nnml を使って再スプール (B r) します。全てがうまく行けば、RMAIL ファイル内の全てのメールはたくさんの  nnml ディレクトリーの中にも保存されます。そしてあなたはあの厄介な RMAIL を削除することもできます。あなたにガッツがあれば!

仮想サーバー変数。

nndoc-article-type
     これは mbox、 babyl、 digest、news、 rnews、 mmdf、 forward、 rfc934、 rfc822-forward、 mime-digest、 standard-digest、slack-digest、 clari-briefs、guess のいずれかでなくてはなりません。

nndoc-post-type
     この変数は gnus にそのグループがニュースグループかメールグループかを教えます。正当な値は 2 つあります。 mail (初期設定)か newsです。

文書サーバーの内部
.........

nndoc で認識される新しい文書種別を追加することは難しくありません。その文書がどのように見えるのかを寄せ集めて、その文書種別を認識する述語関数を書き、そして nndoc に繋げるだけです。

まず、これが文書種別定義の例です。

     (mmdf
      (article-begin .  "^\^A\^A\^A\^A\n")
      (body-end .  "^\^A\^A\^A\^A\n"))

この定義は単に、唯一の名前 (name) とそれに続く正規表現と仮想変数設定の列からなります。以下がこれに使える変数です --- 変数の数に圧倒されないでください。ほとんどの文書種別はごくわずかの設定で定義できます。

first-article
     これがあれば、nndoc はこの正規表現にマッチする何かが見つかるまで、全てのテキストを読み飛ばします。 マッチする前の全てのテキストは完全に無視されます。

article-begin
     この設定は全ての文書種別定義において必ずなくてはなりません。これは各記事の始まりがどのように見えるかを指定します。

head-begin-function
     これがある場合、これは記事の先頭にポイントを移動させる関数でなくてはなりません。

nndoc-head-begin
     これがある場合、これは記事のヘッダーにマッチする正規表現でなくてはなりません。

nndoc-head-end
     これは記事のヘッダーの最後にマッチしなくてはなりません。この初期設定値は ^$ --- 空行です。

body-begin-function
     これがある場合、この関数は記事のボディの開始位置にポイントを移動させる関数でなくてはなりません。

body-begin
     これは記事のボディの開始位置にマッチしなくてはなりません。この初期設定値は ^\n です。

body-end-function
     これがある場合、この関数は記事のボディの最後の位置にポイントを移動させる関数でなくてはなりません。

body-end
     これがあれば、記事のボディの最後にマッチしなくてはなりません。

file-end
     これがある場合、これはファイルの最後にマッチしなくてはなりません。この正規表現の後ろのテキストは全て、完全に無視されます。

このように、これらの変数を使って nndoc は文書ファイルを、それぞれヘッダーとボディを持った記事の連なりとして解剖することができます。しかし、全ての文書種別が全てこのようなニュース風になってるわけではないので、さらにいくつかの変数 --- ヘッダーやボディを gnus の趣味に合うように変形させる変数が必要になります。

prepare-body-function
     これがあれば、この関数は記事が要求されたときに呼び出されます。これはボディの開始位置のポイントとともに呼び出され、文書の内容の一部が符号化されている場合に有用です。

article-transform-function
     これがあれば、この関数は記事が要求されたときに呼び出されます。これは、記事のヘッダーとボディの両方により広範囲な変形を行なうために使われるものです。

generate-head-function
     これがあれば、この関数は gnus が理解できるヘッダーを生成するために呼び出されます。これは記事番号をパラメータとして呼び出され、問題の記事のきれいなヘッダーを生成することを求められます。これは全ての記事のヘッダーが要求されるときに呼び出されます。

私が作った中で最も複雑な例 --- 標準まとめ送り形式を見てみましょう。

     (standard-digest
      (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
      (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
      (prepare-body-function . nndoc-unquote-dashes)
      (body-end-function . nndoc-digest-body-end)
      (head-end . "^ ?$")
      (body-begin . "^ ?\n")
      (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
      (subtype digest guess))

70 文字のダッシュ(`-')の行より前は全て無視されるというのが分かります。また ^End of で始まる行より後ろも全て無視されます。各記事は30 文字のダッシュの行で始まり、ヘッダーとボディの区切りの行は一個のスペースを含むことがあり、そしてボディはそれが渡される前に nndoc-unquote-dashes を通されます。

あなた独自の文書定義を nndoc に接続するには、 nndoc-add-type 関数を使用します。これは二つのパラメータをとります --- 一つ目はその定義自身で、二つ目の (省略可能な) パラメータはこの定義を、文書種別定義連想リストのどこに置くかを指定します。この連想リストは順番に走査され、与えられた種別 TYPE に対して nndoc-TYPE-type-p が呼び出されます。このように文書が mmdf 種別であるかどうかを調べるために nndoc-mmdf-type-p が呼び出され、そして以下同様に続きます。これらの種別述語関数は、その文書がその種別でない場合は nil を返し、その種別である場合は t を返し、その種別かもしれないときは数字を返さなくてはなりません。高い数字は高い可能性を意味し、低い数字は低い可能性を意味します。0 は正しい値の中でもっとも低い数字です。

SOUP
----

PC の世界の人々はよく、``オフライン'' ニュースリーダについて話をしています。これはリーダとニュース配送を合体させた、実在するモンスターです。内蔵モデムプログラム付きでね。きゃはは!

もちろん、我らが Unix キチガイの人間供は uucp だとか nntpd のようなものを使い、神の領域たるメール、ニュースの配送を正しく設定するのです。そして僕たちはただ普通のニュースリーダを使います。

しかし、あなたがとても遅いモデムを持っていてこれらを正しく設定することに興味が無ければ、脳みそに楽をさせる方をするのも時には便利です。

SOUP と呼ばれるファイル形式はニュースとメールをサーバーから家のマシンへと転送し、それをまた戻すために開発されました。ちょっと面倒くさいかもしれないけどね。

はじめにいくつか用語を。

server
     これは外の世界に繋がっていて、あなたがニュースとメールを送受信するマシンです。

home machine
     これはあなたが実際に読んだり返事を書いたりしたいマシンです。これは普通、他の世界といかなる形でも接続されていません。

packet
     メッセージと命令を含んだもの。パケットには二種類あります。

     message packets
          これはサーバーで作られるパケットで、普通はあなたが読むためのたくさんのメッセージが含まれています。これらは初期設定では SoupoutX.tgz という名前です。ここで X は数字です。

     response packets
          (返信パケット) このパケットは自宅マシンで作られるパケットで、普通はあなたの書いた返事が含まれています。これらは初期設定では SoupinX.tgz という名前です。ここで X は数字です。

 1. まず SOUP パケットを作るためにサーバーにログインします。 SOUP のための専用のブツ (awk プログラムのような) を使っても良いし、 gnus の SOUP 命令を使ってパケットを作っても良いです (O s あるいは G s b そして G s p) (see SOUP Commands)。

 2. パケットを自宅に転送します。電車で、船で、自動車で、あるいはモデムで、何でもいいです。

 3. パケットをあなたのホームディレクトリーに置きます。

 4. Gnus をあなたの自宅マシンでかっ飛ばして、 nnsoup バックエンドを基本サーバーあるいは二次サーバーとして使用します。

 5. 記事やメールを読んで必要なやつに返事を書いてフォローアップ記事を書きます (see SOUP Replies)。

 6. G s r 命令を実行して、これらの返事を SOUP パケットに梱包します。

 7. このパケットをサーバーに転送します。

 8. Gnus から G s s 命令を使ってこのパケットからメールを出します。

 9. あとはこれを死ぬまで続けます。

つまり基本的に二者分割システムができたことになります --- nnsoup を読むために、gnus を SOUP パケットの梱包と送出に使います。

SOUP 命令
.......

これらの命令は SOUP パケットの作成と操作を行なうものです。

G s b
     現在のグループの全ての未読記事を梱包する (gnus-group-brew-soup)。このコマンドはプロセス/接頭引数の習慣に従います。

G s w
     全ての SOUP データファイルを保存します (gnus-soup-save-areas)。

G s s
     返信パケットから全ての返信を送出する (gnus-soup-send-replies)。

G s p
     全てのファイルを  SOUP パケットに梱包する (gnus-soup-pack-packet)。

G s r
     全ての返信を返信パケットに梱包する (nnsoup-pack-replies)。

O s
     この概略モード命令は、現在の記事を SOUP パケットに追加します (gnus-soup-add-article)。これはプロセス/接頭引数の習慣に従います (see Process/Prefix)。

gnus がこれらの実体をどこに置くかをカスタマイズするいくつかの変数があります。

gnus-soup-directory
     SOUP パケットを作成中に gnus が中間ファイルを保存するディレクトリー。初期設定値は ~/SoupBrew/。

gnus-soup-replies-directory
     返信パケット送信中に gnus が使用する一時ディレクトリー。 ~/SoupBrew/SoupReplies/ が初期設定値。

gnus-soup-prefix-file
     gnus が最後に使った接頭引数を保存するファイル名。初期設定値は gnus-prefix。

gnus-soup-packer
     SOUP パケットを梱包する命令文字列の形式。初期設定値は tar cf - %s | gzip > $HOME/Soupout%d.tgz。

gnus-soup-unpacker
     SOUP パケットを取り出す命令文字列の形式。初期設定値は gunzip -c %s | tar xvf -。

gnus-soup-packet-directory
     gnus が返信パケットを探しに行く場所。初期設定値は ~/。

gnus-soup-packet-regexp
     gnus-soup-packet-directory 内の SOUP パケットにマッチする正規表現。

SOUP グループ
.........

nnsoup は SOUP パケットを読むためのバックエンドです。これは入ってきたパケットを読み、それを取り出して、あなたが暇なときに読むディレクトリーに展開します。

これらはこの振る舞いをカスタマイズできる変数です。

nnsoup-tmp-directory
     nnsoup が SOUP パケットを取り出すとき、このディレクトリ内で行なう (初期設定は /tmp/)。

nnsoup-directory
     そして nnsoup がそれぞれのメッセージと索引ファイルをこのディレクトリーに移動させる。初期設定は ~/SOUP/。

nnsoup-replies-directory
     全ての返信は、返信パケットに梱包される前にこのディレクトリーに格納される。初期設定は ~/SOUP/replies/"。

nnsoup-replies-format-type
     返信パケットの SOUP 形式。初期設定値は ?n (rnews) で、この変数には触るべきではないと私は思います。たぶん文書に明記すべきでさえなかったね。ちぇっ! もう手遅れか。

nnsoup-replies-index-type
     返信パケットの索引の種類。初期設定値は ?n で、意味は ``なし''。これもいじるんじゃないよ!

nnsoup-active-file
     nnsoup がたくさんの情報を格納する場所。これは nntp の意味での ``アクティブファイル'' ではなく、Emacs Lisp のファイルです。このファイルを無くしてしまったり、何か壊してしまったら、あなたは死にます。初期設定値は ~/SOUP/active です。

nnsoup-packer
     返信 SOUP パケットを梱包する命令文字列の形式。初期設定値は tar cf - %s | gzip > $HOME/Soupin%d.tgz。

nnsoup-unpacker
     入ってくる SOUP パケットを取り出すための命令文字列の形式。初期設定値は gunzip -c %s | tar xvf -。

nnsoup-packet-directory
     入ってきたパケットを nnsoup が探す場所。初期設定値は ~/。

nnsoup-packet-regexp
     入ってきた SOUP パケットにマッチする正規表現。初期設定値は Soupout。

nnsoup-always-save
     nil 以外であれば、メッセージを投稿した後に返信バッファを保存する。

SOUP 返信
.......

単に nnsoup を使うだけでは、SOUP 返信パケット中のあなたの投稿とメールの送信が、魔法のように自動的に終了するわけではありません。それを起こすにはもうちょっと働かなくてはいけません。

nnsoup-set-variables 命令は、あなたの全てのフォローアップ記事と返信を SOUP システムに確実に終了させるように、適切な変数を設定します。

特別に、これが実際に行われることです。

     (setq message-send-news-function 'nnsoup-request-post)
     (setq message-send-mail-function 'nnsoup-request-mail)

それだけです、ほんとに。もし SOUP システムにニュースだけを入れたかったら、最初の行だけを使ってください。もしメールだけを SOUP させたかったら、二番目を使ってください。

ウェブ検索
-----

それは、なんというか、Usenet から文字列にマッチする記事を検索するのはとても素晴らしいんだけど、その、あのウェブブラウザーってやつを使って、そんでもって、宣伝を読ませられるっていうのは、その、なんというか、ほんとうに 「不様ね」 というか、それで、 gnus ではブラウザーを使わずに、その、超かっこよくそれができる、ってことです。

nnweb バックエンドは、強力な検索エンジンに対して簡単なインターフェースを提供します。nnweb グループを作成し、検索パターンを入力し、そしてそのグループに入って他の普通のグループのように記事を読みます。グループバッファ (see Foreign Groups) の G w 命令によってお手軽にこれができます。

nnweb グループは、固定グループになろうとはしません --- このグループでは記事番号はごく一時的なものとして扱います。つまり、 nnweb グループに入るたびに(たとえ検索パターンを変更していなくとも)、記事の順序が違っているかもしれません。また、重複抑制 (see Duplicate Suppression) を使ってもうまく働かないでしょう。というのは、nnweb は検索エンジン(例えば DejaNews) を使って記事を読み込むまでは、Message-ID を知ることはできないからです。あなたが読んだ記事を憶えておくための唯一の方法は、 Date ヘッダーをもとにスコアを付けることだけです --- つまりあなたがそのグループを最後に読んだ日付より、前に投稿された記事を全て既読にする、ということです。

もし検索エンジンの出力形式が変更されると、nnweb はそれをうまく解釈できず、処理は失敗するでしょう。もしウェブ提供者達がそんなことをしたら、彼らを激しく責めるべきでしょう --- それは広告で金を稼ぐのが彼らの 存在理由 であり、社会にサービスを提供することではないからです。nnweb は全ての記事から広告を洗い流してしまうので、提供者たちがムカついていると思われるかも知れません。まあ見ててください。

nnweb を使うには、url と w3 パッケージをインストールしておかなくてななりません。

以下は仮想サーバー変数です。

nnweb-type
     どの検索エンジンを使っているか。現在サポートされている種類は、 dejanews、 dejanewsold、 altavista、 reference です。

nnweb-search
     検索エンジンに与える検索文字列。

nnweb-max-hits
     表示する検索結果の最大数。デフォルトは 100 です。

nnweb-type-definition
     型・定義連想リスト。この連想リストは、さまざまな検索エンジンの種類に対して、 nnweb がどうすべきかを与えます。以下に示す要素を与えなくてはなりません。

     article
          記事を復号化し、gnus が理解できる形で提供する関数。

     map
          記事番号からメッセージヘッダーと URL を得る連想リストを作成する関数。

     search
          検索エンジンに検索文字列を送る関数。

     address
          前述の関数が検索文字列を送るべきアドレス。

     id
          Message-ID をもとに記事を取得するための URL 形式文字列。

メールからニュースへのゲートウェイ
-----------------

もしあなたのローカルの nntp サーバーが、何らかの理由で投稿を許可していなければ、数あるメールからニュースへのゲートウェイを使って投稿することができます。nngateway バックエンドはこのインターフェースを提供します。

このバックエンドからは何も読み出せないことに注意してください --- これは投稿するためだけに使われます。

以下はサーバー変数です。

nngateway-address
     これがメール・ニュースゲートウェイのアドレスです。

nngateway-header-transformation
     ニュースヘッダーは、メール・ニュースゲートウェイが受け付けられるように、奇妙な形に変形しておかなくてはならない時があります。この変数はどんな変形処理が呼び出されるべきかを示しており、初期設定値は nngateway-simple-header-transformation になっています。この関数は変形するヘッダーに領域制限(narrow)されて呼び出され、一個の引数 --- ゲートウェイのアドレスを与えられます。

     初期設定値の関数は単に新しい To ヘッダーを、 Newsgroups ヘッダーとゲートウェイアドレスをもとに挿入します。例えば、以下のような Newsgroups ヘッダー

          Newsgroups: alt.religion.emacs

     を持つ記事には、次のような To ヘッダーが挿入されます。

          To: alt-religion-emacs@GATEWAY

     以下の既製関数が存在します:

     nngateway-simple-header-transformaton
          NEWSGROUP@nngateway-address のような To ヘッダーをつくります。

     nngateway-mail2news-header-transformation
          nngateway-address のような To ヘッダーをつくります。

          ここに例があります。

               (setq gnus-post-method
                     '(nngateway "mail2news@replay.com"
                                 (nngateway-header-transformation
                                  nngateway-mail2news-header-transformation)))

つまり、これを使うには、こんな風にするだけです。

     (setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))

結合グループ
======

Gnus は、全てのグループの種類を混合して、大きなグループに結合することができます。

仮想グループ
------

nnvirtual グループ (nnvirtual group) は実は他のグループの集合以上の何物でもありません。

例えば、もし小さなグループをたくさん読むのが嫌になってきたら、それらを一つの大きなグループに入れて、嫌になるくらい巨大で手に負えないグループを読むことができます。これがコンピューターの楽しみだね!

選択方法として nnvirtual を指定してください。アドレスは、それを構成するグループにマッチする正規表現です。

仮想グループ内で付けられた全ての印は、その構成グループの記事にくっつけられます。つまり、もし仮想グループ内で記事に可視記事の印をつけると、その記事はもともとの構成グループの中でも可視記事になります。 (そして逆も成り立ちます --- 構成グループ内で付けた印は仮想グループ内でも表示されます。)

これが、Andrea Dworkin に関する全てのニュースグループを、一つの巨大でシアワセなニュースグループにまとめる nnvirtual 方法の例です。

     (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")

構成グループは基本グループでも外部グループでも構いません。全て問題無く動くはずですが、もしあなたのコンピューターが爆発でもしてしまったら、それはたぶん私が悪いんでしょうね。

いくつかのサーバーから同じグループを集めることは、利用者が Distribution ヘッダーを使って配布範囲を制限している場合は、非常に良いかも知れません。もしあなたが soc.motss を、日本のサーバーとノルウェーのサーバーの両方から読みたければ、グループの正規表現として以下の値が使えます。

     "^nntp\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"

(でもちょっと注意。G m でグループを作成するときは、バックスラッシュを二重に付けてはいけません。そして文字列の最初と最後の引用記号も取り払ってください。)

これはちょっとうまく動作するはずです --- 両方のグループの記事は全部完全に一つのグループになり、重複も無いはずです。スレッド表示 (とその他)も通常通りうまく動作するでしょうけど、記事の並ぶ順序には問題があるかもしれません。日付による並べ替えはここでは仕様外となるかもしれません (see Selecting a Group)。

なお、ここで一つだけ制限があります --- 仮想グループに含まれるグループは全て生きている(すなわち、購読または非購読の)状態でなくてはなりません。削除あるいはゾンビグループは nnvirtual グループの構成グループになることはできません。

nnvirtual-always-rescan が nil 以外であれば、 nnvirtual は仮想グループに入ったとき常に、未読記事を走査します。この変数が nil (これが初期設定)であって、仮想グループを作成した後に構成グループ内の記事を読んだ場合は、その構成グループで読まれた記事は、仮想グループに入ったときに表示され るでしょう。もし共通の構成グループを持つ二つの仮想グループがある場合にもこの影響があります。その場合はこの変数を t にした方が良いです。あるいは仮想グループに入る時に、毎回そのグループの上で M-g を叩いても良いです --- これはほぼ同様の効果があります。

nnvirtual はメールとニュースの両方のグループを構成グループとする事ができます。nnvirtual グループの記事に返答するときは、 nnvirtual は記事の出所の構成グループのバックエンドにそれがニュースのバックエンドであるかメールのバックエンドであるかを尋ねなければなりません。しかし、^ をしたときには、普通は構成バックエンドがこれを知る確かな方法はなく、その場合は、nnvirtual は gnus に記事はニュースでないバックエンドから来たと告げる事になります。 (安全のために。)

このような場合は、メッセージバッファでの C-c C-t が応答しようとしている記事から Newsgroups 行を抜き出して挿入します。

Kiboze グループ
-----------

Kiboze する、とは、``ニューススプール全部(あるいはその一部) から grep すること'' とオックスフォード大辞典によって定義されています。nnkiboze はこれをあなたのために行ってくれるバックエンドです。嬉しいね! これでどんな NNTP サーバーでも、役に立たない要求で止まってしまうまで酷使することができるね。ああ、なんて幸せなんだ!

kiboze グループを作成するには、グループバッファで G k 命令を使います。

nnkiboze 方法におけるアドレス欄は、nnvirtual と同様に、nnkiboze に ``含めたい'' グループにマッチする正規表現です。ここが nnkiboze と nnvirtual バックエンドの最も類似している点です。

この構成グループを列挙する正規表現に加えて、nnkiboze グループには、グループ内のどの記事を含めるかを決めるスコアファイルがなくてはなりません (see Scoring)。

あなたの欲しい nnkiboze グループを作成した後には、 M-x nnkiboze-generate-groups を実行しなければなりません。この命令は時間がかかります。とってもかかります。すごく、すごーくかかります。Gnus はその nnkiboze グループの一部となるべき記事があるかどうかを調べるために、全部の構成グループの全部の記事に対してヘッダーを取得し、それら全てに対してスコア処理を実行しなくてはならないのです。

構成グループの数を抑えるように、限定した正規表現を使ってください。さもないと、あなたのところのシステム管理者を怒らせてしまって、 NNTP サーバーからあなたを追い出して二度と入れないようにしてしまうかも知れません。不慣れな人がよくやることです。

nnkiboze の構成グループは生きている必要はありません --- 死んでても良いし、外部グループでも構いません。無制限です。

nnkiboze グループの生成によって、二つのファイルが nnkiboze-directory 内に作成されます。この初期設定値は ~/News/ です。一方のファイルはそのグループの全記事の NOV ヘッダー行を含んでいて、もう一方は構成記事を見つけるためにどのグループが検索されたかの情報を格納する、.newsrc の補助ファイルです。

nnkiboze グループ内の既読となった記事は、その記事の NOV 行が NOV ファイルから削除されます。

Gnus の切り離し
==========

いにしえの時代(およそ 1988 年 2 月頃)、人々はニュースリーダーを、大きなマシンの上でネットワークに永続的に接続して走らせていました。ニュースの配送はニュースサーバーによって取り扱われ、全てのニュースリーダーがすべきことは、ニュースを読むことであったのです。信じられないかもしれませんが。

今日では、多くの人々は自宅でニュースやメールを読み、ネットワークに接続するためにモデムの類を使います。電話代の請求書が莫大なものに上らないように、全てのニュースとメールを吸い上げ、電話を切り、数時間掛けて読み、そして送りたい返信を全て送信する、という手段を持つことは良いことでありましょう。あとはこの手順を繰り返すのです。

もちろん、これを行うためにニュースサーバーを使うこともできます。私は inn を slurp、pop、 sendmail と一緒にここ数年使ってきましたが、しかしこれは退屈な仕事です。もしあるマシン上でニュースを読む人があなたしかいなければ、ニュースサーバーの機能をニュースリーダーに任せるようにすることは理にかなっています。

Gnus を ``オフライン'' のニュースリーダーとして使うのは極めて簡単です。

  * まず、ネットワークに完全に繋がっているマシン上で動作させるのと同じように、gnus を設定します。まずやっておいで。僕はここで待ってるから。

  * そしたら、以下の魔法の呪文をあなたの .gnus.el ファイルの最後に書いてください。

          (gnus-agentize)

こんだけです。これで gnus は ``オフライン'' ニュースリーダーになってしまいました。

もちろん、これをオフラインニュースリーダーとして使うには、いくつか新しい命令を覚えなくてはなりません。

エージェントの基礎
---------

まず、いくつかの用語を片付けておきましょう。

あなたがネットワークとの通信が切れているとき(でエージェントがそれを知らされているとき)は、gnus エージェントは切り離されている (unplugged)、と言います。ネットワークの通信が復活し (そして gnus がそれを知れば)、エージェントは差し込まれている (plugged)、と言います。

ローカル (local) マシンとは、あなたが触っているマシンで、ネットワークに継続的に接続されているものではありません。

ダウンロード (download) とはネットワークから何かをあなたのローカルマシンに取ってくることを意味します。アップロード (upload) はその逆をすることです。

エージェントを使った典型的な gnus の対話操作を見てみましょう。

  * Gnus を gnus-unplugged で起動します。これは gnus エージェントを切り離されている状態で起動します。この状態では、すでに取得しているニュース記事は全て読むことができます。

  * そして、新しいニュースが到着しているかどうかを調べることにします。あなたは (PPP か何かを使って) あなたのマシンをネットワークに接続し、そして gnus を差し込むために J j を叩きます。

  * そして、その場ですぐに新しいニュースを読むこともできますし、ニュースをローカルマシンにダウンロードすることもできます。後者を実行したければ、J s を押して、全グループから適切な記事を全て取得します。(Gnus にどの記事をダウンロードしたいかを指定するには see Agent Categories を参照してください。)

  * 記事を取得した後は J j を押して、gnus を再び切り離し状態にさせ、PPP 関係(など)を閉じます。そうしてニュースをオフラインで読むことができます。

  * そして第 2 ステップに戻ります。

以下にエージェントを初めて(かそこらに)使うときに必要ないくつかの作業を示します。

  * どのサーバーをエージェントで面倒を見るかを決めます。もしメールバックエンドがあれば、それをエージェントに面倒を見させるのはおそらく無意味でしょう。サーバーバッファーに移動し (グループバッファーで ^)、エージェントに扱って欲しいサーバー(複数可)で J a を押します (see Server Agent Commands)。これは大抵の場合、バッファーの下に一覧表示されている基本選択方法だけでしょう。

  * ダウンロード方針を決定します。See Agent Categories

  * ええと…、以上です。

エージェント分類
--------

ニュース配送機構とニュースリーダーを統合する一つの大きな理由は、どの記事をダウンロードするかについて、より良い制御を可能とすることです。莫大な量の記事をダウンロードしてもあまり意味はなく、それらを読んでもあまり面白くないことが分かるだけです。何をダウンロードするかの選択はもっと慎重であるべきであり、その記事が面白いと分かった時点で、ダウンロードするための印を手動で付けるべきなのです。

何をダウンロードするかを制御する主な方法は、分類 (category) を作成して、そしてその分類にいくつか (あるいは全部) のグループを割り当てます。gnus は分類の作成と管理のための独自のバッファーを持っています。

分類の文法
.....

分類は二つのものからなります。

 1. (通常) どの記事をダウンロードするのが適当かという大まかな輪郭を与える述語。そして

 2. (通常) どの記事をダウンロードするかを決めるときのよりきめの細かいスコア規則。(このダウンロードスコア (download score) は通常のスコアとは全く関係が無いことに注意してください。)

述語は論理演算子が間に散りばめられた述語の組み合わせからなります。

おそらくいくつかの例がそのまま使えます。

以下は簡単な述語です。(これは初期設定の述語です。つまり、他のどの分類にも含まれない全てのグループに対して使用されます。)

     short

とっても簡単でしょ? この述語は、記事が短い(``短い'' 価値がある) 場合に限り真になります。

これはもっと複雑な述語です。

     (or high
         (and
          (not low)
          (not long)))

この意味は、高いスコアを持っているか、あるいはスコアが低くなくてかつ長くない、という記事をダウンロードする、ということです。わかるだろ。

使ってもよい論理演算子は、or、 and、not です。(もし使いたければ、より ``C'' 風の演算子 |、&、 ! を代りに使うことができます。)

以下の述語はあらかじめ定義されていますが、これらのどれもあなたのやりたいことに一致しなければ、自分で独自のものを書くこともできます。

short
     記事が gnus-agent-short-article 行より短かければ真。初期設定値は 100。

long
     記事が gnus-agent-long-article 行より長ければ真。初期設定値は 200。

low
     記事のダウンロードスコアが gnus-agent-low-score 以下であれば真。初期設定値は 0。

high
     記事のダウンロードスコアが gnus-agent-high-score 以上であれば真。初期設定値は 0。

spam
     gnus エージェントがその記事を SPAM だと見做したら真。この発見的手法は、今後変更されるかもしれませんが、現時点では、これはチェックサムを計算し記事が一致するかどうかを調べています。

true
     常に真。

false
     常に偽。

あなたが自分の独自の述語関数を作成したければ、これを知っておいてください: 関数は引数無しで呼び出されますが、gnus-headers と gnus-score 動的変数には便利な値が束縛されます。

さて、ダウンロードスコアの文法は通常のスコアファイルの文法と同じですが、例外として、実際に記事自身を調べる必要がある要素は禁止されています。つまり、以下のヘッダーのみがスコア付けできます: From、Subject、Date、Xref、 Lines、 Chars、 Message-ID、 References。

分類バッファー
.......

通常は全ての分類は分類バッファーから管理します。(グループバッファーから J c 命令によって) 初めてこれに入ったとき、初期設定の分類だけが表示されます。

以下の命令がこのバッファーで使用できます。

q
     グループバッファーに戻る (gnus-category-exit)。

k
     現在の分類を消去する (gnus-category-kill)。

c
     現在の分類を複製する (gnus-category-copy)。

a
     新しい分類を追加する (gnus-category-add)。

p
     現在の分類の述語を編集する (gnus-category-edit-predicate)。

g
     現在の分類に属するグループの一覧を編集する (gnus-category-edit-groups)。

s
     現在の分類のダウンロードスコア規則を編集する (gnus-category-edit-score)。

l
     全ての分類を表示する (gnus-category-list)。

分類変数
....

gnus-category-mode-hook
     分類バッファーで実行するフック。

gnus-category-line-format
     分類バッファーの行様式 (see Formatting Variables)。有効な要素は、

     c
          分類の名前。

     g
          分類に属するグループの数。

gnus-category-mode-line-format
     分類モード行の様式 (see Mode Line Formatting)。

gnus-agent-short-article
     この変数より少ない行数の記事は短い。初期設定値は 100。

gnus-agent-long-article
     この変数より多い行数の記事は長い。初期設定値は 200。

gnus-agent-low-score
     この値より小さいスコアを持つ記事は低スコアである。初期設定値は 0。

gnus-agent-high-score
     この値より大きいスコアを持つ記事は高スコアである。初期設定値は 0。

エージェント命令
--------

全ての gnus エージェント命令は J サブマップにあります。 J j (gnus-agent-toggle-plugged) 命令は全てのモードで動作し、gnus エージェントの切り離し/差し込み状態を切り替えます。

完全な一括取得を行うには、コマンド行から以下のおまじないを実行すればできます。

     $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch

グループエージェント命令
............

J u
     現在のグループの適格な記事を全て取得する (gnus-agent-fetch-groups)。

J c
     エージェント分類バッファーに入る (gnus-enter-category-buffer)。

J s
     全グループの適格な記事を全て取得する (gnus-agent-fetch-session)。

J S
     下書きグループにある送信可能なメッセージを全て送信する (gnus-group-send-session)。 See Drafts

J a
     現在のグループをエージェント分類に追加する (gnus-agent-add-group)。

概略エージェント命令
..........

J #
     記事にダウンロードするように印を付ける (gnus-agent-mark-article)。

J M-#
     記事からダウンロードする印を消去する (gnus-agent-unmark-article)。

@
     記事をダウンロードするかどうかを切り替える (gnus-agent-toggle-mark)。

J c
     ダウンロード印の無い記事を全て既読にする (gnus-agent-catchup)。

サーバーエージェント命令
............

J a
     現在のサーバーを、gnus エージェントで扱われるサーバーの一覧に追加する (gnus-agent-add-server)。

J r
     現在のサーバーを、gnus エージェントで扱われるサーバーの一覧から削除する (gnus-agent-remove-server)。

エージェント期限切れ消去
------------

nnagent は期限切れ消去を扱いません。その代わりに、特別な gnus-agent-expiry 命令が gnus-agent-expiry-days 日よりも古い既読記事を全て消去します。これはあなたがディスク容量を使い切りそうだと思ったときにいつでも実行することができます。これは特に速くもなく効率的でもなく、一旦始めてしまったら (C-g やその他で) 中断することもあまり良いことではありません。

gnus-agent-expire-all が nil でなければ、この命令は全ての記事 --- 未読、既読、可視、保留記事を消去します。もし nil (これが初期設定値) であれば、既読記事のみが消去の対象となり、未読、可視、保留記事はさらに無期限に保持します。

差出用メッセージ
--------

Gnus が切り離されているとき、全ての差出用メッセージ (メールとニュースの両方) は下書きグループ (see Drafts) に格納されます。投稿した後でも、ここでそのメッセージを見たり、編集したりするのは意のままです。

Gnus が再び差し込まれたとき、メッセージを送信するために、特別な命令を使って下書きグループから送ることも、グループバッファ内で J S を使って、下書きグループ内の全ての送信可能メッセージ送信することもできます。

エージェント変数
--------

gnus-agent-directory
     Gnus エージェントがファイルを格納する場所。初期設定値は ~/News/agent/。

gnus-agent-handle-level
     この変数の値より高いレベル (see Group Levels) のグループは、エージェントからは無視されます。初期設定値は gnus-level-subscribed で、これは初期設定では、購読しているグループのみがエージェントの処理の対象となるということです。

gnus-agent-plugged-hook
     ネットワークに接続されたときに実行されるフック。

gnus-agent-unplugged-hook
     ネットワークから切断されたときに実行されるフック。

設定例
---

もしあなたがこのマニュアルを読みたくなくて、ごく標準的な設定がされているとするなら、あなたの .gnus.el ファイルに以下のような設定をするところから始められるでしょう。

     ;;; Gnus がどのようにニュースを取得するかを定義する。ここでは
     ;;; ISP のサーバーから NNTP で取ってくることにする。
     (setq gnus-select-method '(nntp "nntp.your-isp.com"))

     ;;; Gnus がどのようにメールを読むかを定義する。ISP の POP サーバー
     ;;; からメールを読むことにする。
     (setenv "MAILHOST" "pop.your-isp.com")
     (setq nnmail-spool-file "po:username")

     ;;; Gnus がメールをどのように格納するかを指定する。nnml グループ
     ;;; を使う。
     (setq gnus-secondary-select-methods '((nnml "")))

     ;;; Gnus をオフラインニュースリーダーにする。
     (gnus-agentize)

基本的にはこれだけで良いはずです。これをあなたの ~/.gnus.el ファイルに入れて、あなたの要望に合わせて編集し、 PPP (や何か) を起動して、M-x gnus と打鍵してください。

あなたが初めて gnus を実行するしたときは、いくつかのニュースグループが初期設定として自動的に購読されます。おそらくもっとたくさんのグループを購読したくなるでしょうけど、そのためには、A A 命令で NNTP サーバーに全グループの一覧を問い合わせなければなりません。これは通常とても時間がかかりますが、一度だけしか実行する必要はありません。

しばらくの読み込みと解析の後に、グループの一覧を提示させられるでしょう。u 命令で読みたいグループを購読します。読みたいグループを全部購読したら、l で削除グループを全て画面から消去します。(A k で削除グループは全て戻ってきます。)

さて、ここでその場でグループを読むこともできますし、あるいは J s 命令で記事をダウンロードすることもできます。あとはこのマニュアルの残りを読んで、その他の何百億の項目からカスタマイズしたいことを見つけ出してください。

一括エージェント処理
----------

Gnus エージェントに記事を取得させるのは (そしてあなたの書いた何かのメッセージを投稿するのは)、一旦物事を正しく設定してしまえば非常に簡単です。以下のシェルスクリプトは必要なことを全てやってくれるでしょう。

     #!/bin/sh
     emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null

gnus-agent 環境を Control する
-------------------------

ここまで読んで来られて、エージェントが非常に便利な機能である事が分かったと思います。ただ、不満な点があるとすると、毎回 J j や J S 等をキーで作業しなければならないことでしょう。オンラインと同じような操作でやりとりできたら、と考えた事はありませんか? gnus-offline はその機能を提供します。(筆者の趣味で gnus-agent を使用する事を推奨します。MIEE については後述参照)

*Group* バッファで g を押す事で

      (Dialup の必要な環境では Dialup) ->
       Mail の取得 ->
       Spool に溜った message の送信 ->
       News の送信 ->
       不要な記事の expire

までを行います。

インストールはいたって簡単。(ここまでで gnus-agent の設定は終っていると仮定します) ~/.emacs の gnus-agent の設定のちょいと前に

     (load "gnus-ofsetup")
     (gnus-setup-for-offline)
     (load gnus-offline-setting-file)

といれ、Emacs を再起動してください。すると、さまざまな質問をされると思います。そこでは、あなたの環境にあった答えをしてください。質問が終ると、設定用のファイル ~/.gnus-offline.el が作成されます。ここに、必要な設定全てが書かれています。 Gnus の起動が終り、(多分 POP サーバーの password を聞かれると思いますが) *Group* バッファになったら、J j や J S 等の操作は必要ありません。 News/Mail を新規で取得したければ、*Group* バッファで g を押すだけです。

MIEE = Message Intercepting and Entrusting Emacs library. Message を横取りして、offline で post/send するための汎用ライブラリです。

この MIEE を使うと gnus-offline を用いてnnspool もコントロールする事ができます(ここでは述べませんが…)。 (もちろん gnus-agent + MIEE という組合せも可能です) MIEE は http://www.shiojiri.ne.jp/%7Et-ichi/lisp/miee.el から取って来る事ができます。 gnus-setup-for-offline で設定した場合には、MIEE の設定はいっさいしなくてもかまいません。

gnus-offline-articles-to-fetch
     この変数は取得する記事の種類を指定します。 'mail の場合は、Mail だけを取得します。 'news の場合は、News だけを取得します。 'both の場合は、Mail/News 両方を取得します。

gnus-offline-load-hook
     この変数は gnus-offline が load される前に評価される hook です。

gnus-offline-before-online-hook
     この変数は Gnus が Online(Plugged) 状態になる直前に評価される hook です。

gnus-offline-after-online-hook
     この変数は Gnus が Offline(UnPlugged) 状態になった後に評価される hook です。

gnus-offline-interval-time
     この変数で指定された間隔(秒数)でgnus-offline-articles-to-fetch で指定された article を取得します。動作にはgnus-daemon を使用しています。

gnus-offline-dialup-function
     この変数で指定された関数が dialup 時に実行され、Dialup しサーバーに接続します。

gnus-offline-hangup-function
     この変数で指定された関数が hangup 時に実行され、サーバーとの回線を切断します。

スコア
***

他の人々は 削除ファイル を使いますが、ここ gnus タワーは削除よりもスコアの方を好みますので、他と格闘するよりは切り替える事にしました。それらは完全に違う事をしますので、真っ直ぐに座って注意を払ってください！

全ての記事はスコアの初期値を持っており (gnus-summary-default-score)、これはディフォルトで 0 です。このスコアは対話的や、スコアファイル (score file) の方法により、上げられたり下げられたりします。gnus-summary-bark-below よりも低いスコアの記事には既読の印が付きます。

Gnus は概略バッファを作成する前に、現在のグループに適用されるどんなスコアファイル も読み込みます。

現在の記事に基づいてスコアの登録を挿入するいくつかの命令が概略バッファにあります。例えば、gnus に特定の表題の記事のスコアを下げたり上げたりするように求める事ができます。

2種類のスコア登録があります: 永続と一時的です。一時的スコア登録は自分自身で期限がくると削除する登録です。例えば、1週間以上使われていないどんな登録も、スコアファイルの大きさを小さくするために、静かに削除されます。

概略スコア命令
=======

スコア登録を変更するスコア命令は実際に本当のスコアファイルを修正するわけではありません。それはあまりに非効率です。Gnus は以前にロードされたスコアファイルのキャッシュを保持しており、その一つは 現在のスコアファイル連想リスト (current score file alist) と考えられています。スコア命令は単純にこのリストに登録を挿入して、グループから出ると、このリストは保存されます。

現在 (current) のスコアファイルは、実際にそのようなスコアファイルが存在していない場合でも、初期設定でグループのローカルスコアファイルになっています。スコア命令を何か他のスコアファイル (例、all.SCORE) に挿入したいなら、まずこのスコアファイルを現在のものにしなければなりません。

一般的なスコア命令は実際にはスコアファイルを変更しません:

V s
     現在の記事のスコアを設定します (gnus-summary-set-score)。

V S
     現在の記事のスコアを表示します (gnus-summary-current-score)。

V t
     現在の記事に使われている全てのスコア法則 (score rule) を表示します (gnus-score-find-trace)。

V R
     現在の概略でスコア過程を実行します (gnus-summay-rescore)。これは gnus の後ろでいろいろとスコアファイルで遊んで、それの効果を見たいときに役立つかもしれません。

V c
     違ったスコアファイルを現在のものにします (gnus-score-change-score-file)。

V e
     現在のスコアファイルを編集します (gnus-score-edit-current-scores)。 gnus-score-mode バッファに移動する事になるでしょう (see Score File Editing)。

V f
     スコアファイルを編集して、このスコアファイルを現在のものにします (gnus-score-edit-file)。

V F
     現在のスコアキャッシュを書き込みます (gnus-score-flush-cache)。これはスコアファイルを編集した後に役に立ちます。

V C
     視覚的で嬉しい方法でスコアファイルをカスタマイズします (gnus-score-customize)。

これらの命令の残りはローカルスコアファイルを修正します。

V m
     スコアの入力を促進し、それよりも低いスコアの全ての記事に既読の印を付けます (gnus-score-set-mark-below)。

V x
     スコアの入力を促進し、そのスコアより低い全ての記事を削除するためのスコア法則を現在のスコアファイルに付け加えます (gnus-score-set-expunge-below)。

実際にスコア登録をするためのキー打ち込みは非常に規則正しい法則に従いますので、それらの命令全てを表に上げる必要はありません。(たーくさんあります。)

 1. 最初のキーはスコアを増やすための I (i の大文字) か、スコアを下げるための L です。

 2. 2番目のキーはどのヘッダーにスコアをしたいかを表します。以下のキーが使用可能です:

     a
          著者 (author) の名前にスコアを付けます。

     s
          表題 (subject) の行にスコアを付けます。

     x
          Xref 行にスコアを付けます---すなわち、相互投稿行です。

     r
          References 行にスコアをつけます。

     d
          日付 (date) にスコアを付けます。

     l
          行数 (number of lines) にスコアを付けます。

     i
          Messsage-ID にスコアを付けます。

     f
          フォローアップ (followup) にスコアを付けます。

     b
          本体 (body) にスコアを付けます。

     h
          ヘッダー (head) にスコアを付けます。

     t
          スレッドにスコアを付けます。

 3. 3番目のキーは合致する型です。どの合致の型が有効かはどのヘッダーにスコアを付けようとしているかに依ります。

     文字列 (strings)

          e
               正確な (exact) 合致です。

          s
               文字列の一部の (substring) 合致です。

          f
               あいまいな (fuzzy) 合致です (see Fuzzy Matching)。

          r
               正規表現 (regexp) の合致です。

     日付 (date)

          b
               日付の前 (before) です。

          a
               日付の後 (after) です。

          n
               その日付です。

     数字 (number)

          <
               数字より小さいものです。

          =
               数字と等しいものです。

          >
               数字より大きいものです。

 4. 4つめで、最後のキーはこれが一時的 (すなわち、期限切れ消去) のスコア登録か、永続的な (すなわち、期限切れ消去でない) スコア登録であるかということ、もしくはすぐになされるべきか、スコアファイルに追加する事はしないかという事を指定します。

     t
          一時的な (temporary) スコア登録です。

     p
          永続的な (permanent) スコア登録です。

     i
          即座の (immediate) スコア付けです。

ですから、現在の著者に正確な合致で永続的にスコアを増やしたいとしましょう: I a e p。表題に基づいてスコアを下げたくて、文字列の部分の合致を使い、一時的なスコア登録をしたいのであれば: L s s t。非常に簡単です。

物事を複雑にするのは、短縮打鍵が存在するからです。2番目か3番目の文字に大文字を使うと、gnus は残る1つか2つの打鍵に初期値を使います。初期値は ``文字列の一部'' と ``一時的'' です。ですから、I A は I a s t と同じで、I a R は I a r t と同じです。

これらの関数は数字接頭引数と、シンボル接頭引数を受け付けます (see Symbolic Prefixes)。数字接頭引数はどのくらい記事のスコアを下げる (もしくは上げる) かを指定します。シンボル接頭引数 a は命令が現在のスコアファイルではなくファイル all.SCORE を使う事を指定します。

gnus-score-mimic-keymap はこれらの命令がキーマップであるかのように振る舞うかどうかを指定します。

グループスコア命令
=========

残念ながら、まだたくさんはありません。

W f
     Gnus は何度もスコア連想リストを読み込むのを避けるために、それのキャッシュを保持しています。この命令はキャッシュを書き出します (gnus-score-flush-cache)。

以下のような事をする事によって、コマンド行からスコア付けをする事ができます。

     & emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score

スコア変数
=====

gnus-use-scoring
     nil であれば、gnus はスコアファイルを調べず、一般的に、スコア関連の仕事を全くしません。これは初期設定で t です。

gnus-kill-killed
     この変数が nil であれば、gnus は既に削除過程を実行された記事に決してスコアファイルを適用しません。これはたくさんの時間を節約するでしょうが、もし削除ファイルをグループに適用しているときに、削除ファイルを変更し、もっと多くの記事を削除するためにそれを再実行しても、それは動作しないという事になります。それをするためにはこの変数を t に実行しなければなりません。 (これは初期設定で t です。)

gnus-kill-files-directory
     全ての削除とスコアのファイルはこのディレクトリーに蓄積され、それは初期設定で環境変数 SAVEDIR によって初期化されます。これは初期設定で ~/News/ です。

gnus-score-file-suffix
     スコアファイルにたどり着くためにグループ名に加える接尾語です (初期値で SCORE です。)

gnus-score-uncacheable-files
     全てのスコアファイルは普通はスコアファイルの過剰読み込みを避けるためにキャッシュされます。しかし、これによりあなたの Emacs が大きく肥大化するのであれば、再び必要とされないようなスコアファイルを除去するためにこの正規表現を使う事ができます。all.SCORE のキャッシュを止めるのは悪い考えですが、comp.infosystems.www.authoring.misc.ADAPT をキャッシュしないのは良い考えでしょう。実際のところ、この変数は初期設定で ADAPT$ で、適応スコアファイルはキャッシュされません。

gnus-save-score
     もし本当に複雑なスコアファイルを持っていて、たくさんの一括スコアをするのであれば、この変数を t に設定すると良いかもしれません。これは gnus にスコアを .newsrc.eld ファイルに保存するようにさせます。

gnus-score-interactive-default-score
     全ての対話的スコア上げ/下げ命令によって使われる上げ/下げするスコアです。ディフォルトは1000で、過剰だと思うかもしれませんが、これは適応スコア付けをする余地の存在する事を確実にするためです。手で登録されたデータを適応スコアでの小さな変更で上書きされたくはありません。

gnus-summary-default-score
     記事のスコアの初期値で、初期設定では0になっています。

gnus-summary-expunge-below
     この変数より低いスコアを持つ記事は概略の行に表示されません。これは初期設定で nil で、これはどの記事も隠されないという事です。この変数は各概略バッファに固有で、gnus-summary-mode-hook によって設定されるべきです。

gnus-score-over-mark
     初期設定のスコアより大きなスコアを持つ記事に対して (3桁目に) 使われる印です。初期設定は + です。

gnus-score-below-mark
     初期設定のスコアより小さなスコアを持つ記事に対して (3桁目に) 使われる印です。初期設定は - です。

gnus-score-find-score-files-function
     現在のグループのスコアファイルを見つけるために使われる関数です。この関数はグループ名を引数として呼ばれます。

     使用可能な既定関数は:

     gnus-score-find-single
          グループ自身のスコアファイルだけを適用します。

     gnus-score-find-bnews
          bnews 構文を使って、全ての合致するスコアファイルを適用します。これが初期設定です。例えば、現在のグループが gnu.emacs.gnus ならば、 gnu.all.SCORE、not.alt.SCORE と gnu.all.SCORE がすべて適用されます。要するに、スコアファイル名の all が .* に変換され、それから正規表現の合致がなされます。

          これは、全てのグループに適用したいスコア登録がいくつかある場合は、それらの登録を all.SCORE ファイルに入れるということです。

          Gnus は一般的なスコアファイルを特定のスコアファイル向けのものより前に適用しようと試みますが、スコアファイルはほとんど無作為の順番で適用されます。これはスコアファイル名の要素の数を調べる事によってなされます--- all 要素を取り除いて。

     gnus-score-find-hierarchical
          全ての親グループからの全てのスコアファイルを適用します。これは all.SCORE のようなスコアファイルを持つ事はできないけれど、 SCORE、comp.SCORE と comp.emacs.SCORE を持つ事ができるという事です。

     この変数は関数のリストである事もできます。その場合は、これらの全ての関数が呼ばれ、スコアファイルの返された全てのリストが適用されます。これらの関数は直接スコア連想リストのリストを返す事もできます。その場合は、それらのファイルでないスコア連想リストを返す関数は、返される最後のスコアファイルがローカルスコアファイルである事を確実にするために、おそらく ``本当の'' スコアファイル関数よりも前に置かれるべきでしょう。ふぅ。

gnus-score-expiry-days
     この変数は使われていないスコアファイル登録が期限切れ削除されるまでどのくらいの日が経つべきかを指定します。この変数が nil であると、スコアファイル登録は削除されません。初期値は7です。

gnus-update-score-entry-dates
     この変数が nil でないと、合致するスコア登録は日付が更新されます。 (これは gnus が期限切れ消去を操作している方法です---全ての合致しない登録は古くなりすぎ、合致する登録を新鮮で若いままです。) しかし、この変数を nil に設定すると、合致する登録でさえも古くなり、あの嫌な死神と直面する事になるでしょう。

gnus-score-after-write-file-function
     そこでちょうど書かれたスコアファイルの名前と共に呼ばれる関数です。

gnus-score-thread-simplify
     この変数が nil でないと、記事表題はスレッドと同じ方法で表題スコアのために単純化されます---現在の gnus-simplify-subject-functions の値によって。スコア登録が 文字列部分 か 正確な 合致を使っていると、合致もこの方法で単純化されます。

スコアファイル様式
=========

スコアファイルは普通は単純な様式のものだけを含む emacs-lisp ファイルです。無頓着な利用者はこれを編集しないでください。全ては概略バッファから変更されるでしょう。

とにかく、それを自分でいじってみたくなったのなら、例があります:

     (("from"
       ("Lars Ingebrigtsen" -10000)
       ("Per Abrahamsen")
       ("larsi\\|lmi" -50000 nil R))
      ("subject"
       ("Ding is Badd" nil 728373))
      ("xref"
       ("alt.politics" -1000 728372 s))
      ("lines"
       (2 -100 nil <))
      (mark 0)
      (expunge -1000)
      (mark-and-expunge -10)
      (read-only nil)
      (orphan -10)
      (adapt t)
      (files "/hom/larsi/News/gnu.SCORE")
      (exclude-files "all.SCORE")
      (local (gnus-newsgroup-auto-expire t)
             (gnus-summary-make-false-root empty))
      (eval (ding)))

この例はたいていのスコアファイルの要素を説明しています。違った方法については、see Advanced Scoring を見てください。

これは lisp コードのように見えますが、実際はここにあるものは何も評価 (eval) されません。しかし、lisp リーダーがこの様式を読み込むのに使われますので、意味的に有効でないとしても、文法的には有効です。

この連想リストでは6つのキーを使う事ができます。

文字列 (STRING)
     もしキーが文字列であると、それは合致が実行されるヘッダーの名前です。スコアはこれらの8つのヘッダーだけに実行されます: From、Subject、 References、Message-ID、Xref、Lines、 Chars、Date です。これらのヘッダーに加えて、gnus に記事全体を取得して,記事のより大きな部分で合致を行うようにする3つの文字列があります: Body は記事の本体 (Body) で合致を実行し、Head は記事のヘッダー (Head) で合致を実行し、All は記事全体で合致を実行します。最後のこれらの3つのキーを使う事はグループに入るときに速度を かなり 遅くする事に気を付けてください。スコアを付ける事のできる最後の ``ヘッダー'' は Followup です。これらのスコア登録はそれに合致する記事への全てのフォローアップのための新しいスコア登録が付け加えられる事になります。

     このキーに続くのは任意の数のスコア登録で、それぞれのスコア登録は1つから4 つまでの要素を持ちます。

      1. 最初の要素は 合致要素 です。たいていのヘッダーではこれは文字列ですが、Lines と Chars ヘッダーではこれは整数でなければなりません。

      2. もし2番目の要素が存在するなら、それは数字であるべきです---スコア要素。この数字は負の無限大から正の無限大までの間の整数であるべきです。もし合致が成功すれば、この数字が記事のスコアに加えられます。もしこの要素が存在していなければ、数字 gnus-score-interactive-default-score が代わりに使われます。これは初期設定で1000です。

      3. もし3番目の要素が存在していると、それは数字であるべきです---日付要素 です。この日付は最後にこのスコア登録が合致した時刻を示し、これはスコア登録の期限切れ消去機構の機能のために使われます。この要素が存在していなければ、スコア登録は永続します。日付は紀元前1年12月31日から経過した日にちの数で表されます。

      4. もし4番目の要素が存在していると、それはシンボルであるべきです---型要素 です。この要素はこのスコア登録が記事に合致するかどうかを調べるのにどの関数が使われるべきであるかを指定します。

          From, Subject, References, Xref, Message-ID
               たいていのヘッダーの型に対して、r と R (正規表現) (regexp) や、s と S (文字列の一部) (substring) 型、e と E (正確な合致) (exact match)、w (語の合致) (word match) 型が存在します。もしこの要素が存在しないと、gnus は文字列の一部の合致が用いられるべきであるとみなします。R、S、E は合致が大文字と小文字を区別する方法で行われるという点で他のものと異なります。全てのこれらの一文字型は本当は regexp、exact、word 型の短縮形で、もしそうしたいと思えばこちらを代わりに使う事ができます。

          Lines, Chars
               これらの2つのヘッダーは違った合致の型を使います: <、>、 =、>=、<= です。

               これらの述語はもし

                    (PREDICATE HEADER MATCH)

               の評価が nil でないと、真となります。例えば、上級合致 ("lines" 4 <) (see Advanced Scoring) は結果として以下の式になります。

                    (< header-value 4)

               もしくは他の方法にしましょう: < を Lines で 4 を合致として使っているときは、記事が4行よりも少ないときにスコアが追加されます。(混乱して、反対ではないかと考え易いです。でも、そうではないのです。私が思うに。)

               合致が Lines でなされていると、いくつかのバックエンド (nndirのようなもの) は Lines ヘッダーを作成しないために全ての記事が 0 行であるとして扱われる事に気を付けてください。これはもし少しの行しかない記事のスコアを下げているのなら、変な結果が起こり得る事になります。

          Date
               Date (日付) ヘッダーには3つのなんとなくばかげている合致の型があります: before、at、after です。私は本当にこれが役立つような機会を想像できないのですが、この関数を提供しないのもなんとなくばかげています。そうした場合のためにあるのです。いつ必要になるかは誰にもわかりません。転ばぬ先の杖です。一度焼けると2度恥ずかしい、です。本をカバーで判断しては行けません。最初の日に性行為を行っていは行けません。 (しかし、私は少なくとも一人、引用しますが、``この関数は欠かせないものである事がわかった'' と言った人が入ると聞いています。)

               もっと役立つ合致の型は 正規表現 です。それによって日付文字列に正規表現を用いて合致させる事ができます。日付はまず ISO8601 短縮様式 (compact format) に標準化されます---YYYYMMDDTHHMMSS です。例えば、もし全ての年の4月1日に投稿された全ての記事にが治させたいのであれば、....0401......... を合致文字列として使う事ができます。 (日付は元々の標準時で保存されていますので、その記事が投稿されたところで4 月1日に投稿された記事に合致する事に注意してください。標準時は一家にとって非常に有益な楽しみでしょう？)

          Head, Body All
               これらの3つの合致のキーは From ヘッダー (など) と同じ合致の型を使います。

          Followup
               この合致のキーは少し特別で、それは From ヘッダーに合致し、合致した記事だけでなくその記事への全てのフォローアップのスコアにも影響します。これはたとえば、あなた自身の記事へのフォローアップのスコアを増やしたり、良く知られた問題児へのフォローアップ記事のスコアを下げたりするのに使われます。From ヘッダーが使うのと同じ型の合致を使います。 (この合致キーを使うと、ファイル ADAPT を作る事になります。)

          Thread
               この合致キーは Followup 合致キーと同じ行に動作します。 Message-ID X で始まっている (副)スレッドにスコアを付けたいのであれば、thread 合致を付け加えます。これは Reference ヘッダーに X を持つそれぞれの記事に新しい thread 合致を追加します。 (これらの新しい thread 合致はこれらの合致する記事の Message-ID を使います。) これはスレッドのいくつかの記事が完全な References ヘッダーを持っていなかったとしても、スレッド全体のスコアを上げ/下げできる事を保証します。これを使うと、スレッドの記事に決定的でないスコアが付くかもしれないということに注意してください。 (この合致キーを使うと、ファイル ADAPT を作る事になります。)

mark
     この登録の値は数字であるべきです。この数字より低いスコアの記事には既読の印が付きます。

expunge
     この登録の値は数字であるべきです。この数字より低いスコアの記事は概略バッファから削除されます。

mark-and-expunge
     この登録の値は数字であるべきです。この数字より低いスコアの記事には既読の印が付き、概略バッファから削除されます。

thread-mark-and-expunge
     この登録の値は数字であるべきです。スコアの総計がこの数字より低いスレッドには既読の印が付き、概略バッファから削除されます。 gnus-thread-score-function はスレッドのスコアの総計をどのように計算するかを指定します。

files
     この登録の値は任意の数のファイル名であるべきです。これらのファイルもスコアファイルであるとみなされ、これがされたのと同じような方法で読み込まれます。

exclude-files
     この登録の手がかりは任意の数のファイル名であるべきです。これらのファイルは何らかの理由で普通は読み込まれるようになっていたとしても、読み込まれません。

eval
     この登録の値は 評価 されます。この要素は全体的スコアファイルを扱っているときは無視されます。

read-only
     読み込み専用スコアファイルは更新されたり保存されたりしません。全体的スコアファイルはこのアトムを使用するべきです (see Global Score Files)。 (注意: 全体的 はここでは本当に 全体的 という意味です。個人的な全てのグループに適用するスコアファイルの事ではありません。)

orphan
     この登録の値は数字であるべきです。親記事を持たない記事はスコアにこの数字が加えられます。comp.lang.c のような量の多いニュースグループを追いかけているとしてください。おそらく2,3のスレッドと新しいスレッドだけを追いたいでしょう。

     以下の2つのスコアファイル登録によってそれをする事ができます:

                  (orphan -500)
                  (mark-and-expunge -100)

     最初にこのグループに入ったときは、新しいスレッドだけを見ます。それからおもしろいと思ったスレッドのスコアを上げ (I T もしくは I S によって)、残りを無視 (C y) します。次にグループに入ったときは、おもしろいスレッドの新しい記事と全く新しいスレッドを見る事になります。

     すなわち---orphan (孤児) スコアアトムは普通のスコア法則では発見できない興味深いスレッドが少し存在しする量の多いグループのためにあります。

adapt
     この登録は適応スコアを制御します。もしこれが t であると、初期設定の適応スコア法則が使われます。もしこれが ignore であると、このグループには適応スコアは実行されません。もしリストであると、そのリストは適応スコア法則として用いられます。もしそれが存在しないか、t や ignore でない他のものであれば、初期設定の適応スコア法則が使われます。たいていのグループに適応スコアを使いたいのであれば、 gnus-use-adaptive-scorint を t に設定し、(adapt ignore) を適応スコアをしたくないグループに挿入するでしょう。少しのグループでだけ適応スコアを行いたいのであれば、gnus-use-adaptive-scoring を nil に設定し、(adaptive t) をそれを行いたいグループのスコアファイルに挿入するでしょう。

adaptive-file
     全ての適応スコア登録はこの登録によって名づけられたファイルに入ります。それはグループに入るときにも適用されます。このアトムは多くのグループに同じ適応スコアファイルを用いる事によって、複数のグループに一度に適応スコアを付けたいときに便利でしょう。

local
     この登録の値は (VAR VALUE) 対のリストであるべきです。それぞれの VAR は現在の概略バッファのバッファ固有になり、指定された値 (value) に設定されます。これは便利な、もし少し変だとしても、フックをあまり好まないいくつかのグループで変数を設定する方法です。VALUE は評価されない事に注意してください。

スコアファイル編集
=========

普通は全てのスコア命令を概略バッファから発行しますが、手でそれらを編集したい気に駆られるかもしれませんので、それのためのモードを提供しています。

それは単純に少しカスタマイズされた emacs-lisp モードで、以下の追加の命令が存在します:

C-c C-c
     あなたが行った変更を保存して概略バッファに戻ります (gnus-score-edit-done)。

C-c C-d
     現在の日付を数字様式で挿入します (gnus-score-edit-insert-date)。もしこれがどのようなものであろうと考えているのであれば、これは本当に日の数字です。

C-c C-p
     適応スコアファイルは整えられていない流儀で保存されます。もしこれらのファイルの内の一つを読みたいと思っているのであれば、まず 素敵な表示 をしたいでしょう。この命令 (gnus-score-pretty-print) があなたのためにそれをします。

このモードを使うためには M-x gnus-score-mode と打ってください。

gnus-score-menu-hook がスコアモードバッファで実行されます。

概略バッファでは、V f や V e のような命令でスコアファイルの編集を始める事ができます。

適応性スコア
======

これらのスコア付けはあなたを憂鬱にさせてしまうかもしれないので、 gnus にはこれらを全て自動的に --- まるで魔法でも使ったように作成する方法があります。いやむしろ、人工無能によって、という方が正確かな。

記事を読んだとき、あるいは記事に既読の印をつけたとき、記事を削除したときに、その印を残しておいてください。グループから出るときに gnus は、それらの印の辺りを嗅ぎ回り、何の印を見つけたかに依存してスコア要素を追加します。この機能は gnus-use-adaptive-scoring を t か (line) に設定することで有効になります。もしスコアを、表題に現れる個別の単語をもとに適応させたければ、この変数を (word) に設定してください。両方の適応方法を使いたければ、この変数を(word line) に設定してください。

gnus-default-adaptive-score-alist 変数をカスタマイズすることで、スコア付けの処理を完全に制御できます。例えば、このような感じになります。

     (defvar gnus-default-adaptive-score-alist
       '((gnus-unread-mark)
         (gnus-ticked-mark (from 4))
         (gnus-dormant-mark (from 5))
         (gnus-del-mark (from -4) (subject -1))
         (gnus-read-mark (from 4) (subject 2))
         (gnus-expirable-mark (from -1) (subject -1))
         (gnus-killed-mark (from -1) (subject -3))
         (gnus-kill-file-mark)
         (gnus-ancient-mark)
         (gnus-low-score-mark)
         (gnus-catchup-mark (from -1) (subject -1))))

見てお分かりのように、この連想リストの各要素は、キーとして印 (変数名かもしくは ``本当の'' 印 --- つまり文字)を持ちます。このキーの後には任意の数のヘッダー/スコアの組が続きます。もしそのキーの後にヘッダー/スコアの組が一つもなければ、そのキーが記事の印としてついている記事に対しては適応性スコアは実行されません。例えば上記の例では、gnus-unread-mark がついている記事は適応性スコアの登録項目にはなりません。

各記事はただ一つの印しか持ち得ないので、それぞれの記事にはこれらの規則のうちただ一つしか適用されません。

gnus-del-mark を例に取りましょう --- この連想リストでの意味は、この印 (すなわち D の印)がついている記事は全て、 From ヘッダーをもとに -4 下げられ Subject で -1 下げられるスコア登録が追加されます。これをあなたの偏見に合わせて変更してください。

もし 10 個の記事に同じ subject で gnus-del-mark の印がついていたとすると、この印に対する規則は十回適用されます。それはつまり、その subject は -1 の十倍のスコアを得ます。その値は、私が大きく誤解していないかぎり、-10 のはずです。

もし自動期限切れ消去 (メール) グループ (see Expiring Mail) があれば、既読記事には全て E 印がつけられます。これはおそらく、適応性スコア付けをちょっとばかり不可能にするので、自動期限切れ消去と適応性スコアは一緒にはうまくやっていけません。

スコアをつけられるヘッダーには from、 subject、 message-id、 references、 xref、 lines、chars、date があります。さらに followup にもスコア付けできます。これは現在の記事の Message-ID を使用して References ヘッダーにマッチ、すなわちこれに続いたスレッドにマッチする適応性スコア登録を作成します。

また thread にもスコア付けすることができます。これはスレッド中の全ての記事にスコア付けしようとします。thread のマッチは、Message-ID を使って記事の References ヘッダーにマッチさせます。マッチが起こったらその記事の Message-ID が thread 規則に追加されます。(ちょっと考えてみてください。後で頭痛薬を二粒お勧めしときますが)

この機構を使うならば、ときどき記事を既読にしてしまう小さな変更を避けるために、スコアファイルの mark アトムを何か小さい値 --- ことによれば -300 くらいに設定しておいた方が良いです。

適応性スコアを一週間かそこら使ってくると、gnus はそれ相応に調教され、あなたが何も言わなくても、あなたの好きな投稿者を強調し、あまり好きではない投稿者を消去するようになるはずです。

どのグループにおいて適応性スコアを作動させるかは、スコアファイル (see Score File Format) を使うことによって制御できます。またこれを使って、違ったグループに対して違った規則を使うようにもできます。

適応性スコア登録項目は、グループ名に gnus-adaptive-file-suffix を付加した名前のファイルに入れられます。初期設定値は ADAPT です。

適応性スコアを行うときは、部分文字列一致やファジーな一致を行った方が、おそらくほとんどの場合において良い結果が得られるでしょう。しかし、ヘッダーの一致した部分が短い場合、意図に反するような動作をする可能性が大きくなるので、 gnus-score-exact-adapt-limit より短い長さしか一致しない場合は完全一致が行われます。この変数が nil であれば、この問題が起こらないように常に完全一致が行われます。

上で述べたように、個別の単語に対してもヘッダー全体に対しても適応を行うことができます。単語に対して適応を行った場合、 gnus-default-adaptive-word-score-alist 変数によって、各単語に対してある印へどんなスコアを与えるかを指定します。

     (setq gnus-default-adaptive-word-score-alist
           `((,gnus-read-mark . 30)
             (,gnus-catchup-mark . -10)
             (,gnus-killed-mark . -20)
             (,gnus-del-mark . -15)))

これが初期設定値です。単語に対する適応を有効にすると、 gnus-read-mark の印のついた記事の表題に現れる全ての単語が、スコアに 30 点追加するというスコア規則を生み出します。

gnus-default-ignored-adaptive-words のリストに現れる単語は無視されます。無視したい単語を追加したいときは、この変数ではなく gnus-ignored-adaptive-words リストの方を使ってください。

スコア付けが終了したとき、gnus-adaptive-word-syntax-table の文法表がその影響を受けます。これは標準の文法表と似ていますが、単語の構成要素とならない文字の数も考慮します。

もし gnus-adaptive-word-minimum に数字が設定されていると、単語適応性スコア付け処理において、記事のスコアがこの数字よりも小さくなることはありません。初期設定値は nil です。

この機構をしばらく使ってみた後には、あなたがどんな単語が好きでどんな単語が嫌いかを、この規則を通して診断する利用者精神分析命令 gnus-psychoanalyze-user を書いてみると良いかもしれません。いや、良くないかな。

単語適応性スコア付けは非常に実験的なものであって、今後変更されるであろうということは心に留めておいてください。第一印象では、これは現状では全く使い物にならないように思えます。これをもっと使えるようにするためには、(より厳密な統計的手法を巻き添えにして) さらなる作業が必要となるでしょう。

ホームスコアファイル
==========

新しいスコアファイル登録項目が入れられるスコアファイルは、ホームスコアファイル home score file と呼ばれます。これは通常 (初期設定で) そのグループ用のスコアファイルになります。例えば、 gnu.emacs.gnus 用のホームスコアファイルは gnu.emacs.gnus.SCORE となるわけです。

しかしながら、これはあなたのお望みではないかもしれません。たくさんのグループ間で共通のホームスコアファイルを共有すると便利なときが多いでしょう --- 例えば全ての emacs グループで同じホームスコアファイルを使うこともできます。

これを制御する変数が gnus-home-score-file です。これは以下の値を取り得ます。

 1. 文字列。この場合このファイルが全てのグループでホームスコアファイルとして使用されます。

 2. 関数。この関数の結果がホームスコアファイルとして使用されます。この関数はグループの名前を引数として呼び出されます。

 3. リスト。このリストの要素は以下の値を取り得ます。

      1. (REGEXP FILE-NAME)。REGEXP がグループ名にマッチすれば、FILE-NAME がホームスコアファイルとして使用されます。

      2. 関数。この関数が nil 以外を返せば、その返却値がホームスコアファイルとして使用されます。

      3. 文字列。 この文字列をホームスコアファイルとして使用します。

     このリストの中からマッチするものを、最初から後ろの方に向かって探していきます。

というわけで、単に一個のスコアファイルを使いたい場合は、以下のようにすればできます。

     (setq gnus-home-score-file
           "my-total-score-file.SCORE")

もし全 gnu グループに対して gnu.SCORE を、全 rec グループに対して rec.SCORE (等々) を使いたければ、このようにできます。

     (setq gnus-home-score-file
           'gnus-hierarchial-home-score-file)

これは便利なようにあらかじめ提供されている関数です。多の関数は以下の以下のものを含みます

gnus-current-home-scre-file
     ``現在の'' 標準スコアファイルを返します。これはスコア命令にスコアファイルの ``最内部'' 合致への登録を加えるようにします。

もし emacs グループ用のスコアファイルと、それとは別の comp グループ用のスコアファイルを使い、他の全部のグループではそれぞれ独自のスコアファイルを使いたいのであれば、

     (setq gnus-home-score-file
           ;; All groups that match the regexp "\\.emacs"
           '(("\\.emacs" "emacs.SCORE")
             ;; All the comp groups in one score file
             ("^comp" "comp.SCORE")))

gnus-home-adapt-file は gnus-home-score-file と全く同じように動作しますが、これは代わりに何をホーム適用スコアファイルにするかを指定します。新しい適用ファイル登録項目は全て、この変数で指定されるファイルに入れられます。値には同じ文法が許されます。

gnus-home-score-file と gnus-home-adapt-file の使用に加えて、グループパラメータ (see Group Parameters) とトピックパラメータ (see Topic Parameters) を使ってほぼ同様のことができます。グループ、トピックパラメータはこの変数よりも優先されます。

自分自身へのフォローアップ
=============

Gnus は現在のバッファーから Message-ID ヘッダーを見つけ出すために二つの命令を提供しています。 そして gnus は、他の記事におけるReferences ヘッダー中にこの Message-ID を使っている得点を、スコア規則として追加します。これは実質的に、その記事へ返答した記事で、現在のバッファーにあるもの全てに対してスコアを増加させます。これはあなたの言ったことに対してみんなが答えてくれたとき、すぐにそれに目を向けたいときにとても便利ですね。

gnus-score-followup-article
     これはあなた自身の記事に直接フォローアップした記事にスコアを加算します。

gnus-score-followup-thread
     これはあなたの記事より ``下'' のスレッドに現れる記事全てに対してスコアを加算します。

これら二つの関数は、基本的にはどちらも message-sent-hook のようなフックの中で使うためのものです。

あなたの自分の Message-ID をじっくりと眺めてみると、はじめの二、三文字は常に同じであることに気がつくでしょう。以下の二つは私のものです。

     <x6u3u47icf.fsf@eyesore.no>
     <x6sp9o7ibw.fsf@eyesore.no>

つまりこのマシン上での ``私の'' の識別は x6 であるということです。これは使えます --- 以下の規則は私自身へのフォローアップ全てに対してスコアを増加させるでしょう。

     ("references"
      ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@.*eyesore.no>"
       1000 nil r))

``あなたの'' が最初の二文字になるか最初の三文字になるかはシステムに依存します。

スコア付けの奥義
========

クロスポスト
     クロスポストのスコアを低くしたければ、マッチさせるべき行は Xref ヘッダーです。

          ("xref" (" talk.politics.misc:" -1000))

複数のクロスポスト
     ある数、例えば 3 つ以上のグループにクロスポストされている記事のスコアを低くしたければ、

          ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))

本文へのマッチ
     これは一般的にはあまり良い考えではありません --- それはとても長時間かかってしまうからです。実際 gnus は、それぞれの記事を個別にサーバーから取得してこなければならないのです。でも、あなたはそれでもやりたいかも知れませんね。マッチさせるキーは三つ (Head、Body、 All) あるのですが、スコアファイル毎に一つ選んでそれに固定した方が良いです。もし二つを使うと、それぞれの記事は 二回 取得されてしまいます。もし Head からちょっとだけ、Body からちょっとだけマッチさせたい、というのであれば、素直に All を使って全部マッチさせてください。

既読の印付け
     ある一定数字以下のスコアを持つ記事には、おそらく既読の印をつけてしまいたくなるでしょう。これは all.SCORE ファイルに以下のものを入れておくことによって最も簡単に実現できます。

          ((mark -100))

     expunge を使って同様のことを考えることもできます。

否定文字クラス
     もし [^abcd]* みたいなものを指定すると、たぶん期待通りの結果は得られないでしょう。これは改行文字にもマッチしてしまい、えーと、未知の世界まで続くかもしれません。代わりに[^abcd\n]* を使ってください。

逆スコア
====

もし、表題ヘッダーに Sex with Emacs という文字がある記事だけを残して、その他の記事全てを消去してしまいたければ、スコアファイルに以下のようなものを入れることもできます。

     (("subject"
       ("Sex with Emacs" 2))
      (mark 1)
      (expunge 1))

そして Sex with Emacs にマッチする全ての記事を集めて、残りを蹴飛ばすために既読の印をつけ、消去します。

グローバルスコアファイル
============

間違いなく、他のニュースリーダーは ``グローバル削除ファイル (global kill file)'' を持っています。これは普通、全てのグループに適用される、ユーザーのホームディレクトリーに格納されている一つの削除ファイル以上の何物でもありません。はん! ちっぽけなニュースリーダーだね。弱すぎ。

僕がここで話しているのはグローバルスコアファイルです。全世界中からの、至る所からのユーザーによるスコアファイル、世界の国々を全て、巨大な一つの幸せなスコアファイル同盟に団結させるスコアファイル! Ange-score! 新しくてテストしていない!

他の人のスコアファイルを使うためにしなければならないことは、 gnus-global-score-files 変数を設定することだけです。それぞれのスコアファイル毎に、あるいはそれぞれのスコアファイルディレクトリ毎に対して一つの項目になります。Gnus はどのスコアファイルをどのグループに使うのが適切であるかを自分で決定します。

例えば /ftp@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE のスコアファイルと /ftp@ftp.some-where:/pub/score ディレクトリにある全てのスコアファイルを使いたければ、

     (setq gnus-global-score-files
           '("/ftp@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
             "/ftp@ftp.some-where:/pub/score/"))

どうだい、簡単だろう? ディレクトリ名は / で終わらなくてはなりません。これらのディレクトリは普通は、一回の gnus 使用期間中に一回だけしか読み込みません。もし遠隔ディレクトリを手動で再読み込みする必要が出てきたら、 gnus-score-search-global-directories 命令を使うことができます。

ただし現時点では、このオプションを使うとグループに入るのがいくらか遅くなります。(つまり --- かなり、ですけど)

もしスコアファイルを、他の人たちに使ってもらうように維持したくなってきたら、単にあなたのスコアファイルを匿名 FTP に置いて、世界中に公表してください。逆司会者になれるよ! その後に続いて間違いなく起こる逆司会者戦争、すなわち人々の共感を勝ち取るための逆司会者の戦いに参加することで、彼らのスコアファイルに間違った前提を使わせるように誘導するのだ! やった! これでネットは救われる!

以下に、逆司会者なりたがりのための秘技をいくつか、即席で述べます。

  * 非常に多くの場所にクロスポストされている記事は間違いなく屑である。

  * 一個の不適切な記事を減点するには、Message-ID で減点する。

  * 特に素晴らしい投稿者たちは永続的な主役達として加算する。

  * そのグループの憲章無視の投稿を頻繁に繰り返す投稿者は、絶滅させてしまって差し支えない。

  * mark と expunge アトムを設定し、汚らわしい記事を完全に葬り去る。

  * 消去のスコア項目を使ってファイルの大きさを小さく抑える。でもおそらくは、サイトによって古い記事を長期間保存するように、期限切れ消去の期間は長く取るでしょうけれども。

... 果たして他のニュースリーダーは将来、グローバルスコアファイルをサポートするでしょうか? うふふ。そう、どう考えてみたって、Blue Wave や xrn や 1stReader とかいったニュースリーダーはスコアをサポートするべきだね。今は固唾を飲んで見守ることにしましょうか?

消去ファイル
======

Gnus はまだ、あのうざったい古い消去ファイルをサポートしています。実際消去ファイルの項目はもう消してもよいのですが、それは Daniel Quinlan がスコアファイルを考え出す前に私が書いたものなので、そのコードはまだ残っています。

要するに、消去処理はスコア処理よりもかなり遅いので (私の言いたいのは ものすごく)、あなたの消去ファイルはスコアファイルに書き換えた方が良いかもしれません。

いずれにせよ、消去ファイルは普通の emacs-lisp ファイルです。このファイルの中にはどんな形式でも入れることができます。つまり消去ファイルをグループに入ったときに実行する一種の原始的なフック関数のように使うことができます。まあそれがあまりいい方法ではないとしてもね。

通常の消去ファイルは以下のようになります。

     (gnus-kill "From" "Lars Ingebrigtsen")
     (gnus-kill "Subject" "ding")
     (gnus-expunge "X")

これは私が書いた全ての記事に既読の印をつけ、概略バッファから印のついた記事を削除します。とっても便利です。あなたもそう思うでしょ。

他のプログラムでは全く違う消去ファイルの構文を使っています。もし gnus が rn の消去ファイルらしきものに出会ったら、何とかそれを解釈しようとします。

GNUS 消去ファイルを編集するための二つの概略バッファ関数があります。

M-k
     そのグループの消去ファイルを編集する (gnus-summary-edit-local-kill)。

M-K
     一般消去ファイルを編集する (gnus-summary-edit-global-kill)。

消去ファイルを編集する二つのグループモード関数があります。

M-k
     そのグループの消去ファイルを編集する (gnus-group-edit-local-kill)。

M-K
     一般消去ファイルを編集する (gnus-group-edit-global-kill)。

消去ファイル変数。

gnus-kill-file-name
     soc.motss グループ用の消去ファイルは通常 soc.motss.KILL という名前です。このファイル名を得るためにグループ名に付加される接尾辞は、gnus-kill-file-name 変数で与えられます。``グローバル'' 消去ファイルは (スコアファイルの意味での ``グローバル'' じゃないよ、もちろん) 単に KILLという名前です。

gnus-kill-save-kill-file
     この変数が nil 以外であれば、gnus は処理の後に消去ファイルを保存します。これは期限切れ削除を行う消去を使っているときに必要です。

gnus-apply-kill-hook
     グループに消去ファイルを適用するために呼び出されるフック。これは初期設定では (gnus-apply-kill-file) です。もし同じグループに対してスコアファイルがある場合には消去ファイルを無視したければ、このフックを (gnus-apply-kill-file-unless-scored) に設定します。消去ファイルを処理させたくなければ、この変数を nil に設定してください。

gnus-kill-file-mode-hook
     消去ファイルモードバッファ内で呼び出されるフック。

消去ファイルの変換
=========

あなたが古い消去ファイルをどっさり持っているのであれば、それらをスコアファイルに変換したくなるでしょう。もしそれらが ``普通の'' やつであれば、gnus-kill-to-score.el パッケージを使うことができます。そうでなければ、手で変換しなければならないでしょう。

消去ファイルからスコアファイルへの変換パッケージは、標準では gnus には含まれません。 http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score から入手することができます。

もしあなたの消去ファイルが非常に複雑なものであれば --- それに gnus-kill 形式以外のものがたくさん含まれていれば、それらを手で変換しなければなりません。あるいは単にそれらを、そのままにしておいてください。Gnus は以前同様にそれらを使ってくれるでしょう。

GroupLens
=========

GoupLens は、毎日作成される多くの量のニュース記事から質の良い記事を他の人と共に見つけるのを助けるための共同選別機構です。

これを達成するために、GroupLens 機構はあなたが既に読んだ記事に対する意見を、同じような事をした他の人の意見と結合して、それぞれの未読ニュース記事に個人化された予言を与えます。GroupLens を仲人のようなものだと見なしてください。GroupLens はあなたがどのように記事の価値を付けるかを見て、同じように記事の価値を付ける人を探します。一度あなたの意見と一致する人を発見すれば、予言の形で、それらの人が記事をどう思うかをあなたに告げます。あなたはこの予言を記事を読みたいかどうかを決定するのに役立てる事ができます。

GroupLens を使う
-------------

GroupLens を使うためには、ローカルの Better Bit Berau (BBB) に筆名 (pseudonym) を登録しなければなりません。 http://www.cs.umn.edu/Research/GroupLens/bbb.html が現在、ちまたに存在する唯一の better bit です。

登録した後で、いくつかの変数を設定する必要があります。

gnus-use-grouplens
     この変数を nil でない値に設定すると、Gnus が全ての GroupLens 関連関数をフックするようになります。

grouplens-pseudonym
     この変数は Better Bit Bureau に登録したときにもらった筆名に設定されるべきです。

grouplens-newsgroups
     GroupLens の予言を得たいと思うグループのリストです。

これが起き上がって GroupLens を実行するために必要な最低限の設定です。一度登録すると、GroupLens はあなたに他の人が考える平均に基づいたスコアをあなたに提供することを始めます。しかし、GroupLens の本当の利益を受けるためには、自分自身で記事の値付けを始めなければなりません。そうすると、 GroupLens があなたに提供するスコアはあなたが普段納得するような意見を持った人が既に値を付けた基づいて個人化されます。

Rating Articles
---------------

GroupLens では、記事は1から5まででそれを含んだ範囲で値を付けられます。1 は帯域の無駄遣いのようなものだと考えられ、5は記事が本当に良いと考えられるいう事を意味します。あなたが自分自身に尋ねる基本的な質問は、``1から5の範囲の中で、これと同じような記事をもっと読みたいだろうか？'' です。

GroupLens で、記事の値を登録するための4つの方法があります。

r
     この関数は1から5の範囲の値付けの入力を促進します。

k
     この関数は値付けの入力を促進し、スレッドの全ての記事を値付けます。これは rec.humor にあるようなあの長い間続くスレッドに対して非常に役に立ちます。

次の2つの命令、n と , は、あなたが読んでいる記事のスコアになる数値接頭引数をとります。

1-5 n
     記事の値を付けて、次の未読記事に移動します。

1-5 ,
     記事の値を付けて次の一番高いスコアの未読記事に移動します。

もし現在の記事にスコア4を付け、次の記事に移動したいのであれば、4 n と叩いてください。

予言表示
----

GroupLens はあなたがニュース記事をどれくらい気に入るかの予言をします。 GroupLens からの予言は1から5の範囲にあり、1が最悪で5が最良です。 GroupLens からの予言を変数 gnus-grouplens-override-scoring によって制御される3つの内の1つによって使う事ができます。

grouplens で予言を表示するために3つの方法があります。GroupLens のスコアを普通の gnus スコア機構に貢献するか、上書きするかを選ぶ事ができます。上書きが初期設定です。しかし、gnus のスコアを grouplens のスコアに足すのを好む人もいます。分離スコアの振る舞いを得るためには、 gnus-grouplens-override-scoring を 'separate に設定する必要があります。GroupLens の予言と grouplens スコアを結合するためにはそれを 'override に設定し、スコアを結合するためには gnus-grouplens-override-scoring を 'combine に設定します。結合付加機能を用いるときは、grouplens-prediction-offset と grouplens-score-scale-factor の値を設定したいと思うでしょう。

どちらの場合でも、GroupLens は2,3の予言がどのよう表示されたいかの選択を与えます。予言の表示は変数 grouplens-prediction-display によって制御されます。

以下のものがその変数で有効な値です。

prediction-spot
     予言が高いほど、右の方に * が表示されます。

confidence-interval
     数字の確信 (confidence) 間隔です。

prediction-bar
     予言が高いほど、棒が長くなります。

confidence-bar
     数字確信です。

confidence-spot
     確信が高いほど点が大きくなります。

prediction-num
     普通の昔ながらの数値です。

confidence-plus-minus
     予言の +/- 確信です。

GroupLens 変数
------------

gnus-summary-grouplens-line-format
     GropuLens 拡張の概略バッファで使われる概略行様式です。普通の概略行様式が受け付けるものと同じ指定を受け付けます (see Summary Buffer Lines)。初期設定は%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n です。

grouplens-bbb-host
     bbbd サーバーが実行されているホストです。goruplens.cs.umn.edu が初期設定です。

grouplens-bbb-port
     bbbd サーバーが実行されているホストのポートです。初期値は9000です。

grouplens-score-offset
     予言から差し引きされる値です。つまり、意味のあるスコアにするために予言の値からこの数字を引き算します。初期値は0です。

grouplens-score-scale-factor
     利用者はこの変数を使って GroupLens のスコアを拡大する事ができます。掛け算の要素は差し引きの後に適用されます。初期値は1です。

上級スコア付け
=======

表題や From ヘッダーにスコアを付けるのは十分素敵ですが、ある人特定の題に関して言っている事にだけ本当に興味がある場合はどうすれば良いのでしょう？もしくは、Aさんが Bさんにフォローアップしているときに言っている事を読みたくないけれど、Cさんにフォローアップしているときは何を言っているかを知りたいという場合は？

上級スコア法則を使う事で、任意の複雑なスコアの付け方を作成する事ができます。

上級スコア付け構文
---------

普通のスコア法則は法則の最初の要素に文字列があります。上級スコア付け法則は最初の要素にリストがあります。2番目のリストは最初の要素が nil でない値に評価されたときに適用されます。

これらのリストは3つの論理作用子からなっており、それらは1方向作用子で、色々な合致作用子です。

論理作用子:

&
and
     この論理作用子はそれぞれの引数を false に評価されるものを見つけるまで評価し、それから停止します。全ての引数が true の値に評価された場合は、この作用子は true を返します。

|
or
     この論理作用子はそれぞれの引数を true に評価されるものを見つけるまで評価します。もしどの引数も true でないと、この作用子は false を返します。

!
not
,A,
     この論理作用子は単一の引数のみをとります。それはその引数の値の論理否定を返します。

引数をスコア付けされている現在の記事の祖先に適用する 間接作用子 があります。例えば、1- は現在の記事の親にもスコア法則を適用します。 2- は現在の記事の祖父母にスコア法則を適用します。代わりに、 ^^ を書く事もでき、この時、^ (キャラット) (carat) の数はどのくらい祖先の記事までさかのぼるかを示します。

最後に、合致作用子があります。これらが本当の仕事をするものです。合致作用子はヘッダー名の文字列で、その後に合致と合致の型が続きます。典型的な合致作用子は ("form" "Lars Ingebrigtsen" s) のようなものです。ヘッダー名は単純なスコア付けをするときのものと同じで、合致の型も同じです。

上級スコア付けの例
---------

Lars が Gnus に関して話をしているときに彼によって書かれた記事のスコアを増やしたいとしましょう:

     ((&
       ("from" "Lars Ingebrigtsen")
       ("subject" "Gnus"))
      1000)

ね、とても単純でしょ？

長い記事を書いているときは、時々何か素敵な事を言います:

     ((&
       ("from" "Lars Ingebrigtsen")
       (|
        ("subject" "Gnus")
        ("lines" 100 >)))
      1000)

しかし、彼が Reig Eigil Logge によって書かれたものに反応しているときは、彼が書いたものを読みたくありません:

     ((&
       ("from" "Lars Ingebrigtsen")
       (1- ("from" "Reig Eigir Logge")))
      -100000)

Redmondo が消えた靴下について書いたときにフォローアップした全ての人はスコアが上げられますが、それは彼らが白い靴下について語っているときのみです。しかし、Lars が靴下について話をしているときは、たいていあまりおもしろくありません:

     ((&
       (1-
        (&
         ("from" "redmondo@.*no" r)
         ("body" "disappearing.*socks" t)))
       (! ("from" "Lars Ingebrigtsen"))
       ("body" "white.*socks"))
      1000)

可能性は無限大です。

上級スコアのちょっとした秘訣
--------------

& と | 論理作用子は、短縮回路論理を行います。すなわち、その作用の結果が明らかになって時点で、引数を実行過程にかける事を止めます。例えば、& の引数の評価が false になると、残りの引数を評価する目的は存在しなくなります。これは遅い合致 (body や header) を最後に持ってきて、速い合致 (from や subject) を最初に持ってくるべきであるという事を意味します。

間接作用子 (1- など) はそれらの引数をスレッドの1世代前に作用するようにします。次のような事をすれば:

     ...
     (1-
      (1-
       ("from" "lars")))
     ...

これは ``現在の記事の祖父母の from ヘッダーにスコアを付ける'' という事を意味します。間接はとても速いですが、次の方よりも:

     (1-
      (&
       ("from" "Lars")
       ("subject" "Gnus")))

次の方が良いです:

     (&
      (1- ("from" "Lars"))
      (1- ("subject" "Gnus")))

スコア腐敗
=====

スコアは再現無く膨れ上がる傾向がある事に気付くかもしれません。特に、適応スコアを使っているときは。スコアが大きくなりすぎると、それらは意味を失います---それらは単に最大を通り越してしまって、それを意味のある方法で使う事は難しくなります。

Gnus はこの問題の解決を助けるためにスコアを腐らせる機構を提供します。スコアファイルは読み込まれ、 gnus-decay-scores が nil でないと、gnus はスコアファイルを腐敗機構を通し、全ての永続でないスコア法則のスコアを下げます。腐敗自身は関数 gnus-decay-score-function によって実行され、初期設定は gnus-decay-score です。以下はその関数の定義です:

     (defun gnus-decay-score (score)
       "Decay SCORE.
     This is done according to `gnus-score-decay-constant'
     and `gnus-score-decay-scale'."
       (floor
        (- score
           (* (if (< score 0) 1 -1)
              (min (abs score)
                   (max gnus-score-decay-constant
                        (* (abs score)
                           gnus-score-decay-scale)))))))

gnus-score-decay-constant は初期値として3を持ちで、 gnus-score-decay-scale は初期値として0.05を持ちます。これは以下のような事を引き起こします:

 1. -3から3の間のスコアはこの関数が呼ばれたときに0に設定されます。

 2. 3から60までの間の大きさのスコアは3つ減らされます。

 3. 60より大きいスコアはスコアの5%に減らされます。

もしこの腐敗関数を好きでないなら、自分自身の関数を書いてください。それは腐敗するべきスコアを唯一の引数として呼ばれ、整数であるべき新しいスコアを返さなければなりません。

Gnus は1日に1回スコアを腐敗させようとします。例えば、もし gnus を4日間実行していないと、gnus は4回スコアを腐らせます。

いろいろ
****

プロセス/接頭引数
=========

多くの関数、その中でも記事の移動、復号化、保存をするための関数は、プロセス/接頭引数の習慣 として知られているものを使います。

これは利用者がどの記事に命令を実行したいかを見つけるための方法です。

それはこのような感じです:

もし数値接頭引数が N であると、現在の記事から始めて、次の N 記事に作業を実行します。もし数値接頭引数が負であると、現在の記事から始めて、前の N 記事に作業を実行します。

transient-mark-mode が nil でなく、リージョンが操作されていると、リージョンにある全ての記事に作業がなされます。

もし接頭引数が無いけれど、いくつかの記事はプロセス印が付いているという場合は、プロセス印の付いている記事に作業が実行されます。

数値接頭引数やプロセス印の付いている記事が無い場合は、現在の記事にだけ作業を実行します。

これは本当に非常に簡単ですが、驚嘆を避けられるように詳細を明らかにしておく必要があるのです。

プロセス印に反応する記事は現在のプロセス印の付いている記事のリストをスタックに積み、全てのプロセス印の記事のリストを消去します。前回の設定を M P y で復旧させる事ができます (see Setting Process Marks)。

多くの人々を驚かせ、恐がらせると思われることは、例えば、3 d は本当に d d d と同じ事をする事です。それぞれの d (これは現在の記事に既読の印を付けます) は初期設定では印を付けた後に次の未読記事に移動するので、3 d は概略バッファがどのようであっても、次の3 つの未読記事を既読にします。もっと分かりやすい動作のためには gnus-summary-goto-unread を nil に設定してください。

対話的
===

gnus-novice-user
     もしこの変数が nil でないと、あなたは Usenet の世界に新しく入って来た人であるか、非常に慎重な人で、これは本当に良い事です。何か危険な事をする前に、``本当にこれをしたいのですか？'' というような質問を受けます。これは初期設定では t です。

gnus-expert-user
     この変数が nil でないと、あなたは gnus からほとんど質問を受ける事はありません。これは単純にあなたがどのような変な事をしていても、何をしているかをわかっていると見なします。

gnus-interactive-catchup
     nil でないと、グループに追いつく (catchup) 前に、確認を要求します。これは初期設定で t です。

gnus-interactive-exit
     Gnus を終了する前に確認を要求します。この変数は初期設定で t です。

シンボルの接頭引数
=========

非常に多くの Emacs の命令は (数値) 接頭引数に反応します。例えば、 C-u 4 C-f はポイントを4文字先に移動し、C-u 9 0 0 I s s p は永続 Suject 文字列の一部スコア法則の900を現在の記事に加えます。

これは素敵で良いのですが、命令にもう少し追加の情報を与えたいときはどうすれば良いのでしょう？えーと、たいていの命令がしている事は、``生の'' 接頭引数を特別な方法で解釈する事です。例えば、C-u 0 C-x C-s は現在の記事を保存するときにバックアップファイルを作らないで欲しいということを意味します。でも、バックアップファイルを作らないで保存し、同時に Emacs に光って欲しく、素敵な音楽を演奏して欲しいときはどうすれば良いでしょう？それは不可能で、おそらくそれが不可能であってもあなたは幸せでしょう。

私はそうではありません。ですから、私は2つめの接頭引数---シンボル接頭引数 を加えました。接頭キーは M-i (gnus-symbolic-argument) で、次に押される文字が値です。望むだけ多くの M-i 接頭語を積み重ねる事ができます。M-i a M-C-u は ``命令 M-C-u にシンボル接頭引数 a を与える'' ということです。 M-i a M-i b M-C-u は命令 M-C-u にシンボル接頭引数 a b を与える'' という事です。趣旨は分かったでしょう。

シンボル接頭引数を受け付けない命令にそれを打鍵する事は何も悪い事をしませんが、良い事も何もしません。現在のところ、あまり多くの関数がシンボル接頭引数を役立てているわけではありません。

もしどのように gnus がこれを実装しているかに興味があるなら、 see Extended Interactive を見てください。

書法仕様変数
======

このマニュアルを通して、あなたはおそらく gnus-group-line-format や gnus-summary-mode-line-format のように呼ばれるたくさんの変数がある事に気付いたでしょう。これらは gnus が色々なバッファでどのように行を出力するかを制御します。非常にたくさんのものがあります。幸運な事に、それらはすべて同じ構文を使いますので、あまり嫌な目には会わないでしょう。

書法仕様 (format) 指定の例があります (グループバッファより): %M%S%5y: %(%g%)\n。それは実際に非常に醜く、たくさんのパーセント記号がどこにでもあります。

現在のところ、gnus は以下の書法仕様変数を使います: gnus-group-line-format、gnus-summary-line-format、 gnus-server-line-format、gnus-topic-line-format、 gnus-group-mode-line-format、gnus-summary-mode-line-format、 gnus-article-mode-line-format、 gnus-server-mode-line-format、 gnus-summary-pick-line-format。

これら全ての書法仕様変数は任意の elisp 式である事もできます。その場合は、それらは要求される行に挿入するために 評価 されます。

Gnus はあなた自身の書法仕様指定を作る手伝いをする命令を備えています。 M-x gnus-update-format は現在の式を 評価 し、当の指定を更新し、結果の lisp 式を実行して行を作成する事を実験できるバッファに移動します。

書法仕様の基本
-------

それぞれの要素 % は当のバッファが作成されるときに何らかの文字列や他のもので置き換えられます。%5y は ``y 指定を挿入し、5文字の場所を得るために空白を入れなさい'' という事です。

普通の C や Emacs Lisp の書法仕様 (format) 文字列と同じように、% と書法仕様の型の文字の間の数値修飾子は常に少なくともその長さになるように、出力に 詰め れられます。%5y はその部分を常に (少なくとも) 5 文字の長さになるように、左に空白を詰めます。もし %-5y とすれば、代わりに右側に詰め込みます。

特に長い値からその部分を保護するために、長さを制限したいとも思うでしょう。そのためには、%4,6y とする事ができて、これはその領域は決して6文字を超える長さにはならず、4文字より少ない長さにならないという事です。

モード行書法仕様
--------

モード行書法仕様変数 (すなわち、gnus-summary-mode-line-format) は以下の2つの違い以外は、バッファ行に基づく書法仕様変数と (see Formatting Basics) 同じような規則に従います:

 1. 最後に改行 (\n) があってはなりません。

 2. 特別な %%b 指定をバッファ名を表示するために使うことができます。えーと、本当はそれは指定ではないのです---%% は単に書法仕様が機械的に切り裂くのを切り抜けて % をそのまま渡すための方法で、Emacs が %b を受け取ると、Emacs のモード行表示の部分がそれを ``バッファ名を表示しなさい'' と解釈します。Emacs が理解するモード行指定の完全な一覧を見るためには、変数 mode-line-format の説明文を見て下さい。

上級書法仕様
------

何らかの方法で領域を後で処理するのは頻繁に役に立ちます。部分を詰め込む、制限する、切り取ることと特定の値を抑制する事は、チルダ修飾子 を使う事により達成されます。よくあるチルダ指定はこのように見えるかもしれません %~(cut 3)~(ignore "0")y。

これらは有効な修飾子です:

pad
pad-left
     要求された長さになるまで、領域に空白を左側から詰め込みます。

pad-right
     要求された長さになるまで、領域に空白を右側から詰め込みます。

max
max-left
     指定された長さになるように、文字を左側から切り取ります。

max-right
     指定された長さになるように、文字を右側から切り取ります。

cut
cut-left
     指定された数の文字を左側から切り落とします。

cut-right
     指定された数の文字を右側から切り落とします。

ignore
     領域が指定された値と等しければ (equal) 、空文字列を返します。

form
     @ 指定が使われたときに、指定された式を領域の値として使います。

例を出してみましょう。概略モード行での %o 指定は小型の ISO0861 様式の日付を返します---19960809T230410 です。これは発音しにくいので、世紀を表す数と時間を削ぎ落として、6文字の日付を残したいと思います。それは %~(cut-left 2)~(max-right 6)~(pad 6)o となるでしょう。(切り落とし (cutting) は 最大限 (maxing) より先になされますので、桁で素敵に見えるようにするために日付が6文字より少なく無くならない事を保証するために詰め込み (padding) が必要になります。)

無視 (ignore) が最初になされます。それから切り落とし (cut) が行われます。そして、それから最後の操作、詰め込み (pad) が行われます。

もしこれらの上級参照をたくさん使っているなら、gnus がとても遅くなるのがわかるでしょう。これはあなたの行の外見に満足したときに M-x gnus-compile を実行する事で格段に速度低下を減らす事ができます。 See Compilation。

利用者定義の指定
--------

全ての指定は利用者定義---u の指定を挿入する事ができます。書法仕様文字列の次の文字はアルファベットである必要があります。Gnus は関数 gnus-user-format-function-X を呼び、ここで X は %u に続くアルファベットです。関数には単一の引数が与えられます--- 引数の意味は関数がどのバッファから呼ばれているかによって変わります。関数は文字列を返すべきで、それは他の指定からの情報と全く同じようにバッファに挿入されます。関数は意味の無い値と共に呼ばれる事もありえますので、それの対策をするべきです。

新しい関数を定義しないでも、チルダ修飾子 (see Advanced Formatting) を使ってほとんど同じ事を達成する事ができます。例です: %~(form (count-lines (point-min) (point)))@。ここで与えられた式は評価されて、現在の行数をもたらし、それから挿入されます。

書法仕様フォント
--------

ハイライトのための指定があり、それらは全ての書法仕様変数によって共有されています。%( と %) 指定の間の文章は特別な mouse-face プロパティが設定され、それはそこにマウスのポインターをあわせたときに (gnus-mouse-face によって) ハイライトされることになります。

%{ と %} 指定の間の文章は gnus-face-0 を使って普通のフェイスが設定され、それは初期設定で bold です。もし %{1 としたなら、代わりに gnus-face-1 を得、以下同様です。欲しいだけたくさんのフェイスを作ってください。同じ事が mouse-face 指定にも言えます---hello が gnus-mouse-face-3 でマウス−ハイライトされるためには、%3(hello%) とする事ができます。

これはグループバッファの代替手法です:

     ;; 3つのフェイスの型を作る。
     (setq gnus-face-1 'bold)
     (setq gnus-face-3 'italic)

     ;; 我々は記事の数をボールドで緑のフェイス
     ;; にしたいので、`my-green-bold' と呼ばれる
     ;; 新しいフェイスを作った。
     (copy-face 'bold 'my-green-bold)
     ;; 色を設定する。
     (set-face-foreground 'my-green-bold "ForestGreen")
     (setq gnus-face-2 'my-green-bold)

     ;; 新しい上等の書法仕様を設定する。
     (setq gnus-group-line-format
           "%M%S%3{%5y%}%2[:%] %(%1{%g%}%)\n")

あなたがこの案を使って完全に読めなくて非常に下品な表示を作る事ができると確信しています。楽しんでください！

%( 指定 (やその類のもの) はモード行変数では全く意味をなさない事に注意してください。

ウィンドウの設定
========

いえ、X に関する事はありませんので、おとなしくして下さい。

もし gnus-use-full-window が nil でないと、gnus は全ての他のウィンドウを消して、Emacs の画面全体を占有します。これは初期設定で t です。

gnus-buffer-configuration はそれぞれの gnus のバッファがどのくらいの空間を与えられるべきかを現します。これはこの変数の抜粋です:

     ((group (vertical 1.0 (group 1.0 point)
                           (if gnus-carpal (group-carpal 4))))
      (article (vertical 1.0 (summary 0.25 point)
                             (article 1.0))))

これは連想リストです。キー は何らかの動作や他のものを任命するシンボルです。例えば、グループバッファを表示するときは、ウィンドウ設定関数は group をキーとして使います。使用可能な名前の完全な一覧は下に挙げられています。

値 (すなわち、分割) はそれぞれのバッファがどれくらいを占めるべきかを指定します。article 分割を例に取ると -

     (article (vertical 1.0 (summary 0.25 point)
                            (article 1.0)))

この 分割 は概略バッファ (summary buffer) が画面の上の 25% を占めるべきで、それは記事バッファ (article buffer) の上に配置されます。お気づきの通り、100% + 25% は実際は 125% です (えぇ、皆さんの計算はこの様になったと思います。) しかし、特別な数字 1.0 は、残りのバッファが必要なものを取り去った後に、使用可能な残りの空間全てを吸い取る、という事を合図するために使われます。1つの分割につき、1.0 の大きさ指定のバッファは一つだけでなくてはなりません。

ポイントは省略可能な3つ目の要素、point を持つバッファに置かれます。 frame 分割では、タグ frame-focus が構成要素である (すなわち、point タグが存在するかどうかによって、リストの3番目か4番目かに存在する要素) 葉分割を持つ最後の副分割が焦点を得る事になります。

次はもっと複雑な例です:

     (article (vertical 1.0 (group 4)
                            (summary 0.25 point)
                            (if gnus-carpal (summary-carpal 4))
                            (article 1.0)))

もし大きさ指定が浮動小数点数の代わりに整数であったなら、それは割合ではなく、どのくらい多くの行をバッファが占めるべきかを指定するために使われます。

もし 分割 が 評価 されるもののように見えるときは (明確にすると---分割の car が関数か原始関数 (subr) であるときは)、この分割は 評価 されます。結果が nil でないなら、それは分割として用いられます。これは、gnus-carpal が nil であれば3つのバッファが、gnus-carpal が nil でないなら、4つのバッファが存在するという事です。

まだ複雑ではないですって？ それでは、大きさにこれを試してみて下さい:

     (article (horizontal 1.0
                  (vertical 0.5
                      (group 1.0)
                      (gnus-carpal 4))
                  (vertical 1.0
                      (summary 0.25 point)
                      (summary-carpal 4)
                      (article 1.0))))

おぉっと。2つのバッファに不思議な 100% タグが付いています。そして、あの horizontal っていうものは何でしょう？

もし分割の一つの最初の要素が horizontal であったなら、gnus は ウィンドウを水平に分割し、2つのウィンドウを横に並べます。これらのそれぞれの小片の中では、全てを普通の流儀で行う事ができます。horizontal の後の数字は、この小片に画面のどれくらいの割合が与えられるかを指定します。

それぞれの分割では、100% のタグを持つ要素が 必ず 一つある必要があります。分割は決して正確には行われませんので、このバッファが分割から残された全ての行を占領します。

もう少し正式にするために、ここに有効な分割がどのようになるかの定義があります:

     split       = frame | horizontal | vertical | buffer | form
     frame       = "(frame " size *split ")"
     horizontal  = "(horizontal " size *split ")"
     vertical    = "(vertical " size *split ")"
     buffer      = "(" buffer-name " " size *[ "point" ] *[ "frame-focus"] ")"
     size        = number | frame-params
     buffer-name = group | article | summary ...

制限には、frame は最上位の分割としてしか現れる事ができないというものがあります。FORM は有効な分割を返す Emacs Lisp の式 (form) でなければなりません。それぞれの分割は完全に再帰的で、任意の数の vertical と horizontal 分割を含む事ができます。

正しい大きさを見つけるのは少し複雑です。どのウィンドウも gnus-window-min-height (初期値 1) の文字の高さよりも小さくてはならず、少なくとも gnus-window-min-width (初期値 1) の文字幅でなくてはなりません。Gnus は分割を適用する前にこれを強制しようと試みます。もし普通の Emacs のウィンドウの幅/高さ制限を使いたいなら、この2つの変数を nil にするだけで良いです。

もし Emacs の用語になじんでいないのなら、horizontal と vertical 分割は、期待するものと反対の動作をするでしょう。 horizontal 分割の中のウィンドウは横に並んで表示され、 vertical 分割の中のウィンドウは上下に表示されます。

ウィンドウの設置に関して実験をしてみたいのであれば、よい方法は分割で直接 gnus-configure-frame を呼ぶことです。これはバッファを分割するときに全ての本当の仕事をする関数です。下のものは5ウィンドウのとてもばかげた設定です。2つをグループバッファに、3つを記事バッファのために充てます。 (それはばかげていると言ったでしょ。) もし下の文を 評価 すると、普通の gnus の経路を使わないで、すぐにそれがどのように見えるかの考えを得る事ができます。満足するまでそれで遊んで、それから gnus-add-configuration を使って新しい想像をバッファ設定リストに加えて下さい。

     (gnus-configure-frame
      '(horizontal 1.0
         (vertical 10
           (group 1.0)
           (article 0.3 point))
         (vertical 1.0
           (article 1.0)
           (horizontal 4
             (group 1.0)
             (article 10)))))

いくつかのフレームも欲しいかもしれません。簡単です---frame 分割を使うだけです:

     (gnus-configure-frame
      '(frame 1.0
              (vertical 1.0
                        (summary 0.25 point frame-focus)
                        (article 1.0))
              (vertical ((height . 5) (width . 15)
                         (user-position . t)
                         (left . -1) (top . 1))
                        (picon 1.0))))

この分割の結果は、最初 (もしくは、``主な'') フレームは見慣れた概略/記事ウィンドウ設定で、小さな追加のフレームが picon を表示するために作られるという事になります。ご覧の通り、普通の 1.0 最上位指定の代わりに、それぞれの追加の分割がフレームパラメータ連想リストを大きさ指定として持たなければなりません。See Frame Parameters (The GNU Emacs Lisp Reference Manual). XEmacs では、フレームプロパティリストも使えます---例えば、(height 5 width 15 left -1 top 1) はそのようなパラメータリストです。

これは gnus-buffer-configuration に仕様可能なキーの一覧です:

group、summary、article、server、 browse、message、pick、info、 summary-faq、edit-group、edit-server、 edit-score、post、reply、forward、 reply-yank、mail-bounce、draft、pipe、 bug、compose-bounce、score-trace。

キー message は gnus-group-mail と gnus-summary-mail-other-window の両方で使われる事に注意して下さい。もし2つを区別するほうが望ましいなら、このような物を使う事ができます:

     (message (horizontal 1.0
                          (vertical 1.0 (message 1.0 point))
                          (vertical 0.24
                                    (if (buffer-live-p gnus-summary-buffer)
                                        '(summary 0.5))
                                    (group 1.0)))))

変数 gnus-buffer-configuration はとても長く複雑なので、単一の設定の変更を簡単にするための関数があります: gnus-add-configuration です。もし、例えば、article の設定を変えたいのなら、次のようにできます:

     (gnus-add-configuration
      '(article (vertical 1.0
                    (group 4)
                    (summary .25 point)
                    (article 1.0))))

普通はこれらの gnus-add-configuration 呼び出しをファイル .gnus.el に入れるか、何らかの起動時のフックに入れるでしょう---それらは gnus が読み込まれた後に実行されるべきです。

もし設定で言及された全てのウィンドウが既に見えているのであれば、gnus はウィンドウの設定を変更しません。もし常に ``正しい'' ウィンドウ設定を強制したいのであれば、gnus-always-force-window-configuration を nil でない値に設定する事ができます。

フェイスとフォント
=========

フォントとフェイスを弄るのは非常に難しかったのですが、今日では非常に簡単です。単に M-x customize-face とやって、変えたいフェイスを選び出して、標準のカスタマイズインターフェースを使って変更する事ができます。

コンパイル
=====

あの行書法仕様指定変数を覚えていますか？ gnus-summary-line-format、 gnus-group-line-format などなどです。さて、gnus はもちろんこれらの変数がどのようなものでも注意しますが、不運な事に、それらを変更すると、大変重大な速度低下を引き起こす事になります。 (これらの変数の初期値はそれらに関連付けられたバイトコンパイルされた関数を持っていますが、利用者作成のものはもちろんそうではありません。)

これを改善するために、変数を弄りまわして、(なんとなく) 満足したと感じた後で、M-x gnus-compile を実行する事ができます。これは新しい指定がバイトコンパイルされ、もう一度最高速度に復帰できるという事です。Gnus はこれらのコンパイルされた指定をファイル .newsrc.eld に保存します。 (利用者定義の関数は、この関数ではコンパイルされませんが--それらをコンパイルするためには、それらをファイル .gnus.el に突っ込んで、そのファイルをバイトコンパイルするべきです。)

モード行
====

gnus-updated-mode-lines はどのバッファがそのモード行を常に最新のものにしておくかを指定します。それはシンボルのリストです。使う事のできるシンボルは group 、article、summary、server、 browse、tree などです。もし対応するシンボルが存在すると、 gnus は該当するであろう情報でモード行を更新します。この変数が nil であるなら、画面の再描画はもっと速いでしょう。

初期設定では、gnus は概略バッファと記事バッファのモード行に現在の記事の情報を表示します。Gnus が表示したい情報 (例えば、記事の表題) はしばしばモード行よりも長いことがあるので、どこかで切り落とされなければなりません。変数 gnus-mode-non-string-length はその行の他の要素 (すなわち、情報でない部分) がどのくらいの長さであるかを指定します。もしモード行に追加の要素を入れたなら、この変数を修正する必要があります:

     (add-hook 'display-time-hook
               (lambda () (setq gnus-mode-non-string-length
                                (+ 21
                                   (if line-number-mode 5 0)
                                   (if column-number-mode 4 0)
                                   (length display-time-string)))))

もしこの変数が nil であるなら (これが初期値ですが)、モード行は切り落とされず、詰め込みもされません。初期設定は、バッファの完全なパーセント表示さえもモード行から追いやられる可能性もありますので、おそらく望ましい設定ではないという事に注意して下さい。利用者が自分の設定に合うようにこの変数を適切に設定しなければなりません。

ハイライトとメニュー
==========

変数 gnus-visual はたいていの gnus を素敵にする部分の操作をします。 nil であると、gnus はメニューを作ったり、素敵な色やフォントを使ったりしようとしません。これはファイル gnus-vis.el を読み込む事も禁止します。

この変数は仕様可能な視覚的プロパティのリストである事ができます。以下の要素は有効で、初期設定ですべて含まれています:

group-highlight
     グループバッファでハイライトをします。

summary-highlight
     概略バッファでハイライトをします。

article-highlight
     記事バッファでハイライトをします。

highlight
     全てのバッファでハイライトをするようにします。

group-menu
     グループバッファでメニューを作成します。

summary-menu
     概略バッファでメニューを作成します。

article-menu
     記事バッファでメニューを作成します。

browse-menu
     ブラウズバッファでメニューを作成します。

server-menu
     サーバーバッファでメニューを作成します。

score-menu
     スコアバッファでメニューを作成します。

menu
     全てのバッファでメニューを作成します。

ですから、記事バッファだけをハイライトしたく、全てのバッファでメニューを作りたい場合は、このようにする事ができます:

     (setq gnus-visual '(article-highlight menu))

もしハイライトだけで、メニューの類は欲しくないときは、次のようにできます:

     (setq gnus-visual '(highlight))

gnus-visual が t であると、ハイライトとメニューは全ての gnus のバッファで使用されます。

他の全てのバッファの外見に影響する総合的な変数は:

gnus-mouse-face
     これは gnus でマウスのハイライトに使われるフェイス (すなわち、フォント) です。gnus-visual が nil であると、マウスハイライトはなされません。

全く違ったメニューを作成するために関連するフックがあります:

gnus-article-menu-hook
     記事モード (article mode) メニューを作成した後に呼ばれるフックです。

gnus-group-menu-hook
     グループモード (group mode) メニューを作成した後に呼ばれるフックです。

gnus-summary-menu-hook
     概略モード (summary mode) メニューを作成した後に呼ばれるフックです。

gnus-server-menu-hook
     サーバーモード (server mode) メニューを作成した後に呼ばれるフックです。

gnus-browse-menu-hook
     概観モード (browse mode) メニューを作成した後に呼ばれるフックです。

gnus-score-menu-hook
     スコアモード (score mode) メニューを作成した後に呼ばれるフックです。

ボタン
===

最近では、最新流行のマウス mouse 装置が、ちゃんとした操作法を学びたがらないナウなヤングの間で大人気です。それでは、私がTops 20 システム上で Emacs を使っていた頃の '89 年の夏を思い起こしてみましょう。300 人の利用者が、一つのマシン上で、みんなが Simula コンパイラを走らせていました。ああ、ばかばかしい!

ほんとにそうだね。

まずですね、gnus-carpal を t に設定することによって、クリックするだけで何でもできるボタンだらけのバッファを gnus に表示させることができます。とっても簡単です、ほんとに。指圧療法の先生に教えてあげて。(訳注: carpal とは手首の骨のこと)

gnus-carpal-mode-hook
     全ての手首モードバッファで実行するフック。

gnus-carpal-button-face
     Face used on buttons. ボタンに使われるフェイス。

gnus-carpal-header-face
     手首バッファのヘッダーで使用されるフェイス。

gnus-carpal-group-buffer-buttons
     グループバッファのボタン。

gnus-carpal-summary-buffer-buttons
     概略バッファのボタン。

gnus-carpal-server-buffer-buttons
     サーバーバッファのボタン。

gnus-carpal-browse-buffer-buttons
     閲覧バッファのボタン。

全ての buttons 変数はリストです。このリストの要素は、 car が表示される文で cdr が関数シンボルの cons セルか、もしくはただの文字列のどちらかです。

デーモン
====

Gnus、それは(言い伝えによれば)かつて書かれたいかなるプログラムよりも大きく、あなたがやって欲しいと思うさまざまな奇妙なことを、あなたのいないところで行ってくれるものです。例えば、あなたは時たま新着メールをチェックしてもらいたくなるかも知れません。あるいは Emacs をしばらく放っておいたとき全てのサーバの接続を切断してもらいたくなるかもしれません。他にも何かそういったことです。

Gnus はさまざまな制御子 handlers を定義することによってそのようなことを可能にします。各制御子は三つの要素から成ります。関数、時間、空転 パラメータです。

以下は Emacs が何もしない空転状態が三十分続いたときに接続を切断する制御子の例です。

     (gnus-demon-close-connections nil 30)

以下は Emacs が何もしていないとき、一時間毎に PGP ヘッダーを走査する制御子です。

     (gnus-demon-scan-pgp 60 t)

この 時間 パラメータとそして 空転 パラメータは、奇妙でかつ素晴らしい方法で一緒に動作します。基本的には、空転 が nil の時にはこの関数は 時間 分毎に呼び出されます。

もし 空転 が t であれば、この関数は Emacs が何もしていない時に限り、時間 分後に呼び出されます。一旦 Emacs がずっと空転状態になった後は、この関数は 時間 分毎に呼び出されます。

空転 が数で 時間 も数である場合、この関数は、 Emacs の空転状態が 空転 分続いた時に限り、時間 分毎に呼び出されます。

空転 が数で 時間 が nil の場合、この関数は、 Emacs の空転状態が 空転 分続く度に一度呼び出されます。

そして 時間 が文字列の場合は、07:31 のような形式でなければならず、この関数は毎日その頃の時間になると一度呼び出されます。もちろん、空転 パラメータで動作が変わります。

(ここで ``分'' と言ったとき、それは実際には gnus-demon-timestep 秒のことです。これは初期設定では 60です。もしこの変数を変更すると、全ての制御子の計時に影響を与えます。)

もっとも、これら全部を運転するように設定するには、 gnus-use-demon を t に設定しなきゃいけないんだけどね。

というわけで、制御子を追加したければ、 .gnus ファイルに、以下のようなものを書くことができます。

     (gnus-demon-add-handler 'gnus-demon-close-connections 30 t)

このための既製関数がいくつか作成されています。 gnus-demon-add-nocem、 gnus-demon-add-disconnection、 gnus-demon-add-nntp-close-connection、 gnus-demon-add-scan-timestamps、 gnus-demon-add-rescan、gnus-demon-add-scanmail です。これらの能力が欲しければ、単にこれらの関数を .gnus に入れてください。

もし gnus-demon-handlers で制御子を直接追加した場合には、それを効かせるために gnus-demon-init を実行してください。全てのデーモンを取り消すには、gnus-demon-cancel 関数を使うことができます。

デーモンの追加は、やりすぎるのはとってもお行儀のよくないことです。全てのサーバーから全てのニュースとメールを二秒毎に調べまわす関数を付け加えちゃったりすると、どんな立派なシステムでも間違いなくお払い箱にしてしまいます。そう動くんだもん。

NoCeM
=====

スパム Spam とは、同じ記事を何回も何回も何回も投稿することです。スパムは悪いことです。スパムは凶悪です。

スパムは通常一日かそこらで、さまざまな反スパム機関から取り消しされます。これらの機関は通常一緒に、NoCeM メッセージも送信します。NoCeM は ``no see-'em'' (彼らを見たくない)と発音され、意味はその名前の通りです --- このメッセージは、罪を犯している記事を、つまり、消してしまいます。

どうせその記事が取り消しされてしまうのなら、これら NoCeM メッセージは何に使われるのでしょう? あるサイトでは取り消しメッセージを引き受けず、あるサイトでは特定の数人からの取り消しメッセージのみしか引き受けません。それで、あなたは NoCeM メッセージを使いたくなるかもしれないわけです。これらは alt.nocem.misc ニュースグループで配布されています。

Gnus はこのグループのメッセージを自動的に読み、解釈することができ、これでスパムを消し去ります。

もちろん、これらをカスタマイズするための変数がいくつかあります。

gnus-use-nocem
     この変数を t に設定することで活動を開始させます。初期設定では nil です。

gnus-nocem-groups
     Gnus はこのグループリストから NoCeM メッセージを探します。初期設定値は ("news.lists.filters" "news.admin.net-abuse.bulletins" "alt.nocem.misc" "news.admin.net-abuse.announce") です。

gnus-nocem-issuers
     NoCeM メッセージを発行する人はたくさんいます。このリストでは、誰の言うことに従いたいかを指定します。初期設定値は ("Automoose-1" "rbraver@ohww.norman.ok.us" "clewis@ferret.ocunix.on.ca" "jem@xpat.com" "snowhare@xmission.com" "red@redpoll.mrfs.oh.us (Richard E. Depew)") です。彼らはみんな、立派で高潔な市民です。

     このリストに含められる有名な反スパム家は以下です。

     clewis@ferret.ocunix.on.ca;
          Chris Lewis --- 主要なカナダの反スパム家。おそらく誰よりも多く、ネットニュースの濫用を取り消しています。

     Automoose-1
          自動運転の CancelMoose[tm]。 CancelMoose[tm] はノルウェー人とされ、NoCeM を発明した人でした。

     jem@xpat.com;
          John Milburn --- 韓国の反スパム家。最近はかなり忙しくなってきているようです。

     red@redpoll.mrfs.oh.us (Richard E. Depew)
          Richard E. Depew --- アメリカの単独反スパム家。主に非バイナリグループへのバイナリ投稿の取り消しと、spew (逆流記事) を削除しています。

     これら全ての人々の NoCeM メッセージに留意する必要はありません --- 言うことを聞きたい人だけでいいんです。またその人からの NoCeMメッセージ全てを受け入れる必要もありません。NoCeM メッセージにはそれぞれ種別 type ヘッダーがついており、これはそのメッセージの厳密な定義を与えています(多少は厳密な、程度ね。たいていは少だけど)。良く使われる種別には、spam、 spew、 mmf、binary、troll があります。これを指定するには、リストの中で (発行者 条件 ...) 要素を使う必要があります。各条件は文字列 (使いたい種別にマッチする正規表現) か、または (not 文字列) という形式のリストです。この場合は 文字列 は使いたくない種別にマッチする正規表現です。

     例えば、Chris Lewis からの NoCeM メッセージで、troll メッセージ以外の全てを欲しい場合には、

          ("clewis@ferret.ocunix.on.ca" ".*" (not "troll"))

     一方、彼の spam と spew メッセージ以外は何もしたくなければ、以下のようにできます。

          ("clewis@ferret.ocunix.on.ca" (not ".*") "spew" "spam")

     この指定は左から右に適用されます。

gnus-nocem-verifyer
     これは NoCeM 発行者が誰であるかと言っているかを証明する関数でなくてはなりません。初期設定では mc-verify であり、これは Mailcrypt 関数です。もしこれが非常に遅くて、あなたが証明結果を気にしない (これはたぶん危険です) のであれば、この変数を nil にすることができます。

     もし署名済みの NoCeM メッセージを証明済み、未署名のメッセージを未証明(でもそれを使う)としたいのなら、以下のようにすることができます。

          (setq gnus-nocem-verifyer 'my-gnus-mc-verify)

          (defun my-gnus-mc-verify ()
            (not (eq 'forged
                     (ignore-errors
                       (if (mc-verify)
                           t
                         'forged)))))

     まあ、これはたぶん危険でしょうけどね。

gnus-nocem-directory
     これは gnus が NoCeM キャッシュファイルを保存する場所です。初期設定値は ~/News/NoCeM/ です。

gnus-nocem-expiry-wait
     古い NoCeM 項目をキャッシュから消すまでの日数。初期設定値は 15 です。これを短くするほど gnus は速くなりますが、古いスパムを見ることになってしまうかもしれません。

NoCeM を使うと、もしかするとメモリ喰いになるかもしれません。あなたがたくさんの生きたグループ (つまり購読あるいは非購読グループ) を持っているのなら、Emacs プロセスは大きくなってしまうでしょう。もしこれが問題であれば、非購読のグループを全部 (あるいはその多くを) 消し去ってしまった方が良いです (see Subscription Commands)。

やり直し
====

実行したことのやり直しができると、とても便利です。普通の Emacs バッファでは、これは十分簡単です --- 単に undo ボタンを押すだけです。しかし gnus のバッファでは、これは簡単ではありません。

Gnus がバッファー内に表示しているものは、gnus にとっては全く何の価値もありません --- これはみんな、利用者に奇麗に見えるようにデザインされているただのデータなのです。C-k でグループバッファからグループを消去するのは、その行は消え去りますが、それは実際の動作 --- 問題のグループを gnus の内部構造体から削除すること、の単なる副作用でしかありません。これらのやり直しは、通常の Emacs の undo 関数では行なうことができません。

Gnus は、利用者が何をするかを憶えておき、その利用者の動作の逆を行なう動作を提供することによって、これを何とか救済しようとします。そして利用者が undo キーを押したとき、gnus はその一つ手前の動作あるいは動作群の逆のコードを実行します。しかし、全ての動作が簡単に可逆であるわけではないので、gnus は現在、やり直し可能なキー関数は僅かしか提供していません。これらは、グループの削除、グループの貼り付け、グループの既読記事のリストの変更、それだけなんです。将来はもっと関数が追加されるかもしれませんが、関数の追加はそれぞれ保存するべきデータを増やすことになるので、gnus は決して完全やり直し可能にはならないでしょう。

やり直し機能は gnus-undo-mode マイナーモードによって提供されます。これは gnus-use-undo が nil 以外であれば使用され、これが初期設定です。M-C-_ キーが gnus-undo 命令を実行します。これは通常の Emacs の undo 命令にちょっとだけ似ていると思われるでしょう。

司会役
===

もしあなたが司会者 (モデレーター) ならば、gnus-mdrtn.el パッケージを使うことができます。これは標準 gnus パッケージには含まれません。larsi@gnus.org に、どのグループの司会を行なうのかを述べたメールを書いてください。そうすればコピーを手に入れられます。

司会者用パッケージは概略バッファのマイナーモードとして実装されています。

     (add-hook 'gnus-summary-mode-hook 'gnus-moderate)

をあなたの .gnus.el ファイルに入れてください。

あなたが rec.zoofle の司会者だとすると、これは以下のように動作するようになっています。

 1. Newsgroups:.*rec.zoofle にマッチする受信メールを分離します。これは投稿されようとしている記事を全てあるメールグループ --- 例えば nnml:rec.zoofle に入れます。

 2. あなたは時折このグループに入り、e (edit-and-post) あるいは s (just send unedited) 命令を使って記事を投稿します。

 3. rec.zoofle ニュースグループを読んでいる途中で、もしあなたが承認していない記事ををたまたま見つけたとしたら、c 命令で取り消しできます。

二つのグループで司会者モードを使うとすれば、こうなります。

     (setq gnus-moderated-list
           "^nnml:rec.zoofle$\\|^rec.zoofle$")

XEmacs 拡張
=========

XEmacs は絵やその他のものを表示することができるので、gnus はこれを利用することにします。

Picons
------

それで…、あなたはこのニュースリーダーをさらにもっと遅くしたいってわけだね! これはそうするのにぴったりな方法です。さらにこれは、あなたがニュースを読んでいるんだということを、あなたの肩越しに見つめている人に印象づけるための素晴らしい方法でもあります。

Picon の基礎
.........

Picon とはなんでしょう? Picons ウェブサイトから直接引用しましょう。

     Picon とは、``個人アイコン (personal icons)'' の略です。これは、ネット上の利用者やドメインを表現するのに使われるための小さな画像で、データベースを持たせて、ある電子メールアドレスがあったら、それに適切な画像を見つけられるようにしておくものです。利用者とドメイン以外にも、Usenet ニュースグループや天気予報のための picon データベースがあります。picon は白黒の XBM 形式でもカラーの XPM 形式でも GIF 形式でも構いません。

あなたがインターネットへ常時接続しているのならば、 gnus-picons-piconsearch-url に文字列

http://www.cs.indiana.edu/picons/search.html を設定することで、Steve Kinzler の picon 検索エンジンを使うことができます。

そうでなければ、彼のデータベースを手元に複製する必要があります。picon データベースの入手とインストールの手順は、ウェブブラウザーで

http://www.cs.indiana.edu/picons/ftp/index.html に行ってみてください。Gnus は picons が gnus-picons-database で示される場所にインストールしてあるものと期待します。

Picon の動作条件
...........

Gnus に picon を表示させるには、XEmacs 19.13 かそれ以降を実行していなければなりません。他の版の Emacs ではどれもまだ画像を表示できないからです。

さらに、x サポート付きで XEmacs をコンパイルしていなくてはなりません。白黒よりももっと奇麗な色付きの picon を表示するためには、xpm か gif どちらかを XEmacs と一緒にコンパイルしている必要もあります。

X-Face ヘッダーの顔を表示したいのなら、XEmacs を xface サポート付きでコンパイルしなければなりません。そうでなければ、netpbm ユーティリティをインストールしておくか、あるいは他の何かを使うように gnus-picons-convert-x-face 変数をいじくってください。

楽々 Picons
.........

picon 表示を有効にするには、単に以下の行を ~/.gnus ファイルに入れて、gnus を起動してください。

     (setq gnus-use-picons t)
     (add-hook 'gnus-article-display-hook
               'gnus-article-display-picons t)
     (add-hook 'gnus-article-display-hook
               'gnus-picons-article-display-x-face)

gnus-picons-database が picon データベースが含まれているディレクトリを指していることを確認してください。

その代わりに Web 上の picon 検索エンジンを使いたければ、これを追加します。

     (setq gnus-picons-piconsearch-url
           "http://www.cs.indiana.edu:800/piconsearch")

難解 Picons
.........

Gnus は、グループや記事に入ったり出たりするのに従って picon を表示することができます。Gnus は picon データベースの三つの章とどう相互作用すればよいかを知っています。すなわち、gnus はニュースグループの絵、著者の顔の絵、著者のドメインの picon を表示することができます。この機能を有効にするには、picon をどこから持ってくるか、そしてどこに表示するかを選択する必要があります。

gnus-picons-database
     picon データベースの場所。news、 domains、 users (などなど) のサブディレクトリーが含まれているディレクトリーを指していなければなりません。これは gnus-picons-piconsearch-url が nil であるときのみ使用されます。初期設定値は /usr/local/faces/ です。

gnus-picons-piconsearch-url
     Web 上の picon 検索エンジンの URL。現在知られている唯一のエンジンは http://www.cs.indiana.edu:800/piconsearch です。ネットワーク遅延を回避するために icon はバックグラウンドで取得されます。もしこれが nil (初期設定値) であれば、picon は gnus-picons-database で示されるローカルのデータベースから取得されます。

gnus-picons-display-where
     picon 画像が表示される場所。これは初期設定では picons です (これは初期設定で *Picons* バッファに位置します)。他の有効な場所としては article、 summary、あるいは *scratch* だろうと知ったことではありません。ただそのバッファを標準の gnus 窓配置処理 --- see Windows Configurationによって見えるようにしておくことを確認してください。

gnus-picons-group-excluded-groups
     この正規表現にマッチするグループではそのグループアイコンを表示させません。

注意: もし gnus-use-picons を t に設定すると、窓配置に picons バッファを含めるように設定されます。

さて、これらを決定した後には、これらの絵が正しい時に表示されるように、以下の関数を適切なフックに追加する必要があります。

gnus-article-display-picons
     著者と著者のドメインの picon を探し、 gnus-picons-display-where バッファに表示します。 gnus-article-display-hook に追加してください。

gnus-picons-article-display-x-face
     X-Face ヘッダーがあればそれを復号化し表示します。この関数は gnus-article-display-hook に追加してください。

注意: これらはフックに追加しなくてはならないので、 add-hook の追加フラグに 't' を指定するのを忘れないでください。

     (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)

無意味な Picon 設定
.............

以下の変数は、さらにこれらをどう実行するか、どこに配置するか、その他役にも立たないどうでもよいことを制御できるようにします。

gnus-picons-news-directories
     gnus-picons-database からニュースグループフェイスを探すためのサブディレクトリーのリスト。("news") が初期設定値です。

gnus-picons-user-directories
     gnus-picons-database から利用者フェイスを探すためのサブディレクトリーのリスト。 ("local" "users" "usenix" "misc") が初期設定値です。

gnus-picons-domain-directories
     gnus-picons-database からドメイン名フェイスを探すためのサブディレクトリーのリスト。初期設定値は ("domains") です。このリストに "unknown" を追加しておきたくなる人もいるでしょう。

gnus-picons-convert-x-face
     もし XEmacs に xface サポートが組み込まれていなければ、この命令が X-Face ヘッダーを X ビットマップ (xbm) に変換するのに使用されます。初期設定値は (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name) です。

gnus-picons-x-face-file-name
     X-Face ビットマップを格納しておく一時ファイルの名前。初期設定値は (format "/tmp/picon-xface.%s.xbm" (user-login-name))。

gnus-picons-has-modeline-p
     gnus-picons-display-where を picons に設定してしまうと、XEmacs のフレームはめちゃめちゃになってしまうでしょう。これを多少なりとも軽減するには、gnus-picons-has-modeline-p を nil に設定してください。これは picon バッファからモード行を取り除きます。これは gnus-picons-display-where が picons のときのみ意味があります。

gnus-picons-refresh-before-display
     nil 以外であれば、picon を計算する前に記事バッファを表示。初期設定値は nil です。

gnus-picons-display-as-address
     t であれば絵と一緒に文字で電子メールアドレスを表示。初期設定値は t です。

gnus-picons-file-suffixes
     picon ファイル名として試してみる拡張子の順序リスト。初期設定値は ("xpm" "gif" "xbm") から XEmacs に組み込まれていないものを引いたものです。

gnus-picons-display-article-move-p
     picon を表示しているときにカーソル位置を最初の空行まで動かすかどうかを指定。これは gnus-picons-display-where の値が article であるときのみ効果があります。

gnus-picons-clear-cache-on-shutdown
     Gnus を終了するときに picon キャッシュを消し去るかどうか。Gnus は実行中に見つけた picon を全てキャッシュします。これは検索処理の時間を多少節約できますが、メモリをいくらか食います。もしこの変数を nil に設定すれば、gnus はそのキャッシュを決して消しません。それを消し去るには手で gnus-picons-clear-cache を呼び出す必要があります。nil でなければキャッシュは gnus が終了するたびに消去されます。初期設定値は t です。

スマイリー
-----

スマイリー smiley は gnus とは別のパッケージですが、スマイリーを使っているパッケージは現在 gnus だけですので、ここで説明します。

一言で言えば --- gnus でスマイリーを使うには、以下を .gnus.el ふぁいるに書いてください。

     (add-hook 'gnus-article-display-hook 'gnus-smiley-display t)

スマイリーは、文字の顔マーク --- :-)、:-=、 :-( などといったもの --- を絵に対応させ、文字の顔マークの代わりにその絵を表示します。この変換は文字にマッチする正規表現とそれのファイル名への対応のリストで制御されます。

スマイリーは初期設定では二つの変換連想リストの例を提供しています。 smiley-deformed-regexp-alist (:)、 :( などにマッチする) と、smiley-nosey-regexp-alist (:-)、 :-( などにマッチする) です。

使用される連想リストは smiley-regexp-alist 変数で指定されます。この初期設定値は smiley-deformed-regexp-alist です。

各要素の最初の項目はマッチさせたい正規表現で、二番目の要素は絵で置き換えたいグループにマッチする正規表現、そして三番目の要素は表示させたいファイルの名前です。

以下の変数は、スマイリーがこれらのファイルを探す場所、あるいはどの色を使うかと、その他のものをカスタマイズします。

smiley-data-directory
     スマイリーが顔ファイルを探す場所。

smiley-flesh-color
     肌の色。初期設定値は、人種差別的だけど yellow です。

smiley-features-color
     フェイスの機能の色。初期設定値は black です。

smiley-tongue-color
     舌の色。初期設定値は red です。

smiley-circle-color
     顔の周りの丸の色。初期設定値は black です。

smiley-mouse-face
     マウスで強調表示したときの顔。

ツールバー
-----

gnus-use-toolbar
     nil ならばツールバーを表示しない。nil 以外の場合は、 default-toolbar、top-toolbar、 bottom-toolbar、right-toolbar、left-toolbar のどれかでなくてはなりません。

gnus-group-toolbar
     グループバッファ内のツールバー。

gnus-summary-toolbar
     概略バッファ内のツールバー。

gnus-summary-mail-toolbar
     メールグループの概略バッファ内のツールバー。

さまざまな XEmacs 変数
---------------

gnus-xmas-glyph-directory
     これは gnus が絵を探す場所です。Gnus は通常このディレクトリを自動検出しますが、もし標準的でないディレクトリー構造を持っている場合は、これを手動で設定することができます。

gnus-xmas-logo-color-alist
     これは連想リストで、キーは種別シンボル、値はタイトル頁絵文字の前面色と背景色です。

gnus-xmas-logo-color-style
     これは前記の連想リストで色を検索するのに使われるキーです。有効な値には flame、 pine、 moss、irish、 sky、 tin、 velvet、 grape、 labia、 berry、 neutral、september があります。

gnus-xmas-modeline-glyph
     全ての gnus モード行で表示される絵文字。これは初期設定ではちいさなヌー (gnu) の頭です。

ファジーな一致
=======

Gnus は、スコア付け、スレッドの形成、スレッド比較などを行うときに、Subject 行のファジーな一致 fuzzy matching 方法を提供しています。

正規表現一致とは違って、ファジーな一致はとってもファジーです。あまりにもファジーすぎて、何がファジー fuzziness であるかという定義さえありませんし、実装も何度も変更されています。

基本的には、これは比較の前に行から邪魔物を取り除こうとします。 Re:  や挿入句の印や空白文字等々は文字列から除去され、その結果を比較します。これはほとんどの場合妥当な結果を出します --- たとえニュースリーダーの仮面をかぶった文字列切り刻み機で生成された文字列が差し出されても、です。

spam メールの裏をかく
=============

ここ最近の USENET では、宣伝のハゲタカどもが、彼らの詐欺や製品を押し付けるための電子メールアドレスを探そうとして、気違いのようにニュース上をうろついて grep しまくっています。これに対する反動として、多くの人々が From 行に無意味なアドレスを入れはじめるようになってしまいました。これは非生産的なことだと私は思います --- あなたが書いたことに対する返信として正当なメールを送ることを面倒にさせ、また誰が書いたものなのかを分かりづらくします。こんな書き換えは結局は、押し付け宣伝メールそれ自身よりも大きな脅威となるかもしれません。

私にとっての spam メールの最大の問題は、嘘の口実で入ってくるからです。私が g を押したとすると、gnus は 10 通の新着メールがありますと陽気に私に教えてくれます。私は ``おおっ、わーい! 僕って幸せ!'' と言ってメールグループを選択します。しかしそこには、二つのネズミ講と、七つの広告 (`` 最新! 奇跡の増毛トニック、ふさふさでつやつやの髪を、あなたのつま先まで!'') と、悔い改め神を信じよ、という一つのメールがあるだけなのです。

これは不愉快です。

これに対処する方法は、gnus に全ての spam を spam メールグループに分離させてしまうことです (see Splitting Mail)。

最初に、あなたに到達性のある正しいメールアドレスを一つ選び、それを全てのあなたのニュース記事の From ヘッダーに入れます。 (ここでは larsi@trym.ifi.uio.no を選びましたが、 larsi+usenet@ifi.uio.no 形式のたくさんのアドレスの方が良い選択です。あなたのサイトの sendmail の設定がメールアドレスのローカル部としてどんなキーワードを受け付けるかは、あなたのサイトのシステム管理者に聞いてください。)

     (setq message-default-news-headers
           "From: Lars Magne Ingebrigtsen <larsi@trym.ifi.uio.no>\n")

そして nnmail-split-fancy に以下の分離規則を入れます (see Fancy Mail Splitting)。

     (
      ...
      (to "larsi@trym.ifi.uio.no"
           (| ("subject" "re:.*" "misc")
              ("references" ".*@.*" "misc")
              "spam"))
      ...
     )

この意味は、このアドレスに届いた全てのメールをまず疑いますが、 Re: で始まる Subject がついているか、 References ヘッダーがついていればおそらく OK だろう、ということです。残りは全て spam グループに行きます。(このアイデアはおそらく Tim Pierce 氏によるものです。)

これに加えて、多くのメール spam 屋は、あなたのところの smtp サーバーと直接話し、To ヘッダーにあなたのメールアドレスが明示されないようにします。なんでそんなことをするのかはわかりませんが --- おそらく私たちの裏をかく機構の裏をかくためかな? どちらにしても、対処は簡単なことです --- あなた宛てでないものを全部 spam グループにいれるだけです。これはお好み分離規則の最後にこんな風に入れることでできます。

     (
      ...
      (to "larsi" "misc")
      "spam")

私の経験では、これで事実上全てが正しいグループに分類されます。まあ、それでもときどき spam グループをチェックして、正しいメールがあるかチェックしなくてはいけませんけどね。もしあなたは自分が良いネットワーク市民であると思っているなら、それぞれの押し付け宣伝メールの関係当局に苦情を送り付けることさえもできます --- 暇なときにでもね。

また、あなたが怠け者のネットワーク市民でもあるなら、 gnus-junk.el パッケージによって自動的に苦情をいう方が良いと思うかもしれません。これは

<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html> から「無料で」利用できます。ほとんどの spam メールは自動的に送られているので、ちょっとだけ宇宙のバランスがとれるかもしれません。

これで私のところでは動いています。これでみんなは簡単な方法で私に連絡を取ることができ (普通に r を押すだけでできる)、私は spam に煩わされることは全くありません。得々状態です。私の意見としては、 From ヘッダーに偽造して存在しないドメインに送らせるのはキタナイです。

いろいろのいろいろ
=========

gnus-home-directory
     全ての gnus のパス変数はこの変数によって初期化されます。その初期設定値は ~/ です。

gnus-directory
     たくさんの gnus 格納パス変数はこの変数によって初期化されます。その初期設定値は SAVEDIR 環境変数の値か、その変数が設定されていない場合は ~/News/ です。

     .gnus.el ファイルが読まれたときは gnus のほとんどはすでに読み込まれているということに注意してください。これはつまり、この変数を .gnus.el の中で設定しても、この変数によって初期化される他のディレクトリー変数は正しく設定されないだろうということです。この変数は代わりに .emacs で設定してください。

gnus-default-directory
     上記の変数には全く関係ありません --- この変数は全ての gnus バッファーのディフォルトディレクトリーをどうすべきかを設定します。もし C-x C-f のような命令を実行すると、現在のバッファーのディフォルトディレクトリーを起点にしたプロンプトが出てくるでしょう。

     この変数が nil (これが初期設定値) であれば、 gnus を起動したときにあなたがいたバッファーのディフォルトディレクトリーがディフォルトディレクトリーになるでしょう。

gnus-verbose
     この変数は 0 から 10 まで間の整数です。大きい数字ほどたくさんのメッセージが表示されます。この変数が 0 であれば gnus は何のメッセージも見せません。これが 7 (初期設定値) であれば特に重要なメッセージが表示され、10 であれば gnus は決してお喋りを止めず、たくさんのメッセージであなたにめまいを起こさせるでしょう。

gnus-verbose-backends
     この変数は gnus-verbose と同様に動作しますが、gnus 本体ではなく gnus のバックエンドに対して適用されます。

nnheader-max-head-length
     バックエンドが記事のヘッダーをまっすぐ読んでいるときは、できる限り少ない量だけを読もうと努力します。この変数 (初期設定値 4096) は、バックエンドがヘッダーと本文の間の区切り行を見つけるまでに読み込もうとする絶対最大長を指定します。この変数が nil であれば、読み込み上限はありません。もし t であれば、バックエンドは記事を部分部分で読み込もうとはせず、記事全体を読み込みます。これは ange-ftp や efs のあるバージョンで意味をもちます。

nnheader-head-chop-length
     この変数 (初期設定値 2048) は、前記の操作を行っているときに、どれくらいの大きさの単位で各記事を読み込むかを設定します。

nnheader-file-name-translation-alist
     これはファイル名の文字をどのように変換するかを指定する連想リストです。例えば、もし : があなたのシステムではファイル名の文字としては使えない場合 (あなたは OS/2 ユーザです) 、以下のようにすることができます。

          (setq nnheader-file-name-translation-alist
                '((?: . ?_)))

     実際には、これは OS/2 と (くそ) MS Windows システム上でのこの変数の初期設定値です。

gnus-hidden-properties
     これは ``不可視'' テキストを隠すために使われる属性のリストです。ほとんどのシステムでは初期設定値は (invisible t intangible t) で、これは不可視テキストを見えなくして触れなくします。

gnus-parse-headers-hook
     ヘッダーを解釈する前に呼び出されるフック。これは例えば、取得したヘッダーの統計情報を取るとか、あるいはある種のヘッダーを取り除くことに使うことができます。まあ、私は何でこんなものが欲しいかよくわかんないんだけどね。

gnus-shell-command-separator
     二つのシェル命令を区切るのに使用される文字列。初期設定値は ; です。

終わり
***

はい、以上がマニュアルです---あなたはもう自分自身の人生を送る事ができます。連絡をとって下さい。あなたの猫に今日は、といっておいて下さい。

おお、神よ---さよならを耐える事はできません。(すすり泣き。)

Ol' Charles Reznikoff はそれを非常によく現していますので、ここは彼のために譲ります:

     Te Deum

     Not because of victories

     I sing,

     having none,

     but for the common sunshine,

     the breeze,

     the largess of the spring.

     Not for victory

     but for the day's work done

     as well as I was able;

     not for a seat upon the dais

     but at the common table.

試訳:

     Te Deum

     勝利したからではなく

     私は歌う

     何も無いけれど

     あの日光や

     息吹や

     春の大きさのために

     勝利のためではなく

     一日の労働のために

     また、それを達成できたことに

     高座の上の席のためではなく

     普通のテーブルのところで

付録
**

歴史
==

GNUS は 梅田 政信氏によって書かれました。94年の夏が忍び寄ってくるころ、Lars Magne Ingebrigtsen は飽きてきて、Gnus を書き直そうと決心しました。

この無礼を行った人物を調べてみたいのなら、あなたの (くそ！) ウェブブラウザーを http://www.stud.ifi.uio.no/~larsi/ に向ける事ができます。これは新しくて粋な版の gnus の第一配布場所で、Newsrc をぶっ壊して人々を激怒されるサイトとして知られています。

最初のアルファ版の開発期間に、新しい Gnus は ``(ding) Gnus'' と呼ばれていました。(ding) はもちろん、ding is not Gnus の短縮形で、これは全く完全な嘘ですが、だれがそんなことを気にするでしょうか？(ところで、この短縮形の ``Gnus'' はおそらく梅田さんの意図通り ``ニュース'' と発音されるべきで、そうするともっと適切な名前になります。そう思いませんか？)

どちらにせよ、全てのエネルギーを新しい元気の良い名前を付けるのに使い果たした後、その名前は あまりに 元気が良すぎるという事になり、それを ``Gnus'' と再び命名しました。でも、今回は大文字と小文字を混ぜています。 ``Gnus'' と ``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'' としてリリースされました (67 リリース)。

1997年9月13日に、Quassia Gnus が開始され、37リリース続きました。それは ``Gnus 5.6'' として1998年3月8日にリリースされました。

もし接頭辞を持った版の Gnus -- ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' -- に出会っても、混乱しないでください。あなたが恐がっている事を知られてはいけません。後ろに下がりなさい。ゆっくりと。他に何をしても、走っては行けません。それが届かくなるまで、静かに歩き去りなさい。適切にリリースされた版の Gnus を見つけて、代わりにそれに寄り添って下さい。

なぜ？
---

Gnus の目的は何ですか？

私は、あなたの考え付く事を全てできる ``すばらしい'' ``かっこいい'' ``いかす'' ``はやりの'' ニュースリーダを提供したいと思います。これは私の大元の動機ですが、Gnus の作業をしている間に、この世代のニュースリーダーは本当に石器時代に属しているという事が明らかになりました。ニュースリーダーは、インターネットの幼児期からほとんど発展していませんでした。もしｋ現在の増加率で量が増加しつづければ、全ての現在のニュースリーダーは全く役に立たなくなるでしょう。一日に1000やもっとたくさんの新しい記事のあるニュースグループを扱うにはどうすれば良いのでしょう？ 投稿をする百万やそれより多い人々に遅れないように付いていくにはどうすれば良いのでしょう？

Gnus はこれらの質問に本当の解決を提案しますが、私は Gnus がニュースを読み、取得するための新しい方法を実験する場として使われて欲しいです。梅田さんのニュースリーダーをバックエンドから分離するという賢明な方針を拡張する事によって、Gnus はメールを取得したり、違ったところからニュースを取得するための新しいバックエンドを書きたい人のために、簡単で単純なインターフェースを提供しています。私は、役に立つであろうという部分にすべて、カスタマイズのためのフックを加えました。それをする事によって、探検し、発明したい全ての人を招いているのです。

おそらく Gnus は完成する事はないのかもしれません。 C-u 100 M-x all-hail-emacs と C-u 100 M-x all-hail-xemacs です。

互換性
---

Gnus は GNUS と完全に互換性があるように設計されています。ほとんど全てのキーバインディングはそのまま残っています。もちろん、多くのキーバインディングが追加されましたが、一つか二つのあいまいな場合を除いて、古いバインディングが変更された事はありません。

我々のモットーは:

     鋼鉄の骨組みの空高く。

です。

全ての命令はその名前が変わっていません。いくつかの内部関数は名前を変えました。

gnus-uu パッケージは劇的に変化しています。See Decoding Articles.

一つの主要な互換性の質問は、いくつかの概略バッファが存在する事です。全てのグループを読み込むときに関連する変数はそれが属する概略バッファのバッファ固有です。多くの重要な変数はそれの全体の版にも複製されますが、概略バッファで命令が実行されると、この変更は、あなたが注意していないと、正しくない値になるかも知れません。

GNUS の内部の知識に依存した全てのコードは実行できないでしょう。2つ例を挙げます: gnus-newsrc-alist の並び替え (もしくは、実際は何らかの方法でそれを変更する事) は絶対に禁止されています。 Gnus はこの連想リストの登録を指し示すハッシュテーブルを保持しており (それは多くの関数の速度を上げます)、直接連想リストを変更する事は異常な結果をもたらすでしょう。

古い hilit19 のコードは全く動作しません。実際のところ、おそらく全ての hilit コードを全ての Gnus のフック (gnus-group-prepare-hook と gnus-summary-prepare-hook) から取り除くべきでしょう。Gnus はハイライトのためのいろいろな統合された関数を提供します。これらはもっと速くもっと正確です。全ての人の人生を楽にするために、Gnus は初期設定で全ての hilit フックから全ての hilit 呼び出しを取り除きます。きたないもの！ とんでけ！

expire-kill のようなパッケージはもう動作しません。実際、Gnus を使い始めたときには、おそらく全ての古い GNUS パッケージ (と他のコード) を消去するべきでしょう。GNUS に実行させるために書いたコードは、Gnus が既に実行しているという事は良くある事です。 (くすくす。)

物事を実行する古い方法はまだ使用できますが、新しい方法だけがこのマニュアルに記載されています。もしこのマニュアルを読んでいる間に何かをする新しい方法を発見しても、古い方法を止めなければならないという事ではありません。

Gnus は全ての GNUS 起動ファイルを理解します。

全体として、GNUS の内部に依存したコードをほとんど書いていない普通の利用者は問題に苦しむ事はないでしょう。問題が起これば、魔法の命令 M-x gnus-bug を実行する事によって私に知らせて下さい。

非常に よくバグ報告を送る癖があるのであれば、しばらくすると役に立つ help バッファがうるさいと感じるかもしれません。そうであれば、それが表示されるのを避けるために、gnus-bug-create-help-buffer を nil に設定して下さい。

一致性
---

ここには手がかりの無い反抗はありません、奥さん。我々は全ての知られている標準に沿っています。もちろん、我々が賛成できない標準と/もしくは習慣は除きますが。

RFC 822
     この標準への知られている違反はありません。

RFC 1036
     この標準も知られている違反はありません。

Son-of RFC 1036
     これにはいくつかの違反があります。

     MIME
          Gnus は MIME の扱いをせず、この標準になるものは すごく良いと考えているので、我々はここに大きな穴が空いている事になります。

     X-Newsreader
          これは ``つまらないヘッダー'' と考えられていますが、私は消費者の情報であると見なしています。tin と Netscape から送られてくる非常に多くの様式に沿っていない記事を見た後で、私はそれらを記事を投稿するためには使わない方が良いという事を知りました。もし X-Newsreader ヘッダーが無ければ私はその情報を得る事はなかったでしょう。

上に書かれている文章に関する事で、Gnus がそれを満たしていないような動作をしている事に気付いたら、ためらわずに Gnus タワーと我々に知らせて下さい。

Emacsen
-------

Gnus は以下のもので動作します:

  * Emacs 19.32 とそれ以降。

  * XEmacs 19.14 とそれ以降。

  * Emacs 19.32 とそれ以降に基づいた Mule。

Gnus はこれより古いどんな Emacsen でも完全に動作しないでしょう。少なくとも、信頼できる動作はしないでしょう。

いろいろなプラットフォームの Gnus の間にはいくつかの漠然とした違いがあります---XEmacs はもっと画像機能 (ロゴとツールバー) を特徴にしています--しかし、その他は、全ての Emacsen でほとんど同じはずです。

貢献者
---

新しい Gnus の版は (ding) メーリングリストの全ての人の助けが無ければできなかったでしょう。一年以上、私は毎日とてもたくさんの素敵なバグレポートを受け取り、そのそれぞれが私を喜びで満たしました。愛撫。このリストの人々は忍耐を超えて私の ``あぁ、それはすばらしい考えだ <type type>、うん、私は待たずにそれをすぐリリースしよう <ship off>、それは全く動作しない <type type>、うん、私はすぐに出そう <ship off> いや、纏う、それは全く動作しないぞ''' というリリースに関する主義を変えて試してきた人々です。 Micro$oft---あぁ。アマチュア。私は もっと 悪い。 (もしくは、``より悪い''？ ``もっと悪い''？ ``最悪''？)

私はこの機会にこの学会に... おおっと、違った。

  * 梅田 政信---元の GNUS を書いた人です。

  * Per Abrahamsen--custom、スコア、ハイライトと SOUP コード (他の多くの事と共に)。

  * Luis Fernandes---デザインとグラフィック。

  * Erik Naggum---援助、考え、サポート、コードとその他。

  * Wes Hardaker---gnus-picon.el と picon の部分のマニュアル (see Picons)。

  * Kim-Minh Kaplan---picon コードに置ける更なる作業。

  * Brad Miller---gnus-gl.el と Grouplens の部分のマニュアル (see GroupLens)。

  * Sudish Joseph---数え切れないほどのバグの修正。

  * Ilja Weis---gnus-topic.el。

  * Steven L. Baur---たくさんのたくさんのたくさんのバグの発見と修正。

  * Vladimir Alexiev---refcard とリファレンスの小冊子。

  * Felix Lee & Jamie Zawinski---私は Felix Lee と JWZ の XGnus 配布からいくつかの部分を盗みました。

  * Scott Byer---nnfolder.el の拡張と改訂。

  * Peter Mutsaers---古事記事のスコアコード。

  * Ken Raebburn---POP メールサポート。

  * Hallvard B Furuseth---いろいろな小さな物や部分、特に .newsrc ファイルを扱う部分。

  * Brian Edmonds---gnus-bbdbb.el。

  * David Moore--nnvirtual.el の改訂と多くの他の事。

  * Kevin Davidson---ding の名前を思い付きました。ですから、彼を責めて下さい。

  * Fran,Agois Pinard---多くの、多くの興味深く完全なバグレポートと autoconf のサポート。

このマニュアル (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, David Charlap, Dan Christensen, Kevin Christian, Michael R. Cook, Glenn Coombs, Frank D. Cringle, Geoffrey T. Dairiki, Andre Deparade, Ulrik Dickow, Dave Disser, Rui-Tao Dong, Joev Dubach, Michael Welsh Duggan, Dave Edmondson, Paul Eggert, Enami Tsugutomo, 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, Raja R. Harinath, Yoshiki Hayashi, P. E. Jareth Hein, Hisashige Kenji, Marc Horowitz, Gunnar Horrigmo, Richard Hoskins, Brad Howes, Fran,Agois Felix Ingrand, Ishikawa Ichiro, Lee Iverson, Iwamuro Motonori, Rajappa Iyer, Andreas Jaeger, Randell Jesup, Fred Johansen, Gareth Jones, Simon Josefsson, Greg Klanderman, Karl Kleinpaste, Peter Skov Knudsen, Shuhei Kobayashi, Koseki Yoshinori, Tatsuya Ichikawa, Thor Kristoffersen, Jens Lautenbacher, Martin Larose, Seokchan 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, Erik Toubro Nielsen, Hrvoje Niksic, Andy Norman, Fred Oberhauser, C. R. Oldham, Alexandre Oliva, Ken Olstad, Masaharu Onishi, Hideki Ono, William Perry, Stephen Peters, Jens-Ulrik Holger Petersen, Ulrich Pfeifer, Matt Pharr, John McClary Prevost, Bill Pringlemeir, 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, Trung Tran-Duc, Aaron M. Ucko, Aki Vehtari, Didier Verna, Jan Vroonhof, Stefan Waldherr, Pete Ware, Barry A. Warsaw, Christoph Wedler, Joe Wells, Katsumi Yamaoka, and Shenghuo Zhu.

それぞれの人々が行った事の完全な概観を得るために、ChangeLog が Gnus のアルファ配布には含まれていて、豊富な読み物を与えるでしょう。(550KB といくらか)。

私が忘れた全ての人に謝罪します。間違いなくたくさんの人を忘れている事でしょう。

わぁ、これはなんとも多い人のリストだなぁ。おそらく実際に Gnus 入るという事に違いないでしょう。それに誰が感謝したでしょう！

新しい機能
-----

このリストは、もちろん、たいていの 重要な新しい機能に関する短い概観でしかありません。いいえ、本当はそうではありません。もっともっとたくさんのものがあります。はい、我々は創造性の完全な効果を感じているのです。

(ding) Gnus
...........

Gnus 5.0/5.1 の新しい機能:

  * 全てのバッファの外観はフォーマットのような変数 (see Group Buffer Format と see Summary Buffer Format) によって設定を変える事ができるようになりました。

  * ローカルスプールと、いくつかの NNTP サーバーを同時に使う事がでるようになりました (see Select Methods)。

  * グループを事実上のグループに結合できるようになりました (see Virtual Groups)。

  * 多くの違ったメール様式 (see Getting Mail) を読めるようになりました。全てのメールバックエンドは便利なメール期限切れ消去機構を実装しています (see Expiring Mail)。

  * Gnus は根っこ (root) を失ったスレッドを集めるためのいろいろな戦略 (それによってまばらな副スレッドを一つのスレッドにする) を使ったり、一旦戻って完全なスレッドをくみ上げるのに十分なヘッダーを取得しする事ができます (see Customizing Threading)。

  * 切られたグループ (killed group) はぐループバッファに表示する事ができて、それも読む事ができます (see Listing Groups)。

  * Gnus は部分的グループ更新をする事ができます---2,3 のグループの新しい記事を調べるために現状ファイル全体をを取得する必要はありません (see The Active File)。

  * Gnus はグループの段階的購読度を実装しました (see Group Levels)。

  * 任意の数の基準に従って記事にスコアを付ける事ができます (see Scoring)。あなたのために記事をどのようにスコアを付けるかを Gnus に見つけさせる事もできます (see Adaptive Scoring)。

  * Gnus は普通の Emacs の方法で自動保存されるドリブルバッファを保持していますので、あなたのマシンが落っこちたときでもあまりデータを失わないでしょう (see Auto Save)。

  * Gnus は今やファイル .emacs をぐちゃぐちゃにする事を避けるために専用の起動ファイル (.gnus) を持つようになりました。

  * グループと記事の両方にプロセス印を付けることができ、全ての印の付いた項目に演算をする事ができます (see Process/Prefix)。

  * グループの一部を grep して、その結果からグループを作る事ができます (see Kibozed Groups)。

  * えーと、全てにしたがって、グループの一覧を挙げる事ができます (see Listing Groups)。

  * 外部サーバーを概観して、それらのサーバーのグループを購読する事ができます (see Browse Foreign Server)。

  * Gnus はサーバーとの2つ接続で、記事を非同期にとってくる事ができます (see Asynchronous Fetching)。

  * 記事をローカルにキャッシュする事ができます (see Article Caching)。

  * uudecode の関数が拡張され、一般化されました (see Decoding Articles)。

  * 過去の GNUS のあまり知られていない機能の uuencode された記事をまだ投稿する事ができます (see Uuencoding and Posting)。

  * 親記事 (と他の記事) の取得は今や、実際に突然故障する事無く動作するようになりました (see Finding the Parent)。

  * Gnus は FAQ とグループの記述を取得する事ができます (see Group Information)。

  * 記事をハイライトし、カスタマイズする事ができます (see Customizing Articles)。

  * URL と他の外部参照がボタンになるようになりました (see Article Buttons)。

  * Gnus のウィンドウとフレームの設定でたくさんの変な事をできるようになりました (see Windows Configuration)。

  * キーボードを使う代わりに、ボタンをクリックできるようになりました (see Buttons)。

September Gnus
..............

Gnus 5.2/5.3 の新しい機能:

  * 新しいメッセージ作成モードが使われます。mail-mode、 rnews-reply-mode と gnus-msg の全ての古いカスタマイズ変数は今や旧式になりました。

  * Gnus は まばら スレッドを作成する事ができるようになりました---スレッドの失われた記事があるところは空の節で表現されるようになっています (see Customizing Threading)。

          (setq gnus-build-sparse-threads 'some)

  * 外に出ていく記事は特別な保管サーバーに保存されるようになりました (see Archived Messages)。

  * 記事が参照されたときに、スレッドの部分作成が起こるようになりました。

  * Gnus は GroupLens の予言を使う事ができるようになりました (see GroupLens)。

  * Picons (personal icons) (個人アイコン) が XEmacs で表示できるようになりました (see Picons)。

  * trn のような木バッファが表示されるようになりました (see Tree Display)。

          (setq gnus-use-trees t)

  * nn のような取って読むマイナーモードが概略バッファで使う事ができるようになりました (see Pick and Read)。

          (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)

  * バイナリーグループで特別なバイナリーマイナーモードを使う事ができるようになりました (see Binary Groups)。

  * Group が折り畳みトピック階層にグループ分けできるようになりました (see Group Topics)。

          (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

  * Gnus が失敗メールを再送できるようになりました (see Summary Mail Commands)。

  * グループがスコアを持つ事ができるようになり、訪れる回数に基づいて並び替えをできるようになりました (see Group Score)。

          (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)

  * グループにプロセス印を付けられるようになり、グループのぐループに命令が実行できるようになりました (see Marking Groups)。

  * 事実上のグループでキャッシュができるようになりました。

  * nndoc は全ての集配配送、メールボックス、rnews ニュース一括、 ClariNet 短収集、そして全てのその他を理解できるようになりました (see Document Groups)。

  * Gnus は SOUP パケットを作成/読み込みをするための新しいバックエンド (nnsoup) を持っています。

  * Gnus キャッシュがずっと速くなりました。

  * グループを多くの基準に従って並び替えできるようになりました (see Sorting Groups)。

  * アドレスのリストと期限切れ消去の時間を設定する新しいグループパラメータが導入されました (see Group Parameters)。

  * 全てのフォーマット指定が使われるフェイスを指定できるようになりました (see Formatting Fonts)。

  * M P 副マップにプロセス印の付いた記事の設定/削除/実行のためのいくつかの命令があります (see Setting Process Marks)。

  * 広い範囲の基準に基づいて、概略バッファが可能な記事の部分の表示に制限できるようになりました。これらの命令は / 副マップのキーにバインドされています (see Limiting)。

  * * 命令によって、記事を永続にする事ができるようになりました (see Persistent Articles)。

  * 記事の要素を隠す全ての関数は切り替え関数になりました。

  * 記事のヘッダーがボタンにする事ができるようになりました (see Article Washing)。

          (add-hook 'gnus-article-display-hook
                    'gnus-article-add-buttons-to-head)

  * 全てのメールバックエンドで Message-ID による記事の取得を使用できるようになりました。

  * 重複メールを適切に扱う事ができるようになりました (see Duplicates)。

  * 全ての概略モード命令が記事バッファから直接使用できるようになりました (see Article Keymap)。

  * フレームが gnus-buffer-configuration の部分になる事ができます (see Windows Configuration)。

  * デーモンのプロセスでメールを再走査することができるようになりました (see Daemons)。

  * Gnus はスパムを根絶やしにするために NoCeM ファイルを使う事ができるようになりました (see NoCeM)。

          (setq gnus-use-nocem t)

  * グループを永久可視にする事ができるようになりました (see Listing Groups)。

          (setq gnus-permanently-visible-groups "^nnml:")

  * カスタマイズを簡単にするために多くの新しいフックが導入されました。

  * Gnus は Mail-Copies-To ヘッダーに注意を払うようになりました。

  * References ヘッダーを集める事によりスレッドを集める事ができるようになりました (see Customizing Threading)。

          (setq gnus-summary-thread-gathering-function
                'gnus-gather-threads-by-references)

  * 既読記事は再取得を避けるために特別なバックログバッファに貯められるようになりました (see Article Backlog)。

          (setq gnus-keep-backlog 50)

  * 簡単な扱いのために、現在の記事のきれいな複製がいつも別バッファに蓄積されるようになりました。

  * Gnus がどこに記事を保存するかを提案できるようになりました (see Saving Articles)。

  * Gnus は保存するときに同じくらいの促進をしなくても良いようになりました (see Saving Articles)。

          (setq gnus-prompt-before-saving t)

  * uu は記事を取得している間に非同期で復号化されたファイルを閲覧できるようになりました (see Other Decode Variables)。

          (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)

  * 引用された文章に対して、記事バッファでの折り返しが適切に動作するようになりました (see Article Washing)。

  * 隠された引用文は隠す事を切り替えるボタンを加え、どのくらいの引用文を隠すかをカスタマイズできるようになりました (see Article Hiding)。

          (setq gnus-cited-lines-visible 2)

  * 退屈なヘッダーを隠す事ができます (see Article Hiding)。

          (add-hook 'gnus-article-display-hook
                    'gnus-article-hide-boring-headers t)

  * スコアの初期値がメニューバーから設定できるようになりました。

  * 出て行く記事の更なる構文チェックができるようになりました。

Red Gnus
........

Gnus 5.4/5.5 の新しい機能:

  * nntp.el は非同期の流儀で完全に改訂されました。

  * スコア付けは and、or、not のような論理演算子と、親の再方向で実行できるようになりました (see Advanced Scoring)。

  * 記事の洗濯状態が記事モード行に表示されるようになりました (see Misc Article)。

  * gnus.el が多くの小さいファイルに分割されました。

  * Message-ID に基づいた、重複記事の抑制がなされるようになりました (see Duplicate Suppression)。

          (setq gnus-suppress-duplicates t)

  * どのスコアと適応ファイルがホームのスコアと適応ファイルであるかを指定する (see Home Score File) 新しい変数が加えられました。

  * nndoc が簡単に拡張可能になるように改訂されました (see Document Server Internals)。

  * グループは親のトピックからグループパラメータを継承できるようになりました (see Topic Parameters)。

  * 記事編集が改訂され、実際に使用可能になりました。

  * 署名がもっと知的な方法で認識されるようになりました (see Article Signature)。

  * 概略ピックモードがもっと nn のようになりました。行数が表示されて、命令 . が記事を取るために使う事ができるようになりました (Pick and Read)。

  * あるサーバーから別のサーバーへ .newsrc.eld を移動する命令が加えられました (see Changing Servers)。

  * 今や、バッファの行を作成するときに、抑制される ``おもしろくない'' 部分を指定する方法があります (see Advanced Formatting)。

  * グループバッファでのいくつかの命令は M-C-_ で元に戻す事ができるようになりました (see Undo)。

  * 新しいスコアの型 w を使う事で、語にスコア付けをする事が可能になりました (see Score File Format)。

  * 表題に1語1語を基にして適応スコアをできるようになりました (see Adaptive Scoring)。

          (setq gnus-use-adaptive-scoring '(word))

  * スコアが腐敗できるようになりました (see Score Decays)。

          (setq gnus-decay-scores t)

  * 日付のヘッダーに正規表現を使ってスコア付けを実行できるようになりました。日付はまず短縮 ISO 8601 様式で正規化されます (see Score File Format)。

  * 基本サーバーの記事に関する全てのデータを取り除く命令が加えられました (see Changing Servers)。

  * 文書の集合を読むための新しい命令 (nndoc と nnvirtual の上で) が加えられました---M-C-d (see Really Various Summary Commands)。

  * プロセス印の設定が push と pop できるようになりました (see Setting Process Marks)。

  * 新しいメールからニュースへのバックエンドが NNTP サーバーが投稿を許可していない場合でも、投稿できるようになりました (see Mail-To-News Gateways)。

  * ウェブ検索エンジン (DejaNews、Alta Vista、InReference) からの検索結果を読む新しいバックエンドが加えられました (see Web Searches)。

  * 標準の並び替え関数を使ってグループの中のトピックを並び代えする事ができ、それぞれのトピックが独立して並び替えできるようになりました (see Topic Sorting)。

  * グループの一部分が独立して並び替えできるようになりました (Sorting)。

  * キャッシュされた記事がグループに入れられるようになりました (see Summary Generation Commands)。

  * スコアファイルがもっと信頼できる順番で適用できるようになりました (see Score Variables)。

  * メールメッセージがどこに行くかの報告を作成する事ができるようになりました (see Splitting Mail)。

  * 入って来たメールを保存する前にがらくたを取り除くフックと関数がもっと追加されました (see Washing Mail)。

  * 強調文が適切にフォントが変更されるようになりました:

          (add-hook 'gnus-article-display-hook
                    'gnus-article-emphasize)

Quassia Gnus
............

Gnus 5.6 の新しい機能:

  * Gnus をオフラインニュースリーダーとして使う新機能が加えられました。過剰なほどの新しい命令とモードが追加されました。完全な話に付いては see Gnus Unplugged を見て下さい。

  * nndraft バックエンドが戻ってきましたが、依然とは違うように動作するようになりました。全てのメッセージバッファは nndraft グループの記事でもあり、それは自動的に作成されます。

  * gnus-alter-header-function がヘッダーの値を変えるために使われるようになりました。

  * gnus-summary-goto-article が Message-ID を受け付けるようになりました。

  * リージョンの外のメッセージの本文の文章を消去するための新しいメッセージ命令があります: C-c C-v。

  * C-u C-c C-c によって nnvirtual グループを生成しているグループに投稿できるようになりました。

  * nntp-rlogin-program---カスタマイズを簡単にするための新しい変数です。

  * gnus-article-edit-mode の C-u C-c C-c は記事バッファの再ハイライトを禁止するようになりました。

  * gnus-boring-article-headers に新しい要素があります--- long-to。

  * M-i シンボル接頭引数命令があります。詳細は "Symbolic Prefixes" の部分を見て下さい。

  * 概略バッファの L と I はファイル "all.SCORE" にスコア法則を加えるためにシンボル接頭引数 a を受け付けるようになりました。

  * 変数 gnus-simplify-subject-functions により単純化をもっと制御できるようになりました。

  * A T---現在のスレッドを取得するための新しい命令です。

  * / T---現在のスレッドを制限に含めるための新しい命令です。

  * M-RET は引用文を止めるための新しいメッセージ命令です。

  * \\1 表現が nnmail-split-methods で有効になりました。

  * 関数 custom-face-lookup が取り除かれました。あなたの初期化ファイルでこの関数を使っているのなら、代わりに face-spec-set を使うように書き直さなければなりません。

  * 投稿取り消しは現在の選択方法を使うようになりました。シンボル接頭辞 a は普通の投稿方法を強制します。

  * M******** sm*rtq**t*s を適切な文章に翻案する新しい命令があります--- W d。

  * nntp のより簡単なデバッグのために、nntp-record-commands を nil でない値に設定する事ができます。

  * nntp は ~/.authinfo を使うようになり、これは .netrc のようなファイルで、どこでどのように AUTHINFO を NNTP サーバーに送るかを制御するためのものです。

  * 概略バッファのグループパラメータを編集するための命令が加えられました。

  * メールがどこに分割されたかの履歴を使用可能になりました。

  * 新しい記事日付命令が加えられました---article-date-iso8601。

  * gnus-score-thread-simplify を設定する事によりスレッドを作成しているときは表題が単純化されるようになりました。

  * メッセージで引用をするための新しい関数が加えられました--- message-cite-original-without-signature。

  * article-strip-all-blank-lines---新しい記事命令です。

  * 記事の終わりまでを切る新しいメッセージ命令が加えられました。

  * 変数 gnus-adaptive-word-minimum を使う事により最小限適応スコアを指定する事ができます。

  * 命令 gnus-start-date-timer により ``過失日付'' 記事ヘッダーが継続的に更新されるようになりました。

  * ウェブ listserv アーカイブが nnlistserv バックエンドにより読む事ができるようになりました。

  * 古い dejanews アーカイブが nnweb から読む事ができるようになりました。

最新の機能
-----

todo list としても知られています。次の千年祭までには確実に実装されるでしょう。

恐れて下さい。非常に恐れて下さい。

(この一覧に現われている機能は必ずしも私がそれを実際に実装しようと決めたというわけではありません。それは私がおもしろそうだな、と思ったというだけです。)

(はい、これは実際の、最優先からその次への todo list です。)

  * Native MIME support is something that should be done.

  * Really do unbinhexing.

  * 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.

  * A way to continue editing the latest Message composition.

  * http://www.sonicnet.com/feature/ari3/

  * facep is not declared.

  * 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.

  * Interacting with rmail fcc isn't easy.

  * Hypermail:
          <URL:http://www.falch.no/people/pepper/DSSSL-Lite/archives/>
          <URL:http://www.eit.com/software/hypermail/hypermail.html>
          <URL:http://homer.ncm.com/>
          <URL:http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTML_Converters/>
          http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610/index.html
          <URL:http://union.ncsa.uiuc.edu/HyperNews/get/www/html/converters.html>
          http://www.miranova.com/gnus-list/

  * ^--  is made into - in LaTeX.

  * gnus-kill is much slower than it was in GNUS 4.1.3.

  * when expunging articles on low score, the sparse nodes keep hanging on?

  * starting the first time seems to hang Gnus on some systems.  Does NEWGROUPS answer too fast?

  * nndir doesn't read gzipped files.

  * FAQ doesn't have an up node?

  * when moving mail from a procmail spool to the crash-box, the crash-box is only appropriate to one specific group.

  * `t' `t' makes X-Faces disappear.

  * nnmh-be-safe means that crossposted articles will be marked as unread.

  * Orphan score entries don't show on "V t" score trace

  * when clearing out data, the cache data should also be reset.

  * rewrite gnus-summary-limit-children to be non-recursive to avoid exceeding lisp nesting on huge groups.

  * expunged articles are counted when computing scores.

  * implement gnus-batch-brew-soup

  * ticked articles aren't easy to read in pick mode -- `n' and stuff just skips past them.  Read articles are the same.

  * topics that contain just groups with ticked articles aren't displayed.

  * nndoc should always allocate unique Message-IDs.

  * If there are mail groups the first time you use Gnus, Gnus'll make the mail groups killed.

  * no "no news is good news" when using topics.

  * when doing crosspost marking, the cache has to be consulted and articles have to be removed.

  * nnweb should fetch complete articles when they are split into several parts.

  * scoring on head immediate doesn't work.

  * finding short score file names takes forever.

  * canceling articles in foreign groups.

  * nntp-open-rlogin no longer works.

  * C-u C-x C-s (Summary) switches to the group buffer.

  * move nnmail-split-history out to the backends.

  * nnweb doesn't work properly.

  * using a virtual server name as `gnus-select-method' doesn't work?

  * 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.

  * warn user about `=' redirection of a group in the active file?

  * really unbinhex binhex files.

  * take over the XEmacs menubar and offer a toggle between the XEmacs bar and the Gnus bar.

  * 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)'

  * nnml .overview directory with splits.

  * asynchronous cache

  * postponed commands.

  * the selected article show have its Subject displayed in its summary line.

  * when entering groups, get the real number of unread articles from the server?

  * sort after gathering threads -- make false roots have the headers of the oldest orphan with a 0 article number?

  * nndoc groups should inherit the score files of their parents?  Also inherit copy prompts and save files.

  * command to start up Gnus (if not running) and enter a mail mode buffer.

  * allow editing the group description from the group buffer for backends that support that.

  * gnus-hide,show-all-topics

  * groups and sub-topics should be allowed to mingle inside each topic, and not just list all subtopics at the end.

  * a command to remove all read articles that are not needed to connect threads -- `gnus-summary-limit-to-sparse-unread'?

  * a variable to turn off limiting/cutting of threads in the tree buffer.

  * a variable to limit how many files are uudecoded.

  * add zombie groups to a special "New Groups" topic.

  * server mode command: close/open all connections

  * put a file date in gnus-score-alist and check whether the file has been changed before using it.

  * on exit from a digest group, go to the next article in the parent group.

  * hide (sub)threads with low score.

  * when expiring, remove all marks from expired articles.

  * gnus-summary-limit-to-body

  * a regexp alist that says what level groups are to be subscribed on.  Eg. -- `(("nnml:" . 1))'.

  * easier interface to nnkiboze to create ephemeral groups that contain groups that match a regexp.

  * allow newlines in <URL:> urls, but remove them before using the URL.

  * If there is no From line, the mail backends should fudge one from the "From " line.

  * fuzzy simplifying should strip all non-alpha-numerical info from subject lines.

  * gnus-soup-brew-soup-with-high-scores.

  * nntp-ping-before-connect

  * command to check whether NOV is evil.  "list overview.fmt".

  * when entering a group, Gnus should look through the score files very early for `local' atoms and set those local variables.

  * message annotations.

  * topics are always yanked before groups, and that's not good.

  * (set-extent-property extent 'help-echo "String to display in minibuf") to display help in the minibuffer on buttons under XEmacs.

  * allow group line format spec to say how many articles there are in the cache.

  * AUTHINFO GENERIC

  * support qmail maildir spools

  * `run-with-idle-timer' in gnus-demon.

  * stop using invisible text properties and start using overlays instead

  * C-c C-f C-e to add an Expires header.

  * go from one group to the next; everything is expunged; go to the next group instead of going to the group buffer.

  * gnus-renumber-cache -- to renumber the cache using "low" numbers.

  * record topic changes in the dribble buffer.

  * `nnfolder-generate-active-file' should look at the folders it finds and generate proper active ranges.

  * nneething-look-in-files-for-article-heads variable to control whether nneething should sniff all files in the directories.

  * gnus-fetch-article -- start Gnus, enter group, display article

  * gnus-dont-move-articles-to-same-group variable when respooling.

  * when messages are crossposted between several auto-expirable groups, articles aren't properly marked as expirable.

  * nneething should allow deletion/moving.

  * TAB on the last button should go to the first button.

  * 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.

  * command for listing all score files that have been applied.

  * a command in the article buffer to return to `summary' config.

  * `gnus-always-post-using-current-server' -- variable to override `C-c C-c' when posting.

  * nnmail-group-spool-alist -- says where each group should use as a spool file.

  * when an article is crossposted to an auto-expirable group, the article should be marker as expirable.

  * article mode command/menu for "send region as URL to browser".

  * on errors, jump to info nodes that explain the error.  For instance, on invalid From headers, or on error messages from the nntp server.

  * when gathering threads, make the article that has no "Re: " the parent. Also consult Date headers.

  * a token in splits to call shrink-window-if-larger-than-buffer

  * `1 0 A M' to do matches on the active hashtb.

  * duplicates -- command to remove Gnus-Warning header, use the read Message-ID, delete the "original".

  * when replying to several messages at once, put the "other" message-ids into a See-Also header.

  * support setext: URL:http://www.bsdi.com/setext/

  * support ProleText: <URL:http://proletext.clari.net/prole/proletext.html>

  * when browsing a foreign server, the groups that are already subscribed should be listed as such and not as "K".

  * generate font names dynamically.

  * score file mode auto-alist.

  * allow nndoc to change/add/delete things from documents.  Implement methods for each format for adding an article to the document.

  * `gnus-fetch-old-headers' `all' value to incorporate absolutely all headers there is.

  * function like `|', but concatenate all marked articles and pipe them to the process.

  * 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.

  * function for starting to edit a file to put into the current mail group.

  * score-find-trace should display the total score of the article.

  * "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.

  * look at procmail splitting.  The backends should create the groups automatically if a spool file exists for that group.

  * function for backends to register themselves with Gnus.

  * when replying to several process-marked articles, have all the From end up in Cc headers?  Variable to toggle.

  * command to delete a crossposted mail article from all groups it has been mailed to.

  * `B c' and `B m' should be crosspost aware.

  * hide-pgp should also hide PGP public key blocks.

  * Command in the group buffer to respool process-marked groups.

  * `gnus-summary-find-matching' should accept pseudo-"headers" like "body", "head" and "all"

  * When buttifying <URL: > things, all white space (including newlines) should be ignored.

  * Process-marking all groups in a topic should process-mark groups in subtopics as well.

  * Add non-native groups to the list of killed groups when killing them.

  * nntp-suggest-kewl-config to probe the nntp server and suggest variable settings.

  * add edit and forward secondary marks.

  * nnml shouldn't visit its .overview files.

  * allow customizing sorting within gathered threads.

  * `B q' shouldn't select the current article.

  * nnmbox should support a newsgroups file for descriptions.

  * allow fetching mail from several pop servers.

  * Be able to specify whether the saving commands save the original or the formatted article.

  * a command to reparent with the child process-marked (cf. `T ^'.).

  * I think the possibility to send a password with nntp-open-rlogin should be a feature in Red Gnus.

  * The `Z n' command should be possible to execute from a mouse click.

  * more limiting functions -- date, etc.

  * be able to limit on a random header; on body; using reverse matches.

  * a group parameter (`absofucking-total-expiry') that will make Gnus expire even unread articles.

  * a command to print the article buffer as postscript.

  * variable to disable password fetching when opening by nntp-open-telnet.

  * manual: more example servers -- nntp with rlogin, telnet

  * checking for bogus groups should clean topic alists as well.

  * canceling articles in foreign groups.

  * article number in folded topics isn't properly updated by Xref handling.

  * 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.

  * Extensive info pages generated on the fly with help everywhere -- in the "*Gnus edit*" buffers, for instance.

  * Topic movement commands -- like thread movement.  Up, down, forward, next.

  * a way to tick/mark as read Gcc'd articles.

  * a way to say that all groups within a specific topic comes from a particular server?  Hm.

  * `gnus-article-fill-if-long-lines' -- a function to fill the article buffer if there are any looong lines there.

  * `T h' should jump to the parent topic and fold it.

  * a command to create an ephemeral nndoc group out of a file, and then splitting it/moving it to some other group/backend.

  * a group parameter for nnkiboze groups that says that all kibozed articles should be entered into the cache.

  * 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.

  * nnfolder should append to the folder instead of re-writing the entire folder to disk when accepting new messages.

  * allow all backends to do the proper thing with .gz files.

  * a backend for reading collections of babyl files nnbabylfolder?

  * a command for making the native groups into foreign groups.

  * server mode command for clearing read marks from all groups from a server.

  * when following up multiple articles, include all To, Cc, etc headers from all articles.

  * a command for deciding what the total score of the current thread is.  Also a way to highlight based on this.

  * command to show and edit group scores

  * a gnus-tree-minimize-horizontal to minimize tree buffers horizontally.

  * command to generate nnml overview file for one group.

  * `C-u C-u a' -- prompt for many crossposted groups.

  * 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.

  * gnus-build-sparse-threads to a number -- build only sparse threads that are of that length.

  * have nnmh respect mh's unseen sequence in .mh_profile.

  * cache the newsgroups descriptions locally.

  * asynchronous posting under nntp.

  * be able to control word adaptive scoring from the score files.

  * a variable to make `C-c C-c' post using the "current" select method.

  * `limit-exclude-low-scored-articles'.

  * if `gnus-summary-show-thread' is a number, hide threads that have a score lower than this number.

  * split newsgroup subscription variable up into "order" and "method".

  * buttonize ange-ftp file names.

  * a command to make a duplicate copy of the current article so that each copy can be edited separately.

  * nnweb should allow fetching from the local nntp server.

  * record the sorting done in the summary buffer so that it can be repeated when limiting/regenerating the buffer.

  * nnml-generate-nov-databses should generate for all nnml servers.

  * 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.

  * M-g on a topic will display all groups with 0 articles in the topic.

  * command to remove all topic stuff.

  * allow exploding incoming digests when reading incoming mail and splitting the resulting digests.

  * nnsoup shouldn't set the `message-' variables.

  * command to nix out all nnoo state information.

  * nnmail-process-alist that calls functions if group names matches an alist -- before saving.

  * use buffer-invisibility-spec everywhere for hiding text.

  * variable to activate each group before entering them to get the (new) number of articles.  `gnus-activate-before-entering'.

  * command to fetch a Message-ID from any buffer, even starting Gnus first if necessary.

  * when posting and checking whether a group exists or not, just ask the nntp server instead of relying on the active hashtb.

  * buttonize the output of `C-c C-a' in an apropos-like way.

  * `G p' should understand process/prefix, and allow editing of several groups at once.

  * command to create an ephemeral nnvirtual group that matches some regexp(s).

  * nndoc should understand "Content-Type: message/rfc822" forwarded messages.

  * it should be possible to score "thread" on the From header.

  * hitting RET on a "gnus-uu-archive" pseudo article should unpack it.

  * `B i' should display the article at once in the summary buffer.

  * remove the "*" mark at once when unticking an article.

  * `M-s' should highlight the matching text.

  * when checking for duplicated mails, use Resent-Message-ID if present.

  * 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.

  * command for enter a group just to read the cached articles.  A way to say "ignore the nntp connection; just read from the cache."

  * `X u' should decode base64 articles.

  * a way to hide all "inner" cited text, leaving just the most recently cited text.

  * nnvirtual should be asynchronous.

  * after editing an article, gnus-original-article-buffer should be invalidated.

  * there should probably be a way to make Gnus not connect to the server and just read the articles in the server

  * allow a `set-default' (or something) to change the default value of nnoo variables.

  * a command to import group infos from a .newsrc.eld file.

  * groups from secondary servers have the entire select method listed in each group info.

  * a command for just switching from the summary buffer to the group buffer.

  * a way to specify that some incoming mail washing functions should only be applied to some groups.

  * Message `C-f C-t' should ask the user whether to heed mail-copies-to: never.

  * new group parameter -- `post-to-server' that says to post using the current server.  Also a variable to do the same.

  * the slave dribble files should autosave to the slave file names.

  * a group parameter that says what articles to display on group entry, based on article marks.

  * a way to visually distinguish slave Gnusae from masters.  (Whip instead of normal logo?)

  * Use DJ Bernstein "From " quoting/dequoting, where applicable.

  * Why is hide-citation-maybe and hide-citation different?  Also clear up info.

  * group user-defined meta-parameters.

     From: John Griffith <griffith@sfs.nphil.uni-tuebingen.de>

  * 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

  * From: Jason L Tibbitts III <tibbs@hpc.uh.edu>
          (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 "")))

  * 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.

  * 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:

          `M l <name> RET' add label <name> to current message.
          `M u <name> RET' remove label <name> from current message.
          `/ l <expr> RET' limit summary buffer according to <expr>.

          <expr> would be a boolean expression on the labels, e.g.

          `/ l bug & !fixed RET'

     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.

  * 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.

  * Please send a mail to bwarsaw@cnri.reston.va.us (Barry A. Warsaw) and tell him what you are doing.

  * 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?...

  * 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.

  * 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

  * 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.

  * 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.)

  * 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

  * Yes. I think the algorithm is as follows:

          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;

  * 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).

  * It would be nice if it also handled

     <URL:news://sunsite.auc.dk/>

     which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.

  * 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.

  * nndoc should take care to create unique Message-IDs for all its articles.

  * 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).

  * rewrite gnus-demon to use run-with-idle-timers.

  * * 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.

  * 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.

  * `unsmileyfy-buffer' to undo smileification.

  * a command to give all relevant info on an article, including all secondary marks.

  * when doing `-request-accept-article', the backends should do the nnmail duplicate checking.

  * allow `message-signature-file' to be a function to return the value of the signature file.

  * 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

  * cache the newsgroups file locally to avoid reloading it all the time.

  * a command to import a buffer into a group.

  * nnweb should allow fetching by Message-ID from servers.

  * point in the article buffer doesn't always go to the beginning of the buffer when selecting new articles.

  * a command to process mark all unread articles.

  * `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.

  * gnus-uu-mark-in-numerical-order -- process mark articles in article numerical order.

  * (gnus-thread-total-score (gnus-id-to-thread (mail-header-id (gnus-summary-article-header)))) bind to a key.

  * sorting by score is wrong when using sparse threads.

  * a command to fetch an arbitrary article -- without having to be in the summary buffer.

  * a new nncvs backend.  Each group would show an article, using version branches as threading, checkin date as the date, etc.

  * 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.

  * new Date header scoring type -- older, newer

  * use the summary toolbar in the article buffer.

  * a command to fetch all articles that are less than X days old.

  * 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.

  * 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)).

  * make it possible to cancel articles using the select method for the current group.

  * `gnus-summary-select-article-on-entry' or something.  It'll default to t and will select whatever article decided by `gnus-auto-select-first'.

  * a new variable to control which selection commands should be unselecting. `first', `best', `next', `prev', `next-unread', `prev-unread' are candidates.

  * be able to select groups that have no articles in them to be able to post in them (using the current select method).

  * be able to post via DejaNews.

  * `x' should retain any sortings that have been performed.

  * allow the user to specify the precedence of the secondary marks.  Also allow them to be displayed separately.

  * gnus-summary-save-in-pipe should concatenate the results from the processes when doing a process marked pipe.

  * a new match type, like Followup, but which adds Thread matches on all articles that match a certain From header.

  * a function that can be read from kill-emacs-query-functions to offer saving living summary buffers.

  * a function for selecting a particular group which will contain the articles listed in a list of article numbers/id's.

  * a battery of character translation functions to translate common Mac, MS (etc) characters into ISO 8859-1.

          (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)))))

  * (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? "))))

  * allow message-default-headers to be a function.

  * new Date score match types -- < > = (etc) that take floating point numbers and match on the age of the article.

  * >  > > 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.

  * all commands that react to the process mark should push the current process mark set onto the stack.

  * gnus-article-hide-pgp Selv ville jeg nok ha valgt ,Ae slette den dersom teksten matcher

          "\\(This\s+\\)?[^ ]+ has been automatically signed by"

     og det er maks hundre tegn mellom match-end og ----linja.  Men -det- er min type heuristikk og langt fra alles.

  * `gnus-subscribe-sorted' -- insert new groups where they would have been sorted to if `gnus-group-sort-function' were run.

  * gnus-(group,summary)-highlight should respect any `face' text props set on the lines.

  * use run-with-idle-timer for gnus-demon instead of the home-brewed stuff for better reliability.

  * add a way to select which NoCeM type to apply -- spam, troll, etc.

  * nndraft-request-group should tally autosave files.

  * implement nntp-retry-on-break and nntp-command-timeout.

  * gnus-article-highlight-limit that says when not to highlight (long) articles.

  * (nnoo-set SERVER VARIABLE VALUE)

  * nn*-spool-methods

  * interrupitng agent fetching of articles should save articles.

  * command to open a digest group, and copy all the articles there to the current group.

  * a variable to disable article body highlights if there's more than X characters in the body.

  * handle 480/381 authinfo requests separately.

  * include the texi/dir file in the distribution.

  * format spec to "tab" to a position.

  * Move all prompting to the new `M-n' default style.

  * command to display all dormant articles.

  * gnus-auto-select-next makeover -- list of things it should do.

  * a score match type that adds scores matching on From if From has replied to something someone else has said.

  * Read Netscape discussion groups: snews://secnews.netscape.com/netscape.communicator.unix

  * One command to edit the original version if an article, and one to edit the displayed version.

  * T v -- make all process-marked articles the children of the current article.

  * Switch from initial text to the new default text mechanism.

  * 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)?

  * New limit command---limit to articles that have a certain string in the head or body.

  * Allow breaking lengthy NNTP commands.

  * gnus-article-highlight-limit, to disable highlighting in big articles.

  * Editing an article should put the article to be edited in a special, unique buffer.

  * A command to send a mail to the admin-address group param.

  * A Date scoring type that will match if the article is less than a certain number of days old.

  * New spec: %~(tab 56) to put point on column 56

  * Allow Gnus Agent scoring to use normal score files.

  * Rething the Agent active file thing.  `M-g' doesn't update the active file, for instance.

  * 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.

  * Propagate all group properties (marks, article numbers, etc) up to the topics for displaying.

  * `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.

  * gnus-summary-limit-include-cached is slow when there are many articles in the cache, since it regenerates big parts of the summary buffer for each article.

  * Implement gnus-batch-brew-soup.

  * Group parameters and summary commands for un/subscribing to mailing lists.

  * Introduce nnmail-home-directory.

  * gnus-fetch-group and friends should exit Gnus when the user exits the group.

  * Solve the halting problem.

用語
==

ニュース (news)
     これはあなたがそのためにこのものを使いたいと思っているものです---ニュースを読む事です。ニュースは一般的には近くの NNTP サーバーから取得され、普通は全ての人に広く利用可能なものです。もしニュースを投稿すれば、全世界があなたがちょうど書いたものを読む可能性があり、それらは全ていたずらっぽくクスクス笑われるでしょう。あなたの知らないところで。

メール (mail)
     あなたに個人的に配送されるもの全てがメールです。いくつかのニュース/メールリーダー (gnus のような) はメールとニュースの違いをぼやけさせますが、そこには違いは存在します。メールは私的です。ニュースは公的です。メールを送信する事は投稿ではなく、返信はフォローアップではありません。

返信 (reply)
     あなたが読んでいるものを書いた人にメールを送る事です。

フォローアップ (follow up)
     あなたが読んでいる記事に応答して現在のニュースグループに記事を投稿する事です。

バックエンド (backend)
     Gnus はニュースとメールの両方のいろいろなバックエンドが与えた記事を得ます。Gnus は、いわゆる下に横たわっているメディアを扱う事はしません---これはすべてバックエンドによってなされます。

基本 (native)
     Gnus はいつも一つの方法 (とバックエンド) をニュースを得るための 基本、もしくは初期設定 として使います。

外部 (foreign)
     同時に任意の数の外部グループを活動状態にすることもできます。これらはニュースを取得するための、基本でなく、2番目でもないバックエンドを使うグループです。

二番目 (secondary)
     2番目のバックエンドは、基本と外部の間くらいにあるバックエンドで、ほとんど基本と同じように動作するものです。

記事 (article)
     ニュースとして投稿されたメッセージです。

メールメッセージ (mail message)
     メールで送られたメッセージです。

メッセージ
     メールメッセージもしくはニュース記事です。

ヘッド (head)
     メッセージの最上部で、認証情報 (等) が入れられているところです。

本体 (body)
     記事の残りの部分です。ヘッドでないものはすべて本体です。

ヘッダー (header)
     記事のヘッドからの行です。

ヘッダー群 (headers)
     そのような行の集合もしくは、ヘッドの集合です。もしくは、NOV 行の集合です。

NOV
     Gnus がグループに入ると、グループの全ての未読記事のヘッダーをバックエンドに求めます。ほとんどのサーバーは News OverView 様式が使用可能で、それは普通の HEAD 様式よりもっと手短でもっと速く読んで解析 (parse) することができます。

レベル (level)
     それぞれのグループは何らかの レベル か他のもの (1-9) で購読されています。低いレベルのものは高いレベルのものより ``より'' 購読されています。実際のところ、レベル 1-5 のグループは 購読; 6-7 は 未購読; 8 は ゾンビ; 9 は 切られた と見なされます。グループをリストしたり、新しいグループを走査したりする命令はすべて数値接頭引数を 動作レベル として使います。

切られたグループ (killed groups)
     切られたグループの情報は蓄積されたり更新されたりしませんので、切られたグループを購読されたグループより簡単に扱えるようになります。

ゾンビグループ (zombie groups)
     ほとんど切られたグループと同じで、それより少し死んでいるだけです。

現状ファイル (active file)
     ニュースサーバーはどの記事を運んでいるか、どのグループが存在するかを記録しておかなければなりません。全てのこの情報は現状ファイルに蓄積され、それはあなたが想像するように比較的大きいです。

偽グループ (bogus groups)
     ファイル .newsrc に存在するグループですが、サーバーに知られていないグループ (すなわち、それは現状ファイルにありません) は 偽グループ です。これは、おそらく (すでに) そのグループは存在していないのでしょう。

活動化 (activating)
     サーバーにグループの情報を尋ね、未読記事の数を演算する行為は グループを活動化する と呼ばれています。非活動グループはグループバッファに * とともに一覧表示されます。

サーバー (server)
     接続して、ニュース (もしくはメール) を取得する事のできるグループです。

選択方法 (select method)
     バックエンド、サーバーと、事実上のサーバー設定を指定する構造です。

事実上のサーバー (virtual server)
     命名された選択方法です。選択方法は (物理的) サーバーに接続するために必要な方法を定義するため、物事を全体として受けるのは事実上のサーバーになります。

洗濯 (washing)
     バッファを持ってきて、何らかの種類の選別機にかける事です。結果は (多かれ少なかれ) 元のものよりもよりきれいで喜ばしいものになるでしょう。

一時グループ (ephemeral groups)
     たいていのグループはどの記事を読んだかのデータを蓄積します。一時グループはデータが溜められないグループです---グループを出ると、それは天空に消え去ります。

固定グループ (solid groups)
     これは一時グループの反対です。グループバッファに挙げられている全てのグループは固定グループです。

まばら記事 (sparse articles)
     gnus-build-sparse-threads の機能を使用しているときは、概略バッファに記事の入れ場所が表示されます。

スレッド作り (threading)
     それが応答した記事の直後にその記事への応答を置くことです---階層的流儀で。

根 (root)
     スレッドの最初の記事が根です。それはスレッドの全ての記事の祖先です。

親 (parent)
     応答のある記事です。

子 (child)
     違った記事---その親 に応答する記事です。

集配 (digest)
     複数のメッセージを一つのファイルに集めたものです。もっとも普通の集配様式は RFC1153 で指定されています。

カスタマイズ
======

全ての変数はこのマニュアルのどこか別のところで適切に説明されています。この部分は非常に良くある状況でどのように gnus をカスタマイズすれば良いかの総合適指示先を与えるために考案されています。

遅い/高い NNTP 接続
-------------

もし Emacs をローカルのマシンで実行していて、非常に細い線の向こうのマシンからニュースを取得しているのであれば、gnus が NNTP サーバーから取得するデータの総量を減らしたいと思うでしょう。

gnus-read-activie-file
     これを nil にして下さい。そうすれば、gnus にサーバーから現状ファイル全体を要求する事を禁止できます。このファイルはしばしば非常に大きくなっています。それに加えて、gnus が突然とにかく現状ファイルを取得しようと決定しない事を確実にするために、gnus-check-new-newsgroups と gnus-check-bogus-newsgroups も nil に設定しなければなりません。

gnus-nov-is-evil
     これも nil にしていなければなりません。もしそうでなければ、 NNTP サーバーから記事のヘッダーをつかんでくるのがあまり速くなりません。全ての NNTP サーバーが XOVER の機能を提供しているわけではありません。Gnus が自分自身でそれを検査します。

遅いターミナル接続。
----------

あなたは、ホームコンピューターを Emacs と gnus を実行しているシステムにダイアルアップするために使っているとしましょう。もしあなたのモデムが遅ければ、(可能な限り) 線を伝って送られているデータの総量を減らしたいと思うでしょう。

gnus-auto-center-summary
     Gnus が常に概略バッファを中心再設定をすることを禁止するためにこれを nil に設定して下さい。これが vertical であると、垂直方向の (vertical) 中心再設定のみをします。nil でも vertical でも無ければ、水平方向と垂直方向の両方の中心再設定を行います。

gnus-visible-headers
     記事に含まれるヘッダーを最小限に減らします。実際のところ、全部なくしてしまっても何とかなります---とにかく、たいていの役に立つデータは概略バッファにあります。この変数を ^NEVVVVER や From: や、何でも好きなものに設定して下さい。

gnus-article-display-hook
     このフックに全ての使用可能な隠匿命令を設定します:

          (setq gnus-article-display-hook
                '(gnus-article-hide-headers
                  gnus-article-hide-signature
                  gnus-article-hide-citation))

gnus-use-full-window
     これを nil に設定する事で、全てのウィンドウを小さくする事ができます。これは総じてそんなに減らしません。これは、記事をどっちにしろ読みたくないという事を決定する前に、少しの部分しか見る必要が無いという事です。

gnus-threada-hide-subtree
     これが nil でなければ、全ての概略バッファのスレッドは初めに隠されます。

gnus-updated-mode-lines
     これが nil であると、gnus はバッファのモード行に情報を入れませんので、時間を節約できるでしょう。

少しのディスク容量
---------

起動ファイルは比較的大きくなりますので、空き容量が少なくなってきているときはその大きさを少し小さくしたいと思うでしょう。

gnus-save-newsrc-file
     これが nil であると、gnus は決して .newsrc を保存しません--- それは .newsrc.eld のみを保存します。これは、gnus の他のニュースリーダーを使えないという事です。この変数は初期設定で t です。

gnus-save-killed-list
     これが nil であると、gnus は死んだグループのリストを保存しません。この変数を nil に設定したときは、gnus-check-new-newsgroups を ask-server に、gnus-check-bogus-newsgroups を nil に設定するべきでしょう。この変数は初期設定で t です。

遅い機械
----

もし遅い機械を持っているか、もしくは単に本当に忍耐力がない時は、gnus の実行を把握するためにできる事が少しあります。

起動を速くするために gnus-check-new-newsgroups と gnus-check-bogus-newsgroups を nil に設定して下さい。

概略バッファに入る事と抜ける事を速くするために、gnus-show-threads と gnus-use-cross-reference と gnus-nov-is-evil を nil に設定して下さい。

記事に関する実行を少し速くするために、gnus-article-display-hook を nil に設定して下さい。

問題解決
====

Gnus は箱から出してすぐに 非常に よく動作します---何も問題の起こることは想像できません、本当に。

オッホン。

 1. あなたのコンピュータのスイッチが入っている事を確かめて下さい。

 2. 本当に現行の gnus 版を読み込んでいる事を確認して下さい。今まで GNUS を実行してきたのであれば、gnus が動作するように一度 Emacs を終了して再起動する必要があります。

 3. M-x gnus-version を試して下さい。もし、 Semi-gnus 6.8.20 (based on Gnus 5.6.44; for SEMI 1.8, FLIM 1.9/1.9) のようなものが出てきたなら、正しいファイルが読み込まれています。もし、NNTP 3.x や nntp flee のようなものが出てきたときは、そこにあるいくつかの古い .el ファイルが読み込まれています。それらを消して下さい。

 4. FAQ と how-to を読むためにヘルプグループ (グループバッファで G h) を読んで下さい。

 5. Gnus は多くの多くの再帰構造で動作し、何らかの極端な (そして非常にまれな) 事例では、gnus は再帰を ``あまりに深く'' 降りすぎて、Emacs があなたにビープ音を鳴らす事があります。もしこれが起こったなら、 max-lisp-eval-depth を 500 かそれくらいの値に設定して下さい。

もし他の全てが失敗したなら、バグとして問題を報告して下さい。

もし gnus のバグを見つけたなら、命令 M-x gnus-bug によってそれを報告する事ができます。M-x set-variable RET debug-on-error RET t RET として、それから私にバックトレースを送って下さい。私はバグを修正しようとしますが、あなたがバグを再現させる方法を正確に書いてくれたときのみ、それを修正する事ができます。

バグ報告では、詳細すぎることは決してありません。バグ報告をするときは、それが使うたびに 10Kb メールを作り、もしあなたの環境を以前私に 500 回送ってきたとしても、命令 M-x gnus-bug を使って下さい。

私は、記憶という種類のものは全く持っていない事を覚えておく事も重要です。もしあなたがバグ報告を送ると、私が返答を送ります。そして、それからあなたが ``いや、そうではない！ このばか者！'' とだけ送り返してくると、私はあなたが何に対して私を侮辱しているかがわかりません。常に、全てを説明しすぎて下さい。それは我々全てにとってもっと簡単になります---もし私が必要な全ての情報を得られなかったら、私はあなたにメールを送ってさらなる情報を求め、その結果全てがより多くの時間を取る事になります。

もしあなたの直面している問題が非常に視覚的で、それを上手く説明できない場合は、Emacs のウィンドウをファイルにコピーして (例えば、xwd で)、それをどこか手の届くどこかにおいて、その画像の URL をバグ報告に含めて下さい。

もし援助が欲しいだけであれば、gnu.emacs.gnus で尋ねるのが良いでしょう。私はあまり役に立ちません。

また、ding メーリングリスト---ding@gnus.org に訊ねる事もできます。購読するためには ding-request@gnus.org に書いて下さい。

Gnus のプログラマーズガイド
================

私の願いは、他の誰かが gnus でできる何か賢いものを考え出し、その上その賢いものを書いてくれるということです。これを容易にするためには、gnus の内部動作を記述するのが良い方法だろうと私は思いました。あと、そんなに内部じゃない動作をいくつかと、私が今やってることと。

プログラムの内部構造が変更されることはない、などと思ってはいけませんが、gnus とそのバックエンド間のインターフェース(これは完全に記述されている)や、スコアファイルの形式(これも同様)、データ構造 (これは他より変更されやすいものもある)、操作用の一般メソッド、などを(細部にわたって)定義していきます。

Gnus の有用な関数
-----------

フックなどから実行される小さな関数を書くときは、gnus の内部関数や変数にアクセスすることは絶対必要です。以下が最もよく使われるものの一覧です。

gnus-newsgroup-name
     この変数は現在のニュースグループの名前を保持しています。

gnus-find-method-for-group
     GROUP の選択方法を返す関数です。

gnus-group-real-name
     正規の (接頭辞付きの) gnus グループ名を受け取り、接頭辞無しの名前を返します。

gnus-group-prefixed-name
     接頭辞無しのグループ名と選択方法を受け取り、正規の (接頭辞付きの) gnus グループ名を返します。

gnus-get-info
     GROUP のグループ情報一覧を返します。

gnus-group-unread
     GROUP の未読記事の数か、もしくはそれが分からない場合は t です。

gnus-active
     GROUP の活動登録です。

gnus-set-active
     GROUP に活動登録を設定します。

gnus-add-current-to-buffer-list
     Gnus 終了時に消去するバッファの一覧に現在のバッファを追加します。

gnus-continuum-version
     引数として gnus のバージョン文字列を受け取り、浮動小数点数を返します。古いバージョンは必ず新しいバージョンよりも小さい数になります。

gnus-group-read-only-p
     GROUP が読み出し専用であるかどうかを示します。

gnus-news-group-p
     GROUP がニュースバックエンドであるかどうかを示します。

gnus-ephemeral-group-p
     GROUP が短期グループであるかどうかを示します。

gnus-server-to-method
     SERVER に対応している選択方法を返します。

gnus-server-equal
     二つの仮想サーバーが同一のものであるかどうかを示します。

gnus-group-native-p
     GROUP が基本グループであるかどうかを示します。

gnus-group-secondary-p
     GROUP が二次グループであるかどうかを示します。

gnus-group-foreign-p
     GROUP が外部グループであるかどうかを示します。

group-group-find-parameter
     GROUP のパラメータ一覧を返します。二つ目の引数を与えると、 GROUP 用のそのパラメータの値を返します。

gnus-group-set-parameter
     三つの引数 GROUP、 PARAMETER、VALUE を取ります。

gnus-narrow-to-body
     現在のバッファの記事の本文を制限表示します。

gnus-check-backend-function
     二つの引数 FUNCTION、GROUP を取ります。GROUP バックエンドが FUNCTION をサポートしているなら、 nil 以外を返します。

          (gnus-check-backend-function "request-scan" "nnml:misc")
          => t

gnus-read-method
     利用者に選択方法をプロンプト入力してもらいます。

バックエンドインターフェース
--------------

Gnus は NNTP やスプール、メール、仮想グループについては何にも知りません。ただ仮想サーバー virtual servers と対話する方法を知っているだけです。仮想サーバーはバックエンド backend といくつかのバックエンド変数 backend variables からなります。前者の例としては nntp、 nnspool、 nnmbox などがあります。後者の例としては nntp-port-number や nnmbox-directory があります。

Gnus がバックエンド --- 例えば nntp --- に何かの情報を要求するときは、通常関数の引数として仮想サーバー名を含めます。 (もしなければ、バックエンドは ``現在の'' 仮想サーバーを使用します。) 例えば、nntp-request-list はその唯一の (省略可能な) 引数として仮想サーバーを取ります。もしこの仮想サーバーが開かれていなければ、この関数は失敗します。

仮想サーバー名は、物理的なサーバー名とは何の関係も無いことに注意してください。この例を見てください。

     (nntp "odd-one"
           (nntp-address "ifi.uio.no")
           (nntp-port-number 4324))

ここで、物理サーバー名は ifi.uio.no であるのに対し、仮想サーバー名は odd-one です。

バックエンドは複数の仮想サーバーを切り替え可能でなければなりません。標準のバックエンドはこれを、仮想サーバー環境を必要なときに取り出し・押し込みを行なう連想リストを保持することによって実現しています。

インターフェース関数は二つのグループがあります。必ず存在しなければならない必須関数 required functions と、gnus が呼び出しを行なう前にそれが存在するかを常に確認する任意関数 optional functions です。

これらの関数は全て、返却データを nntp-server-buffer ( *nntpd*) バッファーに返すことが求められます。これはちょっと不運な名前付けですが、これで我慢しなければなりません。私が結果のデータ resulting data と言ったときは、そのバッファーの中のデータを指しています。返却値 return value と言ったときは、関数呼び出しによって返される関数の値のことを言っています。関数が失敗したときは返却値として nil を返さなくてはいけません。

バックエンドにはサーバー形式 server-forming のバックエンドであると呼ばれるものがあり、またそう呼ばれないものもあります。後者は一般には、同時には一つだけしか操作しないバックエンドで、``サーバー'' の概念がありません。このサーバーとは、グループを持ち、そのグループに情報を配送するもので、それ以上のものではありません。

ここでの例と定義では、想像上のバックエンド nnchoke を引き合いに出すことにします。

必須バックエンド関数
..........

(nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)

     ARTICLES は記事番号の範囲かあるいは Message-ID のリストです。現在のバックエンドではどちらも完全にはサポートしていません --- 連続した記事番号 (のリスト) だけで、多くのバックエンドでは Message-ID による取得はサポートしていません。でもどちらもサポートしていくべきでしょう。

     結果のデータは HEAD か NOV 行のいずれかであり、返却値はこれを反映した headers か nov のいずれかでなくてはなりません。これは今後、HEAD と NOV 行が混在する various に拡張されるかもしれませんが、現在の gnus ではサポートされていません。

     FETCH-OLD が nil 以外であれば、ある意味での「余分なヘッダー」を取得しようとします。これは通常、articles の中の最小番号の記事よりも小さい記事から (少なくとも) FETCH-OLD 個の余分なヘッダーを取得し、空所を埋めることを行ないます。もしバックエンドがこの要求に従うことを煩わしいと思った場合には、このパラメータの存在は無視されることもあります。この値が nil でも数字でもなければ、最大限の取得を行ないます。

     これが HEAD の例です。

          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
          .

     つまり、返却値が headers であるときは、データバッファにこれらヘッダーがいくつかあるということを意味します。

     これがそのバッファーの BNF 定義です。

          headers        = *head
          head           = error / valid-head
          error-message  = [ "4" / "5" ] 2number " " <error message> eol
          valid-head     = valid-message *header "." eol
          valid-message  = "221 " <number> " Article retrieved." eol
          header         = <text> eol

     もし返却値が nov であれば、データバッファーには network overview database 行が含まれてなくてはなりません。これは基本的には複数の欄をタブで区切ったものです。

          nov-buffer = *nov-line
          nov-line   = 8*9 [ field <TAB> ] eol
          field      = <text except TAB>

     これらの欄にどのようなものが含まれるかをより詳しく見たければ、 see Headers を参照してください。

(nnchoke-open-server SERVER &optional DEFINITIONS)

     ここでの SERVER は仮想サーバー名です。DEFINITIONS はこの仮想サーバーを定義する (VARIABLE VALUE) 組のリストです。

     もしサーバーを開くことができなければ、エラーはシグナルでは通知されません。そしてバックエンドは、それ以後のこのサーバーへの接続要求を拒否することもできます。実際、そうすべきです。

     もしそのサーバーがすでに開いていれば、この関数は nil 以外の値を返却しなければなりません。このとき、返される結果のデータはありません。

(nnchoke-close-server &optional SERVER)

     SERVER への接続を閉じ、これに関連するすべての資源を開放します。もし何らかの理由でサーバーを閉じることができなければ、 nil を返却します。

     返される結果のデータはありません。

(nnchoke-request-close)

     全てのサーバーの接続を閉じ、バックエンドが保有している全ての資源を開放します。このバックエンドによって作成されたバッファは全て削除されます。(nntp-server-buffer は削除されませんが。) この関数は通常、gnus が終了するときにのみ呼び出されます。

     返される結果のデータはありません。

(nnchoke-server-opened &optional SERVER)

     もし SERVER が現在の仮想サーバーで、その物理サーバーへの接続が生きていれば、この関数は nil 以外の値を返します。この関数はどんな場合でも、接続が失われたサーバーへの再接続を行なうことはありません。

     返される結果のデータはありません。

(nnchoke-status-message &optional SERVER)

     この関数は SERVER からの最後のエラーメッセージを返却します。

     返される結果のデータはありません。

(nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)

     この関数の結果のデータは、ARTICLE で指定された記事です。この指定は Message-ID か番号のいずれかです。 Message-ID による記事の取得を実装するかどうかは任意ですが、可能であると嬉しいですね。

     TO-BUFFER が nil 以外であれば、結果のデータは通常のデータバッファの代わりに、このバッファに返されます。これにより多量のデータをあるバッファから別のバッファにコピーすることを避けることができ、そして gnus は通常、記事バッファに直接記事を挿入するように要求しています。

     もし可能であるのなら、この関数は、carが取得した記事のあるグループ名で、cdr が記事番号である cons セルを返すべきです。これにより Message-ID によって記事を取得したとき、 gnus が本当のグループと記事番号を知ることができるようになるでしょう。これが不可能な場合には、記事の取得が成功したときは t を返します。

(nnchoke-request-group GROUP &optional SERVER FAST)

     GROUP のデータを取得します。この関数は、GROUP を現在のグループにする、という副作用もあります。

     FAST があれば、便利なデータを返す面倒を行なわずに、単に GROUP を現在のグループにします。

     これが結果のデータの例と、それの定義です。

          211 56 1000 1059 ifi.discussion

     最初の数字は状態で、これは 211 でなくてはなりません。次はそのグループにある記事の総数、最小の記事番号、最大の記事番号、そして最後がグループ名です。記事の総数は、最大・最小記事番号から単純に考えられる数よりも小さいことがあることに注意してください。いくつかの記事は取り消されているかもしれません。Gnus は総数は単に捨ててしまっているので、(もしそれが問題となるときに) 正しい値を生成する面倒を負うべきかどうかは、読者への課題として残してあります。

          group-status = [ error / info ] eol
          error        = [ "4" / "5" ] 2<number> " " <Error message>
          info         = "211 " 3* [ <number> " " ] <string>

(nnchoke-close-group GROUP &optional SERVER)

     GROUP を閉じ、それに接続されている全ての資源を開放します。これはほとんどのバックエンドでは何もすることがないでしょう。

     返される結果のデータはありません。

(nnchoke-request-list &optional SERVER)

     SERVER 上で利用可能な全てのグループの一覧を返します。これは 全部 という意味です。

     これが、たった二つしかグループを持っていないサーバーからの例です。

          ifi.test 0000002200 0000002000 y
          ifi.discussion 3324 3300 n

     各行にはグループ名があり、そしてそのグループ内の最大の記事番号、最小の記事番号、そして最後にフラグです。

          active-file = *active-line
          active-line = name " " <number> " " <number> " " flags eol
          name        = <string>
          flags       = "n" / "y" / "m" / "x" / "j" / "=" name

     フラグは、そのグループが読み出し専用 (n) であるか、司会者付き (m) であるか、死んでいる (x) か、どこか他のグループの別名 (=other-group) であるか、上記のどれでもない (y) か、ということを示しています。

(nnchoke-request-post &optional SERVER)

     この関数は、現在のバッファを投稿します。これは投稿が成功したかどうかを返却しても構いませんが、必須ではありません。例えば、投稿が非同期に行われるのであれば、この関数が終了した時点では投稿は普通完了していません。その場合この関数は、投稿を完了させることができないとき、それをはっきりと利用者に知らせる見張り関数のようなものを設定するべきでしょう。

     この関数から返される結果のデータはありません。

任意バックエンド関数
..........

(nnchoke-retrieve-groups GROUPS &optional SERVER)

     GROUPS はグループのリストであり、この関数はそれら全部のグループのデータを要求します。どうやってそれを行なうかは gnus の知ったことではありませんが、これはできるだけ迅速な方法で行なわなければなりません。

     この関数の返却値は active か group のいずれかで、結果のデータの形式が何であるかを示します。前者は nnchoke-request-list によるデータと同じ形式であり、一方後者は nnchoke-request-group が与えるものと同じ形式の行でバッファは埋められます。

          group-buffer = *active-line / *group-status

(nnchoke-request-update-info GROUP INFO &optional SERVER)

     Gnus グループ情報 (see Group Info) が変更箇所としてバックエンドに渡されます。これはバックエンドが (仮想グループや imap グループの場合のように) 本当に全ての情報を持っている場合に便利になります。この関数は、その要求に適合させる情報を破壊的に置き換え、その (置き換えられた) グループ情報を返します。

     この関数から返される結果のデータはありません。

(nnchoke-request-type GROUP &optional ARTICLE)

     利用者が ``ニュースを送信する'' 命令 (例えば、概略バッファで F) を実行したとき、gnus は利用者がフォローアップしようとしている記事がニュースであるかメールであるかを知らなくてはなりません。この関数は GROUP の中の ARTICLE がニュースであれば news を、メールであれば mail を、その種別を決定できなければ unknown を返却します。(ARTICLE 引数は、メールグループとニュースグループがごちゃまぜになってるかもしれない nnvirtual において必要です。) GROUP と ARTICLE は両方とも nil であるかもしれません。

     この関数から返される結果のデータはありません。

(nnchoke-request-update-mark GROUP ARTICLE MARK)

     もし利用者が、このバックエンドの気に入らない印を設定しようとしたら、この関数が印を変更することができます。Gnus はもとの MARK の代わりに、この関数が返したものを ARTICLE への印として使います。バックエンドが気にすることが特になければ、元の MARK を返さなければなりません。nil やその他のゴミを返してはいけません。

     私が知っているこれのこれの利用法は、nnvirtual が行なっていることだけです --- もし構成グループが自動期限切れ消去可能であれば、この仮想グループで既読の印を付けると、結果としてその記事に期限切れ消去の印が付けられます。

     この関数から返される結果のデータはありません。

(nnchoke-request-scan &optional GROUP SERVER)

     この関数は、バックエンドが到着記事を確認する要求を行なうときにいつでも (gnus かそれ以外によって) 、あれやこれやと呼び出されることがあります。メールバックエンドはこの関数が起動されたとき、典型的にはスプールファイルを読むか POP サーバーに問い合わせにいきます。GROUP は特に気に留める必要はありません --- もしバックエンドが、一つだけのグループを走査するのは大変すぎると判断した場合には、全グループの全走査を行なっても構いません。ですが、実用的にできればそれを局所的に閉じておく方が良いでしょう。

     この関数に返される結果のデータはありません。

(nnchoke-request-group-description GROUP &optional SERVER)

     この関数によって返される結果のデータは、GROUP の説明です。

          description-line = name <TAB> description eol
          name             = <string>
          description      = <text>

(nnchoke-request-list-newsgroups &optional SERVER)

     この関数によって返される結果のデータは、サーバー上で利用できるグループ全ての説明です。

          description-buffer = *description-line

(nnchoke-request-newgroups DATE &optional SERVER)

     この関数から返される結果のデータは、date 以降に作成された全てのグループです。date は通常の人間が読める日付の形式です。データは active バッファの形式でなければなりません。

(nnchoke-request-create-group GROUP &optional SERVER)

     この関数は、GROUP という名前の空のグループを作成します。

     返される結果のデータはありません。

(nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)

     この関数は、ARTICLES の範囲の全ての記事に対して期限切れ消去処理を行ないます。 (ARTICLES は現在は記事番号の単純なリストです。) この関数で消去される前の、記事がどれだけ古い記事であるかの決定はバックエンドに任されています。FORCE が nil 以外であれば、それがどんなに新しいものであっても、全ての ARTICLES が消去されます。

     この関数は削除しなかった、あるいは削除することができなかった記事のリストを返します。

     返される結果のデータはありません。

(nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
     &optional LAST)

     この関数は ARTICLE (番号) を、 GROUP から ACCEPT-FORM を呼び出して移動します。

     この関数は、問題の記事を移動させるための準備として、記事に付加されたヘッダー行を全て削除し、一般に記事を「きれいさっぱり」にします。そして ``きれいな'' 記事のあるバッファーで ACCEPT-FORM を eval します。これは本当に複製を行ないます。もし eval が nil 以外の値を返したら、その記事は削除されません。

     LAST が nil であれば、この直後にさらに要求が発行される見込みが高い、という意味になり、これによって最適化がいくらかできるようになります。

     この関数は、グループ名が car で、その記事の移動先の記事番号が cdr である cons セルを返します。

     返される結果のデータはありません。

(nnchoke-request-accept-article GROUP &optional SERVER LAST)

     この関数は、現在のバッファを取り、それを GROUP の中に挿入します。LAST が nil であれば、この関数へのさらなる呼び出しが直ちに行われるという意味です。

     この関数はグループ名が car で、その記事の移動先の記事番号が cdr である cons セルを返します。

     返される結果のデータはありません。

(nnchoke-request-replace-article ARTICLE GROUP BUFFER)

     この関数は ARTICLE (番号) を GROUP から削除し、代わりに BUFFER をそこに挿入します。

     返される結果のデータはありません。

(nnchoke-request-delete-group GROUP FORCE &optional SERVER)

     この関数は GROUP を消去します。 もし FORCE があれば、そのグループ内の全ての記事を本当に消去し、そしてそのグループ自身を消去します。 (もし ``グループ自身'' というものがあれば。)

     返される結果のデータはありません。

(nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)

     この関数は GROUP から NEW-NAME に名前を変更します。 GROUP 内にある記事は全て NEW-NAME に移動します。

     返される結果のデータはありません。

エラーメッセージ表示
..........

バックエンドはエラー状況を報告するのに nnheader-report を使わなくてはなりません --- 要求を実行できないときにエラーを生起させてはいけません。この関数の最初の引数はバックエンド名のシンボルで、残りは、複数の引数があれば format への引数として解釈され、一つであればただの文字列になります。この関数は常に nil を返さなくてはなりません。

     (nnheader-report 'nnchoke "You did something totally bogus")

     (nnheader-report 'nnchoke "Could not request group %s" group)

一方 gnus は、サーバーから nil を返されたときに nnheader-get-report を呼び出し、そしてこの関数が問題のバックエンドに対して最後に報告されたメッセージを返します。この関数は一つの引数 --- サーバーのシンボルを取ります。

内部的には、これらの関数は BACKEND-status-string にアクセスます、つまり nnchoke バックエンドはそのエラーメッセージを nnchoke-status-string に格納します。

新しいバックエンドを書く
............

多くのバックエンドはとても類似しています。nnml は nnspool にとても似ていますが、サーバー上の記事を編集することができます。nnmh は nnml にとても似ていますが、これはアクティブファイルを使わず、概要データベースも保持しません。 nndir は nnml にとても似ていますが、これには ``グループ'' の概念はなく、記事の修正はできません。

新しいバックエンドを書くときに他のバックエンドから関数を ``継承'' することが可能であってほしい、と思うのは理に適っています。そしてまさに、あなたがそうしたければ、それができるのです。(あなたがそうしたくなければしなくても良いですよ、もちろん。)

全てのバックエンドは公開変数と公開関数を、 nnoo と呼ばれるパッケージを使って宣言します。

他のバックエンドから関数を継承するには (そして現在のバックエンドから他のバックエンドに関数を継承できるようにするには) 、以下のマクロを使用しなければなりません。

nnoo-declare
     このマクロは、最初の引数を、その後に続く引数の子供であることを宣言します。例えば、

          (nnoo-declare nndir
            nnml nnmh)

     これで nndirは、nnml と nnmh の両方から関数を継承しようとしていることを宣言します。

defvoo
     このマクロは defvar と同義ですが、その変数を公開サーバー変数として登録します。ほとんどの状態指向型の変数は defvar ではなく defvoo によって宣言するべきです。

     通常の defvar 引数に加えて、このマクロは親バックエンドの変数のリストを取り、この関数がそのバックエンド内で実行されるときに変数を置き換えます。

          (defvoo nndir-directory nil
            "Where nndir will look for groups."
            nnml-current-directory nnmh-current-directory)

     これは nndir のために nnml の関数が呼び出されたときに、nnml-current-directory は nndir-directory に設定されるという意味です。(nnmh も同様です。)

nnoo-define-basics
     このマクロは、ほとんど全部のバックエンドが持つべき共通関数をいくつか定義します。

          (nnoo-define-basics nndir)

deffoo
     このマクロはまさに defun のようなもので、同一の引数を取ります。通常の defun 処理に加えて、このマクロはその関数を公開しているものとして登録し、他のバックエンドがそれを継承できるようにします。

nnoo-map-functions
     このマクロは現在のバックエンドの関数から親バックエンドの関数への置き換えを行なえるようにします。

          (nnoo-map-functions nndir
            (nnml-retrieve-headers 0 nndir-current-group 0 0)
            (nnmh-request-article 0 nndir-current-group 0 0))

     これは nndir-retrieve-headers が呼び出されたとき、一番目、三番目、四番目の引数が nnml-retrieve-headers に渡され、一方、二番目の引数は nndir-current-group の値として設定される、という意味です。

nnoo-import
     このマクロは他のバックエンドから関数を取り込みます。これは単にまだ定義されていない関数を定義するだけなので、ソースファイルの最後の処理として書かなければなりません。

          (nnoo-import nndir
            (nnmh
             nnmh-request-list
             nnmh-request-newgroups)
            (nnml))

     これは、 nndir-request-list への呼び出しは単に nnmh-request-list に引き渡され、一方、nnml の公開関数でまだ nndir で定義されていないものをここで定義します。

以下は nndir バックエンドのちょっと短縮した版です。

     ;;; 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)

新しいバックエンドを gnus に繋げる
....................

あなたの新しいバックエンドを gnus で使いはじめるのはとても簡単です --- 単に gnus-declare-backend 関数で宣言するだけです。これはバックエンドを gnus-valid-select-methods 変数に追加します。

gnus-declare-backend は二つの引数を取ります --- バックエンドの名前と適当な数の能力 abilities です。

これが例です。

     (gnus-declare-backend "nnchoke" 'mail 'respool 'address)

能力には以下のものがあります。

mail
     これはメール風バックエンドです --- フォローアップは (たいていは) メールで送られます。

post
     これはニュース風バックエンドです --- フォローアップは (たいていは) ニュースで送られます。

post-mail
     このバックエンドはメールとニュースの両方をサポートします。

none
     これはニュースでもメールでもないバックエンドです --- 全く違った何かです。

respool
     これは再スプールをサポートします --- というよりは、その元の記事とグループを修正することができます。

address
     仮想サーバー名の中にサーバーの名前が含まるということです。これはほとんど全部のバックエンドで必要になります。

prompt-address
     グループバッファで B などでこの命令を実行したとき、ユーザはアドレスのプロンプト入力を求められます。これは例えば、 nntp のようなバックエンドでは必要で、nnmbox では必要ではありません。

メール風バックエンド
..........

メールバックエンドがその他のバックエンドに対して一線を画している点は、メールバックエンドは nnmail.el の中の共通関数に強く依存しているという点です。例えば、nnml-request-scan の定義はこのようになります。

     (deffoo nnml-request-scan (&optional group server)
       (setq nnml-article-file-alist nil)
       (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))

単に nnmail-get-new-mail にいくつか引数を与えて呼び出すだけで、nnmail がメールの移動や分離を全ての面倒を見てくれます。

この関数は四つの引数を取ります。

method
     これは、この呼び出しをどのバックエンドが責任を負うかを指示するシンボルです。

exit-function
     この関数は分離が実行された後に呼び出されます。

temp-directory
     一時ファイルを格納する場所です。

group
     この省略可能な引数は、分離が一つのグループに対してのみ実行されるべきであるときのグループ名です。

nnmail-get-new-mail は各記事を保存するために BACKEND-save-mail を呼び出します。 BACKEND-active-number はこの記事に割り当てられた記事番号を調べるために呼び出されます。

この関数は次の変数も使用します。 BACKEND-get-new-mail (このバックエンドの新着メールを調べるかどうか) と、新しいアクティブファイルを生成するための BACKEND-group-alist と BACKEND-active-file です。 BACKEND-group-alist グループのアクティブ連想リストで、以下のようなものです。

     (("a-group" (1 . 10))
      ("some-group" (34 . 39)))

スコアファイルの構文
----------

スコアファイルは簡単に分析可能で、しかし非常に柔軟なように意図されています。それには Emacs Lisp のリストと同じ読み込み構文な様なものがその指定に合うだろうという事が決定されました。

これは良くあるスコアファイルです:

     (("summary"
       ("win95" -10000 nil s)
       ("Gnus"))
      ("from"
       ("Lars" -1000))
      (mark -100))

スコアファイルの BNF 定義です。

     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            = <ascii 34>
     string-header    = "subject" / "from" / "references" / "message-id" /
                        "xref" / "body" / "head" / "all" / "followup"
     number-header    = "lines" / "chars"
     date-header      = "date"
     string-match     = "(" quote <string> quote [ "" / [ space score [ "" /
                        space date [ "" / [ space string-match-t ] ] ] ] ] ")"
     score            = "nil" / <integer>
     date             = "nil" / <natural number>
     string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" /
                        "r" / "regex" / "R" / "Regex" /
                        "e" / "exact" / "E" / "Exact" /
                        "f" / "fuzzy" / "F" / "Fuzzy"
     number-match     = "(" <integer> [ "" / [ space score [ "" /
                        space date [ "" / [ space number-match-t ] ] ] ] ] ")"
     number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
     date-match       = "(" quote <string> 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" / <integer>
     expunge          = "expunge" space nil-or-number
     mark-and-expunge = "mark-and-expunge" space nil-or-number
     files            = "files" *[ space <string> ]
     exclude-files    = "exclude-files" *[ space <string> ]
     read-only        = "read-only" [ space "nil" / space "t" ]
     adapt            = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
     adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
     local            = "local" *[ space "(" <string> space <form> ")" ]
     eval             = "eval" space <form>
     space            = *[ " " / <TAB> / <NEWLINE> ]

スコアファイルの認識不可能な要素は無視されるべきですが、捨てられるわけではありません。

ご覧の通り、空白が必要ですが、空白の量と型は無関係です。これはスコアファイルの様式はプログラマーに任されているという事です---全てを一つの長ーーい行に吐き出すのが簡単であれば、それは構いません。

いろいろなアトムの意味はこのマニュアルのどこかで説明されています (see Score File Format)。

ヘッダー
----

内部的には gnus は不思議な流儀で、NOV 様式に対応する記事のヘッダーを溜めておく様式を使います。ある人は、作者が NOV の仕様を見て恥じる事無く全てを 盗んだ と思うかもしれませんが、その人は正しいです。

ヘッダー は非常に負担のかけられすぎた語です。 ``ヘッダー'' は RFC1036 では記事の頭の行の事 (例えば、From) を話すのに用いられています。それは多くの人から ``ヘッド''---``ヘッダーと本体'' の同義語として使われています。 (これは、私の意見では避けられるべきです。) そして、 gnus は内部では ``ヘッダー'' と呼ぶ様式を使っており、私はここでそれについて説明します。これは9つの要素からなるベクトルで、基本的に、それぞれのヘッダー (あ痛) が一つの空き場所を占めています。

これらの空き場所は、順番に: number、subject、from、 date、id、chars、lines、xref です。これらの空き場所に触って設定するマクロがあります---それらは全て、それぞれ mail-header- と mail-header-set- いう予想される名前を持っています。

場所 xref は本当は misc の場所です。いろんな追加の情報はそこに入れられます。

範囲
--

GNUS は私には非常に役に立つと思われる概念を導入しましたので、私はそれをたくさん使い、かなり念入りに作り上げてきました。

質問は単純です: もしあなたが大量の数字により同一性を保証される もの (object) (乱暴な 例を上げると、記事がそうです) を ``含まれている'' として見なしたいときは、普通の連続的行為はあまり役に立ちません。 (長さ 200,000 の連続物は少し息が長すぎます。)

これの解決策は質問と同じくらい単純です。単にその連続物を壊せば良いだけです。

     (1 2 3 4 5 6 10 11 12)

は次のものに変形されます。

     ((1 . 6) (10. 12))

あの嫌な (13. 13) のような要素を避けるために、それのみの もの (object) を示すために 13 は有効な要素になっています。

     ((1 . 6) 7 (10 . 12))

これは2つの範囲を比較してそれが等価 (equal) であるかを調べる事は少し手のこんだことになります:

     ((1 . 5) 7 8 (10 . 12))

と

     ((1 . 5) (7. 8) (10 . 12))

は等価です。実際のところ、下降しないリストは範囲です:

     (1 2 3 4 5)

は完全に有効な範囲です。とても息の長いものですが。これも有効です:

     (1 . 5)

そして、これは前の範囲と等価です。

これは範囲の BNF 定義です。もちろん、数字の意味上の要求は下降していないという事は覚えておく必要があります。 (任意の回数の同じ数字の繰り返しは許されていますが、範囲の扱いからは消え去る傾向があります。)

     range           = simple-range / normal-range
     simple-range    = "(" number " . " number ")"
     normal-range    = "(" start-contents ")"
     contents        = "" / simple-range *[ " " contents ] /
                       number *[ " " contents ]

Gnus は現在のところ既読記事と記事の印の情報を付けておくために範囲を使っています。私は 次の権力者 が私にさせてくれるのであれば、C で数の範囲の実装を計画しています。 (私はまだその人に尋ねていません。と言うのは、私はそれを普通の連続物に変換し直さないで世の中を完全に範囲に基づいたものにするためにもう少し考える必要があるからです。)

グループ情報
------

Gnus はグループの全ての永続情報を group info リストに保存します。このリストの長さは3から6 (もしくはもっと) の要素で徹底的にグループを記述します。

ここにあるのはグループ情報 (group info) の2つの例です。1つは非常に単純なグループで、2つめはもっと複雑なものです:

     ("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")))

最初の要素は グループ名 です---どのようにしろ、gnus がそれによってグループを知っているものです。2番目の要素は 購読度 で、普通は小さな整数です。(それは 階級 になる事もできます。それは、コンスセルで、 car がレベルで、cdr がスコアです。) 3番目の要素は既読記事の範囲のリストです。4番目の要素はいろいろな種類の記事の印のリストのリストです。5番目の要素は選択方法です (もしくは、こちらの方が良いのであれば事実上のサーバーです)。6番目の要素は グループパラメータ のリストで、この部分はそのためにあります。

最後の3つの要素はどれでも、必要が無ければ存在しない事もあります。実際、グループの非常に大部分は最初の3つの要素だけを持ち、それはたくさんのコンスセルを節約する事ができます。

これはグループ情報様式の BNF 定義です:

     info          = "(" group space ralevel space read
                     [ "" / [ space marks-list [ "" / [ space method [ "" /
                     space parameters ] ] ] ] ] ")"
     group         = quote <string> quote
     ralevel       = rank / level
     level         = <integer in the range of 1 to inf>
     rank          = "(" level "." score ")"
     score         = <integer in the range of 1 to inf>
     read          = range
     marks-lists   = nil / "(" *marks ")"
     marks         = "(" <string> range ")"
     method        = "(" <string> *elisp-forms ")"
     parameters    = "(" *elisp-forms ")"

実のところ法則 marks は嘘です。marks は <string> が range の上に校正されているものですが、疑似 BNF でそれを現すのは不愉快なものです。

もし gnus 情報を持っていて、要素を調べたいのときは、gnus はそれらの要素を取得/設定 (get/set) するための一連のマクロを提供しています。

gnus-info-group
gnus-info-set-group
     グループ名を取得/設定 (get/set) します。

gnus-info-rank
gnus-info-set-rank
     グループの階級 (rank) を取得/設定します (see Group Score)。

gnus-info-level
gnus-info-set-level
     グループのレベルを取得/設定します。

gnus-info-score
gnus-info-set-score
     グループスコアを取得/設定します (see Group Score)。

gnus-info-read
gnus-info-set-read
     既読記事の範囲を取得/設定します。

gnus-info-marks
gnus-info-set-marks
     印しつき記事の範囲のリストを取得/設定します。

gnus-info-method
gnus-info-set-method
     グループ選択方法を取得/設定します。

gnus-info-params
gnus-info-set-params
     グループパラメータを取得/設定します。

全ての取得関数は1つの引数を取ります---情報のリストです。設定関数は2つの引数を取ります---情報リストと新しい値です。

グループ情報の最後の3つの要素は強制的なものではありませんので、要素を設定する前にグループ情報を拡張する必要があるかも知れません。もしこれが必要な場合は、これが自動的に起こるために nil でない3番目の引数を3つの最終設定関数に与えるだけです。

拡張対話
----

Gnus は Emacs の標準の interactive 指定をシンボル接頭辞を簡単に使えるために少し拡張しています (see Symbolic Prefixes)。これはその使い方の例です:

     (defun gnus-summary-increase-score (&optional score symp)
       (interactive (gnus-interactive "P\ny"))
       ...
       )

最上の方法は gnus-interactive を式 interactive を返すマクロとして実装する事でしょうが、これは Emacs は関数が対話的であるかどうかをラムダ式に対して単純に assq を行う事により調べる事から不可能です。

この関数は (ほとんど) 全ての interactive 指定を受付けますが、もう少し加えます。

y
     現在の接頭引数シンボル---変数 gnus-current-prefix-symbol です。

Y
     現在の接頭引数シンボルのリストです---変数 gnus-current-prefix-symbol です。

A
     現在の記事番号です---関数 gnus-summary-article-number です。

H
     現在の記事ヘッダーです---関数 gnus-summary-article-header です。

g
     現在のグループ名です---関数 gnus-group-group-name です。

Emacs/XEmacs コード
----------------

Gnus は Emacs、XEmacs と Mule で動作しますので、そのうちの一つを主環境とする事に決めました。私は Emacs を選びました。私が XEmacs や Mule を好きではないと言う事ではなく、それがアルファベットで最初に来たからです。

これは gnus は Emacs で全く警告なくバイトコンパイルできるのに対して、 XEmacs はバイトコンパイルをしている間にギガバイトくらいの警告を出すと言う事です。私は些細な失敗を見つけ出すことを助けるためにバイトコンパイルの警告を使っていますので、それは非常に役に立ちます。

私は継続的に Emacs の関数の界面 (interface) を使ってきましたが、関数には gnus の別名関数 (alias) を使ってきました。例を出しましょう: Emacs は関数 run-at-time を定義していますが、XEmacs は関数 start-itimer を定義しています。そこで私は gnus-run-at-time と呼ばれる関数を定義し、それは Emacs の run-at-time と同じ引数を取ります。Gnus を Emacs で実行しているときは、前の関数は単に後のものの別名関数 (alias) になっています。しかし、XEmacs で実行したときは、前者は次の関数の別名関数 (alias) となっています:

     (defun gnus-xmas-run-at-time (time repeat function &rest args)
       (start-itimer
        "gnus-run-at-time"
        `(lambda ()
           (,function ,@args))
        time repeat))

この種類のものが多くの関数に対してなされています。Gnus は XEmacs で実行しているときに、元からある Emacs の関数を再定義しません---それは、代わりに gnus の等価なものと defalias をする事によって実行します。全体的に、よりきれいになります。

XEmacs の関数界面の方が明らかにきれいな場合は、私は代わりにそれを使います。例えば、gnus-region-active-p は XEmacs では region-active-p の別名であるのに対して、Emacs では関数です。

もちろん、私は XEmacs を私の基本プラットフォームに選んで、関数の割り当てを逆にする事もできました。でも、私はそうしませんでした。XEmacs で gnus を実行するときに、こういう逆向きのための速度低下は少しでしょう。

いろいろなファイル様式
-----------

現状ファイル様式
........

現状ファイルは当のサーバーの全ての使用可能なグループの一覧を挙げます。それはそれぞれのグループの最低と最高の記事番号の一覧もあります。

これは普通の現状ファイルからの抜粋です:

     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

これはこのファイルの疑似 BNF 定義です。

     active      = *group-line
     group-line  = group space high-number space low-number space flag <NEWLINE>
     group       = <non-white-space string>
     space       = " "
     high-number = <non-negative integer>
     low-number  = <positive integer>
     flag        = "y" / "n" / "m" / "j" / "x" / "=" group

このファイルの完全な記述を得るためには、innd のマニュアル頁、特に active(5) を見て下さい。

ニュースグループファイル様式
..............

ニュースグループファイルはグループをその記述と共に一覧を挙げます。サーバーにある全てのグループが一覧にされなければならないのではなく、また、ファイルの全てのグループがサーバーに存在しなければならないのではありません。このファイルは純粋に利用者の情報のためにあります。

様式は非常に簡単です: グループ名、タブ、そして記述です。これは定義です:

     newsgroups    = *line
     line          = group tab description <NEWLINE>
     group         = <non-white-space string>
     tab           = <TAB>
     description   = <string>

異教徒への Emacs
===========

信じるかどうかは知りませんが、gnus を使う人の中には Gnus Love Boat での旅に搭乗する前にあまり Emacs を使った事が無いという人がいます。もしあなたが ``M-C-a'' や ``リージョンを切る''、そして ``gnus-flargblossen を連想リストに設定してください。そのキーはグループ名に合致するために使われる正規表現です'' が少しの意味か全く意味の無い魔法の言葉である不幸な人であれば、この付録はあなたのためにあります。もしあなたが既に Emacs に親しんでいるのであれば、これを無視して車を可愛がりに行って下さい。

打鍵
--

  * Q: 経験のある Emacs の利用者とは何ですか?

  * A: 端末がペダルを持っていたらなぁと願う人の事です。

はい、あなたが Emacs を使うと、あなたはコントロールキー、シフトキー、メタキーをたくさん使うようになるでしょう。これは一部の人 (主に、vi 利用者) には非常にうるさく感じられるでしょう。残りの人々は、それによりもたらされる地獄を愛します。あきらめて服従して下さい。Emacs は本当は ``Escape-Meta-Alt-Control-Shift'' の略で、他の評判の悪い出所 (Emacs の作者のような) から聞いた ``Editing Macros'' ではありません。

シフトキーは普通は小指の近くに位置しており、普通は大文字やその他のもを得るために使われます。あなたはずっとそれを使う事でしょう。コントロールキーは普通は ``CTRL'' やそのようなもので印が付いています。メタキーは、おもしろい事に、どのキーボードでもそのように印が付けられていません。それは普通はキーボードの左手側に位置していて、普通は最下段にあります。

これから、我々 Emacs の人々は、それがあまりに不便なため、 ``meta-control-m キーを押す'' とは言いません。私たちは ``M-C-m を押す'' と言います。M- は ``メタ'' を現す接頭辞で、``C-'' は ``コントロール'' を意味する接頭辞です。ですから、``C-k を押す'' は ``コントロールキーを下に押し、k を押している間、それを下に保ちなさい'' と言う事です。``M-C-k を押す'' は ``メタキーとコントロールキーを押して下に保った後で k を押す'' と言う事です。簡単でしょ。ね？

これは全てのキーボードがメタキーを持っているわけではないと言う事実により少し複雑になっています。そのような場合は、``エスケープ'' キーを使う事ができます。それはメタキーを持っているときよりもっと作業が大変になりますので、そういう場合は、私はメタキーのあるキーボードを手に入れる事を恭しくお勧め致します。それ無しでは生きて行けないでしょう。

Emacs Lisp
----------

Emacs はそれが本当は Lisp インタープリターである事から、エディターの王様です。あなたが叩く、それぞれの全てのキーは何らかの Emacs Lisp のコードの小片を実行し、Emacs Lisp はインタープリターで実行される言語である事から、それはどんなキーでも任意のいろいろなコードを実行するように設定できると言う事です。あなたは、単に、そうすれば良いだけです。

Gnus は Emacs Lisp によって書かれていて、それはたくさんの逐次解釈実行される関数により実行されます。 (これらは速度のためにバイトコンパイルされていますが、それでもまだ逐次解釈されます。) もし gnus がするある事を好きではないと思ったなら、違ったように実行させるのは取るに足らない事です。 (えーと、少なくとも Lisp コードの書き方を知っていれば。) しかし、それはこのマニュアルの範囲外なので、我々は単に gnus をカスタマイズするためにファイル .emacs で普通使われるいくつかの普通の構文についてだけ話をします。

もし変数gnus-florgbnize を四 (4) に設定したいのであれば、以下のものを書きます:

     (setq gnus-florgbnize 4)

この関数 setq (本当は ``特殊形式'' (special form)) を使って、変数を何かの値に設定する事ができます。これは本当にあなたが知るべき全ての事です。これからは gnus の動作を変更するために、たくさんのこのようなものでファイル .emacs を埋め尽くす事ができます。

もしあなたがそのようなものをファイル .emacs に入れたら、それは次回に Emacs を起動したときに読み込まれ 評価 (それは ``実行'' の lisp 語です) されます。もし変数をすぐに変更したいのであれば、閉じ括弧の後で単に C-x C-e とするだけです。それは前にある ``式'' を 評価 し、それはここでは簡単な setq 文です。

がんばって---もしあなたが Emacs の前にあるのであればちょっと試して下さい。 C-x C-e の後で、反響区域 (echo area) に 4 が現われるのが見えるでしょう。それはあなたが 評価 した式の返り値です。

いくつかの落とし穴:

もしマニュアルが ``gnus-read-active-file を some に設定しなさい'' と言ったなら、それは:

     (setq gnus-read-active-file 'some)

と言う事です。

一方、マニュアルが ``gnus-nntp-server を nntp.ifi.uio.no に設定しなさい'' と言ったなら、それは:

     (setq gnus-nntp-server "nntp.ifi.uio.no")

と言う事です。

ですから、文字列 (後者) を シンボル (前者) と混同しないように注意して下さい。マニュアルは明確に区別していますが、混乱しやすいかもしれません。

     [file gnus-faq-ja.texi not included]