Update mail config (mbsync, msmtp, neomutt)

This commit is contained in:
2026-03-09 09:27:31 +01:00
parent ce13adc1d3
commit e7b3b3d37e

594
mail.org
View File

@@ -30,7 +30,7 @@ IMAPAccount gmail
Host imap.gmail.com
User dehaeze.thomas@gmail.com
PassCmd "pass email/dehaeze.thomas@gmail.com"
SSLType IMAPS
TLSType IMAPS
AuthMechs LOGIN
CertificateFile /etc/ssl/certs/ca-certificates.crt
#+END_SRC
@@ -97,7 +97,7 @@ IMAPAccount esrf
Host imaps.esrf.fr
User dehaeze
PassCmd "pass email/thomas.dehaeze@esrf.fr"
SSLType IMAPS
TLSType IMAPS
AuthMechs LOGIN
#+END_SRC
@@ -546,7 +546,7 @@ bind index,pager @ compose-to-sender
# Marl All message as read
macro index \Cr \
"<tag-pattern>~N<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" \
"<tag-pattern>~O<enter><tag-prefix><clear-flag>O<untag-pattern>.<enter><tag-pattern>~N<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" \
"mark all new as read"
#+end_src
@@ -658,42 +658,48 @@ bind compose R rename-attachment
bind compose a attach-file
#+END_SRC
Open another instance of neomutt in readonly mode while composing
Open another instance of Neomutt in read-only mode while composing
#+BEGIN_SRC conf
macro compose M "<shell-escape>$TERMINAL -e \"neomutt -R\"<enter>"
# macro compose M "<shell-escape>$TERMINAL -e \"neomutt -R\"<enter>"
#+END_SRC
Attach multiple files using ranger
Attach multiple files using yazi
#+begin_src conf
macro compose A "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
macro compose A "<shell-escape>bash $HOME/.config/neomutt/bin/yazipick<enter><enter-command>source /tmp/yazipick<enter><shell-escape>bash $HOME/.config/neomutt/bin/yazipick clean<enter>" "Attach with Yazi"
#+end_src
Attach file by drooping from GUI
#+begin_src conf
macro compose B "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick dragon<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
#+end_src
**** Attach with Ranger Script
**** Attach with yazi
:PROPERTIES:
:header-args: :tangle ~/.config/neomutt/bin/rangerpick
:header-args: :tangle ~/.config/neomutt/bin/yazipick
:header-args+: :comments both :mkdirp yes
:header-args+: :shebang "#!/usr/bin/env bash"
:END:
#+begin_src bash
tmpfile=/tmp/rangerpick
# Define temporary file path
tmpfile="/tmp/yazipick"
# Check if a parameter is passed to the script
if [ -z "$1" ]; then
ranger --choosefiles $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}' $tmpfile)" > $tmpfile
elif [ $1 == "dragon" ]; then
dragon-drop --target --print-path --keep > $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}' $tmpfile)" > $tmpfile
elif [ $1 == "clean" ]; then
ls $tmpfile
# Select files using yazi and save them to tmpfile
yazi --chooser-file "$tmpfile"
# Only proceed if files were actually selected
if [ -s "$tmpfile" ]; then
awk 'BEGIN {printf "push "} {printf "<attach-file>\"%s\"<enter>", $0} END {print ""}' "$tmpfile" > "$tmpfile.tmp" &&
mv "$tmpfile.tmp" "$tmpfile"
fi
elif [ "$1" == "clean" ]; then
# Clean up the temporary file if "clean" is passed as argument
rm -f "$tmpfile"
fi
#+end_src
**** Send HTML mails using Markdown
Write html emails using markdown
**** Send HTML mails using Org mode
#+BEGIN_SRC conf
# macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n"
macro compose Y "<first-entry>\
<pipe-entry>$HOME/.config/neomutt/bin/convert-multipart.sh<enter>\
<enter-command>source /tmp/neomutt-commands<enter>"
#+END_SRC
*** Browser
@@ -747,9 +753,6 @@ macro index,pager gf "<change-folder-readonly>$HOME/.local/share/mails/search<en
#+end_src
*** Link to Orgmode
https://www.donarmstrong.com/posts/org_mode_mutt_capture/
https://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/
#+begin_src conf
macro index,pager S "<pipe-message>$HOME/.config/neomutt/bin/mutt-save-org-link.py\n"
#+end_src
@@ -761,29 +764,92 @@ macro index,pager S "<pipe-message>$HOME/.config/neomutt/bin/mutt-save-org-link.
:header-args+: :shebang "#!/usr/bin/env python3"
:END:
https://orgmode.org/manual/The-capture-protocol.html#The-capture-protocol
#+begin_src python
#!/usr/bin/env python3
import sys
import email
from email import policy
import subprocess
import urllib.parse
import platform
import subprocess # Keep for potential fallback or notification
import pyperclip # Use pyperclip for clipboard
def notify_user(title, message):
"""Attempt to send a desktop notification (optional)."""
system = platform.system()
try:
if system == 'Linux':
subprocess.Popen(['notify-send', '--urgency=low', '--icon=mail-message-new', title, message])
elif system == 'Darwin': # macOS
# Requires 'terminal-notifier' (brew install terminal-notifier)
# Or use osascript
subprocess.Popen([
'osascript', '-e',
f'display notification "{message}" with title "{title}"'
])
# Add Windows notification if needed
except FileNotFoundError:
# notify-send or osascript not found, ignore
pass
except Exception as e:
print(f"Notification failed: {e}", file=sys.stderr)
# --- Main Script ---
# Parse the email from standard input
try:
message_bytes = sys.stdin.buffer.read()
# Use policy.default for robust parsing of modern emails
message = email.message_from_bytes(message_bytes, policy=policy.default)
except Exception as e:
print(f"Error parsing email: {e}", file=sys.stderr)
notify_user("Mutt Org Link Error", f"Failed to parse email: {e}")
sys.exit(1)
# Grab the relevant message headers
message_id = urllib.parse.quote(message['message-id'][1:-1])
subject = message['subject']
message_to = message['to']
# Grab the relevant message headers, handling potential missing headers
raw_message_id = message.get('message-id')
subject = message.get('subject', '(No Subject)') # Use default if subject is missing
# Ask emacsclient to save a link to the message
subprocess.Popen([
'emacsclient',
f'org-protocol://capture?template=pm&url={message_id}&title={subject}&body={message_to}'
])
# Clean the Message-ID (remove <>)
if raw_message_id:
message_id = raw_message_id.strip('<>')
else:
message_id = None
# Check if we got the essential Message-ID
if not message_id:
error_msg = "Could not find Message-ID header in the email."
print(error_msg, file=sys.stderr)
notify_user("Mutt Org Link Error", error_msg)
sys.exit(1)
# Construct the Org mode link
# Format: [[message:message_id][subject]]
# No URL encoding needed for the message_id here
org_link = f"[[message:{message_id}][{subject}]]"
# Copy the link to the clipboard using pyperclip
try:
pyperclip.copy(org_link)
success_msg = f"Org link copied:\n{org_link}"
print(success_msg, file=sys.stderr) # Print to stderr for logs/debug
notify_user("Mutt Org Link Copied", f"Subject: {subject}") # Send desktop notification
# Optional: Add a terminal bell sound
# print('\a', file=sys.stderr)
sys.exit(0) # Success
except Exception as e:
# Provide specific error feedback if pyperclip fails (e.g., missing backend)
error_msg = f"Error copying to clipboard: {e}"
print(error_msg, file=sys.stderr)
if "clipboard command not found" in str(e).lower() or \
isinstance(e, pyperclip.PyperclipException):
print("\nPlease ensure a clipboard utility is installed:", file=sys.stderr)
print("- Linux: install 'xclip' or 'xsel'", file=sys.stderr)
print("- macOS: should work out-of-the-box (pbcopy)", file=sys.stderr)
print("- Windows: should work out-of-the-box (clip)", file=sys.stderr)
notify_user("Mutt Org Link Error", "Failed to copy link to clipboard.")
sys.exit(1) # Failure
#+end_src
** Colors
@@ -1130,7 +1196,7 @@ A script =openfile.sh= is used to open files with the default application using
First, tag the files you want to send using =t=, then =;= to apply the action on
all tagged files and finally =<enter>= to add them all.
Of ranger can be used with the =A= keybinding.
Or yazi can be used with the =A= keybinding.
*** Forgotten Attachment
#+begin_src conf
@@ -1170,9 +1236,9 @@ mu find --clearlinks --format=links --linksdir=$HOME/.local/share/mails/search "
#+begin_src bash :tangle ~/.config/neomutt/bin/send_mail.sh
msmtp -a $1 ${@:2} && \
if [ $TMUX ]; then
tmux split -v -l 1 mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc $1-Sent && tmux select-pane -U
tmux split -v -l 1 "mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc $1-Sent && mu index" && tmux select-pane -U
else
mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc $1-Sent
mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc $1-Sent && mu index
fi
#+end_src
@@ -1188,12 +1254,313 @@ fi
*** Sync ESRF Mail Script
#+begin_src bash :tangle ~/.config/neomutt/bin/get_new_esrf_mail.sh
if [ $TMUX ]; then
tmux split -v -l 1 mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc esrf && tmux select-pane -U
tmux split -v -l 1 "mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc esrf && mu index" && tmux select-pane -U
else
mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc esrf
mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc esrf && mu index
fi
#+end_src
*** Email written with Org-Mode
#+begin_src bash :tangle ~/.config/neomutt/bin/convert-multipart.sh
commandsFile="/tmp/neomutt-commands"
orgFile="/tmp/neomutt-org"
htmlFile="/tmp/neomutt.html"
debugFile="/tmp/neomutt-debug.txt"
: > "$debugFile" # clear previous content
# Save original
cat - > "${orgFile}.orig"
cp "${orgFile}.orig" "$orgFile"
# Reset commands
echo -n "push " > "$commandsFile"
# -----------------------------
# Replace signature for HTML only
# -----------------------------
awk '
/^-- *$/ {
in_sig = 1
sig = "--"
next
}
in_sig {
if (/^[[:space:]]*$/) {
print "#+begin_export html"
gsub(/\n/, "<br>", sig)
print "<p style=\"margin-top:1.2em; font-size:90%; color:#444; line-height:1.3;\">" sig "</p>"
print "#+end_export"
print
in_sig = 0
} else {
sig = sig "<br>" $0
}
next
}
{print}
' "$orgFile" > "$orgFile.tmp" && mv "$orgFile.tmp" "$orgFile"
# -----------------------------
# Convert Org to HTML
# -----------------------------
pandoc -f org -t html5 --standalone --wrap=none --template ~/.local/share/pandoc/email.html \
"$orgFile" > "$htmlFile"
# -----------------------------
# Helper: extract local images from HTML
# -----------------------------
grep -oP '<img src="file://\K[^"]+' "$htmlFile" | while read -r file; do
sed -i "s#<img src=\"file://$file\"#<img src=\"cid:$(md5sum "$file" | cut -d ' ' -f 1 )\"#g" "$htmlFile"
echo "Replaced $file by cid:$(md5sum "$file" | cut -d ' ' -f 1 ) in HTML" >> "$debugFile"
done
# Attach the html file
echo -n "<attach-file>\"$htmlFile\"<enter>" >> "$commandsFile"
# Set it as inline
echo -n "<toggle-disposition>" >> "$commandsFile"
# Tell neomutt to delete it after sending
echo -n "<toggle-unlink>" >> "$commandsFile"
# Select both the html and org files
echo -n "<tag-entry><previous-entry><tag-entry>" >> "$commandsFile"
# Group the selected messages as alternatives
echo -n "<group-alternatives>" >> "$commandsFile"
grep -oP '\[\[file:\K[^\]]+' "${orgFile}.orig" \
| grep -Ev '^(https?://|cid:)' \
| while read -r file; do
if [[ -f "$file" ]]; then
id="$(md5sum "$file" | cut -d ' ' -f 1 )"
echo -n "<attach-file>\"$file\"<enter>" >> "$commandsFile"
echo -n "<toggle-disposition>" >> "$commandsFile"
echo -n "<edit-content-id><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace><backspace>$id<enter>" >> "$commandsFile"
echo -n "<tag-entry>" >> "$commandsFile"
echo "Attached $file" >> "$debugFile"
fi
done
grep -oP '\[\[file:\K[^\]]+' "$orgFile" | grep '^cid:' >/dev/null
if [[ $? -eq 0 ]]; then
echo -n "<first-entry><tag-entry><group-related>" >> "$commandsFile"
echo "Grouped related images" >> "$debugFile"
fi
#+end_src
#+begin_src html :tangle ~/.local/share/pandoc/email.html :shebang "" :comments no
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>$if(title-prefix)$$title-prefix$ $endif$$pagetitle$</title>
<style type="text/css">
/* ------------------------------ */
/* Base reset for email clients */
/* ------------------------------ */
body,table,td,div,p {
margin:0;
padding:0;
font-family: Georgia, "Times New Roman", serif;
font-size: 15px;
line-height: 1.4;
color:#111;
}
img {
border:0;
outline:none;
text-decoration:none;
max-width:100%;
height:auto;
-ms-interpolation-mode:bicubic; /* Outlook */
}
table {
border-collapse: collapse;
}
/* ------------------------------ */
/* Layout container */
/* ------------------------------ */
.wrapper {
width:100%;
background:#ffffff;
padding:20px 0;
}
.container {
max-width:760px;
margin:0 auto;
padding:20px;
background:#ffffff;
}
/* ------------------------------ */
/* Typography */
/* ------------------------------ */
h1,h2,h3,h4,h5,h6 {
margin:20px 0 10px;
font-family: "Roboto","Helvetica Neue","Segoe UI",Arial,sans-serif;
color:#222;
line-height:1.25;
}
h1 { font-size: 22px; }
h2 { font-size: 19px; }
h3 { font-size: 16px; }
h4 { font-size: 15px; }
h5 { font-size: 14px; }
h6 { font-size: 13px; }
p {
margin:12px 0;
}
ul,ol {
margin:10px 0 10px 25px;
}
li { margin:4px 0; }
/* ------------------------------ */
/* Code blocks & inline code */
/* ------------------------------ */
pre, code {
font-family: Menlo, Consolas, "Courier New", monospace;
font-size: 13px;
}
pre {
background:#f5f5f5;
padding:10px;
border-radius:4px;
white-space:pre-wrap;
margin:15px 0;
}
p > code {
background:#f5f5f5;
padding:2px 4px;
border-radius:3px;
}
/* ------------------------------ */
/* Blockquotes */
/* ------------------------------ */
blockquote {
border-left:4px solid #ccc;
padding-left:10px;
margin-left:5px;
margin-right:0;
font-style:italic;
color:#555;
}
/* ------------------------------ */
/* Tables */
/* ------------------------------ */
table {
width: 100%;
border-collapse: collapse;
margin: 15px 0;
font-size: 14px;
line-height: 1.4;
}
table th, table td {
border: 1px solid #ccc;
padding: 8px 12px;
text-align: left;
}
table th {
background-color: #f0f0f0;
font-weight: bold;
}
table tr:nth-child(even) {
background-color: #fafafa;
}
table caption {
caption-side: bottom;
font-size: 12px;
color: #555;
margin-top: 5px;
}
/* ------------------------------ */
/* Mobile styles */
/* ------------------------------ */
@media only screen and (max-width: 620px) {
body,table,td,p { font-size:14px !important; }
h1 { font-size:20px !important; }
.container { padding:15px !important; }
}
@media only screen and (max-width: 620px) {
table, thead, tbody, th, td, tr {
display: block;
width: 100%;
}
th {
text-align: right;
padding-right: 10px;
}
td {
text-align: left;
padding-left: 10px;
border: none;
border-bottom: 1px solid #eee;
}
}
</style>
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
</style>
$endif$
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
<div class="wrapper">
<div class="container">
$if(title)$
<h1>$title$</h1>
$endif$
$body$
</div>
</div>
</body>
</html>
#+end_src
*** Openfile Scripts
#+begin_src bash :tangle ~/.config/neomutt/bin/openfile.sh
base=$(basename "$1")
@@ -1230,7 +1597,7 @@ Generic
#+BEGIN_SRC conf
text/plain; nvim %s
video/*; setsid mpv --quiet %s &
image/*; sxiv -a -b %s &
image/*; nsxiv -a -b %s &
application/pdf; zathura %s &
audio/*; /usr/bin/xdg-open %s; copiousoutput
text/html; export DISPLAY=:0 && setsid qutebrowser %s > /dev/null 2>&1 &; nametemplate=%s.html
@@ -1243,73 +1610,78 @@ text/calendar; ics-add %s; copiousoutput;
application/ics; ics-add %s; copiousoutput;
#+END_SRC
For calendar output (outlook), a personal =ics-add= script is used.
#+BEGIN_SRC conf
application/ms-tnef; winmail-add %s; copiousoutput;
#+END_SRC
Libreoffice
#+begin_src conf
application/docx; libreoffice %s --nologo &; copiousoutput;
application/doc; libreoffice --nologo %s &; copiousoutput;
application/docx; onlyoffice-desktopeditors %s &; copiousoutput;
application/doc; onlyoffice-desktopeditors %s &; copiousoutput;
application/vnd.oasis.opendocument.database; libreoffice --nologo --base '%s'; copiousoutput
application/vnd.oasis.opendocument.chart; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.oasis.opendocument.spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.oasis.opendocument.spreadsheet-template; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.oasis.opendocument.graphics; libreoffice --nologo --draw '%s'; copiousoutput
application/vnd.oasis.opendocument.graphics-template; libreoffice --nologo --draw '%s'; copiousoutput
application/vnd.oasis.opendocument.presentation; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.oasis.opendocument.presentation-template; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.oasis.opendocument.formula; libreoffice --nologo --math '%s'; copiousoutput
application/vnd.oasis.opendocument.text; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.oasis.opendocument.text-master; libreoffice --nologo -global '%s'; copiousoutput
application/vnd.oasis.opendocument.text-template; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.oasis.opendocument.text-web; libreoffice --nologo -web '%s'; copiousoutput
application/vnd.sun.xml.base; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.sun.xml.calc; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.sun.xml.calc.template; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.sun.xml.draw; libreoffice --nologo --draw '%s'; copiousoutput
application/vnd.sun.xml.draw.template; libreoffice --nologo --draw '%s'; copiousoutput
application/vnd.stardivision.calc; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.stardivision.chart; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.stardivision.draw; libreoffice --nologo --draw '%s'; copiousoutput
application/vnd.stardivision.impress; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.stardivision.math; libreoffice --nologo --math '%s'; copiousoutput
application/vnd.stardivision.writer-global; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.stardivision.writer; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.sun.xml.impress; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.sun.xml.impress.template; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.sun.xml.math; libreoffice --nologo --math '%s'; copiousoutput
application/vnd.sun.xml.writer; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.sun.xml.writer.global; libreoffice --nologo -global '%s'; copiousoutput
application/vnd.sun.xml.writer.template; libreoffice --nologo --writer '%s'; copiousoutput
text/csv; libreoffice --nologo --calc '%s'; copiousoutput
text/spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
application/x-quattropro; libreoffice --nologo --calc '%s'; copiousoutput
application/x-dbf; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.ms-excel.sheet.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.ms-excel.template.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.spreadsheetml.template; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.lotus-1-2-3; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.ms-excel; libreoffice --nologo --calc '%s'; copiousoutput
application/msexcel; libreoffice --nologo --calc '%s'; copiousoutput
application/x-dbase; libreoffice --nologo --calc '%s'; copiousoutput
text/x-csv; libreoffice --nologo --calc '%s'; copiousoutput
application/vnd.ms-powerpoint.presentation.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.ms-powerpoint.slideshow.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.ms-powerpoint.template.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.presentation; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.slideshow; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.template; libreoffice --nologo --impress '%s'; copiousoutput
application/vnd.ms-powerpoint; libreoffice --nologo --impress '%s'; copiousoutput
application/mspowerpoint; libreoffice --nologo --impress '%s'; copiousoutput
text/mathml; libreoffice --nologo --math '%s'; copiousoutput
application/rtf; libreoffice --nologo --writer '%s'; copiousoutput
application/x-t602; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.ms-word.document.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.ms-word.template.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.template; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.ms-works; libreoffice --nologo --writer '%s'; copiousoutput
application/msword; libreoffice --nologo --writer '%s'; copiousoutput
application/wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
text/rtf; libreoffice --nologo --writer '%s'; copiousoutput
application/vnd.oasis.opendocument.database; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.chart; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.spreadsheet; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.spreadsheet-template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.graphics; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.graphics-template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.presentation; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.presentation-template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.formula; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.text; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.text-master; onlyoffice-desktopeditors -global '%s'; copiousoutput
application/vnd.oasis.opendocument.text-template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.oasis.opendocument.text-web; onlyoffice-desktopeditors -web '%s'; copiousoutput
application/vnd.sun.xml.base; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.calc; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.calc.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.draw; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.draw.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.calc; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.chart; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.draw; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.impress; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.math; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.writer-global; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.stardivision.writer; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.impress; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.impress.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.math; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.writer; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.sun.xml.writer.global; onlyoffice-desktopeditors -global '%s'; copiousoutput
application/vnd.sun.xml.writer.template; onlyoffice-desktopeditors '%s'; copiousoutput
text/csv; onlyoffice-desktopeditors '%s'; copiousoutput
text/spreadsheet; onlyoffice-desktopeditors '%s'; copiousoutput
application/x-quattropro; onlyoffice-desktopeditors '%s'; copiousoutput
application/x-dbf; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-excel.sheet.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-excel.template.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.spreadsheetml.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.lotus-1-2-3; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-excel; onlyoffice-desktopeditors '%s'; copiousoutput
application/msexcel; onlyoffice-desktopeditors '%s'; copiousoutput
application/x-dbase; onlyoffice-desktopeditors '%s'; copiousoutput
text/x-csv; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-powerpoint.presentation.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-powerpoint.slideshow.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-powerpoint.template.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.presentation; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.slideshow; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.presentationml.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-powerpoint; onlyoffice-desktopeditors '%s'; copiousoutput
application/mspowerpoint; onlyoffice-desktopeditors '%s'; copiousoutput
text/mathml; onlyoffice-desktopeditors '%s'; copiousoutput
application/rtf; onlyoffice-desktopeditors '%s'; copiousoutput
application/x-t602; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.wordperfect; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-word.document.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-word.template.macroEnabled.12; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.document; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.openxmlformats-officedocument.wordprocessingml.template; onlyoffice-desktopeditors '%s'; copiousoutput
application/vnd.ms-works; onlyoffice-desktopeditors '%s'; copiousoutput
application/msword; onlyoffice-desktopeditors '%s'; copiousoutput
application/wordperfect; onlyoffice-desktopeditors '%s'; copiousoutput
text/rtf; onlyoffice-desktopeditors '%s'; copiousoutput
#+end_src