Merge buttons-for-body-and-headers branch.

Thanks, Alexander!
This commit is contained in:
Carl Worth 2009-11-24 11:35:08 -08:00
commit c1e16435cf

View file

@ -61,9 +61,6 @@
; overlays-at to query and manipulate the current overlay. ; overlays-at to query and manipulate the current overlay.
(define-key map "a" 'notmuch-show-archive-thread) (define-key map "a" 'notmuch-show-archive-thread)
(define-key map "A" 'notmuch-show-mark-read-then-archive-thread) (define-key map "A" 'notmuch-show-mark-read-then-archive-thread)
(define-key map "b" 'notmuch-show-toggle-body-read-visible)
(define-key map "c" 'notmuch-show-toggle-citations-visible)
(define-key map "h" 'notmuch-show-toggle-headers-visible)
(define-key map "m" 'message-mail) (define-key map "m" 'message-mail)
(define-key map "n" 'notmuch-show-next-message) (define-key map "n" 'notmuch-show-next-message)
(define-key map "N" 'notmuch-show-mark-read-then-next-open-message) (define-key map "N" 'notmuch-show-mark-read-then-next-open-message)
@ -72,7 +69,6 @@
(define-key map (kbd "C-p") 'notmuch-show-previous-line) (define-key map (kbd "C-p") 'notmuch-show-previous-line)
(define-key map "q" 'kill-this-buffer) (define-key map "q" 'kill-this-buffer)
(define-key map "r" 'notmuch-show-reply) (define-key map "r" 'notmuch-show-reply)
(define-key map "s" 'notmuch-show-toggle-signatures-visible)
(define-key map "v" 'notmuch-show-view-all-mime-parts) (define-key map "v" 'notmuch-show-view-all-mime-parts)
(define-key map "w" 'notmuch-show-view-raw-message) (define-key map "w" 'notmuch-show-view-raw-message)
(define-key map "x" 'kill-this-buffer) (define-key map "x" 'kill-this-buffer)
@ -500,6 +496,16 @@ which this thread was originally shown."
(force-window-update) (force-window-update)
(redisplay t)) (redisplay t))
(define-button-type 'notmuch-button-invisibility-toggle-type 'action 'notmuch-toggle-invisible-action 'follow-link t)
(define-button-type 'notmuch-button-citation-toggle-type 'help-echo "mouse-1, RET: Show citation"
:supertype 'notmuch-button-invisibility-toggle-type)
(define-button-type 'notmuch-button-signature-toggle-type 'help-echo "mouse-1, RET: Show signature"
:supertype 'notmuch-button-invisibility-toggle-type)
(define-button-type 'notmuch-button-headers-toggle-type 'help-echo "mouse-1, RET: Show headers"
:supertype 'notmuch-button-invisibility-toggle-type)
(define-button-type 'notmuch-button-body-toggle-type 'help-echo "mouse-1, RET: Show message"
:supertype 'notmuch-button-invisibility-toggle-type)
(defun notmuch-show-markup-citations-region (beg end depth) (defun notmuch-show-markup-citations-region (beg end depth)
(goto-char beg) (goto-char beg)
(beginning-of-line) (beginning-of-line)
@ -515,22 +521,15 @@ which this thread was originally shown."
(invis-spec (make-symbol "notmuch-citation-region"))) (invis-spec (make-symbol "notmuch-citation-region")))
(add-to-invisibility-spec invis-spec) (add-to-invisibility-spec invis-spec)
(overlay-put overlay 'invisible invis-spec) (overlay-put overlay 'invisible invis-spec)
(let ( (let ((p (point))
(p (point))
(cite-button-text (cite-button-text
(concat "[" (number-to-string (count-lines beg-sub (point))) (concat "[" (number-to-string (count-lines beg-sub (point)))
"-line citation.]")) "-line citation.]")))
)
(goto-char (- beg-sub 1)) (goto-char (- beg-sub 1))
(insert (concat "\n" indent)) (insert (concat "\n" indent))
(let ((cite-button (insert-button cite-button-text))) (insert-button cite-button-text
(button-put cite-button 'invisibility-spec invis-spec) 'invisibility-spec invis-spec
(button-put cite-button 'action 'notmuch-toggle-invisible-action) :type 'notmuch-button-citation-toggle-type)
(button-put cite-button 'follow-link t)
(button-put cite-button 'help-echo
"mouse-1, RET: Show citation")
)
(insert "\n") (insert "\n")
(goto-char (+ (length cite-button-text) p)) (goto-char (+ (length cite-button-text) p))
)))) ))))
@ -546,15 +545,10 @@ which this thread was originally shown."
(goto-char (- beg-sub 1)) (goto-char (- beg-sub 1))
(insert (concat "\n" indent)) (insert (concat "\n" indent))
(let ((sig-button (insert-button (let ((sig-button-text (concat "[" (number-to-string sig-lines)
(concat "[" (number-to-string sig-lines) "-line signature.]")))
"-line signature.]")))) (insert-button sig-button-text 'invisibility-spec invis-spec
(button-put sig-button 'invisibility-spec invis-spec) :type 'notmuch-button-signature-toggle-type)
(button-put sig-button 'action
'notmuch-toggle-invisible-action)
(button-put sig-button 'follow-link t)
(button-put sig-button 'help-echo
"mouse-1, RET: Show signature")
) )
(insert "\n") (insert "\n")
(goto-char end)))))) (goto-char end))))))
@ -584,16 +578,19 @@ which this thread was originally shown."
(while (< (point) end) (while (< (point) end)
(notmuch-show-markup-part beg end depth)))) (notmuch-show-markup-part beg end depth))))
(defun notmuch-show-markup-body (depth) (defun notmuch-show-markup-body (depth btn)
(re-search-forward notmuch-show-body-begin-regexp) (re-search-forward notmuch-show-body-begin-regexp)
(forward-line) (forward-line)
(let ((beg (point-marker))) (let ((beg (point-marker)))
(re-search-forward notmuch-show-body-end-regexp) (re-search-forward notmuch-show-body-end-regexp)
(let ((end (copy-marker (match-beginning 0)))) (let ((end (copy-marker (match-beginning 0))))
(notmuch-show-markup-parts-region beg end depth) (notmuch-show-markup-parts-region beg end depth)
(if (not (notmuch-show-message-unread-p)) (let ((invis-spec (make-symbol "notmuch-show-body-read")))
(overlay-put (make-overlay beg end) (overlay-put (make-overlay beg end)
'invisible 'notmuch-show-body-read)) 'invisible invis-spec)
(button-put btn 'invisibility-spec invis-spec)
(if (not (notmuch-show-message-unread-p))
(add-to-invisibility-spec invis-spec)))
(set-marker beg nil) (set-marker beg nil)
(set-marker end nil) (set-marker end nil)
))) )))
@ -601,11 +598,14 @@ which this thread was originally shown."
(defun notmuch-show-markup-header (depth) (defun notmuch-show-markup-header (depth)
(re-search-forward notmuch-show-header-begin-regexp) (re-search-forward notmuch-show-header-begin-regexp)
(forward-line) (forward-line)
(let ((beg (point-marker))) (let ((beg (point-marker))
(btn nil))
(end-of-line) (end-of-line)
; Inverse video for subject ; Inverse video for subject
(overlay-put (make-overlay beg (point)) 'face '(:inverse-video t)) (overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
(forward-line 2) (setq btn (make-button beg (point) :type 'notmuch-button-body-toggle-type))
(forward-line 1)
(end-of-line)
(let ((beg-hidden (point-marker))) (let ((beg-hidden (point-marker)))
(re-search-forward notmuch-show-header-end-regexp) (re-search-forward notmuch-show-header-end-regexp)
(beginning-of-line) (beginning-of-line)
@ -619,22 +619,31 @@ which this thread was originally shown."
(forward-line) (forward-line)
) )
(indent-rigidly beg end depth) (indent-rigidly beg end depth)
(let ((invis-spec (make-symbol "notmuch-show-header")))
(add-to-invisibility-spec (cons invis-spec t))
(overlay-put (make-overlay beg-hidden end) (overlay-put (make-overlay beg-hidden end)
'invisible 'notmuch-show-header) 'invisible invis-spec)
(goto-char beg)
(forward-line)
(make-button (line-beginning-position) (line-end-position)
'invisibility-spec (cons invis-spec t)
:type 'notmuch-button-headers-toggle-type))
(goto-char end) (goto-char end)
(insert "\n") (insert "\n")
(set-marker beg nil) (set-marker beg nil)
(set-marker beg-hidden nil) (set-marker beg-hidden nil)
(set-marker end nil) (set-marker end nil)
)))) ))
btn))
(defun notmuch-show-markup-message () (defun notmuch-show-markup-message ()
(if (re-search-forward notmuch-show-message-begin-regexp nil t) (if (re-search-forward notmuch-show-message-begin-regexp nil t)
(progn (progn
(re-search-forward notmuch-show-depth-regexp) (re-search-forward notmuch-show-depth-regexp)
(let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1))))) (let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1))))
(notmuch-show-markup-header depth) (btn nil))
(notmuch-show-markup-body depth))) (setq btn (notmuch-show-markup-header depth))
(notmuch-show-markup-body depth btn)))
(goto-char (point-max)))) (goto-char (point-max))))
(defun notmuch-show-hide-markers () (defun notmuch-show-hide-markers ()
@ -654,50 +663,6 @@ which this thread was originally shown."
(notmuch-show-markup-message))) (notmuch-show-markup-message)))
(notmuch-show-hide-markers)) (notmuch-show-hide-markers))
(defun notmuch-show-toggle-citations-visible ()
"Toggle visibility of citations"
(interactive)
(if notmuch-show-citations-visible
(add-to-invisibility-spec 'notmuch-show-citation)
(remove-from-invisibility-spec 'notmuch-show-citation))
(set 'notmuch-show-citations-visible (not notmuch-show-citations-visible))
; Need to force the redisplay for some reason
(force-window-update)
(redisplay t))
(defun notmuch-show-toggle-signatures-visible ()
"Toggle visibility of signatures"
(interactive)
(if notmuch-show-signatures-visible
(add-to-invisibility-spec 'notmuch-show-signature)
(remove-from-invisibility-spec 'notmuch-show-signature))
(set 'notmuch-show-signatures-visible (not notmuch-show-signatures-visible))
; Need to force the redisplay for some reason
(force-window-update)
(redisplay t))
(defun notmuch-show-toggle-headers-visible ()
"Toggle visibility of header fields"
(interactive)
(if notmuch-show-headers-visible
(add-to-invisibility-spec 'notmuch-show-header)
(remove-from-invisibility-spec 'notmuch-show-header))
(set 'notmuch-show-headers-visible (not notmuch-show-headers-visible))
; Need to force the redisplay for some reason
(force-window-update)
(redisplay t))
(defun notmuch-show-toggle-body-read-visible ()
"Toggle visibility of message bodies of read messages"
(interactive)
(if notmuch-show-body-read-visible
(add-to-invisibility-spec 'notmuch-show-body-read)
(remove-from-invisibility-spec 'notmuch-show-body-read))
(set 'notmuch-show-body-read-visible (not notmuch-show-body-read-visible))
; Need to force the redisplay for some reason
(force-window-update)
(redisplay t))
;;;###autoload ;;;###autoload
(defun notmuch-show-mode () (defun notmuch-show-mode ()
"Major mode for viewing a thread with notmuch. "Major mode for viewing a thread with notmuch.
@ -726,14 +691,6 @@ view, (remove the \"inbox\" tag from each), with
\\{notmuch-show-mode-map}" \\{notmuch-show-mode-map}"
(interactive) (interactive)
(kill-all-local-variables) (kill-all-local-variables)
(set (make-local-variable 'notmuch-show-headers-visible) t)
(notmuch-show-toggle-headers-visible)
(set (make-local-variable 'notmuch-show-body-read-visible) t)
(notmuch-show-toggle-body-read-visible)
(set (make-local-variable 'notmuch-show-citations-visible) t)
(notmuch-show-toggle-citations-visible)
(set (make-local-variable 'notmuch-show-signatures-visible) t)
(notmuch-show-toggle-signatures-visible)
(add-to-invisibility-spec 'notmuch-show-marker) (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
@ -802,7 +759,16 @@ thread from that buffer can be show when done with this one)."
(if (not (notmuch-show-message-unread-p)) (if (not (notmuch-show-message-unread-p))
(progn (progn
(goto-char (point-min)) (goto-char (point-min))
(notmuch-show-toggle-body-read-visible))))) (let ((btn (forward-button 1)))
(while btn
(if (button-has-type-p btn 'notmuch-button-body-toggle-type)
(push-button))
(condition-case err
(setq btn (forward-button 1))
(error (setq btn nil)))
))
(beginning-of-buffer)
))))
))) )))
(defvar notmuch-search-authors-width 40 (defvar notmuch-search-authors-width 40
@ -840,6 +806,7 @@ thread from that buffer can be show when done with this one)."
(defvar notmuch-search-query-string) (defvar notmuch-search-query-string)
(defvar notmuch-search-oldest-first) (defvar notmuch-search-oldest-first)
(defun notmuch-search-scroll-up () (defun notmuch-search-scroll-up ()
"Scroll up, moving point to last message in thread if at end." "Scroll up, moving point to last message in thread if at end."
(interactive) (interactive)