From 4ad52a17ba5bdf9b695c476ec55584cfd7941dbb Mon Sep 17 00:00:00 2001 From: jao Date: Wed, 2 Mar 2022 03:30:55 +0000 Subject: jao-notmuch-gnus: new library for notmuch-gnus interop --- gnus.org | 83 +++++++++++++++------------------------------------------------- 1 file changed, 19 insertions(+), 64 deletions(-) (limited to 'gnus.org') 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-") + #'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") -- cgit v1.2.3