view conf/doc/ja-pick.rf @ 7:c20e4181370f

utf-8 input assumption in case of base64/utf-8
author kono
date Sun, 04 Dec 2005 02:30:39 +0900
parents bce86c4163a3
children
line wrap: on
line source

.\"	@(MHWARNING)
.\"		written by MH-plus project
.SC PICK 1
.NA
pick \- メッセージ内容を検索する
.SY
.ie t \{\
.ta .4i 1.8i
.nf
.in .5i
^pick~^^\0\-cc~^ \%[+folder] \%[msgs] \%[\-help]
^^^\0\-date~^ \%[\-before\ date] \%[\-after\ date] \%[\-datefield\ field]
^^^\0\-from~^
^^^\s+2\b'\(lt\(bv\(bv\(lk\(bv\(bv\(lb'\s0\-search~\s+2\b'\(rt\(bv\(bv\(rk\(bv\(bv\(rb'\s0^ pattern \%[\-and\ ...] \%[\-or\ ...] \%[\-not\ ...] \%[\-lbrace\ ...\ \-rbrace]
^^^\0\-subject~^
^^^\0\-to~^ \%[\-sequence\ name\ ...] \%[\-public] \%[\-nopublic] \%[\-zero] \%[\-nozero]
^^^\0\-\|\-component~^ \%[\-list] \%[\-nolist]
.fi
.re
.in 1i
.\}
.el \{\
.ti .5i
pick
\%[+folder] \%[msgs]
\%[\-and\ ...] \%[\-or\ ...] \%[\-not\ ...] \%[\-lbrace\ ...\ \-rbrace]
\%[\-\|\-component\ pattern]
\%[\-cc\ pattern]
\%[\-date\ pattern]
\%[\-from\ pattern]
\%[\-search\ pattern]
\%[\-subject\ pattern]
\%[\-to\ pattern]
\%[\-after\ date] \%[\-before\ date] \%[\-datefield\ field]
\%[\-sequence\ name\ ...]
\%[\-public] \%[\-nopublic]
\%[\-zero] \%[\-nozero]
\%[\-list] \%[\-nolist]
\%[\-help]
.\}

.ti .5i
典型例:
.br
scan\0`pick\0\-from\0jones`
.br
pick\0\-to\0holloway\0\-sequence\0select
.br
show\0`pick\0\-before\0friday`
.DE
\fIpick\fR はフォルダ内のメッセージから指定した内容を探し、
見つかったメッセージを識別します。
二つのタイプの検索要素が使えます。すなわち、パターンマッチと日付制限です。

パターンマッチには \fIgrep\fR(1) の改変版が使われていて、
`pattern' には正規表現(\fIed\fR(1) 参照)が使えます。
`\-search' オプションと共に使うと、`pattern' は直接使え、
その他のオプションと共に使うと、grep パターンは以下のように解釈されます。

.ti +.5i
\*(lqcomponent[ \\t]*:\&.*pattern\*(rq

この事は、`\-search' オプションで指定されたパターンはメッセージ中の全て、
ヘッダーもボディも検索されますが、その他のパターンマッチは
ヘッダー内の指定のコンポーネントだけが検索される事を意味します。
書式

.ti +.5i
`\-\|\-component\ pattern'

は以下の省略形と考えられます。

.ti +.5i
`\-search \*(lqcomponent[ \\t]*:\&.*pattern\*(rq\ '

\*(lqTo:\*(rq、\*(lqcc:\*(rq、\*(lqDate:\*(rq、\*(lqFrom:\*(rq、
または \*(lqSubject:\*(rq のどれでもないコンポーネントを検索する事も
出来ます。
例えば、`pick\0\-\|\-reply\-to\0pooh' という風にです。

パターンマッチは基本的には行単位で行なわれます。
メッセージのヘッダー内では、
それぞれのコンポーネントは一つの長い行として扱われますが、
ボディではそれぞれの行は分割して扱われます。
検索パターン中の小文字はメッセージ中の大文字にも小文字にもマッチしますが、
大文字は大文字のみにマッチします。
@BEGIN: MIME_HEADERS
また、ヘッダーが RFC\-2047 エンコードされている場合、
検索文字列にデコード後の文字列を指定して、
そのエンコード文字列にマッチさせる事が出来ます。
@END: MIME_HEADERS

`\-date' オプションに対しても(上述の)パターンマッチ処理が行なわれます。
従って、ある日に出されたメッセージを探す場合、パターン文字列は
メッセージの \*(lqDate:\*(rq 行のテキストにマッチしなければなりません。

任意のパターンマッチ処理とは独立に、
`\-after date' または `\-before date' オプションを
全てのメッセージについての日付/時刻制限に使う事が出来ます。
デフォルトでは、\*(lqDate:\*(rq 行が参照されますが、
他に日付に関するヘッダーがある場合は
(\*(lqBB\-Posted:\*(rq や \*(lqDelivery\-Date:\*(rq のようなの)、
`\-datefield\ field' オプションで指定できます。

`\-before' や `\-after' を付けると、
\fIpick\fR は `msgs' で指定されたメッセージそれぞれの日付行を解析し、
指定された日付/時刻と比較します。
`\-after' が指定されると、
\*(lqDate:\*(rq 行の値が指定の日から時間的に後であるメッセージだけが
考慮されます。
`\-before' はその逆です。

`\-after' と `\-before' オプションは共に、
引数として、RFC\-822 形式の日付表記を指定する事が出来ます。
この場合、完全な日付表記は必要なく、
\fIpick\fR は抜けている部分をデフォルトで補います。
これら、デフォルトが使える部分は、
タイムゾーン、時刻とタイムゾーン、日付、日付とタイムゾーンです。
全てのデフォルトは現在の日付、時刻、タイムゾーンです。

RFC\-822 形式の日付に加えて、
\fIpick\fR は任意の曜日
(\*(lqsunday\*(rq、\*(lqmonday\*(rq、など)、
特別な日である
\*(lqtoday\*(rq、\*(lqyesterday\*(rq (24時間前)、
そして \*(lqtomorrow\*(rq (24時間後)を認識します。
全ての曜日は過去の日を意味します
(例えば、火曜日に \fIpick\fR に \*(lqsaturday\*(rq と指定した場合、
それは先週の土曜日の意味であって、今週の土曜日の事ではありません)。

最後に、これら特別な指定に加えて、
\fIpick\fR は \*(lq\-dd\*(rq という形式を認識します。
これの意味は \*(lqdd\*(rq 日前です。

\fIpick\fR は検索指定の際に複雑な論理演算子を認識します。
`\-and'、`\-or'、`\-not'、そして `\-lbrace\ ...\ \-rbrace' オプションです。
例えば、

.ti +.5i
.ie t \{\
pick\0\-after\0yesterday\0\-and\0\-lbrace\0\-from\0freida\0\-or\0\-from\0fear\0\-rbrace
.\}
.el \{\
pick\0\-after\0yesterday\0\-and
.br
.ti +1i
\-lbrace\0\-from\0freida\0\-or\0\-from\0fear\0\-rbrace
.\}

は最近に \*(lqfrieda\*(rq か \*(lqfear\*(rq から送られてきたメッセージを
捜し出します。

それぞれの検索オプションが、`\-not' オプションより優先され、
それは `\-and' より優先され、
それは `\-or' より優先されます。
このデフォルトの優先順位を変えるためには、
`\-lbrace' と `\-rbrace' オプションが使えます。
これらはそれぞれ、論理式に於ける左括弧と右括弧に相当します。

もし検索オプションが何も指定されなかった場合、
指定されたメッセージ
(このデフォルトは \*(lqall\*(rq)
の全てが選択されます。

一旦、検索が終了した時、
`\-list' オプションが指定されていると、
選択されたメッセージのメッセージ番号が改行で区切られて、
標準出力に書き出されます。
これはシェルのバッククォート処理を使って、他の \fIMH\fR プログラムに
素早く引数を与える目的に、極めて有用です。
例えば、コマンド

.ti +.5i
scan\0`pick\0+todo\0\-after\0\*(lq31 Mar 83 0123 PST\*(rq`

は指定のフォルダで、検索により選択されたメッセージだけを
\fIscan\fR します。
\fIpick\fR によるコンテクスト・ファイルの変化は
\fIscan\fR が呼び出される前に書き出される点に注目して下さい。
つまり、\fIscan\fR の方にはフォルダ名を指定する必要がない訳です。

`\-list' オプションによる結果は使わずに、
`\-sequence name' オプションを、ユーザーが定義したいそれぞれのシーケンスに
ついて一つずつ指定しても構いません。
それぞれのシーケンス名は、
\fIpick\fR が選択したメッセージを正確に意味するように定義されます。
例えば、

.ti +.5i
pick\0\-from\0frated\0\-seq\0fred

はカレント・フォルダに \*(lqfred\*(rq という名前の新しいシーケンスを定義し、
それは選び出されたメッセージを正確に含みます。これは例えば、
\*(lqscan fred\*(rq などで利用可能です。さらに、

.ti +.5i
pick\0\-before\0friday\0\-seq\0fred\0fred

と絞り込み等にも利用できます。

\fIpick\fR が `\-sequence\ name' オプションを処理する時は常に
`\-nolist' が指定される事に注意して下さい。

デフォルトでは、\fIpick\fR はシーケンスに追加する前に、
それまでのシーケンスの内容を消します。
この動作は `\-nozero' オプションで抑制されます。
これは \fIpick\fR で選択されたメッセージが指定のシーケンスに追加される
事を意味します。そして、そのシーケンスに含まれていたメッセージはそのまま
残ります。

`\-public' と `\-nopublic' オプションは \fImark\fR 同様の事を
\fIpick\fR に指定します。
.Fi
^$HOME/\&.mh\(ruprofile~^ユーザーのプロファイル
.Pr
^Path:~^ユーザーの MH ディレクトリを決める
.Ps
^Current\-Folder:~^デフォルトのカレント・フォルダを示す
.Sa
mark(1)
.De
`+folder'	デフォルトはカレント・フォルダ
.Ds
`msgs'	デフォルトは all
.Ds
`\-datefield date'
.Ds
`\-nopublic'	フォルダが書き込み禁止の場合。さもなくば、`\-public'
.Ds
`\-zero'
.Ds
`\-list'	`\-sequence' の場合、デフォルト。さもなくば、`\-nolist'
.Co
もしフォルダが指定されれば、それがカレント・フォルダになります。
.Hi
以前のバージョンの \fIMH\fR では、
\fIpick\fR コマンドは選択されたメッセージを
\fIshow\fR、\fIscan\fR、または \fIrefile\fR してました。
オプションにより、これらの動作のどれかが行なわれていた訳ですが、
これは UNIX 的な物の見方に反するような考え方とも言えます。
そこで、\fIpick\fR はシーケンスを定義し、
そのシーケンスを出力するという風に変更されました。
従って、
\fIpick\fR に他の \fIMH\fR コマンドを呼び出すようなオプションを
追加し続ける代わりに、\fIpick\fR を使って、それらのコマンドの引数を
生成する事が出来ます。

また、以前のバージョンの \fIpick\fR は検索文字列や日付/時刻制限を指定しない
場合にはエラーになっていました。
現在のバージョンではそんな事はなく、
単に指定したメッセージの全てにマッチします。
これにより、例えば次のような事が出来ます。

.ti +.5i
show\0`pick\0last:20\0\-seq\0fear`

これは、次の代わりです。

.in +.5i
.nf
mark\0\-add\0\-nozero\0\-seq\0fear\0last:20
show\0fear
.fi
.in -.5i

最後に、
以前のものは、日付の比較の際にタイムゾーンは無視されてましたが、
現在のものはそんな事はないです。
.Hh
シーケンスに含まれているメッセージを並べ挙げるには
\*(lqpick sequence \-list\*(rq を使いましょう
(シェルスクリプトなどで使うような時)。
.Bu
`\-after' と `\-before' に対する引数は、\fIpick\fR を呼び出すシェルにとって
一語として解釈される形でなければなりません。
従って、通常、
これらのオプションに対する引数はダブル・クォートで囲まれなければなりません。
さらに、`\-datefield' オプションは、それが適応される
`\-after' や `\-before' オプションの前に置かれなければなりません。

もし \fIpick\fR が次のようなバッククォート処理を行ない、

.ti +.5i
scan\0`pick\0\-from\0jones`

\fIpick\fR が何もメッセージを選択しなかった場合
(例えば、\*(lqjones\*(rq から来たメッセージがなかった場合)、
シェルはまだ外側のコマンド(例えば \*(lqscan\*(rq)を実行しようとします。

マッチするメッセージがなかったので、
\fIpick\fR は何も出力しません。
そして、\fIpick\fR をバッククォートした結果として、外側のコマンドに
与えられる引数は空になります。
\fIMH\fR プログラムの場合、引数がないと、
外側のプログラムは、あたかもデフォルトの `msg' または `msgs' であるかの
ように振舞います
(例えば \fIscan\fR の場合は \*(lqall\*(rq)。
この期待されない振舞いを避けるためには、
もし `\-list' が指定され、その標準出力が端末でない場合は、
\fIpick\fR は見つからなかった時に不正なメッセージ番号 \*(lq0\*(rq を
出力すべきでしょう。
これにより外側のコマンドがうまく失敗してくれるでしょう。
.sp
正規表現では \*(lq[l-r]\*(rq というパターン文法はサポートされてません。
マッチさせたい全ての文字を角括弧の中に書かなければなりません。
.En