xmh(1) MH への X インターフェースでメールを読み書きする

書式

xmh [-path mailpath] [-initial foldername] [-flag] [-toolkitoption ...]

説明

xmh プログラムは MH (Message Handling System) にグラフィカルユーザイ ンタフェースを提供する。実際にあなたのメールを扱うために、 MH パッ ケージを呼ぶ。電子メールメッセージは、作成され、送信され、受信され、リ プライされ、転送され、ソートされ、フォルダにしまわれる。xmh はユー ザインタフェースをカスタマイズするための大規模な機能を提供する。

このドキュメントは Athena ウイジェットセット (Athena Widget Set) の多 くの局面を紹介する。

オプション

-path directory このオプションは、メールが処理される代替のメールフォルダの集合を指定す る。ディレクトリは、絶対パス名として指定される。デフォルトメールパスは、 MH プロファイル ( MH 環境変数によって決定され、そして、 $HOME/.mh_profile がデフォルトである ) における Path コンポーネントの 値である。MH Path がプロファイルにおいて与えられないならば、 $HOME/Mail が、パスとして使われるであろう。
-initial folder このオプションは、新しいメールが取り込まれ、 xmh によって初期状 態で開かれる代替フォルダを指定する。デフォルトの初期フォルダは、 ``inbox'' である。
-flag
このオプションによって、 xmh は適切なフォルダボタンの外観を変え、 そして、新しいメールが着いたときに xmh アイコンの外観を変えるよ うにウィンドウマネージャに要求する。デフォルトでは、新着メールがあると き、 xmh は、 ``inbox'' フォルダボタンの外観を変える。アプリケー ション固有のリソース checkNewMail が、この通知をオフにするのに使 われるが、 -flag オプションは、それをさらに上書きする。

これらの 3 つのオプションには、それぞれに対応するアプリケーション固有 のリソース、 MailPathInitialFolderMailWaitingFlag があり、これらはリソースファイルで指定できる。

標準の toolkit コマンド行オプションは、X(7) で説明されている。

インストール

xmh は、ユーザが MH バージョン 6 を使うようセットアップ 済であることを必要とする。そのためには、あなたのホームディレクトリに らば、``Current-Folder'' で始まる行が含まれるかどうかをチェックしなさ い。もし存在するのであれば、あなたは、バージョン 4 あるいはそれ以前の MH を使っており、バージョン 6 に移行するために、その行を除去しな ければならない。( そうしないと、設定によっては xmh のハングアッ プにつながる stderr へのうわべだけもっともらしい出力を引き起こす。 )

.mh_profile をまだ持っていないならば、シェルで ``inc'' をタイプするこ とによってそれ ( そして、他にも必要なもの全て ) を作成できる。新しいメー ルを取り込むために xmh を使う前にこれをするべきである。

更に詳細な情報は、 mh(1) ドキュメンテーションを参照しなさい。

xmh のユーザインターフェースの大部分は、 Xmh アプリケー ションクラスデフォルトファイルにおいて設定される。このファイルが適切 にインストールされていないと、 xmh が使われるときに、警告メッセー ジが現れるであろう。xmh は、以前の R4 アプリケーションクラスデフォ ルトファイルとの互換性がある。

SendBreakWidth リソースのデフォルト値は、 R4 以降変わった。

基本的な画面レイアウト

xmh は、4 つの主要なエリアに分かれた 1 つのウィンドウでスタートする :

-
プルダウンメニューを持つ 6 つのボタン。

-
ボタンの集合、各トップレベルフォルダのために 1 つづつ。MH の新 しいユーザは、 2 つのフォルダ、 ``drafts'' 、及び、 ``inbox'' を持っ ているであろう。

-
開いているフォルダにおけるメッセージの一覧ないし目次。初期状態では、こ れは ``inbox'' のメッセージを表示するであろう。

-
あなたのメッセージのうちの 1 つの表示。初期状態では、空白である。

xmh と Athena ウィジェットセット

xmh は X Toolkit Intrinsics 、及び、 Athena ウィジェットセットを 使用する。下で ( スクロールバー、 buttonboxes 等 ) 示された多数の機能 は、実際には Athena ウィジェットセットの一部であり、そして、完全を期す ためにのみここで示される。更に詳細な情報については、Athena ウィジェッ トセットのドキュメンテーションを参照せよ。

スクロールバー

メインウィンドウのある部分には、グレーのバーを含む垂直のエリアが左側に ついている。このエリアは、スクロールバーである。ウィンドウ内のデータが、 表示され得るより更に多くのスペースを必要とするときはいつでも、スクロー ルバーが使われる。グレーバーは、データのどの部分が見えるかを示す。従っ て、エリア全体の長さにわたってグレーであれば、データ全体が表示されてい る。前半がグレーであれば、データの上半分を見ている。メッセージ表示エリ アには、表示しているエリアよりメッセージのテキストが広いときには、水平 のスクロールバーがついている。

スクロールバーにおいてデータのどの部分が見えるかを変えるためにポインタ を利用しうる。ポインタボタン 2 をクリックすると、グレーエリアのトッ プは、ポインタの位置に動き、データの対応する部分が表示される。ポインタ ボタン 2 を押せば、グレーエリアをドラッグしてまわることができる。これ によって、データのトップに行くのが容易になる。つまり、ボタン 2 を押し、 スクロールバーの上を外れるまでドラッグし、離しなさい。

ボタン 1 をクリックすると、ポインタの右側のデータは、ウィンドウのトッ プにスクロールする。ポインタボタン 3 をクリックすると、ウィンドウのトッ プのデータは、ポインタのある位置にスクロールダウンするであろう。

BUTTONBOX, ボタン、メニュー

長方形あるいは丸い境界に囲まれている多くの単語、または短い句を含むエリ アは buttonbox と呼ばれる。実際に、おのおのの長方形あるいは丸いエリア は、ポインタをそこに動かして、ポインタボタン 1 を押することによって押 すことのできるボタンである。ある buttonbox がそれに合う以上に多くのボ タンを持っているときには、スクロールバー付きで表示され、常に望むボタン にスクロールし得る。

いくらかのボタンは、プルダウンメニューを持っている。ポインタがこれらの ボタンのうちの 1 つの上にあるときにポインタボタンを押すと、プルダウン メニューが表示される。ボタンを押し続けたままメニューの上でポインタを動 かす (これを「ポインタをドラッグする」と呼ぶ) と、メニュー上の選択可能 な項目をポインタが通過するにつれて、それらの項目がハイライトされる。メ ニューにおいて項目を選択するためには、そのアイテムがハイライトされてい る間にポインタボタンをリリースしなさい。

相対的なエリアサイズの調整

もしあなたがメインウィンドウの様々なエリアのサイズに満足していないけれ ば、それらは容易に変えられる。各領域の間の境界の右端の近くには、 grip と呼ばれる黒いボックスがある。単にポインタでグリップをポイ ントし、ポインタボタンを押し、上または下にドラッグし、リリースする。何 が起きるかは、どのポインタボタンを押したかによって変わる。

ポインタボタン 2 でドラッグするならば、その境界のみが動くであろう。こ のモードは最も理解しやすいが、最も役に立たない。

ポインタボタン 1 でドラッグするならば、上のウィンドウのサイズが調整さ れる。xmh はそれより下のウィンドウを調整して補償しようと試みる。

ポインタボタン 3 でドラッグするならば、下のウィンドウのサイズが調整さ れる。xmh はそれより上にあるウィンドウを調整して補償しようと試み る。

全てのウィンドウは、最小、及び、最大サイズを持っている ; ウィンドウに 無効なサイズを持たせるであろう点を過ぎて境界を動かすことは決して許され ないであろう。

メールを処理する

このセクションでは、選択されたフォルダ、現在のフォルダ、選択された メッセージ 、現在のメッセージ、選択されたシーケンス、及び、現在のシー ケンスの概念を定義するであろう。各 xmh コマンドは、導入される。

カスタマイズにおける使用のために、各コマンドと対応するアクション手続きが行 われる ; これらのアクション手続きは、ユーザインタフェース、特にキーボー ドアクセラレータ、及び、アプリケーションリソース CommandButtonCount によって作成された任意のボタンボックスにおけ るボタンの役割をカスタマイズするために使われ得る。

フォルダとシーケンス

フォルダは、メールメッセージの集合を含むか、空である。xmh は、 1 つのレベルのサブフォルダを持つフォルダをサポートする。

選択されているフォルダは、がフォルダボタン上のバーに foldername が現れ るもののどれかである。これが必ずしも現在表示されているのと同じフォルダ であるとは限らないことに注目しなさい。選択されているフォルダを変えるため には、単に所望のフォルダボタンをポインタボタン 1 で押しなさい ; そのフォルダがサブフォルダを持っているならば、プルダウンメニューの 中からフォルダを選択しなさい。

目次すなわち toc は、表示しているフォルダのメッセージをリストする。目 次の上のタイトルバーは、表示されているフォルダの名前を表示する。

toc タイトルバーには、表示しているフォルダの中の表示されているメッセー ジのシーケンスの名前も同様に表示される。全てのフォルダには、そのフォル ダの全てのメッセージを含む暗黙のシーケンス ``all'' があり、 toc タイト ルバーの初期表示は、 ``inbox:all'' である。

FOLDER (フォルダ) コマンド

Folder (フォルダ) コマンドメニューは、グローバルな性質のコマンドを含む :

Open Folder (フォルダを開く) 選択されているフォルダにおけるデータを表示する。このようにして、選択さ れているフォルダは、表示されているフォルダにもなる。 このコマンドと対応するアクション手続きは、 XmhOpenFolder([foldername]) である。選択され開かれる フォルダの名前として任意引き数をとる。フォルダが指定されなければ、選択さ れているフォルダが開かれる。このアクションは、フォルダメニューボタン、も しくは、フォルダメニューからのイベントトランスレーションの一部として、 もしくは、フォルダメニューボタンまたはフォルダメニュー以外のいずれかの ウィジェットへのキーボードアクセラレータのバインドとして指定されるかも しれない。
Open Folder in New Window (新しいウィンドウにフォルダを開く)
追加のメインウィンドウに選択されたフォルダを表示する。しかし、 xmh は同じフォルダを一度に一つ以上のウィンドウに表示しようとする ことを禁止しないが、確実に表示することはできないことに注意せよ。 対応するアクションは、 XmhOpenFolderInNewWindow() である。
Create Folder (フォルダを作成する) 新しいフォルダを作成する。新しいフォルダの名前を入力するようプロンプト が出る。名前を入力するには、表示された空白のボックスにポインタを移動し、 タイプせよ。サブフォルダは、親フォルダ、スラッシュ、そして、サブフォル ダ名を指定することによって作成される。例えば、 ``clients'' という名前 の既存のフォルダのサブフォルダである ``xmh'' という名前のフォルダを作 成するためには ``clients/xmh'' とタイプする。 完了したら Okay ボタンを クリックするか、単に Return をタイプしなさい。この操作をキャンセルする ためには、 Cancel をクリックしなさい。 Create Folder に対応するアクション は XmhCre-ateFolder() である。

Delete Folder (フォルダを削除する)
選択されたフォルダを破壊する。この動作を確認するように要求される ( 確認ダイアログボックスを参照せよ ) 。フォルダを破壊すると、そのフォ ルダのあらゆるサブフォルダも同様に破壊する。 対応するアクションは、 XmhDeleteFolder() である。

Close Window (ウィンドウを閉じる)
変更が何も失われないことを最初に確認した後、 xmh を終了する。 或いは、追加の xmh ウィンドウから選択されたならば、単にそのウィ ンドウを閉じる。対応する action は、 XmhClose() である。

ハイライトされているメッセージ、選択されているメッセージ、

現在のメッセージ

目次のエリアにおいて、連続するメッセージの集まりをハイライトすることが 可能である。メッセージをハイライトするためには、ポインタボタン 1 をク リックしなさい。メッセージの範囲をハイライトするためには、最初のメッセー ジでポインタボタン 1 を、最後のメッセージでポインタボタン 3 をクリック するか、或いは、ポインタボタン 1 を押し、ドラッグし、離しなさい。選択 されたメッセージの範囲を拡張するには、ポインタボタン 3 を使いなさい。 目次において全てのメッセージをハイライトするためには、ポインタボタン 1 を素早く 2 回クリックしなさい。

選択されているメッセージは、ハイライトされているメッセージが存在すれば、 それと同じである。ハイライトされているメッセージがなければ、選択されて いるメッセージは、現在のメッセージと同じものとして扱われる。

現在のメッセージは、メッセージ番号の次の `+' によって示される。これは 通常、現在表示されているメッセージと対応する。例えば、新しいフォルダを 開いたとき、現在のメッセージは、表示されているメッセージと異なるであろ う。メッセージが表示されるとき、その表示の上のタイトルバーは、そのメッ セージを識別する。

TABLE OF CONTENTS (目次) コマンド

Table of Contents (目次) コマンドメニューは、開かれている、ある いは表示されているフォルダに作用するコマンドを含む。

Incorporate New Mail (新しいメールを取り込む) あらゆる新しいメールを表示されているフォルダに受け取り、一番最初の新し いメッセージを現在のメッセージとして設定する。このコマンドは、表示され ているフォルダが新しいメールを受け取ることのできるときにのみ、メニュー から選択可能であり、実行できる。デフォルトでは、 ``inbox'' のみが、新 しいメールを取り込むことを許される。対応するアクションは、 XmhIncorporateNewMail() である。
Commit Changes (変更をコミットする) このフォルダでマークされた全ての削除、移動、及び、コピーを実行する。 対応するアクションは、 XmhCommitChanges() である。
Pack Folder (フォルダを詰める) このフォルダにおけるメッセージの番号を、1 から始まって 1 づつ増えるよ うに、振りなおす。対応するアクションは、 XmhPack-Folder() である。
Sort Folder (フォルダをソートする) このフォルダにおけるメッセージを時間順にソートする。( 副作用としてこ れは、フォルダを詰めることにもなる。) 対応するアクションは、XmhSortFolder() である。
Rescan Folder (フォルダを再スキャンする) メッセージのリストを再構築する。あなたがどのようなメッセージを持ってい るか xmh が間違った情報を持っていると思ったときはいつでも、これ を利用できる。( 特に、あなたが xmh を使わずにストレート MH コマンドを利用して変更を行うならば、これが必要である。 ) 対応するアクションは、 XmhForceRescan() である。

MESSAGE (メッセージ) コマンド

Message (メッセージ) コマンドメニューは、選択されたメッセージ、 あるいは選択されたメッセージがなければ現在のメッセージに対して作用する コマンドを含む。

Compose Message (メッセージを作成する)
新しいメッセージを作成する。作成するための新しいウィンドウが現れる。そ の解説は後述の作成ウィンドウセクションにある。このコマンドは、現在のメッ セージに影響を及ぼさない。対応するアクションは、 Xmh-ComposeMessage() である。

View Next Message (次のメッセージを表示する)
最初の選択されているメッセージを表示する。ハイライトされているメッセー ジがなければ、現在のメッセージを表示する。既に現在のメッセージが表示さ れていれば、現在のメッセージの後で最初のマークのないメッセージを表示す る。対応するアクションは、 XmhViewNextMessage() である。

View Previous (前を表示する)
最後の選択されているメッセージを表示する。ハイライトされているメッセー ジがなければ、現在のメッセージを表示する。既に現在のメッセージが表示さ れていれば、現在のメッセージの前で最初のマークのないメッセージを表示す る。対応するアクションは、 XmhViewPrevious() である。

Delete (削除する)
選択されているメッセージに削除マークをつける。ハイライトされているメッ セージがなければ、現在のメッセージに削除マークをつけ、次のマークのない メッセージを自動的に表示する。対応するアクションは、 XmhMarkDelete() である。

Move (移動する)
選択されているメッセージに、現在選択されているフォルダに移動するようマー クをつける。( 選択されているフォルダが表示されているフォルダと同一であ れば、このコマンドは単に警告音を出す。 ) ハイライトされているメッセー ジがなければ、現在のメッセージに移動されるようにマークを付け、次のマー クのないメッセージを表示する。対応するアクションは、 XmhMarkMove() である。

Copy as Link (リンクとしてコピーする)
選択されているメッセージを選択されたフォルダにコピーするようにマークす る。( 選択されているフォルダが表示されているフォルダと同一であれば、こ のコマンドは単に警告音を出すであろう。 ) ハイライトされているメッセー ジがなければ、現在のメッセージにコピーするようにマークする。実際にはメッ セージはリンクされるのであって、コピーされるのではないことに留意せよ。 xmh によってコピーされたメッセージを編集することは、メッセージの 全てのコピーに影響を及ぼすであろう。対応するアクションは、 Xmh-MarkCopy() である。

Unmark (マークを取り消す)
選択されているメッセージ、または、何もハイライトされていなければ現在の メッセージから、上記の 3 種類のマークを取り消す。対応するアクションは、 XmhUnmark() である。

View in New (別に表示する)
最初の選択されているメッセージ、または何もハイライトされていないならば 現在のメッセージ、のみを含む新しいウィンドウを作成する。対応する アクションは、 XmhViewInNewWindow() である。

Reply (リプライする)
最初の選択されているメッセージ、または何もハイライトされていないならば 現在のメッセージ、に対するリプライのための作成ウィンドウを作成する。対 応するアクションは、 XmhReply() である。

Forward (転送する)
選択されているメッセージ、または、何もハイライトされていなければ現在の メッセージをカプセル化したものを初期値としてボディに含む作成ウィンドウ を作成する。対応するアクションは、 XmhForward() である。

Use as Composition (作成として用いる)
最初の選択されているメッセージ、または何も選択されていなければ現在のメッ セージ、の内容でボディが初期化された作成ウィンドウを作成する。この作成 中に行うあらゆる変更は、 ``drafts'' フォルダにおける新しいメッセージに セーブされ、オリジナルのメッセージは変更しないであろう。しかしながら、 この規則に対する例外がある。作成に使われるメッセージが ``drafts'' フォ ルダ ( 「バグ」を参照せよ ) の中から選択されたならば、それらの変更は、 オリジナルのメッセージに反映されるであろう ( 「作成ウィンドウ」を参照 せよ ) 。このコマンドと対応するアクション手続きは、 XmhUseAsComposition() である。

Print (印刷する)
選択されているメッセージ、または、何も選択されていなければ現在のメッセー ジを印刷する。xmh は、通常 enscript(1) コマンドを呼び出す ことによって印刷するが、これは、 xmh のアプリケーション固有のリ ソース PrintCommand によってカスタマイズされ得る。対応する アクションは、 XmhPrint() である。

SEQUENCE (シーケンス) コマンド

Sequence (シーケンス) コマンドメニューは、メッセージシーケンス ( 「メッセージシーケンス」を参照せよ ) 、及び、現在表示しているフォル ダのために定義されたメッセージシーケンスのリストと関係があるコマンドを 含む。選択されているメッセージシーケンスは、メニューの余白部分において、 その項目におけるチェックマークによって示される。選択されているメッセー ジシーケンスを変更するためには、sequence メニューの中から新しいメッセー ジシーケンスを選択しなさい。

Pick Messages (メッセージを pick する) 新しいメッセージシーケンスを定義する。 対応する action は、 XmhPickMessages() である。

現在のフォルダに ``all'' メッセージシーケンス以外のメッセージシーケ ンスのある場合にのみ、以下のメニュー項目は意味をもつであろう。

Open Sequence (シーケンスを開く) 表示されているシーケンスを、選択されているシーケンスと同じになるように 変更する。対応するアクションは、 XmhOpenSequence() である。

Add to Sequence (シーケンスに追加する) 選択されているメッセージを選択されているシーケンスに追加する。 対応するアクションは、 XmhAddToSequence() である。

Remove from Sequence (シーケンスから削除する) 選択されているメッセージを選択されているシーケンスから削除する。 対応するアクションは、 XmhRemoveFromSequence() である。

Delete Sequence (シーケンスを削除する) 選択されたシーケンスを完全に削除する。それらのメッセージ自体は影響を受 けず、単にそれらのメッセージは、もはや一つに集まってメッセージシーケン スを定義しなくなる。対応するアクションは、 XmhDeleteSequence() で ある。

VIEW (表示) コマンド

View (表示) メニューと、 ( Message メニューコマンド View In New の結果である ) 表示ウィンドウの buttonboxes のコマン ドは、 Message (メッセージ) メニューの同名のコマンドに対応する機 能を持つが、これらは、選択されているメッセージや現在のメッセージではな く、表示されているメッセージに作用する。

Close Window (ウィンドウを閉じる) 表示されているメッセージが別の表示ウィンドウにあるとき、このコマンドは、 あらゆるセーブされていない編集の状態について確認した後で、その表示を閉 じる。対応するアクション手続きは、 XmhCloseView() である。
Reply (リプライする) 表示されているメッセージに対するリプライの作成ウィンドウを作成する。 対応するアクション手続きは、 XmhViewReply() である。
Forward (転送する) 表示されているメッセージをカプセル化したものを含んだボディで初期化され た作成ウィンドウを作成する。対応するアクションは、 XmhViewForward() である。
Use As Composition (作成として用いる) 表示されているメッセージを含んだボディで初期化された作成ウィンドウを作 成する。作成ウィンドウにおいてなされたあらゆる変更は、 ``drafts'' フォ ルダにおける新しいメッセージにセーブされ、オリジナルのメッセージは変更 しない。例外 : 表示されているメッセージが ``drafts'' フォルダの中から 選択されたときには ( 「バグ」を参照せよ ) 、オリジナルのメッセージが編 集される。このコマンドに対応するアクション手続きは、 XmhViewUse-AsComposition() である。
Edit Message (メッセージを編集する) このコマンドは、表示されているメッセージの直接的な編集を可能にする。 アクション手続きは、 XmhEditView() である。
Save Message (メッセージをセーブする) そのメッセージが編集されるまでは、このコマンドは無意味である。起動され ると、編集結果は、表示におけるオリジナルのメッセージにセーブされる。 対応するアクションは、 XmhSaveView() である。
Print (印刷する) 表示されているメッセージを印刷する。 xmh は、 enscript(1) コマンドを起動することによって印刷するが、これは、アプリケーション固有 のリソース PrintCommand でカスタマイズされ得る。 対応するアクション手続きは、 XmhPrintView() である。
Delete (削除する) 表示されているメッセージに削除のためのマークをつける。 対応するアクション手続きは、 XmhViewMarkDelete() である。

オプション (Options メニュー)

Options (オプション) メニューは、 1 つの項目を含む。

Read in Reverse (逆順に読む) 選択されると、 このメニュー項目のマージンにチェックマークが現れる。 Read in Reverse (逆順に読む) は、次の / 前のメッセージの意味を交換する であろう、そして現在のメッセージマーカを反対の方向に進める。これは、最 新のメッセージを最初に、という順番でメッセージを読むことを望むならば、 有益である。このオプションはトグルとして働く。効果を取り消すためには、 メニューからもう一度これを選択しなさい。このオプションが選択されるとチェッ クマークが現れる。

作成ウィンドウ

作成ウィンドウは、 Message コマンドメニューの中から Compose Message を選択するか、 Message または View コマンドメニュー から Reply または Forward または Use as Composition を選択することによって作成される。これらは、メールメッセージを作成する ために使われる。通常のテキスト編集ファンクションとは別に、作成ウィンド ウと関連する 6 つのコマンドボタンがある :
Close Window (ウィンドウを閉じる) 作成ウィンドウを閉じる。もし変更が最も最近の Save (セーブ)、または、 Send (送信) 以後に行われていれば、それらの変更を失うことの確認を要求さ れるであろう。対応するアクションは、 XmhCloseView() である。

Send (送信する) この作成内容を送る。対応するアクションは、 XmhSend() である。

New Headers 現在の作成内容を空のメッセージで置き換える。最も最近の Send (送信) 、 または、 Save (セーブ) 以降に変更が行われていれば、それらの変更内容を 失なうことの確認を要求されるであろう。対応するアクションは、 XmhResetCompose() である。

Compose Message (メッセージを作成する) 別の新しい作成ウィンドウを開く。対応するアクションは、 XmhComposeMessage() である。

Save Message (メッセージをセーブする) 自分の draft フォルダにこの作成内容をセーブする。そして、作成を安全に 閉じ得る。将来いつか、 draft フォルダを開き、メッセージを選択し、そし て、 ``Use as Composition'' コマンドを使うことによって作成作業を継続し 得る。対応するアクションは、 XmhSave() である。

Insert (挿入する) 関連するメッセージを作成に挿入する。作成ウィンドウが ``Reply'' コマン ドで作成された場合は、関連するメッセージは、リプライ対象のメッセージで ある。そうでない場合は、関連するメッセージは定義されておらず、このボタ ンは無意味である。 メッセージは、挿入される前にフィルタされるかもしれ ない。更に詳細な情報はアプリケーション固有のリソースの中の ReplyInsert-Filter を参照せよ。対応するアクションは、 XmhInsert() である。

アクセラレータ

アクセラレータは、ショートカットである。これらにより、キーボードから、 あるいはポインタを使って、メニューを使わずにコマンドを起動することが可 能になる。

xmh は、一般的なアクションのためにポインタアクセラレータを定義する。 1 回のクリックによってメッセージを選択し、表示するためには、目次のメッ セージの項目上でポインタボタン 2 を用いなさい。一回のアクションでフォル ダまたはシーケンスを選択し、開くためには、ポインタボタン 2 でフォルダ またはシーケンスを選択しなさい。

ハイライトされているメッセージ、あるいはどれもハイライトされていなけれ ば現在のメッセージに、あるフォルダに移動するマークをつけるためには、ポ インタボタン 3 を用いて対象となるフォルダを選択し、同時にメッセージに マークをつける。 同様に、ポインタボタン 3 によってシーケンスを選択することにより、ハイ ライトされている、あるいは現在のメッセージをそのシーケンスに加えられる。 どちらの操作においても、選択されているフォルダまたはシーケンス、そして、 表示されているフォルダまたはシーケンスには、変更はない。

メッセージを編集中の表示エリアを除き、 xmh は、メインウィンドウ 上で次のキーボードアクセラレータを定義する :

        Meta-I          Incorporate New Mail (新しいメールを取り込む)
        Meta-C          Commit Changes (変更をコミットする)
        Meta-R          Rescan Folder (フォルダを再スキャンする)
        Meta-P          Pack Folder (フォルダを詰める)
        Meta-S          Sort Folder (フォルダをソートする)
        Meta-space      View Next Message (次のメッセージを表示する)
        Meta-c          Mark Copy (コピーのマークをつける)
        Meta-d          Mark Deleted (削除のマークをつける)
        Meta-f          Forward the selected or current message
                        (選択されているか現在のメッセージを転送する)
        Meta-m          Mark Move (移動のマークをつける)
        Meta-n          View Next Message (次のメッセージを表示する)
        Meta-p          View Previous Message (前のメッセージを表示する)
        Meta-r          Reply to the selected or current message
                        (選択されているか現在のメッセージにリプライする)
        Meta-u          Unmark (マークを取り消す)
        Ctrl-V          Scroll the table of contents forward
                        (目次を先にスクロールする)
        Meta-V          Scroll the table of contents backward
                        (目次を逆にスクロールする)
        Ctrl-v          Scroll the view forward
                        (表示を先にスクロールする)
        Meta-v          Scroll the view backward
                        (表示を逆にスクロールする)

テキスト編集コマンド

テキストを編集するコマンド全ては、実際には Athena ウィジェットセットに おける Text ウィジェットによって定義される。それらのコマンドは、X Toolkit Intrinsics のキー再バインド機能により、下記のデフォルトとは異 なったキーにバインドされる。更に詳細は、X Toolkit Intrinsics 、及び、 Athena ウィジェットセットのドキュメンテーションを参照せよ。

何かのテキストを入力するように要求されるときはいつでも、標準のテキスト 編集インタフェースを利用している。様々なコントロールやメタキーストロー クコンビネーションは、ある程度 Emacs ライクなコマンドセットにバインド されている。更に、ポインタボタンが、テキストの一部分を選択する、もしく は、テキスト上の挿入ポイントを動かすために使われる。ポインタボタン 1 を押すことにより、挿入ポイントはポインタに動く。ボタン 1 は、ダブルク リックでワードを選択し、 トリプルクリックで行を選択し、 4 回クリックで パラグラフを選択し、そして、素早く 5 回クリックすることで全文を選択す る。あらゆる選択範囲は、ポインタボタン 3 を使うことによってどちらの方 向へでも拡張される。

下記において、 line (行)は、ウィンドウにおいて表示されている文字 の一行を指す。 paragraph (段落) は、キャリッジリターンの間のテキ ストを指す。一つの段落の中のテキストは、ウィンドウの現在の幅に基づいた 表示のために行に分割される。メッセージが送信されるとき、テキストは、 アプリケーション固有のリソース SendBreakWidth 、及び、 SendWidth の値に基づいて行に分割される。

以下のキーストロークコンビネーションが、定義されている :

Ctrl-a    Beginning Of Line   Meta-b         Backward Word
          行頭へ                          一語戻る
Ctrl-b    Backward Character  Meta-f         Forward Word
          一文字戻る                    一語進む
Ctrl-d    Delete Next Character              Meta-iInsert File
          次の文字を削除する        ファイルを挿入する
Ctrl-e    End Of Line         Meta-k         Kill To End Of Paragraph
          行末へ                          段落末までカットする
Ctrl-f    Forward Character   Meta-q         Form Paragraph
          一文字進む                    段落を整形する
Ctrl-g    Multiply Reset      Meta-v         Previous Page
          複数リセット                 前ページへ
Ctrl-h    Delete Previous Character          Meta-yInsert Current Selection
          前の文字を削除する        現在のセレクションを挿入する
Ctrl-j    Newline And Indent  Meta-z         Scroll One Line Down
          改行しインデントする     下に一行分スクロールする
Ctrl-k    Kill To End Of Line Meta-d         Delete Next Word
          行末までカットする        次の単語を削除する
Ctrl-l    Redraw Display      Meta-D         Kill Word
          ディスプレイを再描画する単語をカットする
Ctrl-m    Newline             Meta-h         Delete Previous Word
          改行する                       前の単語を削除する
Ctrl-n    Next Line           Meta-H         Backward Kill Word
          次行へ                          逆方向に単語をカットする
Ctrl-o    Newline And Backup  Meta-<         Beginning Of File
          改行しバックアップする  ファイルの先頭へ
Ctrl-p    Previous Line       Meta->         End Of File
          前行へ                          ファイルの末尾へ
Ctrl-r    Search/Replace Backward            Meta-]Forward Paragraph
          逆方向検索/置換             次の段落へ
Ctrl-s    Search/Replace Forward             Meta-[Backward Paragraph
          順方向検索/置換             前の段落へ
          文字を交換する
Ctrl-u    Multiply by 4       Meta-Delete    Delete Previous Word
          4 の倍数                        前の単語を削除する
Ctrl-v    Next Page           Meta-Shift DeleteKill Previous Word
          次ページへ                    前の単語をカットする
Ctrl-w    Kill Selection      Meta-Backspace Delete Previous Word
          セレクションをカットする前の単語を削除する
Ctrl-y    Unkill              Meta-Shift BackspaceKill Previous Word
          ペーストする                 前の単語をカットする
Ctrl-z    Scroll One Line Up
          上へ一行分スクロールする

更に、ポインタが、テキストをコピー & ペーストするために使われる : 
     Button 1 Down  Start Selection
                    セレクションを開始する
     Button 1 MotionAdjust Selection
                    セレクションを調整する
     Button 1 Up    End Selection (copy)
                    セレクションを終了する (コピー)
     Button 2 Down  Insert Current Selection (paste)
                    現在のセレクションを挿入する (ペースト)
     Button 3 Down  Extend Current Selection
                    現在のセレクションを拡張する
     Button 3 MotionAdjust Selection
                    セレクションを調整する
     Button 3 Up    End Selection (copy)
                    セレクションを終了する (コピー)

確認ダイアログボックス

いくらかの作業を失うことをもたらす、あるいは、他にも危険なボタンを押し た場合はいつでも、ポップアップダイアログボックスが現れて、あなたに動作 を確認するように要求する。このウィンドウは、 ``Abort'' 、もしくは、 ``No'' ボタン、及び、 ``Confirm'' 、もしくは、 ``Yes'' ボタンを含む。 ``No'' ボタンを押すと、操作をキャンセルし、そして、 ``Yes'' を押すと、 操作を進める。

xmh が Release 6 セッションマネージャの下で実行されるとき、チェッ クポイントオペレーションの間にユーザに確認のためのプロンプトを出す。ダ イアログボックスは、現在の変更がチェックポイントの間にコミットされる ( セーブされる ) べきであるかどうかを尋ねる。 ``Yes'' と応答すると、そ れぞれのフォルダ、及び、表示ウィンドウにおける ``Commit Changes'' 、も しくは、 ``Save Message'' ボタンを押すのと同じ効果を持つ。 ``No'' と応 答すると、チェックポイントはあらゆる未決定の変更を実際にセーブせずに成 功として完了する。セッションマネージャがチェックポイントの間にユーザと の対話を許さないならば、 ``Yes'' の応答が仮定される。すなわち、全ての 変更は、チェックポイントの間にコミットされるであろう。

MH からのメッセージを含むダイアログボックスがある。時によりその メッセージが長さ 1 行を超えるとき、全てのテキストが見えるとは限らない であろう。メッセージフィールドをクリックすると、メッセージ全体を読むこ とができるようにリサイズするためのダイアログボックスが現れる。

メッセージシーケンス

MH メッセージシーケンスは、単にある名前と関連づけられたメッセー ジの集まりである。これらは特定のフォルダごとにローカルである。2 つの異 なるフォルダは、同じ名前のシーケンスを持つことができる。 ``all'' とい う名前のシーケンスは、全てのフォルダにおいて定義済である。これはそのフォ ルダにおける全てのメッセージの集まりから成る。定義済の ``all'' シーケ ンスを含め、最大 9 つのシーケンスが各フォルダごとに定義できる。( シー ケンス ``cur'' も同じく、全てのフォルダに通常定義されている。これは現 在のメッセージのみから成る。 xmh は、ユーザから ``cur'' を隠し、 代りに現在のメッセージに ``+'' を置く。同様に、 xmhMH の ``unseen'' シーケンスをサポートしないので、もう 1 つのシーケンスが ユーザから隠されている。 )

あるフォルダのためのメッセージシーケンス ( ``all'' の分 1 つを含む ) が、 ``Sequence'' メニューにおいてシーケンスコマンドの下に表示される。 目次 ( ``toc'' としても知られる ) は、どんなときでもある 1 つのメッセー ジシーケンスを表示する。これは、 ``viewed sequence'' (表示されているシー ケンス) と呼ばれ、その名前が toc タイトルバーのフォルダ名の後に表示さ れる。同様に、どんなときでもメニュー上のシーケンスのうちの 1 つには、 隣にチェックマークがついている。これは、 ``selected sequence'' (選択さ れているシーケンス) と呼ばれる。表示されているシーケンス、及び、選択さ れているシーケンスが必ずしも同一であるとは限らないことに留意せよ。( こ れはフォルダについての動作と非常によく対応する。 )

Open SequenceAdd to Sequence Remove from Sequence 、そして、 Delete Sequence コマンドは、表示されたフォ ルダが ``all'' シーケンス以外のメッセージシーケンスを持つときにのみ、 アクティブである。

上記のいずれも、あるメッセージがそのフォルダに含まれるかどうかには実際 には影響を与えないことに注意せよ。シーケンスはフォルダの中にあるメッセー ジの集まりであることを思い出しなさい。上記の操作は、どのメッセージがそ の集まりに含まれるかにのみ影響する。

新しいシーケンスを作成するには、 ``Pick'' メニューエントリを選択しなさ い。テキストを入力する多くの場所を持った新しいウィンドウが現れる。基本 的に、メッセージの特徴に基づいて、メッセージのシーケンスの集まりの初期 値を記述し得る。このようにして、特定の人から来た、特定のサブジェクトを 持つ、等々の全てのメッセージとしてシーケンスを定義し得る。ブール演算子 を用いていろいろと結合することもできので、 ``weissman'' からの、 ``xmh'' を含むサブジェクトを持つ全てのものを選択し得る。

レイアウトは、かなり明白である。最もシンプルなケースは、最も容易である : 単に適切なフィールドをポイントし、タイプしなさい。あなたが 1 つ以上 のフィールドに入力するならば、それは、全ての空でないフィールドにマッチ するメッセージをただ選択するであろう。

あるフィールドか別のフィールドにマッチするが、必ずしも両方にはマッチし ないものがほしい場合には、より複雑な状況が発生する。これが、まさに ``or'' ボタンのある理由である。 ``xmh'' 、または、 ``xterm'' を含むサ ブジェクトを持つもの全てを必要とするならば、単に ``Subject:'' フィール ドの隣の ``or'' ボタンを押しなさい。別のサブジェクトを入力し得る別のボッ クスが現れる。

あなたが ``weissman'' から或いはサブジェクト ``xmh'' を持つが、必ずし も両方とは限らない、全てのものを必要とするならば、 ``-Or-'' ボタンを 選択しなさい。これは、本質的にフォームのサイズを 2 倍にする。 そして上半分の from: ボックスに ``weissman'' を、下半分の subject: ボッ クスに ``xmh'' を入力できる。

``Skip'' ボタンを選択すると、その行のフィールドにマッチ しない メッセージのみが、含まれる。

最後的に、ウィンドウの下部にさらにいくつかのボックスが現れる。1 つは、 あなたが定義しようとしているシーケンスの名前である。( デフォルトでは ``Pick'' が押されたときに選択されているシーケンスの名前、もしくは ``all'' が選択されているシーケンスであったならば ``temp'' である。) 別 のボックスではこのシーケンスの要素の候補をどのシーケンスから探すかを定 義する。デフォルトでは ``Pick'' が押されたとき、表示されているシーケン スである。

さらに 2 つのボックスが、日付の範囲を定義する。この日付の範囲の含まれ るメッセージのみが対象となる。これらの日付は、 RFC 822 形式のフォーマッ トで入力されなければならならず、各日付は、 ``dd mmm yy hh:mm:ss zzz'' の形式で、 dd は一桁か二桁の日、mmm は月の 3 文字省略形であり、 yy は、 年である。残りのフィールドは、オプショナルであり、 hh 、 mm 、そして、 ss は、時刻を指定し、 zzz は、タイムゾーンを選択する。時間が省略された 場合には、デフォルトは真夜中であることに留意せよ。従って、 ``7 nov 86'' - ``8 nov 86'' の範囲を選択すると、 7 日からのメッセージだけを得 るであろう、というのは 8 日のメッセージ全ては真夜中を過ぎてから着いた ものであるから。

``Date field'' は、この日付範囲についてどのヘッダフィールドを見るかを 指定する。デフォルトは ``Date'' である。定義しようとしているシーケンス が既に存在するならば、あなたは、古いセットを新しいものとマージすること もでき、これが、 ``Yes'' 、及び、 ``No'' ボタンの意味である。最終的に、 全部を ``OK'' するか、 ``Cancel'' することができる。

概して、ほとんどの人々は、めったにこれらの機能を使わないであろう。しか しながら、ときに応じて ``Pick'' を使ってあるメッセージを見つけ、それら を眺め、そして ``Delete Sequence'' を叩いて元の状態に戻すのは便利であ る。

ウィジェットの階層構造

リソースを指定するためには、 xmh を構成するウィジェットの階層構 造を知ることが有益である。以下の表記法において、インデントは、階層構造 を示す。ウィジェットクラス名が、最初に与えられ、次にインスタンス名が来 る。アプリケーションクラス名は、 Xmh である。

メインの toc 及び表示ウィンドウの階層構造は、TopLevelShell ウィジェッ トがアプリケーションシェルと Paned ウィジェットの間の階層構造に挿入さ れるということを除いては、追加の toc 及び表示ウィンドウのものと同じで ある。

Xmh xmh
     Paned xmh
          SimpleMenu  folderMenu
               SmeBSB  open
               SmeBSB  openInNew
               SmeBSB  create
               SmeBSB  delete
               SmeLine  line
               SmeBSB  close
          SimpleMenu  tocMenu
               SmeBSB  inc
               SmeBSB  commit
               SmeBSB  pack
               SmeBSB  sort
               SmeBSB  rescan
          SimpleMenu  messageMenu
               SmeBSB  compose
               SmeBSB  next
               SmeBSB  prev
               SmeBSB  delete
               SmeBSB  move
               SmeBSB  copy
               SmeBSB  unmark
               SmeBSB  viewNew
               SmeBSB  reply
               SmeBSB  forward
               SmeBSB  useAsComp
               SmeBSB  print
          SimpleMenu  sequenceMenu
               SmeBSB  pick
               SmeBSB  openSeq
               SmeBSB  addToSeq
               SmeBSB  removeFromSeq
               SmeBSB  deleteSeq
               SmeLine  line
               SmeBSB  all
          SimpleMenu  viewMenu
               SmeBSB  reply
               SmeBSB  forward
               SmeBSB  useAsComp
               SmeBSB  edit
               SmeBSB  save
               SmeBSB  print
          SimpleMenu  optionMenu
               SmeBSB  reverse
          Viewport.Core  menuBox.clip
               Box  menuBox
                    MenuButton  folderButton
                    MenuButton  tocButton
                    MenuButton  messageButton
                    MenuButton  sequenceButton
                    MenuButton  viewButton
                    MenuButton  optionButton
          Grip  grip
          Label folderTitlebar
          Grip  grip
          Viewport.Core  folders.clip
               Box  folders
                    MenuButton  inbox
                    MenuButton  drafts
                         SimpleMenu  menu
                              SmeBSB <folder_name>
                                   .
                                   .
                                   .
          Grip  grip
          Label  tocTitlebar
          Grip  grip
          Text toc
               Scrollbar  vScrollbar
          Grip  grip
          Label  viewTitlebar
          Grip  grip
          Text  view
               Scrollbar  vScrollbar
               Scrollbar  hScrollbar

Create Folder ポップアップダイアログボックスの階層構造 :

     TransientShell  prompt
          Dialog  dialog
               Label  label
               Text  value
               Command  okay
               Command  cancel
     TransientShell  prompt
          Dialog  dialog
               Label  label
               Text  value
               Command  okay
               Command  cancel

Notice ダイアログボックス ( MH からメッセージをレポートする ) の階
層構造 :

     TransientShell  notice
          Dialog  dialog
               Label  label
               Text  value
               Command  confirm

確認ダイアログボックスの階層構造 :

     TransientShell  confirm
          Dialog  dialog
               Label  label
               Command  yes
               Command  no

エラーを報告するダイアログボックスの階層構造 :

     TransientShell  error
          Dialog  dialog
               Label  label
               Command  OK

作成ウィンドウの階層構造 :

     TopLevelShell  xmh
          Paned  xmh
               Label  composeTitlebar
               Text  comp
               Viewport.Core  compButtons.clip
                    Box  compButtons
                         Command  close
                         Command  send
                         Command  reset
                         Command  compose
                         Command  save
                         Command  insert

表示ウィンドウの階層構造 :

     TopLevelShell  xmh
          Paned  xmh
               Label  viewTitlebar
               Text  view
               Viewport.Core  viewButtons.clip
                    Box  viewButtons
                         Command  close
                         Command  reply
                         Command  forward
                         Command  useAsComp
                         Command  edit
                         Command  save
                         Command  print
                         Command  delete

pick ウィンドウの階層構造 :
( 無名のウィジェットは、名前を持っていない。 )

     TopLevelShell  xmh
          Paned  xmh
               Label  pickTitlebar
               Viewport.Core  pick.clip
                    Form  form
                         Form  groupform
pick ウィンドウの最初の 6 行は、同一の構造を持つ :
                              
                              Form  rowform
                                   Toggle
                                   Toggle
                                   Label
                                   Text
                                   Command
                              Form  rowform
                                   Toggle
                                   Toggle
                                   Text
                                   Text
                                   Command
                              Form  rowform
                                   Command
               Viewport.core  pick.clip
                    Form  form
                         From  groupform
                              Form  rowform
                                   Label
                                   Text
                                   Label
                                   Text
                              Form  rowform
                                   Label
                                   Text
                                   Label
                                   Text
                                   Label
                                   Text
                              Form  rowform
                                   Label
                                   Toggle
                                   Toggle
                              Form  rowform
                                   Command
                                   Command
                              

アプリケーション固有のリソース

アプリケーションクラス名は Xmh である。アプリケーション固有のリ ソースは、名前順に以下にリストされる。アプリケーション固有のリソースク ラス名は、常に大文字で始まる他は、注記されていない限り以下のインスタン ス名と同じである。

これらのオプションのうちのどれも、 X Toolkit Intrinsics のリソース指定 方式を使ってコマンド行からも同様に指定される。従って、全てのメッセー ジヘッダを表示するように xmh を実行するには、
% xmh -xrm '*HideBoringHeaders:off'

TocGeometryViewGeometryCompGeometry 、及び、 PickGeometry が指定されなければ、代わりに Geometry の値が 使われる。その結果生じる高さが指定されない ( 例 : "" 、"=500" 、 "+0-0" ) ときには、デフォルトのウィンドウの高さは、フォント、及び、ラ インカウントから計算される。幅が指定されない ( 例 : "" 、 "=x300" 、 "-0+0" ) 場合には、ディスプレイ幅の半分が用いられる。指定されていなけ れば、選択ウィンドウの高さはディスプレイの高さの半分がデフォルトとなる。

以下のリソースが、定義されている :

banner
フォルダ、目次、表示のデフォルトラベルである短い文字列。デフォルトでは、 プログラム名、ベンダ、及び、リリースを示す。

blockEventsOnBusy
xmh がコマンドを処理中であるとき、ユーザ入力を許さず、ビジーカー ソルを表示するかどうか。 false であれば、ユーザは、「先行マウス操作」、 先行タイプできる。true ならば、長い mh コマンドを処理している ときの、ユーザ入力は、捨てられる。デフォルトは、true である。

busyCursor
blockEventsOnBusy が true であって xmh が時間のかかるコマ ンドを処理しているときに、ポインタの位置を表すために表示されるシンボル の名前。デフォルトは、 "watch" である。

busyPointerColor
ビジーカーソルの前景色。デフォルトは、 XtDefaultForeground である。

checkFrequency
どのくらいの頻度で新しいメールについてチェックし、チェックポイントを作 成し、目次を再スキャンするかを分で表したもの。 checkNewMail が true であれば、 xmh は、新しいメールがあるかどうかをこの間隔ごと にチェックする。 makeCheckpoints が true であれば、この間隔の五 回ごとにチェックポイントが作成される。同じくこの間隔の五回ごとに、目次 は、ファイルシステムとの不一致をチェックされ、古くなっていれば再スキャ ンされる。これらのチェック全てを発生させないようにするには、
 CheckFrequency を 0 にセットしなさい。デフォルトは、 1 である。 このリソースは、以前のユーザリソースファイルへの互換性のために保持され ている。関連項目 checkpointIntervalmailInterval 、そし て、 rescanIntervalP を参照せよ。

checkNewMail
true であれば、 xmh は、トップレベルフォルダ、及び、開かれている サブフォルダのために新しいメールが着いたかどうか規則的間隔でチェックす る。新しいメールがトップレベルフォルダに取り込まれるのを待っているなら ば、ビジュアルな表示が、与えられるであろう。デフォルトは、 true である。 この間隔は、 mailInterval によって調整され得る。

checkpointInterval (class Interval)
makeCheckpoints が ture であるとき、どのくらいの頻度で揮発性の状 態のチェックポイントを行なうかを分の単位で指定する。デフォルトは、 checkFrequency の値の 5 倍である。

checkpointNameFormat
チェックポイントされたファイルにどのような名前をつけるかを指定する。こ のリソースの値は、 `%d' が一度必須に表れる場所に、代わりにメッセージ番 号を文字列として挿入することによってファイル名を生成するために使われる。 リソースの値が空のストリングであるか、 `%d' がストリングにおいて現れな いか、 "%d" がリソースの値であるならば、代わりにデフォルト値が使われる。 デフォルト値は、 "%d.CKP" である。絶対パス名が与えられない限り、チェッ クポイントは、元のフォルダにおいて行われる。 xmh は、ユーザがチェッ クポイントを回復するのを支援しない、また、チェックポイントファイルの除 去も提供しない。

commandButtonCount
メインウィンドウの toc と表示エリアの間の botton box の中に作成できる コマンドボタンの数。

commandBox といった名前を持つボックスに、 xmh は、 button1, button2 のような名前でこれらのボタンを作成するであろう。 デフォルト値は、 0 である。xmh ユーザは、自分専用のリソースファ イルにおいてボタンのためのラベル、アクションを指定できる。 「アクションおよびインターフェースのカスタマイズ」のセクションを参照せよ。

compGeometry 作成を含むウィンドウのための最初のジオメトリ。

cursor ポインタを表すために用いられるシンボルの名前。デフォルトは、 ``left ptr'' である。

debug
xmh の実行中に、情報を stderr に出力するかどうか。デフォルトは、 false 。

draftsFolder
メッセージの草稿のために使われるフォルダ。デフォルトは、 ``drafts'' で ある。

geometry
デフォルトとして用いられるジオメトリ。デフォルトはなし。

hideBoringHeaders
``on'' であれば、 xmh は関心のないヘッダ行を表示の最上部からスク ロールすることでとばそうとする。デフォルトは、 ``on'' である。

initialFolder
起動時にどのフォルダを表示するか。コマンド行オプション -initial でもセットされる。デフォルトは、 ``inbox'' である。

initialIncFile
入って来るメールドロップファイルの絶対パス名。いくらかの実装、例えば、 POP (Post Office Protocol) を利用する実装においては、どのファイルも適 切ではない。この場合、 initialIncFile は、指定しないべきだが、あ るいは空文字列として指定してもよく、そして inc は、 -file 引き数 なしで起動されるであろう。デフォルトでは、このリソースには、値がない。 xmh.xmhcheck ファイルを発見するならば、このリソースは、 無視される。複数メールドロップに関するセクションを参照せよ。

mailInterval (class Interval)
mailWaitingFlag 、または、 checkNewMail が true であるなら ば、メールがチェックされる間隔を分で指定する。デフォルトは、 checkFrequency の値である。

mailPath
メールフォルダの位置を指定する完全なパスのプレフィクス。コマンド行 オプション -path によっても設定できる。デフォルトは、 MH プロファイルにおける Path コンポーネント、または、なければ ``$HOME/Mail'' である。

mailWaitingFlag
true ならば、 xmh は、新しいメールが取り込まされるのを待っている ときに、アイコンで示そうとする。 mailWaitingFlag が true であるならば、それから、 checkNewMail は、同様に true であるとみなされる。 -flag コマンド行オプションは、このリソースをオンにする迅速な方 法である。

makeCheckpoints
true ならば、 xmh は、揮発性の編集のチェックポイントをセーブしよ うと試みる。デフォルトは、false 。 チェックポイントの頻度は、リソース checkpointInterval によってコ ントロールされる。チェックポイントのロケーションについては、 checkpointNameFormat を参照せよ。

mhPath
MH のコマンドを見つけるディレクトリ。コマンドがユーザのパスに 見つからないならば、ここで指定されたパスが使われる。 デフォルトは、 ``/usr/local/mh6'' である。

newMailBitmap (class NewMailBitmap)
フォルダに新しいメールのあるとき、フォルダボタンに表示するためのビット マップ。デフォルトは、 ``black6'' である。

newMailIconBitmap (class NewMailBitmap)
いずれかのフォルダに新しいメールのあるとき、アイコンとしてウィンドウマ ネージャに推奨 (suggest) するビットマップ。デフォルトは、 ``flagup'' である。

noMailBitmap (class NoMailBitmap)
あるフォルダに新しいメールのないとき、フォルダボタンに表示するためのビッ トマップ。デフォルトは、 ``box6'' である。

noMailIconBitmap (class NoMailBitmap)
どのフォルダにも新しいメールのないとき、アイコンとしてウィンドウマネー ジャに推奨 (suggest) するビットマップ。デフォルトは、 ``flagdown'' で ある。

pickGeometry
選択 (pick) ウィンドウのための初期ジオメトリ。

pointerColor
ポインタの前景色。デフォルトは、 XtDefaultForeground である。

prefixWmAndIconName
ウィンドウ名とアイコン名に接頭辞として "xmh: " をつけるかどうか。デフォ ルトは、 true である。

printCommand
メッセージを印刷するために実行する sh コマンド。stdout 、及び、 stderr を明示的にリイレクトしなければならないことに留意せよ。メッセー ジやメッセージの範囲が印刷のために選択されたとき、各メッセージファイル の完全なファイルパスが、指定された印刷コマンドに付加される。デフォルト は、 ``enscript > /dev/null 2>/dev/null'' である。

replyInsertFilter
作成ウィンドウにおいて Insert (挿入) ボタンが起動されたときに、実行さ れる sh コマンド。 sh(1) に渡される前に、ソースとなるメッ セージの完全なパスとファイル名が、コマンドに付加される。デフォルトのフィ ルタは、 cat である。すなわち、全体のメッセージを作成内容に挿入 する。興味深いフィルタは、以下である。 sed 's/^/ > /' または awk -e '{print " " $0 }' または < mh directory>/lib/mhl -form mhl.body

rescanInterval (class Interval)
どの程度の頻度で、現在の表示されているフォルダと現在表示されているメッ セージを持つフォルダの目次をチェックし、そして、 xmh がこれらの フォルダでファイルシステムと矛盾を発見した場合に、目次をアップデートす るか。デフォルトでは、 checkFrequency の値の 5 倍である。

reverseReadOrder true のとき、次のメッセージは目次において現在のメッセージに先立つメッ セージ、前のメッセージは目次において現在のメッセージの後のメッセージに なる。デフォルトは、 false 。

sendBreakWidth
メッセージが xmh から送られるときに、この値より長い行は、 SendWidth を超えない長さの行からなる複数行に分割される。この値は、 SendBreakWidth: value の形式の追加の行をメッセージヘッダに挿入す ることで、ある特定のメッセージについて上書きすることができる。メッ セージが送られる前に、この行はヘッダから除去される。デフォルトは、 2000 ( ソースパッチを含むメールを送るときに許すため ) である。

sendWidth
メッセージが xmh から送られるとき、SendBreakWidth 文字より 長い行は、この値を超えないように複数行に分割される。この値は、 SendWidth: value の形式の追加の行をメッセージヘッダに挿入するこ とによって、ある特定のメッセージについて上書きすることができる。 そのメッセージが送られる前に、この行はヘッダから除去されるであろう。デ フォルトは、 72 である。

showOnInc
新しいメールを取り込んだ後に、現在のメッセージを自動的に表示するかどう か。デフォルトは、true である。

skipCopied
``View Next Message'' 、及び、 ``View Previous Message'' を使っている ときに、コピーされるマークの付いたメッセージをスキップするかどうか。デ フォルトは、 true である。

skipDeleted
``View Next Message'' 、及び、 ``View Previous Message'' を使っている ときに、削除されるマークの付いたメッセージをスキップするかどうか。デフォ ルトは、 true である。

skipMoved
``View Next Message'' 、及び、 ``View Previous Message'' を使っている ときに、他のフォルダに移動されるマークの付いたメッセージをスキップする かどうか。デフォルトは、 true である。

stickyMenu
true ならば、ポップアップコマンドメニューが使われるとき、ポップアップ したメニューのカーソルの下に最も最近選択された項目がくる。デフォルトは、 false 。ポップアップコマンドメニューのためのリソースの設定例については、 ファイル clients/xmh/Xmh.sample を参照せよ。

tempDir
xmh が一時ファイルを格納するディレクトリ。プライバシのために、ユー ザは、これを自分のディレクトリに変えることを望むかもしれない。デフォル トは、 ``/tmp'' である。

tocGeometry
メイン xmh toc と表示ウィンドウのための初期ジオメトリ。

tocPercentage
メインウィンドウのうち目次を表示するために使われるパーセンテージ。デフォ ルトは、 33 である。

tocWidth
フォルダの目次において各メッセージのためにどのくらいのキャラクタを生み 出すか。デフォルトは、 100 である。リスティングが右側の境界で切られて しまうようなメイン xmh ウィンドウのジオメトリであるとか、大いに mhl を使うつもりであるならば、もっと速くなるであろうし、余分の文 字は無意味であろうから、もっと小さい値を使え。

viewGeometry
メッセージの表示を行うウィンドウのための初期ジオメトリ。

複数メールドロップ

ユーザは、複数のスプールファイルあるいはメールドロップからメールを取り 込む必要があるかもしれない。到着するメールが MH slocal プログラ ムに送られるならば、ユーザによって指定されたように複数の到着メールド ロップに分類され得る。どのように .maildelivery ファイルで到着メー ルの転送、及び、自動分類を指定するかを学ぶためには、 slocal のた めの MH のマニュアルページを参照しなさい。

様々なメールドロップについて xmh に通知するためには、ホームディ レクトリにおいて .xmhcheck というファイルを作成しなさい。このファ イルにおいて、既存のフォルダ名とメールドロップの間のマッピングは、フォ ルダ名につづいていくつかの空白で区切られたメールドロップサイトの絶対パ ス名を、一行につきにつきひとつのマッピングで与えることで作成される。新 しいメール到着を通知するようにリソースが設定されるかどうかにかかわら ず、 xmh は、このファイルを読み、メールドロップをもつあらゆるフォ ルダへの新しいメールの取り込みを許す。xmh は、 -file 引き数 をつけて inc を起動する。そしてxmh が新しいメールをチェッ クするように要求されたときには、 msgchk を使うのではなく直接チェッ クする。

フォルダ ``inbox'' 、及び、 ``xpert'' のための .xmhcheck ファイ ルフォーマットの例 :

inbox     /usr/spool/mail/converse
xpert     /users/converse/maildrops/xpert

アクションおよびインターフェースのカスタマイズ

xmh は、コマンドの機能に対応するアクション手続きを提供し、アクセラ レータを実装しているので、ユーザは自分のリソースファイルでアクセラレー タや新しいボタンの機能をカスタマイズすることができる。カスタマイズされ たリソースを指定する例については、ファイル mit/clients/xmh/Xmh.sam-ple を参照せよ。シンタックスを理解するた めには、 Translation Table Syntax に関する X Toolkit Intrinsics 仕様書の Appendix 、及び、 X リソースの利用と指定 についての一般的な説明を参照せよ。設計対象外のイベントまたはウィジェッ トにアクションがバインドされると、予測できない結果が発生する可能性がある。

アクションを自分の xmh ボタンにバインドする方法と、Meta キーが必要 とされないようにデフォルトアクセラレータを再定義する方法の例を、上記の サンプルファイルへのアクセスができない場合のためにここに示した。

! To create buttons in the middle of the main window and give them semantics:
! ( メインウィンドウの中程にボタンを作成し、そして、それらのボタンにセ
!   マンティクスを与えるため ) :
Xmh*CommandButtonCount:       5
Xmh*commandBox.button1.label: Inc
Xmh*commandBox.button1.translations: #override\
     <Btn1Down>,<Btn1Up>: XmhIncorporateNewMail() unset()
Xmh*commandBox.button2.label: Compose
Xmh*commandBox.button2.translations: #override\
     <Btn1Down>,<Btn1Up>: XmhComposeMessage() unset()
Xmh*commandBox.button3.label: Next
Xmh*commandBox.button3.translations: #override\
     <Btn1Down>,<Btn1Up>: XmhViewNextMessage() unset()
Xmh*commandBox.button4.label: Delete
Xmh*commandBox.button4.translations: #override\
     <Btn1Down>,<Btn1Up>: XmhMarkDelete() unset()
Xmh*commandBox.button5.label: Commit
Xmh*commandBox.button5.translations: #override\
     <Btn1Down>,<Btn1Up>: XmhCommitChanges() unset()
! To redefine the accelerator bindings to exclude modifier keys,
! and add your own keyboard accelerator for Compose Message:
! ( モディファイアキーを除外するためにアクセラレータのバインドを再定
!   義するため、そして Compose Message に自分のキーボードアクセラレー
!   タを加えるため ) : 
Xmh*tocMenu.accelerators: #override\n\
     !:<Key>I: XmhIncorporateNewMail()\n\
     !:<Key>C:      XmhCommitChanges()\n\
     !:<Key>R: XmhForceRescan()\n\
     !:<Key>P: XmhPackFolder()\n\
     !:<Key>S: XmhSortFolder()\n
Xmh*messageMenu.accelerators: #override\n\
     !:<Key>E: XmhComposeMessage()\n\
     !<Key>space:    XmhViewNextMessage()\n\
     !:<Key>c: XmhMarkCopy()\n\
     !:<Key>d: XmhMarkDelete()\n\
     !:<Key>f: XmhForward()\n\
     !:<Key>m: XmhMarkMove()\n\
     !:<Key>n: XmhViewNextMessage()\n\
     !:<Key>p: XmhViewPreviousMessage()\n\
     !:<Key>r: XmhReply()\n\
     !:<Key>u: XmhUnmark()\n

xmh は、コマンドメニューにおける項目に対応するアクション手続きを提供 する。これらは、ここではなくメニューコマンドを解説するセクションに示さ れている。メニューにおけるコマンドに対応するアクションに加え、以下の アクションルーチンが、定義されている :

XmhPushFolder([foldername, ...]) このアクションは、各引き数を foldernames のスタックにプッシュする。引き数が 与えられなかった場合には、選択されたフォルダがスタックにプッシュされる。
XmhPopFolder() このアクションは、スタックから foldername を一つポップし、選択フォルダを 設定する。
XmhPopupFolderMenu() このアクションは、ユーザがフォルダボタンを選択するとき、常に実行されるは ずである。フォルダボタンは、一つのフォルダとそのゼロ個以上のサブフォル ダを表す。サブフォルダのメニューは最初の参照時にこのルーチンによって構 築される。サブフォルダを持たない場合には、このルーチンは、サブフォルダ を持たないとしてフォルダにマークを付け、メニューの構築は行なわない。そ のような場合、メニューボタンは、トグルボタンをエミュレートする。 サブフォルダを持つ場合には、メニューボタンアクション PopupMenu() を利用し て、メニューがポップアップする。
XmhSetCurrentFolder() このアクションにより、メニューボタンがフォルダを選択する機能においてトグ ルボタンをエミュレートすることが可能にになる。 このアクションは、メニューボタンウィジェットのみのためのものであり、選択 されたフォルダを設定する。
XmhLeaveFolderButton() このアクションは、ユーザがメニューボタンウィンドウから外にポインタを動か すとき、メニューボタンが適切に動作することを保証する。
XmhPushSequence([sequencename, ...]) このアクションは、各引き数をシーケンス名のスタックにプッシュする。引き数が与 えられていない場合には、選択されているシーケンスが、スタックにプッシュ される。
XmhPopSequence() このアクションは、シーケンス名のスタックからシーケンス名を一つポップし、 それが選択されているシーケンスになる。
XmhPromptOkayAction() このアクションは、 Create Folder (フォルダ作成) ポップアップにおいて okay ボタンを押すことと同じである。
XmhReloadSeqLists() このアクションは、現在開いているフォルダのために公の MH シーケンス の内容を再スキャンし、必要ならば sequence メニューを更新する。
XmhShellCommand( parameter [, parameter]) 少なくとも一つのパラメータを指定しなければならない。全てのパラメータは 空白文字をセパレータとして一つの文字列に連結され、選択されているメッセー ジのリスト、あるいはメッセージが選択されていなければ現在のメッセージが、 パラメータの文字列に追加される。この文字列はシェルコマンドとして実行さ れる。これらのメッセージは、常に絶対パス名として与えられる。選択されて いるメッセージも現在のメッセージもないときに、このアクションを実行するこ とは、エラーを引き起こす。
XmhCheckForNewMail() このアクションは、 xmh の知る全てのメールドロップをチェックする。 .xmhcheck ファイルによっても initialIncFile リソースによっ てもメールドロップがユーザによって指定されていなければ、 MH コマ ンド msgchk が新しいメールをチェックするのに利用され、そうでなけ れば xmh が直接チェックする。
XmhWMProtocols([wm_delete_window] [wm_save_yourself])
このアクションは、ウィンドウマネージャ通信プロトコルへの参加に責任を負う。 これは、ウィンドウの削除やメッセージをあなた自身にセーブすることに、反 応する。ユーザは、適切なパラメータとともにアクションを起動することにより、 あたかもウィンドウマネージャがリクエストしたかのように、 xmh に これらのプロトコルのどちらかまたは両方に応答させることができる。この アクションは、文字列引き数の大文字小文字の区別を無視する。受け取ったイベン トが ClientMessage イベントであってパラメータが存在するならば、少なく ともパラメータのうちの 1 つは、 xmh によって受け取られるようにそ のイベントによって要求されたプロトコルと一致しなければならない。

MH を使ったカスタマイズ

作成ウィンドウにおいて表示される最初のテキストは、対応する MH コ マンド、すなわち、compreplforw 、を実行する ことによって生成されるので、メッセージコンポーネントはこれらのコマンド のための指定でカスタマイズできる。 comp は、 xmh の起動に つき一度だけ実行され、メッセージテンプレートは、その後の一連の全ての新 規作成のために再利用される。

xmh は、以下のような MH コマンドを利用する: inc, msgchk, comp, sendk, repl, forw, refile, rmm, pick, pack, sort, 及び、 scan 。これらのコマンドのためのフラグのあるものは、 MH プ ロファイルにおいて指定され得る。xmh は、それらを上書きする。 xmh がどのように MH コマンドを利用するかを見るために、アプ リケーションリソース debug は、true に設定することができる。

環境変数


HOME - ユーザのホームディレクトリ
MH - MH プロファイルファイルの場所を得るため

ファイル

~/.mh_profile - 環境変数 MH が設定されていない場合に使われる MH プロファイル
~/Mail - MH プロファイルが見つからなかった場合に使われるフォルダ 用ディレクトリ
~/.xmhcheck - オプショナル、 slocal と共に使う複数メールドロップ のため。
/usr/local/mh6 - MH コマンド ( 最後の手段として ) 、 mhPath を参照せよ。
~/Mail/<folder>/.xmhcache - 各フォルダでの scan の出力
~/Mail/<folder>/.mh_sequences - 各フォルダでのシーケンス定義
/tmp - テンポラリファイル, tempDir を参照せよ。

バグ

- ユーザがウィンドウを閉じるとき、そのウィンドウのための全ての一時的な ウィンドウも同様に xmh によって閉じられるべきである。
- XmhUseAsComposition 、及び、 XmhViewUseAsCompositionDraftsFolder のメッセージを処理するとき、同じメッセージが他のウィ ンドウでも表示されている場合には、 xmh は、作成の編集を許さない。
- 変更をコミットした後に時たま、実際にメッセージがあるにもかかわらず、 目次が完全に空白であるように表示されることがある。これが起きたときには、 ディスプレイをリフレッシュするか、目次において Control-L をタイプすれ ば、正しい一覧を表示することが多い。これがうまくいかなければ、強制的に フォルダを再スキャンさせなさい。
- ``unseen'' メッセージシーケンスを理解し、利用するべきである。
- ユーザが MH を以前に利用していないかどうか、また、 .mh_profile の作成を申し出なかったかどうかを、 inc に依存せずに単独で決定するべき である。
- 2 、 3 のコマンドが、欠けている ( rename folder, resend message ) 。
- 周囲の他の xmh ウィンドウを保持しようとしている間に、最初の toc 、及び、表示の削除を要求しているとき、 WM_DELETE_WINDOW プロトコ ルが正しく動作しない。
- メッセージにリプライするるときに、annotation をサポートしていない。
- 書き込みパーミッションなしにフォルダの共有ができない。
- プライベートなシーケンスを認識しない。
- あるフォルダのシーケンス定義が BUFSIZ キャラクタ以上を含むと、 MH.mh_sequences ファイルが、おかしなフォーマットをして いると報告するであろう。 xmh は、これらのメッセージが発生したとき捕捉し、そして、表示しよ うとするが、それは、問題を訂正し得ない。
- シャットダウンでない場合には、変更のコミットを必要とするのではなく、 一時的なチェックポイントファイルをセーブするべきである。

著者

Terry Weissman, 以前は Digital Western Research Laboratory
Donna Converse, MIT X Consortium