Index News Docs Issues Source

# Mailcap

By default, Chawan's buffers only handle HTML and plain text. The mailcap file can be used to view other file formats using external commands, or to convert them to HTML/plain text before displaying them in Chawan.

The browsecap file fulfills a similar purpose for URI scheme handling. Browsecap can override handling of any built-in scheme, or to add custom handlers (e.g. mutt(1) for mailto). When combined with cha-cgi(5), browsecap also enables extending Chawan with user-specified schemes.

(Browsecap is a more capable replacement for cha-urimethodmap(5); the latter is deprecated.)

Note that Chawan's default mime.types file only recognizes a few file extensions, which may result in your entries not being executed if your system lacks an /etc/mime.types file. Please consult cha-mime.types(5) for details.

For an exact description of the mailcap format, see RFC 1524.

Browsecap is not standardized. The semantics are derived from w3mmee, but the two do not necessarily match in every aspect.

## Search path

The search path for mailcap files is set by the configuration variable external.mailcap. This matches the recommended path in the RFC:

$HOME/.mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap

By default, mailcap entries are only executed if the user types r (run) after the prompt. Other options are to view the file with t (text), or to save the file with s.

If a capital letter is typed (e.g. shift + R), then a corresponding entry is appended to external.auto-mailcap (default: ~/.chawan/mailcap, or ~/.config/chawan/mailcap with XDG basedirs). (T)ext and (S)ave may also be used to append entries corresponding to the other display options.

Entries in auto-mailcap are automatically executed, so it is recommended to add your Chawan-specific entries there (or just set it to your personal mailcap file).

For browsecap, there is only an automatic variant so far, stored at external.auto-browsecap which defaults to ~/.chawan/browsecap (or ~/.config/chawan/browsecap with XDG basedirs).

## Format

Chawan adheres to the format described in RFC 1524, with a few extensions.

text/html and text/plain entries are ignored, except when the entry includes an x-type parameter.

In browsecap, the MIME type field is treated as protocol/method. For example, http/get dispatches to GET requests to an HTTP scheme, ftp/post to POST requests to an FTP scheme, and https/* to all HTTPS schemes.

### Templating

The command part of entries may include template strings which are substituted by the browser at execution.

Templates do not have to be quoted; Chawan quotes them automatically. (This works with $(command substitutions) as well.) However, other software may misbehave on such templates, so it may be better to assign them to a variable first, e.g.

text/x-example; s=%s cat "$s"; copiousoutput

Following templates are supported:

### Fields

Following fields are recognized. (In browsecap, the x- prefix for extension fields is optional; in mailcap, it is mandatory.)

## Mailcap examples

To automatically execute these entries, place them in ~/.chawan/mailcap (or ~/.config/chawan/mailcap if you use XDG basedirs). Alternatively, if you already have a mailcap file to share with other programs, you can set external.auto-mailcap to ~/.mailcap.

# Note: these examples require an entry in mime.types that sets e.g. md as
# the markdown content type.

# Handle markdown files using pandoc.
text/markdown; pandoc - -f markdown -t html -o -; x-htmloutput

# Show syntax highlighting for JavaScript source files using bat.
text/javascript; bat -f -l es6 --file-name %u -; x-ansioutput

# Play music using mpv, and hand over control of the terminal until mpv exits.
audio/*; mpv -; needsterminal

# Play videos using mpv in the background, redirecting its standard output
# and standard error to /dev/null.
video/*; mpv -

# Open docx files using LibreOffice Writer.
application/vnd.openxmlformats-officedocument.wordprocessingml.document; lowriter %s

# Display manpages using pandoc. (Make sure the mime type matches the one
# set in your mime.types file for extensions .1, .2, .3, ...)
application/x-troff-man; pandoc - -f man -t html -o -; x-htmloutput

# epub -> HTML using pandoc. (Again, don't forget to adjust mime.types.)
# We set http_proxy to keep it from downloading whatever through http/s.
application/epub+zip; http_proxy=localhost:0 pandoc - -f epub \
--embed-resources --standalone; x-htmloutput

# Hex viewer.  Usage: alias chadump='cha -Ttext/x-hexdump'
# (Uses GNU-specific flags, adjust as needed on other systems.)
text/x-hexdump; od -w12 -A x -t x1z -v; copiousoutput

# Following entry will be ignored, as text/html is supported natively by Chawan.
text/html; cha -dT text/html -I %{charset}; copiousoutput

## Browsecap examples

Place these entries in ~/.chawan/browsecap (or ~/.config/chawan/browsecap if you use XDG basedirs).

# Use the `magnet.cgi' script to pass magnet links to Transmission.
# (`magnet.cgi' can be found in the `bonus/' directory.  You can also
# modify it to pass the links to your BitTorrent client of choice.)
# Since we are in browsecap, the `x-' prefix can be omitted.
magnet/*;	/cgi-bin/magnet.cgi?%u; cgioutput

# Open mailto: URIs using mutt.
# (This is the same as mailto/*; the trailing `/*' can be freely omitted.)
mailto;		mutt -- %s; needsterminal

# Open YouTube URLs with mpv.  (GET method only.)
# Like above, nc-match does not need the `x-' prefix because this is
# browsecap (not mailcap).
https/get;	mpv -- %u; needsterminal; nc-match=^https://(www\.)?youtube\.com/watch\?v=.*$

## See also

cha(1)