mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 01:14:53 +01:00
emacs/show: introduce notmuch-show-height-limit
Analogous to notmuch-show-depth-limit, it requires a bit more calculation, but that cost seems dominated by the rendering cost.
This commit is contained in:
parent
e580ce0058
commit
bde8ea5d1d
4 changed files with 151 additions and 1 deletions
|
@ -280,6 +280,9 @@ Display of messages can be controlled by the following variables
|
|||
:index:`notmuch-show-depth-limit`
|
||||
|docstring::notmuch-show-depth-limit|
|
||||
|
||||
:index:`notmuch-show-height-limit`
|
||||
|docstring::notmuch-show-height-limit|
|
||||
|
||||
:index:`notmuch-show-max-text-part-size`
|
||||
|docstring::notmuch-show-max-text-part-size|
|
||||
|
||||
|
|
|
@ -123,6 +123,19 @@ insertion is done."
|
|||
(number :tag "Limit" 10))
|
||||
:group 'notmuch-show)
|
||||
|
||||
(defcustom notmuch-show-height-limit nil
|
||||
"Height (from leaves) beyond which message bodies are displayed lazily.
|
||||
|
||||
If bound to an integer, any message with height in the message
|
||||
tree greater than this will have its body displayed lazily,
|
||||
initially only a button.
|
||||
|
||||
If this variable is set to nil (the default) no such lazy
|
||||
display is done."
|
||||
:type '(choice (const :tag "No limit" nil)
|
||||
(number :tag "Limit" 10))
|
||||
:group 'notmuch-show)
|
||||
|
||||
(defcustom notmuch-show-relative-dates t
|
||||
"Display relative dates in the message summary line."
|
||||
:type 'boolean
|
||||
|
@ -505,6 +518,18 @@ Return unchanged ADDRESS if parsing fails."
|
|||
;; Otherwise format the name and address together.
|
||||
(concat p-name " <" p-address ">"))))
|
||||
|
||||
(defun notmuch-show--mark-height (tree)
|
||||
"Calculate and cache height (distance from deepest descendent)"
|
||||
(let* ((msg (car tree))
|
||||
(children (cadr tree))
|
||||
(cached-height (plist-get msg :height)))
|
||||
(or cached-height
|
||||
(let ((height
|
||||
(if (null children) 0
|
||||
(1+ (apply #'max (mapcar #'notmuch-show--mark-height children))))))
|
||||
(plist-put msg :height height)
|
||||
height))))
|
||||
|
||||
(defun notmuch-show-insert-headerline (headers date tags depth)
|
||||
"Insert a notmuch style headerline based on HEADERS for a
|
||||
message at DEPTH in the current thread."
|
||||
|
@ -1039,16 +1064,19 @@ is t, hide the part initially and show the button."
|
|||
(let* ((content-type (plist-get part :content-type))
|
||||
(mime-type (notmuch-show-mime-type part))
|
||||
(nth (plist-get part :id))
|
||||
(height (plist-get msg :height))
|
||||
(long (and (notmuch-match-content-type mime-type "text/*")
|
||||
(> notmuch-show-max-text-part-size 0)
|
||||
(> (length (plist-get part :content))
|
||||
notmuch-show-max-text-part-size)))
|
||||
(deep (and notmuch-show-depth-limit
|
||||
(> depth notmuch-show-depth-limit)))
|
||||
(high (and notmuch-show-height-limit
|
||||
(> height notmuch-show-height-limit)))
|
||||
(beg (point))
|
||||
;; This default header-p function omits the part button for
|
||||
;; the first (or only) part if this is text/plain.
|
||||
(button (and (or deep long
|
||||
(button (and (or deep long high
|
||||
(funcall notmuch-show-insert-header-p-function part hide))
|
||||
(notmuch-show-insert-part-header
|
||||
nth mime-type
|
||||
|
@ -1058,6 +1086,7 @@ is t, hide the part initially and show the button."
|
|||
;; and we have a button to allow toggling.
|
||||
(show-part (not (or (equal hide t)
|
||||
(and deep button)
|
||||
(and high button)
|
||||
(and long button))))
|
||||
(content-beg (point)))
|
||||
;; Store the computed mime-type for later use (e.g. by attachment handlers).
|
||||
|
@ -1201,6 +1230,7 @@ is t, hide the part initially and show the button."
|
|||
(replies (cadr tree)))
|
||||
;; We test whether there is a message or just some replies.
|
||||
(when msg
|
||||
(notmuch-show--mark-height tree)
|
||||
(notmuch-show-insert-msg msg depth))
|
||||
(notmuch-show-insert-thread replies (1+ depth))))
|
||||
|
||||
|
|
|
@ -100,6 +100,26 @@ test_emacs '(let ((notmuch-show-depth-limit -1))
|
|||
(test-visible-output))'
|
||||
test_expect_equal_file $EXPECTED/notmuch-show-depth OUTPUT
|
||||
|
||||
|
||||
test_begin_subtest "Hide bodies of messages by height"
|
||||
test_emacs '(let ((notmuch-show-height-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))'
|
||||
# folding all messages by height or depth should look the same
|
||||
test_expect_equal_file $EXPECTED/notmuch-show-depth OUTPUT
|
||||
|
||||
test_begin_subtest "Hide bodies of messages; show only leaves."
|
||||
test_emacs '(let ((notmuch-show-height-limit 0))
|
||||
(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-height-0 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}")
|
||||
|
|
97
test/emacs-show.expected-output/notmuch-show-height-0
Normal file
97
test/emacs-show.expected-output/notmuch-show-height-0
Normal file
|
@ -0,0 +1,97 @@
|
|||
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
|
||||
|
||||
Twas brillig at 15:33:01 17.11.2009 UTC-05 when lars at seas.harvard.edu
|
||||
did gyre and gimble:
|
||||
|
||||
LK> Is the list archived anywhere? The obvious archives
|
||||
LK> (http://notmuchmail.org/pipermail/notmuch/) aren't available, and I
|
||||
LK> think I subscribed too late to get the patch (I only just saw the
|
||||
LK> discussion about it).
|
||||
|
||||
LK> It doesn't look like the patch is in git yet.
|
||||
|
||||
Just has been pushed
|
||||
|
||||
[ 10-line signature. Click/Enter to show. ]
|
||||
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 ]
|
||||
[ multipart/signed ]
|
||||
[ Unknown key ID 0xD74695063141ACD8 or unsupported algorithm ]
|
||||
[ text/plain ]
|
||||
> I've also pushed a slightly more complicated (and complete) fix to my
|
||||
> private notmuch repository
|
||||
|
||||
The version of lib/messages.cc in your repo doesn't build because it's
|
||||
missing "#include <stdint.h>" (for the uint32_t on line 466).
|
||||
|
||||
[ 4-line signature. Click/Enter to show. ]
|
||||
[ application/pgp-signature ]
|
||||
[ text/plain ]
|
||||
[ 4-line signature. Click/Enter to show. ]
|
||||
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
|
Loading…
Reference in a new issue