summaryrefslogtreecommitdiffhomepage
path: root/gnus.org
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2022-03-02 03:30:55 +0000
committerjao <jao@gnu.org>2022-03-02 03:30:55 +0000
commit4ad52a17ba5bdf9b695c476ec55584cfd7941dbb (patch)
treeef104dc8c728dc60b4fe98efc63c73f5f091c076 /gnus.org
parent8b8b40fe1ed9485b5bba72c584ab9b5507b9b65c (diff)
downloadelibs-4ad52a17ba5bdf9b695c476ec55584cfd7941dbb.tar.gz
elibs-4ad52a17ba5bdf9b695c476ec55584cfd7941dbb.tar.bz2
jao-notmuch-gnus: new library for notmuch-gnus interop
Diffstat (limited to 'gnus.org')
-rw-r--r--gnus.org83
1 files changed, 19 insertions, 64 deletions
diff --git a/gnus.org b/gnus.org
index afd7110..1a5a9ea 100644
--- a/gnus.org
+++ b/gnus.org
@@ -380,82 +380,37 @@
* Notmuch integration
*** notmuch tags
#+begin_src emacs-lisp
- (defun jao-gnus-message-id ()
- (when (derived-mode-p 'gnus-summary-mode)
- (save-window-excursion (gnus-summary-show-article)))
- (when gnus-original-article-buffer
- (with-current-buffer gnus-original-article-buffer
- (when-let (id (message-field-value "message-id"))
- (if (string-match "<\\(.+\\)>" id)
- (match-string 1 id)
- id)))))
-
- (defun jao-gnus-message-tags (id)
- (let ((cmd (format "notmuch search --output=tags 'id:%s'" id)))
- (split-string (shell-command-to-string cmd))))
-
- (defun jao-gnus-tag-message ()
- (interactive)
- (let* ((id (jao-gnus-message-id))
- (current (jao-gnus-message-tags id))
- (prompt (format "Change tags %s" (string-join current "/")))
- (tags (notmuch-read-tag-changes current prompt)))
- (notmuch-tag (concat "id:" id) tags)
- (message "%s -> %s" current (jao-gnus-message-tags id))))
-
- (defun jao-gnus-show-tags ()
- (interactive)
- (when-let (id (jao-gnus-message-id))
- (message "%s" (string-join (jao-gnus-message-tags id) " "))))
-
- (defun jao-gnus-toggle-tags (tags)
- (let* ((id (jao-gnus-message-id))
- (current (jao-gnus-message-tags id))
- (tags (mapcar (lambda (x)
- (concat (if (member x current) "-" "+") x))
- tags)))
- (notmuch-tag (concat "id:" id) tags)
- (message "New tags: %s" (jao-gnus-message-tags id))))
+ (require 'jao-notmuch-gnus)
(defun jao-gnus-toggle-todo ()
(interactive)
- (jao-gnus-toggle-tags '("todo")))
+ (jao-notmuch-gnus-toggle-tags '("todo")))
- (define-key gnus-summary-mode-map (kbd "C-c T") #'jao-gnus-tag-message)
- (define-key gnus-summary-mode-map (kbd "C-c t") #'jao-gnus-show-tags)
+ (define-key gnus-summary-mode-map (kbd "C-c T") #'jao-notmuch-gnus-tag-message)
+ (define-key gnus-summary-mode-map (kbd "C-c t") #'jao-notmuch-gnus-show-tags)
(define-key gnus-summary-mode-map (kbd "C-c C-t") #'jao-gnus-toggle-todo)
#+end_src
*** notmuch -> gnus / consult-notmuch
#+begin_src emacs-lisp
- (defun jao-notmuch-goto-message-in-gnus ()
- "Open a summary buffer containing the current notmuch article."
- (interactive)
- (let ((group (jao-maildir-file-to-group (notmuch-show-get-filename)
- mail-source-directory))
- (message-id (replace-regexp-in-string "^id:"
- ""
- (notmuch-show-get-message-id))))
- (if (and group message-id)
- (org-gnus-follow-link group message-id)
- (message "Couldn't get relevant infos for switching to Gnus."))))
-
- (defun jao-gnus-open-consult-candidate (candidate)
- (consult-notmuch--preview candidate nil)
- (with-current-buffer consult-notmuch--buffer-name
- (jao-notmuch-goto-message-in-gnus)
- (save-window-excursion (consult-notmuch--close-preview))))
-
- (defun jao-gnus-consult-notmuch ()
- (interactive)
- (jao-gnus-open-consult-candidate (consult-notmuch--search)))
-
(with-eval-after-load "notmuch-show"
(define-key gnus-group-mode-map "z" #'jao-gnus-consult-notmuch)
(define-key gnus-group-mode-map "Z" #'notmuch)
- (define-key notmuch-show-mode-map (kbd "C-c C-c")
- #'jao-notmuch-goto-message-in-gnus))
- #+end_src
+ (define-key notmuch-show-mode-map
+ (kbd "C-c C-c")
+ #'jao-notmuch-gnus-goto-message))
+
+ (defun jao-gnus-notmuch-export (query)
+ (notmuch-tree query nil nil "* consult-notmuch results *"))
+
+ (setq consult-notmuch-export-function #'jao-gnus-notmuch-export)
+
+ (with-eval-after-load "notmuch-tree"
+ (define-key notmuch-tree-mode-map
+ (kbd "C-<return>")
+ #'jao-notmuch-gnus-goto-message))
+
+ #+end_src
* Groups buffer
#+begin_src emacs-lisp
;; (setq gnus-group-line-format " %m%S%p%P:%~(pad-right 35)c %3y %B\n")