So fügen Sie ungelesene E-Mail-Nachrichten in die Shell-Eingabeaufforderung ein

5

Ich verwende OS X und möchte wissen, ob meine Mail.app ungelesene Nachrichten enthält. Ich möchte diese Nummer in meine Shell-Eingabeaufforderung einfügen.

Wie gehe ich vor?

snihalani
quelle

Antworten:

5

Stellen Sie zunächst Ihre Eingabeaufforderung ein, um Ersetzungen durchzuführen, wie hier erläutert: Funktion in PS1 (Zsh) übernehmen?
Fügen Sie einfach folgendes in Ihr Formular ein .zshrc Datei.

setopt PROMPT_SUBST

Suchen Sie dann beispielsweise ein AppleScript, das Ihre ungelesenen E-Mails zählt dieses von Geeklets von Matt Swain . Herunterladen das .scpt Datei und platziere es irgendwo, z.B. ~/Scripts/mail_count.scpt.

Beachten Sie, dass Mail.app ausgeführt werden muss, damit all dies funktioniert. In deiner .zshrcErstellen Sie eine Funktion, die das AppleScript aufruft:

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

Definieren Sie abschließend Ihre Eingabeaufforderung basierend auf der neuen Funktion neu. Das Folgende wäre der grundlegendste Ansatz - aber Sie können ihn gerne hinzufügen Ihre eigenen Variablen wie benötigt:

PROMPT='$(mail_count) '

Wenn Sie sich nicht mit Ihrer Eingabeaufforderung anlegen oder einen der oh-my-zsh-Stile oder sogar den verwenden möchten promptinit Sie können auch einfach das precmd() Funktion, in der Sie alles definieren, was ausgeführt werden soll, bevor ein anderer Befehl ausgeführt wird. In diesem Fall würden Sie das nicht benötigen PROMPT_SUBST Möglichkeit.

precmd() {
  mail_count
}

Unabhängig davon, welche Methode Sie verwenden, wird die Anzahl Ihrer ungelesenen E-Mails im Klartext ausgegeben. Wenn Sie die Nachrichten ändern möchten, werfen Sie einen Blick auf die Quelle der .scpt Datei und ändern Sie es entsprechend.

slhck
quelle
Dies ist O (n), wo n die Anzahl der Nachrichten in meinem Posteingang ist, richtig? Ich habe zu viele Nachrichten. Wäre es nicht zu langsam?
snihalani
Ja richtig. Es könnte etwas langsam sein. Ich habe es gerade mit Dummy-Werten getestet, offensichtlich auf einer ziemlich schnellen Maschine - fast augenblicklich. Ihr Kilometerstand kann variieren. Sie können möglicherweise anders zählen - mit unread count of every mailbox wie hier erklärt .
slhck
Ich habe das bessere Skript als Antwort gepostet. Hör zu.
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

Ich fand das am effizientesten.

snihalani
quelle
Cool. Wenn Sie nur den Posteingang und keine verschachtelten Ordner verwenden möchten, ist dies definitiv eine effizientere Lösung.
slhck