ในmuttเป็นไปได้ไหมที่จะใช้เบราว์เซอร์ไฟล์เช่นvifmหรือranger (อาจแบ่งเป็นtmux ) แทนที่จะเป็นเบราว์เซอร์ไฟล์เริ่มต้นเพื่อเลือกไฟล์ที่จะแนบกับอีเมล
ในmuttเป็นไปได้ไหมที่จะใช้เบราว์เซอร์ไฟล์เช่นvifmหรือranger (อาจแบ่งเป็นtmux ) แทนที่จะเป็นเบราว์เซอร์ไฟล์เริ่มต้นเพื่อเลือกไฟล์ที่จะแนบกับอีเมล
คำตอบ:
คุณสามารถเปิดเรนเจอร์ในการแยก tmux (ความเป็นไปได้ที่คุณแนะนำ) เลือกไฟล์ที่จะแนบคัดลอกชื่อไฟล์ด้วยการใช้เส้นทางของมันyp
แล้วกลับไปที่หน้าต่าง mutt แนบกดa
และวางเส้นทางแนบและชื่อไฟล์ใน Enter
บรรทัดที่เปิดขึ้นที่ด้านล่างของหน้าต่างแนบและกด
เกี่ยวกับปัญหาช่องว่างในชื่อไฟล์ (ตามความคิดเห็นของ @Rastapopolous) ฉันรู้ว่าฉันมีนิสัยที่ไม่ใช้มัน แต่ทดสอบวิธีการวางเส้นทางจากแรนเจอร์อีกครั้งฉันพบว่าเมื่อ ชื่อไฟล์มีช่องว่างด้วยเหตุผลบางอย่างชื่อสิ่งที่แนบมาวางใน mutt มีการซ้ำส่วนหนึ่งของชื่อผนวก! หนึ่งสามารถ backspace เพื่อลบ "ภาคผนวก" และสิ่งที่แนบมาจะถูกส่งได้อย่างง่ายดายแม้ในพื้นที่ที่ไม่ได้หลบหนี ฉันทดสอบการคัดลอกพา ธ จากเรนเจอร์ในกลุ่มและวางอย่างถูกต้อง แต่ไม่ได้อยู่ใน 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 สำหรับการเขียนอีเมลซึ่งมีไฟล์ที่เลือกทั้งหมดที่แนบมา หากคุณต้องการแนบไฟล์จากโฟลเดอร์ต่างๆฉันไม่ทราบวิธีการทำนอกเหนือจากการรวบรวมไฟล์เหล่านั้นในโฟลเดอร์เดียวกัน
ฉันต้องการให้เครดิตกับใครก็ตามที่สร้างฟังก์ชั่นนี้ แต่ฉันไม่รู้ว่ามาจากไหน ฉันรู้ว่าไม่ใช่ฉัน
:shell mutt -a %f
ranger
คำตอบของ @John Flood เป็นแรงบันดาลใจให้ฉันคิดอีกเล็กน้อยเกี่ยวกับเรื่องนี้และฉันมาด้วยวิธีแก้ไขปัญหาต่อไปนี้ซึ่งดูเหมือนว่าจะทำงานได้ค่อนข้างดี
บันทึกสคริปต์ต่อไปนี้เป็นmutt_attach
บางที่$PATH
ด้วยReturn
อักขระlitteral แทน^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"