我将这一行用于我的图像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