Mail Configuration
Table of Contents
mbsync
- Synchronize Mailboxesmsmtp
- Send Mailsmu
- Mail Indexerneomutt
- Mail Client- Bindings
- Colors
- Contacts with Mu
- Paths
- Accounts
- Basic Options
- View Options
- Sidebar
- Attachments
- Scripts and other config files
Installation:
yay -S mbsync msmtp mu neomutt lynx
mbsync
- Synchronize Mailboxes
Global Defaults
# Automatically create missing mailboxes, both locally and on the server Create Both # Save the synchronization state files in the relevant directory SyncState * # Permanently remove all messages [on the Master/Slave] marked for deletion. Expunge Both
Gmail Account
IMAPAccount gmail
Host imap.gmail.com
User dehaeze.thomas@gmail.com
PassCmd "pass email/dehaeze.thomas@gmail.com"
SSLType IMAPS
AuthMechs LOGIN
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore gmail-remote Account gmail MaildirStore gmail-local Path ~/.mail/gmail/ Inbox ~/.mail/gmail/Inbox Channel gmail-Home Master :gmail-remote:"INBOX" Slave :gmail-local:Inbox Channel gmail-Drafts Master :gmail-remote:"[Gmail]/Drafts" Slave :gmail-local:Drafts Channel gmail-Sent Master :gmail-remote:"[Gmail]/Sent Mail" Slave :gmail-local:Sent Channel gmail-Trash Master :gmail-remote:"[Gmail]/Trash" Slave :gmail-local:Trash Channel gmail-All Master :gmail-remote:"[Gmail]/All Mail" Slave :gmail-local:Archive
# Catch-all for everything else: note that the `Patterns` have to exclude both # the remote and local names for all the folders we want to exclude (except # "INBOX", which is special-cased, it would seem). Channel gmail Master :gmail-remote: Slave :gmail-local: # Exclude everything under the internal [Gmail] folder, except the interesting folders Patterns * Patterns !INBOX Patterns ![Gmail]* Patterns !Archive Patterns !Drafts Patterns !Sent Mail Patterns !Trash Patterns !Spam Patterns !Starred
# For doing a quick sync of just the INBOX with `mbsync gmail-download`. Channel gmail-download Master :gmail-remote:"INBOX" Slave :gmail-local:Inbox Create Slave Expunge Slave Sync Pull
ESRF Account
IMAPAccount esrf
Host imaps.esrf.fr
User dehaeze
PassCmd "pass email/thomas.dehaeze@esrf.fr"
SSLType IMAPS
AuthMechs LOGIN
IMAPStore esrf-remote Account esrf MaildirStore esrf-local Path ~/.mail/esrf/ Inbox ~/.mail/esrf/Inbox Channel esrf-Home Master :esrf-remote:"Inbox" Slave :esrf-local:Inbox Channel esrf-Drafts Master :esrf-remote:"Drafts" Slave :esrf-local:Drafts Channel esrf-Archive Master :esrf-remote:"Archive" Slave :esrf-local:Archive Channel esrf-Sent Master :esrf-remote:"Sent" Slave :esrf-local:Sent Channel esrf-Trash Master :esrf-remote:"Trash" Slave :esrf-local:Trash
Channel esrf Master :esrf-remote: Slave :esrf-local:
For doing a quick sync of just the INBOX with `mbsync esrf-download`.
Channel esrf-download
Master :esrf-remote:"INBOX"
Slave :esrf-local:Inbox
Create Slave
Expunge Slave
Sync Pull
ULG Student Account
IMAPAccount ulg
Host mail.ulg.ac.be
User thomas.dehaeze@doct.uliege.be
PassCmd "pass email/thomas.dehaeze@doct.uliege.be"
SSLType IMAPS
AuthMechs LOGIN
IMAPStore ulg-remote Account ulg MaildirStore ulg-local Path ~/.mail/ulg/ Inbox ~/.mail/ulg/Inbox Channel ulg-Home Master :ulg-remote:"Inbox" Slave :ulg-local:Inbox Channel ulg-Drafts Master :ulg-remote:"Drafts" Slave :ulg-local:Drafts Channel ulg-Archive Master :ulg-remote:"Archive" Slave :ulg-local:Archive Channel ulg-Sent Master :ulg-remote:"Sent" Slave :ulg-local:Sent Channel ulg-Trash Master :ulg-remote:"Trash" Slave :ulg-local:Trash
Channel ulg Master :ulg-remote: Slave :ulg-local:
For doing a quick sync of just the INBOX with `mbsync ulg-download`.
Channel ulg-download
Master :ulg-remote:"Inbox"
Slave :ulg-local:Inbox
Create Slave
Expunge Slave
Sync Pull
ULG Personal Account
IMAPAccount uliege
Host mail.ulg.ac.be
User tdehaeze@uliege.be
PassCmd "pass email/tdehaeze@uliege.be"
SSLType IMAPS
AuthMechs LOGIN
IMAPStore uliege-remote Account uliege MaildirStore uliege-local Path ~/.mail/uliege/ Inbox ~/.mail/uliege/Inbox Channel uliege-Home Master :uliege-remote:"Inbox" Slave :uliege-local:Inbox Channel uliege-Drafts Master :uliege-remote:"Drafts" Slave :uliege-local:Drafts Channel uliege-Archive Master :uliege-remote:"Archive" Slave :uliege-local:Archive Channel uliege-Sent Master :uliege-remote:"Sent" Slave :uliege-local:Sent Channel uliege-Trash Master :uliege-remote:"Trash" Slave :uliege-local:Trash
Channel uliege Master :uliege-remote: Slave :uliege-local:
For doing a quick sync of just the INBOX with `mbsync uliege-download`.
Channel uliege-download
Master :uliege-remote:"Inbox"
Slave :uliege-local:Inbox
Create Slave
Expunge Slave
Sync Pull
msmtp
- Send Mails
Defaults
defaults auth on tls on tls_certcheck off
Gmail Account
account gmail host smtp.gmail.com port 587 protocol smtp from dehaeze.thomas@gmail.com user dehaeze.thomas@gmail.com passwordeval "pass email/dehaeze.thomas@gmail.com"
ESRF Account
account esrf host smtps.esrf.fr port 465 protocol smtp from thomas.dehaeze@esrf.fr user dehaeze tls_starttls off passwordeval "pass email/thomas.dehaeze@esrf.fr"
ULG Account
account ulg host smtp.ulg.ac.be port 587 protocol smtp from thomas.dehaeze@doct.uliege.be user s177313 tls_starttls on passwordeval "pass email/thomas.dehaeze@doct.uliege.be"
ULIEGE Account
account uliege host smtp.ulg.ac.be port 587 protocol smtp from tdehaeze@uliege.be user u231244 tls_starttls on passwordeval "pass email/tdehaeze@uliege.be"
Default Account
account default : gmail
mu
- Mail Indexer
Mu
(github) it used as a “maildir indexer/searcher”.
Useful commands are described in the Cheat-sheet.
For instance, to find mails with pdf
attachments:
mu find 'mime:application/pdf'
neomutt
- Mail Client
Bindings
Unding all the key bindings
bind generic,pager,editor,index a noop bind generic,pager,editor,index b noop bind generic,pager,editor,index c noop bind generic,pager,editor,index d noop bind generic,pager,editor,index e noop bind generic,pager,editor,index f noop bind generic,pager,editor,index g noop bind generic,pager,editor,index h noop bind generic,pager,editor,index i noop bind generic,pager,editor,index j noop bind generic,pager,editor,index k noop bind generic,pager,editor,index l noop bind generic,pager,editor,index m noop bind generic,pager,editor,index n noop bind generic,pager,editor,index o noop bind generic,pager,editor,index p noop bind generic,pager,editor,index q noop bind generic,pager,editor,index r noop bind generic,pager,editor,index s noop bind generic,pager,editor,index t noop bind generic,pager,editor,index u noop bind generic,pager,editor,index v noop bind generic,pager,editor,index w noop bind generic,pager,editor,index x noop bind generic,pager,editor,index y noop bind generic,pager,editor,index z noop bind generic,pager,editor,index A noop bind generic,pager,editor,index B noop bind generic,pager,editor,index C noop bind generic,pager,editor,index D noop bind generic,pager,editor,index E noop bind generic,pager,editor,index F noop bind generic,pager,editor,index G noop bind generic,pager,editor,index H noop bind generic,pager,editor,index I noop bind generic,pager,editor,index J noop bind generic,pager,editor,index K noop bind generic,pager,editor,index L noop bind generic,pager,editor,index M noop bind generic,pager,editor,index N noop bind generic,pager,editor,index O noop bind generic,pager,editor,index P noop bind generic,pager,editor,index Q noop bind generic,pager,editor,index R noop bind generic,pager,editor,index S noop bind generic,pager,editor,index T noop bind generic,pager,editor,index U noop bind generic,pager,editor,index V noop bind generic,pager,editor,index W noop bind generic,pager,editor,index X noop bind generic,pager,editor,index Y noop bind generic,pager,editor,index Z noop bind generic,pager,editor,index <Tab> noop bind generic,pager,editor,index <Space> noop bind generic,pager,editor,index <PageUp> noop bind generic,pager,editor,index <PageDown> noop bind generic,pager,editor,index <Home> noop bind generic,pager,editor,index <End> noop bind generic,pager,editor,index <Insert> noop bind generic,pager,editor,index <Delete> noop bind generic,pager,editor,index <Up> noop bind generic,pager,editor,index <Down> noop bind generic,pager,editor,index <Left> noop bind generic,pager,editor,index <Right> noop bind generic,pager,editor,index <Enter> noop bind generic,pager,editor,index <Return> noop bind generic,pager,editor,index | noop bind generic,pager,editor,index 1 noop bind generic,pager,editor,index 2 noop bind generic,pager,editor,index 3 noop bind generic,pager,editor,index 4 noop bind generic,pager,editor,index 5 noop bind generic,pager,editor,index 6 noop bind generic,pager,editor,index 7 noop bind generic,pager,editor,index 8 noop bind generic,pager,editor,index 9 noop bind generic,pager,editor,index 0 noop bind generic,pager,editor,index ! noop bind generic,pager,editor,index @ noop bind generic,pager,editor,index $ noop bind generic,pager,editor,index % noop bind generic,pager,editor,index ^ noop bind generic,pager,editor,index & noop bind generic,pager,editor,index * noop bind generic,pager,editor,index ( noop bind generic,pager,editor,index ) noop bind generic,pager,editor,index \Ca noop bind generic,pager,editor,index \Cb noop bind generic,pager,editor,index \Cc noop bind generic,pager,editor,index \Cd noop bind generic,pager,editor,index \Ce noop bind generic,pager,editor,index \Cf noop bind generic,pager,editor,index \Cg noop bind generic,pager,editor,index \Ch noop bind generic,pager,editor,index \Ci noop bind generic,pager,editor,index \Cj noop bind generic,pager,editor,index \Ck noop bind generic,pager,editor,index \Cl noop bind generic,pager,editor,index \Cm noop bind generic,pager,editor,index \Cn noop bind generic,pager,editor,index \Co noop bind generic,pager,editor,index \Cp noop bind generic,pager,editor,index \Cq noop bind generic,pager,editor,index \Cr noop bind generic,pager,editor,index \Cs noop bind generic,pager,editor,index \Ct noop bind generic,pager,editor,index \Cu noop bind generic,pager,editor,index \Cv noop bind generic,pager,editor,index \Cw noop bind generic,pager,editor,index \Cx noop bind generic,pager,editor,index \Cy noop bind generic,pager,editor,index \Cz noop bind generic,pager,editor,index \CA noop bind generic,pager,editor,index \CB noop bind generic,pager,editor,index \CC noop bind generic,pager,editor,index \CD noop bind generic,pager,editor,index \CE noop bind generic,pager,editor,index \CF noop bind generic,pager,editor,index \CG noop bind generic,pager,editor,index \CH noop bind generic,pager,editor,index \CI noop bind generic,pager,editor,index \CJ noop bind generic,pager,editor,index \CK noop bind generic,pager,editor,index \CL noop bind generic,pager,editor,index \CM noop bind generic,pager,editor,index \CN noop bind generic,pager,editor,index \CO noop bind generic,pager,editor,index \CP noop bind generic,pager,editor,index \CQ noop bind generic,pager,editor,index \CR noop bind generic,pager,editor,index \CS noop bind generic,pager,editor,index \CT noop bind generic,pager,editor,index \CU noop bind generic,pager,editor,index \CV noop bind generic,pager,editor,index \CW noop bind generic,pager,editor,index \CX noop bind generic,pager,editor,index \CY noop bind generic,pager,editor,index \CZ noop bind generic,pager,editor,index \C<Tab> noop bind generic,pager,editor,index \C<Space> noop bind generic,pager,editor,index \C<PageUp> noop bind generic,pager,editor,index \C<PageDown> noop bind generic,pager,editor,index \C<Home> noop bind generic,pager,editor,index \C<End> noop bind generic,pager,editor,index \C<Insert> noop bind generic,pager,editor,index \C<Delete> noop bind generic,pager,editor,index \C<Up> noop bind generic,pager,editor,index \C<Down> noop bind generic,pager,editor,index \C<Left> noop bind generic,pager,editor,index \C<Right> noop bind generic,pager,editor,index \C<Enter> noop bind generic,pager,editor,index \C<Return> noop bind generic,pager,editor,index \C1 noop bind generic,pager,editor,index \C2 noop bind generic,pager,editor,index \C3 noop bind generic,pager,editor,index \C4 noop bind generic,pager,editor,index \C5 noop bind generic,pager,editor,index \C6 noop bind generic,pager,editor,index \C7 noop bind generic,pager,editor,index \C8 noop bind generic,pager,editor,index \C9 noop bind generic,pager,editor,index \C0 noop bind generic,pager,editor,index \C! noop bind generic,pager,editor,index \C$ noop bind generic,pager,editor,index \C% noop bind generic,pager,editor,index \C^ noop bind generic,pager,editor,index \C& noop bind generic,pager,editor,index \C* noop bind generic,pager,editor,index \C( noop bind generic,pager,editor,index \C) noop bind generic,pager,editor,index <Esc>a noop bind generic,pager,editor,index <Esc>b noop bind generic,pager,editor,index <Esc>c noop bind generic,pager,editor,index <Esc>d noop bind generic,pager,editor,index <Esc>e noop bind generic,pager,editor,index <Esc>f noop bind generic,pager,editor,index <Esc>g noop bind generic,pager,editor,index <Esc>h noop bind generic,pager,editor,index <Esc>i noop bind generic,pager,editor,index <Esc>j noop bind generic,pager,editor,index <Esc>k noop bind generic,pager,editor,index <Esc>l noop bind generic,pager,editor,index <Esc>m noop bind generic,pager,editor,index <Esc>n noop bind generic,pager,editor,index <Esc>o noop bind generic,pager,editor,index <Esc>p noop bind generic,pager,editor,index <Esc>q noop bind generic,pager,editor,index <Esc>r noop bind generic,pager,editor,index <Esc>s noop bind generic,pager,editor,index <Esc>t noop bind generic,pager,editor,index <Esc>u noop bind generic,pager,editor,index <Esc>v noop bind generic,pager,editor,index <Esc>w noop bind generic,pager,editor,index <Esc>x noop bind generic,pager,editor,index <Esc>y noop bind generic,pager,editor,index <Esc>z noop bind generic,pager,editor,index <Esc>A noop bind generic,pager,editor,index <Esc>B noop bind generic,pager,editor,index <Esc>C noop bind generic,pager,editor,index <Esc>D noop bind generic,pager,editor,index <Esc>E noop bind generic,pager,editor,index <Esc>F noop bind generic,pager,editor,index <Esc>G noop bind generic,pager,editor,index <Esc>H noop bind generic,pager,editor,index <Esc>I noop bind generic,pager,editor,index <Esc>J noop bind generic,pager,editor,index <Esc>K noop bind generic,pager,editor,index <Esc>L noop bind generic,pager,editor,index <Esc>M noop bind generic,pager,editor,index <Esc>N noop bind generic,pager,editor,index <Esc>O noop bind generic,pager,editor,index <Esc>P noop bind generic,pager,editor,index <Esc>Q noop bind generic,pager,editor,index <Esc>R noop bind generic,pager,editor,index <Esc>S noop bind generic,pager,editor,index <Esc>T noop bind generic,pager,editor,index <Esc>U noop bind generic,pager,editor,index <Esc>V noop bind generic,pager,editor,index <Esc>W noop bind generic,pager,editor,index <Esc>X noop bind generic,pager,editor,index <Esc>Y noop bind generic,pager,editor,index <Esc>Z noop bind generic,pager,editor,index <Esc><Tab> noop bind generic,pager,editor,index <Esc><Space> noop bind generic,pager,editor,index <Esc><PageUp> noop bind generic,pager,editor,index <Esc><PageDown> noop bind generic,pager,editor,index <Esc><Home> noop bind generic,pager,editor,index <Esc><End> noop bind generic,pager,editor,index <Esc><Insert> noop bind generic,pager,editor,index <Esc><Delete> noop bind generic,pager,editor,index <Esc><Up> noop bind generic,pager,editor,index <Esc><Down> noop bind generic,pager,editor,index <Esc><Left> noop bind generic,pager,editor,index <Esc><Right> noop bind generic,pager,editor,index <Esc><Enter> noop bind generic,pager,editor,index <Esc><Return> noop bind generic,pager,editor,index <Esc>1 noop bind generic,pager,editor,index <Esc>2 noop bind generic,pager,editor,index <Esc>3 noop bind generic,pager,editor,index <Esc>4 noop bind generic,pager,editor,index <Esc>5 noop bind generic,pager,editor,index <Esc>6 noop bind generic,pager,editor,index <Esc>7 noop bind generic,pager,editor,index <Esc>8 noop bind generic,pager,editor,index <Esc>9 noop bind generic,pager,editor,index <Esc>0 noop bind generic,pager,editor,index <Esc>! noop bind generic,pager,editor,index <Esc>@ noop bind generic,pager,editor,index <Esc>$ noop bind generic,pager,editor,index <Esc>% noop bind generic,pager,editor,index <Esc>^ noop bind generic,pager,editor,index <Esc>& noop bind generic,pager,editor,index <Esc>* noop bind generic,pager,editor,index <Esc>( noop bind generic,pager,editor,index <Esc>) noop
Quit Neomutt
bind index,pager,compose Q exit
macro index q "<shell-escape>if [ $TMUX ]; then tmux detach; fi<enter>"
Generic
bind generic Q exit bind generic <Return> select-entry bind generic l select-entry bind generic,index k previous-entry bind generic,index j next-entry bind generic,index 0 first-entry bind generic,index $ last-entry bind generic,index \031 previous-entry # Mouse wheel bind generic,index \005 next-entry # Mouse wheel bind generic,index gg first-entry bind generic,index G last-entry bind generic,index,pager \Cu half-up bind generic,index,pager \Cd half-down bind generic,index,pager \Ce next-line bind generic,index,pager \Cy previous-line
Index and Pager
bind pager k previous-line bind pager j next-line bind index <space> collapse-thread bind index,pager K previous-entry bind index,pager J next-entry bind index l display-message bind index <Return> display-message bind pager l view-attachments bind pager gg top bind pager 0 top bind pager G bottom bind pager $ bottom macro index h "<change-folder>?" "Go back to the list of mailboxes" bind pager h exit bind pager q exit macro index c "<change-folder>?<toggle-mailboxes>" "change folder" bind index,pager u undelete-message bind index,pager P print-message # Compose a new email (not a reply) to the sender 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>" \ "mark all new as read"
bind index za collapse-thread bind index zA collapse-all # Missing :folddisable/foldenable
Write/Reply/Forward mail
bind index,pager p recall-message bind index,pager m mail bind index,pager M resend-message bind index,pager r reply bind index,pager R group-reply bind index,pager b bounce-message bind index,pager f forward-message
Sync Mailbox
bind index,pager s sync-mailbox
Sync email
macro index,pager o "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh<enter>" macro index,pager O "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh -a<enter>"
Make quick html view macro
macro index,pager H "<view-attachments><search>html<enter><view-mailcap><exit>"
Open mail with Vim
macro index,pager V "<view-attachments><search>plain<enter><view-mailcap><exit>"
# bind index,pager U toggle-new
Labels
bind index,pager y edit-label bind index,pager Y modify-labels
Limit
bind index L limit macro index a <limit>all<enter>
Search
bind generic,index,pager / search bind index,pager n search-next bind index,pager N search-opposite
Attachments
bind attach l view-attach
bind attach h exit
bind attach q exit
bind attach <return> view-mailcap
macro attach W <save-entry><kill-line>~/Downloads/<enter>y "Save entry"
Compose
bind compose p postpone-message bind compose R rename-attachment bind compose a attach-file
Open another instance of neomutt in readonly mode while composing
macro compose M "<shell-escape>$TERMINAL -e \"neomutt -R\"<enter>"
Attach multiple files using ranger
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"
Attach file by drooping from GUI
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"
Attach with Ranger Script
tmpfile=/tmp/rangerpick 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-drag-and-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 fi
Send HTML mails using Markdown
Write html emails using markdown
# macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n"
Browser
bind browser l select-entry
macro browser h "<top-page><select-entry>"
bind browser t tag-entry
bind browser q exit
Generic
Enter Command
bind generic,index,pager : enter-command
Copy and move mails
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox" macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
Sidebar
bind index,pager \Cp sidebar-prev bind index,pager \Cn sidebar-next bind index,pager \Co sidebar-open bind index,pager \Ch sidebar-toggle-visible
Reload Configuration
macro generic,index,pager,editor ,<Space> ":source ~/.config/neomutt/neomuttrc\n" "Reload mutt's configuration file"
urlview - Open URL in emails
Use urlview
to extract urls from the mail.
macro attach,compose,index,pager \cw "\ :set my_tmp_pipe_decode=\$pipe_decode\n\ :set pipe_decode\n\ <pipe-message>urlview\n\ :set pipe_decode=\$my_tmp_pipe_decode\n\ :unset my_tmp_pipe_decode\n" \ 'call urlview to extract URLs out of a message'
Searching using Mu
macro index,pager \Cf "<shell-escape>mu find --clearlinks --format=links --linksdir=~/.mail/search " \ "mu find" macro index,pager gf "<change-folder-readonly>~/.mail/search<enter>" \ "mu find results"
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/
macro index,pager S "<pipe-message>$HOME/.config/neomutt/bin/mutt-save-org-link.py\n"
Link mail to orgmode - Script
import sys import email import subprocess import urllib.parse # Parse the email from standard input message_bytes = sys.stdin.buffer.read() message = email.message_from_bytes(message_bytes) # Grab the relevant message headers message_id = urllib.parse.quote(message['message-id'].strip()[1:-1]) subject = message['subject'].replace('[', '{').replace(']', '}').replace('\n', ' ') subject = (subject[:75] + '..') if len(subject) > 75 else subject # Ask emacsclient to save a link to the message p = subprocess.Popen([ 'emacsclient', f'org-protocol://capture?template=pm&url={message_id}&title={subject}' ]) p.wait()
Colors
Basic colors
color normal color021 color000 color error color021 color000 color tilde color021 color000 color message color021 color000 color markers color021 color000 color attachment color021 color000 color search color000 color003 color status color016 color000 color indicator color000 color021 color tree color021 color000 color progress color000 color021 # basic monocolor screen mono bold bold mono underline underline mono indicator reverse mono error bold
Index
color index color021 color000 "~A" # All messages color index brightcolor006 color000 "~N" # New messages color index color020 color000 "~O" # Old messages color index color020 color000 "~Q" # messages that have been replied to color index color021 color000 "~R" # read messages color index color006 color000 "~U" # unread messages color index color021 color000 "~R~p!~F" # messages to me color index brightcolor006 color000 "~N~p!~F" # new messages to me color index brightcolor006 color000 "~U~p!~F" # unread messages to me color index color005 color000 "~F" # flagged messages color index color005 color000 "~F~p" # flagged messages to me color index brightcolor006 color000 "~N~F" # new flagged messages color index brightcolor006 color000 "~N~F~p" # new flagged messages to me color index brightcolor006 color000 "~U~F~p" # new flagged messages to me color index brightcolor000 color001 "~D" # deleted messages color index brightcolor021 color019 "~v~(!~N)" # collapsed thread with no unread color index brightcolor006 color019 "~v~(~N)" # collapsed thread with some unread color index brightcolor006 color019 "~N~v~(~N)" # collapsed thread with unread parent color index brightcolor005 color019 "~v~(~F)!~N" # collapsed thread with flagged, no unread color index brightcolor006 color019 "~v~(~F~N)" # collapsed thread with some unread & flagged color index brightcolor006 color019 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged color index brightcolor005 color019 "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged color index brightcolor000 color001 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial)
Sidebar
color sidebar_indicator color000 color021 # Mailbox is open color sidebar_highlight color000 color003 # Mailbox is highlighted color sidebar_new brightcolor006 color000 # Mailbox contains new mail color sidebar_ordinary color021 color000 # Mailbox contains new mail
Message headers
color hdrdefault color006 color000 color header brightcolor006 color000 "^(From)" color header brightcolor004 color000 "^(Subject)"
Attachments
# Color if the attachment is autoviewed color attach_headers brightgreen default "Autoview" # Color only the brackets around the headers color attach_headers brightyellow default "^\\[--" color attach_headers brightyellow default "--]$" # Color the mime type and the size color attach_headers green default "Type: [a-z]+/[a-z0-9\-]+" color attach_headers green default "Size: [0-9\.]+[KM]" # Color GPGME signature checks color attach_headers brightgreen default "Good signature from.*" color attach_headers brightred default "Bad signature from.*" color attach_headers brightred default "BAD signature from.*" color attach_headers brightred default "Note: This key has expired!" color attach_headers brightmagenta default "Problem signature from.*" color attach_headers brightmagenta default "WARNING: This key is not certified with a trusted signature!" color attach_headers brightmagenta default " There is no indication that the signature belongs to the owner." color attach_headers brightmagenta default "can't handle these multiple signatures" color attach_headers brightmagenta default "signature verification suppressed" color attach_headers brightmagenta default "invalid node with packet of type"
Body
color quoted color002 color000 color quoted1 color003 color000 color quoted2 color004 color000 color quoted3 color005 color000 color quoted4 color006 color000 color signature color021 color000 color bold brightcolor021 color000 color underline brightcolor021 color000 color normal color021 color000
PGP
color body color001 color000 "(BAD signature)" color body color002 color000 "(Good signature)" color body color002 color000 "^gpg: Good signature .*" color body color002 color000 "^gpg: " color body color002 color000 "^gpg: BAD signature from.*"
Urls
color body color006 color000 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
Emails
color body color006 color000 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
Contacts with Mu
set query_command="mu cfind '%s' -o mutt-ab" bind editor <Tab> complete-query
Paths
set folder = ~/.mail # mail location set alias_file = ~/.config/neomutt/alias # where to store aliases set header_cache = ~/.config/neomutt/cache/headers # where to store headers set message_cachedir = ~/.config/neomutt/cache/bodies # where to store bodies set certificate_file = ~/.config/neomutt/certificates # where to store certs set mailcap_path = ~/.config/neomutt/mailcap # entries for filetypes set tmpdir = ~/.config/neomutt/temp # where to keep temp files
https://unix.stackexchange.com/questions/20456/pretty-print-mails-from-mutt
# set print_command="/usr/bin/muttprint %s -p ctb110c1u"
Accounts
set spoolfile = "+gmail/Inbox" # Default inbox set realname = "Dehaeze Thomas" set from = "dehaeze.thomas@gmail.com" folder-hook gmail/* source ~/.config/neomutt/accounts/gmail folder-hook esrf/* source ~/.config/neomutt/accounts/esrf folder-hook ulg/* source ~/.config/neomutt/accounts/ulg folder-hook uliege/* source ~/.config/neomutt/accounts/uliege macro index,pager gl "<change-folder>+uliege/Inbox<enter>" "go to inbox" macro index,pager gu "<change-folder>+ulg/Inbox<enter>" "go to inbox" macro index,pager ge "<change-folder>+esrf/Inbox<enter>" "go to inbox" macro index,pager gm "<change-folder>+gmail/Inbox<enter>" "go to inbox"
Gmail
Configuration
set from = "dehaeze.thomas@gmail.com" set sendmail = "~/.config/neomutt/bin/send_mail.sh gmail" # Other special folders. set mbox = "+gmail/Archive" unset record # Don't copy send message to Sent folder: Gmail does that for us set postponed = "+gmail/Drafts" set signature = "~/.config/neomutt/accounts/gmail.signature" macro index,pager d \ "<save-message>+gmail/Archive<enter>" \ "Move message to the Archive" macro index,pager D \ "<save-message>+gmail/Trash<enter>" \ "Move message to the Trash"
Signature
Thomas Dehaeze
This empty code block is used to add a new line after signature
ESRF
Configuration
set from = "thomas.dehaeze@esrf.fr" set sendmail = "~/.config/neomutt/bin/send_mail.sh esrf" # Other special folders. set mbox = "+esrf/Archive" set record = "+esrf/Sent" set postponed = "+esrf/Drafts" set signature = "~/.config/neomutt/accounts/esrf.signature" macro index,pager d \ "<save-message>+esrf/Archive<enter>" \ "Move message to the Archive" macro index,pager D \ "<save-message>+esrf/Trash<enter>" \ "Move message to the Trash"
Signature
Thomas Dehaeze
This empty code block is used to add a new line after signature
ULG
Configuration
set from = "thomas.dehaeze@doct.uliege.be" set sendmail = "~/.config/neomutt/bin/send_mail.sh ulg" # Other special folders. set mbox = "+ulg/Archive" set record = "+ulg/Sent" set postponed = "+ulg/Drafts" set signature = "~/.config/neomutt/accounts/ulg.signature" macro index,pager d \ "<save-message>+ulg/Archive<enter>" \ "Move message to the Archive" macro index,pager D \ "<save-message>+ulg/Trash<enter>" \ "Move message to the Trash"
Signature
Thomas Dehaeze
This empty code block is used to add a new line after signature
ULIEGE
Configuration
set from = "tdehaeze@uliege.be" set sendmail = "~/.config/neomutt/bin/send_mail.sh uliege" # Other special folders. set mbox = "+uliege/Archive" set record = "+uliege/Sent" set postponed = "+uliege/Drafts" set signature = "~/.config/neomutt/accounts/uliege.signature" macro index,pager d \ "<save-message>+uliege/Archive<enter>" \ "Move message to the Archive" macro index,pager D \ "<save-message>+uliege/Trash<enter>" \ "Move message to the Trash"
Signature
Thomas Dehaeze
This empty code block is used to add a new line after signature
Basic Options
set wait_key = no # shut up, mutt set mbox_type = Maildir # mailbox type set help = no # No top bar set timeout = 3 # idle time before scanning set sleep_time = 0 # how long NeoMutt may wait after an error message set mail_check = 0 # minimum time between scans set delete # don't ask, just do unset confirmappend # don't ask, just do! set quit # don't ask, just do!! set mark_old = no # read/new is good enough for me set beep_new # bell on new mails # set pipe_decode # strip headers and eval mimes when piping set thorough_search # strip headers and eval mimes before searching set send_charset="us-ascii:utf-8:iso-8859-1" set sendmail_wait = 0 # no please don't silently fail, email is important set use_from # respect the From: address the editor sends back # Use Vim to compose email, with a few default options. set editor = "nvim -c '/\\n--' -c ':noh' -c 'startinsert'"
View Options
Status Bar
set status_on_top = no set status_chars = " *%A" set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───"
Index View Options
set date_format = "%d/%m/%y %H:%M" set index_format = "[%Z] %D %-20.20F %s" set sort = threads # like gmail set sort_aux = reverse-last-date-received # like gmail set uncollapse_jump # don't collapse on an unread message set sort_re # thread based on regex set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" set folder_format = "%2C %t %N %8s %f"
Pager View Options
set pager_index_lines = 10 # number of index lines to show set pager_context = 3 # number of context lines to show set pager_stop # don't go to next message automatically set menu_scroll # scroll in menus set tilde # show tildes like in vim set markers = no # no ugly plus signs set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" auto_view text/html # view html automatically alternative_order text/plain text/enriched text/html # save html for last
Compose View Options
set sig_dashes # dashes before sig set sig_on_top # the signature is just below the response set edit_headers # show headers when composing set fast_reply # skip to compose when replying set fcc_attach # save attachments with the body set attribution = "On %d, %n wrote:" # format of quoting header set reply_to # reply to Reply to: field set reverse_name # reply as whomever it was to set include # include message in replies
Forward
set forward_format = "Fwd: %s" # format of subject when forwarding set forward_decode # decode when forwarding set forward_quote # include message in forwards
Headers
ignore * # ignore all headers unignore from: to: cc: date: subject: # show only these unhdr_order * hdr_order from: to: cc: date: subject: # and in this order
Sidebar
General Config
# Should the Sidebar be shown? set sidebar_visible = yes # How wide should the Sidebar be in screen columns? # Note: Some characters, e.g. Chinese, take up two columns each. set sidebar_width = 20 # Should the mailbox paths be abbreviated? set sidebar_short_path = yes # When abbreviating mailbox path names, use any of these characters as path # separators. Only the part after the last separators will be shown. # For file folders '/' is good. For IMAP folders, often '.' is useful. set sidebar_delim_chars = '/.' # If the mailbox path is abbreviated, should it be indented? set sidebar_folder_indent = yes # Indent mailbox paths with this string. set sidebar_indent_string = ' ' # Make the Sidebar only display mailboxes that contain new, or flagged, # mail. set sidebar_new_mail_only = no # Any mailboxes that are whitelisted will always be visible, even if the # sidebar_new_mail_only option is enabled. # sidebar_whitelist '/home/user/mailbox1' # sidebar_whitelist '/home/user/mailbox2' # When searching for mailboxes containing new mail, should the search wrap # around when it reaches the end of the list? set sidebar_next_new_wrap = no # Show the Sidebar on the right-hand side of the screen set sidebar_on_right = no # The character to use as the divider between the Sidebar and the other Mutt # panels. # Note: Only the first character of this string is used. set sidebar_divider_char = '│' # Enable extended buffy mode to calculate total, new, and flagged # message counts for each mailbox. set mail_check_stats # Display the Sidebar mailboxes using this format string. set sidebar_format = '%D %* %?N?[%N]?' # Sort the mailboxes in the Sidebar using this method: # count - total number of messages # flagged - number of flagged messages # new - number of new messages # path - mailbox path # unsorted - do not sort the mailboxes set sidebar_sort_method = 'unsorted'
Mailboxes to show in the sidebar.
named-mailboxes " Search" =search named-mailboxes " GMAIL" =empty/gmail named-mailboxes " Inbox" =gmail/Inbox named-mailboxes " Sent" =gmail/Sent named-mailboxes " Drafts" =gmail/Drafts named-mailboxes " ﮊ Archive" =gmail/Archive named-mailboxes " Trash" =gmail/Trash named-mailboxes " ESRF" =empty/esrf named-mailboxes " Inbox" =esrf/Inbox named-mailboxes " Sent" =esrf/Sent named-mailboxes " Drafts" =esrf/Drafts named-mailboxes " ﮊ Archive" =esrf/Archive named-mailboxes " Trash" =esrf/Trash named-mailboxes " ULG" =empty/ulg named-mailboxes " Inbox" =ulg/Inbox named-mailboxes " Sent" =ulg/Sent named-mailboxes " Drafts" =ulg/Drafts named-mailboxes " ﮊ Archive" =ulg/Archive named-mailboxes " Trash" =ulg/Trash named-mailboxes " ULIEGE" =empty/uliege named-mailboxes " Inbox" =uliege/Inbox named-mailboxes " Sent" =uliege/Sent named-mailboxes " Drafts" =uliege/Drafts named-mailboxes " ﮊ Archive" =uliege/Archive named-mailboxes " Trash" =uliege/Trash
unset move
Attachments
Attachment View Options
set attach_format = "[%D %t] %2n [%-7.7m/%10.10M] %.40d %> [%s] "
Open Attachment
Program to open is defined in the mailcap
file.
A script openfile.sh
is used to open files with the default application using xdg-open
.
Attach multiple files at once
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.
Forgotten Attachment
set abort_noattach = ask-yes set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>"
Scripts and other config files
Send Mail Script
msmtp -a $1 ${@:2} && \ if [ $TMUX ]; then tmux split -v -l 1 mbsync $1-Sent && tmux select-pane -U else mbsync $1-Sent fi
Sync Mail Script
if [ $TMUX ]; then tmux split -v -l 1 checkmail $1 && tmux select-pane -U else checkmail $1 fi
Openfile Scripts
base=$(basename "$1") ext="${base##*.}" file=$(mktemp -u --suffix=".$ext") rm -f "$file" cp "$1" "$file" setsid xdg-open "$file" >/dev/null 2>&1 &
urlview Config
REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):]
COMMAND nohup qutebrowser %s </dev/null &>/dev/null &
Mailcap
Generic
text/plain; nvim %s video/*; setsid mpv --quiet %s & image/*; sxiv -a -b %s & application/pdf; zathura %s & audio/*; /usr/bin/xdg-open %s; copiousoutput text/html; export DISPLAY=:0 && setsid qutebrowser %s; nametemplate=%s.html text/html; lynx -width ${COLUMNS:-80} -dump %s; nametemplate=%s.html; copiousoutput; text/calendar; khal import --batch -a home %s && khal printics %s; copiousoutput; application/ics; khal import --batch -a home %s && khal printics %s; copiousoutput;
Libreoffice
application/docx; libreoffice %s --nologo &; copiousoutput; application/doc; libreoffice --nologo %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