첨부 프로그램이 돌아 오기를 기다리지 않도록 mutt에 지시하는 방법은 무엇입니까?


9

이 줄을 내 이미지에 사용합니다 mailcap.

image/*; eog %s &;

mutt는 임시 파일을 즉시 삭제하고 eog는 그것을로드 할 수 없습니다.
내가 &음소거를 제거 하면 명령 줄에서 벗어날 때까지 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/*`

첨부 파일을 열려고 시도 할 때마다 전용 temp 디렉토리에 복사되고 사본이 열립니다.
시작할 때마다 mutt남아있는 사본이 정리됩니다.

&사용한 명령에 따라 끝 부분이 필요할 수도 있고 필요하지 않을 수도 있습니다 . (일부 버전 xdg-open은 차단하고 있지만 다른 버전 은 차단하지 않습니다.)

말할 것도없이, 어떤 명령으로도 이것을 사용할 수 있습니다. xdg-open편리한 원 스톱 핸들러입니다.


이것은 mailcap을 대체하는 멋진 일반적인 방법입니다! 감사!
Profpatsch

&xdg-open 이후가 필요했습니다 . 어떤 경우에도 그것을 가지고 다치게 할 수 있습니까?
Profpatsch

어떻게 대체 : 어쩌면 당신은 질문을 만들 수 mailcap과를 xdg-open? 답을 복사하십시오. 나는 그 질문을 가진 사람들이 있다고 확신합니다.
Profpatsch

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위의 스크립트는 어디에 있습니까 ?

위는 우리가 처음 물어 왜 인수의 목록 또는 그들이 포함 된 문자 ...에서 (들) 파일 이름 (들)이 표시되는 위치에 아무런 가정도하지 않습니다 mutt그 무엇을 tmpdir우리가 파일이 무엇을 결정하기 위해 그것을 사용할 수 있도록 (이다 보기 ).

그러나 대부분의 경우 과도하게 사용되며 사서함 폴더를 기준으로 tmpdir을 지정하면 Gilles가 작동하지 않을 수 있습니다.

더 간단한 방법은 다음과 같습니다.

#! /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

.muttrc때문에 실패합니다 tmpdir="=tmp". 파일 이름에서 디렉토리를 가져 가지 않는 이유는 무엇입니까?
Gilles 'SO- 악마 그만두 다'

@Gilles, "+", "="에 대한 좋은 점 ... 요점은 tmpdir을 mutt에서 가져 와서 어떤 인수가 파일 이름인지 알 수있었습니다. 모든 것은 파일 이름이 마지막 인수를 한 번만 발생 될 것입니다 사례의 99 %에서 어쨌든 과잉하지만 조금, 우리는 단지로 이름을 바꿀 수 있습니다new-$original
스테판 Chazelas가

또 다른 요점은이 엔트리 스크립트가 항상 mutt를 대신하여 호출되는 것은 아니며 파일이 임시 파일이 아니고 삭제되어서는 안되는 상황에서 호출 될 수 있다는 것입니다. (나는 종종 see명령 줄을 호출 하고 파일이 있어도 파일을 제거 할 것으로 기대하지 않습니다 /tmp!) 해결책 : 하드 링크를 만드십시오.
Gilles 'SO- 악마 그만해'

@Gilles, 하드 링크를 생각했지만 mutt의 경우 명령을 실행 한 후 mutt가 링크를 해제하기 전에 파일을 자르기 때문에 작동하지 않습니다. (O_TRUNC로 열고 닫고 확인했습니다).
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.