unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Mark Walters <markwalters1009@gmail.com>
To: notmuch@notmuchmail.org
Subject: Re: [PATCH v4 0/5] Use invisibility to toggle display of all parts including multipart
Date: Tue, 18 Dec 2012 08:54:03 +0000	[thread overview]
Message-ID: <87ip7zu4es.fsf@qmul.ac.uk> (raw)
In-Reply-To: <1355781287-6010-1-git-send-email-markwalters1009@gmail.com>

On Mon, 17 Dec 2012, Mark Walters <markwalters1009@gmail.com> wrote:
> This is version 4 of this series (previous version at
> id:1355559338-14313-1-git-send-email-markwalters1009@gmail.com).
>
> The only change should be a bugfix which, for reasons I don't
> understand, only causes a problem on emacs 24. The problem is that the
> part invisibility code looks for a part button at the start of the
> region. This gets confused if there is a part with no part button
> (this is the case for the first part if it is text/plain) and the part
> starts with a button (as can happen if the message starts with the
> reply as in the first test in test/emacs-show).
>
> This checks that the button is a part button before creating the part
> overlay.

I don't think the above is very clear so I will try to explain it more
fully. 

The invisibility overlay for a part needs to be `linked' to the part
header button so that the part header button can toggle the overlay
visibility. The overlay is created and linked to this button after the
whole part has been inserted (including any notmuch-wash stuff). 

I could have made insert-part-header return the button it made and pass
it back up the call chain to the the create-overlays function but
instead I chose to make create-overlays just take the button at the
start of the part.

Now if the first part is text/plain then notmuch does not insert a
[text/plain] button so the code checks for this case by making sure the
part does start with a button, and if not it does not create the part
overlay (there is no button to toggle it so no point in an overlay).

However, if the first part is text/plain and notmuch wash happens to
make a button at the very start of the part then the create-overlays
function did still create an overlay *and* link it to the button. This
linking overwrote some of the things notmuch wash had attached to its
button (eg the button :overlay property) and that caused things to
break.

I still do not know why emacs 23 and emacs 24 behave differently, but
regardless the change from v3 is a clear bugfix: we just make sure it is
a notmuch-show-insert-part-header button not a notmuch-wash button
before we do the overlay creation/linking to the button. This version
does that by looking for a :base-label property of the button which
insert-part-header buttons have but notmuch-wash buttons do
not. (Obviously there are other ways this check could be done)

Best wishes

Mark



> The diff is below the diffstat. 
>
> Best wishes
>
> Mark
>
>
>
> Mark Walters (5):
>   emacs: show: modify insert-part-header to save the button text
>   emacs: show: add overlays for each part
>   emacs: show: add invisibility button action
>   emacs: wash: fix fake-diff part to include msg parameter
>   emacs: show: set default show-all-multipart/alternatives to nil
>
>  emacs/notmuch-show.el |  115 ++++++++++++++++++++++++++++++++++++++-----------
>  emacs/notmuch-wash.el |    2 +-
>  2 files changed, 90 insertions(+), 27 deletions(-)
>
> diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
> index 5ca6fe2..3816e32 100644
> --- a/emacs/notmuch-show.el
> +++ b/emacs/notmuch-show.el
> @@ -865,8 +865,10 @@ message at DEPTH in the current thread."
>    (let* ((button (button-at beg))
>  	 (part-beg (and button (1+ (button-end button)))))
>  
> -    ;; If the part contains no text we do not make it toggleable.
> -    (when (and button (/= part-beg end))
> +    ;; If the part contains no text we do not make it toggleable. We
> +    ;; also need to check that the button is a genuine part button not
> +    ;; a notmuch-wash button.
> +    (when (and button (/= part-beg end) (button-get button :base-label))
>        (let ((base-label (button-get button :base-label))
>  	    (overlay (make-overlay part-beg end))
>  	    (message-invis-spec (plist-get msg :message-invis-spec))
> -- 
> 1.7.9.1

  parent reply	other threads:[~2012-12-18  8:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-17 21:54 [PATCH v4 0/5] Use invisibility to toggle display of all parts including multipart Mark Walters
2012-12-17 21:54 ` [PATCH v4 1/5] emacs: show: modify insert-part-header to save the button text Mark Walters
2012-12-17 21:54 ` [PATCH v4 2/5] emacs: show: add overlays for each part Mark Walters
2012-12-17 21:54 ` [PATCH v4 3/5] emacs: show: add invisibility button action Mark Walters
2012-12-17 21:54 ` [PATCH v4 4/5] emacs: wash: fix fake-diff part to include msg parameter Mark Walters
2012-12-17 21:54 ` [PATCH v4 5/5] emacs: show: set default show-all-multipart/alternatives to nil Mark Walters
2012-12-18  8:54 ` Mark Walters [this message]
2012-12-18 17:10   ` [PATCH v4 0/5] Use invisibility to toggle display of all parts including multipart Austin Clements

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ip7zu4es.fsf@qmul.ac.uk \
    --to=markwalters1009@gmail.com \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).