]> git.marmaro.de Git - mmh/commitdiff
Dropped old show(1) and renamed mhshow(1) to show(1).
authormarkus schnalke <meillo@marmaro.de>
Mon, 30 Apr 2012 14:33:55 +0000 (16:33 +0200)
committermarkus schnalke <meillo@marmaro.de>
Mon, 30 Apr 2012 14:33:55 +0000 (16:33 +0200)
If you do want to display non-MIME messages the old way, you can use:
mhl `mhpath ...`
The choice of renaming was hard to decide because I will introduce confusion
and breaks the interface (mmh broke it already!). I though renamed, because
the new situation is what we actually want: One program to display messages
in a sane way. We used to type `show' and silently got `mhshow' when it
contained non-trivial MIME content. That was a workaround and clearly not
straight-forward. The improve the situation show(1) needed to be dropped.
Because users don't want to type `mhshow', I decided to renamed it to `show'.
Hope I won't introduce too many inconveniences with this decision.

18 files changed:
INSTALL
config/config.c
docs/COMPLETION-BASH
docs/COMPLETION-ZSH
man/Makefile.in
man/mh-profile.man5
man/mh-sequence.man7
man/mhbuild.man1
man/mhlist.man1
man/mhshow.man1 [deleted file]
man/mhstore.man1
man/mmh-intro.man7
man/send.man1
man/show.man1
uip/Makefile.in
uip/mhshow.c
uip/mhshowsbr.c
uip/show.c [deleted file]

diff --git a/INSTALL b/INSTALL
index 78e1390b1109900f2db72d575672034263d446f2..7b375cfe867a49f1e7fd93e57df079af949e5fa0 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -52,7 +52,7 @@ need an ANSI C compiler such as gcc.
 4) Edit the file `mhn.defaults' (installed in the mmh `etc' directory).
 
    This file contains the default profile entries for the mmh commands
-   mhlist/mhstore/mhshow.  The syntax of this file is described in section
+   mhlist/mhstore/show.  The syntax of this file is described in section
    9.4 of the book "MH & xmh: Email for Users and Programmers", 3rd edition,
    by Jerry Peek, on the Internet at
    <http://rand-mh.sourceforge.net/book/mh/confmhn.html>.
index 1caea472e04a8075e1157fea2c6fc0d74214094e..d6677d2cc17710c8d0508877d89dbb3ed90d4734 100644 (file)
@@ -117,7 +117,7 @@ char *listproc = "show -file";
 
 /*
 ** This is used by mhl as a front-end.  It is also used
-** by mhshow as the default method of displaying message bodies
+** by show(1) as the default method of displaying message bodies
 ** or message parts of type text/plain.
 */
 char *defaultpager = "more";
index 28aa29fd27b1c7c243b759d4d606c978d2b16e90..70ac3b2c1f495af82baf8275a7209c92ba386d9c 100644 (file)
@@ -74,10 +74,6 @@ _nmh()
             options=(-sequence -add -delete -list -public -nopublic
                     -zero -nozero -version -help)
             ;;
-        next )
-            options=(-showmimeproc -header -noheader -checkmime
-                    -nocheckmime -version -help)
-            ;;
         packf )
             options=(-file -version -help)
             ;;
@@ -87,10 +83,6 @@ _nmh()
                     -sequence -public -nopublic -zero -nozero -list -nolist
                     -version -help)
             ;;
-        prev )
-            options=(-showproc -showmimeproc -header -noheader -checkmime
-                    -nocheckmime -version -help)
-            ;;
         refile )
             options=(-link -nolink -src -file -version -help)
             ;;
@@ -111,8 +103,9 @@ _nmh()
                     -width -file -version -help )
             ;;
         show )
-            options=(-showproc -showmimeproc -header -noheader
-                    -checkmime -nocheckmime -version -help)
+        next )
+        prev )
+            options=(-file -part -type -form -version -help)
             ;;
         sortm )
             options=(-datefield -textfield -notextfield -limit -nolimit
@@ -157,4 +150,4 @@ _nmh()
     COMPREPLY=( $( compgen -W "${options[*]}" -- $current ) )
     return 0
 }
-[ "$have" ] && complete -F _nmh ali anno burst comp dist flist flists folder folders forw inc mark mhbuild mhl mhlist mhmail mhparam mhpath mhshow mhstore msgchk next packf pick prev prompter rcvdist rcvpack rcvstore refile repl rmf rmm scan send sendfiles show slocal sortm whatnow
+[ "$have" ] && complete -F _nmh ali anno burst comp dist flist flists folder folders forw inc mark mhbuild mhl mhlist mhmail mhparam mhpath mhstore msgchk next packf pick prev prompter rcvdist rcvpack rcvstore refile repl rmf rmm scan send sendfiles show slocal sortm whatnow
index 2b47557b24979eb308a9f0f8972baa0dff87c002..70cc287ebfed4f9fbe0875f55bb68e9d4996c7f1 100644 (file)
@@ -152,10 +152,8 @@ compctl -K mhfseq -x 's[+][@]' -K mhcomp -S / -q - \
   file help width)" - 'c[-1,-file]' -f - 'c[-1,-form]' -K mhfile -- scan
 
 compctl -K mhfseq -x 's[+][@]'  -K mhcomp -S / -q - \
-  's[-]' -k "(draft form moreproc header noheader \
-   showproc width help)" - 'C[-1,-(show|more)proc]' -c - \
-   'c[-1,-file]' -f - 'c[-1,-form]' -K mhfile - \
-   'c[-1,-width]' -s '$COLUMNS' -- show next prev
+  's[-]' -k "(file form part type help)" - \
+   'c[-1,-file]' -f - 'c[-1,-form]' -K mhfile - -- show next prev
 
 compctl -K mhfseq -x 's[+][@]' -K mhcomp -S / -q - 's[-]' \
   -k "(help)" -- rmm
index acd3072a80453cfc1079a09632b178056fe457e1..27d36228edf25511451b5db414ae84aaf0c91488 100644 (file)
@@ -51,7 +51,7 @@ SEDMAN = $(SED) -f man.sed $< > $@
 # man pages to install in $(mandir)/$(manext1)
 MAN1SRC = ali. anno. burst. comp. dist. flist. flists. folder. folders.    \
        forw. inc. mark. mhbuild. mhl. mhlist. mmh. mmhwrap.              \
-       mhmail. mhparam. mhpath. mhshow. mhstore. msgchk. new. fnext.       \
+       mhmail. mhparam. mhpath. mhstore. msgchk. new. fnext.       \
        fprev. unseen. next. packf. pick. prev. prompter. rcvdist. rcvpack. \
        rcvstore. refile. repl. rmf. rmm. scan. send. sendfiles.    \
        show. slocal. sortm. whatnow.
index 083222be145cd6de5f39d298dd6b36c4da199d2d..df825fb539a13e10e7272214960950afa8c943dc 100644 (file)
@@ -102,7 +102,6 @@ Names the sequence or sequences which shall contain any unread messages.
 The commands
 .BR inc ,
 .BR rcvstore ,
-.BR mhshow ,
 and
 .B show
 will add or remove messages from these
@@ -156,7 +155,7 @@ to page the
 .B mhl
 formatted message when displaying to a terminal.  It is also the default
 program used by
-.B mhshow
+.B show
 to display message bodies (or message parts) of type text/plain.
 This profile entry overrides the $PAGER environment variable, but gets
 overridden by the $MMHPAGER environment variable.
@@ -530,7 +529,7 @@ a character set that doesn't match
 .BR $MM_CHARSET .
 This variable is
 checked by
-.B mhshow
+.B show
 for matches against the charset parameter
 of text contents to decide it the text content can be displayed
 without modifications to your terminal.  This variable is checked by
index 1633b076c0b164ac9367b9abf7c402de954cc19d..874f63e07e2263620bd446b3bd90db1e5960f42e 100644 (file)
@@ -231,7 +231,6 @@ The commands
 .BR inc ,
 .BR rcvstore ,
 .BR show ,
-.BR mhshow ,
 and
 .B flist
 honor the sequence.
@@ -253,7 +252,6 @@ be zeroed by
 .PP
 Similarly, whenever
 .BR show ,
-.BR mhshow ,
 .BR next ,
 or
 .B prev
index 9c68f3654cffa3d858e774924f13cbd393af6199..4fa75b529da7c798b07d1387e91cd120928eb8a9 100644 (file)
@@ -532,7 +532,7 @@ line         ::=     "##" text EOL
 .fi
 
 .SH "SEE ALSO"
-mhlist(1), mhshow(1), mhstore(1),
+mhlist(1), show(1), mhstore(1),
 .br
 .I "Proposed Standard for Message Encapsulation"
 (RFC\-934),
index f42498b274ccd637ac415a0fd7f74d8553b452fa..395d838446b0ac077e8db066043c0bad0ab5e7e1 100644 (file)
@@ -147,7 +147,7 @@ multipart content (of any subtype listed above) is always acted upon.
 .fi
 
 .SH "SEE ALSO"
-mhbuild(1), mhshow(1), mhstore(1), sendfiles(1)
+mhbuild(1), show(1), mhstore(1), sendfiles(1)
 
 .SH DEFAULTS
 .nf
diff --git a/man/mhshow.man1 b/man/mhshow.man1
deleted file mode 100644 (file)
index d3326ac..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-.\"
-.\" %nmhwarning%
-.\"
-.TH MHSHOW %manext1% "%nmhdate%" MH.6.8 [%nmhversion%]
-.SH NAME
-mhshow \- display MIME messages
-.SH SYNOPSIS
-.HP 5
-.na
-.B mhshow
-.RI [ +folder ]
-.RI [ msgs ]
-.RB [ \-file
-.IR file ]
-.RB [ \-part
-.IR number ]
-\&...
-.RB [ \-type
-.IR content ]
-\&...
-.RB [ \-form
-.IR formfile ]
-.RB [ \-version ]
-.RB [ \-help ]
-.ad
-.SH DESCRIPTION
-The
-.B mhshow
-command display contents of a MIME (multi-media)
-message or collection of messages.
-.PP
-.B mhshow
-manipulates multi-media messages as specified in
-RFC\-2045 thru RFC\-2049.  Currently
-.B mhshow
-only supports
-encodings in message bodies, and does not support the encoding of
-message headers as specified in RFC\-2047.
-.PP
-By default
-.B mhshow
-will display all parts of a multipart
-message.  By using the
-.B \-part
-and
-.B \-type
-switches, you may
-limit the scope of
-.B mhshow
-to particular subparts (of a
-multipart content) and/or particular content types.
-.PP
-The option
-.B \-file
-.I file
-directs
-.B mhshow
-to use the specified file as
-the source message, rather than a message from a folder.  If you specify
-this file as \*(lq-\*(rq, then
-.B mhshow
-will accept the source message
-on the standard input.  Note that the file, or input from standard input
-should be a validly formatted message, just like any other
-.B nmh
-message.  It should
-.B NOT
-be in mail drop format (to convert a file in
-mail drop format to a folder of
-.B nmh
-messages, see
-.BR inc (1)).
-.PP
-When displaying multiple messages,
-.B mhshow
-prepends each of them with a `>>> Message nnn' header,
-and separates the messages with two lines of space.
-This is similar to the way
-.B mhl
-acts on multiple files.
-.PP
-A part specification consists of a series of numbers separated by dots.
-For example, in a multipart content containing three parts, these
-would be named as 1, 2, and 3, respectively.  If part 2 was also a
-multipart content containing two parts, these would be named as 2.1 and
-2.2, respectively.  Note that the
-.B \-part
-switch is effective for only
-messages containing a multipart content.  If a message has some other
-kind of content, or if the part is itself another multipart content, the
-.B \-part
-switch will not prevent the content from being acted upon.
-.PP
-A content specification consists of a content type and a subtype.
-The initial list of \*(lqstandard\*(rq content types and subtypes can
-be found in RFC\-2046.
-.PP
-A list of commonly used contents is briefly reproduced here:
-.PP
-.RS 5
-.nf
-.ta \w'application  'u
-Type   Subtypes
-----   --------
-text   plain, enriched
-multipart      mixed, alternative, digest, parallel
-message        rfc822, partial, external-body
-application    octet-stream, postscript
-image  jpeg, gif, png
-audio  basic
-video  mpeg
-.fi
-.RE
-.PP
-A legal MIME message must contain a subtype specification.
-.PP
-To specify a content, regardless of its subtype, just use the
-name of the content, e.g., \*(lqaudio\*(rq.  To specify a specific
-subtype, separate the two with a slash, e.g., \*(lqaudio/basic\*(rq.
-Note that regardless of the values given to the `\-type' switch, a
-multipart content (of any subtype listed above) is always acted upon.
-.SS "Unseen Sequence"
-If the profile entry \*(lqUnseen\-Sequence\*(rq is present and
-non\-empty, then
-.B mhshow
-will remove each of the messages shown
-from each sequence named by the profile entry.
-.SS "Showing the Contents"
-.B Mhshow
-prints messages in a convenient representation.
-If
-.B mhshow
-is outputting to a terminal, then
-a pager will be placed between the terminal and
-.BR mhshow .
-.PP
-The headers of each message are displayed with
-.B mhl
-using the standard format file
-.IR mhl.headers .
-You may specify an alternate format file with the
-.B \-form
-.I formfile
-switch.  If the format file
-.I mhl.null
-is specified, then the display
-of the message headers is suppressed.
-.PP
-Next, the contents are extracted from the message and are stored in
-a temporary file.  Usually, the name of the temporary file is the
-word \*(lqmhshow\*(rq followed by a string of characters.  Occasionally,
-the method used to display a content (described next), requires that
-the file end in a specific suffix.  For example, the
-.B soffice
-command (part of the StarOffice package) can be used to display
-Microsoft Word content, but it uses the suffix to determine how to display
-the file.  If no suffix is present, the file is not correctly loaded.
-Similarily, older versions of the
-.B gs
-command append a \*(lq.ps\*(rq suffix to
-the filename if one was missing.  As a result, these cannot be used to read
-the default temporary file.
-.PP
-To get around this, your profile can contain lines of the forms:
-.PP
-.RS 5
-.nf
-mhshow-suffix-<type>/<subtype>: <suffix>
-mhshow-suffix-<type>: <suffix>
-.fi
-.RE
-.PP
-to specify a suffix which can be automatically added to the temporary
-file created for a specific content type.  For example, the following
-lines might appear in your profile:
-.PP
-.RS 5
-.nf
-mhshow-suffix-text: .txt
-mhshow-suffix-application/msword: .doc
-mhshow-suffix-application/PostScript: .ps
-.fi
-.RE
-.PP
-to automatically append a suffix to the temporary files.
-.PP
-The method used to display the different contents in the messages bodies
-will be determined by a \*(lqdisplay string\*(rq.  To find the display
-string,
-.B mhshow
-will first search your profile for an entry of the form:
-.PP
-.RS 5
-mhshow-show-<type>/<subtype>
-.RE
-.PP
-to determine the display string.  If this isn't found,
-.B mhshow
-will search for an entry of the form:
-.PP
-.RS 5
-mhshow-show-<type>
-.RE
-.PP
-to determine the display string.
-.PP
-If a display string is found, any escapes (given below) will be expanded.
-The result will be executed under
-\*(lq/bin/sh\*(rq, with the standard input
-set to the content.
-.PP
-The display string may contain the following escapes:
-.PP
-.RS 5
-.nf
-.ta \w'%F  'u
-%l     Display listing prior to displaying content
-%f     Insert filename containing content
-%F     %f, but stdin is terminal not content
-%a     Insert parameters from Content-Type field
-%s     Insert content subtype
-%c     Insert foreign charset
-%d     Insert content description
-%%     The character %
-.fi
-.RE
-.PP
-.B Mhshow
-processes the MIME parts serially, i.e. the next display process
-is executed after the previous one has terminated.
-.PP
-Further, when
-.B mhshow
-is display a content, typing QUIT (usually
-control-\\) will tell
-.B mhshow
-to wrap things up immediately.
-.PP
-Note that if the content being displayed is multipart, but not one of
-the subtypes listed above, then the f- and F-escapes expand to multiple
-filenames, one for each subordinate content.  Further, stdin is not
-redirected from the terminal to the content.
-.PP
-If a display string is not found,
-.B mhshow
-has the following default values:
-.PP
-.RS 5
-.nf
-mhshow-show-text/plain: %liconv -f <source-charset>
-mhshow-show-message/rfc822: %lshow \-file %F
-.fi
-.RE
-.PP
-If a subtype of type text doesn't have a profile entry, it will be
-treated as text/plain.
-.PP
-.B mhshow
-has default methods for handling multipart messages of subtype
-mixed, alternative, parallel, and digest.  Any unknown subtype of type
-multipart (without a profile entry), will be treated as multipart/mixed.
-.PP
-If none of these apply, then
-.B mhshow
-will complain.
-.PP
-Example entries might be:
-.PP
-.RS 5
-.nf
-mhshow-show-audio/basic: raw2audio 2>/dev/null | play
-mhshow-show-image: xv %f
-mhshow-show-application/PostScript: lpr -Pps
-.fi
-.RE
-.PP
-When expanding %f and %F escapes, the file names get wrapped in
-single-quotes automatically.
-.PP
-Finally,
-.B mhshow
-will process each message serially \- it won't start
-showing the next message until all the commands executed to display the
-current message have terminated.  Although a multipart content may
-contain advice to display the parts in parallel,
-.B mhshow
-will never do so.
-.SS "Showing Alternate Character Sets"
-Because a content of type text might be in a non-ASCII character
-set, when
-.B mhshow
-encounters a \*(lqcharset\*(rq parameter for
-this content, it checks if your terminal can display this character
-set natively.
-.B mhshow
-checks this by first examining the the environment
-variable
-.B $MM_CHARSET
-and if not set, taking the character encoding of the current locale.
-.PP
-If the character set of text/plain cannot be displayed natively, then
-the default display method converts the content automatically by
-piping it through:
-.PP
-.RS 5
-iconv -f '<foreign-charset>'
-.RE
-.PP
-Note that if you have a custom `mhshow-show-*' display string, you
-need to care yourself for converting the encodings.
-(The foreign charset is available through the %c escape.)
-.PP
-The tool
-.B iconv
-needs to be available.
-.PP
-`mhshow-charset-*' profile entries are not supported anymore.
-.SS "Messages of Type message/partial"
-.B mhshow
-cannot directly display messages of type partial.
-You must reassemble them first into a normal message using
-.BR mhstore .
-Check the man page for
-.BR mhstore (1)
-for details.
-.SS "External Access"
-.B Mhshow
-does not automatically retrieve message/external-body parts (anymore),
-but prints the relevant information to enable the user to retrieve
-the files manually.
-.SS "User Environment"
-Because the display environment in which
-.B mhshow
-operates may vary for
-different machines,
-.B mhshow
-will look for the environment variable
-.BR $MHSHOW .
-If present, this specifies the name of an additional
-user profile which should be read.  Hence, when a user logs in on a
-particular display device, this environment variable should be set to
-refer to a file containing definitions useful for the given display device.
-Normally, only entries that deal with the methods to display different
-content type and subtypes
-.PP
-.RS 5
-.nf
-mhshow-show-<type>/<subtype>
-mhshow-show-<type>
-.fi
-.RE
-.PP
-need be present in this additional profile. Finally,
-.B mhshow
-will attempt to consult one other additional user profile,
-e.g.,
-.PP
-.RS 5
-%etcdir%/mhn.defaults
-.RE
-.PP
-which is created automatically during
-.B nmh
-installation.
-
-.SH FILES
-.fc ^ ~
-.nf
-.ta \w'%etcdir%/ExtraBigFileName  'u
-^$HOME/.mmh/profile~^The user profile
-^$MHSHOW~^Additional profile entries
-^%etcdir%/mhn.defaults~^System default MIME profile entries
-^%etcdir%/mhl.headers~^The headers template
-.fi
-
-.SH "PROFILE COMPONENTS"
-.fc ^ ~
-.nf
-.ta 2.4i
-.ta \w'ExtraBigProfileName  'u
-^Path:~^To determine the user's mail storage
-^Current\-Folder:~^To find the default current folder
-^Unseen\-Sequence:~^To name sequences denoting unseen messages
-^mhshow-show-<type>*~^Template for displaying contents
-^Pager:~^Program to use as interactive front\-end
-.fi
-
-.SH "SEE ALSO"
-mhbuild(1), mhl(1), mhlist(1), mhstore(1), sendfiles(1)
-
-.SH DEFAULTS
-.nf
-.RB ` +folder "' defaults to the current folder"
-.RB ` msgs "' defaults to cur"
-.RB ` \-form \ mhl.headers'
-.RB ` \-noverbose '
-.fi
-
-.SH CONTEXT
-If a folder is given, it will become the current folder.  The last
-message selected will become the current message.
index 54495d7494312643e869bcf89f9302833b07e5c5..ea3703771172876eb81f76d9c885e3d56d029002 100644 (file)
@@ -335,7 +335,7 @@ installation.
 .fi
 
 .SH "SEE ALSO"
-mhbuild(1), mhlist(1), mhshow(1), sendfiles(1)
+mhbuild(1), mhlist(1), show(1), sendfiles(1)
 
 .SH DEFAULTS
 .nf
index d2fe715e70040ecb1afcb1ecc9ecd22b32ba5759..8e408e3125463255cc11b81afb870e6720905904 100644 (file)
@@ -198,7 +198,6 @@ commands:
 ^mhmail(1)~^\- send mail (mailx replacement)
 ^mhparam(1)~^\- print mmh profile components
 ^mhpath(1)~^\- print full pathnames of mmh messages and folders
-^mhshow(1)~^\- display MIME messages
 ^mhstore(1)~^\- store contents of MIME messages into files
 ^mmh(1)~^\- initialize the mmh environment
 ^msgchk(1)~^\- check for messages
@@ -217,7 +216,7 @@ commands:
 ^scan(1)~^\- produce a one line per message scan listing
 ^send(1)~^\- send a message
 ^sendfiles(1)~^\- send multiple files and directories in MIME message
-^show(1)~^\- show(display) messages
+^show(1)~^\- display MIME messages
 ^slocal(1)~^\- asynchronously filter and deliver new mail
 ^sortm(1)~^\- sort messages
 ^whatnow(1)~^\- prompting front\-end for send
index a61fc373d7a35a70b0ebf85a86f42ee20b148ab8..ef0695ee8ed2bcb584f1074f85175b386cc9de33 100644 (file)
@@ -50,7 +50,7 @@ The body of each attachment header field is interpreted as a file name,
 and each file named is included as a separate part in the MIME message.
 .PP
 For file names with dot suffixes, the context is scanned for a
-.I mhshow-suffix-
+.I show-suffix-
 entry for that suffix.
 The content-type for the part is taken from that context entry if a match is
 found.
index b46712221fb62e1d8ed399b06646c882be17df94..8e34f714c58358348d42778c9e014f167cafdcf8 100644 (file)
@@ -3,7 +3,7 @@
 .\"
 .TH SHOW %manext1% "%nmhdate%" MH.6.8 [%nmhversion%]
 .SH NAME
-show \- show (display) messages
+show \- display (MIME) messages
 .PP
 next \- show the next message
 .PP
@@ -14,16 +14,16 @@ prev \- show the previous message
 .B show
 .RI [ +folder ]
 .RI [ msgs ]
-.RB [ \-showproc
-.IR program ]
-.RB [ \-showmimeproc
-.IR program ]
-.RB [ \-header " | " \-noheader ]
-.RB [ \-checkmime " | " \-nocheckmime ]
-[switches\ for
-.I showproc
-or
-.IR showmimeproc ]
+.RB [ \-file
+.IR file ]
+.RB [ \-part
+.IR number ]
+\&...
+.RB [ \-type
+.IR content ]
+\&...
+.RB [ \-form
+.IR formfile ]
 .RB [ \-version ]
 .RB [ \-help ]
 .PP
@@ -38,10 +38,21 @@ is equivalent to
 .B show p
 .ad
 
+.SH NOTE
+This (i.e. mmh's) version of
+.B show
+is a modified version of nmh's
+.B mhshow
+program.
+The old (non-MIME)
+.B show
+program was removed from mmh.
+
 .SH DESCRIPTION
-.B Show
-lists each of the specified messages to the standard output
-(typically, the terminal).
+The
+.B show
+command display contents of a MIME (multi-media)
+message or collection of messages.
 .B Next
 and
 .B prev
@@ -50,98 +61,348 @@ perform a
 on the next or previous message in the specified
 (or current) folder, respectively.
 .PP
-By default, text (non-MIME) messages are filtered and displayed by
-the
-.B nmh
-command
-.BR mhl .
-This command will display text
-messages in a nice, uniform format.  It also allows you to configure
-the format of the displayed messages and which headers fields are
-shown.  See the
-.BR mhl (1)
-manual page for the details about this
-command.  Any switches not recognized by
-.B show
-are
-passed along to that program.  To override the default, use the
-.B \-showproc
-.I program
-switch.  For example,
-.B \-showproc
-.I more
-will cause the
-.B more
-program to list the messages with no reformatting.
-.PP
-By default, MIME messages are processed and displayed by the
-.B nmh
-command
-.BR mhshow .
-See the
-.BR mhshow (1)
-manual page for details
-about this command.
-Any switches not recognized
-by
-.B show
-are passed along to that program.  To override this
-default, use the
-.B \-showmimeproc
-.I program
-switch.
-.PP
-Note that,
-.B show
-will invoke the
-.I showmimeproc
-even for textual contents if the message has a MIME-Version header.
+.B show
+manipulates multi-media messages as specified in
+RFC\-2045 thru RFC\-2049.  Currently
+.B show
+only supports
+encodings in message bodies, and does not support the encoding of
+message headers as specified in RFC\-2047.
+.PP
+By default
+.B show
+will display all parts of a multipart
+message.  By using the
+.B \-part
+and
+.B \-type
+switches, you may
+limit the scope of
+.B show
+to particular subparts (of a
+multipart content) and/or particular content types.
 .PP
 The option
-.B \-checkmime
-(set by default) instructs
-.B show
-to check if any of the messages contains a MIME-Version header.
-If so, they are displayed by the
-.IR showmimeproc ,
-else they are displayed by the
-.BR showproc .
-The option
-.B \-nocheckmime
-disables this test and instructs
+.B \-file
+.I file
+directs
 .B show
-to use
-.IR showproc ,
-regardless of whether
-any of the messages are MIME messages.
+to use the specified file as
+the source message, rather than a message from a folder.  If you specify
+this file as \*(lq-\*(rq, then
+.B show
+will accept the source message
+on the standard input.  Note that the file, or input from standard input
+should be a validly formatted message, just like any other
+.B nmh
+message.  It should
+.B NOT
+be in mail drop format (to convert a file in
+mail drop format to a folder of
+.B nmh
+messages, see
+.BR inc (1)).
 .PP
-The
-.B \-header
-switch tells
+When displaying multiple messages,
 .B show
-to display a one\-line
-description of the message being shown.  This description includes
-the folder and the message number.
+prepends each of them with a `>>> Message nnn' header,
+and separates the messages with two lines of space.
+This is similar to the way
+.B mhl
+acts on multiple files.
+.PP
+A part specification consists of a series of numbers separated by dots.
+For example, in a multipart content containing three parts, these
+would be named as 1, 2, and 3, respectively.  If part 2 was also a
+multipart content containing two parts, these would be named as 2.1 and
+2.2, respectively.  Note that the
+.B \-part
+switch is effective for only
+messages containing a multipart content.  If a message has some other
+kind of content, or if the part is itself another multipart content, the
+.B \-part
+switch will not prevent the content from being acted upon.
 .PP
-If no `msgs' are specified, the current message is used.
+A content specification consists of a content type and a subtype.
+The initial list of \*(lqstandard\*(rq content types and subtypes can
+be found in RFC\-2046.
+.PP
+A list of commonly used contents is briefly reproduced here:
+.PP
+.RS 5
+.nf
+.ta \w'application  'u
+Type   Subtypes
+----   --------
+text   plain, enriched
+multipart      mixed, alternative, digest, parallel
+message        rfc822, partial, external-body
+application    octet-stream, postscript
+image  jpeg, gif, png
+audio  basic
+video  mpeg
+.fi
+.RE
 .PP
-If the standard output is a terminal, output will be piped through
-a pager.
-If the standard output is not a terminal, no queries are made, and
-each file is listed with a one\-line header and two lines of
-separation.
+A legal MIME message must contain a subtype specification.
 .PP
+To specify a content, regardless of its subtype, just use the
+name of the content, e.g., \*(lqaudio\*(rq.  To specify a specific
+subtype, separate the two with a slash, e.g., \*(lqaudio/basic\*(rq.
+Note that regardless of the values given to the `\-type' switch, a
+multipart content (of any subtype listed above) is always acted upon.
+.SS "Unseen Sequence"
 If the profile entry \*(lqUnseen\-Sequence\*(rq is present and
 non\-empty, then
 .B show
 will remove each of the messages shown
 from each sequence named by the profile entry.
+.SS "Showing the Contents"
+.B Mhshow
+prints messages in a convenient representation.
+If
+.B show
+is outputting to a terminal, then
+a pager will be placed between the terminal and
+.BR show .
+.PP
+The headers of each message are displayed with
+.B mhl
+using the standard format file
+.IR mhl.headers .
+You may specify an alternate format file with the
+.B \-form
+.I formfile
+switch.  If the format file
+.I mhl.null
+is specified, then the display
+of the message headers is suppressed.
+.PP
+Next, the contents are extracted from the message and are stored in
+a temporary file.  Usually, the name of the temporary file is the
+word \*(lqshow\*(rq followed by a string of characters.  Occasionally,
+the method used to display a content (described next), requires that
+the file end in a specific suffix.  For example, the
+.B soffice
+command (part of the StarOffice package) can be used to display
+Microsoft Word content, but it uses the suffix to determine how to display
+the file.  If no suffix is present, the file is not correctly loaded.
+Similarily, older versions of the
+.B gs
+command append a \*(lq.ps\*(rq suffix to
+the filename if one was missing.  As a result, these cannot be used to read
+the default temporary file.
+.PP
+To get around this, your profile can contain lines of the forms:
+.PP
+.RS 5
+.nf
+mhshow-suffix-<type>/<subtype>: <suffix>
+mhshow-suffix-<type>: <suffix>
+.fi
+.RE
+.PP
+to specify a suffix which can be automatically added to the temporary
+file created for a specific content type.  For example, the following
+lines might appear in your profile:
+.PP
+.RS 5
+.nf
+mhshow-suffix-text: .txt
+mhshow-suffix-application/msword: .doc
+mhshow-suffix-application/PostScript: .ps
+.fi
+.RE
+.PP
+to automatically append a suffix to the temporary files.
+.PP
+The method used to display the different contents in the messages bodies
+will be determined by a \*(lqdisplay string\*(rq.  To find the display
+string,
+.B show
+will first search your profile for an entry of the form:
+.PP
+.RS 5
+mhshow-show-<type>/<subtype>
+.RE
+.PP
+to determine the display string.  If this isn't found,
+.B show
+will search for an entry of the form:
+.PP
+.RS 5
+mhshow-show-<type>
+.RE
+.PP
+to determine the display string.
+.PP
+If a display string is found, any escapes (given below) will be expanded.
+The result will be executed under
+\*(lq/bin/sh\*(rq, with the standard input
+set to the content.
+.PP
+The display string may contain the following escapes:
+.PP
+.RS 5
+.nf
+.ta \w'%F  'u
+%l     Display listing prior to displaying content
+%f     Insert filename containing content
+%F     %f, but stdin is terminal not content
+%a     Insert parameters from Content-Type field
+%s     Insert content subtype
+%c     Insert foreign charset
+%d     Insert content description
+%%     The character %
+.fi
+.RE
+.PP
+.B Mhshow
+processes the MIME parts serially, i.e. the next display process
+is executed after the previous one has terminated.
+.PP
+Further, when
+.B show
+is display a content, typing QUIT (usually
+control-\\) will tell
+.B show
+to wrap things up immediately.
+.PP
+Note that if the content being displayed is multipart, but not one of
+the subtypes listed above, then the f- and F-escapes expand to multiple
+filenames, one for each subordinate content.  Further, stdin is not
+redirected from the terminal to the content.
+.PP
+If a display string is not found,
+.B show
+has the following default values:
+.PP
+.RS 5
+.nf
+mhshow-show-text/plain: %liconv -f <source-charset>
+mhshow-show-message/rfc822: %lshow \-file %F
+.fi
+.RE
+.PP
+If a subtype of type text doesn't have a profile entry, it will be
+treated as text/plain.
+.PP
+.B show
+has default methods for handling multipart messages of subtype
+mixed, alternative, parallel, and digest.  Any unknown subtype of type
+multipart (without a profile entry), will be treated as multipart/mixed.
+.PP
+If none of these apply, then
+.B show
+will complain.
+.PP
+Example entries might be:
+.PP
+.RS 5
+.nf
+mhshow-show-audio/basic: raw2audio 2>/dev/null | play
+mhshow-show-image: xv %f
+mhshow-show-application/PostScript: lpr -Pps
+.fi
+.RE
+.PP
+When expanding %f and %F escapes, the file names get wrapped in
+single-quotes automatically.
+.PP
+Finally,
+.B show
+will process each message serially \- it won't start
+showing the next message until all the commands executed to display the
+current message have terminated.  Although a multipart content may
+contain advice to display the parts in parallel,
+.B show
+will never do so.
+.SS "Showing Alternate Character Sets"
+Because a content of type text might be in a non-ASCII character
+set, when
+.B show
+encounters a \*(lqcharset\*(rq parameter for
+this content, it checks if your terminal can display this character
+set natively.
+.B show
+checks this by first examining the the environment
+variable
+.B $MM_CHARSET
+and if not set, taking the character encoding of the current locale.
+.PP
+If the character set of text/plain cannot be displayed natively, then
+the default display method converts the content automatically by
+piping it through:
+.PP
+.RS 5
+iconv -f '<source-charset>'
+.RE
+.PP
+Note that if you have a custom `mhshow-show-*' display string, you
+need to care yourself for converting the encodings.
+(The foreign charset is available through the %c escape.)
+.PP
+The tool
+.B iconv
+needs to be available.
+.PP
+`mhshow-charset-*' profile entries are not supported anymore.
+.SS "Messages of Type message/partial"
+.B show
+cannot directly display messages of type partial.
+You must reassemble them first into a normal message using
+.BR mhstore .
+Check the man page for
+.BR mhstore (1)
+for details.
+.SS "External Access"
+.B Mhshow
+does not automatically retrieve message/external-body parts (anymore),
+but prints the relevant information to enable the user to retrieve
+the files manually.
+.SS "User Environment"
+Because the display environment in which
+.B show
+operates may vary for
+different machines,
+.B show
+will look for the environment variable
+.BR $MHSHOW .
+If present, this specifies the name of an additional
+user profile which should be read.  Hence, when a user logs in on a
+particular display device, this environment variable should be set to
+refer to a file containing definitions useful for the given display device.
+Normally, only entries that deal with the methods to display different
+content type and subtypes
+.PP
+.RS 5
+.nf
+mhshow-show-<type>/<subtype>
+mhshow-show-<type>
+.fi
+.RE
+.PP
+need be present in this additional profile. Finally,
+.B show
+will attempt to consult one other additional user profile,
+e.g.,
+.PP
+.RS 5
+%etcdir%/mhn.defaults
+.RE
+.PP
+which is created automatically during
+.B nmh
+installation.
 
 .SH FILES
 .fc ^ ~
 .nf
 .ta \w'%etcdir%/ExtraBigFileName  'u
 ^$HOME/.mmh/profile~^The user profile
+^$MHSHOW~^Additional profile entries
+^%etcdir%/mhn.defaults~^System default MIME profile entries
+^%etcdir%/mhl.headers~^The headers template
 .fi
 
 .SH "PROFILE COMPONENTS"
@@ -152,79 +413,26 @@ from each sequence named by the profile entry.
 ^Path:~^To determine the user's mail storage
 ^Current\-Folder:~^To find the default current folder
 ^Unseen\-Sequence:~^To name sequences denoting unseen messages
+^mhshow-show-<type>*~^Template for displaying contents
+^Pager:~^Program to use as interactive front\-end
 .fi
 
 .SH "SEE ALSO"
-mhl(1), mhshow(1), more(1), scan(1)
+mhbuild(1), mhl(1), mhlist(1), mhstore(1), sendfiles(1)
 
 .SH DEFAULTS
 .nf
 .RB ` +folder "' defaults to the current folder"
 .RB ` msgs "' defaults to cur"
-.RB ` \-checkmime '
-.RB ` \-header '
+.RB ` \-form \ mhl.headers'
+.RB ` \-noverbose '
 .fi
 
 .SH CONTEXT
 If a folder is given, it will become the current folder.  The last
-message shown will become the current message.
+message selected will become the current message.
 
 .SH BUGS
-The
-.B \-header
-switch doesn't work when `msgs' expands to more than
-one message.  If the
-.I showproc
-is
-.BR mhl ,
-then this problem can
-be circumvented by referencing the \*(lqmessagename\*(rq field in the
-.B mhl
-format file.
-.PP
-.B Show
-updates the user's context before showing the message.
-Hence
-.B show
-will mark messages as seen prior to the user actually
-seeing them.  This is generally not a problem, unless the user relies
-on the \*(lqunseen\*(rq messages mechanism, and interrupts
-.B show
-while it is showing \*(lqunseen\*(rq messages.
-.PP
-If your
-.I showproc
-is the pager
-.BR more ,
-then avoid running
-.B show
-in the background with only its standard output piped to
-another process, as in
-.PP
-.RS 5
-show | imprint &
-.RE
-.PP
-Due to a bug in
-.BR more ,
-show will go into a \*(lqtty input\*(rq state.
-To avoid this problem, re\-direct
-.BR show 's
-diagnostic output as well.
-For users of
-.BR csh :
-.PP
-.RS 5
-show |& imprint &
-.RE
-.PP
-For users of
-.BR sh :
-.PP
-.RS 5
-show 2>&1 | imprint &
-.RE
-.PP
 .B Next
 and
 .B prev
index 66db1866f12593195731b648cfa16e08ec18559c..6b1469f342792647d86187f2712e3b2c029702b8 100644 (file)
@@ -49,7 +49,7 @@ SETGID_MAIL    = @SETGID_MAIL@
 # commands to build
 CMDS = ali anno burst comp dist flist folder forw mmh mark \
        mhbuild mhl \
-       mhlist mhmail mhparam mhpath mhshow mhstore msgchk new packf pick \
+       mhlist mhmail mhparam mhpath mhstore msgchk new packf pick \
        print-mimetype prompter rcvdist rcvpack rcvstore refile repl rmf \
        rmm scan send sendfiles show slocal sortm spost whatnow
 
@@ -72,7 +72,7 @@ SRCS = ali.c aliasbr.c anno.c ap.c burst.c comp.c \
        msgchk.c new.c packf.c pick.c print-mimetype.sh \
        prompter.c rcvdist.c rcvpack.c rcvstore.c \
        refile.c repl.c rmf.c rmm.c scan.c scansbr.c send.c \
-       sendfiles.sh show.c slocal.c sortm.c spost.c termsbr.c \
+       sendfiles.sh slocal.c sortm.c spost.c termsbr.c \
        whatnow.c whatnowproc.c
 
 # auxiliary files
@@ -152,7 +152,7 @@ mhparam: mhparam.o $(LOCALLIBS)
 mhpath: mhpath.o $(LOCALLIBS)
        $(LINK) mhpath.o $(LINKLIBS)
 
-mhshow: mhshow.o mhparse.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o $(LOCALLIBS)
+show: mhshow.o mhparse.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o $(LOCALLIBS)
        $(LINK) mhshow.o mhparse.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o $(LINKLIBS) $(TERMLIB)
 
 mhstore: mhstore.o mhparse.o mhshowsbr.o mhlistsbr.o mhmisc.o mhfree.o termsbr.o $(LOCALLIBS)
@@ -211,9 +211,6 @@ sendfiles: sendfiles.sh
        cp $(srcdir)/sendfiles.sh sendfiles
        chmod +x sendfiles
 
-show: show.o $(LOCALLIBS)
-       $(LINK) show.o $(LINKLIBS)
-
 slocal: slocal.o $(LOCALLIBS)
        $(LINK) slocal.o $(LINKLIBS)
 
index fa7f256258e932293b9846fa6801d8756de5963b..54aa78d9f051c6cbd75d8fb7c8a95094b4ec7935 100644 (file)
@@ -156,7 +156,7 @@ main(int argc, char **argv)
 
                        case FILESW:
                                if (mode != SHOW) {
-                                       adios(NULL, "Either call mhshow as `%s' or use -file", invo_name);
+                                       adios(NULL, "Either call show as `%s' or use -file", invo_name);
                                }
 
                                if (!(cp = *argp++) || (*cp == '-' && cp[1]))
@@ -191,7 +191,7 @@ main(int argc, char **argv)
                        else
                                folder = getcpy(expandfol(cp));
                } else if (mode != SHOW) {
-                       adios(NULL, "Either call mhshow as `%s' or give message arguments", invo_name);
+                       adios(NULL, "Either call show as `%s' or give message arguments", invo_name);
                } else {
                        app_msgarg(&msgs, cp);
                }
index 13a65e40cdc222934fe963d669a7a46f511c49ec..2a8bbf9269f2b56d5eeff212c2ec9856116ca0b2 100644 (file)
@@ -233,13 +233,13 @@ show_content(CT ct, int alternate)
        CI ci = &ct->c_ctinfo;
 
        /* Check for mhshow-show-type/subtype */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
-                               invo_name, ci->ci_type, ci->ci_subtype);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+                               ci->ci_type, ci->ci_subtype);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
        /* Check for mhshow-show-type */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
@@ -504,13 +504,13 @@ show_text(CT ct, int alternate)
        CI ci = &ct->c_ctinfo;
 
        /* Check for mhshow-show-type/subtype */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
-                       invo_name, ci->ci_type, ci->ci_subtype);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+                       ci->ci_type, ci->ci_subtype);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
        /* Check for mhshow-show-type */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
@@ -545,13 +545,13 @@ show_multi(CT ct, int alternate)
        CI ci = &ct->c_ctinfo;
 
        /* Check for mhshow-show-type/subtype */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
-                       invo_name, ci->ci_type, ci->ci_subtype);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+                       ci->ci_type, ci->ci_subtype);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_multi_aux(ct, alternate, cp);
 
        /* Check for mhshow-show-type */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_multi_aux(ct, alternate, cp);
 
@@ -850,13 +850,13 @@ show_message_rfc822(CT ct, int alternate)
        CI ci = &ct->c_ctinfo;
 
        /* Check for mhshow-show-type/subtype */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
-                               invo_name, ci->ci_type, ci->ci_subtype);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+                               ci->ci_type, ci->ci_subtype);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
        /* Check for mhshow-show-type */
-       snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+       snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
        if ((cp = context_find(buffer)) && *cp != '\0')
                return show_content_aux(ct, alternate, cp, NULL);
 
diff --git a/uip/show.c b/uip/show.c
deleted file mode 100644 (file)
index 34fa826..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-** show.c -- show/list messages
-**
-** This code is Copyright (c) 2002, by the authors of nmh.  See the
-** COPYRIGHT file in the root directory of the nmh distribution for
-** complete copyright information.
-*/
-
-#include <h/mh.h>
-#include <h/mime.h>
-#include <h/utils.h>
-
-static struct swit switches[] = {
-#define CHECKMIMESW  0
-       { "checkmime", 0 },
-#define NOCHECKMIMESW  1
-       { "nocheckmime", 0 },
-#define HEADSW  2
-       { "header", 0 },
-#define NHEADSW  3
-       { "noheader", 0 },
-#define FORMSW  4
-       { "form formfile", 0 },
-#define SHOWSW  5
-       { "showproc program", 0 },
-#define SHOWMIMESW  6
-       { "showmimeproc program", 0 },
-#define FILESW  7
-       { "file file", -4 },  /* interface from whatnow (listproc) */
-#define VERSIONSW  8
-       { "version", 0 },
-#define HELPSW  9
-       { "help", 0 },
-       { NULL, 0 }
-};
-
-/*
-** static prototypes
-*/
-static int is_mime(char *);
-
-#define SHOW  0
-#define NEXT  1
-#define PREV  2
-
-char *showproc = "mhl";
-char *showmimeproc = "mhshow";
-
-int
-main(int argc, char **argv)
-{
-       int headersw = 1, msgp = 0;
-       int checkmime = 1, mime;
-       int vecp = 1, procp = 1, mode = SHOW, msgnum;
-       char *cp, *file = NULL, *folder = NULL, *proc;
-       char buf[BUFSIZ], **argp, **arguments;
-       char *msgs[MAXARGS], *vec[MAXARGS];
-       struct msgs *mp = NULL;
-
-#ifdef LOCALE
-       setlocale(LC_ALL, "");
-#endif
-       invo_name = mhbasename(argv[0]);
-
-       /* read user profile/context */
-       context_read();
-
-       if (!mh_strcasecmp(invo_name, "next")) {
-               mode = NEXT;
-       } else if (!mh_strcasecmp(invo_name, "prev")) {
-               mode = PREV;
-       }
-       arguments = getarguments(invo_name, argc, argv, 1);
-       argp = arguments;
-
-       while ((cp = *argp++)) {
-               if (*cp == '-') {
-                       switch (smatch(++cp, switches)) {
-                       case AMBIGSW:
-                               ambigsw(cp, switches);
-                               done(1);
-                       case UNKWNSW:
-                               vec[vecp++] = --cp;
-                               continue;
-
-                       case HELPSW:
-                               snprintf(buf, sizeof(buf), "%s [+folder] %s[switches] [switches for showproc]", invo_name, mode == SHOW ? "[msgs] ": "");
-                               print_help(buf, switches, 1);
-                               done(1);
-                       case VERSIONSW:
-                               print_version(invo_name);
-                               done(1);
-
-                       case FILESW:
-                               if (mode != SHOW)
-usage:
-                                       adios(NULL, "usage: %s [+folder] [switches] [switches for showproc]", invo_name);
-
-                               if (file)
-                                       adios(NULL, "only one file at a time!");
-                               if (!(cp = *argp++) || *cp == '-')
-                                       adios(NULL, "missing argument to %s", argp[-2]);
-                               file = getcpy(expanddir(cp));
-                               continue;
-
-                       case HEADSW:
-                               headersw++;
-                               continue;
-                       case NHEADSW:
-                               headersw = 0;
-                               continue;
-
-                       case FORMSW:
-                               vec[vecp++] = --cp;
-                               if (!(cp = *argp++) || *cp == '-')
-                                       adios(NULL, "missing argument to %s",
-                                                       argp[-2]);
-                               vec[vecp++] = getcpy(etcpath(cp));
-                               continue;
-
-                       case SHOWSW:
-                               if (!(showproc = *argp++) || *showproc == '-')
-                                       adios(NULL, "missing argument to %s",
-                                                       argp[-2]);
-                               continue;
-
-                       case SHOWMIMESW:
-                               if (!(showmimeproc = *argp++) ||
-                                               *showmimeproc == '-')
-                                       adios(NULL, "missing argument to %s",
-                                                       argp[-2]);
-                               continue;
-                       case CHECKMIMESW:
-                               checkmime++;
-                               continue;
-                       case NOCHECKMIMESW:
-                               checkmime = 0;
-                               continue;
-                       }
-               }
-               if (*cp == '+' || *cp == '@') {
-                       if (folder)
-                               adios(NULL, "only one folder at a time!");
-                       else
-                               folder = getcpy(expandfol(cp));
-               } else if (mode != SHOW) {
-                       goto usage;
-               } else {
-                       msgs[msgp++] = cp;
-               }
-       }
-       procp = vecp;
-
-       if (file) {
-               if (msgp)
-                       adios(NULL, "only one file at a time!");
-               vec[vecp++] = file;
-               goto go_to_it;
-       }
-
-       if (!msgp) {
-               switch (mode) {
-               case NEXT:
-                       msgs[msgp++] = seq_next;
-                       break;
-               case PREV:
-                       msgs[msgp++] = seq_prev;
-                       break;
-               default:
-                       msgs[msgp++] = seq_cur;
-                       break;
-               }
-       }
-
-       if (!folder)
-               folder = getcurfol();
-
-       /* read folder and create message structure */
-       if (!(mp = folder_read(folder)))
-               adios(NULL, "unable to read folder %s", folder);
-
-       /* check for empty folder */
-       if (mp->nummsg == 0)
-               adios(NULL, "no messages in %s", folder);
-
-       /* parse all the message ranges/sequences and set SELECTED */
-       for (msgnum = 0; msgnum < msgp; msgnum++)
-               if (!m_convert(mp, msgs[msgnum]))
-                       done(1);
-
-       /*
-       ** Set the SELECT_UNSEEN bit for all the SELECTED messages,
-       ** since we will use that as a tag to know which messages
-       ** to remove from the "unseen" sequence.
-       */
-       for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
-               if (is_selected(mp, msgnum))
-                       set_unseen(mp, msgnum);
-
-       seq_setprev(mp);  /* set the Previous-Sequence */
-       seq_setunseen(mp, 0);  /* unset unseen seqs for shown msgs */
-
-       if (mp->numsel > MAXARGS - 2)
-               adios(NULL, "more than %d messages for show exec",
-                               MAXARGS - 2);
-
-       for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
-               if (is_selected(mp, msgnum))
-                       vec[vecp++] = getcpy(m_name(msgnum));
-
-       seq_setcur(mp, mp->hghsel);  /* update current message  */
-       seq_save(mp);  /* synchronize sequences   */
-       context_replace(curfolder, folder);  /* update current folder   */
-       context_save();  /* save the context file   */
-
-       if (headersw && vecp == 2)
-               printf("(Message %s:%s)\n", folder, vec[1]);
-
-go_to_it: ;
-       fflush(stdout);
-
-       vec[vecp] = NULL;
-
-       /*
-       ** Decide which "proc" to use
-       */
-       mime = 0;
-       /* check if any messages are non-text MIME messages */
-       if (checkmime) {
-               if (file) {
-                       if (is_mime(vec[vecp - 1])) {
-                               mime = 1;
-                       }
-               } else {
-                       for (msgnum = mp->lowsel; msgnum <= mp->hghsel;
-                                       msgnum++) {
-                               if (!is_selected(mp, msgnum)) {
-                                       continue;
-                               }
-                               snprintf(buf, sizeof buf, "%s/%d",
-                                               toabsdir(folder), msgnum);
-                               if (is_mime(buf)) {
-                                       mime = 1;
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       /* Set the "proc" */
-       proc = (mime) ? showmimeproc : showproc;
-
-       /* Special-cased because mhshow takes msg not files args. */
-       if (strcmp(mhbasename(proc), "mhshow")==0) {
-               if (file) {
-                       vec[vecp] = vec[vecp - 1];
-                       vec[vecp - 1] = "-file";
-                       vec[++vecp] = NULL;
-               }
-               vec[vecp++] = concat("+", folder, NULL);
-               vec[vecp] = NULL;
-               vec[0] = mhbasename(proc);
-               execvp(proc, vec);
-               adios(proc, "unable to exec");
-       }
-
-       /* Add the path to the message names. */
-       if (!file) {
-               for (msgnum = procp; msgnum < vecp; msgnum++) {
-                       vec[msgnum] = concat(mp->foldpath, "/",
-                                       vec[msgnum], NULL);
-               }
-       }
-
-       vec[0] = mhbasename(proc);
-       execvp(proc, vec);
-       adios(proc, "unable to exec");
-       return 0;  /* dead code to satisfy the compiler */
-}
-
-/*
-** Check if a message or file contains MIME.
-*/
-static int
-is_mime(char *msgnam)
-{
-       int state = FLD;
-       char buf[BUFSIZ], name[NAMESZ];
-       FILE *fp;
-
-       if ((fp = fopen(msgnam, "r")) == NULL)
-               return 0;
-
-       while (1) {
-               switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) {
-               case FLD:
-               case FLDPLUS:
-               case FLDEOF:
-                       /* Does it have a Mime-Version header? */
-                       if (mh_strcasecmp(name, VRSN_FIELD)==0) {
-                               fclose(fp);
-                               return 1;
-                       }
-
-                       /* else skip the rest of this header field and go on */
-                       while (state == FLDPLUS) {
-                               state = m_getfld(state, name, buf, sizeof(buf),
-                                               fp);
-                       }
-                       break;
-
-               default:
-                       /* We've passed the header, so message is just text */
-                       fclose(fp);
-                       return 0;
-               }
-       }
-}