From f5ffe684dce6a65155e94c3e29f557979547bbed Mon Sep 17 00:00:00 2001 From: jao Date: Sun, 16 May 2021 01:21:09 +0100 Subject: notmuch as the search engine, with gnus the reader --- email.org | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 98 insertions(+), 8 deletions(-) (limited to 'email.org') diff --git a/email.org b/email.org index 7dd6388..745fb07 100644 --- a/email.org +++ b/email.org @@ -266,13 +266,100 @@ (gnus-demon-scan-news))))) #+end_src * notmuch -*** Local path +*** package #+begin_src emacs-lisp - (jao-load-path "notmuch") - (when (eq jao-afio-mail-function 'notmuch) - (jao-load-org "notmuch")) + (use-package notmuch + :ensure t + :init + (setq notmuch-hello-sections '(notmuch-hello-insert-saved-searches + notmuch-hello-insert-alltags + notmuch-hello-insert-header) + notmuch-hello-thousands-separator "," + notmuch-show-all-tags-list t + notmuch-show-logo nil + notmuch-show-empty-saved-searches nil + notmuch-show-mark-read-tags '("-new" "-unread") + notmuch-archive-tags '("+trove" "-new" "-unread" "-flagged") + notmuch-fcc-dirs + '((".*@bigml.com" . "trove/bigml +bigml +sent -new") + (".*" . "trove/jao +jao +sent -new")) + notmuch-maildir-use-notmuch-insert t) + :bind (:map notmuch-hello-mode-map (("S" . consult-notmuch) + ("SPC" . widget-button-press)))) #+end_src -*** Tag shell script +*** searches + #+begin_src emacs-lisp + (setq notmuch-search-result-format + '(("date" . "%12s ") + ("count" . "%-7s ") + ("authors" . "%-35s") + ("subject" . "%-100s") + ("tags" . "(%s)"))) + + (defun jao-notmuch--q (d0 d1 &optional k qs) + (let ((q (or (when qs (mapconcat #'identity qs " AND ")) + (format "folder:%s/%s and tag:unread" d0 d1)))) + (list :name (concat d0 (when d1 "/") d1) + :key k :query q + :sort-order 'oldest-first))) + + (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<))))) + + (setq notmuch-saved-searches + `(,(jao-notmuch--q "bigml" "inbox" "bi") + ,@(jao-notmuch--mboxes-search "bigml" "inbox" "deploys") + ,(jao-notmuch--q "jao" "inbox" "ji") + ,@(jao-notmuch--mboxes-search "jao" "inbox") + ,@(jao-notmuch--mboxes-search "feeds") + ,(jao-notmuch--q "bml/today" nil "tb" '("tag:bigml" "date:1d..")) + ,(jao-notmuch--q "jao/today" nil "tj" '("tag:jao" "date:1d..")) + ,(jao-notmuch--q "flagged" nil "r" '("tag:flagged")) + ,(jao-notmuch--q "new" nil "n" '("tag:new")) + ,(jao-notmuch--q "draft" nil "d" '("tag:draft")))) + #+end_src +*** org mode integration + Stolen and adapted from [[https://gist.github.com/fedxa/fac592424473f1b70ea489cc64e08911][Fedor Bezrukov]]. + #+begin_src emacs-lisp + (with-eval-after-load "org" + (with-eval-after-load "notmuch" + (org-link-set-parameters "notmuch" + :follow 'org-notmuch-open + :store 'org-notmuch-store-link) + + (defun org-notmuch-open (id) + "Visit the notmuch message or thread with id ID." + (notmuch-show id)) + + (defun org-notmuch-store-link () + "Store a link to a notmuch mail message." + (case major-mode + ((notmuch-show-mode notmuch-tree-mode) + ;; Store link to the current message + (let* ((id (notmuch-show-get-message-id)) + (link (concat "notmuch:" id)) + (description (format "Mail: %s" + (notmuch-show-get-subject)))) + (org-store-link-props + :type "notmuch" + :link link + :description description))) + (notmuch-search-mode + ;; Store link to the thread on the current line + (let* ((id (notmuch-search-find-thread-id)) + (link (concat "notmuch:" id)) + (description (format "Mail: %s" + (notmuch-search-find-subject)))) + (org-store-link-props + :type "notmuch" + :link link + :description description))))))) + #+end_src +*** tag shell script #+begin_src bash :tangle ./bin/notmuch-tags.sh :tangle-mode (identity #o755) notmuch new > $HOME/var/log/notmuch.log 2>&1 @@ -304,7 +391,10 @@ tag_deleted "feeds.+" 3d notmuch tag +deleted +trash -new -unread -- "folder:trash and tag:new" - - # XDG_RUNTIME_DIR='/run/user/1000' \ - # /usr/local/bin/emacsclient -e '(jao-notmuch-update-minibuffer)' > /dev/null + #+end_src +*** delete tagged shell script + #+begin_src bash :tangle ./bin/notmuch-expire.sh :tangle-mode (identity #o755) + 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