
Я хотел бы повторить функцию GMail "Фильтровать сообщения, подобные этим". По сути, я надеюсь привязать ключ в mutt, например *, и это может "Ограничить" отображаемые сообщения теми, которые были отправлены тем же отправителем (или отправителями, если есть префикс ;)
macro index * "<enter-command>set sender=display-address<enter><limit>$sender<enter>" "Filter Messages Like"
Я пробую подход с макросами выше, но не могу прочитать адрес отправителя в переменную в Mutt. Является ли макрос правильным способом здесь? и как правильно читать заголовки сообщений в переменные?
решение1
К сожалению, невозможно заполнить переменную из функции. Даже если вы можете вызвать функцию <display-address>
:push @
или :exec display-address
использовать lua в neomutt – это отображается в нижней панели, но переменная остается пустой.
После обсуждения этой проблемы на IRC-канале #neomutt я пришел к выводу, что лучшим вариантом на данный момент является использование временного файла.
- Этот макрос перенаправит сообщение в formail, который возвращает
from header
, передает его в awk, чтобы получить только адрес электронной почты, и перенаправляет вывод в /tmp/sender. - установите переменную $my_sender с содержимым /tmp/sender
- ограничить индекс с помощью $my_sender
macro index,pager * \
"<pipe-message>formail -X from:|awk -F'[<>]' '{print $2}'>/tmp/sender<enter>\
:set my_sender=\"`cat /tmp/sender`\"\n\
l~f \"$my_sender\"\n" \
"Filter Messages Like"
Требования: formail
или вы можете использовать любую другую команду для анализа адреса электронной почты из сообщения.
EDIT: работает только один раз за сеанс neomutt. Вероятно, проблема с расширением переменной внутри макроса, поскольку она в двойных кавычках, и это должно быть так. Так что это все еще, вероятно, невозможно, по крайней мере, легко.
решение2
Этот ответ основан наЯкуб Йиндраответ. К сожалению, у меня не было достаточно репутации, чтобы опубликовать это как комментарий к его правильному ответу, но я подумал, что это может помочь другим, кто столкнется с той же проблемой.
Это обходной путь для его макроса, который может решить проблему однократного расширения:
macro index,pager k "<pipe-message>formail -X from:|awk -F'[<>]' '{print \"set my_tmp_pipe_decode=\\\"\"$2\"\\\"\" }'>/tmp/sender<enter>:source /tmp/sender<enter>l~f $my_tmp_pipe_decode<enter>" "Filter Messages Like"
Главное отличие в том, что вместо cat
ing файла я попытался сделать source
это. Таким образом, у вас не будет проблемы с расширением переменной, и это будет работать столько раз, сколько вам нужно в одном сеансе. По-видимому, source
это не одноразовое расширение по сравнению с cat
тем, что это внутренняя команда mutt, однако, cat
это внешняя команда bash, которая должна быть расширена.
И снова следует отдать должное Якубу Джиндре.