feat(tools/emacs): Bindings for (un)collapsing notmuch subthreads

Modifies notmuch-show-open-or-close-subthread to take a parameter
instead of using prefix to toggle the argument, and binds that
function to C-, and C-. in notmuch-show-mode-map to enable convenient
collapsing/uncollapsing of subthreads from point.
This commit is contained in:
Vincent Ambo 2020-04-02 01:35:16 +01:00
parent 5aaeaa406a
commit 40d13cc87f
2 changed files with 15 additions and 7 deletions

View file

@ -41,4 +41,14 @@
;; Insert TODO comments ;; Insert TODO comments
(global-set-key (kbd "C-c t") 'insert-todo-comment) (global-set-key (kbd "C-c t") 'insert-todo-comment)
;; Add subthread collapsing to notmuch-show.
;;
;; C-, closes a thread, C-. opens a thread. This mirrors stepping
;; in/out of definitions.
(define-key notmuch-show-mode-map (kbd "C-,") 'notmuch-show-open-or-close-subthread)
(define-key notmuch-show-mode-map (kbd "C-.")
(lambda ()
(interactive)
(notmuch-show-open-or-close-subthread t))) ;; open
(provide 'bindings) (provide 'bindings)

View file

@ -1,5 +1,6 @@
(require 'chart) (require 'chart)
(require 'dash) (require 'dash)
(require 'map)
(defun load-file-if-exists (filename) (defun load-file-if-exists (filename)
(if (file-exists-p filename) (if (file-exists-p filename)
@ -289,17 +290,14 @@
(-map #'car tag-counts) "Tag:" (-map #'car tag-counts) "Tag:"
(-map #'cdr tag-counts) "Count:"))) (-map #'cdr tag-counts) "Count:")))
(defun notmuch-show-open-or-close-subthread () (defun notmuch-show-open-or-close-subthread (&optional open)
"Open or close the subthread from (and including) the message "Open or close the subthread from (and including) the message at point."
at point. Opens by default, closes if the prefix argument is
set."
(interactive) (interactive)
(save-excursion (save-excursion
(let ((current-depth (map-elt (notmuch-show-get-message-properties) :depth 0))) (let ((current-depth (map-elt (notmuch-show-get-message-properties) :depth 0)))
(loop do (notmuch-show-message-visible (notmuch-show-get-message-properties) (loop do (notmuch-show-message-visible (notmuch-show-get-message-properties) open)
(not current-prefix-arg))
until (or (not (notmuch-show-goto-message-next)) until (or (not (notmuch-show-goto-message-next))
(= (map-elt (notmuch-show-get-message-properties) :depth 0) current-depth))))) (= (map-elt (notmuch-show-get-message-properties)) current-depth)))))
(force-window-update)) (force-window-update))
(provide 'functions) (provide 'functions)