summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2020-11-26 19:45:45 +0000
committerjao <jao@gnu.org>2020-11-26 19:45:45 +0000
commitabb908ef1e96e94a46571be44819cee2401ae873 (patch)
treeb3919b797ee6daa0566f4eb53554c1be134361a6
parent5156372ca48620345a94efeff76ca93da012594e (diff)
downloadelibs-abb908ef1e96e94a46571be44819cee2401ae873.tar.gz
elibs-abb908ef1e96e94a46571be44819cee2401ae873.tar.bz2
further jao-maildir improvements
-rw-r--r--net/jao-maildir.el57
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)