Используйте альтернативный селектор файлов в Mutt

13

В mutt возможно ли использовать файловый браузер, такой как vifm или ranger (возможно, в tmux split), вместо файлового браузера по умолчанию, чтобы выбрать файл для вложения в электронное письмо?

Rastapopoulos
источник
3
Некоторые идеи: mutt-users.mutt.narkive.com/IG5uScnD/external-file-manager
Аркадиуш Драбчик,
1
Актуальная проблема для Матта.
Матиас Браун

Ответы:

2

Вы можете открыть 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 для составления письма, к которому уже прикреплены все выбранные файлы. Если вы хотите прикрепить файлы из разных папок, я не знаю, как это сделать, кроме как собирать их в одну папку.

Я хотел бы отдать должное тому, кто создал функцию, но я больше не знаю, откуда она взялась. Я знаю, что это был не я.

Джон Флуд
источник
Спасибо за Ваш ответ! Я только что опубликовал альтернативный, более упрощенный метод, который может показаться вам интересным.
Rastapopoulos
Большое спасибо за альтернативу, однако, я думаю, что я слишком предан рейнджеру и, в то же время, мне не хватает навыков, чтобы адаптировать ваш скрипт к рейнджеру!
Джон Флуд,
Я адаптировал скрипт, который выложил для рейнджера. Единственным недостатком является то, что он не работает для имен файлов с пробелами в них. (Это просто моя версия Mutt или невозможно ввести символ «Пробел» в меню «Прикрепить файл»?
Rastapopoulos
Хороший трюк, и вы также можете сделать :shell mutt -a %fпрямо из ranger.
Растапопулос
1
Ваше объяснение «буквальный символ возврата» сработало! Ваш оригинальный сценарий теперь работает для меня. Спасибо @Rastapopoulos!
Джон Флад
1

Ответ @John Flood вдохновил меня задуматься над этим, и я нашел следующий обходной путь, который, похоже, работает очень хорошо.

Сохраните следующий скрипт как mutt_attachгде-нибудь $PATH, с буквенным Returnсимволом вместо ^Mvim, это достигается нажатием <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"
Rastapopoulos
источник