Como colocar mensagens de e-mail não lidas no prompt do shell

5

Estou usando o OS X e quero saber se há mensagens não lidas no meu Mail.app? Eu quero colocar esse número no meu prompt de shell.

Como faço para isso?

    
por snihalani 27.08.2012 / 19:31

2 respostas

5

Primeiro, defina seu prompt para executar substituições, conforme explicado aqui: Obtenha a função no PS1 (Zsh) ?
Basta acrescentar o seguinte no seu arquivo .zshrc .

setopt PROMPT_SUBST

Em seguida, encontre um AppleScript que conte seu e-mail não lido, por exemplo este de Geeklets de Matt Swain . Faça o download do arquivo .scpt e coloque-o em algum lugar, por exemplo, ~/Scripts/mail_count.scpt .

Observe que o Mail.app precisa estar em execução para que tudo isso funcione. No seu .zshrc , crie uma função que chama o AppleScript:

function mail_count {
  osascript ~/Scripts/mail_count.scpt
}

Por fim, redefina seu prompt com base na nova função. O seguinte seria a abordagem mais básica - mas sinta-se à vontade para adicionar suas próprias variáveis necessário:

PROMPT='$(mail_count) '

Se você não quer mexer com o seu prompt ou usar um dos estilos de oh-my-zsh, ou mesmo o módulo promptinit , você também pode usar apenas a função precmd() , na qual você define qualquer coisa que deve ser executado antes que outro comando seja executado. Nesse caso, você não precisaria da opção PROMPT_SUBST .

precmd() {
  mail_count
}

Qualquer que seja o método usado, sua contagem de emails não lidos será enviada em texto simples. Se você quiser alterar as mensagens, dê uma olhada na fonte do arquivo .scpt e modifique-o de acordo.

    
por 27.08.2012 / 20:55
2
set output_string to ""
tell application "Mail"
    set Unread_Count to unread count of inbox
    if Unread_Count is 0 then
        set output_string to ""
    else if Unread_Count is 1 then
        set output_string to "1 message"
    else
        set output_string to ("" & (get Unread_Count) & " messages")
    end if
end tell
return output_string

Eu achei isso muito eficiente.

    
por 27.08.2012 / 23:03