Before the change, message and citation invisibility overlays
conflicted: if some citation is made visible and then the whole
message is hidden, that citation remained visible. This happened
because the citation's overlay has an invisible property which
takes priority over the message overlay. The message
invisibility spec does not affect citation visibility, it is
determined solely by the citation overlay invisibility spec.
Hence, if citation is made visible, it is not hidden by message
invisibility spec.
The patch changes citation overlay invisibility property to be a
list which contains both the citation and the message
invisibility specs. This makes the citation invisible if either
of them is added to the `buffer-invisibility-spec'. Note that
all citation visibility states are "restored" when the message
hidden and shown again.
:supertype 'notmuch-wash-button-invisibility-toggle-type)
(defun notmuch-wash-region-isearch-show (overlay)
:supertype 'notmuch-wash-button-invisibility-toggle-type)
(defun notmuch-wash-region-isearch-show (overlay)
- (remove-from-invisibility-spec (overlay-get overlay 'invisible)))
+ (dolist (invis-spec (overlay-get overlay 'invisible))
+ (remove-from-invisibility-spec invis-spec)))
(defun notmuch-wash-button-label (overlay)
(let* ((type (overlay-get overlay 'type))
(defun notmuch-wash-button-label (overlay)
(let* ((type (overlay-get overlay 'type))
(lines-count (count-lines (overlay-start overlay) (overlay-end overlay))))
(format label-format lines-count)))
(lines-count (count-lines (overlay-start overlay) (overlay-end overlay))))
(format label-format lines-count)))
-(defun notmuch-wash-region-to-button (beg end type prefix)
+(defun notmuch-wash-region-to-button (msg beg end type prefix)
"Auxilary function to do the actual making of overlays and buttons
BEG and END are buffer locations. TYPE should a string, either
"Auxilary function to do the actual making of overlays and buttons
BEG and END are buffer locations. TYPE should a string, either
;; since the newly created symbol has no plist.
(let ((overlay (make-overlay beg end))
;; since the newly created symbol has no plist.
(let ((overlay (make-overlay beg end))
+ (message-invis-spec (plist-get msg :message-invis-spec))
(invis-spec (make-symbol (concat "notmuch-" type "-region")))
(button-type (intern-soft (concat "notmuch-wash-button-"
type "-toggle-type"))))
(add-to-invisibility-spec invis-spec)
(invis-spec (make-symbol (concat "notmuch-" type "-region")))
(button-type (intern-soft (concat "notmuch-wash-button-"
type "-toggle-type"))))
(add-to-invisibility-spec invis-spec)
- (overlay-put overlay 'invisible invis-spec)
+ (overlay-put overlay 'invisible (list invis-spec message-invis-spec))
(overlay-put overlay 'isearch-open-invisible #'notmuch-wash-region-isearch-show)
(overlay-put overlay 'type type)
(goto-char (1+ end))
(overlay-put overlay 'isearch-open-invisible #'notmuch-wash-region-isearch-show)
(overlay-put overlay 'type type)
(goto-char (1+ end))
(msg-end (point-max))
(msg-lines (count-lines msg-start msg-end)))
(notmuch-wash-region-to-button
(msg-end (point-max))
(msg-lines (count-lines msg-start msg-end)))
(notmuch-wash-region-to-button
- msg-start msg-end "original" "\n")))
+ msg msg-start msg-end "original" "\n")))
(while (and (< (point) (point-max))
(re-search-forward notmuch-wash-citation-regexp nil t))
(let* ((cite-start (match-beginning 0))
(while (and (< (point) (point-max))
(re-search-forward notmuch-wash-citation-regexp nil t))
(let* ((cite-start (match-beginning 0))
(goto-char cite-end)
(forward-line (- notmuch-wash-citation-lines-suffix))
(notmuch-wash-region-to-button
(goto-char cite-end)
(forward-line (- notmuch-wash-citation-lines-suffix))
(notmuch-wash-region-to-button
- hidden-start (point-marker)
+ msg hidden-start (point-marker)
"citation" "\n")))))
(if (and (not (eobp))
(re-search-forward notmuch-wash-signature-regexp nil t))
"citation" "\n")))))
(if (and (not (eobp))
(re-search-forward notmuch-wash-signature-regexp nil t))
(set-marker sig-end-marker (point-max))
(overlay-put (make-overlay sig-start-marker sig-end-marker) 'face 'message-cited-text)
(notmuch-wash-region-to-button
(set-marker sig-end-marker (point-max))
(overlay-put (make-overlay sig-start-marker sig-end-marker) 'face 'message-cited-text)
(notmuch-wash-region-to-button
- sig-start-marker sig-end-marker
+ msg sig-start-marker sig-end-marker
"signature" "\n"))))))
;;
"signature" "\n"))))))
;;