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?

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.


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.


Guay. Si solo desea la bandeja de entrada y no utiliza carpetas anidadas, definitivamente es una solución más eficiente.
slhck
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.