79a4899db299b726c78bacae59555ec66a746687
[mmh] / man / mhshow.man
1 .\"
2 .\" %nmhwarning%
3 .\" $Id$
4 .\"
5 .TH MHSHOW %manext1% "%nmhdate%" MH.6.8 [%nmhversion%]
6 .SH NAME
7 mhshow \- display MIME messages
8 .SH SYNOPSIS
9 .HP 5
10 .B mhshow
11 .RI [ +folder ]
12 .RI [ msgs ]
13 .RB [ \-file
14 .IR file ]
15 .RB [ \-part
16 .IR number ]
17 \&...
18 .RB [ \-type
19 .IR content ]
20 \&...
21 .RB [ \-serialonly " | " \-noserialonly ]
22 .RB [ \-pause " | " \-nopause ]
23 .RB [ \-form
24 .IR formfile ]
25 .RB [ \-rcache
26 .IR policy ]
27 .RB [ \-wcache
28 .IR policy ]
29 .RB [ \-check " | " \-nocheck ]
30 .RB [ \-version ]
31 .RB [ \-help ]
32 .SH DESCRIPTION
33 The
34 .B mhshow
35 command display contents of a MIME (multi-media)
36 message or collection of messages.
37 .PP
38 .B mhshow
39 manipulates multi-media messages as specified in
40 RFC\-2045 thru RFC\-2049.  Currently
41 .B mhshow
42 only supports
43 encodings in message bodies, and does not support the encoding of
44 message headers as specified in RFC\-2047.
45 .PP
46 By default
47 .B mhshow
48 will display all parts of a multipart
49 message.  By using the
50 .B \-part
51 and
52 .B \-type
53 switches, you may
54 limit the scope of
55 .B mhshow
56 to particular subparts (of a
57 multipart content) and/or particular content types.
58 .PP
59 The option
60 .B \-file
61 .I file
62 directs
63 .B mhshow
64 to use the specified file as
65 the source message, rather than a message from a folder.  If you specify
66 this file as \*(lq-\*(rq, then
67 .B mhshow
68 will accept the source message
69 on the standard input.  Note that the file, or input from standard input
70 should be a validly formatted message, just like any other
71 .B nmh
72 message.  It should
73 .B NOT
74 be in mail drop format (to convert a file in
75 mail drop format to a folder of
76 .B nmh
77 messages, see
78 .BR inc (1)).
79 .PP
80 A part specification consists of a series of numbers separated by dots.
81 For example, in a multipart content containing three parts, these
82 would be named as 1, 2, and 3, respectively.  If part 2 was also a
83 multipart content containing two parts, these would be named as 2.1 and
84 2.2, respectively.  Note that the
85 .B \-part
86 switch is effective for only
87 messages containing a multipart content.  If a message has some other
88 kind of content, or if the part is itself another multipart content, the
89 .B \-part
90 switch will not prevent the content from being acted upon.
91 .PP
92 A content specification consists of a content type and a subtype.
93 The initial list of \*(lqstandard\*(rq content types and subtypes can
94 be found in RFC\-2046.
95 .PP
96 A list of commonly used contents is briefly reproduced here:
97 .PP
98 .RS 5
99 .nf
100 .ta \w'application  'u
101 Type    Subtypes
102 ----    --------
103 text    plain, enriched
104 multipart       mixed, alternative, digest, parallel
105 message rfc822, partial, external-body
106 application     octet-stream, postscript
107 image   jpeg, gif, png
108 audio   basic
109 video   mpeg
110 .fi
111 .RE
112 .PP
113 A legal MIME message must contain a subtype specification.
114 .PP
115 To specify a content, regardless of its subtype, just use the
116 name of the content, e.g., \*(lqaudio\*(rq.  To specify a specific
117 subtype, separate the two with a slash, e.g., \*(lqaudio/basic\*(rq.
118 Note that regardless of the values given to the `\-type' switch, a
119 multipart content (of any subtype listed above) is always acted upon.
120 Further note that if the `\-type' switch is used, and it is desirable to
121 act on a message/external-body content, then the `\-type' switch must
122 be used twice: once for message/external-body and once for the content
123 externally referenced.
124 .SS "Unseen Sequence"
125 If the profile entry \*(lqUnseen\-Sequence\*(rq is present and
126 non\-empty, then
127 .B mhshow
128 will remove each of the messages shown
129 from each sequence named by the profile entry.
130 .SS "Checking the Contents"
131 The
132 .B \-check
133 switch tells
134 .B mhshow
135 to check each content for an
136 integrity checksum.  If a content has such a checksum (specified as a
137 Content-MD5 header field), then
138 .B mhshow
139 will attempt to verify the
140 integrity of the content.
141 .SS "Showing the Contents"
142 The headers of each message are displayed with the
143 .I mhlproc
144 (usually
145 .BR mhl ),
146 using the standard format file
147 .IR mhl.headers .
148 You may specify an alternate format file with the
149 .B \-form
150 .I formfile
151 switch.  If the format file
152 .I mhl.null
153 is specified, then the display
154 of the message headers is suppressed.
155 .PP
156 Next, the contents are extracted from the message and are stored in
157 a temporary file.  Usually, the name of the temporary file is the
158 word \*(lqmhshow\*(rq followed by a string of characters.  Occasionally,
159 the method used to display a content (described next), requires that
160 the file end in a specific suffix.  For example, the
161 .B soffice
162 command (part of the StarOffice package) can be used to display
163 Microsoft Word content, but it uses the suffix to determine how to display
164 the file.  If no suffix is present, the file is not correctly loaded.
165 Similarily, older versions of the
166 .B gs
167 command append a \*(lq.ps\*(rq suffix to
168 the filename if one was missing.  As a result, these cannot be used to read
169 the default temporary file.
170 .PP
171 To get around this, your profile can contain lines of the form:
172 .PP
173 .RS 5
174 mhshow-suffix-<type>/<subtype>: <suffix>
175 .RE
176 .PP
177 or
178 .PP
179 .RS 5
180 mhshow-suffix-<type>: <suffix>
181 .RE
182 .PP
183 to specify a suffix which can be automatically added to the temporary
184 file created for a specific content type.  For example, the following
185 lines might appear in your profile:
186 .PP
187 .RS 5
188 .nf
189 mhshow-suffix-text: .txt
190 mhshow-suffix-application/msword: .doc
191 mhshow-suffix-application/PostScript: .ps
192 .fi
193 .RE
194 .PP
195 to automatically append a suffix to the temporary files.
196 .PP
197 The method used to display the different contents in the messages bodies
198 will be determined by a \*(lqdisplay string\*(rq.  To find the display
199 string,
200 .B mhshow
201 will first search your profile for an entry of the form:
202 .PP
203 .RS 5
204 mhshow-show-<type>/<subtype>
205 .RE
206 .PP
207 to determine the display string.  If this isn't found,
208 .B mhshow
209 will search for an entry of the form:
210 .PP
211 .RS 5
212 mhshow-show-<type>
213 .RE
214 .PP
215 to determine the display string.
216 .PP
217 If a display string is found, any escapes (given below) will be expanded.
218 The result will be executed under
219 \*(lq/bin/sh\*(rq, with the standard input
220 set to the content.
221 .PP
222 The display string may contain the following escapes:
223 .PP
224 .RS 5
225 .nf
226 .ta \w'%F  'u
227 %a      Insert parameters from Content-Type field
228 %e      exclusive execution
229 %f      Insert filename containing content
230 %F      %e, %f, and stdin is terminal not content
231 %l      display listing prior to displaying content
232 %p      %l, and ask for confirmation
233 %s      Insert content subtype
234 %d      Insert content description
235 %%      Insert the character %
236 .fi
237 .RE
238 .PP
239 For those display strings containing the e- or F-escape,
240 .B mhshow
241 will
242 execute at most one of these at any given time.  Although the F-escape
243 expands to be the filename containing the content, the e-escape has no
244 expansion as far as the shell is concerned.
245 .PP
246 When the p-escape prompts for confirmation, typing INTR (usually
247 control-C) will tell
248 .B mhshow
249 not to display that content.
250 The p-escape can be disabled by specifying the switch
251 .BR \-nopause .
252 Further, when
253 .B mhshow
254 is display a content, typing QUIT (usually
255 control-\\) will tell
256 .B mhshow
257 to wrap things up immediately.
258 .PP
259 Note that if the content being displayed is multipart, but not one of
260 the subtypes listed above, then the f- and F-escapes expand to multiple
261 filenames, one for each subordinate content.  Further, stdin is not
262 redirected from the terminal to the content.
263 .PP
264 If a display string is not found,
265 .B mhshow
266 has several default values:
267 .PP
268 .RS 5
269 .nf
270 mhshow-show-text/plain: %pmoreproc '%F'
271 mhshow-show-message/rfc822: %pshow -file '%F'
272 .fi
273 .RE
274 .PP
275 If a subtype of type text doesn't have a profile entry, it will be
276 treated as text/plain.
277 .PP
278 .B mhshow
279 has default methods for handling multipart messages of subtype
280 mixed, alternative, parallel, and digest.  Any unknown subtype of type
281 multipart (without a profile entry), will be treated as multipart/mixed.
282 .PP
283 If none of these apply, then
284 .B mhshow
285 will check to see if the message
286 has an application/octet-stream content with parameter \*(lqtype=tar\*(rq.
287 If so,
288 .B mhshow
289 will use an appropriate command.  If not,
290 .B mhshow
291 will complain.
292 .PP
293 Example entries might be:
294 .PP
295 .RS 5
296 .nf
297 mhshow-show-audio/basic: raw2audio 2>/dev/null | play
298 mhshow-show-image: xv '%f'
299 mhshow-show-application/PostScript: lpr -Pps
300 .fi
301 .RE
302 .PP
303 Note that when using the f- or F-escape, it's a good idea to use
304 single-quotes around the escape.  This prevents misinterpretation by
305 the shell of any funny characters that might be present in the filename.
306 .PP
307 Finally,
308 .B mhshow
309 will process each message serially\0--\0it won't start
310 showing the next message until all the commands executed to display the
311 current message have terminated.  In the case of a multipart content
312 (of any subtype listed above), the content contains advice indicating if
313 the parts should be displayed serially or in parallel.  Because this may
314 cause confusion, particularly on uni-window displays, the
315 .B \-serialonly
316 switch can be given to tell
317 .B mhshow
318 to never display parts in parallel.
319 .SS "Showing Alternate Character Sets"
320 Because a content of type text might be in a non-ASCII character
321 set, when
322 .B mhshow
323 encounters a \*(lqcharset\*(rq parameter for
324 this content, it checks if your terminal can display this character
325 set natively.
326 .B mhn
327 checks this by examining the the environment
328 variable
329 .BR $MM_CHARSET .
330 If the value of this environment variable is equal
331 to the value of the charset parameter, then
332 .B mhshow
333 assumes it can
334 display this content without any additional setup.  If this environment
335 variable is not set,
336 .B mhshow
337 will assume a value of \*(lqUS-ASCII\*(rq.
338 If the character set cannot be displayed natively, then
339 .B mhshow
340 will look for an entry of the form:
341 .PP
342 .RS 5
343 mhshow-charset-<charset>
344 .RE
345 .PP
346 which should contain a command creating an environment to render
347 the character set.  This command string should containing a single
348 \*(lq%s\*(rq, which will be filled-in with the command to display the
349 content.
350 .PP
351 Example entries might be:
352 .PP
353 .RS 5
354 mhshow-charset-iso-8859-1: xterm -fn '-*-*-medium-r-normal-*-*-120-*-*-c-*-iso8859-*' -e %s
355 .RE
356 .PP
357 or
358 .PP
359 .RS 5
360 mhshow-charset-iso-8859-1: '%s'
361 .RE
362 .PP
363 The first example tells
364 .B mhshow
365 to start
366 .B xterm
367 and load the
368 appropriate character set for that message content.  The second example
369 tells
370 .B mhshow
371 that your pager (or other program handling that content
372 type) can handle that character set, and that no special processing is
373 needed beforehand.
374 .PP
375 Note that many pagers strip off the high-order bit or have problems
376 displaying text with the high-order bit set.  However, the pager
377 .B less
378 has support for single-octet character sets.  The source
379 to
380 .B less
381 is available on many ftp sites carrying free software.
382 In order to view messages sent in the ISO-8859-1 character set using
383 .BR less ,
384 .PP
385 put these lines in your
386 .I \&.login
387 file:
388 .PP
389 .RS 5
390 .nf
391 setenv LESSCHARSET latin1
392 setenv LESS "-f"
393 .fi
394 .RE
395 .PP
396 The first line tells
397 .B less
398 to use the ISO-8859-1 definition for
399 determining whether a character is \*(lqnormal\*(rq, \*(lqcontrol\*(lq,
400 or \*(lqbinary\*(rq.  The second line tells
401 .B less
402 not to warn you
403 if it encounters a file that has non-ASCII characters.  Then, simply
404 set the
405 .I moreproc
406 profile entry to
407 .BR less ,
408 and it will get
409 called automatically.  (To handle other single-octet character sets,
410 look at the
411 .BR less (1)
412 manual entry for information about the
413 .B $LESSCHARDEF
414 environment variable.)
415 .SS "Messages of Type message/partial"
416 .B mhshow
417 cannot directly display messages of type partial.
418 You must reassemble them first into a normal message using
419 .BR mhstore .
420 Check the man page for
421 .BR mhstore (1)
422 for details.
423 .SS "External Access"
424 For contents of type message/external-body,
425 .B mhshow
426 supports these access-types:
427 .PP
428 .IP \(bu 4
429 afs
430 .IP \(bu 4
431 anon-ftp
432 .IP \(bu 4
433 ftp
434 .IP \(bu 4
435 local-file
436 .IP \(bu 4
437 mail-server
438 .PP
439 For the \*(lqanon-ftp\*(rq and \*(lqftp\*(rq access types,
440 .B mhshow
441 will look for the \*(lqnmh-access-ftp\*(rq
442 profile entry, e.g.,
443 .PP
444 .RS 5
445 nmh-access-ftp: myftp.sh
446 .RE
447 .PP
448 to determine the pathname of a program to perform the FTP retrieval.
449 .PP
450 This program is invoked with these arguments:
451 .PP
452 .RS 5
453 .nf
454 domain name of FTP-site
455 username
456 password
457 remote directory
458 remote filename
459 local filename
460 \*(lqascii\*(rq or \*(lqbinary\*(rq
461 .fi
462 .RE
463 .PP
464 The program should terminate with an exit status of zero if the
465 retrieval is successful, and a non-zero exit status otherwise.
466 .PP
467 If this entry is not provided, then
468 .B mhshow
469 will use a simple
470 built-in FTP client to perform the retrieval.
471 .SS "The Content Cache"
472 When
473 .B mhshow
474 encounters an external content containing a
475 \*(lqContent-ID:\*(rq field, and if the content allows caching, then
476 depending on the caching behavior of
477 .BR mhshow ,
478 the content might be read from or written to a cache.
479 .PP
480 The caching behavior of
481 .B mhshow
482 is controlled with the
483 .B \-rcache
484 and
485 .B \-wcache
486 switches, which define the policy for reading from,
487 and writing to, the cache, respectively.  One of four policies may be
488 specified: \*(lqpublic\*(rq, indicating that
489 .B mhshow
490 should make use
491 of a publically-accessible content cache; \*(lqprivate\*(rq, indicating
492 that
493 .B mhshow
494 should make use of the user's private content cache;
495 \*(lqnever\*(rq, indicating that
496 .B mhshow
497 should never make use of
498 caching; and, \*(lqask\*(rq, indicating that
499 .B mhshow
500 should ask the user.
501 .PP
502 There are two directories where contents may be cached: the profile entry
503 \*(lqnmh-cache\*(rq names a directory containing world-readable contents, and,
504 the profile entry \*(lqnmh-private-cache\*(rq names a directory containing
505 private contents.  The former should be an absolute (rooted) directory
506 name.
507 .PP
508 For example,
509 .PP
510 .RS 5
511 nmh-cache: /tmp
512 .RE
513 .PP
514 might be used if you didn't care that the cache got wiped after each
515 reboot of the system.  The latter is interpreted relative to the user's
516 nmh directory, if not rooted, e.g.,
517 .PP
518 .RS 5
519 nmh-private-cache: .cache
520 .RE
521 .PP
522 (which is the default value).
523 .SS "User Environment"
524 Because the display environment in which
525 .B mhshow
526 operates may vary for
527 different machines,
528 .B mhshow
529 will look for the environment variable
530 .BE $MHSHOW .
531 If present, this specifies the name of an additional
532 user profile which should be read.  Hence, when a user logs in on a
533 particular display device, this environment variable should be set to
534 refer to a file containing definitions useful for the given display device.
535 Normally, only entries that deal with the methods to display different
536 content type and subtypes
537 .PP
538 .RS 5
539 .nf
540 mhshow-show-<type>/<subtype>
541 mhshow-show-<type>
542 .fi
543 .RE
544 .PP
545 need be present in this additional profile. Finally,
546 .B mhshow
547 will attempt to consult one other additional user profile,
548 e.g.,
549 .PP
550 .RS 5
551 %etcdir%/mhn.defaults
552 .RE
553 .PP
554 which is created automatically during
555 .B nmh
556 installation.
557
558 .SH FILES
559 .fc ^ ~
560 .nf
561 .ta \w'/usr/local/nmh/etc/ExtraBigFileName  'u
562 ^$HOME/\&.mh\(ruprofile~^The user profile
563 ^$MHSHOW~^Additional profile entries
564 ^%etcdir%/mhn.defaults~^System default MIME profile entries
565 ^%etcdir%/mhl.headers~^The headers template
566 .fi
567
568 .SH "PROFILE COMPONENTS"
569 .fc ^ ~
570 .nf
571 .ta 2.4i
572 .ta \w'ExtraBigProfileName  'u
573 ^Path:~^To determine the user's nmh directory
574 ^Current\-Folder:~^To find the default current folder
575 ^Unseen\-Sequence:~^To name sequences denoting unseen messages
576 ^mhlproc:~^Default program to display message headers
577 ^nmh-access-ftp:~^Program to retrieve contents via FTP
578 ^nmh-cache~^Public directory to store cached external contents
579 ^nmh-private-cache~^Personal directory to store cached external contents
580 ^mhshow-charset-<charset>~^Template for environment to render character sets
581 ^mhshow-show-<type>*~^Template for displaying contents
582 ^moreproc:~^Default program to display text/plain content
583 .fi
584
585 .SH "SEE ALSO"
586 mhbuild(1), mhl(1), mhlist(1), mhstore(1), sendfiles(1)
587
588 .SH DEFAULTS
589 .nf
590 .RB ` +folder "' defaults to the current folder"
591 .RB ` msgs "' defaults to cur"
592 .RB ` \-nocheck '
593 .RB ` \-form mhl.headers '
594 .RB ` \-pause '
595 .RB ` \-rcache ask '
596 .RB ` \-realsize '
597 .RB ` \-noserialonly '
598 .RB ` \-noverbose '
599 .RB ` \-wcache ask '
600 .fi
601
602 .SH CONTEXT
603 If a folder is given, it will become the current folder.  The last
604 message selected will become the current message.