| Commit message (Collapse) | Author | Age |
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Use functools.partial to keep the widget construction logic out of
IterWalker, since it should not handle such details.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Allows computing message/thread counts asynchronously in a separate
thread.
|
|
|
|
|
|
|
|
|
|
| |
As far as I can tell using a separate process doesn't actually improve
performance, it makes it worse. The work that we're passing off to the
separate function isn't necessarily work that's well suited to being
handed off, there isn't a lot of computation and the objects that need
to be passed across the pipe are fairly large (at least when considering
a pipe). Converting the function to a generator gives better performance
and simplifies the implementation.
|
|
|
|
| |
Should produce better results in most situations.
|
| |
|
|
|
|
| |
Drop the ugly divider that used to indicate which part is focused.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
They are supposed to replace the original notmuch python bindings,
providing a safer and more pythonic interface.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Do not recreate all the widgets on every update, just update the widget
contents.
Make the statusbar update async, since some calls to get_info() can take
a long time (especially noticeable for counting threads for searches
with many results).
|
|
|
|
|
| |
Convert it to the v2 API and avoid constructing widgets until they are
needed.
|
| |
|
| |
|
|
|
|
| |
It is only ever called from here, separating them makes little sense.
|
|
|
|
|
|
|
|
|
| |
This optimization is wrong, since oldest_first is not a reverse of
newest_first.
oldest_first sorts the threads by the oldest message in each thread,
while newest_first sorts by the newest message in each thread.
That results in 'focus last' changing the thread order, which it should
not do.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The top part displayes the thread structure, the bottom half the message
body. This makes more sense then displaying the message inside the tree
structure and makes it easier to implement features such as folding a
part of the message body.
Drop commands related to folding, since that functionality does not
exist anymore.
|
| |
|
|
|
|
|
|
|
|
| |
They were temporarily removed in the previous commit.
Still not working:
- theming for the decorations
- drawing the connector line properly for expanded messages
- configurable indentation
|
|
|
|
|
|
|
|
|
|
| |
Their API is misdesigned - forces the use of trees for nontree objects
and mixes data relationships with display properties. The result is a
mess that is hard to understand/maintain/extend.
Replace the use of urwidtrees with urwid Pile and ListBox. This
temporarily removes tree-style indentation and decorations for thread
buffers. That will be reimplemented in following commits.
|
| |
|
| |
|
| |
|
|
|
|
| |
It's pointless complexity that I do not need.
|
| |
|
|
|
|
| |
This reverts commit e7e0c52db9093a9ecd9dcaa0766e66515a546a75.
|
|
|
|
|
|
|
|
| |
This ensures that non-printable characters (tabs) are replaced in the
message body texts in envelope buffers and in source texts in thread
mode.
fix #1439
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
As far as I can tell using a separate process doesn't actually improve
performance, it makes it worse. The work that we're passing off to the
separate function isn't necessarily work that's well suited to being
handed off, there isn't a lot of computation and the objects that need
to be passed across the pipe are fairly large (at least when considering
a pipe). Converting the function to a generator gives better performance
and simplifies the implementation.
|
|
|
|
|
|
| |
Python3 only supports "new-style" classes (those extending object),
and we don't need to explicitly inherit from this root class any more.
See http://pylint-messages.wikidot.com/messages:c1001
|
|
|
|
| |
or tags common to all messages in thread
|
|
|
|
|
|
| |
This is a pretty invasive patch, since the ui code is used so
extensively, it requires going into a lot of other code and converting
those to coroutines, since before they returned deferred's.
|
|
|
|
| |
Found due to another bug :)
|