From e7b3b3d37ee7cedac80250c986a2016e5d1f8cc4 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Mon, 9 Mar 2026 09:27:31 +0100 Subject: [PATCH] Update mail config (mbsync, msmtp, neomutt) --- mail.org | 598 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 485 insertions(+), 113 deletions(-) diff --git a/mail.org b/mail.org index c09597a..6322bc9 100644 --- a/mail.org +++ b/mail.org @@ -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 \ - "~NN." \ + "~OO.~NN." \ "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 "$TERMINAL -e \"neomutt -R\"" +# macro compose M "$TERMINAL -e \"neomutt -R\"" #+END_SRC -Attach multiple files using ranger +Attach multiple files using yazi #+begin_src conf -macro compose A "bash $HOME/.config/neomutt/bin/rangerpicksource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "Attach with Ranger" +macro compose A "bash $HOME/.config/neomutt/bin/yazipicksource /tmp/yazipickbash $HOME/.config/neomutt/bin/yazipick clean" "Attach with Yazi" #+end_src -Attach file by drooping from GUI -#+begin_src conf -macro compose B "bash $HOME/.config/neomutt/bin/rangerpick dragonsource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "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", ""$0""}' $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", ""$0""}' $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 "\"%s\"", $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 "\ +$HOME/.config/neomutt/bin/convert-multipart.sh\ +source /tmp/neomutt-commands" #+END_SRC *** Browser @@ -747,9 +753,6 @@ macro index,pager gf "$HOME/.local/share/mails/search$HOME/.config/neomutt/bin/mutt-save-org-link.py\n" #+end_src @@ -761,29 +764,92 @@ macro index,pager S "$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 -message_bytes = sys.stdin.buffer.read() -message = email.message_from_bytes(message_bytes, policy=policy.default) +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 == 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/, "
", sig) + print "

" sig "

" + print "#+end_export" + print + in_sig = 0 + } else { + sig = sig "
" $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 '> "$debugFile" +done + +# Attach the html file +echo -n "\"$htmlFile\"" >> "$commandsFile" + +# Set it as inline +echo -n "" >> "$commandsFile" + +# Tell neomutt to delete it after sending +echo -n "" >> "$commandsFile" + +# Select both the html and org files +echo -n "" >> "$commandsFile" + +# Group the selected messages as alternatives +echo -n "" >> "$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 "\"$file\"" >> "$commandsFile" + echo -n "" >> "$commandsFile" + echo -n "$id" >> "$commandsFile" + echo -n "" >> "$commandsFile" + echo "Attached $file" >> "$debugFile" + fi + done + + +grep -oP '\[\[file:\K[^\]]+' "$orgFile" | grep '^cid:' >/dev/null +if [[ $? -eq 0 ]]; then + echo -n "" >> "$commandsFile" + echo "Grouped related images" >> "$debugFile" +fi +#+end_src + +#+begin_src html :tangle ~/.local/share/pandoc/email.html :shebang "" :comments no + + + + + +$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ + + + +$if(highlighting-css)$ + +$endif$ + +$for(header-includes)$ +$header-includes$ +$endfor$ + + + + +
+
+ +$if(title)$ +

$title$

+$endif$ + +$body$ + +
+
+ + +#+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