Mutt'a bir ek programının geri dönmesini beklememesini nasıl söyleyebilirim?


9

Bu satırı benim resimlerim için kullanıyorum mailcap:

image/*; eog %s &;

ancak mutt geçici dosyayı hemen siler ve eog dosyayı yükleyemez.
Ben kaldırdığınızda &EOG için ahmak bekler o komut satırından kaçar kadar kapalı olması.

Yanıtlar:


9

İşte ne kullanıyorum:

.mailcap:

application/*; mkdir -p /tmp/mutt \; cp %s /tmp/mutt \; xdg-open /tmp/mutt/$(basename %s) &

.mutt / muttrc:

folder-hook . `rm -f /tmp/mutt/*`

Bir eki açma girişiminde bulunulduğu her seferinde, adanmış geçici bir dizine kopyalanır ve kopya açılır.
Her başlattığınızda mutt, kalan kopyalar temizlenir.

&Kullandığınız komuta bağlı olarak, sonda gerekebilir veya gerekmeyebilir . (Bazı sürümleri xdg-openengellenirken, diğerleri değil.)

Söylemeye gerek yok, bunu herhangi bir komutla kullanabilirsiniz. xdg-opensadece kullanışlı bir tek elden işleyicidir.


Bu, posta başlığını değiştirmek için harika bir genel yoldur! Teşekkürler!
Profpatsch

&Sonra xdg-open gerekli . Her halükarda orada olmak acıtmaz, değil mi?
Profpatsch

Nasıl yerine: Belki bir soru yapabilir mailcapile xdg-open? ve bu yanıtı kopyalayın. Eminim bu soruya sahip bazı insanlar var.
Profpatsch

2
Mutt klasörleri tarafından açılan birden fazla uygulamanız varsa / tmp / mutt / klasörünüzdeki herhangi bir şeyi silerseniz bu sorun olmaz. Xdg-open bloke olabilir veya olmayabilir belki sadece uygulamayı kullanıyorum (firefox) text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
Derek Schrock

Bunun eski bir soru olduğunu biliyorum, ama şimdi buldum çünkü Mutt'u kurma konusunda uzmanlaşıyorum. Benim çözümüm Neomutt'ları shutdown-hookkullanmaktı; bu mutt kapatıldığında tmp yönünü boşaltır.
Thriveth

3

Aşağıdaki gibi bir sarmalayıcı komutu kullanabilirsiniz:

  1. dosyayı yeniden adlandırır
  2. görüntüleyiciyi arka planda çalıştırır
  3. izleyici izin vermek yerine geri döndüğünde temizler mutt.

Gibi bir şey:

#! /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 -- "$@"
) &

Ve şöyle bir şey koy:

image/*; muttv eog %s;

muttvYukarıdaki senaryo nerede ?

Yukarıdakiler, argüman listesinde dosya adlarının nerede bulunduğuna veya hangi karakteri içerdiklerine dair herhangi bir varsayımda bulunmaz ... Bu yüzden önce muttne tmpdirolduğunu soruyoruz (bu yüzden dosyaların ne olduğunu belirlemek için kullanıyoruz görünüm ).

Çoğu durumda, aşırıya kaçabilir ve Gilles'in işaret ettiği gibi, tmpdir posta kutusu klasörünüzle göreceli olarak belirtilirse çalışmayabilir.

Daha basit olanı:

#! /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"
) &

Değiştir mvile cpsize sağladığı orijinal dosyayı dokunmak istemiyorsanız mutt.


Tanrım, bunu sıfırdan mı yazdınız? Ne yaptığınızı anlamanız 15 dakika sürdü ve şimdi bile bazı parçaların tam olarak nasıl çalıştığından emin değilim.
Profpatsch

Benim ile başarısız .muttrcçünkü tmpdir="=tmp". Dizini neden dosya adından almıyorsunuz?
Gilles 'SO- kötü olmayı kes'

@Gilles, "+", "=" hakkında iyi bir nokta ... Bütün mesele mutmp'tan tmpdir almaktı, bu yüzden argümanlardan hangisinin dosya adı olduğunu biliyoruz. Her şey biraz fazla olsa da, dosya new-$original
adının

Başka bir nokta, bu giriş komut dosyasının her zaman mutt adına çağrılmaması, dosyanın geçici bir dosya olmadığı ve silinmemesi gereken durumlarda çağrılabilmesidir. (Sık sık seekomut satırını ararım , dosyayı olsa bile kaldırmasını beklemiyorum /tmp!) Çözüm: sabit bir bağlantı yapın.
Gilles 'SO- kötü olmayı kes'

@Gilles, hardlink'i düşündüm, ancak mutt için işe yaramaz, çünkü komutu çalıştırdıktan sonra mutt, bağlantıyı kaldırmadan önce dosyayı keser. (O_TRUNC ile açın ve kapatın, doğruladım).
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.