Как поставить непрочитанные почтовые сообщения в командной строке


5

Я использую OS X и хочу узнать, есть ли в моем Mail.app непрочитанные сообщения? Я хочу указать этот номер в командной строке.

Как мне это сделать?

Ответы:


5

Сначала установите подсказку для выполнения замен, как описано здесь: Получить функцию в PS1 (Zsh)?
Просто добавьте следующее в ваш .zshrc файл.

setopt PROMPT_SUBST

Затем найдите AppleScript, который считает вашу непрочитанную почту, например этот от Geeklets Мэттом Суэйном , Скачать .scpt файл и поместите это где-нибудь, например ~/Scripts/mail_count.scpt,

Обратите внимание, что Mail.app должен быть запущен, чтобы все это работало. В вашем .zshrcсоздайте функцию, которая вызывает AppleScript:

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

Наконец, переопределите ваш запрос на основе новой функции. Следующее было бы самым основным подходом - но не стесняйтесь добавлять ваши собственные переменные по мере необходимости:

PROMPT='$(mail_count) '

Если вы не хотите возиться с вашим приглашением или использовать один из стилей oh-my-zsh, или даже promptinit модуль, вы также можете просто использовать precmd() функция, в которой вы определяете все, что должно быть выполнено до выполнения другой команды. В этом случае вам не понадобится PROMPT_SUBST вариант.

precmd() {
  mail_count
}

Какой бы метод вы ни использовали, ваш счетчик непрочитанных писем будет выводиться в виде простого текста. Если вы хотите изменить сообщения, посмотрите на источник .scpt файл и измените его соответственно.


Это O (n), где n - количество сообщений в моем почтовом ящике, верно? У меня слишком много сообщений. Разве это не будет слишком медленно?
snihalani

Да исправить. Это может быть немного медленно. Я только что проверил это с фиктивными значениями, очевидно, на довольно быстрой машине - почти мгновенно. Ваш пробег может варьироваться. Вы можете рассчитывать по-другому - используя unread count of every mailbox как объяснил здесь ,
slhck

Я написал лучший сценарий в качестве ответа. Проверьте это.
snihalani

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

Я нашел это наиболее эффективным.


Здорово. Если вы хотите только входящие и не используете вложенные папки, это определенно более эффективное решение.
slhck
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.