
Gostaria de replicar o recurso "Filtrar mensagens como estas" do GMail. Basicamente, espero vincular uma chave no mutt, como *, e que possa "Limitar" as mensagens exibidas àquelas enviadas pelo mesmo remetente (ou remetentes, se prefixados com;)
macro index * "<enter-command>set sender=display-address<enter><limit>$sender<enter>" "Filter Messages Like"
Estou tentando a abordagem macro acima, mas tenho dificuldade para ler o endereço do remetente em uma variável no mutt. A macro é o caminho certo a seguir aqui? e qual é a maneira correta de ler cabeçalhos de mensagens em variáveis?
Responder1
Infelizmente não é possível preencher a variável da função. Mesmo que você consiga chamar function <display-address>
:push @
ou :exec display-address
usar lua no neomutt – ela é exibida na barra inferior, mas a variável permanece vazia.
Depois de consultar esta edição hoje no #neomutt IRC a melhor opção no momento é usar arquivo temporário.
- Esta macro irá canalizar a mensagem para o formail que retorna o
from header
, passa-o para o awk para obter apenas o endereço de e-mail e redireciona a saída para /tmp/sender - defina a variável $my_sender com o conteúdo do /tmp/sender
- limite o índice com $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"
Requisitos: formail
ou você pode usar qualquer outro comando para analisar o endereço de e-mail da mensagem.
EDIT: funciona apenas uma vez por sessão do neomutt. Provavelmente há um problema com a expansão de variáveis dentro da macro, pois está entre aspas duplas e tem que ser assim. Então provavelmente ainda não é possível, pelo menos facilmente.
Responder2
Esta resposta é baseada emJakub Jindraa resposta. Infelizmente, não tive reputação suficiente para publicá-lo como um comentário à resposta correta, mas pensei que isso poderia ajudar outras pessoas que encontrassem o mesmo problema.
Esta é uma solução alternativa para sua macro que pode resolver o problema de expansão única:
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"
A principal diferença é que em vez de cat
baixar o arquivo, tentei source
. Desta forma, você não terá o problema de expansão de variáveis e funciona quantas vezes quiser em uma sessão. Aparentemente, source
não é uma expansão única em comparação com cat
um comando mutt interno, no entanto, cat
é um comando bash externo que deve ser expandido.
Mais uma vez, o crédito deve ir para Jakub Jindra.