ใช้ตัวเลือกไฟล์สำรองเป็น mutt


13

ในmuttเป็นไปได้ไหมที่จะใช้เบราว์เซอร์ไฟล์เช่นvifmหรือranger (อาจแบ่งเป็นtmux ) แทนที่จะเป็นเบราว์เซอร์ไฟล์เริ่มต้นเพื่อเลือกไฟล์ที่จะแนบกับอีเมล



1
ปัญหาที่เกี่ยวข้องสำหรับ Mutt
Matthias Braun

คำตอบ:


2

คุณสามารถเปิดเรนเจอร์ในการแยก 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 สำหรับการเขียนอีเมลซึ่งมีไฟล์ที่เลือกทั้งหมดที่แนบมา หากคุณต้องการแนบไฟล์จากโฟลเดอร์ต่างๆฉันไม่ทราบวิธีการทำนอกเหนือจากการรวบรวมไฟล์เหล่านั้นในโฟลเดอร์เดียวกัน

ฉันต้องการให้เครดิตกับใครก็ตามที่สร้างฟังก์ชั่นนี้ แต่ฉันไม่รู้ว่ามาจากไหน ฉันรู้ว่าไม่ใช่ฉัน


ขอบคุณสำหรับคำตอบ! ฉันเพิ่งโพสต์ทางเลือกซึ่งเป็นวิธีที่คล่องตัวกว่าเล็กน้อยซึ่งคุณอาจสนใจ
Rastapopoulos

ขอบคุณมากสำหรับทางเลือกอย่างไรก็ตามฉันคิดว่าฉันแต่งงานกับแรนเจอร์เกินไปและในเวลาเดียวกันขาดทักษะในการปรับสคริปต์ของคุณให้เรนเจอร์!
John Flood

ฉันได้ดัดแปลงสคริปต์ที่ฉันโพสต์สำหรับเรนเจอร์ ข้อเสียเพียงอย่างเดียวคือมันไม่ทำงานกับชื่อไฟล์ที่มีช่องว่าง (มันเป็นเพียง mutt รุ่นของฉันหรือเป็นไปไม่ได้ที่จะพิมพ์ตัวอักษร <Space> ในเมนูเขียน 'แนบไฟล์'?
Rastapopoulos

เคล็ดลับที่ดีและคุณยังสามารถทำโดยตรงจาก:shell mutt -a %f ranger
Rastapopoulos

1
คำอธิบายของคุณเกี่ยวกับ "ตัวละครคืนตัวอักษร" ได้หลอกลวง! สคริปต์ต้นฉบับของคุณทำงานให้ฉันแล้ว ขอบคุณ @Rastapopoulos!
John Flood

1

คำตอบของ @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"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.