emacs/show: optionally insert bodies of "deep messages" lazily

This leverages the machinery already there to insert buttons for
attachments.

A potential use-case is browsing the top layers of the tree to decide
which of the lower subtrees to read.
This commit is contained in:
David Bremner 2022-06-27 22:02:02 -03:00
parent ded2eb1a50
commit 1d254bd35e
5 changed files with 203 additions and 2 deletions

View file

@ -277,6 +277,9 @@ Display of messages can be controlled by the following variables
:index:`notmuch-show-header-line` :index:`notmuch-show-header-line`
|docstring::notmuch-show-header-line| |docstring::notmuch-show-header-line|
:index:`notmuch-show-depth-limit`
|docstring::notmuch-show-depth-limit|
:index:`notmuch-multipart/alternative-discouraged` :index:`notmuch-multipart/alternative-discouraged`
Which mime types to hide by default for multipart messages. Which mime types to hide by default for multipart messages.

View file

@ -110,6 +110,19 @@ displayed."
(function :tag "Function")) (function :tag "Function"))
:group 'notmuch-show) :group 'notmuch-show)
(defcustom notmuch-show-depth-limit nil
"Depth beyond which message bodies are displayed lazily.
If bound to an integer, any message with tree depth greater than
this will have its body display lazily, initially
inserting only a button.
If this variable is set to nil (the default) no such lazy
insertion is done."
:type '(choice (const :tag "No limit" nil)
(number :tag "Limit" 10))
:group 'notmuch-show)
(defcustom notmuch-show-relative-dates t (defcustom notmuch-show-relative-dates t
"Display relative dates in the message summary line." "Display relative dates in the message summary line."
:type 'boolean :type 'boolean
@ -1030,17 +1043,21 @@ is t, hide the part initially and show the button."
(> notmuch-show-max-text-part-size 0) (> notmuch-show-max-text-part-size 0)
(> (length (plist-get part :content)) (> (length (plist-get part :content))
notmuch-show-max-text-part-size))) notmuch-show-max-text-part-size)))
(deep (and notmuch-show-depth-limit
(> depth notmuch-show-depth-limit)))
(beg (point)) (beg (point))
;; This default header-p function omits the part button for ;; This default header-p function omits the part button for
;; the first (or only) part if this is text/plain. ;; the first (or only) part if this is text/plain.
(button (and (funcall notmuch-show-insert-header-p-function part hide) (button (and (or deep
(funcall notmuch-show-insert-header-p-function part hide))
(notmuch-show-insert-part-header (notmuch-show-insert-part-header
nth mime-type nth mime-type
(and content-type (downcase content-type)) (and content-type (downcase content-type))
(plist-get part :filename)))) (plist-get part :filename))))
;; Hide the part initially if HIDE is t, or if it is too long ;; Hide the part initially if HIDE is t, or if it is too long/deep
;; and we have a button to allow toggling. ;; and we have a button to allow toggling.
(show-part (not (or (equal hide t) (show-part (not (or (equal hide t)
(and deep button)
(and long button)))) (and long button))))
(content-beg (point))) (content-beg (point)))
;; Store the computed mime-type for later use (e.g. by attachment handlers). ;; Store the computed mime-type for later use (e.g. by attachment handlers).

View file

@ -91,6 +91,24 @@ test_emacs '(let ((notmuch-show-only-matching-messages t))
(test-visible-output))' (test-visible-output))'
test_expect_equal_file $EXPECTED/notmuch-show-elide-non-matching-messages-on OUTPUT test_expect_equal_file $EXPECTED/notmuch-show-elide-non-matching-messages-on OUTPUT
test_begin_subtest "Hide bodies of messages by depth"
test_emacs '(let ((notmuch-show-depth-limit -1))
(notmuch-search "thread:{id:87ocn0qh6d.fsf@yoom.home.cworth.org}")
(notmuch-test-wait)
(notmuch-search-show-thread)
(notmuch-test-wait)
(test-visible-output))'
test_expect_equal_file $EXPECTED/notmuch-show-depth OUTPUT
test_begin_subtest "Hide bodies of messages (depth > 1)"
test_emacs '(let ((notmuch-show-depth-limit 1))
(notmuch-search "thread:{id:87ocn0qh6d.fsf@yoom.home.cworth.org}")
(notmuch-test-wait)
(notmuch-search-show-thread)
(notmuch-test-wait)
(test-visible-output))'
test_expect_equal_file $EXPECTED/notmuch-show-depth-1 OUTPUT
test_begin_subtest "notmuch-show: elide non-matching messages (w/ notmuch-show-toggle-elide-non-matching)" test_begin_subtest "notmuch-show: elide non-matching messages (w/ notmuch-show-toggle-elide-non-matching)"
test_emacs '(let ((notmuch-show-only-matching-messages nil)) test_emacs '(let ((notmuch-show-only-matching-messages nil))
(notmuch-search "from:lars@seas.harvard.edu and subject:\"Maildir storage\"") (notmuch-search "from:lars@seas.harvard.edu and subject:\"Maildir storage\"")

View file

@ -0,0 +1,44 @@
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-17) (inbox signed)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 14:00:54 -0500
[ multipart/mixed (hidden) ]
Mikhail Gusarov <dottedmag@dottedmag.net> (2009-11-17) (inbox signed unread)
Subject: Re: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 01:02:38 +0600
[ multipart/mixed (hidden) ]
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-17) (inbox signed)
Subject: Re: [notmuch] Working with Maildir storage?
To: Mikhail Gusarov <dottedmag@dottedmag.net>
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 15:33:01 -0500
[ multipart/mixed (hidden) ]
Mikhail Gusarov <dottedmag@dottedmag.net> (2009-11-17) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 02:50:48 +0600
[ text/plain (hidden) ]
Keith Packard <keithp@keithp.com> (2009-11-17) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 13:24:13 -0800
[ text/plain (hidden) ]
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-18) (inbox signed unread)
Subject: Re: [notmuch] Working with Maildir storage?
To: Keith Packard <keithp@keithp.com>
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 19:50:40 -0500
[ multipart/mixed (hidden) ]
Carl Worth <cworth@cworth.org> (2009-11-18) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 02:08:10 -0800
[ text/plain (hidden) ]

View file

@ -0,0 +1,119 @@
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-17) (inbox signed)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 14:00:54 -0500
[ multipart/mixed ]
[ multipart/signed ]
[ Unknown key ID 0xD74695063141ACD8 or unsupported algorithm ]
[ text/plain ]
I saw the LWN article and decided to take a look at notmuch. I'm
currently using mutt and mairix to index and read a collection of
Maildir mail folders (around 40,000 messages total).
notmuch indexed the messages without complaint, but my attempt at
searching bombed out. Running, for example:
notmuch search storage
Resulted in 4604 lines of errors along the lines of:
Error opening
/home/lars/Mail/read-messages.2008/cur/1246413773.24928_27334.hostname,U=3026:2,S:
Too many open files
I'm curious if this is expected behavior (i.e., notmuch does not work
with Maildir) or if something else is going on.
Cheers,
[ 4-line signature. Click/Enter to show. ]
[ application/pgp-signature ]
[ text/plain ]
[ 4-line signature. Click/Enter to show. ]
Mikhail Gusarov <dottedmag@dottedmag.net> (2009-11-17) (inbox signed unread)
Subject: Re: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 01:02:38 +0600
[ multipart/mixed ]
[ multipart/signed ]
[ Unknown key ID 0x9D20F6503E338888 or unsupported algorithm ]
[ text/plain ]
Twas brillig at 14:00:54 17.11.2009 UTC-05 when lars@seas.harvard.edu did
gyre and gimble:
LK> Resulted in 4604 lines of errors along the lines of:
LK> Error opening
LK>
/home/lars/Mail/read-messages.2008/cur/1246413773.24928_27334.hostname,U=3026:2,S:
LK> Too many open files
See the patch just posted here.
[ 2-line signature. Click/Enter to show. ]
[ application/pgp-signature ]
[ text/plain ]
[ 4-line signature. Click/Enter to show. ]
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-17) (inbox signed)
Subject: Re: [notmuch] Working with Maildir storage?
To: Mikhail Gusarov <dottedmag@dottedmag.net>
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 15:33:01 -0500
[ multipart/mixed (hidden) ]
Mikhail Gusarov <dottedmag@dottedmag.net> (2009-11-17) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 02:50:48 +0600
[ text/plain (hidden) ]
Keith Packard <keithp@keithp.com> (2009-11-17) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 13:24:13 -0800
[ text/plain (hidden) ]
Lars Kellogg-Stedman <lars@seas.harvard.edu> (2009-11-18) (inbox signed unread)
Subject: Re: [notmuch] Working with Maildir storage?
To: Keith Packard <keithp@keithp.com>
Cc: notmuch@notmuchmail.org
Date: Tue, 17 Nov 2009 19:50:40 -0500
[ multipart/mixed (hidden) ]
Carl Worth <cworth@cworth.org> (2009-11-18) (inbox unread)
Subject: [notmuch] Working with Maildir storage?
To: notmuch@notmuchmail.org
Date: Wed, 18 Nov 2009 02:08:10 -0800
On Tue, 17 Nov 2009 14:00:54 -0500, Lars Kellogg-Stedman <lars at
seas.harvard.edu> wrote:
> I saw the LWN article and decided to take a look at notmuch. I'm
> currently using mutt and mairix to index and read a collection of
> Maildir mail folders (around 40,000 messages total).
Welcome, Lars!
I hadn't even seen that Keith's blog post had been picked up by lwn.net.
That's very interesting. So, thanks for coming and trying out notmuch.
> Error opening
> /home/lars/Mail/read-messages.2008/cur/1246413773.24928_27334.hostname,U=3026:2,S:
> Too many open files
Sadly, the lwn article coincided with me having just introduced this
bug, and then getting on a Trans-Atlantic flight. So I fixed the bug
fairly quickly, but there was quite a bit of latency before I could push
the fix out. It should be fixed now.
> I'm curious if this is expected behavior (i.e., notmuch does not work
> with Maildir) or if something else is going on.
Notmuch works just fine with maildir---it's one of the things that it
likes the best.
Happy hacking,
-Carl