Na visualização de índice do Mutt, gostaria de copiar o endereço de e-mail de um remetente para a área de transferência do sistema (usando xclip
, por exemplo).
Existe uma maneira de obter o endereço de e-mail do remetente do e-mail selecionado no momento usando uma macro ou qualquer outro meio?
Do
muttrc
:Agora Ctrl+ fcoloca o endereço de e-mail do remetente na área de transferência do sistema X. Substituir
xclip -selection c
porwl-copy
faz com que funcione com Wayland.Assumimos que o endereço de e-mail está em uma linha como esta
ou assim
Explicação da macro:
|grep
: canaliza o email atual para grep.-m 1
: grep irá parar depois de corresponder à primeira linha.-o
: grep imprime apenas a string correspondente, não a linha inteira.P
: habilita expressões regulares compatíveis com Perl em grep. Precisamos disso para o lookbehind na regex.'(?<=\^From: ).+'
: regex do grep. Obtenha todos os caracteres após a linha que começa com "De: ". A(?<=
parte é um lookbehind positivo , o que significa que a linha deve começar com "From:", mas essa string não faz parte da correspondência. Os caracteres que vêm depois são a string correspondente.Firstname Lastname <[email protected]>
ou[email protected]
.| (read after_from;
: Nós canalizamos esta string para o programaread
que salva a string na variávelafter_from
. O parêntese inicia um subshell .echo \"\$after_from\" | grep -oP '(?<=<)(.+)(?=>)'
: assumindo que o conteúdo deafter_from
sãoFirstname Lastname <[email protected]>
, grep extrai o endereço de e-mail[email protected]
.(?=>)
é uma antecipação positiva: após a string correspondente, deve haver um>
, mas esse colchete angular de fechamento não faz parte da string correspondente.xclip
e pronto.\n
é equivalente a bater Enterque faz Mutt executar a macro.after_from
já é um endereço de e-mail no formulário[email protected]
(sem colchetes), nós apenas enviamos esse endereço para a área de transferência com|| echo \"\$after_from\") | xclip -selection c
. O parêntese de fechamento marca o fim dos comandos que executamos no subshell que criamos. O operador ou||
significa: Se o comando do lado esquerdo falhou (código de saída diferente de zero), execute o comando do lado direito.Nota: Para a macro do Mutt, temos que escapar os seguintes caracteres com uma barra invertida. Se você quiser usar o comando fora do Mutt, remova as barras invertidas:
^
"
$