1 .TH MHSHOW %manext1% "February 18, 2014" "%nmhversion%"
6 mhshow \- display MIME messages
21 .RB [ \-serialonly " | " \-noserialonly ]
22 .RB [ \-pause " | " \-nopause ]
29 .RB [ \-check " | " \-nocheck ]
36 command display contents of a MIME (multi-media)
37 message or collection of messages.
40 manipulates multi-media messages as specified in
41 RFC 2045 to RFC 2049. Currently
44 encodings in message bodies, and does not support the encoding of
45 message headers as specified in RFC 2047.
49 will display all parts of a multipart
57 to particular subparts (of a
58 multipart content) and/or particular content types.
65 to use the specified file as
66 the source message, rather than a message from a folder. If you specify
67 this file as \*(lq-\*(rq, then
69 will accept the source message
70 on the standard input. Note that the file, or input from standard input
71 should be a validly formatted message, just like any other
75 be in mail drop format (to convert a file in
76 mail drop format to a folder of
81 A part specification consists of a series of numbers separated by dots.
82 For example, in a multipart content containing three parts, these
83 would be named as 1, 2, and 3, respectively. If part 2 was also a
84 multipart content containing two parts, these would be named as 2.1 and
85 2.2, respectively. Note that the
87 switch is effective for only
88 messages containing a multipart content. If a message has some other
89 kind of content, or if the part is itself another multipart content, the
91 switch will not prevent the content from being acted upon.
93 A content specification consists of a content type and a subtype.
94 The initial list of \*(lqstandard\*(rq content types and subtypes can
97 A list of commonly used contents is briefly reproduced here:
101 .ta \w'application 'u
105 multipart mixed, alternative, digest, parallel
106 message rfc822, partial, external-body
107 application octet-stream, postscript
114 A legal MIME message must contain a subtype specification.
116 To specify a content, regardless of its subtype, just use the
117 name of the content, e.g., \*(lqaudio\*(rq. To specify a specific
118 subtype, separate the two with a slash, e.g., \*(lqaudio/basic\*(rq.
119 Note that regardless of the values given to the `\-type' switch, a
120 multipart content (of any subtype listed above) is always acted upon.
121 Further note that if the `\-type' switch is used, and it is desirable to
122 act on a message/external-body content, then the `\-type' switch must
123 be used twice: once for message/external-body and once for the content
124 externally referenced.
125 .SS "Unseen Sequence"
126 If the profile entry \*(lqUnseen\-Sequence\*(rq is present and
129 will remove each of the messages shown
130 from each sequence named by the profile entry.
131 .SS "Checking the Contents"
136 to check each content for an
137 integrity checksum. If a content has such a checksum (specified as a
138 Content-MD5 header field), then
140 will attempt to verify the
141 integrity of the content.
142 .SS "Showing the Contents"
143 The headers of each message are displayed with the
147 using the standard format file
149 You may specify an alternate format file with the
152 switch. If the format file
154 is specified, then the display
155 of the message headers is suppressed.
157 Next, the contents are extracted from the message and are stored in
158 a temporary file. Usually, the name of the temporary file is the
159 word \*(lqmhshow\*(rq followed by a string of characters. Occasionally,
160 the method used to display a content (described next), requires that
161 the file end in a specific suffix. For example, the
163 command (part of the StarOffice package) can be used to display
164 Microsoft Word content, but it uses the suffix to determine how to display
165 the file. If no suffix is present, the file is not correctly loaded.
166 Similarily, older versions of the
168 command append a \*(lq.ps\*(rq suffix to
169 the filename if one was missing. As a result, these cannot be used to read
170 the default temporary file.
172 To get around this, your profile can contain lines of the form:
175 mhshow-suffix-<type>/<subtype>: <suffix>
181 mhshow-suffix-<type>: <suffix>
184 to specify a suffix which can be automatically added to the temporary
185 file created for a specific content type. For example, the following
186 lines might appear in your profile:
190 mhshow-suffix-text: .txt
191 mhshow-suffix-application/msword: .doc
192 mhshow-suffix-application/PostScript: .ps
196 to automatically append a suffix to the temporary files.
198 The method used to display the different contents in the messages bodies
199 will be determined by a \*(lqdisplay string\*(rq. To find the display
202 will first search your profile for an entry of the form:
205 mhshow-show-<type>/<subtype>
208 to determine the display string. If this isn't found,
210 will search for an entry of the form:
216 to determine the display string.
218 If a display string is found, any escapes (given below) will be expanded.
219 The result will be executed under
220 \*(lq/bin/sh\*(rq, with the standard input
223 The display string may contain the following escapes:
228 %a Insert parameters from Content-Type field
229 %{charset} Insert the charset value from the Content-Type field
230 %e exclusive execution
231 %f Insert filename containing content
232 %F %e, %f, and stdin is terminal not content
233 %l display listing prior to displaying content
234 %p %l, and ask for confirmation
235 %s Insert content subtype
236 %d Insert content description
237 %% Insert the character %
241 For those display strings containing the e- or F-escape,
244 execute at most one of these at any given time. Although the F-escape
245 expands to be the filename containing the content, the e-escape has no
246 expansion as far as the shell is concerned.
248 When the p-escape prompts for confirmation, typing INTR (usually
251 not to display that content.
252 The p-escape can be disabled by specifying the switch
256 is display a content, typing QUIT (usually
257 control-\\) will tell
259 to wrap things up immediately.
261 The {charset} escape is typically used in a command line argument that
262 should only be present if it has a non-null value. Shell parameter
263 expansion can construct the argument only when it is non-null, e.g.,
267 mhshow-show-text/html: charset="%{charset}";
268 w3m ${charset:+-I $charset} -T text/html %F
272 That example also shows the use of indentation to signify continuation:
273 the two text lines combine to form a single entry.
275 Note that if the content being displayed is multipart, but not one of
276 the subtypes listed above, then the f- and F-escapes expand to multiple
277 filenames, one for each subordinate content. Further, stdin is not
278 redirected from the terminal to the content.
280 If a display string is not found,
282 behaves as if these profile entries were supplied and supported:
286 mhshow-show-text/plain: %pmoreproc %F
287 mhshow-show-message/rfc822: %pshow -file %F
291 Note that \*(lqmoreproc\*(rq is not supported in user profile display
294 If a subtype of type text doesn't have a profile entry, it will be
295 treated as text/plain.
298 has default methods for handling multipart messages of subtype
299 mixed, alternative, parallel, and digest. Any unknown subtype of type
300 multipart (without a profile entry), will be treated as multipart/mixed.
302 If none of these apply, then
304 will check to see if the message
305 has an application/octet-stream content with parameter \*(lqtype=tar\*(rq.
308 will use an appropriate command. If not,
312 Example entries might be:
316 mhshow-show-audio/basic: raw2audio 2>/dev/null | play
317 mhshow-show-image: xv %f
318 mhshow-show-application/PostScript: lpr -Pps
322 If an f- or F-escape is not quoted with single quotes, its expansion
323 will be wrapped with single quotes.
327 will process each message serially\0--\0it won't start
328 showing the next message until all the commands executed to display the
329 current message have terminated. In the case of a multipart content
330 (of any subtype listed above), the content contains advice indicating if
331 the parts should be displayed serially or in parallel. Because this may
332 cause confusion, particularly on uni-window displays, the
334 switch can be given to tell
336 to never display parts in parallel.
337 .SS "Showing Alternate Character Sets"
342 then all text/plain parts of the message(s) will be displayed using
343 the character set of the current locale. To convert text parts other
344 than text/plain, or if
348 an external program can be used, as described next.
350 Because a content of type text might be in a non-ASCII character
353 encounters a \*(lqcharset\*(rq parameter for
354 this content, it checks if your terminal can display this character
357 checks this by examining the current character set defined by the
359 environment variables.
360 If the value of the locale character set is equal
361 to the value of the charset parameter, then
364 display this content without any additional setup. If the locale is not
367 will assume a value of \*(lqUS-ASCII\*(rq.
368 If the character set cannot be displayed natively, then
370 will look for an entry of the form:
373 mhshow-charset-<charset>
376 which should contain a command creating an environment to render
377 the character set. This command string should containing a single
378 \*(lq%s\*(rq, which will be filled-in with the command to display the
381 Example entries might be:
384 mhshow-charset-iso-8859-1: xterm -fn '-*-*-medium-r-normal-*-*-120-*-*-c-*-iso8859-*' -e %s
390 mhshow-charset-iso-8859-1: '%s'
393 The first example tells
398 appropriate character set for that message content. The second example
401 that your pager (or other program handling that content
402 type) can handle that character set, and that no special processing is
405 Note that many pagers strip off the high-order bit or have problems
406 displaying text with the high-order bit set. However, the pager
408 has support for single-octet character sets. For example, messages
409 encoded in the ISO-8859-1 character set can be view using
411 with these environment variable settings:
421 The first setting tells
423 to use the ISO-8859-1 definition for
424 determining whether a character is \*(lqnormal\*(rq, \*(lqcontrol\*(lq,
425 or \*(lqbinary\*(rq. The second setting tells
428 if it encounters a file that has non-ASCII characters. Then, simply
434 called automatically. (To handle other single-octet character sets,
437 manual entry for information about the
439 environment variable.)
440 .SS "Messages of Type message/partial"
442 cannot directly display messages of type partial.
443 You must reassemble them first into a normal message using
445 Check the man page for
448 .SS "External Access"
449 For contents of type message/external-body,
451 supports these access-types:
466 For the \*(lqanon-ftp\*(rq and \*(lqftp\*(rq access types,
468 will look for the \*(lqnmh-access-ftp\*(rq
472 nmh-access-ftp: myftp.sh
475 to determine the pathname of a program to perform the FTP retrieval.
477 This program is invoked with these arguments:
481 domain name of FTP-site
487 \*(lqascii\*(rq or \*(lqbinary\*(rq
491 The program should terminate with an exit status of zero if the
492 retrieval is successful, and a non-zero exit status otherwise.
494 For the \*(lqurl\*(rq access\-type,
496 will look for the \*(lqnmh-access-url\*(rq
501 .SS "The Content Cache"
504 encounters an external content containing a
505 \*(lqContent-ID:\*(rq field, and if the content allows caching, then
506 depending on the caching behavior of
508 the content might be read from or written to a cache.
510 The caching behavior of
512 is controlled with the
516 switches, which define the policy for reading from,
517 and writing to, the cache, respectively. One of four policies may be
518 specified: \*(lqpublic\*(rq, indicating that
521 of a publically-accessible content cache; \*(lqprivate\*(rq, indicating
524 should make use of the user's private content cache;
525 \*(lqnever\*(rq, indicating that
527 should never make use of
528 caching; and, \*(lqask\*(rq, indicating that
532 There are two directories where contents may be cached: the profile entry
533 \*(lqnmh-cache\*(rq names a directory containing world-readable contents, and,
534 the profile entry \*(lqnmh-private-cache\*(rq names a directory containing
535 private contents. The former should be an absolute (rooted) directory
544 might be used if you didn't care that the cache got wiped after each
545 reboot of the system. The latter is interpreted relative to the user's
546 nmh directory, if not rooted, e.g.,
549 nmh-private-cache: .cache
552 (which is the default value).
553 .SS "User Environment"
554 Because the display environment in which
556 operates may vary for
559 will look for the environment variable
561 If present, this specifies the name of an additional
562 user profile which should be read. Hence, when a user logs in on a
563 particular display device, this environment variable should be set to
564 refer to a file containing definitions useful for the given display device.
565 Normally, only entries that deal with the methods to display different
566 content type and subtypes
570 mhshow-show-<type>/<subtype>
575 need be present in this additional profile. Finally,
577 will attempt to consult one other additional user profile,
581 %etcdir%/mhn.defaults
584 which is created automatically during
589 looks for all format files and mhn.defaults in multiple locations:
590 absolute pathnames are accessed directly, tilde expansion is done on
591 usernames, and files are searched for in the user's
593 directory as specified in their profile. If not found there, the directory
594 .RI \*(lq %etcdir% \*(rq
599 .ta \w'%etcdir%/ExtraBigFileName 'u
600 ^$HOME/\&.mh\(ruprofile~^The user profile
601 ^$MHSHOW~^Additional profile entries
602 ^%etcdir%/mhn.defaults~^System default MIME profile entries
603 ^%etcdir%/mhl.headers~^The headers template
605 .SH "PROFILE COMPONENTS"
609 .ta \w'ExtraBigProfileName 'u
610 ^Path:~^To determine the user's nmh directory
611 ^Current\-Folder:~^To find the default current folder
612 ^Unseen\-Sequence:~^To name sequences denoting unseen messages
613 ^mhlproc:~^Default program to display message headers
614 ^nmh-access-ftp:~^Program to retrieve contents via FTP
615 ^nmh-access-url:~^Program to retrieve contents via HTTP
616 ^nmh-cache~^Public directory to store cached external contents
617 ^nmh-private-cache~^Personal directory to store cached external contents
618 ^mhshow-charset-<charset>~^Template for environment to render character sets
619 ^mhshow-show-<type>*~^Template for displaying contents
620 ^moreproc:~^Default program to display text/plain content
631 .RB ` +folder "' defaults to the current folder"
632 .RB ` msgs "' defaults to cur"
634 .RB ` \-form\ mhl.headers '
636 .RB ` \-rcache\ ask '
637 .RB ` \-noserialonly '
638 .RB ` \-wcache\ ask '
641 If a folder is given, it will become the current folder. The last
642 message selected will become the current message.