Ein Feature das ich bei
mutt von Anfang an praktisch fand, ist limit. Damit kann man nur Mails nach bestimmten Kriterien einblenden und den Rest ausblenden. Es gibt dazu jede Menge patterns, die alle mit "~" anfangen. Also z.B. ~f mail@domain.invalid zeigt nur die mails an, die von dieser Adresse erhalten wurden. Wenn man das einmal gemacht hat, braucht man suchen eigentlich nicht mehr...
In verschiedenen Mailinglisten limitiere ich die View dann hin- und wieder mal nach einem bestimmten Autoren. Dazu ging ich immer folgendermaßen vor:
- markiere die Mail im Index
- öffne die Mail im Pager
- kopiere die Mailadresse
- beende den Pager
- im Index "l" drücken, "~f" eingeben und Mailadresse hintendran kopieren
Das fand ich etwas kompliziert. Da es keine einfachere Lösung in Mutt selber gibt, habe ich das mit einem Makro gelöst:
CODE:
macro index A |'~/bin/mutt_address.sh ~/temp/mutt_source.txt'
\n:"source ~/temp/mutt_source.txt\n" "limit message view
by selected author"
Hier wird im Index beim Drücken von "A" die selektierte Nachricht an das kleine Shellskript
mutt_address.sh übergeben. Diesem Shellskript wird als weiteres Argument eine temporäre Datei übergeben, in das die auszuführende Befehlskette für Mutt eingetragen wird. Anschließend wird diese temporäre Datei von Mutt eingelesen und ausgeführt.
Das Shellskript sieht so aus:
-----------------------------------------------------------
#!/bin/sh
FORM=`which formail`
CAT=`which cat`
ARGS="`cat`"
OUTPUT=`echo "${ARGS}"|"${FORM}" -tzx "From:" | sed 's/.*<//;s/>//'`
TEMP="$1"
exec >"${TEMP}" || exit 1
cat <<EOF
push "<limit>~f \"${OUTPUT}\"<enter>"'
EOF
-----------------------------------------------------------
Das Skript nimmt also die übergebene Mail und übergibt diese
formail. Formail wird dabei angewiesen das "From:" Feld auszugeben. Als Output bekommt man dann den kompletten Feldinhalt, also zum Beispiel "Vorname Nachname <vorname.nachname@domain.invalid>". So kann das Mutt aber anscheinend nicht korrekt verarbeiten. Also wird die Ausgabe von formail noch an sed gepipt, welches nur die E-Mail Adresse zwischen "<>" ausgibt.
Anschließend wird in die übergebene temporäre Datei die Befehlskette "push <limit> ~f Adresse" geschrieben. Wenn diese Datei dann von Mutt gelesen wird, wird die Aktion limit ~f Adresse ausgeführt.
Das funktioniert schon ganz gut. Das einzige nervige ist nur, dass bei Ausführung eines externen Skriptes vor dessen Ende immer von Mutt "Press any key to continue..." ausgegeben wird und auf eine Useraktion gewartet wird. Um das zu beheben, wird noch "set wait_key=no" in die muttrc eingetragen.
Jetzt mutt neustarten (oder muttrc neu einlesen lassen), auf eine Message gehen, "A" drücken und freuen.