mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
Merge buttons-for-body-and-headers branch.
Thanks, Alexander!
This commit is contained in:
commit
c1e16435cf
1 changed files with 58 additions and 91 deletions
143
notmuch.el
143
notmuch.el
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue