Mailcap - gokcehan/lf GitHub Wiki

lf works very well with Mailcap as a launcher and a previewer. It is an attractive option once you realize it is already installed on most systems (mailcap is part of the mime-support package, which is a pretty common dependency).

Mailcap file

The mailcap file (~/.mailcap) allows defining a default action for each MIME types:

video/*; mpv '%s';
audio/*; mpv '%s';
text/*; vim '%s'; needsterminal;

The default action is invoked with run-mailcap file.txt.

We can also define alternate actions like the print action. The print action is invoked with run-mailcap --action=print file.txt or by the default wrapper print file.txt. In the following example we add print actions to our mailcap file with the intent to use print as a lf previewer:

video/*; mpv '%s'; print=mpv --aid=no --vid=no --sid=no '%s' || : ;
audio/*; mpv '%s'; print=mpv --aid=no --vid=no --sid=no '%s' || : ;
text/*; vim '%s'; needsterminal; print=less '%s';

lf integration

In order to use mailcap as a launcher we need to set the following environment variable:

OPENER=run-mailcap

And in order to use mailcap as a previewer we just need to set the following lf option:

set previewer print

Troubleshooting

  • run-mailcap hangs when opening paths that contain spaces.
    • Check whether tempfile utility is present on your system. It is provided by the debianutils package.

Alternative launchers

The default way to open a file using mailcap is using the run-mailcap tool. It comes preinstalled on OpenBSD and is available as an AUR package. It depends on the debianutils package which can be cumbersome to install on some non-Debian systems. Luckily, there are alternatives.

run-mailcap-rs

The run-mailcap-rs is a recent Rust rewrite of run-mailcap. It needs rust, but doesn't depend on the debianutils package.

mopen

The mopen script leverages the Python mailcap module to do the heavy lifting. It also doesn't depend on debianutils.