XMH(1) — NEWS-OS Programmer’s Manual
名称
xmh − X ウィンドウの対 MH メッセージ処理システムインターフェース
形式
xmh [−path mailpath] [−initial foldername] [−flag] [−toolkitoption ...]
解説
xmh プログラムは、 MH メッセージ処理システムへのウィンドウ指向の フロントエンドを提供します。 実際にメールで何か行うには、mh パッケージを呼び出さなくては なりません。 電子メイルのメッセージは、フォルダーにおいて、書かれたり、送られたり、 受けとられたり、返事を書かれたり、フォワードされたり、ソートされたり、 保存されたりします。 既存のものに変わるメイルのディレクトリのパスを、-path の後に記述すると、 メイルを処理する場所であるメイルフォルダの場所を変えることができます。 デフォルトのパスは、$HOME/.mh_profile の中で設定されている Path の値か、 $HOME/Mail になっています。 -initial を使うと、新しいメイルを受けとったり、xmh がはじめに 開いたりするフォルダを指定することができます。 デフォルトのフォルダは、‘inbox’ です。 オプション -flag をつけると、新しいメイルが到着した時に、xmh の アイコンのビットマップが変わります。 これら 3 つのオプションは、リソースファイルの中で使用されるアプリケーション 固有のリソースの、MailPath、InitialFolder、MailWaitingFlag と同じです。 標準ツールキットのコマンドラインオプションについては X(1) を 参照して下さい。 この文書の長さに惑わされないでください。 ここでは、アテナウィジェットセットの多くの外観と、ユーザインターフェースの カスタマイズについての広範囲にわたる仕組みを紹介します。 xmh は本当に使いやすいものです !
インストール
xmh の現在のバージョンでは、ユーザはすでに、mh、バージョン 6 を使用するようセットアップしていなくてはなりません。 これを行うには、ホームディレクトリ内に .mh_profile というファイルが あるか調べてください。 このファイルがあったら、 “Current-Folder” で始まる行が含まれている ことを確認してください。 これが確認できたら、バージョン 4 、または mh のより初期の バージョンを使っていることになります。 バージョン 6 に変換するには、この行を取り除かなくてはなりません(これを しないと、 stderr に疑似出力が生じ、セットアップによっては xmh を ハングすることがあります)。 まだ .mh_profile をもっていない場合、シェルに “inc” と入力する ことによって、このファイル(および、必要なものすべて)を作成できます。 詳細は、mh(1) の文書を参照してください。
XMH の実行
他の X アプリケーション(例、 xterm)と同じように、 xmh を 実行します。 xmh は、コマンド行ディスプレイ(形式 “−display host:dpy”)を 受け付けます。 デフォルトのディスプレイは、環境変数 DISPLAY で指定されています。 この文書の残りはおそらく、実際に xmh を実行して、説明されている 事柄を見ながらでないと、理解するのが難しいでしょう。
基本のスクリーンレイアウト
xmh は、4 つの区域に分けられたスクリーン 1 つで開始します。
− プルダウンメニューの 6 つのボタン。
− それぞれのトップレベルのフォルダを表すボタンの集まり。 mh の新規ユーザには、“drafts” と “inbox” の 2 つが表示されます。
− フォルダの 1 つの中のメッセージリスト(最初は、これは “inbox” の中の メッセージを表示します)。
− メッセージのうちの 1 つのビュー(最初は、これは空白です)。
XMH と アテナウィジェットセット
xmh は、X ツールキットとアテナウィジェットセットを使用します。 下に記述されているスクロールバーや、ボタンボックスなどの部品は、実際に アテナウィジェットセットの一部です。 ここでは、完全のためだけに記述されています。より詳しい情報を得るには、 アテナウィジェットセットのドキュメントを見てください
スクロールバー
スクリーンのいくつかの部分は、グレイのバーを含む垂直の領域を左に もっています。 この領域がスクロールバーです。 これは、ウィンドウ中のデータが、スクリーンに表示できる以上のスペースを とっている場合には必ず使用します。 グレイのバーは、データが見える部分を示しています。 したがって、領域の全部がグレイの場合、データはすべて見えます。 領域の前半だけがグレイの場合、データの上半分だけが見えます。 もし、メッセージのテキストが表示範囲を越えていれば、メッセージの表示領域に 水平方向のスクロールバーが現れます。 スクロールバーの中のポインタを使って、データが見える部分を変更する ことができます。 真中のボタンをクリツクすると、グレイの領域の一番上の部分が、ポインタの ある場所に移動して、それに対応する部分のデータが表示されます。 真中のボタンを押し続けると、グレイの領域中を移動することができます。 これにより、データの一番上に簡単にいくことができます。 真中のボタンを押しながら、スクロールバーの一番上まで移動して、ボタンを 離すだけです。 ボタン 1 でクリックすると、ポインタの右のデータが、ウィンドウの一番 上までスクロールします。ポインタボタン 3 でクリックすると、ウィンドウの 一番上のデータが、ポインタのあるところまでスクロールダウンします。
ボタンボックス、ボタン、メニュ
たくさんのワードまたは短い句で構成されている領域(それぞれがボックスで 囲まれています)は、ボタンボックスと呼ばれます。 各ボックスは、ポインタをそのボックス上に移動して、ポインタボタン 1 を 押すことによって押すことができるボタンです。 与えられたボタンボックスに、入れることのできる以上のボタンがある場合は、 これは必ずスクロールバーで表示されるので、希望のボタンまでスクロールする ことができます。 いくつかのボタンは、プルダウンメニュになっています。 ポインタがそれらのボタンの一つの上にあるときにポインタボタンを押すと、 プルダウンメニュが現れます。ボタンを押したままメニュの上でポインタを 動かす ( ドラッグといいます。) と、ポインタが、選択できる項目の上を通った時に 項目がハイライトになります。 項目を選択するには、項目がハイライトになっているうちに、 ポインタボタンを放します。
領域の相対サイズの調節
スクリーン上のさまざまな領域のサイズに満足できない場合は、それを簡単に 変更することができます。 それぞれのリージョン間のボーダの右端の近くは、ブラックボックスで、 グリップと呼ばれます。 ポインタでこのグリップを指して、ポインタボタンを押し、上下に移動して、 希望の場所でボタンを離します。 使用するポインタボタンによって、動作が異なります。 真中のボタンで移動すると、ボーダだけが移動します。 この方法は理解しやすいですが、おそらく最も役に立たないでしょう。 ポインタボタン 1 で移動すると、上のウィンドウのサイズを調節できます。 xmh は、その下のウィンドウを調節して、これを補正しようとします。 ポインタボタン 3 で移動すると、下のウィンドウサイズを調節できます。 xmh は、その上のウィンドウを調節して、これを補正しようとします。 すべてのウィンドウには、最小と最大のサイズがあります。 ウィンドウが無効なサイズとなるような点を越えてボーダを移動することは できません。
メイルの処理
この章では、選択フォルダ、カレントフォルダ、選択メッセージ、カレントメッセージ、 選択シーケンス、カレントシーケンスの概念を定義します。 そして、それぞれのコマンドを紹介します。
カスタマイズのために、それぞれのコマンドに一致する動作の手続きが 与えられています。これらの操作の手続きは、ユーザインターフェースを カスタマイズするために使われます。 特に、選択ボタンボックスのキーボードアクセレータとボタンの相関関係は、 アプリケーションのリソース CommandButtonCount によってつくられます。
選択フォルダ
フォルダはメイルのメッセージの集まりを含むか、何もないかのどちらかです。
選択されたフォルダは、フォルダのボタンボックスの上にあるバーの中の フォルダ名です。 なお、これは、見えているフォルダと必ずしも同じでないことに注意して ください。 選択したフォルダを変更するには、希望するフォルダボタンを押すだけです。 もし、そのフォルダがサブフォルダを持っていれば、 プルダウンメニュからフォルダを選択します。
内容表は、見えているフォルダのメッセージをリストします。 内容表の上のタイトルバーは、見えているフォルダの名前です。
内容表のタイトルバーは、見えているフォルダの中の見えている メッセージのシーケンスの名前も表示します。 すべてのフォルダは “all” シーケンスを持っています。それは、 フォルダの中のすべてのシーケンスを含みます。 最初には、“inbox:all” が表示されます。
フォルダコマンド
フォルダコマンドメニュは、大域的性質をもつコマンドを含んでいます。
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() です。
Mark Deleted 選択したメッセージに削除マークを付けます。 メッセージが強調されていない場合、これは自動的に次のマークなしの メッセージを表示します。 これに一致する操作は、XmhMarkDeleted() です。
Mark Move 選択したメッセージを現在のフォルダに移動するようにマークします(現在の フォルダが表示されているフォルダと同じ場合は、このコマンドは、単に ブザーを鳴らします)。 メッセージが強調されていない場合、これは自動的に次のマークなしの メッセージを表示します。 これに一致する操作は、XmhMarkMove() です。
Mark Copy 選択したメッセージを現在のフォルダにコピーするようマークします(現在の フォルダが表示されているフォルダと同じ場合は、このコマンドは単に ブザーを鳴らします)。 これに一致する操作は、XmhMarkCopy() です。
Unmark 選択したメッセージから、もし強調されてなければ、現在のメッセージから、 上記の 3 つのマークのどれかを削除します。 これに一致する操作は、XmhUnmark() です。
View in New Window
最初の選択メッセージまたは、強調されてなければ、現在のメッセージの ビューだけを含む新しいウィンドウを作成します。 これに一致する操作は、XmhViewInNewWindow() です。
Reply 最初の選択メッセージまたは、強調されてなければ、現在のメッセージに 応えて生成用ウィンドウを作成します。 これに一致する操作は、XmhReply() です。
Forward 本体が、選択メッセージまたは、強調されてなければ、現在のメッセージ の内容となるように初期設定された生成用ウィンドウを作成します。 これに一致する操作は、XmhForward() です。
Use as Composition
本体が選択メッセージまたは、強調されてなければ、現在のメッセージ となるように初期設定された生成用ウィンドウを作成します。 なお、生成用ウィンドウで行ったいかなる変更も、 “ ドラフト ” フォルダ の中の新しいメッセージの中にセーブされることに注意してください。 しかし、このコマンドは、“ ドラフト ” フォルダの中で、メッセージの 草案を構成するために使われるように作られていて、このルールには 例外があります。もし、構成物として使われるメッセージが、 “ ドラフト ” フォルダから選択されると、元のメッセージに変更の 影響が及びます(生成用ウィンドウを参照してください)。 これに一致する操作は、 XmhUseAsComposition() です。
Print 選択したメッセージまたは、強調されてなければ、現在のメッセージを表示します。 xmh は通常、 enscript(1) コマンドを呼び出すことによって 表示しますが、アプリケーション固有のリソースである PrintCommand によってカスタマイズすることができます。 これに一致する操作は、XmhPrint() です。
シーケンスコマンド
Sequence コマンドメニュは、メッセージシーケンス ( メッセージシーケンスを 参照してください ) に付属するコマンドと、現在表示されているフォルダに 定義されているメッセージシーケンスのリストを含みます。 選択されたメッセージシーケンスは、メニュの端に示されています。 選択されたメッセージシーケンスを変更するには、シーケンスメニュから 新しいメッセージシーケンスを選びます。
Pick Messages 新しいメッセージシーケンスを定義します。 これに一致する操作は、 XmhPickMessages() です。
以下のボタンが表示されますが、現在のフォルダに、任意のメッセージ シーケンスが定義されている場合にだけ感知可能です。
Open Sequence 表示されているシーケンスを選択したシーケンスと同じになるように変更します。 これに一致する操作は、 XmhOpenSequence() です。
Add to Sequence 選択したメッセージを選択したシーケンスに追加します。 これに一致する操作は、XmhAddToSequence() です。
Remove from Sequence
選択したメッセージを選択したシーケンスから削除します。 これに一致する操作は、XmhOpenSequence() です。
Delete Sequence 選択したシーケンスを全部削除します。 なお、メッセージ自体は影響を受けないことに注意してください。 これらは、メッセージシーケンスとしてグループ化されないだけです。 これに一致する操作は、XmhDeleteSequence() です。
ビューコマンド
ビューメニュと、ビューウィンドウ ( メッセージコマンド “View In New” に よって表示される ) のボタンボックスのコマンドは、メッセージメニュの同じ コマンドと機能的には一致します。しかし、それらのコマンドは、選択された メッセージや、現在のメッセージよりも表示されているメッセージを操作します。
Close Window 表示されているメッセージが別々のビューウィンドウにあるとき、 このコマンドは、セーブされてないものの状態を確認してから、ビューウィンドウを クローズします。
Reply 表示されているメッセージに対するリプライの生成用ウィンドウを作成します。 関連する操作の手続きは、XmhViewReply() です。
Forward 本体が、選択メッセージの内容となるように初期設定された生成用ウィンドウを 作成します。 関連する操作の手続きは、XmhViewForward() です。
Use As Composition
本体がこのメッセージとなるように初期設定された生成用ウィンドウを作成します。 なお、生成用ウィンドウで行ったいかなる変更も、“ ドラフト ” フォルダの 新しいメッセージの中にセーブされます。そして、元のメッセージには変更の 影響はありません。例外として、もし、表示されているメッセージが“ ドラフト ” フォルダから選択されたものであれば、元のメッセージは編集されます。 このコマンドに一致する操作の手続きは、XmhViewUseAsComposition() です。
Edit Message このコマンドは、表示されているメッセージを直接編集する場合に有効です。 このコマンドに一致する操作の手続きは、XmhEditView() です。
Save Message このコマンドは、メッセージが編集されるまで有効になりません。 有効な場合、ビューにある元のメッセージにセーブされます。 このコマンドに一致する操作の手続きは、XmhSaveView() です。 Print 表示されているメッセージを印刷します。xmh は通常、enscript(1) コマンドを呼び出すことによって印刷しますが、アプリケーション固有のリソース である PrintCommand を使ってカスタマイズできます。 このコマンドに一致する操作の手続きは、XmhPrintView() です。
オプション
Options メニュは、一つの項目を含みます。
Read in Reverse
これが選択されると、メニュの端にチェックマークが現われます。 Read in Reverse は、次のメッセージと前のメッセージの意味を入れ替え、 反対の方向に増加します。これは、最近のメッセージから順番に読むときに 便利です。このオプションはトグルとして振る舞います。 2 度目にこのメニュを選択すると、効果を打ち消すことができます。
生成用ウィンドウ
通常のテキスト編集機能の他に、生成用ウィンドウに対応付けられた 6 つの コマンドボタンがあります。
Close Window この生成用ウィンドウをクローズします。 最後に Save または Send ボタンを使用してから、なんらかの変更を 行っている場合、これをセーブしなくても良いか否か確認されます。 これに一致する操作は、XmhCloseView() です。
Send この生成用ウィンドウを送ります。 これに一致する操作は、XmhSend() です。
New Headers 現在の生成用ウィンドウを空のメッセージに置き換えます。 もし、最近の Send や Save から変更があれば、それを失ってもよいかどうか 確認します。 これに一致する操作は、XmhResetCompose() です。
Compose Message
別の新しい生成用ウィンドウを表示します。 これに一致する操作は、XmhComposeMessage() です。
Save Message この生成用ウィンドウをドラフトフォルダにセーブします(“ ドラフト ” という名前のファイルをもっていない場合は、それを作成します)。 この後で生成用ウィンドウを安全にクローズすることができます。 将来的には、ドラフトフォルダをオープンし、メッセージを選択し、 “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 Widgets 文書を参照してください。 テキストを入力するように求められたら必ず、標準のテキスト編集 インターフェースを使用します。 さまざまな制御とメタキーストロークの組合わせが、やや 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 からのメッセージを含みます。 メッセージをクリックすると、メッセージの全体が読めるようにリサイズします。
メッセージシーケンス
mh メッセージシーケンスは、ある名前に対応付けられたメッセージの集合です。 これは、特定のフォルダに固有のものです。 2 つの異なるフォルダが、同じ名前のシーケンスをもつことができます。 すべてのフォルダで、 “all” というシーケンスが事前定義されています。 これは、そのフォルダ中のすべてのメッセージの集合で構成されています( “cur” というシーケンスも通常、すべてのフォルダに対して定義されています。 これは、現在のメッセージだけで構成されています。 xmh は、 “cur” をユーザに隠していますが、その代わり現在の メッセージに “+” を付けています。 また、 xmh は、 “ 見えない ” シーケンスはサポートしないので、 これもユーザに隠されています)。 フォルダに対するメッセージシーケンスは、シーケンス名(“all” も含む)を 含むボタンとして表示されます。 内容表(aka “toc”)は、いつでも 1 つのメッセージシーケンスを 表示しています。 これは、 “ 表示されているシーケンス ” と呼ばれます。 これが “all” でないと、その名前は、フォルダ名のすぐ後のタイトルバーに 表示されます。 また、いつでも、シーケンスボタンのうちの 1 つが強調されます。 これは、 “ 選択されたシーケンス ” と呼ばれます。 なお、表示されているシーケンスと選択されたシーケンスは必ずしも 同じものではないことに注意してください(これは、フォルダボタンが動作する 方法にとてもよく対応しています)。 Open Sequence、Add to Sequence、Remove from Sequence、 および Delete Sequence ボタンは、表示されているフォルダが メッセージシーケンスを含んでいる場合にだけアクティブです。
なお、上記のどれも実際には、メッセージがフォルダの中にあろうと なかろうとメッセージには影響を与えないことに注意してください。 シーケンスは、フォルダ中のメッセージの集合であることを覚えておいて ください。 上記の操作は、どのメッセージがその集合の中にあるかに影響を与えるだけです。 新しいシーケンスを作成するには、 “Pick” ボタンを押してください。 テキストを入力すべきたくさんの場所をもつ新しいウィンドウが表示されます。 基本的には、メッセージの特性に基づいて、メッセージシーケンスの最初の セットを記述することができます。 このように、シーケンスを特定の人物からのまたは特定の題目をもつなどの 最初のすべてのメッセージであると定義することができます。 また、ブール演算子でさまざまなものと接続できるので、題目 “xmh” を もつ、 “weissman” からのすべてのものを選択することができます。 たぶん、レイアウトはかなり明確です。最も単純な事例は、最も簡単です。 適切なフィールドを指し入力するだけです。 複数のフィールドに入力する場合、すべての空でないフィールドに一致する メッセージだけを選択します。 より複雑な事例は、あるフィールドまたは別のフィールドと一致するものを 欲するが、必ずしも両方は必要ない場合に生じます。 これが、すべての “or” ボタンが存在する理由です。 題目 “xmh” または “xterm” をもつすべてのものを希望する場合は、単に “Subject:” フィールドの次に “or” ボタンを押します。 他のボックスが表示されて、別の題目を入力することができます。 “weissman” からのすべてのもの、または題目 “xmh” をもつすべての もののいずれかを希望するけれども、必ずしも両方は必要ない場合、“-Or-” ボタンを選択します。 これは基本的に書式サイズを 2 倍にします。 次に上半分の from: ボックスに “weissman” を入力し、下半分の subject: ボックスに “xmh” を入力することができます。 “Skip” ボタンを選択してある場合は、その行上のフィールドと一致しない メッセージだけが含まれます。 最後に、ウィンドウの一番下の部分にさらにいくつかのボックスが表示されます。 その 1 つは、定義しているシーケンス名です(“Pick” を押した場合は、 選択したシーケンスの名前が、そして、 “all” が、選択したシーケンスの 場合は “temp” がデフォルト名になります)。 別のボックスは、このシーケンスの潜在的なメンバを見つけるための シーケンスを定義します。 これは、 “Pick” が押されると、表示されているシーケンスにデフォルト 設定されます。 さらに 2 つのボックスで、日付範囲を定義します。 その日付範囲内のメッセージだけが考慮されます。 これらの日付は、 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 日のメッセージだけを 得ることになります。 “ 日付フィールド ” は、この日付範囲を見つけるためのヘッダ中の日付 フィールドを指定します。 これはおそらく、誰にも役に立たないでしょう。 定義しているシーケンスがすでに存在している場合、任意に、古いセットを 新しいセットとマージすることができます。 このために、 “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
pick ウィンドウの階層:
(名前のついてないウィジェットは、名前を持ってません。)
topLevelShell xmh
Paned xmh
Label pickTitlebar
Viewport.core pick.clip
Form form
Form
pick ウィンドウの最初の 6 列はまったく同じ構造です。:
Form
Toggle
Toggle
Label
Text
Command
Form
Toggle
Toggle
Text
Text
Command
Form
Command
Viewport.core pick.clip
Form form
From
Form
Label
Text
Label
Text
Form
Label
Text
Label
Text
Label
Text
Form
Label
Toggle
Toggle
Form
Command
Command
アプリケーション特有のリソース
リソースのインスタンスの名前は、小文字で始まりますが、 その他はクラスの名前と同じです。
もし、TocGeometry、ViewGeometry、CompGeometry、PickGeometry が記述されて なければ、Geometry の値が使われます。 もし、高さが記述されてなければ ( 例えば、""、"=500"、"+0-0")、 フォントや行数から計算されたデフォルトの値が使われます。 もし、幅が記述されてなければ ( 例えば、""、"=x300"、"-0+0")、 ディスプレイの幅の半分の幅になります。 もし、記述されてなければ、pick ウィンドウの高さは、 ディスプレイの高さの半分がデフォルトになります。
これらのオプションのどれでも、X ツールキットのリソース記述機構を使うことにより、 コマンドラインから指定できます。 以下の様にすると、xmh は、すべてのメッセージのヘッダを表示します。
% xmh -xrm ’∗HideBoringHeaders:off’
以下のリソースが定義されています。
Banner フォルダや、内容表や、ビューのラベルのデフォルトの短い文字列です。 デフォルトの文字列は、 "xmh MIT X Consortium R4" です。
BlockEventsOnBusy
xmh がコマンドを処理している間に、ユーザからの入力を許さずに ビジーカーソルを表示するかどうかを設定します。 デフォルトは、true です。
BusyCursor
ポインタの位置をあらわすのに使われているシンボルの名前で、 xmh が、時間のかかるコマンドを処理しているときに、 もし、BlockEventsOnBusy が、true なら表示されます。 デフォルトは、"watch" です。
BusyPointerColor
ビジーカーソルのフォアグラウンドカラーです。 デフォルトは、XtDefaultForeground です。
CheckFrequency
何分間にどれだけ新しいメイルのチェックをするか、チェックポイントを作るか、 内容表をスキャンし直すかをあらわします。 もし、CheckNewMail が true なら xmh は、 ある間隔で新しいメイルが着いたかどうかを調べます。 もし、MakeCheckpoints が true なら、5 分間隔でチェックポイントを 設定します。また、内容表は、ファイルシステムの矛盾をチェックされ、 再走査されます。 これらのチェックをすべて止めるには、CheckFrequency を 0 にセットします。
CheckNewMail
true ならば、xmh は、一定の間隔で、新しいメイルがフォルダに 到着したかどうかを調べます。 新しいメイルが到着するのが待たれているなら、視覚的な印が表示されます。 デフォルトは、true です。(BUGS 参照 )。 到着を調べる間隔は、CheckFrequency で調節されます。
CommandButtonCount
メインウィンドウの 内容表と、ビューエリアの間のボタンボックスに 作るコマンドボタンの数です。 xmh は、これらのボタンを button1, button2 といった名前で、 commandBox と言う名前のボックスに作ります。 ユーザは、個人的なリソースファイルに、これらのボタンのラベルとアクションを 記述することができます。アクションの項を見てください。 デフォルトは、0 です。
CompGeometry
コンポジションを含むウィンドウの最初の位置。
Cursor ポインタをあらわすのに使うシンボルの名前。デフォルトは、“left_ptr”です。
DraftsFolder
メッセージドラフトに使われるフォルダ。デフォルトは、“drafts” です。
Geometry
デフォルトの位置。デフォルトは設定されてません。
HideBoringHeaders
“on” であれば、xmh は、メッセージの中に含まれる興味のない ヘッダラインをスキップしようとします。デフォルトは、“on” です。
InitialFolder
起動時にどのフォルダを表示するかを設定します。 コマンドラインのオプション -initial でも設定できます。 デフォルトは、“inbox” です。
InitialIncFile
メイルの入ってくるファイルの名前です。xmh は、“inc -file” コマンドに 使用するために、ファイルの名前を作成しようとします。 しかし、いくつかのインストールでは、ファイルは当てはめられません。 このような場合、InitialIncFile は、空の文字列になり、 -file なしで、inc が実行されるでしょう。 デフォルトでは、環境変数 MAIL の値か、それが設定されてなければ、 環境変数 USER の値が /usr/spool/mail/ のあとに付けられます。
MailPath
ユーザのメイルフォルダの位置のフルパスの頭の部分です。 コマンドラインオプション -path でも設定できます。 デフォルトのパスは、$HOME/.mh_profile の Path の値か、それがなければ、 “$HOME/Mail” になります。
MailWaitingFlag
true であれば、xmh は、新しいメイルが到着するのを待っているときに、 アイコンの中に印を表示しようとします。 もし、このオプションが true なら、CheckNewMail も true であると推測されます。 コマンドラインオプション -flag は、MailWaitingFlag を on にする近道です。
MakeCheckpoints
true ならば、xmh は、不安定な情報のチェックポイントを セーブしようとします。 リソース CheckFrequency によって、チェックの回数を制御できます。
MhPath
MH コマンドを見つけるためのディレクトリ。 もし、コマンドがここで見つからなければ、ユーザのパスを検索します。 デフォルトは、“/usr/local/mh6” です。
PickGeometry
pick ウィンドウの最初の位置です。
PointerColor
ポインタの表示色です。デフォルトは、 XtDefaultForeground です。
PrefixWmAndIconName
ウィンドウやアイコンの名前の前に、"xmh: " を付けるかどうかを設定します。 デフォルトは、true です。
PrintCommand
メッセージを印刷するときに、どのシェルコマンドを実行するかを設定します。 stdout と stderr が、特別にリダイレクトされなければならないのに 注意してください。 もし、印刷されるメッセージや、メッセージの範囲が選択されると、 それぞれのメッセージファイルのフルパスが、印刷するコマンドに追加されます。 デフォルトは、“enscript >/dev/null 2>/dev/null” です。
ReplyInsertFilter
コンポジションウィンドウで、Insert ボタンがアクティブになったときに 実行されるシェルコマンドを設定します。 sh(1) にとおる前に、コマンドの最後にメッセージのフルパスと ファイル名が付け加えられます。 デフォルトのフィルタは、cat です。 例えば、コンポジションに全体のメッセージを挿入する場合。 興味のわくフィルタには、 awk -e ’{print " " $0}’ や <mh directory>/lib/mhl -form mhl.body があります。
ReverseReadOrder
true のとき、次のメッセージが、内容表の現在のメッセージの 前のメッセージになり、前のメッセージが、内容表の現在のメッセージの あとのメッセージになります。 デフォルトは false です。
SendBreakWidth
xmh からメッセージが送られるとき、この値より長い行は、 SendWidth より短い複数に行に分割されます。 この値は、メッセージのヘッダの中に SendBreakWidth: value という形の 付加的な行が挿入されることによって無視される場合があります。 この行は、メッセージが送られる前にヘッダから削除されます。 デフォルトの値は、85 です。
SendWidth
xmh からメッセージが送られるとき、SendBreakWidth より長い行は、 この値より短い複数の行に分割されます。 この値は、メッセージのヘッダの中に SendWidth: value という形の 付加的な行が挿入されることによって無視される場合があります。 この行は、メッセージが送られる前にヘッダから削除されます。 デフォルトの値は、72 です。
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 です。 mhl をよく使う場合は、80 にすると動作が速くなり、残りの 20 文字は 使用されません。
ViewGeometry
メッセージのビューを表示するだけのウィンドウの最初の位置をあらわします。
アクション
xmh が、コマンドの機能に一致する操作の手続きを与え、 アクセレータをインストールするので、 ユーザが個人的なリソースファイルでアクセレータをカスタマイズすることが できます。 xmh は、コマンドメニュの中の項目に一致する操作の手続きを用意します。 これらは、メニュコマンドを記述する項目で与えられます。 カスタマイズされたリソースを記述する例は、clients/xmh/Xmh.sample を 参照してください。 もし、予定されてない操作がイベントやウィジェットにバインドされていると、 断言できない結果が起こります。
コマンドに一致する操作に加えて、これらの操作の手順が定義されています。
XmhPushFolder([foldername, ...])
この操作は、フォルダの名前のスタックに、その引数のそれぞれをプッシュします。 もし、引数が与えられなければ、選択されたフォルダがスタックにプッシュされます。
XmhPopFolder() この操作は、スタックからフォルダの名前を取り出して、 選択されたフォルダにセットします。
XmhPopupFolderMenu()
この操作は、ユーザがフォルダボタンを選択したときに用いられます。 フォルダボタンは、フォルダと、サブフォルダを表示します。 サブフォルダのメニュは、このルーチンによって最初の参照が当てにされます。 もし、サブフォルダがなければ、このルーチンはフォルダがサブフォルダを 持っていないというマークをつけ、メニュが作られません。 この場合、メニュボタンはトグルボタンをエミュレートします。 サブフォルダがあるとき、メニュがポップアップされ、メニュボタンの操作に、 PopupMenu() が使われます。
XmhSetCurrentFolder()
この操作は、メニュボタンがフォルダの選択関数の中で、トグルボタンを エミュレートするのを許します。 この操作は、メニュボタンウィジェットだけで、選択フォルダをセットします。
XmhLeaveFolderButton()
この操作は、ユーザがポインタをメニュボタンウィンドウの外に動かしたとき、 メニュボタンが正確に振る舞うように保証します。
XmhPushSequence([sequencename, ...])
この操作は、シーケンスの名前のスタックにその引数をプッシュします。 もし、引数が与えられなければ、選択されたシーケンスがスタックに プッシュされます。
XmhPopSequence()
この操作は、スタックからシーケンスの名前を取り出して、 それが、選択されたシーケンスになります。
XmhPromptOkayAction()
この操作は、Create Folder ポップアップの中で、okey ボタンを押すのと同じです。
XmhCancelPick() この操作は、pick ウィンドウの中で、cancel ボタンを押すのと同じです。
MH を使ったカスタマイズ
生成用ウィンドウに表示される最初のテキストは、相当する MH コマンドを 実行することによって得られます。すなわち、comp、repl、 forwと、メッセージの構成部品は、それらのコマンドを記述することによって カスタマイズされます。 Comp は、 xmh の実行につき一回だけ 実行され、メッセージのテンプレートは新しい構成が続いて起こるたびに、 再び読み込まれます。
関連ファイル
~/Mail
~/.mh_profile - MH プロファイル
/usr/local/mh6 - MH コマンド
~/Mail/<folder>/.xmhcache - スキャンフォルダ
~/Mail/<folder>/.mh_sequences - シーケンス定義
/tmp - テンポラリファイル
関連事項
X(1), xrdb(1), X Toolkit Intrinsics, Athena Widget Set, mh(1), enscript(1)
バグ
- 表示サポートは最小限度のものです。
- “ 見えない ” メッセージシーケンスを扱わなくてはなりません。
- ユーザが以前に mh を使ったことがなければ、 それ自体で決定しなくてはなりません。 そして、inc を使用せずに、.mh_profile を作るように申し出るべきです。
- まだ提供されていないコマンドがいくつかあります(再命名フォルダ、 再メールメッセージ)。
- MH のバグで、 .mh_sequences の中の文字の数は BUFSIZ に制限されます。 限界になったとき、.mh_sequences ファイルがしばしば不正になり、 シーケンスの定義が失われます。
- アイコンを使用しないで、新しいメイルが着いたことを知らせることは出来ません。
- それが true のときに、新しいメイルを取り込んだあとにビューに現在のメイルを 表示する ShowOnInc というリソースがあるべきです。
- CheckFrequency リソース は、2 つに別れたリソースになるべきです。
- WM_SAVE_YOURSELF プロトコルは無視されます。
- まわりに、他の xmh ウィンドウを持とうとしている間の、最初の 内容表と、ビューの削除の要求のときに、WM_DELETE_WINDOW プロトコルが、 正しく働かない場合があります。
- メッセージにリプライしているときに、注釈をサポートしていません。
権利
Copyright 1988, 1989, Digital Equipment Corporation.
Copyright 1989, Massachusetts Institute of Technology
権利と許可の声明文については、X(1) を参照のこと。
著者
Terry Weissman, Digital Western Research Laboratory
MIT X Consortium の Donna Converse によって修正されました。
NEWS-OSRelease 4.1C