Mailcap selectively applying settings

Cameron Simpson cs at cskk.id.au
Fri May 13 23:42:27 UTC 2022


Slow to respond here.

Mutt's MIME handling stuff has a long section in the manual here:
http://www.mutt.org/doc/manual/#mimesupport
with the mailcap section commencing here:
http://www.mutt.org/doc/manual/#mailcap

In particular see the stuff about "copiousoutput" and the pager.

On 12May2022 15:38, Christopher Conforti <christopher at conforti.xyz> wrote:
>Hi list, I'm having a bit of a weird one, at least for me. I can't get mutt to
>read my entire mailcap file properly, it seems. For example, I have the
>following line in my mailcap:
>
>images/*;	eog %s

I'm surprised; image MIME types are normally "image/*", not "images/*".

>It handles this just fine; all image attachments are opened with eog. However,
>another line:
>
>text/html	lynx -dump %s | more
>
>is seemingly ignored, even when there are no other options given for handling
>HTML.

I was going to explain that this is interactive and thus not chosen. But 
I see that this is _exactly_ the example in the manual in the MIME 
section :-(

The section on Reading Mail has a part on the pager:
http://www.mutt.org/doc/manual/#pager-menu
which says that by default it uses its builtin pager. That means it 
cannot use an interactive programme unless you configure $pager:
http://www.mutt.org/doc/manual/#pager

But that is for the message as a whole, after conversion to plain text.

You're trying to configure how mutt presents HTML inline in the message 
body. Because that is paged (either with the builtin pager or via an 
external pager you specify with $pager) mutt cannot choose an 
interactive mailcap command. Therefore your command cannot be chosen.

Marking the mailcap entry with "copiousoutput" says that the command 
produces a lot of output, and should be paged. Since that works for you, 
this implies that when "more" isn't sending to a terminal it basicly 
acts like "cat". A quick experiment confirms this for me:

    man mutt|more|less

pages the output with "less" - the "more" command has just passed the 
text through. So you get away with it.

Technically you should have 2 entries. Mine look lke this:

    text/html; env DISPLAY= unhtml %s | less
    text/html; exec 2>&1 && env DISPLAY= unhtml %s; copiousoutput

because the mailcap isn't a mutt-specific thing, and also since mutt 
doesn't use it just for the message display, but also for the attachment 
view action.

So the first entry there has mutt write an HTML component to a file, 
then call "unhtml" on that file and pipe the output through "less".

"unhtml" is just a shell script of my own which runs my current 
preferred HTML-to-plain-tetx converter. Presently it uses "lynx -stdin 
-dump" with a bunch of pre and post manking.

The second entry is for the pager: it has "copiousoutput" appended, and 
does not invoke a paging programme.

>What the heck is going on? Where can I learn how to fix it?

Give the MIME section of the manual a read - it has a lot of detail on 
what you can put in the mailcap entry, including an example of multiple 
entries for a type in the "3.3.2. Search Order" part.

Cheers,
Cameron Simpson <cs at cskk.id.au>


More information about the Mutt-users mailing list