私の画像には次の行を使用してくださいmailcap
。
image/*; eog %s &;
ただし、muttはすぐに一時ファイルを削除し、eogはそれをロードできません。 muttを
削除すると、&
コマンドラインから離れるまでeogが閉じるのを待ちます。
答え1
これが私が使用するものです:
.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
ただ便利なワンストップ店です。
答え2
ラッパーコマンドを使用できます。
- ファイル名の変更
- バックグラウンドでビューアを実行する
- 観客が戻ってきたら、そのままにしておくのではなく、消してください
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
あるかを尋ねる理由です。したがって、これを使用してファイルが何であるかを確認します。より)。
これはほとんどの場合過剰である可能性があり、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