XMH(1) — NEWS-OS Programmer’s Manual
名称
xmh − X インターフェースを使用して、MH のメイルを送る/読む
形式
xmh [−path mailpath] [−initial foldername] [−flag] [−toolkitoption ...]
解説
xmh プログラムは、 MH メッセージ処理システムへのグラフィカルなユーザインターフェース を提供します。 実際にメールで何か行うには、MH パッケージを呼び出さなくては なりません。 電子メイルのメッセージは、フォルダ内で、書いたり、送ったり、 受け取ったり、返事を書いたり、フォワードしたり、ソートしたり、 保存したりできます。 xmh は、ユーザインターフェースのカストマイゼーションの 広範囲に渡るメカニズムを提供します。
このドキュメントでは、Athena Widget セットについて多くの点を 紹介します。
オプション
−path directory
このオプションは、 メイルを処理する (既存のものに代わって使用する) メイルフォルダの場所を指定します。 ディレクトリは、絶対バス名で指定します。 デフォルトのメイルパスは、H プロファイルの中で 設定されている Path の値です。 プロファイルは、MH 環境変数によって決まり、 デフォルトでは、 $HOME/.mh_profile です。 プロファイルに MH Path が指定されていない場合は、 $HOME/Mail がパスとして使用されます。
−initial folder
このオプションは、 新しいメイルを受けとったり、 xmh が初めに開く ( 既存のものに代わって使用する) フォルダを指定します。 デフォルトのフォルダは、“inbox” です。
−flag 新しいメイルが到着した時に、 xmh が、 適切なフォルダのボタンの外観を変更し、 xmh のアイコンの外観を変更するよう ウィンドウマネージャに要求します。 デフォルトでは、 xmh は、 新しいメイルがある時、inbox フォルダのボタンの外観を変更します。 アプリケーション固有のリソース checkNewMail は、この機能をオフにするのに使用されますが、 −flag オプションは、 それを上書きします。
これら 3 つのオプションは、 それぞれ、 リソースファイル中で指定されるアプリケーション 固有のリソース MailPath、 InitialFolder、 MailWaitingFlag と同じです。
標準ツールキットのコマンドラインオプションについては X(7) を 参照してください。
インストール
xmh では、 ユーザは MH バージョン 6 を使用するよう セットアップしていなくてはなりません。 それをチェックするには、まず、 ホームディレクトリ内に .mh_profile というファイルが あるか調べてください。 このファイルが存在する場合は、 Current-Folder で始まる行がそのファイルに 含まれていることを確認してください。 これが確認できたら、 使用している MH は、バージョン 4 あるいは、それ以前の バージョンです。 バージョン 6 に変換するには、この行を取り除かなくてはなりません(これを 行わないと、stderr に疑似出力が生じ、セットアップによっては xmh が ハングすることがあります)。
ことによって、このファイル(および、必要なものすべて)を作成できます。 xmh を使用して、新しいメールを取り込む前に、 これを行ってください。
詳細は、mh(1) の文書を参照してください。
xmh のユーザインターフェースのほとんどは、 Xmh アプリケーションクラスのデフォルトファイルに記されています。 このファイルが適切にインストールされていない場合は、 xmh を使用した時に、 警告メッセージが表示されます。 xmh は、R4 アプリケーションクラスデフォルトファイルと下位互換です。
SendBreakWidth リソースのデフォルト値は、R4 より変更されました。
基本のスクリーンレイアウト
xmh は、4 つの区域に分けられた 1 つのウィンドウで開始します。
− プルダウンコマンドメニューの 6 つのボタン。
− それぞれのトップレベルのフォルダを表すボタンの集まり。 MH の新規ユーザには、 drafts と inbox の 2 つのフォルダが表示されます。
− 開いているフォルダのメッセージリスト (目次) 初期値では、 これは、inbox の中のメッセージを表示します。
− メッセージのうちの 1 つのビュー。初期値では、これは空白です。
XMH と Athena Widget セット
xmh は、X ツールキットとAthena Widget セットを使用します。 下に記述されているスクロールバーや、ボタンボックスなどの部品は、実際に Athena Widget セットの一部です。 ここでは、完全のためだけに記述されています。より詳しい情報を得るには、 Athena Widget セットのドキュメントを見てください
スクロールバー
スクリーンのいくつかの部分は、グレイのバーを含む垂直の領域を左に もっています。 この領域が「スクロールバー」です。 これは、ウィンドウ中のデータが、スクリーンに表示できる以上のスペースを とっている場合には必ず使用します。 グレイのバーは、データが見える部分を示しています。 したがって、領域の全部がグレイの場合、データはすべて見えます。 領域の前半だけがグレイの場合、データの上半分だけが見えます。 もし、メッセージのテキストが表示範囲を越えていれば、メッセージの表示領域に 水平方向のスクロールバーが現れます。
スクロールバーの中のポインタを使って、データが見える部分を変更する ことができます。 ボタン 2 をクリツクすると、グレイの領域の一番上の部分が、ポインタの ある場所に移動して、それに対応する部分のデータが表示されます。 ボタン 2 を押し続けると、グレイの領域中を移動することができます。 これにより、 単に、ボタン 2 を押しながら スクロールバーの一番上まで移動して、 ボタンを離すだけで、 簡単にデータの一番上に行くことができます。
ボタン 1 でクリックすると、ポインタの右のデータが、ウィンドウの一番 上までスクロールします。ポインタボタン 3 でクリックすると、ウィンドウの 一番上のデータが、ポインタのあるところまでスクロールダウンします。
ボタンボックス、ボタン、メニュー
たくさんのワードまたは短い句で構成されている領域 (それぞれが、長方形、または楕円で囲まれている)は、 「ボタンボックス」と呼ばれます。 実際、各四角、または丸い領域は、 ポインタをそのボックス上に移動して、ポインタボタン 1 を 押すことによって押すことができるボタンです。 与えられたボタンボックスに、入れることのできる以上のボタンがある場合は、 スクロールバー付きで表示されるので、希望のボタンまでスクロールする ことができます。
いくつかのボタンは、プルダウンメニューになっています。 ポインタがそれらの内のあるボタンの上にあるときにポインタボタンを押すと、 プルダウンメニューが現れます。ボタンを押したままメニューの上でポインタを 動かす (「ドラッグ」といいます) と、ポインタが、選択できる項目の上を通った時に 項目がハイライトになります。 項目を選択するには、項目がハイライトになっているうちに、 ポインタボタンを放します。
領域の相対サイズの調節
スクリーン上のさまざまな領域のサイズに満足できない場合は、それを簡単に 変更することができます。 それぞれのリージョン間のボーダの右端の近くは、ブラックボックスで、 「グリップ」と呼ばれます。 ポインタでこのグリップを指して、ポインタボタンを押し、上下に移動して、 希望の場所でボタンを離します。 使用するポインタボタンによって、動作が異なります。
ポインタボタン 2 で移動すると、ボーダだけが移動します。 この方法は理解しやすいですが、おそらく最も役に立たないでしょう。
ポインタボタン 1 で移動すると、上のウィンドウのサイズを調節できます。 xmh は、その下のウィンドウを調節して、これを補正しようとします。
ポインタボタン 3 で移動すると、下のウィンドウサイズを調節できます。 xmh は、その上のウィンドウを調節して、これを補正しようとします。
すべてのウィンドウには、最小と最大のサイズがあります。 ウィンドウが無効なサイズとなるような点を越えてボーダを移動することは できません。
メイルの処理
この章では、選択フォルダ、カレントフォルダ、選択メッセージ、カレントメッセージ、 選択シーケンス、カレントシーケンスの概念を定義します。 そして、それぞれのコマンドを紹介します。
カスタマイズのために、それぞれのコマンドに一致する動作の手続きが 与えられています。これらのアクションの手続きは、ユーザインターフェースを カスタマイズするために使われます。 特に、選択ボタンボックスのキーボードアクセレータとボタンの相関関係は、 アプリケーションのリソース CommandButtonCount によってつくられます。
フォルダとシーケンス
フォルダはメイルのメッセージの集まりを含むか、何もないかのどちらかです。 xmh は、サブフォルダを 1 レベル持つことができます。
選択されたフォルダは、フォルダのボタンボックスの上にあるバーの中の フォルダ名です。 なお、これは、現在見ているフォルダと必ずしも同じでないことに注意して ください。 選択したフォルダを変更するには、希望するフォルダボタンを ポインタボタン 1 で押すだけです。 もし、そのフォルダがサブフォルダを持っていれば、 プルダウンメニューからフォルダを選択します。
内容表は、見えているフォルダのメッセージをリストします。 内容表の上のタイトルバーは、見えているフォルダの名前です。
内容表のタイトルバーは、見えているフォルダの中の見えている メッセージのシーケンスの名前も表示します。 すべてのフォルダは、暗示的に all シーケンスを持っています。それは、 フォルダの中のすべてのシーケンスを含みます。 最初には、“ inbox:all ” が表示されます。
フォルダコマンド
Folder コマンドメニューは、大域的性質をもつコマンドを含んでいます。
Open Folder
選択したフォルダにデータを表示します。 したがって、選択したフォルダも、ビューアブルなフォルダになります。 このコマンドと一致するアクションの手続きは、 XmhOpenFolder([foldername]) です。 これは、オプショナルな引数として、 選択して開くためのフォルダの名前を取ります。 もし、フォルダが指定されないと、選択されたフォルダが開きます。 これは、フォルダメニューのボタンや、フォルダメニューや、それらのほかのキーボード アクセレータにバインドされたウィジェットからのイベントの解釈の 一部として記述されます。
Open Folder in New Window
新しいスクリーンを作成して、そのスクリーンに選択したフォルダを表示します。 ただし、同じフォルダは複数のスクリーンに同時に表示できないことに 注意してください。 これに一致するアクションは、XmhOpenFolderInNewWindow() です。
Create Folder
新しいフォルダを作成します。 新しいフォルダ名を入力するように促されます。 名前を入力するには、そのためのブランクボックスをポインタで指して、 名前を入力します。 サブフォルダを作成するには、親のフォルダの名前の後にスラッシュを付けて、 その後にサブフォルダの名前を記述します。 例えば、clients フォルダにサブフォルダ xmh を作成するには、 clients/xmh とします。 OKay ボタンを押すか、リターンキーを押すと終了します。 Cancel ボタンを押すと、キャンセルされます。 これに一致するアクションは、XmhCreateFolder() です。
Delete Folder
選択したフォルダを破壊します。この動作を行うか否か質問されます(確認 ウィンドウを参照してください)。 フォルダを破壊すると、そのサブフォルダも破壊されます。 これに一致するアクションは、XmhDeleteFolder() です。
Close Window
変更がセーブされたかチェックしてから、xmh を終了します。 もし、ほかの付加的な xmh のウィンドウで選択された場合は、 そのウィンドウを終了します。
強調表示メッセージ、選択メッセージ
と現在のメッセージ
ビューアブルなフォルダに対するメッセージリストの中のメッセージのセット を強調することができます。 メッセージを強調するには、強調したいメッセージの上で、ポインタボタン 1 を使用してクリックするだけです。 メッセージの範囲を強調するには、最初のメッセージ上でポインタボタン 1 を 使用してクリックし、最後のメッセージ上でポインタボタン 3 を使用して クリックします。 選択されたメッセージを広げるには、ポインタボタン 3 を使用します すべてのメッセージを協調するには、ポインタボタン 1 を素早く 3 回押します。 選択をキャンセルするには、2 回押します。 選択されたメッセージは、強調表示メッセージがある場合には、これと同じです。 強調されているメッセージがない場合は、選択されたメッセージは、現在の メッセージと同じであるとみなされます。 現在のメッセージは、メッセージ番号の次に ’+’ を付けて示されます。 これは通常、現在表示されているメッセージに対応します。 例えば、新しいフォルダをオープンした場合、 現在表示されているメッセージは、ビューアブルなメッセージと異なります。 メッセージが表示されているとき、表示区域の上のタイトルバーでメッセージを 確認できます。
内容表コマンド
Table of Contents コマンドメニューは、 オープンされている、または表示されているフォルダに対する アクションをするコマンドを含みます。
Incorporate New Mail
受け取った新しいメールをビューアブルなフォルダに追加して、現在の メッセージを最初の新しいメッセージにします。 このコマンドは、メニューから選択できますが、 表示されているフォルダが新しいメールを受け取れる場合のみ 実行できます。 デフォルトでは、inbox のみ、新しいメールを取り込むことができます。 これに一致するアクションは、XmhIncorporateNewMail() です。
Commit Changes このフォルダ中でマークされている削除、移動、コピーを実行します。 これに一致するアクションは、XmhCommitChanges() です。
Pack folder 1 から始まり、 1 ずつ増えるように、このフォルダ中のメッセージに番号を 付け直します。 これに一致するアクションは、XmhPackFolder() です。
Sort folder フォルダ中のメッセージを入力順にソートします。 (副作用として、これはフォルダをパックします。) これに一致するアクションは、XmhSortFolder() です。
Rescan Folder メッセージリストを再構成します。 もっているうちのどのメッセージが誤っているかという xmh の考えが 疑わしい場合は必ず、このコマンドを使用します。(特に、これは xmh を 使わないで直接 mh コマンドを使って何かを変更した場合に、役に立ちます)。 これに一致するアクションは、XmhForceRescan() です。
メッセージコマンド
Message コマンドは選択されたメッセージか、もし選択されてなければ、 現在のメッセージに対する操作をするコマンドを含みます。
Compose Message
新しいメッセージを構成します。新しいウィンドウが現われます。 この詳細については、後述の生成用ウィンドウを参照してください。 このコマンドは、現在のメッセージに影響を及ぼしません。 これに一致するアクションは、XmhComposeMessage() です。
View Next Message
最初の選択メッセージを見ます。 メッセージが強調されていない場合、現在のメッセージを見ます。 現在のメッセージがすでに表示されている場合、現在のメッセージの後の 最初のマークなしのメッセージを見ます。 これに一致するアクションは、XmhViewNextMessage() です。
View Previous 最後の選択メッセージを見ます。 メッセージが強調されていない場合、現在のメッセージを見ます。 現在のメッセージがすでに表示されている場合、現在のメッセージの前の 最初のマークなしメッセージを見ます。 これに一致するアクションは、XmhViewPrevious() です。
Deleted 選択したメッセージに削除マークを付けます。 メッセージが強調されていない場合、これは自動的に次のマークなしの メッセージを表示します。 これに一致するアクションは、XmhMarkDeleted() です。
Move 選択したメッセージを現在のフォルダに移動するようにマークします (指定したフォルダが表示されているフォルダと同じ場合は、 このコマンドは、単に ブザーを鳴らします)。 メッセージがハイライトされていない場合、 移動する現在のメッセージをマークし、 次のマークされていないメッセージを表示します。 これに一致するアクションは、XmhMarkMove() です。
Copy as Link 選択したメッセージを指定したフォルダにコピーするようマークします (指定したフォルダが表示されているフォルダと同じ場合は、 このコマンドは単に ブザーを鳴らします)。 メッセージがハイライトされていない場合、 コピーする現在のメッセージをマークします。 実際には、メッセージは、コピーされるのではなく、リンクされるので ご注意ください。 そのため、 xmh でコピーしたメッセージを編集すると、そのメッセージのコピー全てに、 影響を与えます。 次のマークされていないメッセージを表示します。 これに一致するアクションは、XmhMarkCopy() です。
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 コマンドメニューは、メッセージシーケンス ( メッセージシーケンスを 参照してください ) に付属するコマンドと、現在表示されているフォルダに 定義されているメッセージシーケンスのリストを含みます。 選択されたメッセージシーケンスは、メニューの端に示されています。 選択されたメッセージシーケンスを変更するには、シーケンスメニューから 新しいメッセージシーケンスを選びます。
Pick Messages 新しいメッセージシーケンスを定義します。 これに一致するアクションは、 XmhPickMessages() です。
以下のボタンが表示されますが、現在のフォルダに、任意のメッセージ シーケンスが定義されている場合にだけ感知可能です。
Open Sequence 表示されているシーケンスを選択したシーケンスと同じになるように変更します。 これに一致するアクションは、 XmhOpenSequence() です。
Add to Sequence 選択したメッセージを選択したシーケンスに追加します。 これに一致するアクションは、XmhAddToSequence() です。
Remove from Sequence
選択したメッセージを選択したシーケンスから削除します。 これに一致するアクションは、XmhOpenSequence() です。
Delete Sequence 選択したシーケンスを全部削除します。 なお、メッセージ自体は影響を受けないことに注意してください。 これらは、メッセージシーケンスとしてグループ化されないだけです。 これに一致するアクションは、XmhDeleteSequence() です。
ビューコマンド
View メニューのコマンド、および、 ビューウィンドウ (Message メニューコマンドの “View In New” に よって表示される) ボタンボックスのコマンドは、 Message メニューの同じコマンドと機能的には一致します。 しかし、それらのコマンドは、選択された メッセージや、現在のメッセージよりも表示されているメッセージを操作します。
Close Window 表示されているメッセージが別々のビューウィンドウにあるとき、 このコマンドは、セーブされてないものの状態を確認してから、ビューウィンドウを クローズします。
Reply 表示されているメッセージに対するリプライの生成用ウィンドウを作成します。 関連するアクションの手続きは、XmhViewReply() です。
Forward 本体が、表示されているメッセージの要約となるように初期設定された 生成用ウィンドウを作成します。 関連するアクションは、XmhViewForward() です。
Use As Composition
本体が表示されているメッセージとなるような内容を持つように 初期設定された生成用ウィンドウを作成します。 生成用ウィンドウで行った変更は、全て、drafts フォルダの 新しいメッセージの中に保存され、元のメッセージは変更されません。 例外として、 表示されているメッセージが drafts フォルダから選択されたもの (バグの項参照) であれば、 元のメッセージが編集されます。 このコマンドに一致するアクションの手続きは、XmhViewUseAsComposition() です。
Edit Message このコマンドは、表示されているメッセージを直接編集する場合に有効です。 このコマンドに一致するアクションの手続きは、XmhEditView() です。
Save Message このコマンドは、メッセージが編集されるまで有効になりません。 有効な場合、ビューにある元のメッセージにセーブされます。 このコマンドに一致するアクションの手続きは、XmhSaveView() です。 Print 表示されているメッセージを印刷します。xmh は通常、enscript(1) コマンドを呼び出すことによって印刷しますが、アプリケーション固有のリソース である PrintCommand を使ってカスタマイズできます。 このコマンドに一致するアクションの手続きは、XmhPrintView() です。
Delete 表示されているメッセージを削除用にマークします。 関連するアクションの手続きは、XmhViewMarkDelete() です。
オプション
Options メニューは、一つの項目を含みます。
Read in Reverse
これが選択されると、メニューの端にチェックマークが現われます。 “Read in Reverse” は、 次のメッセージと前のメッセージの意味を入れ替え、 現在のメッセージのマーカを 反対の方向に増加します。これは、最近のメッセージから順番に読むときに 便利です。このオプションはトグルとして振る舞います。 2 度目にこのメニューを選択すると、効果を打ち消すことができます。
生成用ウィンドウ
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 この生成用ウィンドウをドラフトフォルダにセーブします(drafts という名前のファイルを持っていない場合は、それを作成します)。 この後で生成用ウィンドウを安全にクローズすることができます。 将来的には、drafts フォルダをオープンし、メッセージを選択し、 “Use as Composition” コマンドを使って、この生成用ウィンドウ上で 作業を続けることができます。 これに一致するアクションは、XmhSave() です。
Insert 関連メッセージを生成用ウィンドウに挿入します。 生成用ウィンドウが、 Reply ボタンで作成された場合、関連メッセージは、 応答されているメッセージになり、そうでない場合は、関連メッセージは 定義されず、このボタンは非活性ボタンとなります。 メッセージは挿入される前に、ろ過されます。 後述のカスタマイズという項の ReplyInsertFilter を参照してください。 これに一致するアクションは、XmhInsert() です。
アクセレータ
アクセレータは近道です。キーボードや、ポインタを使って、メニューを使わずに コマンドを入力することを許しています。
xmh はポインタアクレータを共通に定義しています。 メッセージを見たり選んだりするには、シングルクリックで、 内容表の中のメッセージのエントリには、ポインタボタンの 2 を使います。フォルダやシーケンスを選択したり、開いたりするには、 シングルアクションで、フォルダや、シーケンスを決定するには、 ポインタボタン 2 を使います。
ハイライトされたメッセージ、あるいは、 ハイライトされたメッセージがい場合は、 現在のメッセージを、 1 回の操作で目的のフォルダに移動するようにマークするには、 ポインタボタン 3 を使用して、 目的のフォルダを選び、同時にメッセージをマークします。 同様に、ポインタボタン 3 で、シーケンスを選択すると、 ハイライトされたメッセージ、あるいは現在のメッセージを そのシーケンスに追加します。 これらの操作では、 それぞれ、 選択されたフォルダまたはシーケンス、 表示されているフォルダまたはシーケンスは、変更されません。
xmh は、メッセージを編集している間のビューエリアをのぞいて、 メインウィンドウの上で、以下のキーボードシーケンスを定義しています。
Meta-I新しいメイルを取り込みます。
Meta-C変更をまかせます。
Meta-Rフォルダをリスキャンします。
Meta-Pフォルダをパックします。
Meta-Sフォルダをソートします。
Meta-space次のメッセージを表示します。
Meta-cコピーの印をつけます。
Meta-d削除の印をつけます。
Meta-f選択されたあるいは、現在のメッセージをフォワードします。
Meta-m移動の印をつけます。
Meta-n次のメッセージを表示します。
Meta-p前のメッセージを表示します。
Meta-r選択されたあるいは、現在のメッセージにリプライします。
Meta-u印を削除します。
Ctrl-V内容表を順方向にスクロールさせます。
Meta-V内容表を逆方向にスクロールさせます。
Ctrl-vビューを順方向にスクロールさせます。
Meta-vビューを逆方向にスクロールさせます。
テキスト編集コマンド
すべてのテキスト編集コマンドは実際には、 アテナウイジェットの Text ウィジェットによって定義されます。 コマンドは、標準の X ツールキットキーリバインディングメカニズムを介して、 次に説明するデフォルト以外のキーにバインドすることができます。 詳細に関しては、 X ツールキットと Athena Widget 文書を参照してください。 テキストを入力するように求められたら必ず、標準のテキスト編集 インターフェースを使用します。 さまざまな制御とメタキーストロークの組合わせが、やや Emacs のような コマンドセットにバインドされます。 さらに、ポインタボタンを使って、テキストの一部を選択したり、テキスト中 の挿入ポイントを移動したりすることができます。 ポインタボタン 1 を押すことにより、挿入ポイントをポインタに移動します。 ボタン 1 を 2 回クリックするとワードを、 3 回クリックするとパラグラフを、 そして 4 回クリックするとすべてを選択します。 ポインタボタン 3 を使うと、選択をどちらかの方向に拡張することができます。 以下の説明では、行はウィンドウ中の表示されている文字の行を、パラグラフは、 キャリッジリターン間のテキストを示しています。 パラグラフ中のテキストは、現在のウィンドウ幅に基づいて行に分割されます。 以下のキーストロークの組合わせが定義されています。
Ctrl-a現在の行の始めに移動します。Meta-b 1 ワード前に戻ります。
Ctrl-b1 文字だけ前に戻ります。Meta-f1 ワード先に移動します。
Ctrl-d次の文字を削除します。Meta-iファイルを挿入します。
Ctrl-e現在の行の最後に移動します。Meta-k パラグラフの終りを削除します。
Ctrl-f1 文字だけ先に移動します。Meta-qパラグラフを形作ります。
Ctrl-gリセットします。Meta-v前の画面へ戻ります。
Ctrl-h前の文字を削除します。Meta-y最後に選択したテキストを挿入します。
Ctrl-j改行してインデントします。Meta-z1 行下にスクロールします。
Ctrl-kこの行の残りを削除します。Meta-d次の単語を削除します。
Ctrl-lリフレッシュします。Meta-D単語を削除します。
Ctrl-m新しいパラグラフ。Meta-h前の単語を削除します。
Ctrl-n次の行に移動します。Meta-H前の単語を削除します。
Ctrl-oパラグラフを2つに分割します。Meta-< ファイルの先頭に戻ります。
Ctrl-p前の行に戻ります。Meta->ファイルの終に行きます。
Ctrl-r逆方向に、検索 / 置換します。Meta-] 次のパラグラフに行きます。
Ctrl-s順方向に、検索 / 置換します。Meta-[ 前のパラグラフに戻ります。
Ctrl-t文字を置き換えます。
Ctrl-u4 倍します。Meta-Delete前の単語を削除します。
Ctrl-v次の画面に移動します。Meta-Shift Delete前の単語を削除します。
Ctrl-w選択テキストを削除します。Meta-Backspace前の単語を削除します。
Ctrl-y削除テキストを挿入します。Meta-Shift Backspace 前の単語を削除します。
Ctrl-z1 行上にスクロールします。
ポインタを使ってテキストのコピーアンドペーストもできます。
Button 1 Down選択範囲の始め
Button 1 Motion選択範囲の調整
Button 1 Up選択範囲の終り (コピー)
Button 2 Down現在の位置に挿入
Button 3 Down現在の選択範囲を広げる
Button 3 Motion選択範囲の調整
Button 3 Up選択範囲の終り (コピー)
確認ウィンドウ
あるワークを失ってしまうか、または危険が生じるようなボタンを押す場合は 必ず、ウィンドウが表示されて、その動作の確認を求めます。 このウィンドウには、Abort または No ボタン、および Confirm または Yes ボタンが含まれています。 No ボタンを押すと、操作が取り消され、Yes ボタンを押すと、 操作が進行します。
確認ウィンドウは、MH からのメッセージを含みます。 メッセージが 1 行を越えるような場合などは、 テキストの全部は表示されません。 メッセージをクリックすると、 メッセージの全体が読めるようにリサイズします。
メッセージシーケンス
mh メッセージシーケンスは、ある名前に対応付けられたメッセージの集合です。 これは、特定のフォルダに固有のものです。 2 つの異なるフォルダが、同じ名前のシーケンスを持つことができます。 “all” というシーケンスが各フォルダ内で、事前に定義されています。 これは、そのフォルダ中のすべてのメッセージの集合で構成されています( “cur” というシーケンスも通常、 すべてのフォルダに対して定義されています。 これは、現在のメッセージだけで構成されています。 xmh は、“cur” をユーザに隠していますが、その代わり現在の メッセージに “+” を付けています。 また、 xmh は、MH の “見えない” シーケンスはサポートしないので、 これもユーザに隠されています)。 フォルダに対するメッセージシーケンスは、 シーケンス名(“all” も含む)を 含むボタンとして表示されます。 内容表(“toc” として知られています)は、 いつでも 1 つのメッセージシーケンスを 表示しています。 これは、「表示されているシーケンス」と呼ばれます。 これが “all” でないと、 その名前は、フォルダ名の後の toc タイトルバーに 表示されます。 また、いつでも、シーケンスボタンのうちの 1 つがハイライトされます。 これは、「選択されたシーケンス」 と呼ばれます。 なお、表示されているシーケンスと選択されたシーケンスは必ずしも 同じものではないことに注意してください (これは、フォルダボタンが動作する 方法にとてもよく対応しています)。 Open Sequence、Add to Sequence、Remove from Sequence、 および Delete Sequence ボタンは、表示されているフォルダが all シーケンスでなく、 他の ッセージシーケンスを含んでいる場合にだけアクティブです。
なお、上記のどれも実際には、メッセージがフォルダの中にあろうと なかろうとメッセージには影響を与えないことに注意してください。 シーケンスは、フォルダ中のメッセージの集合であることを覚えておいて ください。 上記の操作は、どのメッセージがその集合の中にあるかに影響を与えるだけです。 新しいシーケンスを作成するには、Pick ボタンを押してください。 テキストを入力すべきたくさんの場所をもつ新しいウィンドウが表示されます。 基本的には、メッセージの特性に基づいて、メッセージシーケンスの最初の セットを記述することができます。 このように、シーケンスを特定の人物からのまたは特定の題目をもつなどの 最初のすべてのメッセージであると定義することができます。 また、ブール演算子で様々なものと接続できるので、題目に xmh を持つ、 weissman からのものを全て選択することができます。 レイアウトはかなり明確です。最も単純な事例は、最も簡単です。 適切なフィールドを指し入力するだけです。 複数のフィールドに入力する場合、すべての空でないフィールドに一致する メッセージだけを選択します。 より複雑な事例は、あるフィールドまたは別のフィールドと一致するものを 欲するが、必ずしも両方は必要ない場合に生じます。 これが、すべての “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 は 1 または 2 桁の月の日、 mmm は月の 3 文字の省略形、 そして、 yy は年です。 残りのフィールドはオプションで、hh、mm、ss は時刻を指定し、zzz は 時間帯を選択します。 なお、時間が指定されない場合は、デフォルトにより真夜中になります。 したがって、 “7 nov 86” − “8 nov 86” の範囲を選択すると、 8 日のメッセージはすべて、真夜中を過ぎて到着するので、 7 日のメッセージだけを 得ることになります。 “日付フィールド” は、この日付範囲を見つけるためのヘッダ中の フィールドを指定します。 デフォルトは “Date” です。 定義しているシーケンスがすでに存在している場合、任意に、古いセットを 新しいセットとマージすることができます。 このために、Yes と No ボタンが存在します。 最後に全部を OK にするか、またはそれを Cancel することができます。 一般的に大部分の人々は、これらの機能をほとんど使用しません。 しかし、時には、Pick を使って、いくつかのメッセージを見つけて、 そのメッセージ中を検索してから、Delete Sequence を押して、すべての ものを元の状態に戻すのもよいでしょう。
ウィジェットの階層
リソースを記述するために、xmh を構成するウィジェットの階層を 知ることは役に立ちます。以下に、インデントを使って階層構造を記述します。 ウィジェットクラスの名前が最初に、次に、ウィジェットインスタンスの名前がきます。 アプリケーションクラスの名前は、Xmh です。
メインの内容表の階層とビューウィンドウは、 TopLevelShell ウィジェットが、application shell と Paned widget の 間の階層に挿入されている場合を除いて、 付加的な内容表とビューウィンドウと同じです。
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
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
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 ツールキットイントリンシックのリソース指定メカニズムを使用して、 コマンドラインに指定できます。 そのため、 xmh を起動して、 メッセージのヘッダを表示するには、以下のようにしてください。
% xmh −xrm ’∗HideBoringHeaders:off’
TocGeometry、 ViewGeometry、 CompGeometry、 または PickGeometry が指定されていない場合は、 Geometry の値が代わりに使われます。 もし、高さが記述されてなければ (例えば、""、"=500"、"+0−0")、 フォントや行数から計算されたデフォルトの値が使われます。 もし、幅が記述されてなければ (例えば、""、"=x300"、"−0+0")、 ディスプレイの幅の半分の幅になります。 もし、記述されてなければ、pick ウィンドウの高さは、 ディスプレイの高さの半分がデフォルトになります。
以下のリソースが定義されています。
banner フォルダや、内容表や、ビューのラベルのデフォルトの短い文字列です。 デフォルトの文字列は、 "xmh MIT X Consortium R5" です。
blockEventsOnBusy
xmh がコマンドを処理している間に、ユーザからの入力を許さずに ビジーカーソルを表示するかどうかを設定します。 デフォルトは、true です。
busyCursor
ポインタの位置をあらわすのに使われているシンボルの名前で、 xmh が、時間のかかるコマンドを処理しているときに、 もし、blockEventsOnBusy が true なら表示されます。 デフォルトは、"watch" です。
busyPointerColor
ビジーカーソルのフォアグラウンドカラーです。 デフォルトは、XtDefaultForeground です。
checkFrequency
何分間にどれだけ新しいメイルのチェックをするか、チェックポイントを作るか、 内容表をスキャンし直すかをあらわします。 checkNewMail が true の場合、 xmh は、 新しいメイルが着いたかどうかをある間隔で調べます。 makeCheckpoints が true の場合、5 つ目の間隔ごとに チェックポイントを設定します。 また、5 つ目の間隔ごとに、 内容表は、ファイルシステムとの矛盾をチェックされ、 日付が古い場合は、再走査されます。 これらのチェックをすべて止めるには、CheckFrequency を 0 にセットします。 デフォルトは、1 です。 このリソースは、下位互換のためにユーザのリソースファイルに 残されています。 checkpointInterval、 mailInterval、 および rescanInterval も参照してください。
checkNewMail
true ならば、 xmh は、一定の間隔で、新しいメイルが一番上のレベルのフォルダおよび オープンしているサブフォルダに 到着したかどうかを調べます。 一番上のフォルダに取り入れられるのを待っている 新しいメイルがある場合は、 視覚的な印が表示されます。 デフォルトは、true です。 間隔は、mailInterval で調節されます。
checkpointInterval (class Interval)
makeCheckpoints が true の場合、 何分ごとに volatile 状態のチェックポイントを作るか指定します。 デフォルトは、checkFrequency の 5 倍の値です。
checkpointNameFormat
チェックポイントファイルをどのように名前を付けるか指定します。 このリソースの値は、 ‘%d’(必ず必要で、1 度しか起こらないもの) の代わりに、文字列の メッセージ番号を挿入してファイル名を作成するのに使用されます。 リソースの値が空の文字列の場合、 文字列内に ‘%d’ がない場合、 あるいは、 ‘%d’ がリソースの値の場合は、 デフォルトが代わりに使用されます。 デフォルトは、“%d.CKP” です。 チェックポイントは、 絶対パスが指定されない限り、元のフォルダ内で行われます。 xmh は、ユーザがチェックポイントを解決のを手助けしたり、 チェックポイントファイルを削除したりしません。
commandButtonCount
メインウィンドウの内容表と、ビューエリアの間のボタンボックスに 作るコマンドボタンの数です。 xmh は、これらのボタンを button1、button2 といった名前で、 commandBox という名前のボックスに作ります。 デフォルトは、0 です。 xmh ユーザは、 個人的なリソースファイルに、これらのボタンのラベルとアクションを 記述することができます。 アクション/インターフェースのカストマイゼーションの項を 参照してください。
compGeometry
コンポジションを含むウィンドウの最初の位置。
cursor ポインタをあらわすのに使うシンボルの名前。 デフォルトは、left_ptr です。
debug xmh が起動中に、stderr に情報を出力するかどうか。 デフォルトは、false です。
draftsFolder
メッセージドラフトに使われるフォルダ。デフォルトは、drafts です。
geometry
デフォルトの位置。デフォルトは設定されてません。
hideBoringHeaders
“on” の場合、 xmh は、メッセージの中に含まれる興味のないヘッダラインを スキップして、視野から見えなくします。 デフォルトは、on です。
initialFolder
起動時にどのフォルダを表示するかを設定します。 コマンドラインのオプション −initial でも設定できます。 デフォルトは、inbox です。
initialIncFile
メイルの入ってくるファイルの 絶対パス名です。 インストールによっては、 例えば、ポストオフィスプロトコルを使用している場合、 ファイルは、適切ではありません。 この場合、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 は、 このリソースを on にする近道です。
makeCheckpoints
true ならば、 xmh は、不安定な編集のチェックポイントを セーブしようとします。 デフォルトは、false です。 リソース checkFrequency によって、チェックの回数を制御できます。 チェックポイントの場所については、 checkpointNameFormat を参照してください。
mhPath
MH コマンドを見つけるためのディレクトリ。 もし、コマンドがユーザのパスで見つからなければ、 ここで指定したパスが使用されます。 デフォルトは、/usr/local/mh6 です。
newMailBitmap (class NewMailBitmap)
フォルダに新しいメールがあるとき、 フォルダのボタンに表示するビットマップです。 デフォルトは、black6 です。
newMailIconBitmap (class NewMailBitmap)
他のフォルダに新しいメールがあるとき、 ウィンドウマネージャに知らせる アイコン用のビットマップです。 デフォルトは、flagup です。
noMailBitmap (class NoMailBitmap)
フォルダに新しいメールがないとき、 フォルダのボタンに表示するビットマップです。 デフォルトは、box6 です。
noMailIconBitmap (class NoMailBitmap)
他のフォルダに新しいメールが何もないとき、 ウィンドウマネージャに知らせる アイコン用のビットマップです。 デフォルトは、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 の内容表ウィンドウとビューウィンドウの初期位置を設定します。
tocPercentage
内容表を表示するのに使われるメインウィンドウの割合です。 デフォルトは、33 です。
tocWidth
フォルダの 内容表の中のそれぞれのメッセージを生成する 文字の数をあらわします。デフォルトは、100 です。 xmh のメインウィンドウのリスト部分が、 右の境界線でクリップされるようにウィンドウ位置を設定したい場合、 もしくは、 mhl をよく使用する場合は、これより小さい値を使用すると 動作が速くなり、余分な文字は使用されません。
viewGeometry
メッセージのビューを表示するウィンドウの初期位置をあらわします。
複数の郵便受け
ユーザは、 複数のスプールファイルまたは郵便受けからメールを取り込む 必要がある場合もあります。 受け取るメールを MH slocal プログラムへ転送する場合は、 ユーザが指定した 複数の受取用郵便受けにソートできます。 来るメールの転送および自動ソートを .maildelivery ファイルに 指定する方法については、 MH オンラインマニュアルの slocal を参照してください。
xmh が、様々な郵便受けを認識するように、 ホームディレクトリに .xmhcheck というファイルを作成してください。 このファイルに、 フォルダ名の後に、空白で区切って、 郵便受けの場所の絶対パス名を指定 (1 行に 1 つのマッピング) すると、 存在するフォルダ名と郵便受けのマッピングが作成されます。 xmh は、このファイルに、 新しいメールが到着したことを知らせるかどうか、 また、新しいメールをメール受けを持つフォルダに取り入れるかどうか、 を示すリソースが設定されているかをみます。 xmh は、−file 引数により、Inc を起動します。 また、 xmh が新しいメールをチェックするように指定されている場合は、 msgchk を使用せず、直接チェックします。
以下は、inbox および xpert フォルダ用の、 .xmhcheck ファイルのフォーマット例です。
inbox/usr/spool/mail/converse
xpert/users/converse/maildrops/xpert
アクション/インターフェースのカスタマイゼーション
xmh が、コマンドの機能に一致するアクションの手続きを与え、 アクセレータをインストールするので、 ユーザは、個人的なリソースファイル中で アクセレータをカスタマイズすることができます。 リソースのカスタマイズを指定する例は、 mit/clients/xmh/Xmh.sample ファイルを参照してください。 シンタックスについては、 Translation Table Syntax に関する X Toolkit Intrinsics 仕様書の付録、 および、X リソースの使用/指定の仕方に関する説明を 参照してください。 アクションが、 予定されてないイベントやウィジェットにバインドされていると、 断言できない結果が起こります。
以下は、 xmh ボタンにアクションをバインドし、 デフォルトのアクセレレータを再定義する例です。 これにより、 上記のサンプルファイルをアクセスする必要が無い場合など、 メタキーが必要ありません。
! 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:
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, ...])
このアクションは、フォルダの名前のスタックに、その引数のそれぞれをプッシュします。 もし、引数が与えられなければ、選択されたフォルダがスタックにプッシュされます。
XmhPopFolder()
このアクションは、スタックからフォルダの名前を取り出して、 選択されたフォルダにセットします。
XmhPopupFolderMenu()
このアクションは、ユーザがフォルダボタンを選択したときに用いられます。 フォルダボタンは、フォルダと、サブフォルダを表示します。 サブフォルダのメニューは、このルーチンによって最初の参照が当てにされます。 もし、サブフォルダがなければ、このルーチンはフォルダがサブフォルダを 持っていないというマークをつけ、メニューが作られません。 この場合、メニューボタンはトグルボタンをエミュレートします。 サブフォルダがあるとき、メニューがポップアップされ、メニューボタンの操作に、 PopupMenu() が使われます。
XmhSetCurrentFolder()
このアクションは、メニューボタンがフォルダの選択関数の中で、トグルボタンを エミュレートするのを許します。 このアクションは、メニューボタンウィジェットだけで、選択フォルダをセットします。
XmhLeaveFolderButton()
このアクションは、ユーザがポインタをメニューボタンウィンドウの外に動かしたとき、 メニューボタンが正確に振る舞うように保証します。
XmhPushSequence([sequencename, ...])
このアクションは、シーケンスの名前のスタックにその引数をプッシュします。 もし、引数が与えられなければ、選択されたシーケンスがスタックに プッシュされます。
XmhPopSequence()
このアクションは、スタックからシーケンスの名前を取り出して、 それが、選択されたシーケンスになります。
XmhPromptOkayAction()
このアクションは、Create Folder ポップアップの中で、okey ボタンを押すのと同じです。 XmhReloadSeqLists() このアクションは、 現在オープンしているフォルダのパブリックの MH シーケンスの内容を スキャン仕直し、 必要なら、シーケンスメニューをアップデートします。
XmhShellCommand( parameter [, parameter])
最低、パラメタを 1 つは指定しなければいけません。 複数のパラメタを、空白文字 1 文字で区切って、 1 つの文字列につなげます。 そして、指定したメッセージ、あるいは、 メッセージがない場合は現在のメッセージが、 パラメタの文字列の最後に付け加えられます。 文字列は、シェルコマンドとして実行されます。 メッセージは、常に絶対パス名で指定しなければいけませえん。 指定したメッセージ、および現在のメッセージが存在しないのに、 このアクションを実行した場合は、 エラーとなります。
XmhCheckForNewMail()
このアクションは、 xmh が認識しているメール受けを全てチェックします。 ユーザが、 .xmhcheck ファイル、または initialIncFile リソースに メール受けを指定していない場合は、 H コマンドの msgchk が 新しいメールをチェックするのに使用されます。 指定されている場合は、 xmh が直接チェックします。
XmhWMProtocols([wm_delete_window] [wm_save_yourself])
このアクションは、 ウィンドウマネージャのコミュニケーションプロトコルへの加入のための ものです。 ウィンドウの削除、および自分のメッセージの保存をします。 ユーザは、 適切なパラメタと一緒にこのアクションを呼び出して、 ウィンドウマネージャがリクエストを出したかのように、 xmh に、 これらのプロトコルの、どちらか一方、あるいは両方ともに 応答させることができます。 アクションは、文字列のパラメタが大文字か小文字かは、無視します。 受け取ったイベントが ClientMessage イベントで、 パラメタが存在する場合は、 最低、パラメタの内の 1 つが、 xmh のためのリクエストとしてイベントがリクエストするプロトコルと、 一致しなければいけません。
MH を使ったカスタマイズ
生成用ウィンドウに表示される最初のテキストは、相当する MH コマンドを 実行することによって得られます。 すなわち、comp、repl、 forwと、メッセージの構成部品は、 それらのコマンドを記述することによって カスタマイズされます。 comp は、 xmh の実行につき一回だけ実行され、 メッセージのテンプレートは新しい構成が続いて起こるたびに、 再び読み込まれます。
xmh は、MH コマンド (inc、msgchk、 comp、send、repl、forw、 refile、rmm、pick、pack、 sort、scan を含む) を使用します。 これらのコマンドのフラグは、 MH プロファイルに指定できますが、 xmh の指定が優先されます。 アプリケーションリソース debug に ture を設定して、 xmh が MH コマンドを使用しているかどうかをみることができます。
環境
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 を参照。
関連事項
X(7), xrdb(1), X Toolkit Intrinsics, Athena Widget Set, mh(1), enscript(1)
MH および xmh に関する本は、出版されています。
バグ
- ユーザがウィンドウを閉じた時、 xmh は、そのウィンドウ用の一時的ウィンドウも、全て閉じます。
- XmhUseAsComposition および XmhViewUseAsComposition を DraftsFolder のメッセージに操作すると、 xmh は、同じメッセージが他のウィンドウで表示されている場合、 コンポジションの編集を不可にします。
- 変更後、ときどき、 実際にはメッセージがあるにもかかわらず、 内容表に何も表示されない場合があります。 このような場合は、 ディスプレイをリフレッシュするか、 内容表の上で Control-L と入力すると、 ほとんどの場合、正しいリストが表示されます。 これでも表示されない場合は、 フォルダをスキャン仕直してください。
- “見えない” メッセージシーケンスを認識し、 扱わなくてはなりません。
- ユーザが以前に MH を使用したことがあるかどうかを プログラムが自動的に判断し、 なければ、inc でハングするのではなく、 &.mh_profile を作成すきです。
- まだ提供されていないコマンドがいくつかあります(フォルダ名の変更、 メッセージの再送)。
- 他の xmh ウィンドウがある場合、 最初の内容表およびビューを削除しようとしても、 WM_DELETE_WINDOW プロトコルは、正しく動作しません。
- メッセージに返信を出すとき、注釈がサポートされていません。
- 書き込み許可がなしでは、フォルダを共有できません。
- プライベートなシーケンスは認識しません。
- フォルダのシーケンス定義が BUFSIZ 文字を越える場合は、 MH は、.mh_sequences ファイルのフォーマットが良くないと 報告します。 xmh は、そのようなメッセージをとらえ、それを表示しますが、 問題点の修正は、行いません。
権利
Copyright 1988, 1989, Digital Equipment Corporation.
Copyright 1989, Massachusetts Institute of Technology
権利と許可の声明文については、X(7) を参照のこと。
著者
以前、Digital Western Research Laboratory の Terry Weissman 氏
MIT X Consortium の Donna Converse 氏
NEWS-OSRelease 4.2.1R