From 81e017821c7e96b1cbc91f7cae4f001a530d2e36 Mon Sep 17 00:00:00 2001 From: jao Date: Tue, 20 Apr 2021 04:38:35 +0100 Subject: fully functional notmuch --- email.org | 81 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 43 insertions(+), 38 deletions(-) (limited to 'email.org') diff --git a/email.org b/email.org index 1a03bc9..6e4f592 100644 --- a/email.org +++ b/email.org @@ -197,12 +197,20 @@ * notmuch *** hello page #+begin_src emacs-lisp - (defun jao-notmuch--mboxes-search (box) - (mapcar (lambda (m) - `(:name ,(format "%s:%s" box m) - :search-type tree - :query ,(format "folder:%s/%s and tag:unread" box m))) - (jao-list-mailboxes box))) + (defun jao-notmuch--and (frags) + (when frags (mapconcat #'identity frags " AND "))) + + (defun jao-notmuch--q (d0 d1 &optional k qs) + (list :name (concat d0 (when d1 "/") d1) :search-type 'tree :key k + :query (or (jao-notmuch--and qs) + (format "folder:%s/%s and tag:unread" d0 d1)))) + + (defun jao-notmuch--mboxes-search (box &rest excluded) + (let ((ms (seq-difference (jao-list-mailboxes box) excluded)) + (bp (substring box 0 1))) + (mapcar `(lambda (m) + (jao-notmuch--q ,box (car m) (concat ,bp (cdr m)))) + (shorten-strings (sort ms #'string<))))) (defun jao--refresh-agenda () (save-window-excursion (org-agenda-list))) @@ -210,22 +218,14 @@ (add-hook 'notmuch-hello-refresh-hook #'jao--refresh-agenda)) (setq notmuch-saved-searches - `((:name "jao" :key "j" - :query "folder:jao/inbox" - :search-type tree - :count-query "folder:jao/inbox and tag:unread") - (:name "bigml" :key "b" - :count-query "folder:bigml/inbox and tag:unread" - :search-type tree - :query "folder:bigml/inbox") - ,@(jao-notmuch--mboxes-search "bigml") - ,@(jao-notmuch--mboxes-search "jao") + `(,(jao-notmuch--q "jao" "inbox" "ji") + ,(jao-notmuch--q "bigml" "inbox" "bi") + ,@(jao-notmuch--mboxes-search "bigml" "inbox" "deploys") + ,@(jao-notmuch--mboxes-search "jao" "inbox") ,@(jao-notmuch--mboxes-search "feeds") - (:name "feeds" :query "tag:new and tag:feeds and not tag:emacs" - :key "f" :search-type tree) - (:name "today" :key "t" :search-type tree - :query "tag:/support|inbox|bugs|bills|hacking/ and date:1d..") - (:name "new" :query "tag:new" :key "n" :search-type tree)) + ,(jao-notmuch--q "toread" nil "r" '("tag:toread")) + ,(jao-notmuch--q "bml/today" nil "tb" '("tag:bigml" "date:1d..")) + ,(jao-notmuch--q "jao/today" nil "tj" '("tag:jao" "date:1d.."))) notmuch-hello-sections '(notmuch-hello-insert-saved-searches notmuch-hello-insert-alltags notmuch-hello-insert-recent-searches @@ -315,14 +315,15 @@ "Reply-To" "X-Mailer" "User-Agent" "X-User-Agent") notmuch-message-headers jao-notmuch-message-headers - notmuch-show-mark-read-tags '("-new" "-unread") - notmuch-archive-tags '("+archive" "-new" "-unread") + notmuch-show-mark-read-tags '("-new" "-unread" "-toread") + notmuch-archive-tags '("+trove" "-new" "-unread" "-inbox") notmuch-tagging-keys '(("a" notmuch-archive-tags "Archive") ("d" notmuch-show-mark-read-tags "Mark read") ("u" ("+new" "+unread") "Mark unred read") ("f" ("+flagged") "Flag") - ("x" ("+expired" "-new" "-flagged" "-unread") "Expired")) + ("r" ("+toread") "Read later") + ("x" ("+deleted" "-new" "-flagged" "-unread") "Deleted")) notmuch-show-all-multipart/alternative-parts nil notmuch-show-indent-messages-width 2 notmuch-show-imenu-indent t @@ -340,11 +341,13 @@ ("subject" . "%-95s") ("tags" . "(%s)")) notmuch-unthreaded-result-format notmuch-tree-result-format + notmuch-wash-signature-lines-max 0 notmuch-wash-wrap-lines-length 80 notmuch-wash-citation-lines-prefix 10 notmuch-wash-citation-lines-suffix 20) :config - (setq mm-text-html-renderer 'shr) + + ;; (setq mm-text-html-renderer 'shr) (defun jao-mail-clean-address (fun address) (let ((address (if (string-match ".+ updates on arXiv.org: \\(.+\\)" @@ -363,14 +366,16 @@ notmuch-common-keymap (("T" . jao-notmuch-tree-tag) ("E" . jao-notmuch-open-enclosure) ("B" . jao-notmuch-browse-urls) - ("M-g" . jao-notmuch-follow-link)) + ("M-g" . jao-notmuch-follow-link) + ("k" . jao-notmuch-tag-jump) + ("j" . jao-notmuch-jump)) + :map notmuch-message-mode-map + (("C-c C-d" . notmuch-draft-postpone)) :map notmuch-show-mode-map (("h" . jao-notmuch-goto-index-buffer) - ("k" . jao-notmuch-tag-jump) ("C-c C-c" . jao-notmuch-goto-message-in-gnus)) :map notmuch-hello-mode-map - (("j" . jao-notmuch-jump) - ("S" . consult-notmuch)) + (("S" . consult-notmuch)) :map notmuch-tree-mode-map (("h" . jao-notmuch-goto-message-buffer) ("k" . jao-notmuch-tag-jump)))) @@ -416,10 +421,10 @@ #+begin_src bash :tangle ./bin/notmuch-tags.sh :tangle-mode (identity #o755) notmuch new > $HOME/var/log/notmuch.log 2>&1 - function tag_expired { - notmuch tag +expired -- \ + function tag_deleted { + notmuch tag +deleted -- \ "'folder:\"$1\"'" \ - AND date:..${2:-3d} AND NOT "tag:/flagged|unread|new/" + AND date:..${2:-3d} AND NOT "tag:/trove|flagged|unread|new/" } function tag_folder { @@ -436,15 +441,15 @@ tag_directory jao tag_directory feeds - tag_expired "/bigml.(drivel|lists|deploys|bugs)/" 3d - tag_expired "/bigml.reports/" 1d - tag_expired "/jao.(drivel|lists|books|think)/" 3d - tag_expired "/feeds.+/" 3d - tag_expired "/bigml.inbox$/" 1y + tag_deleted "/bigml.(drivel|lists|deploys|bugs)/" 3d + tag_deleted "/bigml.reports/" 1d + tag_deleted "/jao.(drivel|lists|books|think)/" 3d + tag_deleted "/feeds.+/" 3d + tag_deleted "/bigml.inbox$/" 1y #+end_src *** expire shell script #+begin_src bash :tangle ./bin/notmuch-expire.sh :tangle-mode (identity #o755) - notmuch search --output=files --format=text0 tag:expired | xargs -r0 rm + notmuch search --output=files --format=text0 tag:deleted | xargs -r0 rm notmuch new > $HOME/var/log/notmuch-expire.log 2>&1 notmuch compact >> $HOME/var/log/notmuch-expire.log 2>&1 #+end_src -- cgit v1.2.3