summaryrefslogtreecommitdiff
path: root/share/mailcap
blob: e9baa92e9d32b4c2f29c2e1b96fbdfb2dc40260f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# Save as ~/.mailcap. Then use run-mailcap to:
#
# - open files by `run-mailcap --action=view <file>`, or
# - view them in the terminal by `run-mailcap --action=cat <file>`.
#
# Useful
#
# - in mutt by `set mailcap_file $HOME/.mailcap`
# - in Vim by adding to your vimrc
#
#      autocmd BufReadPost * if empty(&l:buftype) && !did_filetype() && !&l:binary &&
#            \   system('file --mime --brief ' . fnamemodify(resolve(expand('%')), ':p:S')) !~# '^text/' |
#            \     silent exe '%!run-mailcap --action=cat %:S' |
#            \     setlocal filetype=text readonly buftype=nowrite | endif
#
# - in less by LESSOPEN="|run-mailcap --action=cat %s", or
# - in ranger or lf by making scope.sh run
#
#   `run-mailcap --action=cat "$1" | head -n 200`
#
# - Since ~/.mailcap is read by firefox (and xdg-open!) when opening a
#   (downloaded) file, add for each file type foo/bar a sensible line like
#   `foo/bar; xdg-open %s; test=test -n "$DISPLAY"` for run-mail --action=view
#
# Uses lesspipe.sh, bat (or highlight), pandoc, w3m, xdg-open, feh, mpv, ...
# Since bat is batcat, you can either use `batcat` instead of `bat` in the file,
# or add `alias bat=batcat` to your shell configuration (~/.profile or ~/.zshenv).
#
# From https://github.com/cglindkamp/run-mailcap-rs/blob/master/README.md :
#
# Run-mailcap has multiple advantages over Xdg-open: While xdg-open is easier
# to extend for the application writers and distributions itself (just add an
# application desktop file with each application), this is not so easy done by
# the user. A mailcap file on the other hand is simple text file. Just add a
# new line for the mime type, you want to customize, and your done.
#
# In addition, you can have different actions with run-mailcap, e.g. open for
# viewing or editing or just print the file without looking at it. In
# principle, you can have the same with desktop files in a desktop environment,
# but there is just one default, that xdg-open uses. You can add even more
# flexibility with mailcap files by making entries context dependend ("test"
# command value in the entry).
#
# Last but not least, Mutt already use mailcap files, so if you use one of them
# and xdg-open, you had to maintain configuration for both programs.

# LibreOffice, Word, Excel et PowerPoint
# From http://wiki.free-unices.org/doku.php/config/mutt/new_mailcap
application/vnd.oasis.opendocument.text;                                   /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
# application/vnd.oasis.opendocument.text;                                   /usr/local/lib/mutt-wizard/openfile okular               %s; test=test -n "$DISPLAY"
application/vnd.oasis.opendocument.text;                                   odt2txt %s | cat --squeeze-blank; copiousoutput
# application/vnd.oasis.opendocument.text;                                   pandoc --from=odt --to=plain %s | cat --squeeze-blank ; copiousoutput
# application/vnd.oasis.opendocument.text;                                   soffice --cat %s | cat --squeeze-blank ; copiousoutput

application/vnd.oasis.opendocument.spreadsheet;                            /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.oasis.opendocument.spreadsheet;                            odt2txt %s | cat --squeeze-blank; copiousoutput
# application/vnd.oasis.opendocument.spreadsheet;                            soffice --cat %s | cat --squeeze-blank ; copiousoutput

application/vnd.oasis.opendocument.presentation;                           /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.oasis.opendocument.presentation;                           odt2txt %s | cat --squeeze-blank; copiousoutput
# application/vnd.oasis.opendocument.presentation;                           soffice --cat %s | cat --squeeze-blank ; copiousoutput

application/vnd.openxmlformats-officedocument.wordprocessingml.document;   /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; nametemplate=%s.docx; test=test -n "$DISPLAY"
# application/vnd.openxmlformats-officedocument.wordprocessingml.document;   docx2txt.pl %s - | cat --squeeze-blank; nametemplate=%s.docx; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.document;   pandoc --from=docx --to=plain %s | cat --squeeze-blank; nametemplate=%s.docx; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.template;   /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; nametemplate=%s.docm; test=test -n "$DISPLAY"
application/vnd.openxmlformats-officedocument.wordprocessingml.template;   docx2txt.pl %s - | cat --squeeze-blank; nametemplate=%s.docm; copiousoutput

application/msword;                                                        /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/msword;                                                        wvHtml %s - | w3m -dump -T text/html; copiousoutput
# application/msword;                                                        antiword -- %s | cat --squeeze-blank; copiousoutput
# application/msword;                                                        catdoc -- %s | cat --squeeze-blank; copiousoutput
# application/msword;                                                        soffice --cat %s | cat --squeeze-blank ; copiousoutput

application/vnd.msword;                                                    /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.msword;                                                    wvHtml %s - | w3m -dump -T text/html; copiousoutput

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;         /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;         xlsx2csv --all --ignoreempty --delimiter x09 --outputencoding utf-8 %s | cat --squeeze-blank; nametemplate=%s.xlsx; copiousoutput
# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;         xlsx2csv xlscat --trim -S all %s | cat --squeeze-blank; nametemplate=%s.xlsx; copiousoutput
# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;         excel2csv --file %s; nametemplate=%s.xlsx; copiousoutput
application/vnd.openxmlformats-officedocument.spreadsheetml.template;      /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"

application/vnd.ms-excel;                                                  /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.ms-excel;                                                  xlscat -a utf-8 -b WINDOWS-1252 %s; copiousoutput
# application/vnd.ms-excel;                                                  xlscat -a %{charset} -b WINDOWS-1252 %s; copiousoutput
# application/vnd.ms-excel;                                                  excel2csv %s --trim; copiousoutput

application/csv;                                                           /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/csv;                                                           trim < %s | column -t -s,; copiousoutput

application/vnd.openxmlformats-officedocument.presentationml.presentation; /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.openxmlformats-officedocument.presentationml.presentation; pptx2md --disable-image --disable-wmf --disable-color --disable-escaping %s --output $HOME/.cache/mutt/presentation.md 2>/dev/null && cat --squeeze-blank $HOME/.cache/mutt/presentation.md; nametemplate=%s.pptx; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.template;     /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.openxmlformats-officedocument.presentationml.slideshow;    /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"

application/vnd.ms-powerpoint;     /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/vnd.ms-powerpoint;     ppthtml %s | w3m -dump -T text/html; copiousoutput


# RTF, EPUB
application/rtf;                   /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/rtf;                   unrtf --html %s | w3m -dump -T text/html; copiousoutput
application/richtext;              /usr/local/lib/mutt-wizard/openfile soffice --nologo %s; test=test -n "$DISPLAY"
application/richtext;              unrtf --html %s | w3m -dump -T text/html; copiousoutput

application/epub+zip;              /usr/local/lib/mutt-wizard/openfile kchmviewer %s; test=test -n "$DISPLAY"
application/epub+zip;              pandoc --from epub --to plain %s | cat --squeeze-blank; copiousoutput

# PDF, DJVU
application/pdf;                   /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-zathura}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf; description="PDF Document"
application/pdf;                   pdftotext -l 20 -nopgbrk -q -htmlmeta -- %s - | w3m -dump -T text/html; nametemplate=%s.pdf; copiousoutput

application/x-pdf;                 /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-zathura}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf; description="PDF Document"
application/x-pdf;                 pdftotext -l 20 -nopgbrk -q -htmlmeta -- %s - | w3m -dump -T text/html; nametemplate=%s.pdf; copiousoutput

application/x-bzpdf;               /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-zathura}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf.bz2; description="PDF Document"
application/x-gzpdf;               /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-zathura}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf.gz; description="PDF Document"
application/x-xzpdf;               /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-zathura}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf.xz; description="PDF Document"

image/vnd.djvu;                    /usr/local/lib/mutt-wizard/openfile "${PDFVIEWER:-qpdfview --unique --instance mutt}" %s; test=test -n "$DISPLAY"; nametemplate=%s.pdf.gz; description="DJVU Document"
image/vnd.djvu;                    djvutxt --page=1-20 %s | cat --squeeze-blank; copiousoutput

# Archives
application/x-executable;              readelf -WCa %s; copiousoutput
application/x-pie-executable;          readelf -WCa %s; copiousoutput
application/x-sharedlib;               readelf -WCa %s; copiousoutput

application/vnd.debian.binary-package; dpkg-deb --contents %s; copiousoutput
application/x-rpm;                     rpm -qlp %s; copiousoutput
application/x-xpinstall;               unzip -l %s; copiousoutput

application/x-tar;                     tar tvvf %s; copiousoutput
application/x-bzip-compressed-tar;     tar jtvvf %s; copiousoutput
application/x-bzip;                    tar jtvvf %s; copiousoutput
application/x-bzip2;                   tar jtvvf %s; copiousoutput
application/x-gtar;                    tar tvfz %s; copiousoutput
application/x-tar-gz;                  tar tvfz %s; copiousoutput
application/x-lzip;                    tar --lzip -tvf %s; copiousoutput
application/x-xz;                      tar tvfJ %s; copiousoutput
application/x-compress;                tar Ztvf %s; copiousoutput
application/x-rar-compressed;          unrar v %s; copiousoutput

application/java-archive;              jar tf %s; copiousoutput
application/zip;                       jar tf %s; nametemplate=%s.jar; copiousoutput
application/zip;                       unzip -l %s; copiousoutput
application/x-zip-compressed;          unzip -l %s; copiousoutput

application/x-zstd;                    zstd -lv %s; copiousoutput

application/x-7z-compressed;           7z l %s; copiousoutput

# Multimedia
image/*;                           /usr/local/lib/mutt-wizard/openfile feh -Tview -- %s; description="Image"; test=test -n "$DISPLAY"
# image/*;                         /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
image/*;                           identify -ping %s; copiousoutput

audio/*;                           /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; description="Audio"; test=test -n "$DISPLAY"
# audio/*;                           /usr/local/lib/mutt-wizard/openfile smplayer 2>/dev/null %s; description="Audio"; test=test -n "$DISPLAY"
audio/*;                           mpv --aid=no --vid=no --sid=no '%s' || : ; copiousoutput
# audio/*;                           mediainfo %s; copiousoutput

video/*;                           /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; description="Video"; test=test -n "$DISPLAY"
# video/*;                           /usr/local/lib/mutt-wizard/openfile smplayer 2>/dev/null %s; description="Audio"; test=test -n "$DISPLAY"
video/*;                           mpv --aid=no --vid=no --sid=no '%s' || : ; copiousoutput
# video/*;                           mediainfo %s; copiousoutput

# Text
text/markdown;                     nvim %s; test=test -n "$DISPLAY"
text/markdown;                     gvim %s; test=test -n "$DISPLAY"
text/markdown;                     mdcat %s; copiousoutput

text/html;			                   /usr/local/lib/mutt-wizard/openfile ${firefox:-librewolf} %s; test=test -n "$DISPLAY"; description="HTML Document"
text/html;                         lynx -assume_charset=%{charset} -display_charset=utf-8 -dump -width=1024 %s; copiousoutput; needsterminal; nametemplate=%s.html; description="HTML Document in lynx"
# text/html;                         pandoc --from=html --to=markdown %s | mdcat; copiousoutput
# text/html;                         pandoc --from=html --to=man %s | groff -Tutf8 -man; copiousoutput
# text/html;                         w3m -I %{charset} -T text/html; charset=%{charset:-UTF-8}; copiousoutput; needsterminal; nametemplate=%s.html; description="HTML Document"
text/html;                         w3m -T text/html; copiousoutput; needsterminal; nametemplate=%s.html; description="HTML Document"

application/json;                  nvim %s; test=test -n "$DISPLAY"
application/json;                  gvim %s; test=test -n "$DISPLAY"
application/json;                  jq --color-output . %s; copiousoutput

text/x-vcard;                      nvim %s; test=test -n "$DISPLAY"
text/x-vcard;                      gvim %s; test=test -n "$DISPLAY"
text/x-vcard;                      /usr/local/bin/mutt.vcard.filter; copiousoutput

text/calendar;                     nvim %s; test=test -n "$DISPLAY"
text/x-vcalendar;                  nvim %s; test=test -n "$DISPLAY"
application/ics;                   nvim %s; test=test -n "$DISPLAY"
text/calendar;                     gvim %s; test=test -n "$DISPLAY"
text/x-vcalendar;                  gvim %s; test=test -n "$DISPLAY"
application/ics;                   gvim %s; test=test -n "$DISPLAY"
# # Alternatively, you can use `mutt-ics` instead of `vcalendar-filter`:
# text/calendar;                     mutt-ics; nametemplate=%s.ics; copiousoutput
text/calendar;                     /usr/local/bin/vcalendar-filter; nametemplate=%s.ics; copiousoutput
text/x-vcalendar;                  /usr/local/bin/vcalendar-filter; nametemplate=%s.ics; copiousoutput
application/ics;                   /usr/local/bin/vcalendar-filter; nametemplate=%s.ics; copiousoutput

# # Alternatively, use `highlight --out-format=ansi --force -- %s; copiousoutput`
# # instead of         `bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput`

# PGP
application/pgp-encrypted;         gpg -d '%s'; copiousoutput;
application/pgp-keys;              gpg --import '%s'; copiousoutput;
application/pgp-signature;         nvim %s; test=test -n "$DISPLAY"
application/pgp-signature;         gvim %s; test=test -n "$DISPLAY"
application/pgp-signature;         bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput

application/x-subrip;              $EDITOR %s;
application/x-tex;                 nvim %s; test=test -n "$DISPLAY"
application/x-latex;               nvim %s; test=test -n "$DISPLAY"
application/x-perl;                nvim %s; test=test -n "$DISPLAY"
application/x-script;              nvim %s; test=test -n "$DISPLAY"
application/x-shellscript;         nvim %s; test=test -n "$DISPLAY"
application/x-sh;                  nvim %s; test=test -n "$DISPLAY"
application/x-diff;                nvim %s; test=test -n "$DISPLAY"
application/x-patch;               nvim %s; test=test -n "$DISPLAY"
application/x-tex;                 gvim %s; test=test -n "$DISPLAY"
application/x-latex;               gvim %s; test=test -n "$DISPLAY"
application/x-perl;                gvim %s; test=test -n "$DISPLAY"
application/x-script;              gvim %s; test=test -n "$DISPLAY"
application/x-shellscript;         gvim %s; test=test -n "$DISPLAY"
application/x-sh;                  gvim %s; test=test -n "$DISPLAY"
application/x-diff;                gvim %s; test=test -n "$DISPLAY"
application/x-patch;               gvim %s; test=test -n "$DISPLAY"
application/x-tex;                 bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-latex;               bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-perl;                bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-script;              bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-shellscript;         bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-sh;                  bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-diff;                bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput
application/x-patch;               bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput

text/*;                            /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
# text/*;                            highlight --out-format=ansi --force -- %s; copiousoutput
text/*;                            bat --paging=never --style=plain --color=always --theme=ansi %s; copiousoutput

# Kitchen-sink
message/rfc822;                    mu view -- %s | cat --squeeze-blank; copiousoutput
message/*;                         /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
message/*;                         LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput

multipart/*;                       /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
multipart/*;                       LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput

x-content/*;                       /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
x-content/*;                       LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput

x-epoc/*;                          /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
x-epoc/*;                          LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput

application/octet-stream;          /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
application/octet-stream;          ccze -AC < %s; nametemplate=%s.log; copiousoutput
application/octet-stream;          LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput

application/*;                     /usr/local/lib/mutt-wizard/openfile xdg-open 2>/dev/null %s; test=test -n "$DISPLAY"
application/*;                     LESSQUIET=1 lesspipe.sh %s | cat --squeeze-blank; copiousoutput