アタッチメントプログラムが戻るのを待たないようにmuttに指示する方法は?


9

私の画像にこの行を使用しますmailcap

image/*; eog %s &;

しかし、muttはすぐに一時ファイルを削除し、eogはそれをロードできません。mutt
を削除&すると、コマンドラインから脱出するまでeogが閉じるのを待ちます。

回答:


9

これが私が使うものです:

.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便利なワンストップハンドラです。


これは、mailcapを置き換える一般的な方法です。ありがとう!
Profpatsch 2014年

私は&後のxdg-openが必要でした。とにかくそこに置いても害はありませんよね?
Profpatsch 2014年

交換方法:たぶん、あなたは疑問作ることができるmailcapとのxdg-open?その答えをコピーします。その質問をしている人もいると思います。
Profpatsch 2014年

2
mutt変更フォルダによって複数のアプリケーションが開かれている場合、これは問題にはなりませんか?/ tmp / mutt /フォルダ内のすべてを消去します。xdg-openがブロックする場合としない場合があるので、アプリケーション(firefox)を使用しているだけです text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
Derek Schrock

私はこれが古い質問であることを知っていますが、私はMuttのセットアップに精通しているので、今それを見つけました。私の解決策は、shutdown-hook代わりにNeomuttを使用することでした。これは、muttがシャットダウンされたときにtmpディレクトリを空にするだけです。
Thriveth

3

次のようなラッパーコマンドを使用できます。

  1. ファイルの名前を変更します
  2. ビューアをバックグラウンドで実行します
  3. ビューアが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上記のスクリプトはどこにありますか。

上記の我々が最初に尋ねる理由は、引数のリストまたは彼らが含まれている文字...中の(S)ファイル名(s)が表示される場所には何の仮定行いません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"
) &

交換するmvcpあなたはで提供元のファイルに触れることをしたくない場合mutt


ああ、あなたはそれをゼロから書きましたか?あなたが何をしているのかを理解するのに15分かかりましたが、今でも一部の部品が正確にどのように機能するかはわかりません。
Profpatsch 2013

失敗する.muttrcのでtmpdir="=tmp"。ファイル名からディレクトリを取得しませんか?
Gilles「SO-悪をやめる」

@Gilles、 "+"、 "="の良い点...全体のポイントは、muttからtmpdirを取得することだったので、どの引数がファイル名であるかがわかります。例99%で、ファイル名は一度だけ発生し、最後の引数になるだろう、と私たちはそれを名前を変更することができますよう、全体の事はとにかくけれども少しやり過ぎであるnew-$original
ステファンChazelas

別のポイントは、このエントリスクリプトは常にmuttの代わりに呼び出されるわけではなく、ファイルが一時ファイルではなく、削除してはならない状況で呼び出される可能性があることです。(私はしばしばseeコマンドラインで呼び出します、それがファイル内にあっても、それがファイルを削除することを期待しません/tmp!)解決策:ハードリンクを作成します。
Gilles「SO-邪悪なことをやめなさい」

@Gilles、私はハードリンクを考えましたが、muttの場合、コマンドを実行した後、muttはファイルをリンク解除する前に切り捨てるため、機能しません。(O_TRUNCで開き、閉じます。確認しました)。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.