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

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

Gmail의 "이 유형의 메일 필터링" 기능을 복제하고 싶습니다. 기본적으로 나는 mutt에 * 키를 바인딩하고 동일한 발신자(또는 ; 접두사가 붙은 발신자)가 보낸 메시지 표시를 "제한"할 수 있기를 원합니다.

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

위의 매크로 접근 방식을 시도하고 있지만 보낸 사람 주소를 mutt의 변수로 읽는 데 문제가 있습니다. 거시경제 발전은 올바른 방향인가? 메시지 헤더를 변수로 읽는 올바른 방법은 무엇입니까?

답변1

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

오늘 #neomutt IRC에서 이 질문을 한 후 현재 가장 좋은 선택은 임시 파일을 사용하는 것입니다.

  • 이 매크로는 메시지를 반환하는 formail로 파이프하고 from header이를 awk로 전달하여 이메일 주소만 가져오고 출력을 /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에게 돌아가야 합니다.

관련 정보