notmuch.el: Enter now calls "notmuch show" on the current thread

It's remarkable how little code we need for a very functional GUI
here. I think we're doing something right.
This commit is contained in:
Carl Worth 2009-10-31 01:41:44 -07:00
parent 8c9cc63a2e
commit 1c75d622c9

View file

@ -31,17 +31,53 @@
; Authors: Roland McGrath <roland@gnu.org>, ; Authors: Roland McGrath <roland@gnu.org>,
; Daniel Pfeiffer <occitan@esperanto.org> ; Daniel Pfeiffer <occitan@esperanto.org>
(defvar notmuch-show-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "x" 'kill-this-buffer)
map)
"Keymap for \"notmuch show\" buffers.")
(fset 'notmuch-show-mode-map notmuch-show-mode-map)
;;;###autoload
(defun notmuch-show-mode ()
"Major mode for handling the output of \"notmuch show\""
(interactive)
(kill-all-local-variables)
(use-local-map notmuch-show-mode-map)
(setq major-mode 'notmuch-show-mode
mode-name "notmuch-show")
(setq buffer-read-only t))
(defun notmuch-show (thread-id)
"Run \"notmuch show\" with the given thread ID and display results."
(interactive "sNotmuch show: ")
(let ((buffer (get-buffer-create (concat "*notmuch-show-" thread-id))))
(switch-to-buffer buffer)
(notmuch-show-mode)
(let ((proc (get-buffer-process (current-buffer)))
(inhibit-read-only t))
(if proc
(error "notmuch search process already running for query `%s'" query)
)
(erase-buffer)
(beginning-of-buffer)
(save-excursion
(call-process "notmuch" nil t nil "show" thread-id)
)
)))
(defvar notmuch-search-mode-map (defvar notmuch-search-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(define-key map "n" 'next-line) (define-key map "n" 'next-line)
(define-key map "p" 'previous-line) (define-key map "p" 'previous-line)
(define-key map "\r" 'notmuch-search-show-thread)
map) map)
"Keymap for \"notmuch search\" buffers.") "Keymap for \"notmuch search\" buffers.")
(fset 'notmuch-search-mode-map notmuch-search-mode-map) (fset 'notmuch-search-mode-map notmuch-search-mode-map)
;;;###autoload ;;;###autoload
(defun notmuch-search-mode () (defun notmuch-search-mode ()
"Major mode for handling the output of notmuch search" "Major mode for handling the output of \"notmuch search\""
(interactive) (interactive)
(kill-all-local-variables) (kill-all-local-variables)
(use-local-map notmuch-search-mode-map) (use-local-map notmuch-search-mode-map)
@ -49,6 +85,17 @@
mode-name "notmuch-search") mode-name "notmuch-search")
(setq buffer-read-only t)) (setq buffer-read-only t))
(defun notmuch-search-find-thread-id ()
(save-excursion
(beginning-of-line)
(let ((beg (point)))
(re-search-forward "[a-fA-F0-9]*")
(filter-buffer-substring beg (point)))))
(defun notmuch-search-show-thread ()
(interactive)
(notmuch-show (notmuch-search-find-thread-id)))
(defun notmuch-search (query) (defun notmuch-search (query)
"Run \"notmuch search\" with the given query string and display results." "Run \"notmuch search\" with the given query string and display results."
(interactive "sNotmuch search: ") (interactive "sNotmuch search: ")