diff options
| -rw-r--r-- | net/jao-maildir.el | 57 | 
1 files changed, 33 insertions, 24 deletions
| diff --git a/net/jao-maildir.el b/net/jao-maildir.el index c2a456f..6a6bd6e 100644 --- a/net/jao-maildir.el +++ b/net/jao-maildir.el @@ -48,7 +48,8 @@  (defun jao-maildir--init-counts (maildirs)    (setq jao-maildir-counts (make-hash-table :test 'equal))    (setq jao-maildirs maildirs) -  (jao-maildir--update-counts)) +  (jao-maildir--update-counts) +  (jao-maildir--update-info-string t))  (defvar jao-maildir-tracked-maildirs)  (defvar jao-maildir-info-string "") @@ -60,27 +61,37 @@    "Face used to highlihgt non-boring tracked maildirs"    :group 'jao-maildir-faces) -(defun jao-maildir--tracked-cnt (r) -  (seq-reduce (lambda (c k) -                (if (string-match-p r k) (+ c (gethash k jao-maildir-counts 0)) c)) -              (hash-table-keys jao-maildir-counts) -              0)) - -(defun jao-maildir--update-info-string (&optional force) -  (when (eq force t) (jao-maildir--update-counts)) -  (let ((counts)) -    (dolist (track jao-maildir-tracked-maildirs) -      (let ((cnt (jao-maildir--tracked-cnt (car track)))) -        (when (> cnt 0) -          (let* ((label (cadr track)) -                 (face (caddr track)) +(defun jao-maildir--tracked-count (track) +  (let ((rx (car track))) +    (seq-reduce (lambda (c k) +                  (if (string-match-p rx k) (+ c (gethash k jao-maildir-counts 0)) c)) +                (hash-table-keys jao-maildir-counts) +                0))) + +(defvar jao-maildir--track-strings ()) + +(defun jao-maildir--update-track-string (mbox) +  (when-let ((track (seq-find (lambda (td) +                                (string-match-p (car td) mbox)) +                              jao-maildir-tracked-maildirs))) +    (let* ((label (cadr track)) +           (other (assoc-delete-all label jao-maildir--track-strings)) +           (cnt (jao-maildir--tracked-count track))) +      (if (> cnt 0) +          (let* ((face (caddr track))                   (am (format "%s%s" label cnt))                   (face1 (if (eq t face) 'jao-maildir-emph face)) -                 (am (if face (propertize am 'face face1) am))) -            (if face (push am counts) (setq counts (nconc counts (list am)))))))) -    (setq jao-maildir-info-string -          (if (null counts) "" (format " %s " (mapconcat 'identity counts " ")))) -    (when jao-maildir-echo-p (jao-minibuffer-refresh)))) +                 (str (cons label (if face (propertize am 'face face1) am)))) +            (setq jao-maildir--track-strings +                  (if face (cons str other) (append other (list str))))) +        (setq jao-maildir--track-strings other))))) + +(defun jao-maildir--update-info-string (&optional mbox) +  (cond ((eq mbox t) (seq-do 'jao-maildir--update-track-string jao-maildirs)) +        ((stringp mbox) (jao-maildir--update-track-string mbox))) +  (let ((s (mapconcat 'identity (mapcar 'cdr jao-maildir--track-strings) " "))) +    (setq jao-maildir-info-string (if (string-blank-p s) "" (concat s " ")))) +  (when jao-maildir-echo-p (jao-minibuffer-refresh)))  (defvar jao-maildir--watches nil) @@ -97,10 +108,8 @@      (jao-maildir--log-watch e mbox)      (when (memq (cadr e) '(created deleted))        (puthash mbox (jao-maildir--maildir-new-count mbox) jao-maildir-counts) -      (jao-maildir--update-info-string) -      (when cb (funcall cb mbox)) -      (when jao-maildir-echo-p -        (message (if (eq (cadr e) 'created) "New mail" "")))))) +      (jao-maildir--update-info-string mbox) +      (when cb (funcall cb mbox)))))  (defun jao-maildir--setup-watches (cb)    (jao-maildir-cancel-watchers) | 
