Я использую эту строку для изображений в моем mailcap
:
image/*; eog %s &;
но Mutt немедленно удаляет временный файл, и eog не может его загрузить.
Когда я &
удаляю дурака, он ждет закрытия eog, пока он не выйдет из командной строки.
Я использую эту строку для изображений в моем mailcap
:
image/*; eog %s &;
но Mutt немедленно удаляет временный файл, и eog не может его загрузить.
Когда я &
удаляю дурака, он ждет закрытия 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
это просто удобный универсальный обработчик.
&
после xdg-open. Не может быть больно иметь его там в любом случае, верно?
mailcap
на xdg-open
? и скопируйте этот ответ. Я уверен, что есть некоторые люди с этим вопросом.
text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
shutdown-hook
вместо Neomutt ; это просто очищает TMP DIR, когда Mutt выключен.
Вы можете использовать команду-оболочку, которая:
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
такое (поэтому мы используем это, чтобы определить, какие файлы для вид ).
В большинстве случаев это будет излишним, и, как указывает Жиль, может не сработать, если 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
!) Решение: создать жесткую ссылку.