X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=emacs%2Fnotmuch-wash.el;h=a76b4f5b589ab0d0f1ada7ced2bc024e31a5b91b;hp=d6db4fa290970dd9bf851bd002f08f5e06fdc77d;hb=e26d99dc7b02f33299c281f97a13deaef802bc7a;hpb=8ba60168897e81133c85d9f4928b96ad4a4b6ffd diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el index d6db4fa2..a76b4f5b 100644 --- a/emacs/notmuch-wash.el +++ b/emacs/notmuch-wash.el @@ -23,77 +23,120 @@ (require 'coolj) -(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth)) +(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide)) ;; -(defvar notmuch-wash-signature-regexp - "^\\(-- ?\\|_+\\)$" - "Pattern to match a line that separates content from signature.") +(defgroup notmuch-wash nil + "Cleaning up messages for display." + :group 'notmuch) -(defvar notmuch-wash-citation-regexp - "\\(^[[:space:]]*>.*\n\\)+" - "Pattern to match citation lines.") +(defcustom notmuch-wash-signature-regexp "^\\(-- ?\\|_+\\)$" + "Pattern to match a line that separates content from signature." + :type 'regexp + :group 'notmuch-wash) -(defvar notmuch-wash-original-regexp "^\\(--+\s?[oO]riginal [mM]essage\s?--+\\)$" - "Pattern to match a line that separates original message from reply in top-posted message.") +(defcustom notmuch-wash-citation-regexp "\\(^[[:space:]]*>.*\n\\)+" + "Pattern to match citation lines." + :type 'regexp + :group 'notmuch-wash) -(defvar notmuch-wash-button-signature-hidden-format +(defcustom notmuch-wash-original-regexp "^\\(--+\s?[oO]riginal [mM]essage\s?--+\\)$" + "Pattern to match a line that separates original message from +reply in top-posted message." + :type 'regexp + :group 'notmuch-wash) + +(defcustom notmuch-wash-button-signature-hidden-format "[ %d-line signature. Click/Enter to show. ]" "String used to construct button text for hidden signatures. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-button-signature-visible-format +(defcustom notmuch-wash-button-signature-visible-format "[ %d-line signature. Click/Enter to hide. ]" "String used to construct button text for visible signatures. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-button-citation-hidden-format +(defcustom notmuch-wash-button-citation-hidden-format "[ %d more citation lines. Click/Enter to show. ]" "String used to construct button text for hidden citations. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-button-citation-visible-format +(defcustom notmuch-wash-button-citation-visible-format "[ %d more citation lines. Click/Enter to hide. ]" "String used to construct button text for visible citations. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-button-original-hidden-format +(defcustom notmuch-wash-button-original-hidden-format "[ %d-line hidden original message. Click/Enter to show. ]" "String used to construct button text for hidden citations. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-button-original-visible-format +(defcustom notmuch-wash-button-original-visible-format "[ %d-line original message. Click/Enter to hide. ]" "String used to construct button text for visible citations. -Can use up to one integer format parameter, i.e. %d") +Can use up to one integer format parameter, i.e. %d." + :type 'string + :group 'notmuch-wash) -(defvar notmuch-wash-signature-lines-max 12 - "Maximum length of signature that will be hidden by default.") +(defcustom notmuch-wash-signature-lines-max 12 + "Maximum length of signature that will be hidden by default." + :type 'integer + :group 'notmuch-wash) -(defvar notmuch-wash-citation-lines-prefix 3 +(defcustom notmuch-wash-citation-lines-prefix 3 "Always show at least this many lines from the start of a citation. If there is one more line than the sum of `notmuch-wash-citation-lines-prefix' and `notmuch-wash-citation-lines-suffix', show that, otherwise -collapse the remaining lines into a button.") +collapse the remaining lines into a button." + :type 'integer + :group 'notmuch-wash) -(defvar notmuch-wash-citation-lines-suffix 3 +(defcustom notmuch-wash-citation-lines-suffix 3 "Always show at least this many lines from the end of a citation. If there is one more line than the sum of `notmuch-wash-citation-lines-prefix' and `notmuch-wash-citation-lines-suffix', show that, otherwise -collapse the remaining lines into a button.") +collapse the remaining lines into a button." + :type 'integer + :group 'notmuch-wash) -(defvar notmuch-wash-wrap-lines-length nil +(defcustom notmuch-wash-wrap-lines-length nil "Wrap line after at most this many characters. If this is nil, lines in messages will be wrapped to fit in the current window. If this is a number, lines will be wrapped after this many characters or at the window width (whichever one is -lower).") +lower)." + :type '(choice (const :tag "window width" nil) + (integer :tag "number of characters")) + :group 'notmuch-wash) + +(defface notmuch-wash-toggle-button + '((t (:inherit font-lock-comment-face))) + "Face used for buttons toggling the visibility of washed away +message parts." + :group 'notmuch-wash + :group 'notmuch-faces) + +(defface notmuch-wash-cited-text + '((t (:inherit message-cited-text))) + "Face used for cited text." + :group 'notmuch-wash + :group 'notmuch-faces) (defun notmuch-wash-toggle-invisible-action (cite-button) ;; Toggle overlay visibility @@ -104,9 +147,11 @@ lower).") (overlay (button-get cite-button 'overlay)) (button-label (notmuch-wash-button-label overlay)) (old-point (point)) + (properties (text-properties-at (point))) (inhibit-read-only t)) (goto-char new-start) (insert button-label) + (set-text-properties new-start (point) properties) (let ((old-end (button-end cite-button))) (move-overlay cite-button new-start (point)) (delete-region (point) old-end)) @@ -115,7 +160,8 @@ lower).") (define-button-type 'notmuch-wash-button-invisibility-toggle-type 'action 'notmuch-wash-toggle-invisible-action 'follow-link t - 'face 'font-lock-comment-face) + 'face 'notmuch-wash-toggle-button + :supertype 'notmuch-button-type) (define-button-type 'notmuch-wash-button-citation-toggle-type 'help-echo "mouse-1, RET: Show citation" @@ -189,7 +235,7 @@ that PREFIX should not include a newline." (let* ((cite-start (match-beginning 0)) (cite-end (match-end 0)) (cite-lines (count-lines cite-start cite-end))) - (overlay-put (make-overlay cite-start cite-end) 'face 'message-cited-text) + (overlay-put (make-overlay cite-start cite-end) 'face 'notmuch-wash-cited-text) (when (> cite-lines (+ notmuch-wash-citation-lines-prefix notmuch-wash-citation-lines-suffix 1)) @@ -364,7 +410,7 @@ for error." (setq patch-end (match-beginning 0))) (save-restriction (narrow-to-region patch-start patch-end) - (setq part (plist-put part :content-type "inline-patch-fake-part")) + (setq part (plist-put part :content-type "inline patch")) (setq part (plist-put part :content (buffer-string))) (setq part (plist-put part :id -1)) (setq part (plist-put part :filename