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

Для GNU sed :

sed 's/scaffold\([0-9]*\)_.*/echo "&" >> "\1-scaf.txt"/e' infile
13
27.03.2018, 17:57
2 ответа

Ответ @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"
1
27.01.2020, 19:54

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

Что касается проблемы с пробелами в имени файла (в ответ на комментарий @Rastapopolous ), я понял, что у меня есть сильная привычка не использовать их, а повторно -протестировать описанный выше метод вставки путь от рейнджера, я обнаружил, что когда имя файла по какой-то причине содержит пробелы,к имени вложения, вставленному в mutt, добавлено повторение части имени! Можно удалить «придаток» назад, и вложение будет легко отправлено, даже если пробелы не экранированы. Я проверил копию пути из рейнджера в vim, и она вставляется правильно, но не в mutt.

Поскольку я обычно использую tmux, я считаю этот метод относительно простым.

В качестве альтернативы и независимо от tmux у меня также есть следующий скрипт в моем.bashrc:

# email an attachment
function mail_attach ()
{
    mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}

export -f mail_attach

Это полезно, когда вы знаете, что прикрепите письмо, прежде чем создавать электронное письмо. Таким образом, внутри рейнджера нужно просто выбрать файл, ввести s, чтобы открыть командную строку оболочки, и указать выбранный файл с помощью %f, то есть:

:shell mail_attach %f

Нажатие Enterоткроет редактор mutt для составления электронного письма, к которому уже прикреплен выбранный файл. Однако затем необходимо изменить адрес электронной почты получателя на желаемый. Возможно, есть способ изменить функцию открытия редактора электронной почты с пустым полем «Кому», но я этого недостаточно знаю. Однако я не нахожу это большим делом.

Для нескольких файлов, если они находятся в одной папке, я выбираю их все, а затем нажимаю @, что является ярлыком рейнджера, чтобы открыть командную строку оболочки, как здесь, где %s— ссылка на выбранные файлы:

:shell %s

Затем нужно просто вставить mail_attachперед %sи нажать Enter, чтобы открыть mutt для составления электронного письма, к которому уже прикреплены все выбранные файлы. Если вы хотите прикрепить файлы из разных папок, я не знаю, как это сделать, кроме как собрать их в одну папку.

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

2
27.01.2020, 19:54

Теги

Похожие вопросы