Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pick(n) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

 

名称

pick − 内容によってメッセージを選択する

形式

^pick~^^ −cc~^ ­[+folder] ­[msgs] ­[−help]
^^^ −date~^ ­[−before date] ­[−after date] ­[−datefield field]
^^^ −from~^
^^^
⎧
│
│
⎨
│
│
⎩
−search~
⎫
│
│
⎬
│
│
⎭
^ pattern ­[−and ...] ­[−or ...] ­[−not ...] ­[−lbrace ... −rbrace]
^^^ −subject~^
^^^ −to~^ ­[−sequence name ...] ­[−public] ­[−nopublic] ­[−zero] ­[−nozero]
^^^ −−component~^ ­[−list] ­[−nolist]

 

通常:
scan ‘pick −from jones‘
pick −to holloway −sequence select
show ‘pick −before friday‘

解説

pick コマンドは、フォルダ中のメッセージを指定された内容によって検索し、 確認するコマンドです。2種類の検索法があります。 1つはパターンマッチングで、もう 1つは日付の限定によるものです。
 
マッチングのために、改良された grep(1) コマンドが使用され、 そのために全ての正規表現(ed(1) 参照)が ‘pattern’ 中で使用できます。 ‘−search’ を指定すると ‘pattern’ が直接使用され、 そうでなければ grep パターンが次のように作成されます。
 

“component[ \t]∗:.∗pattern”
 
これは、指定された 1つのコンポーネントについて、 他のパターンマッチング要求が制限され、 ‘−search’ に指定されたパターンがメッセージ中の全ての領域 (ヘッダ、本文を含む)で検索されることを意味します。 その表現法は、
 

‘−−component pattern’
 
で、
 

‘−search “component[ \t]∗:.∗pattern” ’
 
の省略形です。
 
これは、“To:”、あるいは “cc:”、“Date:”、 “From:”、“Subject:” 以外の コンポーネントを選び出すために使われます。 たとえば、‘pick −−reply−to pooh’ です。
 
パターンマッチングは、1行ごとに行なわれます。 ヘッダのメッセージ中では、 それぞれのコンポーネントが 1つの長い行として扱われますが、 本文中ではそれぞれの行が 1行ずつに分けて扱われます。 検索パターン中の小文字は、 メッセージ中の大文字と小文字の両方にマッチしますが、 大文字は大文字とだけしかマッチしません。
 
どのようなパターンマッチング操作要求されたかにかかわらず、 ‘−after date’ と ‘−before date’ スイッチを与えて、 全てのメッセージに対して日付/時刻による排除を差入れることができます。 デフォルトで “Date:” フィールドが検索されますが、 他の日付から生じるフィールド(例えば “BB−Posted” や  “Deliverly−Date”)に対して行ないたいときは、 ‘−datefield field’ スイッチを使います。 pick コマンドは実際、メッセージ ‘msgs’ で指定された 各メッセージ中の日付フィールドを解釈し (上記の ‘−date’ スイッチとは異なり、パターンマッチング操作をします)、 ‘−after’ あるいは ‘−before’ スイッチの使用によって指定された 日付/時刻と比較をします。 ‘−after’ スイッチが与えられた場合、指定された日付より 後の “Date:” フィールド値を持つメッセージのみが対象になります。 ‘−before’ スイッチも、日付の前後についてを除いて同様の動作をします。
 
‘−after date’ と ‘−before date’ スイッチは、 公式の 882 形式の日付指定を引数として受け取ります。 コマンドはいくつかの記載がないフィールドに対してデフォルトを行いますから、 全ての日付を指定する必要はありません。 デフォルトの行なわれるフィールドは(デフォルトを行う順で)、 タイムゾーン、時刻とタイムゾーン、日付、日付とタイムゾーンです。 すべてのデフォルト値は、カレント時刻、および日付、タイムゾーンから得ます。 公式の 882 形式の日付以外に、pickは “sunday” や  “monday” などの曜日や、 “today” や “tommorow” などの特別な日付を認識します。 ここで使われる全ての曜日は過日のものです (火曜日に pick “sunday” を行なった場合の日曜日とは、 この間の日曜日であって、次にくる日曜日のことではありません)。 最後にまた、pick は “−dd” という形式を識別します。 これは、“dd 日前”という意味です。
 
pick は、‘−and’、および ‘−not’、‘−lbrace ... −rbrace’ スイッチによって、検索プリミティブにおいて 複雑なブールオペレーションをサポートします。例えば、
 

pick −after yesterday −and −lbrace −from freida −or −from fear −rbrace
 
は、“frieda” あるいは “fear” から 最後に送られたメッセージを識別します。
 
マッチングプリミティブは、‘−or’、‘−and’、‘−not’ の 順で優先順位を扱います。 このデフォルトの順位を変更するためには、 ‘−lbrace ... −rbrace’ スイッチを使用します。 これは、論理式中での開きカッコ、あるいは閉じカッコと同様に作用します。
 
検索が完了すると、‘−list’ スイッチが指定されていれば、 選択されたメッセージのメッセージ番号がニューラインで分けられ、 標準出力に書き込まれます。 このオプションは、シェルのバッククォーティング規則を使い、 他の MH プログラムの引数を手早く生成したいときに、特に有用です。 例えば、
 

scan ‘pick +todo −after “31 Mar 83 0123 PST”‘
 
は、scan に対し、指定されたフォルダ中の、 判定基準に適合するメッセージをスキャンするよう指示します。 pick のコンテクストの変更は scan の起動よりも先に出力されるので、 scan コマンドに対してさらにフォルダ引数を与える必要はありません。
 
‘−list’ スイッチ操作の有無にかかわらず、 ユーザが定義を希望するときには、 ‘−sequence name’ スイッチを各シーケンスについて指定することができます。 指定されたシーケンスは、 それぞれ pick によって選択されたメッセージと全く同じように定義されます。 例えば、
 

pick −from frated −seq fred
 
は、選択されたメッセージを含むカレントフォルダ “fred” に、 新しいメッセージシーケンスを定義します。
 
pick が ‘−sequence name’ スイッチを処理する時には常に、 ‘−nolist’ スイッチをセットするので注意してください。
 
デフォルトで、pick はメッセージの追加の前に シーケンスをゼロにします。 この動作は、‘−nozero’ スイッチを指定することによって抑制できます。 この結果、既存のシーケンスがあれば、 pick によって選択されたメッセージはシーケンスに付加され、 シーケンス中の既存のメッセージはそのまま保存されます。
 
‘−public’ と ‘−nopublic’ スイッチは、pick によって、 mark コマンドと同じように使用されます。

関連ファイル

^$HOME/.mh_profileユーザプロファイル

プロファイルコンポーネント

^Path:ユーザの MH ディレクトリ ^Current−Folder: デフォルトのカレントフォルダ

デフォルト値

‘+folder’ カレントフォルダ

‘msgs’ 全て

‘−datefield date’

‘−nopublic’ フォルダがリードオンリーのとき。それ以外は ‘−public’

‘−zero’

‘−list’ ‘−sequence’ の指定がない場合。それ以外は ‘−nolist’

コンテクスト

フォルダが指定された場合、そのフォルダが以後のカレントフォルダになります。

歴史

以前のバージョンの MH では、 pick は選択されたメッセージについて表示(show)、 スキャン(scan)、リファイル(refile)を行なっていました。 しかしこれは UNIX の見地からはむしろ非論理的でした。 従って、pick はシーケンスを定義し、 それを出力するように変更されました。 したがって、新しい pick では、 pick に対して pick が起動する他の MH コマンド のスイッチを際限なく指定する代わりに、 MH コマンド用の引数を生成するように使用できます。
 
また、以前のバージョンでは、検索文字列や日付/時刻制限を指定しないと、 pick は中止されました。 新しいバージョンでは中止されず、 指定されたメッセージがマッチングされるだけです。 よって、
 

mark −add −nozero −seq fear last:20 show fear
 
とタイプする代わりに、
 

show ‘pick last:20 −seq fear‘

 
とすればよくなりました。
 
また、日付を比較するときにタイムゾーンは無視されていましたが、 これは変更されました。

バグ

‘−after date’ と ‘−before date’ スイッチに対する引数は、 コマンドが実行されるシェルによって 1つのトークンとして解釈されなければなりません。 従って、通常これらのスイッチはダブルクォーテンションマークの 内側に置かれます。 従って、通常これらの引数は、ダブルクォーテンションマークの 内側に置かねばなりません。 また、‘−datefield’ スイッチは ‘−after date’ や ‘−before date’ スイッチの 前に置かれなければなりません。
 
コマンドがバッククォート操作、例えば、
 

scan ‘pick −from jones‘
 
のように用いられた場合、コマンドは失敗します (“jones” からメッセージが得られません)。 シェルは他の外部コマンド、例えば “scan” を実行します。 マッチするメッセージがないと、pick は何も出力せず、 バッククォーティングした pick の結果として 空が引数として外部コマンドに渡されます。 MH プログラムの場合には、 外部コマンドはあたかもデフォルトの ‘msg’ や ‘msgs’ が用いられたように 動作します(たとえば scan コマンドにおける “all” のようにです)。このような思わしくない動作を防止するためには、 ‘−list’ を指定し、かつ標準出力を tty 以外にします。 こうすれば、コマンドは不成功の場合、 不正メッセージ番号 “0” を出力します。 その後の外部コマンドも自動的に不成功となります。

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026