notmuch.el: Hide email headers by default.

The display of the header can be toggled with the 'h' key.
This commit is contained in:
Carl Worth 2009-11-02 22:24:35 -08:00
parent a81849b5e2
commit f2a4c3e565
2 changed files with 49 additions and 2 deletions

4
TODO
View file

@ -2,8 +2,8 @@ Emacs interface (notmuch.el)
---------------------------- ----------------------------
Add support to compose a reply to the current messaage. Add support to compose a reply to the current messaage.
Selectively hide headers and bodies in notmuch-show mode. (for Selectively hide bodies in notmuch-show mode. (for example, for read
example, for read messages). messages).
Remove "unread" tag from messages as they are read. Remove "unread" tag from messages as they are read.

View file

@ -33,6 +33,7 @@
(defvar notmuch-show-mode-map (defvar notmuch-show-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(define-key map "h" 'notmuch-show-toggle-headers-visible)
(define-key map "n" 'notmuch-show-next-message) (define-key map "n" 'notmuch-show-next-message)
(define-key map "p" 'notmuch-show-previous-message) (define-key map "p" 'notmuch-show-previous-message)
(define-key map "q" 'kill-this-buffer) (define-key map "q" 'kill-this-buffer)
@ -42,6 +43,11 @@
(fset 'notmuch-show-mode-map notmuch-show-mode-map) (fset 'notmuch-show-mode-map notmuch-show-mode-map)
(defvar notmuch-show-message-begin-regexp " message{") (defvar notmuch-show-message-begin-regexp " message{")
(defvar notmuch-show-message-end-regexp " message}")
(defvar notmuch-show-header-begin-regexp " header{")
(defvar notmuch-show-header-end-regexp " header}")
(defvar notmuch-show-headers-visible t)
(defun notmuch-show-next-message () (defun notmuch-show-next-message ()
"Advance point to the beginning of the next message in the buffer." "Advance point to the beginning of the next message in the buffer."
@ -65,11 +71,51 @@
(beginning-of-line) (beginning-of-line)
(recenter 0)) (recenter 0))
(defun notmuch-show-markup-this-header ()
(if (re-search-forward notmuch-show-header-begin-regexp nil t)
(progn
(overlay-put (make-overlay (match-beginning 0) (+ (match-end 0) 1))
'invisible 'notmuch-show-marker)
(next-line 1)
(beginning-of-line)
(let ((beg (point)))
(if (re-search-forward notmuch-show-header-end-regexp nil t)
(progn
(overlay-put (make-overlay beg (match-beginning 0))
'invisible 'notmuch-show-header)
(overlay-put (make-overlay (match-beginning 0) (+ (match-end 0) 1))
'invisible 'notmuch-show-marker)))))
(goto-char (point-max))))
(defun notmuch-show-markup-headers ()
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(notmuch-show-markup-this-header))))
(defun notmuch-show-toggle-headers-visible ()
"Toggle visibility of header fields"
(interactive)
(if notmuch-show-headers-visible
(progn
(add-to-invisibility-spec 'notmuch-show-header)
(set 'notmuch-show-headers-visible nil)
; Need to force the redisplay for some reason
(force-window-update)
(redisplay t))
(remove-from-invisibility-spec 'notmuch-show-header)
(set 'notmuch-show-headers-visible t)
(force-window-update)
(redisplay t)))
;;;###autoload ;;;###autoload
(defun notmuch-show-mode () (defun notmuch-show-mode ()
"Major mode for handling the output of \"notmuch show\"" "Major mode for handling the output of \"notmuch show\""
(interactive) (interactive)
(kill-all-local-variables) (kill-all-local-variables)
(set (make-local-variable 'notmuch-show-headers-visible) t)
(notmuch-show-toggle-headers-visible)
(add-to-invisibility-spec 'notmuch-show-marker)
(use-local-map notmuch-show-mode-map) (use-local-map notmuch-show-mode-map)
(setq major-mode 'notmuch-show-mode (setq major-mode 'notmuch-show-mode
mode-name "notmuch-show") mode-name "notmuch-show")
@ -90,6 +136,7 @@
(goto-char (point-min)) (goto-char (point-min))
(save-excursion (save-excursion
(call-process "notmuch" nil t nil "show" thread-id) (call-process "notmuch" nil t nil "show" thread-id)
(notmuch-show-markup-headers)
) )
))) )))