Використовуйте альтернативний селектор файлів у mutt


13

У собачці , можна використовувати файловий браузер , такі як vifm або рейнджер (можливо , в tmux колотого) замість файлу по замовчуванням браузера на , щоб вибрати файл для приєднання до електронної пошти?



1
Відповідне питання для Mutt.
Маттіас Браун

Відповіді:


2

Ви можете відкрити рейнджер у розділі tmux (можливість, яку ви запропонували), вибрати файл, який потрібно приєднати, скопіювати ім’я файлу з його контуром за допомогою, ypа потім повернутися до вікна вкладення мута, натиснути aта вставити шлях вкладення та ім'я файлу у рядок, який відкриється внизу вікна вкладки, і натисніть Enter.

Що стосується проблеми пробілів у назві файлу (у відповідь на коментар @Rastapopolous), я зрозумів, що маю сильну звичку не використовувати їх, але повторно перевіряю вищевказаний метод вставки шляху від рейнджера, я вважаю, що коли ім'я файлу має пробіли, чомусь вкладене в mutt ім’я вкладеного файлу має повторення доданої частини імені! Ви можете повернути простір, щоб видалити «додаток», і додаток легко надсилається навіть з пробілами, які не вийшли. Я перевірив копію шляху від ranger in 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відкриє редактор мута для створення електронного листа, до якого вже додається вибраний файл. Однак потрібно змінити електронну адресу одержувача на потрібну. Можливо, є спосіб змінити функцію, щоб відкрити редактор електронної пошти з порожнім полем "До", але я не знаю достатньо. Однак я не вважаю цього великим.

Для декількох файлів, якщо вони знаходяться в одній папці, я вибираю їх усі, а потім натискаю клавішу @швидкого доступу, щоб відкрити командний рядок оболонки, як цей, де %sє посилання на вибрані файли:

:shell %s

Тоді один просто вставляє mail_attachперед %sі натисканням клавіші Enter відкриється mutt для створення електронної пошти, до якої вже додані всі вибрані файли. Якщо ви хочете долучити файли з різних папок, я не знаю, як це зробити, крім того, щоб збирати їх у одну папку.

Я хотів би віддати кредит тому, хто створив цю функцію, але я вже не знаю, звідки вона взялася. Я знаю, що це не я.


Дякую за вашу відповідь! Я щойно опублікував альтернативний, трохи більш обтічний метод, який вам може бути цікавим.
Растапопулос

Дуже дякую за альтернативу, однак, я вважаю, що я занадто вподобаний до рейнджера і, водночас, не вистачає навичок адаптувати свій сценарій до рейнджера!
Джон Флуд

Я адаптував сценарій, який я розмістив для рейнджера. Тільки недолік - це, здається, не працює для назви файлів з пробілами. (Це лише моя версія mutt, чи неможливо набрати символ <Space> у меню "
Компонувати

Хороший трюк, і ви також могли зробити це :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та приєднувати їх усі одночасно!

EDIT : Я помітив, що код не працює для імен файлів, які містять пробіли, оскільки видається пробіл у меню композиції вкладень у моїй версії 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.