X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=emacs%2Fnotmuch-hello.el;h=50d89110e5c50611aae7900397ce048cd10119b0;hb=3d64993586af7286c6b0fc56bdcef19ae7813c80;hp=bbeb5de0c8c7d7d164af31477457b2fdcf1465f9;hpb=f1f7e71e0347672e0658362c513e49c05b0f4161;p=notmuch diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index bbeb5de0..50d89110 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -142,11 +142,15 @@ diagonal." notmuch-search-oldest-first nil nil #'notmuch-hello-search-continuation)) +(defun notmuch-saved-search-count (search) + (car (process-lines notmuch-command "count" search))) + (defun notmuch-hello-insert-tags (tag-alist widest target) (let* ((tags-per-line (max 1 (/ (- (window-width) notmuch-hello-indent) - ;; Count is 7 wide, 1 for the space - ;; after the name. + ;; Count is 7 wide (6 digits plus + ;; space), 1 for the space after the + ;; name. (+ 7 1 widest)))) (count 0) (reordered-list (notmuch-hello-reflect tag-alist tags-per-line)) @@ -156,21 +160,30 @@ diagonal." (found-target-pos nil)) ;; dme: It feels as though there should be a better way to ;; implement this loop than using an incrementing counter. - (loop for elem in reordered-list - do (progn - ;; (not elem) indicates an empty slot in the matrix. - (when elem - (widget-insert (format "%6s " (notmuch-folder-count (cdr elem)))) - (if (string= (format "%s " (car elem)) target) - (setq found-target-pos (point-marker))) - (widget-create 'push-button - :notify #'notmuch-hello-widget-search - :notmuch-search-terms (cdr elem) - (format "%s " (car elem))) - (insert (make-string (1+ (- widest (length (car elem)))) ? ))) - (setq count (1+ count)) - (if (eq (% count tags-per-line) 0) - (widget-insert "\n")))) + (mapc (lambda (elem) + ;; (not elem) indicates an empty slot in the matrix. + (when elem + (let* ((name (car elem)) + (query (cdr elem)) + (formatted-name (format "%s " name))) + (widget-insert (format "%6s " (notmuch-saved-search-count query))) + (if (string= formatted-name target) + (setq found-target-pos (point-marker))) + (widget-create 'push-button + :notify #'notmuch-hello-widget-search + :notmuch-search-terms query + formatted-name) + ;; Insert enough space to consume the rest of the + ;; column. Because the button for the name is `(1+ + ;; (length name))' long (due to the trailing space) we + ;; can just insert `(- widest (length name))' spaces - + ;; the column separator is included in the button if + ;; `(equal widest (length name)'. + (widget-insert (make-string (- widest (length name)) ? ))) + (setq count (1+ count)) + (if (eq (% count tags-per-line) 0) + (widget-insert "\n")))) + reordered-list) ;; If the last line was not full (and hence did not include a ;; carriage return), insert one now. @@ -268,7 +281,7 @@ diagonal." (if notmuch-show-empty-saved-searches notmuch-saved-searches (loop for elem in notmuch-saved-searches - if (> (string-to-number (notmuch-folder-count (cdr elem))) 0) + if (> (string-to-number (notmuch-saved-search-count (cdr elem))) 0) collect elem))) (saved-widest (notmuch-hello-longest-label saved-alist)) (alltags-alist (mapcar '(lambda (tag) (cons tag (concat "tag:" tag))) @@ -396,6 +409,12 @@ diagonal." (if (not (widget-at)) (widget-forward 1))))) +;;;###autoload +(defun notmuch-folder () + "Deprecated function for invoking notmuch---calling `notmuch' is preferred now." + (interactive) + (notmuch-hello)) + ;; (provide 'notmuch-hello)