Você precisa de dois scripts para isso: O script de ação do Nemo e o script que realmente fará o trabalho: (Bem, na verdade, um seria suficiente, mas tornaria a manutenção irritante)
O script de ação para o clique direito terá que ir para um diretório muito específico:
~/.local/share/nemo/actions/compress-and-mail.nemo_action:
Como não expande ~
ou $HOME
, você terá que fornecer um caminho completo.
[Nemo Action]
Name=Compress and E-Mail
Comment=zip-compress files and send them with Thunderbird
Icon-Name=thunderbird
Exec=/home/saravanabawa/.local/nemo_mail_compress.sh %F
Selection=notnone
Extensions=any
EscapeSpaces=true
O outro script será um script bash para compactar os arquivos selecionados, anexar o archive temporário a uma nova mensagem e excluí-lo assim que o Thunderbird for fechado. O arquivo terá que estar no local especificado na linha Exec=
no script anterior:
#!/usr/bin/env bash
ATT=$(mktemp /tmp/attachment.XXXXX.zip) #Generate temp file
rm $ATT #Remove temp file
zip -rj $ATT $@ #Compress files
thunderbird -compose "attachment='file://${ATT}'" #Attach zip to message
rm $ATT #Delete archive when done
Sim, primeiro estou criando um arquivo temporário e excluo-o novamente. Dessa forma, um nome de arquivo é gerado, mas zip
não reclama do arquivo não ser um arquivo zip.
O script que criei permite anexar vários arquivos e diretórios. Devido a algumas limitações, é possível compactar todo o caminho (o arquivo tomará todo o caminho como nome, eventualmente contendo a árvore de diretórios de /
para todos os arquivos compactados) ou para omitir todos os diretórios, ou seja, todos os arquivos será no nível da raiz. Nomes de arquivos duplicados em diretórios diferentes farão com que o programa não funcione corretamente (nunca uso zip, não sei como ele reagirá). Se você deseja o primeiro comportamento, remova a opção j
do comando zip, caso contrário, deixe-a lá.
PS: Os destinatários podem suspeitar se receberem um e-mail com um anexo chamado attachment.JgHdI.zip
(nome gerado por mktemp). Então você pode querer renomear o arquivo dentro do Thunderbird.
Outra opção seria consultar um nome de arquivo, por ex. usando o Zenity. Um script adaptado poderia ser assim:
#!/usr/bin/env bash
ATT="/tmp/$(zenity ---entry --title='Enter file name' --text='Please name the attachment archive').zip"
zip -rj $ATT $@
thunderbird -compose "attachment='file://${ATT}'"
rm $ATT