このファイルはメールリーダー VM のマニュアルです。

【なお、この info は ueno@al.t.u-tokyo.ac.jp が VM-5.35 に付いてきた vm.texinfo を訳した物です。訳者の語学力の不足から来る誤訳等あるかと思いますので、随時本家の vm.texinfo を参照しながら御賞味ください。】

【また、数箇所にこのようなカッコ書きの部分がございますが、これは訳注です。訳注の部分の著作権は(もしあるならばですが、)放棄します。間違った記述がありましたら、随時、どなたでも修正してください。それ以外の部分の著作権はすぐ後ろに書いてあるように Kyle Jones 氏が有しております。 ここは誤字、誤訳等を正す以外の修正は GPL に従ってください。】

Copyright (C) 1989, 1991 Kyle E. Jones

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.

このドキュメントは GNU Emacs の下で動くメールリーダー "VM" のマニュアルです。以下のような章立てになっています。

License
*******

GNU GENERAL PUBLIC LICENSE
**************************

Version 1, February 1989

     Copyright © 1989 Free Software Foundation, Inc.
     675 Mass Ave, Cambridge, MA 02139, USA

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

Preamble
========

The license agreements of most software companies try to keep users at the mercy of those companies.  By contrast, our General Public License is intended to guarantee your freedom to share and change free software---to make sure the software is free for all its users.  The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too.

When we speak of free software, we are referring to freedom, not price.  Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must tell them their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

 1. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The ``Program'', below, refers to any such program or work, and a ``work based on the Program'' means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications.  Each licensee is addressed as ``you''.

 2. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program.  You may charge a fee for the physical act of transferring a copy.

 3. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following:

       * cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and

       * cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option).

       * If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License.

       * You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

     Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms.

 4. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following:

       * accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or,

       * accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or,

       * accompany it with the information you received as to where the corresponding source code may be obtained.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.)

     Source code for a work means the preferred form of the work for making modifications to it.  For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system.

 5. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License.  However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance.

 6. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions.

 7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients' exercise of the rights granted herein.

 8. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the Program specifies a version number of the license which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation.

 9. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

     NO WARRANTY

 10. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

Appendix: How to Apply These Terms to Your New Programs
=======================================================

If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
     Copyright (C) 19YY  NAME OF AUTHOR

     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 1, or (at your option)
     any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items---whatever suits your program.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the program, if necessary.  Here a sample; alter the names:

     Yoyodyne, Inc., hereby disclaims all copyright interest in the
     program `Gnomovision' (a program to direct compilers to make passes
     at assemblers) written by James Hacker.

     SIGNATURE OF TY COON, 1 April 1989
     Ty Coon, President of Vice

That's all there is to it!

Introduction
************

VM (View Mail) は GNU Emacs の下で電子メールを読むためのツールです。電子メールを取り扱う他の多くのプログラムと同様、VM には返信を書くコマンドやフォルダに保存するコマンド、不要なメッセージを削除するコマンドがあります。さらに VM 独自の機能としては、ダイジェストを作成/展開するコマンド、メッセージの転送をするコマンドなどがあります。そして多くの機能があなたの好みに応じてカスタマイズすることができます。

VM を起動するためには単に M-x vm とタイプしてください。もしあなたのスプールにメッセージが届いていれば VM はそのメッセージを取ってきてプライマリインボックス(primary inbox) に付け加えます。そしてそのメッセージを読むための準備をします。See Starting Up. 以下この Info では(つまり VM では)メッセージを保存するファイルをフォルダ (folder) と呼びます。そしてメッセージを読むために選択されているフォルダを カレントフォルダ(current folder) と 呼びます。

プライマリインボックスにメッセージが保存されている時には VM は最初に見つけた新着のメッセージか未読のメッセージを選択し、プレビューします。プレビューとは、メッセージの一部だけをまず見て (Previewing) 、本文を読むかどうかを判断するための VM の機能です。See Previewing. デフォルトでは、VM は発信者、受信者、件名(サブジェクト), 日付の各ヘッダを表示します。SPC (vm-scroll-forward) を叩くと本文を表示しメッセージのフラグを``read'' (既読) にトグルします。1 ページに収まらない時には、さらに SPC でもう 1 ページ分だけスクロールし、メッセージの先を表示します。b や DEL では反対に 1 ページ分逆戻りし表示します。本文を最後まで表示したあと、SPC や n で次のメッセージを表示します。See Paging.

表示されているメッセージの本文を読みたくなければ、n で(もしメッセージがあれば)次のメッセージに移ります。See Selecting Messages.

メッセージをフォルダに保存するためには、s (vm-save-message) をタイプします。すると VM はミニバッファでフォルダ名を訊いてきます。 See Saving Messages.

プレビュー中や本文を読んでいる時にd (vm-delete-message) を叩くと、そのメッセージは削除されます。ですが、即座に消去されるのではなく、消去のためのフラグ(``delete''フラグ)が立つだけです。もし削除することにしたメッセージをやっぱり保存しようと決めた時には、u (vm-undelete-message) をタイプします。すると、``delete''フラグがトグルされ、消去は実行されません。See Deleting Messages.カレントフォルダからの 消去(expunging) は # (vm-expunge-folder) で実行されます。カレントフォルダから消去しても、そのメッセージはディスク上のファイルにはフォルダが書き込まれるまで残っています。

h (vm-summarize) を叩くと ウィンドウがポップアップしてそこにカレントフォルダに含まれているメッセージのサマリを表示します。サマリは、メッセージ 1 つにつき 1 行でメッセージナンバーの順に、メッセージの発信者・日付・メッセージの行数とバイト数・件名を表示します。さらにメッセージナンバーの左側に、``news/unread/read'' (新着/未読/既読), ``delete''(削除)フラグ等がアルファベット 1 文字で表示されます。矢印 -> が今選択されているメッセージの行の横にでます。 see Summaries.

メッセージを読み終ったら、選択していたフォルダはセーブしておきましょう。 (そうしなければ次回にそのフォルダを選択した時に読んだはずのメッセージが未読のまま現れたり、消去したはずのメッセージが残っていたりすることでしょう。) S (vm-save-folder) を叩くことで、``delete''フラグの付いたメッセージは消去され、フォルダがセーブされます。C-x C-sでは ``delete''フラグの付いたメッセージが消去されることなく、しかし、 ``delete''フラグを付けたままセーブされます。次にこのフォルダを選択した時には、``delete''フラグを付けたままのメッセージが見られるでしょう。

VM を終了するには q (vm-quit) か x(vm-quit-no-change) をタイプします。q を叩くことで VM は消去すべきメッセージを消去し、current-folder をセーブします。同時に、新着のメッセージのうちまだ読まれていないものに``unread''(未読)のフラグを付けます。x ではq でなされることを全て省略して何もしないでカレントフォルダから抜けでます。しかしわざわざ VM を終了することはありませんよね。メッセージを読んだら別のバッファに移ればすむのですから。

プライマリインボックスでメッセージを読んでいる時に g (vm-get-new-mail) を叩けば新しくメッセージが届いているかどうか調べられます。もし届いていれば、スプールから取り出されてプライマリインボックスの最後尾に付け加えられます。その時に他のメッセージを読んでいるのでなければ、最初の新着メッセージを表示します。

vm-get-new-mail に前置引数(C-u) を与えると、メッセージを取り出してくるべきファイルをミニバッファで訊いてきます。この時には指定されたファイルからメッセージのコピーはしますが、ファイルの消去はしません。

Starting Up
***********

VM を起動するには次の3つの方法があります。M-x vm, M-x vm-visit-folder, vm-mode です。Emacs を起動して初めてVMが起動された時に(どの方法であっても)、VMは (もしあれば) ~/.vm を読み込みます。そのファイルは .emacs がそうであるように、Lisp で書いてください。VM には何といっても 40を越える設定用変数があり、これを ~/.vm に集めておくことで .emacs の大きさが減らせ、また、設定が見やすくもなります。一度起動して読み込んだ後でも L をVMの動いているバッファでタイプすることにより再び読み直すことも出来ます。

M-x vm とすると VM はスプールにあるメッセージを取ってきてプライマリインボックスの後ろに付け加えます。このファイル名はデフォルトで ~/INBOXです。vm-primary-inboxという変数に設定してあるファイルを プライマリインボックスとして扱います。

VM はスプールからプライマリインボックスにメッセージを入れる前に、クラシュボックス というファイルに入れます。vm-primary-inbox と同様に vm-crash-box に設定してあるファイル名が クラシュボックス のファイル名となります。VM はまずメールスプールからクラシュボックスにメッセージをコピーし、スプールのメッセージを消去します。その後でプライマリインボックスにクラシュボックスのメッセージをつけたし クラシュボックスを消去します。こうすることで、転送の途中でシステムや Emacs がコケても新着メッセージはスプールかクラシュボックスにはメッセージが残ることになります。同じメッセージが2つになるかも知れませんが、決して失われるメッセージはありません。

もしVMがメッセージを取ってくる時に vm-crash-box が残っていたら、 VMはまずクラッシュボックスの中身をプライマリインボックスにつけたし、それからスプールからメッセージを取ってきます。

VMは、スプールの場所がどこであるかをシステムタイプを用いて判断しています。ですがスプールを vm-spool-files で明示的に指定することも出来ます。この変数にはファイル名をリストアップすることも出来ます。つまり、複数の場所でメッセージを受け取る時にそれらの全てを指定することが可能だと言うことです。vm-spool-files の値は MAILPATH や MAIL 環境変数が設定されている時にはこれらの値を引き継ぎます。

M-x vm-visit-folder (VM で v) とするとプライマリインボックス以外のメールフォルダに移ることが出来ます。このとき、移る先のフォルダ名はミニバッファできかれます。

VMは、新しいフォルダに移ると、最初の新着メッセージか未読メッセージを選択します。もう未読のメッセージがない時には、以前読んだ最後のメッセージを選択します。

M-x vm-mode で今いるバッファを VM major mode にします。そしてVMのコマンドがそこで使えるようになります。このコマンドは Lisp のプログラムで使うのに便利でしょう。auto-mode-alist に付け加えておいて、ある拡張子を持ったファイルを読み込んだ時に自動的にVMが始まるようにすることが出来るでしょう。vm-mode は、非対話的な使用のために、VM の起動時に実行する関数のうち幾つか(例えば、起動時にサマリを表示すること)に先行します。

vm-startup-with-summary は起動時にフォルダのサマリを表示するかどうかを決めます。この変数が nil に設定されている時にはサマリは表示されません。t なら全画面にサマリを表示します。その他の値が入っている時には画面を分割し一方にサマリを、そしてもう一方にフォルダを表示します。但しこれは pop-up-windows の値が non-nil で vm-mutable-windows の値も non-nil の時にしか効きません。デフォルトでは vm-startup-with-summary はnil です。

vm-mail-window-percentage はフォルダとサマリを同時に表示する時にどのくらいにウィンドウを分割するかのパーセント数を与えます。Emacs にはウィンドウサイズに下限があるのであまりに大きい値や小さい値を入れると小さい方のウィンドウが表示されません。デフォルトでは 75 が与えられていますがこの値は Emacs が 24行の時のウィンドウサイズの下限に収まる程度です。vm-mutable-windows の値を t にするのを忘れていると、 VM は vm-mail-window-percentage の値にかかわらずウィンドウの大きさを変更しません。

vm-inhibit-startup-message に non-nil を設定することで起動時に表示される VM の著作権, 複写(copying), 無保証宣言の表示を禁止することが出来ます。もしそうする必要があるなら、誰もがそうするようグローバルに設定するのではなく、.emacsで設定してください。というのは、ユーザーは自分の権利を知っておくべきだからです。このメッセージは起動後最初のキータイプで終了します。ですからメッセージを読むのを妨げたりはしません。

Selecting Messages
******************

VM で最もよく使われるメッセージを選択するコマンドは n (vm-next-message) と、p (vm-previous-message) です。これらふたつのコマンドはフォルダの中のメッセージを次々に選択してくれます。次々に戻っていって一番はじめのメッセージを選んだ後、さらに p を押すと一番最後のメッセージを選択します。逆に一番最後のメッセージの次には一番はじめのメッセージが出てきます。デフォルトの状態ではこれら二つのコマンドは削除フラグの立っているメッセージは飛ばすようになっています。これは vm-skip-deleted-messages という変数を nil にすることで飛ばさないようにすることが出来ます。同様に既に読んだメッセージを飛ばすように設定することも出来ます。それは vm-skip-read-messages を t にすることで達成されます。

n や p に引数を与えることも出来ます。この時にはその与えた引数個分だけメッセージを飛ばします。もしその与えた引数が 1 よりも大きい場合には、前述のスキップ制御変数の値にかかわらずスキップを行ないません。

vm-circular-folders はフォルダの中で最初/最後のメッセージを選んでいる状態からメッセージポインタを動かすようなコマンド (n, p 等) が入力された時にフォルダの最後/最初に移るかどうか(これを『フォルダがつながっている』と呼ぶことにします)を決める変数です。

t が入っている時には VM の全てのコマンドが『フォルダがつながっている』状態で動作します。一方 nil が代入されている時には逆に全ての VM のコマンドが『フォルダがつながっていない』状態で動作し、いくら大きな引数を与えてコマンドを実行しようとしても、そこで終ってしまいます。例えば、フォルダの最初の前/最後の後ろへ移動しようとしても移動できずにエラーになります。ところで、他の消去、セーブなどのコマンドでは引数が適当な範囲に収まらず、フォルダの大きさを越えてしまうような時には実行されません。nil でも t でもない値が入っている時には VM の移動のコマンドだけが『フォルダがつながっている』と認識します。セーブ, 削除, 非削除といったコマンドは nil の時と同じ動作をします。デフォルトでは vm-circular-folders の値は 0 です。

その他のメッセージ選択コマンド:

RET (vm-goto-message)
     メッセージ番号 N を選択します。N は 引数として与えることも出来ますし、もしそのようにして与えてない場合には ミニバッファで尋ねられます。

TAB (vm-goto-message-last-seen)
     最後にメッセージヘッダ/メッセージの本文を見たメッセージのところへ飛びます。

N (vm-Next-message)
P (vm-Previous-message)
     スキップ制御変数の設定を無視して、次/前のメッセージに移ります。

M-n (vm-next-unread-message)
M-p (vm-previous-unread-message)
     現在選択しているメッセージの次/前の新着あるいは未読のメッセージのところへ飛びます。もし全て読んでしまったフォルダの時には n や p と同じ動作をします。

M-s (vm-isearch-forward)
     Emacs の incremental search 同様に文字列を検索することが出来ます。但し、検索が終った時にその検索が終ったメッセージのところにメッセージポインタが移動することが異なります。 vm-search-using-regexps が non-nil の時には正規表現で検索することが出来ます。デフォルトでは この変数の値はnil にしてあります。See Incremental Search (the GNU Emacs Manual).

Reading Messages
****************

メッセージが選択されると VM はそのメッセージを表示します。デフォルトでは表示は2段階からなっています。プレビュー と ページング です。

Previewing
==========

プレビュー は VM 独自のメッセージの表示方法です。これは、まずメッセージのはじめの部分(たいていはヘッダの部分ですが)を表示して、そのメッセージを読むかどうかを選択することが出来ます。SPC をタイプするとメッセージの本文を表示します。メッセージが 1 画面分に収まらない時には SPC で 1 ページずつ表示していきます。

デフォルトでは、送受信者、件名、日時といったヘッダがプレビュー時に表示されます。もちろん何を表示するかは次の変数を変えることで変えられます。それは vm-visible-headers,vm-invisible-header-regexp, vm-preview-lines です。

vm-preview-lines の値は プレビュー 時にメッセージ本文の何行を表示するかの値です。デフォルトではこの値は 0 です。もし vm-preview-lines が nil の時には プレビュー は行われません。つまり、メッセージを選択すると同時に``read''(既読)にフラグを切替え、1 ページ分を表示します。

メッセージが選択された時に プレビュー で表示されるヘッダは vm-visible-headers の値で決まります。この変数には表示させたいヘッダの始めの方に合う正規表現のリストを代入します。このリストの順に合わせてヘッダは表示されます。

vm-invisble-header-regexp には表示したく ない ヘッダの正規表現を代入します。つまり、この変数に non-nil が入っている時には VM に正規表現に合わ ない 全てのヘッダを表示せよと指示したことになります。故にこの時には vm-visible-headers は単に最初に表示すべきヘッダの順番を決めるだけの意味しか持ちません。 vm-visible-headrs にも vm-invisible-headers-regexp にも合わないヘッダは最後に表示されます。

vm-visible-headers や vm-invisible-headers-regexp の値を VM の実行中に変えたとしても、すぐにヘッダの表示の仕方が変わる訳ではありません。変えるためにはメッセージを移る度毎に vm-discard-cached-data(j に割り当てられています。) を実行して、メッセージヘッダの並べ替えを VM に指示しなくてはなりません。いちいち j を押すのが面倒な人はフォルダの中の全てのメッセージをマークして、 vm-discard-cached-data コマンドをマークされたメッセージに対して実行してやると良いでしょう。See Message Marks

vm-highlighted-header-regexp という変数もあります。この変数には単一の正規表現を代入しますが、ここに入っている正規表現と合うヘッダはプレビュー 時に反転表示されます。例えば、 "^From\\|^Subject"が設定されている時には `From:' と `Subject:' が強調表示されます。

デフォルトでは VM は``read/unread/new''(既読/未読/新着)に拘らず全てのメッセージに対して プレビュー を行います。もしこれを、まだ読んでいないメッセージに対してのみ行いたい時には vm-preview-read-messages の値を nil にしてください。

t (vm-expose-hidden-headers) を押す度に VM は隠されているヘッダを表示したり隠したりのトグル動作をします。

Paging
======

プレビュー時に SPC をタイプすることでメッセージ本文を読むことが出来ます。もしそのメッセージが未読/新着メッセージだった時には``read''フラグが立ちます。その後は SPC で 1 ページ後ろへまた b や DEL で 1 ページ前へ進みます。メッセージ本文の最後のページで更に SPC を押すと次のメッセージが表示されます。 vm-auto-next-message の値が nil である場合には SPC を押しても次のメッセージに移りません。 n を押してください。

vm-honor-page-delimiters が non-nil の時、VM はページ区切り記号を認識し、実行します。メッセージを読んでいる途中、ページ区切り記号があると、その位置で一旦メッセージの表示を中断します。【News Reader での ^L の動作を思い出してください。】そして、SPC が押されると、ページ区切り記号の次の行から次のページが表示されます。Emacs の変数 page-delimiter の値が VM にとってのページ区切り記号となります。

既に読んだメッセージを``unread''にすることも出来ます。そうするには、 U (vm-unread-message) をタイプしてください。今選択されているメッセージのフラグを``unread''にセットします。

Sending Messages
****************

VM からメッセージを送る時、GNU Emacs に標準添付の Mail major mode を使うことでしょう。See Mail Mode (the GNU Emacs Manual) しかし、VM から呼び出した *mail*バッファには次のような特別なコマンドがあります。

C-c C-y (vm-yank-message)
     カレントフォルダからメッセージを *mail*バッファへコピーします。メッセージナンバーはミニバッファで訊かれます。デフォルトでは vm-included-text-prefix にセットされている文字列をメッセージの各行の前に挿入します。また、メッセージヘッダも全て本文と一緒にコピーされます。カーソルはコピーされたメッセージの前に、マークはメッセージの後ろにそれぞれセットされます。メッセージをコピーし、カーソル, マークのセットが終ると次に mail-yank-hooks に設定されている関数を実行します。前置引数(C-u) を与えられると VM は mail-yank-hooks を無視し、マークをセットせず、 vm-included-text-prefix を置くことなく、更に vm-visible-headers/vm-invisible-headers で指示されているヘッダの他はコピーしません。

C-c y (vm-yank-message-other-folder)
     vm-yank-message と同じ関数です。但しこちらはどのフォルダからメッセージを取ってくるかを訊いてきます。

C-c C-v <Any VM command key>
     *mail*バッファ内で C-c C-v に続いて VM のコマンドを入力することで VM のコマンドを使うことが出来ます。

m (vm-mail) で M-x mail 同様メッセージを送ることが出来ます。但し、vm-mail では上述のコマンドを使うことが出来ます。

vm-mail は VM の動いていないバッファからでも M-x vm-mail で起動することが出来ます。しかし、上述のコマンドのうちC-c y (vm-yank-message-other-folder) しか使うことが出来ません。というのも、他のコマンドにはすべて、対象となるフォルダが必要だからです。

メッセージを出した時に宛先を間違えるなどしてメールシステムからメッセージが送り返されてくることがあります。このような時には簡単に再びメッセージを出すことが出来ます。それは M-r(vm-resend-bounced-message) です。VM は送り返されてきたメッセージから本文およびシステムが付加したのでないヘッダを取り出して、*mail*バッファに置きます。宛先などのフィールドを修正した後に再びメッセージを送り出すことが出来ます。【ただし、 sendmail.8 の生成する MIME encapsulated mail には VM-5.35 の時点では対応されていません。】

Replying
========

VM には簡単にメッセージの返信を出すコマンドがあります。そのようなコマンドが起動された時、VM は 件名や受信者の部分がはっきりしている時にはそれらのヘッダフィールドを埋めます。返信を出す時に件名のフィールドに "Re: " を付ける習慣があります。VM はこの習慣を間接的にサポートしています。vm-reply-subject-prefix に入っている文字列を返信のメッセージの件名に付け加えます。もちろん、既に付いている時には重複して付けるようなことはしません。nil が入っている場合、これがデフォルトですが、件名の前には何も付加しません。いずれにせよ、メッセージヘッダを手で修正することは可能です。

VM は幾つかのコマンドで取り込んだテキスト(includede text)を生成し、メッセージの引用を容易にします。included textとは、返信を出すメッセージのコピーで、返信本文と区別できるよう取り込んだテキストの前には、適当な文字列が置かれます。vm-included-text-prefix に設定されている文字列が取り込んだテキストの前に置かれます。

vm-included-text-attribution-format は取り込んだテキストが誰によって書かれたか、というのを指示するために使います。この変数の値は non-nil である時には、vm-summary-format と同じようなフォーマットの文字列でなくてはなりません。この文字列は展開された後に取り込んだテキストの前に置かれます。デフォルトでは "someone writes:" の形で表示されますが、お好みにより日付なども入れることが可能です。See Summaries なお、この変数の値が nil であった場合にはこのような文章は何も置かれません。

vm-in-reply-to-format は返信メッセージの In-Reply-To フィールドのフォーマットを決定します。このフィールドは当然、reply バッファのヘッダの部分に収まります。vm-included-text-attribution-format のように vm-in-reply-to-format も vm-summary-format と同じフォーマットをした文字列でなくてはなりません。nil が入っているときには、 In-Reply-To フィールドは挿入されません。

返信用に生成される受信者フィールドは普通、元のメッセージの適当なヘッダフィールドから単にコピーしてくるだけです。【From: から To: へ, Cc: はそのまま,etc】 つまり、メールアドレス以外の部分、例えば本名やコメントもそのまま移します。これが嫌な時には vm-strip-reply-headers を non-nilに設定します。すると、VM はメールアドレス以外の部分を全て削り落して reply バッファにコピーします。

返信を書くコマンドは次のようなものがあります。

r (vm-reply)
     今選択しているメッセージの送信者だけに返信を出します。

R (vm-reply-include-text)
     今選択しているメッセージの送信者に元のメッセージを引用して返信を出します。

f (vm-followup)
     今選択しているメッセージの受信者全てに返信メッセージを出します。

F (vm-followup-include-text)
     今選択しているメッセージの受信者全てに元のメッセージを引用した返信を出します。

これら 4 つのコマンドは全て数値の引数 N を取ります。引数が与えられた時には今選択しているメッセージのみではなく、ここから数えて N-1 個、次(負の引数の時には前)のメッセージ全てに返信を出します。また、これらのコマンドは全て``replied''フラグを付けますが、これが本当に付くのはメッセージを出した後でです。また、マークを付けた全てのメッセージの同時に返信を出すということも出来ます。see Message Marks

もし自分が複数の受信者のうちの一人であるとき、f や F を使うと、宛先の中に自分のアドレスも含まれることになります。これは vm-reply-ignore-addresses の賢明な使い方によって避けられます。この変数には、返信を出す時に VM が受信者のフィールドから削除するアドレスの正規表現のリストを登録します。

Forwarding Messages
===================

VM にはメッセージを転送するコマンドが 2 つあります。 z(vm-forward-message) と @(vm-send-digest) です。

z をタイプすると、m と同様に *mail*バッファに移ります。違うのは m では *mail*バッファの本文の部分が空白なのに対して、こちらでは今選択されていたメッセージが *mail*バッファにコピーされていることです。転送されるメッセージは RFC 934 の message delimiter で取り囲まれます。vm-rfc934-forwarding の値が non-nil の場合、転送されるメッセージの (正規表現の) "^-" は "- -" へ置き換えられます。 (これはデフォルトです。) これは受信者が RFC 934 にしたがってメッセージ展開を行う際に必要となるものです。vm-forwarding-subject-format が non-nil の場合、転送されるメッセージのSubjectヘッダはこの変数の値を展開して得られる物となります。この件名は *mail*バッファの Subjectヘッダに収まります。nil が入っていた時には *mail* のSubjectヘッダを空欄にします。転送されたメッセージには ``forwarded'' のフラグが立ちます。 @ (vm-send-digest) は z と同じようにメッセージを転送します。違いは、今選択しているフォルダの全てのメッセージのダイジェストを作り、これを *mail*バッファに挿入することです。このコマンド vm-send-digest もマークに対応しています。See Message Marks マークを付けたメッセージに対してこのコマンドが使われると、マークがなかった時には今のフォルダのメッセージ全てのダイジェストを作るのに対して、マークの付いたメッセージだけのダイジェストを作ります。前置引数(C-u)を与えて起動すると VM はダイジェストの前にダイジェストの中身のリストを表示します。そのリストのフォーマットは vm-digest-preamble-format によって決まります。また、vm-digest-center-preamble の値が non-nil の時、リストは中央に寄せられます。

Saving Messages
***************

一般に、メッセージは、メッセージだけが含まれるファイルに保存されます。こういうファイルのことをフォルダ(folder)といいます。

VM でメッセージをフォルダにセーブするコマンドは s(vm-save-message) です。このコマンドで今選択しているメッセージをミニバッファで答えたフォルダにセーブします。vm-save-message に数値の引数 N を与えると、今選択しているメッセージと、そこから N-1 個のメッセージをフォルダに保存します。N が負の時には今のメッセージから、N-1 個のメッセージをセーブします。 vm-save-message でセーブされたメッセージには``filed''のフラグが立ちます。

vm-confirm-new-folders の値が non-nil である時、VM は新しいフォルダにメッセージを保存しようとすると、新しいフォルダを作る前に確認を求めてきます。

全てのメールフォルダを一つのディレクトリに集めておく時、 vm-folder-directory にそのディレクトリを入れておくと良いでしょう。この変数がセットされていると、vm-save-message はミニバッファでフォルダ名を尋ねる時にこのディレクトリをあらかじめミニバッファに表示してくれます。これでタイピングをいくらか減らせます。

メッセージを保存するフォルダを選択する助けになるものがもう一つあります。 vm-auto-folder-alist がそれです。この変数には次のようなフォーマットのリストを入れます。

     ((HEADER-NAME
        (REGEXP . FOLDER-NAME) ...)
       ...)

HEADER-NAME と REGEXP には文字列が、 FOLDER-NAME には、文字列あるいは文字列を生成する S 式を入れます。

HEADER-NAME で指示されたヘッダに REGEXP で示される正規表現と合うものが入っている時に、VM は該当する FOLDER-NAME を評価しその値をメッセージをセーブする時のデフォルトとします。もし、FOLDER-NAME の評価の結果出てくるものが相対的な path で表されるものであった時には vm-folder-directory かあるいはこれの値が nil である時には今選択しているフォルダのある default-directory を足します。

FOLDER-NAME が評価される時、カレントバッファは HEADER-NAME で示されるヘッダの内容だけを含みます。これはこのバッファの変更に対する安全のためです。buffer-substring 関数でヘッダの情報をもとにフォルダ名を作るのに正規表現の \( ...\) のグルーピングの情報を使うことも出来ます。FOLDER-NAME の評価結果がリストになったら、そのリストが新たな auto-folder-alist として使われ、再帰的に評価されます。

大文字小文字を区別して判定するか否かは vm-auto-folder-case-search の値で決まります。non-nil が代入されている時には大文字小文字を区別しません。デフォルトの値は t で大文字小文字を区別します。ただし、ヘッダの名前は大文字小文字の区別なくマッチします。というのは RFC 822 でヘッダの名前は大文字小文字を区別しないというのが決まっているからです。

VM がメッセージをフォルダにセーブする時、次の二つの方法のどちらかを使ってセーブします。メッセージを直接ディスク上のファイルに書き出す方法と、一旦フォルダを Emacs 上のバッファに取り込んで、そこに付け加える方法です。後者の方法でセーブした場合、自分自身でディスク上のフォルダのコピーへの書き出しをしなくてはなりません。vm-visit-when-saving という変数がこのどちらを使うかを決めます。t が代入されている時、VM はセーブする前に常に一旦該当するフォルダをバッファに取り込みます。(つまり後者の方法です。)nilが設定されている時には直接フォルダファイルに書き加えます。この場合 VM は既に Emacs のバッファ上に取り込まれているフォルダファイルに書き出すことはありません。この制限は バッファとディスク上のコピーとの同一性を保ために必要です。VM-VISIT-WHEN-SAVING が t でも nil でもない (例えば、デフォルトの値、0) の時、VM はフォルダがバッファに読み込まれている時にはバッファに、また、そうでない時にはファイルに直接に書き出します。

メッセージをフォルダに書き出した後、普通はそのメッセージを消去しますよね。 vm-delete-after-saving が non-nil に設定されている時には VM はメッセージをセーブした後、セーブしたメッセージの``delete''フラグを立てます。これはフォルダへの書き出しの時にだけ有効で、w (後述)では効きません。

他のコマンド:

w (vm-save-message-sans-headers)
     メッセージをヘッダ抜きでセーブします。このコマンドには vm-save-message と全く同じ動作をする引数を与えることが出来ます。このようにしてセーブされたメッセージには ``written'' フラグが立ちます。

A (vm-auto-archive-messages)
     まだファイルされていないメッセージを、vm-auto-folder-alistを用いて適当なフォルダにセーブします。削除フラグが設定されているメッセージはこのコマンドではセーブされません。前置引数(C-u)付きで起動されると、セーブする度に確認を求めてきます。

| (vm-pipe-message-to-command)
     今選択しているメッセージの一部分あるいは全体を入力として shell command を起動します。デフォルトではメッセージ全体が与えられます。

     C-u 一つの後で起動されると、メッセージの本文が渡されます。

     C-u 二つの後で起動されると、ヘッダの部分が渡されます。

     shell command が何か出力してくると、それは *Shell Command Output* バッファに表示されます。メッセージそのものは変更されません。

Deleting Messages
*****************

VM ではメッセージを消去する時にはまず ``delete'' (削除)フラグを立て、それからフォルダから消去(expunged)します。それでもまだ、フォルダをセーブするまではディスクの中のフォルダファイルには残っています。

d (vm-delete-message)
     今選択しているメッセージの削除フラグを立てます。N を引数として与えると、今選択しているメッセージと、次のN-1 個のメッセージに削除フラグを立てます。引数が負であった場合、今のメッセージから前に N-1 個に、削除フラグを立てます。

u (vm-undelete-message)
     今選択しているメッセージの削除フラグを降ろします。引数 N は今のメッセージとそれから次の N-1 個のメッセージの削除フラグを降ろします。引数 N が負の時には今のメッセージとその前のメッセージ N-1 個のフラグを降ろします。

k (vm-kill-subject)
     今選択しているメッセージと同じ件名を持つ(``Re:'' は無視します。)メッセージに削除フラグを立てます。

# (vm-expunge-folder)
     削除フラグの立っているメッセージを実際にカレントフォルダから消去します。

vm-move-after-deleting を non-nil にすると削除フラグを立てた後すぐに次のメッセージに移ります。同じように vm-move-after-undeleting を non-nil にすると、削除フラグを降ろした後すぐに次のメッセージへと移ります。

Editing Messages
****************

既に届いてフォルダにあるメッセージを編集するには e(vm-edit-message) をタイプします。今選択しているメッセージが新しいバッファにコピーされて、そのバッファに移り、そこで編集することが出来ます。このバッファの major mode は vm-edit-message-mode の値で決まります。デフォルトでは Text mode です。

メッセージの編集が終ったら、C-c ESC(vm-edit-message-end) をタイプします。メッセージは元のフォルダに挿入され、元々の古いメッセージと置き換えられます。もし、編集したメッセージをもともとのメッセージと置き換えたくない時には C-c C-] (vm-edit-message-abort) をタイプするか、あるいは単にそのバッファを C-x k (kill-buffer) でなくすと、置き換えられることはありません。

vm-edit-message に前置引数(C-u)を与えると、今選択しているメッセージの``edited'' フラグを降ろします(editバッファには移りません)。

VM *mail*バッファと同様に VM の全てのコマンドが edit バッファから C-c C-v を前にタイプすることで使うことが出来ます。

Message Marks
*************

VM では様々な用途にマーク(marks)というものを使うことが出来ます。 marks は今選択しているフォルダの一部あるいは全てのメッセージに打つことが出来ます。VM のコマンドの内、あるものは mark の打ってあるメッセージがないと動作しないものもあります。

今選択しているメッセージにマークを打つには M M【M-M ではありません】 (vm-mark-message) をタイプします。数値の引数 N を与えると今選択しているメッセージとその次 N-1 個のメッセージにマークを打ちます。引数が負である時には反対に前の方 N-1 個のメッセージにマークを打ちます。マークを打ったメッセージにはサマリウィンドウでメッセージ番号の右側にアスタリスク(*) が表示され、モードラインには ``MARKED'' と表示されます。

今選択しているメッセージを``MARKED'' の状態から外したい時には M U(vm-unmark-message) をタイプします。数値の引数が与えられると、 vm-mark-message と同じように動作します。

今いるフォルダの全てのメッセージにマークを打つには M m(vm-mark-all-messages) を使います。また、M u(vm-clean-all-marks) で今いるフォルダの全てのマークが開放されます。

マークを打ったコマンド全てに VM のコマンドを適用するためには M Nあるいは M n(vm-next-command-uses-marks) を VM のコマンドの前にタイプします。すると、次の VM のコマンドは全てのマークを打ってあるメッセージに適用され、適当な形でそれらのメッセージに対して実行されます。次のようなコマンドに適用することが出来ます。 vm-delete-message, vm-discard-cached-data, vm-followup, vm-followup-include-text, vm-reply, vm-reply-include-text, vm-save-message, vm-save-message-sans-headers, vm-send-digest, vm-undelete-message, vm-unread-message.

Undoing
*******

VM にはメッセージの属性に対して加えた変更を無効にするような機能 (undo) もあります。

C-x u や C-_ (vm-undo) は最後に行ったメッセージ属性への変更を取り消します。連続して vm-undo を行っていくと、変更した属性を遡って取り消していきます。間に undo の他のコマンドが入るとその時点から属性の変更の取り消しを遡ることは出来ません。というのは、一旦他のコマンドが入ってしまうと、vm-undo の undo を行うことになるからです。

メッセージの消去、セーブ、編集は取り消すことが出来 ない ので注意してください。

Grouping Messages
*****************

関連のあるメッセージをまとめて処理するために VM には G(vm-group-messages) というコマンドがあります。これは今選択しているフォルダの中の全てのメッセージをある規範にしたがってまとめるものです。グルーピング(Grouping) では規範にしたがって関連のあるメッセージが連続して並ぶようになります。しかし、実際にフォルダの中のメッセージの順番が変わる訳ではありません。単にバッファ内でだけ順番を変えるのです。グルーピングとソートを混同してはいけません。グルーピングは関連のあるメッセージを集めてまとめて扱いやすくするためのものです。【もし、フォルダの中のメッセージの順番を並べ変えたい時には Jamie Zawinski (jwz@lucid.com) さん製作の vm-sort.el を入手してください。】

Grouping は次のような規範で集めることが出来ます。

subject
     ``Re:'' を除き同じ件名のメッセージをまとめる。

author
     同じ発信者からのメッセージをまとめる。

recipient
     同じ受信者へのメッセージをまとめる。

date-sent
     発信日が同じメッセージをまとめる。

physical-order
     フォルダの中の物理的な順番に戻す。(デフォルト)

vm-group-by が non-nil に設定されていると、全てのフォルダに対して、デフォルトのグルーピングをこの変数に設定されている値にしたがって行います。もし、件名にしたがってグルーピングさせた順番が好みならば、 .emacs か .vm に (setq vm-group-by "subject") と書いておくとデフォルトで件名にしたがった順番で表示されます。

Reading Digests
***************

ダイジェスト(digest)とは一つ以上のメッセージを一つのメッセージの中に収めたものです。

VM ではダイジェストされたメッセージをコマンド一つ (``burst'') で個々のメッセージへと戻すことも出来ます。このようにして戻されたメッセージは VM の扱うメッセージと何ら変わるところはありません。

* (vm-burst-digest) コマンドはダイジェストされたメッセージを元通りの個々のメッセージへと戻し、今いるフォルダに追加します。しかる後にグルーピングされます。See Grouping Messages もともとのダイジェストされているメッセージは変更されません。また、ディスクへのセーブが実行されない限り、ディスク上のフォルダへの保存も行われません。

vm-burst-digest に前置引数(C-u)を与えて起動すると、VM は RFC 934 に従っていないようなダイジェストを処理しようとします。もし、 vm-burst-digestが適当でない場所でダイジェストされたメッセージを分けているようであれば、このダイジェストは RFC 934 に従っていないと考えられます。ですからこのような時には前置引数(C-u)を付けて試して見てください。

Summaries
*********

h (vm-summarize) をタイプすると、VM はカレントフォルダの中にあるメッセージのサマリを表示します。フォルダ内のメッセージに何らかの変更が加えられると、自動的にこのサマリに表示されている情報も変更されます。矢印 -> が今選択しているメッセージの行の左に表示されます。 vm-auto-center-summary の値でこの矢印をサマリウィンドウの中心の行に置いておくかどうかが変わります。t の時、VM はこの矢印を中心に留めるようにします。それに対して、nil の時には矢印を中心に留めるということはしません。t でも nil でもない値の時にはウィンドウが一つでない時には矢印を中心に持ってくるようにします。

vm-summary-format という変数がメッセージのサマリのフォーマットを決めます。この変数には文字列を代入します。この文字列は C 言語の printf と同じようなメッセージの様々な情報と置き換えられる ``%''指示子を入れることが出来ます。サマリウィンドウでは

指示子には次のようなものがあります。

        a - 属性を示すもの(4 ascii char分の幅)
            1 文字目:`D', `N', `U', ` ' 各々削除、新着、未読、既読を示します。
            2 文字目:`F', `W', ` ' 各々ファイル済み(保存済み)、書き出し済み
            を示します。
            3 文字目:`R'. `Z', ` ' 各々返信済み、転送済みを示します。
            4 文字目:編集したメッセージでは `E' がそうでなければ ` ' となり
            ます。
        A - より長いの属性表示(6 ascii char 分の幅)
            1 文字目:`D', `N', `U', ` ' 各々削除、新着、未読、既読を示します。
            2 文字目:`r', ` ' メッセージに返信したか否かを示します。
            3 文字目:`z', ` ' メッセージを転送したか否かを示します。
            4 文字目:`f', ` ' メッセージをファイルに転送したか否かを示します。
            5 文字目:`w', ` ' メッセージをファイルに書き出したか否かを示し
            ます。
            6 文字目:`e', ` ' メッセージを編集したか否かを示します。
        c - メッセージ本文の文字数(ヘッダを除く)
        d - メッセージの発信日
        f - メッセージの発信者のアドレス
        F - メッセージの発信者のフルネーム (もしなければ f と同じ)
        h - メッセージを発信した時刻
        i - メッセージID
        l - メッセージ本文の行数(ヘッダを除く)
        m - メッセージを発信した月
        M - 数値で表したメッセージを発信した月(1 月 = 1)
        n - フォルダ内でのメッセージ番号
        s - メッセージの件名
        t - メッセージの受信者のアドレスを `,' で区切って並べたもの
        T - メッセージの受信者のフルネーム を `,' で区切って並べたもの。もし
            なければ対応するアドレスを表示。
        w - メッセージを発信した曜日
        y - メッセージを発信した年
        z - メッセージの発信者がメッセージの発信時間を示すのに使ったタイム
            ゾーン
        * - マークを打たれた時 `*'、そうでなければ` 'が表示される。

``%%'' は `%' になります。

``%'' とその後に続くアルファベットの間にフィールドの幅を記述することが出来ます。正の数値を与えると右端に揃え、負の数値を書くと左端に揃えます。また、その後ろに``.''をつけて数値を書くことも出来ます。ここに与えられた数値がこのフィールドに記述できる文字数の限界値となり、それ以上長い文字列が与えられた時には切り詰めれて丸められます。

サマリフォーマットはメッセージ一つに付き一行である必要はありませんが、最後に改行記号("\n") を入れる必要があります。そうしないと、メッセージポインタがサマリウィンドウで正しくメッセージを指し示すことが出来ません。

サマリを起動時に自動的に作成することも出来ます。see Starting Up.

フォルダバッファと同様にサマリバッファでも VM のコマンドは全て使うことが出来ます。vm-follow-summary-cursor を non-nil にすると、VM はサマリウィンドウのカーソルのある行のメッセージに対して与えられたコマンドを実行します。但しこの機能はサマリバッファウィンドウからコマンドを与えた時 だけ しか効かないことに注意してください。

Miscellaneous
*************

ここには他のセクションに収めにくかったコマンドを集めてあります。

vm-confirm-quit
     この変数の値が t の時には VM はフォルダから抜ける時に確認を求めます。nil の時にはフォルダを抜けることで、知らないうちにメッセージが消えてしまうような時、すなわち、削除や 消去意識的に消したのではない時に確認を求めます。t でも nil でもない値の時にはメッセージ属性にまだセーブされていない変更があった時やメッセージが失われる時に確認を求めます。

vm-berkeley-mail-compatibility
     non-nil が代入されている時には、BSD Mail(1) と同じ Statusヘッダを読み書きします。これは VM を使って Mail の作ったメッセージフォルダを読む時に意味を持ちます。

vm-gargle-uucp
     non-nil の時、この変数には UUCP のアドレスを美しく整形するための正規表現を入れます。これはサマリなどで %f, %t を使う時に使うためのものです。

vm-mode-hooks
     vm-mode に入る時に実行すべきフック関数のリストを代入します。このようなフックでは、一般にキーバインディングや局所変数を変更します。フォルダバッファを操作することは可能ですが、お勧めしません。

vm-delete-empty-folders
     non-nil が設定されている時には VM は空のフォルダファイルをディスクに書き出した時に消します。

vm-mutable-windows
     この変数の値は VM のウィンドウの使用法を決定します。t が入っている時には VM は Emacs のディスプレイを自由に改変することが出来ます。つまり、全画面をぶんどって、目的に応じて勝手に分割したりします。nil が代入されていると、VM が使う ウィンドウは VM を起動したウィンドウに限定されます。 VM は決して新しいウィンドウを作ったり、他のウィンドウを消したり使ったりしないばかりか、自分自身のいるウィンドウの大きさを変えたりもしません。tでも nil でもない値が代入されている時には、VM に他のウィンドウを使う許可も与えます。ただし、新しいものを作ったり、ウィンドウを消したり、あるいはウィンドウの大きさを変えたりはしません。

mail-yank-hooks
     この変数には vm-yank-message によって *mail*バッファにメッセージをコピーした後で呼び出したい関数のリストをいれます。各々の関数が呼び出された後で、カーソルはコピーしたテキストの前にマークはテキストの後ろをさしていなくてはなりません。

     この変数は VM だけにある変数ではありませんが、引用プログラム、例えば SUPERCITE を VM と一緒に使うことが出来るように VM が引き受けるようになっています。