ฉันใช้บรรทัดนี้สำหรับรูปภาพในmailcap
:
image/*; eog %s &;
แต่ mutt ลบไฟล์ temp ทันทีและ eog ไม่สามารถโหลดได้
เมื่อฉันลบ&
mutt รอให้ eog ถูกปิดจนกว่ามันจะหนีออกมาจากบรรทัดคำสั่ง
ฉันใช้บรรทัดนี้สำหรับรูปภาพในmailcap
:
image/*; eog %s &;
แต่ mutt ลบไฟล์ temp ทันทีและ eog ไม่สามารถโหลดได้
เมื่อฉันลบ&
mutt รอให้ eog ถูกปิดจนกว่ามันจะหนีออกมาจากบรรทัดคำสั่ง
คำตอบ:
นี่คือสิ่งที่ฉันใช้:
.mailcap:
application/*; mkdir -p /tmp/mutt \; cp %s /tmp/mutt \; xdg-open /tmp/mutt/$(basename %s) &
.mutt / muttrc:
folder-hook . `rm -f /tmp/mutt/*`
ทุกครั้งที่มีความพยายามในการเปิดสิ่งที่แนบมามันจะถูกคัดลอกในไดเรกทอรีชั่วคราวโดยเฉพาะและการคัดลอกจะเปิดขึ้น
ทุกครั้งที่คุณเริ่มต้นmutt
สำเนาที่ยังไม่บรรลุนิติภาวะจะถูกล้างออก
คุณอาจหรืออาจไม่ต้องการ&
ที่ส่วนท้ายขึ้นอยู่กับคำสั่งที่คุณใช้ (บางเวอร์ชั่นxdg-open
กำลังปิดกั้นในขณะที่บางรุ่นไม่ได้ปิดกั้น)
คุณสามารถใช้สิ่งนี้กับคำสั่งใด ๆ xdg-open
เป็นเพียงตัวจัดการแบบครบวงจรที่สะดวกสบาย
&
after xdg-open ไม่สามารถเจ็บที่จะมีมันในกรณีใด ๆ ใช่มั้ย
mailcap
ด้วยxdg-open
? และคัดลอกคำตอบนั้น ฉันแน่ใจว่ามีบางคนที่มีคำถามนั้น
text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
shutdown-hook
แทน สิ่งนี้จะทำให้ tmp dir ว่างเมื่อ mutt ถูกปิด
คุณสามารถใช้คำสั่ง wrapper ที่:
mutt
ทำสิ่งที่ต้องการ:
#! /bin/sh -
TMPDIR=$(
mutt -D 2> /dev/null |
awk -F\" '
$1 == "tmpdir=" {
gsub("~", ENVIRON["HOME"], $2)
print $2
exit
}'
)
[ -n "$TMPDIR" ] || exit
export TMPDIR
nargs=$#
nfiles=0
for i do
case $i in
("$TMPDIR"/?*)
new_file=$(mktemp -ut "XXXXX${i##*/}") &&
mv -- "$i" "$new_file" &&
nfiles=$(($nfiles + 1)) &&
set -- "$new_file" "$@" "$new_file" &&
continue
esac
set -- "$@" "$i"
done
run_command() (
shift "$(($nargs + $nfiles))"
exec "$@"
)
(
run_command "$@"
while [ "$nfiles" -gt 0 ]; do
set -- "$@" "$1"
shift
nfiles=$(($nfiles - 1))
done
shift "$((2*$nargs))"
rm -f -- "$@"
) &
และใส่สิ่งที่ชอบ:
image/*; muttv eog %s;
muttv
สคริปต์ข้างต้นอยู่ที่ไหน
ด้านบนไม่มีข้อสันนิษฐานว่าชื่อไฟล์ปรากฏในรายการข้อโต้แย้งหรือตัวอักษรใดที่มี ... ซึ่งเป็นสาเหตุแรกที่เราถามmutt
ว่ามันtmpdir
คืออะไร(ดังนั้นเราจึงใช้มันเพื่อกำหนดว่าไฟล์ใดดู )
ในกรณีส่วนใหญ่มันจะ overkill แม้ว่าและตามที่ Gilles ชี้ให้เห็นอาจไม่ทำงานถ้า tmpdir ถูกระบุว่าสัมพันธ์กับโฟลเดอร์กล่องจดหมายของคุณ
วิธีที่ง่ายกว่าคือ:
#! /bin/sh -
nargs=$#
eval "file=\${$nargs}"
newfile=$(dirname -- "$file")/new-$(basename -- "$file")
while [ "$nargs" -gt 1 ]; do
set -- "$@" "$1"
shift
nargs=$(($nargs - 1))
done
shift
mv -- "$file" "$newfile" || exit
(
"$@" "$newfile"
rm -f -- "$newfile"
) &
แทนที่mv
ด้วยcp
หากคุณไม่ต้องการแตะไฟล์ต้นฉบับที่ให้mutt
ไว้
.muttrc
tmpdir="=tmp"
ทำไมไม่คว้าไดเรกทอรีจากชื่อไฟล์?
new-$original
see
บรรทัดคำสั่งฉันไม่คิดว่ามันจะลบไฟล์แม้ว่ามันจะอยู่ใน/tmp
!) วิธีแก้ไข: สร้างฮาร์ดลิงก์