В mutt возможно ли использовать файловый браузер, такой как vifm или ranger (возможно, в tmux split), вместо файлового браузера по умолчанию, чтобы выбрать файл для вложения в электронное письмо?
В mutt возможно ли использовать файловый браузер, такой как vifm или ranger (возможно, в tmux split), вместо файлового браузера по умолчанию, чтобы выбрать файл для вложения в электронное письмо?
Ответы:
Вы можете открыть ranger в tmux split (предложенную вами возможность), выбрать файл, который нужно прикрепить, скопировать имя файла с его путем, yp
а затем вернуться в окно подключения Mutt, нажать a
и вставить путь вложения и имя файла в поле линия, которая открывается в нижней части окна вложения и нажмите Enter
.
Что касается вопроса о пробелах в имени файла (в ответ на комментарий @Rastapopolous), я понял, что у меня есть сильная привычка не использовать их, но повторно тестируя вышеупомянутый метод вставки пути из рейнджера, я обнаружил, что когда В имени файла есть пробелы, по какой-то причине в имени вложения, вставленного в Mutt, повторяется часть добавленного имени! Можно удалить пробел, чтобы удалить «придаток», и вложение легко отправляется даже с пробелами, которых не было. Я проверил копию пути из ranger в vim, и он вставляется правильно, но не в mutt.
Поскольку я обычно использую tmux, я считаю этот метод относительно простым.
В качестве альтернативы и независимо от tmux у меня также есть следующий скрипт в моем .bashrc:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Это полезно, если вы знаете, что приложите, прежде чем писать электронное письмо. Таким образом, в Ranger просто выбираете файл, набираете текст, s
чтобы открыть командную строку оболочки, и указывает выбранный файл %f
, то есть:
:shell mail_attach %f
Нажатие Enter
откроет редактор Mutt для составления электронного письма, к которому уже прикреплен выбранный файл. Однако затем необходимо изменить адрес электронной почты получателя на нужный. Возможно, есть способ изменить функцию, чтобы открыть редактор электронной почты с пустым полем «Кому», но я не знаю достаточно. Тем не менее, я не считаю это большим делом.
Для нескольких файлов, если они находятся в одной и той же папке, я выбираю их все, а затем нажимаю клавишу @
быстрого доступа, чтобы открыть командную строку оболочки, например, где %s
есть ссылка на выбранные файлы:
:shell %s
Затем нужно просто вставить mail_attach
до %s
и нажать Enter, чтобы открыть сообщение Mutt для составления письма, к которому уже прикреплены все выбранные файлы. Если вы хотите прикрепить файлы из разных папок, я не знаю, как это сделать, кроме как собирать их в одну папку.
Я хотел бы отдать должное тому, кто создал функцию, но я больше не знаю, откуда она взялась. Я знаю, что это был не я.
:shell mutt -a %f
прямо из ranger
.
Ответ @John Flood вдохновил меня задуматься над этим, и я нашел следующий обходной путь, который, похоже, работает очень хорошо.
Сохраните следующий скрипт как mutt_attach
где-нибудь $PATH
, с буквенным Return
символом вместо ^M
(в vim
, это достигается нажатием <c-v><Return>
в режиме вставки).
#!/usr/bin/env bash
tmp=$(mktemp)
vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"
while IFS="" read -r file; do
tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"
В .muttrc
, определить
macro compose \CA "!mutt_attach\n"
Теперь , если вы откроете mutt
в первой части окна Email
в tmux
сессии с именем email
(созданной, например, команда tmux new -s email
. Указание сеанса, окно и панель удобна в основном для отладки) и нажмите Control+A
на создание письма меню, vifm
откроются в choose-files
режиме и выбранный файл будет автоматически прикреплен.
Более того, это позволяет пометить несколько файлов в режиме vifm
использования t
(или в визуальном режиме) и при ranger
использовании Space
, а также прикрепить их все одновременно!
РЕДАКТИРОВАТЬ : я заметил, что код не работает для имен файлов, которые содержат пробелы, так как кажется невозможным ввести пробел в меню составления вложений в моей версии Mutt ... Вот (несколько уродливый) обходной путь:
#!/usr/bin/env bash
# File in which to store the list of filenames to attach
tmp=$(mktemp)
vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"
while IFS="" read -r file; do
# Workaround for filenames that contain spaces
if [[ "$file" = *" "* ]]; then
file_no_space=/tmp/$(basename "$file" | sed 's/ /_/g')
ln -s -f "$file" "$file_no_space"
file="$file_no_space"
fi
tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"