Trong mutt , có thể sử dụng trình duyệt tệp như vifm hoặc ranger (có thể trong phần tách tmux ) thay vì trình duyệt tệp mặc định để chọn tệp để đính kèm vào email không?
Trong mutt , có thể sử dụng trình duyệt tệp như vifm hoặc ranger (có thể trong phần tách tmux ) thay vì trình duyệt tệp mặc định để chọn tệp để đính kèm vào email không?
Câu trả lời:
Bạn có thể mở ranger trong phần tách tmux (một khả năng bạn đã đề xuất), chọn tệp sẽ được đính kèm, sao chép tên tệp bằng đường dẫn của nó bằng cách sử dụng yp
và sau đó quay lại cửa sổ đính kèm mutt, nhấn a
và dán đường dẫn đính kèm và tên tệp trong dòng mở ra ở dưới cùng của cửa sổ đính kèm và nhấn Enter
.
Về vấn đề khoảng trắng trong tên tệp (phản hồi bình luận của @Rastapopolous), tôi nhận ra rằng tôi có thói quen không sử dụng chúng, nhưng thử nghiệm lại phương pháp dán đường dẫn từ kiểm lâm viên ở trên, tôi thấy rằng khi Tên tệp có khoảng trắng, vì một số lý do, tên tệp đính kèm được dán trong mutt có sự lặp lại của một phần của tên được nối! Người ta có thể xóa lùi để xóa "phần phụ" và tệp đính kèm dễ dàng được gửi ngay cả với các khoảng trắng không được thoát. Tôi đã kiểm tra bản sao đường dẫn từ kiểm lâm trong vim và nó dán chính xác, nhưng không phải trong mutt.
Vì tôi thường xuyên sử dụng tmux, tôi thấy đây là một phương pháp tương đối đơn giản.
Ngoài ra và độc lập với tmux, tôi cũng có tập lệnh sau trong .bashrc:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Điều này hữu ích khi bạn biết bạn sẽ đính kèm trước khi soạn email. Vì vậy, từ bên trong ranger, người ta chỉ cần chọn một tệp, gõ s
để mở một dòng lệnh shell và cho biết tệp đã chọn với %f
, đó là:
:shell mail_attach %f
Nhấn Enter
sẽ mở trình soạn thảo mutt để soạn email đã đính kèm tệp đã chọn. Tuy nhiên, sau đó người ta phải thay đổi địa chỉ email người nhận thành địa chỉ mong muốn. Có lẽ có một cách để thay đổi chức năng để mở trình chỉnh sửa email bằng trường "To" trống, nhưng tôi không biết đủ. Tuy nhiên, tôi không thấy đây là một vấn đề lớn.
Đối với nhiều tệp, nếu chúng nằm trong cùng một thư mục, tôi chọn tất cả chúng và sau đó nhấn @
phím tắt ranger để mở dòng lệnh shell như thế này trong đó %s
tham chiếu đến các tệp đã chọn:
:shell %s
Sau đó, người ta chỉ cần chèn mail_attach
trước %s
và nhấn enter sẽ mở mutt để soạn email đã có tất cả các tệp đã chọn. Nếu bạn muốn đính kèm các tệp từ các thư mục khác nhau, tôi không biết làm thế nào ngoài việc thu thập chúng vào cùng một thư mục.
Tôi muốn cung cấp tín dụng cho bất cứ ai tạo ra chức năng, nhưng tôi không còn biết nó đến từ đâu. Tôi biết đó không phải là tôi.
:shell mutt -a %f
trực tiếp từ ranger
.
Câu trả lời của @John Flood đã thôi thúc tôi suy nghĩ thêm một chút về điều này, và tôi đã đưa ra cách giải quyết sau đây, có vẻ như hoạt động khá tốt.
Lưu tập lệnh sau dưới dạng mutt_attach
một nơi nào đó $PATH
, với Return
ký tự rác thay vì ^M
(trong vim
, điều này đạt được bằng cách nhấn <c-v><Return>
trong chế độ chèn).
#!/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"
Trong .muttrc
, xác định
macro compose \CA "!mutt_attach\n"
Bây giờ nếu bạn mở mutt
trong khung đầu tiên của cửa sổ Email
trong một tmux
phiên có tên email
(ví dụ: được tạo bằng lệnh tmux new -s email
. Chỉ định phiên, cửa sổ và cửa sổ thuận tiện chủ yếu cho mục đích gỡ lỗi) và nhấn Control+A
trong menu soạn thảo, vifm
sẽ mở trong choose-files
chế độ và tập tin đã chọn sẽ được tự động đính kèm.
Tốt hơn nữa, điều này cho phép bạn gắn thẻ một số tệp vifm
bằng cách sử dụng t
(hoặc chế độ trực quan) và ranger
sử dụng Space
và đính kèm tất cả chúng cùng một lúc!
EDIT : Tôi nhận thấy rằng mã không hoạt động đối với tên tệp có chứa khoảng trắng, vì dường như không thể nhập một khoảng trắng trong menu soạn thảo tệp đính kèm trong phiên bản mutt của tôi ... Đây là một cách giải quyết (hơi xấu xí):
#!/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"