четверг, 1 апреля 2010 г.

Грязный хак для Mutt

UPD: Глючное и не всегда работающее.
К почтовому клиенту mutt я привык, и менять на другой не горю желанием. Однако среди его некоторых недостатоков есть один существенный (для меня) -- отсылка письма у него блокирующая: не позволяет одновременно отвечать на письмо и в это же время читать остальные письма (а иногда нужно). Открывать "руками" отдельное окно, запускать mutt с нужным почтовым ящиком довольно утомительно, а зря держать запущенную копию программы в соседнем окошке терминала не удобно.
Но mutt позволяет сконструировать нужное решение самому, чем я и воспользовался: добавил альтернативные биндинги для reply и list-reply, которые сами открывают новое окно терминала с mutt, в котором немедленно запускается редактирование ответа на нужное письмо. Старое окно mutt не блокируется -- можно спокойно пользоваться для работы с остальными сообщениями.

Т.е. нужно заставить mutt отложить текущее сообщение в postponed, а новой запущенной программе приказать использовать последнее отложенное сообщение. Быстрый и грязный хак, но мне пока достаточно.

.muttrc
set my_editor="vim -c 'set et sts=4 tw=70 co=80 fo=cql autoindent nobackup'"
set editor=$my_editor
...
# Custom non-blocking Reply
macro index R ":unset editor\rr\n\n.\nP:set editor=\"$my_editor\"\n!process-last-postponed\n"
macro pager R ":unset editor\rr\n\n.\nP:set editor=\"$my_editor\"\n!process-last-postponed\n"
# Custom non-blocking List-Reply
macro index L ":unset editor\rL\n\n.\nP:set editor=\"$my_editor\"\n!process-last-postponed\n"
macro pager L ":unset editor\rL\n\n.\nP:set editor=\"$my_editor\"\n!process-last-postponed\n"
$HOME/bin/process-last-postponed
xterm -e mutt -e "push '<recall-message><last-entry><enter>'" &
Все.

Комментариев нет: