Cómo poner mensajes de correo no leídos en el indicador de comandos de shell

5

Estoy usando OS X y quiero saber si hay algún mensaje no leído en mi Mail.app? Quiero poner ese número en mi indicador de shell.

¿Cómo lo hago?

SurenNihalani
fuente

Respuestas:

5

Primero, configure su solicitud para realizar sustituciones como se explica aquí: ¿ Obtener función en PS1 (Zsh)?
Simplemente agregue lo siguiente en su .zshrcarchivo.

setopt PROMPT_SUBST

Luego, busque un AppleScript que cuente su correo no leído, por ejemplo, este de Geeklets de Matt Swain . Descargue el .scptarchivo y colóquelo en algún lugar, por ejemplo ~/Scripts/mail_count.scpt.

Tenga en cuenta que Mail.app debe estar ejecutándose para que todo esto funcione. En su .zshrc, cree una función que llame al AppleScript:

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

Finalmente, redefina su solicitud en función de la nueva función. El siguiente sería el enfoque más básico, pero siéntase libre de agregar sus propias variables según sea necesario:

PROMPT='$(mail_count) '

Si no desea meterse con su solicitud o usar uno de los estilos oh-my-zsh, o incluso el promptinitmódulo, también puede usar la precmd()función, en la que define cualquier cosa que deba ejecutarse antes de ejecutar otro comando . En ese caso, no necesitarías la PROMPT_SUBSTopción.

precmd() {
  mail_count
}

Cualquiera que sea el método que utilice, su recuento de correo no leído se generará en texto sin formato. Si desea cambiar los mensajes, eche un vistazo a la fuente del .scptarchivo y modifíquelo en consecuencia.

slhck
fuente
Este es O (n) donde n es el número de mensajes en mi bandeja de entrada, ¿verdad? Tengo demasiados mensajes ¿No sería demasiado lento?
SurenNihalani
Sí correcto. Podría ser un poco lento. Simplemente lo probé con valores ficticios, obviamente, en una máquina bastante rápida, casi instantánea. Su experiencia puede ser diferente. Es posible que pueda contar de manera diferente, utilizando unread count of every mailboxcomo se explica aquí .
slhck
Publiqué el mejor guión como respuesta. Echale un vistazo.
SurenNihalani
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

Encontré esto más eficiente.

SurenNihalani
fuente
Guay. Si solo desea la bandeja de entrada y no utiliza carpetas anidadas, definitivamente es una solución más eficiente.
slhck