mutt - 이와 같은 메시지를 필터링합니다.

mutt - 이와 같은 메시지를 필터링합니다.

Gmail의 "다음과 같은 메시지 필터링" 기능을 복제하고 싶습니다. 기본적으로 *와 같은 mutt의 키를 바인딩하여 표시되는 메시지를 동일한 보낸 사람(또는 ; 접두사가 있는 경우 보낸 사람)이 보낸 메시지로 "제한"할 수 있기를 바랍니다.

macro index * "<enter-command>set sender=display-address<enter><limit>$sender<enter>" "Filter Messages Like"

위의 매크로 접근 방식을 시도하고 있지만 보낸 사람 주소를 mutt의 변수로 읽는 데 어려움을 겪고 있습니다. 매크로가 여기로 가는 것이 올바른 방법인가요? 메시지 헤더를 변수로 읽는 올바른 방법은 무엇입니까?

답변1

불행히도 함수에서 변수를 채우는 것은 불가능합니다. function 을 호출할 수 있거나 neomutt에서 lua를 사용할 수 있더라도 <display-address> :push @하단 :exec display-address표시줄에 표시되지만 변수는 비어 있습니다.

오늘 #neomutt IRC에서 이 문제를 상담한 후 현재 가장 좋은 옵션은 임시 파일을 사용하는 것입니다.

  • 이 매크로는 메시지를 formail로 파이프하여 를 반환하고 from headerawk로 전달하여 이메일 주소만 가져오고 출력을 /tmp/sender로 리디렉션합니다.
  • /tmp/sender의 내용으로 변수 $my_sender를 설정합니다.
  • $my_sender로 인덱스 제한
macro index,pager * \
"<pipe-message>formail -X from:|awk -F'[<>]' '{print $2}'>/tmp/sender<enter>\
:set my_sender=\"`cat /tmp/sender`\"\n\
l~f \"$my_sender\"\n" \
"Filter Messages Like"

요구사항: 이메일

또는 다른 명령을 사용하여 메시지에서 전자 메일 주소를 구문 분석할 수 있습니다.


편집: neomutt 세션당 한 번만 작동합니다. 매크로 내부의 변수 확장에는 큰따옴표가 있고 이런 방식이어야 하기 때문에 문제가 있을 수 있습니다. 따라서 적어도 쉽게는 여전히 불가능할 것입니다.

답변2

이 답변은 다음을 기반으로 합니다.야쿠브 진드라님의 답변입니다. 불행히도 나는 그의 정답에 대한 의견으로 게시할 만큼 충분한 평판을 얻지 못했지만 이것이 동일한 문제가 발생한 다른 사람들에게 도움이 될 수 있다고 생각했습니다.

이것은 일회성 확장 문제를 해결할 수 있는 매크로에 대한 해결 방법입니다.

macro index,pager k "<pipe-message>formail -X from:|awk -F'[<>]' '{print \"set my_tmp_pipe_decode=\\\"\"$2\"\\\"\" }'>/tmp/sender<enter>:source /tmp/sender<enter>l~f $my_tmp_pipe_decode<enter>" "Filter Messages Like"

가장 큰 차이점은 cat파일을 보내는 대신 파일을 시도했다는 source것입니다. 이렇게 하면 변수 확장 문제가 발생하지 않으며 한 세션에서 원하는 만큼 여러 번 작동합니다. 분명히 내부 mutt 명령이기 때문에 source일회성 확장은 아니지만 확장해야 하는 외부 bash 명령입니다.catcat

이번에도 크레딧은 Jakub Jindra에게 돌아가야 합니다.

관련 정보