1 .TH PICK %manext1% "August 3, 2014" "%nmhversion%"
6 pick \- search for messages by content
46 .RB [ \-public " | " \-nopublic ]
47 .RB [ \-zero " | " \-nozero ]
48 .RB [ \-list " | " \-nolist ]
57 scan\0`pick\0\-from\0jones`
58 pick\0\-to\0holloway\0\-sequence\0select
59 show\0`pick\0\-before\0friday`
65 searches within a folder for messages with the specified
66 contents, and then identifies those messages. Two types of search
67 primitives are available: pattern matching and date constraint
72 is used to perform the matching, so the
73 full regular expression (see
81 is used directly, and with the others, the grep pattern constructed is:
84 `component[ \\t]*:\&.*pattern'
87 This means that the pattern specified for a
90 everywhere in the message, including the header and the body, while
91 the other pattern matching requests are limited to the single specified
92 component. The expression
95 `\-\|\-component\ pattern'
98 is a shorthand for specifying
101 `\-search \*(lqcomponent[ \\t]*:\&.*pattern\*(rq\ '
104 It is used to pick a component which is not one of \*(lqTo:\*(rq,
105 \*(lqcc:\*(rq, \*(lqDate:\*(rq, \*(lqFrom:\*(rq, or \*(lqSubject:\*(rq.
107 .RB \*(lq "pick\0\-\|\-reply\-to\0pooh" \*(rq.
109 Pattern matching is performed on a per\-line basis. Within the header
110 of the message, each component is treated as one long line, but in the
111 body, each line is separate. Lower\-case letters in the search pattern
112 will match either lower or upper case in the message, while upper case
113 will match only upper case.
117 switch is a pattern matching operation (as
118 described above), to find messages sent on a certain date the pattern
119 string must match the text of the \*(lqDate:\*(rq field of the message.
121 Independent of any pattern matching operations requested, the switches
127 may also be used to introduce date/time
128 constraints on all of the messages. By default, the \*(lqDate:\*(rq
129 field is consulted, but if another date yielding field (such as
130 \*(lqBB\-Posted:\*(rq or \*(lqDelivery\-Date:\*(rq) should be used, the
140 will actually parse the date
141 fields in each of the messages specified in `msgs' and compare them
142 to the date/time specified. If
144 is given, then only those
145 messages whose \*(lqDate:\*(rq field value is chronologically after the
146 date specified will be considered. The
149 complimentary action.
155 switches take legal RFC 822\-style date
156 specifications as arguments.
158 will default certain missing
159 fields so that the entire date need not be specified. These fields
160 are (in order of defaulting): timezone, time and timezone, date, date
161 and timezone. All defaults are taken from the current date, time,
164 In addition to RFC 822\-style dates,
166 will also recognize any of
167 the days of the week (\*(lqsunday\*(rq, \*(lqmonday\*(rq, and so on),
168 and the special dates \*(lqtoday\*(rq, \*(lqyesterday\*(rq (24 hours
169 ago), and \*(lqtomorrow\*(rq (24 hours from now). All days of the
170 week are judged to refer to a day in the past (e.g., telling \fIpick\fR
171 \*(lqsaturday\*(rq on a \*(lqtuesday\*(rq means \*(lqlast\ saturday\*(rq
172 not \*(lqthis\ saturday\*(rq).
174 Finally, in addition to these special specifications,
177 also honor a specification of the form \*(lq\-dd\*(rq, which means
178 \*(lqdd days ago\*(rq.
181 supports complex boolean operations on the searching primitives
195 pick\0\-after\0yesterday\0\-and
196 \-lbrace\0\-from\0freida\0\-or\0\-from\0fear\0\-rbrace
200 identifies messages recently sent by \*(lqfrieda\*(rq or \*(lqfear\*(rq.
202 The matching primitives take precedence over the
204 switch, which in turn takes precedence over
206 which in turn takes precedence
209 To override the default precedence, the
213 switches are provided, which act just like opening and closing
214 parentheses in logical expressions.
216 If no search criteria are given, all the messages specified on the
217 command line are selected (this defaults to \*(lqall\*(rq).
219 Once the search has been performed, if the
222 message numbers of the selected messages are written to the standard
223 output separated by newlines. This is
226 quickly generating arguments for other
228 programs by using the
229 \*(lqbackquoting\*(rq syntax of the shell. For example, the command
232 scan\0`pick\0+todo\0\-after\0\*(lq31 Mar 83 0123 PST\*(rq`
237 those messages in the indicated folder which meet the
238 appropriate criterion. Note that since
241 are written out prior to
243 invocation, you need not give
244 the folder argument to
251 switch may be given once for each sequence the user wishes to define.
252 For each sequence named, that sequence will be defined to mean exactly
253 those messages selected by
258 pick\0\-from\0frated\0\-seq\0fred
261 defines a new message sequence for the current folder called
262 \*(lqfred\*(rq which contains exactly those messages that were selected.
266 switch will disable all previously named sequences, allowing
267 those established by a profile component to be overridden.
271 will zero a sequence before adding it. This
272 action can be disabled with the
274 switch, which means that the
277 will be added to the sequence, if it
278 already exists, and any messages already a part of that sequence will
294 switch causes pick to output a representation of the search
296 .SS "Output when no messages are matched"
299 is used in a backquoted operation, such as
302 scan\0`pick\0\-from\0jones`
307 selects no messages (e.g., no messages are from
308 \*(lqjones\*(rq), then the shell will still run the outer command (e.g.,
310 Since no messages were matched,
313 no output, and the argument given to the outer command as a result of
316 is empty. In the case of
319 the outer command now acts as if the default `msg' or `msgs' should be
320 used (e.g., \*(lqall\*(rq in the case of
323 unexpected behavior, if
325 was given, and if its standard output is not a tty, then
327 outputs the illegal message number \*(lq0\*(rq
328 when it fails. This lets the outer command fail gracefully as well.
332 .ta \w'%nmhetcdir%/ExtraBigFileName 'u
333 ^$HOME/\&.mh\(ruprofile~^The user profile
335 .SH "PROFILE COMPONENTS"
339 .ta \w'ExtraBigProfileName 'u
340 ^Path:~^To determine the user's nmh directory
341 ^Current\-Folder:~^To find the default current folder
347 .RB ` +folder "' defaults to the current folder"
348 .RB ` msgs "' defaults to all"
349 .RB ` "\-datefield date" '
351 .RB ` \-list "' is the default if no `\-sequence', `\-nolist' otherwise"
354 If a folder is given, it will become the current folder.
356 In previous versions of
365 the selected messages. This was rather
366 \*(lqinverted logic\*(rq from the UNIX point of view, so
368 was changed to define sequences and output those sequences. Hence,
370 can be used to generate the arguments for all other
372 commands, instead of giving
374 endless switches for invoking those commands
377 Also, previous versions of
379 balked if you didn't specify
380 a search string or a date/time constraint. The current version does
381 not, and merely matches the messages you specify. This lets you type
385 show\0`pick\0last:20\0\-seq\0fear`
392 mark\0\-add\0\-nozero\0\-seq\0fear\0last:20
397 Finally, timezones used to be ignored when comparing dates: they aren't
401 .RB \*(lq "pick sequence \-list" \*(rq
402 to enumerate the messages in a sequence
403 (such as for use by a shell script).
407 must occur prior to the
411 switch it applies to.
413 The pattern syntax \*(lq[l-r]\*(rq is not supported; each letter to be
414 matched must be included within the square brackets.