From abb908ef1e96e94a46571be44819cee2401ae873 Mon Sep 17 00:00:00 2001 From: jao Date: Thu, 26 Nov 2020 19:45:45 +0000 Subject: further jao-maildir improvements --- net/jao-maildir.el | 57 +++++++++++++++++++++++++++++++----------------------- 1 file 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) -- cgit v1.2.3