4.3BSD-UWisc/man/catl/pick.l
PICK(1) UNIX Programmer's Manual PICK(1)
NAME
pick - select messages by content
SYNOPSIS
pick [+folder] [msgs] [-and ...] [-or ...] [-not ...]
[-lbrace ... -rbrace] [--component pattern]
[-after date] [-before date] [-datefield field]
[-sequence name ...] [-public] [-nopublic] [-zero]
[-nozero] [-list] [-nolist] [-help]
typically:
scan `pick -from jones`
pick -to holloway -sequence select
show `pick -before friday`
9 _P_i_c_k searches messages within a folder for the specified
contents, and then identifies those messages. Two types of
search primitives are available: pattern matching and date
constraint operations.
A modified _g_r_e_p(1) is used to perform the matching, so the
full regular expression (see _e_d(1)) facility is available
within `pattern'. With `-search', `pattern' is used
directly, and with the others, the grep pattern constructed
is:
"component[ \t]*:.*pattern"
This means that the pattern specified for a `-search' will
be found everywhere in the message, including the header and
the body, while the other pattern matching requests are lim-
ited to the single specified component. The expression
`--component pattern'
is a shorthand for specifying
`-search "component[ \t]*:.*pattern" '
It is used to pick a component which is not one of "To:",
"cc:", "Date:", "From:", or "Subject:". An example is
`pick --reply-to pooh'.
Pattern matching is performed on a per-line basis. Within
the header of the message, each component is treated as one
long line, but in the body, each line is separate.
Lower-case letters in the search pattern will match either
lower or upper case in the message, while upper case will
match only upper case.
Independent of any pattern matching operations requested,
the switches `-after date' or `-before date' may also be
used to introduce date/time contraints on all of the
Printed 1/10/87 MH 1
9
PICK(1) UNIX Programmer's Manual PICK(1)
messages. By default, the "Date:" field is consulted, but
if another date yielding field (such as "BB-Posted:" or
"Delivery-Date:") should be used, the `-datefield field'
switch may be used. _P_i_c_k will actually parse the date
fields in each of the messages specified in `msgs' (unlike
the `-date' switch described above which does a pattern
matching operation), and compare them to the date/time
specified by use of the `-after' and `-before' switches. If
`-after' is given, then only those messages whose "Date:"
field value is chronologically after the date specified will
be considered. The `-before' switch specifies the compli-
mentary action.
Both the `-after' and `-before' switches take legal
822-style date specifications as arguments. _P_i_c_k will
default certain missing fields so that the entire date need
not be specified. These fields are (in order of default-
ing): timezone, time and timezone, date, date and timezone.
All defaults are taken from the current date, time, and
timezone. In addition to 822-style dates, _p_i_c_k will also
recognize any of the days of the week ("sunday", "monday",
and so on), and the special dates "today", "yesterday", and
"tomorrow". All days of the week are judged to refer to a
day in the past (e.g., telling _p_i_c_k "saturday" on a "tues-
day" means "last saturday" not "this saturday"). Finally,
in addition to these special specifications, _p_i_c_k will also
honor a specification of the form "-dd", which means "dd
days ago".
_P_i_c_k supports complex boolean operations on the searching
primitives with the `-and', `-or', `-not', and
`-lbrace ... -rbrace' switches. For example,
pick -after yesterday -and -lbrace -from freida -or -from fear -rbrace
identifies messages recently sent by "frieda" or "fear".
The matching primitives take precedence over the `-not'
switch, which in turn takes precedence over `-and' which in
turn takes precedence over `-or'. To override the default
precedence, the `-lbrace' and `-rbrace' switches are pro-
vided, which act just like opening and closing parentheses
in logical expressions.
Once the search has been performed, if the `-list' switch is
given, the message numbers of the selected messages are
written to the standard output separated by newlines. This
is _e_x_t_r_e_m_e_l_y useful for quickly generating arguments for
other _M_H programs by using the "backquoting" syntax of the
shell. For example, the command
scan `pick +todo -after "31 Mar 83 0123 PST"`
Printed 1/10/87 MH 2
PICK(1) UNIX Programmer's Manual PICK(1)
says to _s_c_a_n those messages in the indicated folder which
meet the appropriate criterion. Note that since _p_i_c_k 's
context changes are written out prior to _s_c_a_n 's invocation,
you need not give the folder argument to _s_c_a_n as well.
Regardless of the operation of the `-list' switch, the
`-sequence name' switch may be given once for each sequence
the user wishes to define. For each sequence named, that
sequence will be defined to mean exactly those messages
selected by _p_i_c_k. For example,
pick -from frated -seq fred
defines a new message sequence for the current folder called
"fred" which contains exactly those messages that were
selected.
Note that whenever _p_i_c_k processes a `-sequence name' switch,
it sets `-nolist'.
By default, _p_i_c_k will zero the sequence before adding it.
This action can be disabled with the `-nozero' switch, which
means that the messages selected by _p_i_c_k will be added to
the sequence, if it already exists, and any messages already
a part of that sequence will remain so.
The `-public' and `-nopublic' switches are used by _p_i_c_k in
the same way _m_a_r_k uses them.
FILES
$HOME/.mh_profile The user profile
PROFILE COMPONENTS
Path: To determine the user's MH directory
Current-Folder: To find the default current folder
SEE ALSO
mark(1)
DEFAULTS
`+folder' defaults to the current folder
`msgs' defaults to all
`-datefield date'
`-nopublic' if the folder is read-only, `-public' otherwise
`-zero'
`-list' is the default if no `-sequence', `-nolist' otherwise
CONTEXT
If a folder is given, it will become the current folder.
HISTORY
In previous versions of _M_H, the _p_i_c_k command would _s_h_o_w,
Printed 1/10/87 MH 3
PICK(1) UNIX Programmer's Manual PICK(1)
_s_c_a_n, or _r_e_f_i_l_e the selected messages. This was rather
"inverted logic" from the UNIX point of view, so _p_i_c_k was
changed to define sequences and output those sequences.
Hence, _p_i_c_k can be used to generate the arguments for all
other _M_H commands, instead of giving _p_i_c_k endless switches
for invoking those commands itself.
Also, previous versions of _p_i_c_k balked if you didn't specify
a search string or a date/time constraint. The current ver-
sion does not, and merely matches the messages you specify.
This lets you type something like:
show `pick last:20 -seq fear`
instead of typing
mark -add -nozero -seq fear last:20
show fear
Finally, timezones used to be ignored when comparing dates:
they aren't any more.
BUGS
The argument to the `-after' and `-before' switches must be
interpreted as a single token by the shell that invokes
_p_i_c_k. Therefore, one must usually place the argument to
this switch inside double-quotes. Furthermore, any occu-
rance of `-datefield' must occur prior to the `-after' or
`-before' switch it applies to.
If _p_i_c_k is used in a back-quoted operation, such as
scan `pick -from jones`
and _p_i_c_k fails (e.g., no messages are from "jones"), then
the shell will still run the outer command (e.g., "scan").
Since no messages were matched, _p_i_c_k produced no output, and
the argument given to the outer command as a result of
backquoting _p_i_c_k is empty. In the case of _M_H programs, the
outer command now acts as if the default `msg' or `msgs'
should be used (e.g., "all" in the case of _s_c_a_n ). To
prevent this unexpected behavior, if `-list' was given, and
if its standard output is not a tty, then _p_i_c_k outputs the
illegal message number "0" when it fails. This lets the
outer command fail gracefully as well.
Printed 1/10/87 MH 4