| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
|
| |
There is no meaningful reason to focus on individual lines, since they
are unactionable.
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
| |
... in favour of get_body_text to de-clutter the Message class.
The functionality is implemented in alot.db.utils.extract_body, which
now contains the hard-coding of the html warning.
|
| |
|
| |
|
|
|
|
|
| |
to make sure that all parts exist when messages are expanded
(see pydoc string)
|
|
|
|
|
|
|
|
|
|
|
| |
This will prevent the whole message from being read and interpreted
at the time we instantiate a MessageTree for display and instead only
create the (cheap!) summary widget.
When a user manually interacts with the Message widgets (for example by
unfolding/toggling source) then the content parts will anyway be
reassembled. The consequence of this patch is that loading large threads
should be much faster.
|
|
|
|
|
| |
Hotfix for double width characters causing columns misalign in search
view (https://github.com/pazz/alot/issues/1393)
|
| |
|
|\
| |
| | |
New buffer type for notmuch's named query strings
|
| | |
|
| |
| |
| |
| |
| | |
this is only possible for "tags" parts, in case the list of tags is
empty or all tags are hidden.
|
| |
| |
| |
| |
| | |
.. from the theming structure, instead of pushing these as extra
parameters through helper functions.
|
| |
| |
| |
| |
| | |
into several small functions that prepare the content string for their
respective part of a threadline.
|
| |
| |
| |
| |
| |
| | |
We currently call dict_keys.sort(), which doesn't work because it
doesn't exist. The whole function is kinda strange anyway, since there's
a lot of work done in general that only applies in once case.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This factors out the method _build_part, which is used to create local
Text/Column widgets for each indivitual part of the threadline.
The method is now broken in two: one for text (= subject, authors,..)
parts and one for tags (= Columns of TagWidgets) and both those
functions are moved out of the Threadline class.
|
| |
| |
| |
| | |
This was superseeded by settings.get_threadline_theming a while back
|
| |
| |
| |
| |
| | |
this simplifies the rebuilding of alot.widgets.search.Threadline,
removes duplicate and ugly code.
|
|/
|
|
|
|
|
|
|
|
| |
this will cause the width of a (author/tag/..) string in a threadline
widget to be computed by urwids `Widget.pack` function rather than just
taking the length of the string.
This fixes an issue with utf-8 wide characters such as Kanji, fow which
urwid needs extra space, and consequently adds additional rows when
packing such Textwidgets into Columns as we do in threadlines.
|
|
|
|
|
|
| |
This has really annoyed me for a while, the search is reversed from vim.
In alot currently up is older searches, whiles down is newer. In vim
it's reversed.
|
|
|
|
| |
They are not needed for python >= 3.0.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
The code currently uses "cursor up", which seems wrong to me. This
corrects searching through prompt history only moving in one direction.
Fixes #1216
|
| | |
|
|/
|
|
|
|
|
| |
in python3 dict.{keys,items,values} return views, which are similar to
iterators without some of the caveats about modifying the underlying
object. The iter* and view* methods have been removed, instead one warps
dict.x in iter or list to get those types.
|
|\
| |
| | |
Fix for issue 1164 - Cannot select key for encryption by number keys
|
| | |
|
| |
| |
| |
| | |
and a list of return objects for choices.
|
|/ |
|
| |
|
|\ |
|
| |
| |
| |
| |
| | |
This mostly shortens lines down to <=79 chars and fixes some other small
things I found using the pep8 tool.
|
|/ |
|
|
|
|
|
|
|
|
|
| |
The old implementation would raise an error when the translated tag
string was a unicode string (might be defined as an abbreviation in the
users config).
The official docs suggest this kind of implementation:
https://docs.python.org/3/reference/datamodel.html#object.__hash__
|
|
|
|
|
|
| |
Implementing the comparison functions as a shared method rather than in
terms of each other (as functools.totalordering does) makes the
search interface much snappier.
|
|
|
|
|
|
|
|
| |
Which is required in python3 when implementing the __eq__ method.
The implementation caches the hash method, since it's being called each
time the focus is changed in the search view. This doesn't really seem
correct to me, but I'm not sure it's wrong.
|
|
|
|
|
| |
This wasn't caught by static checkers since it is used in the other
brach of the if statement containing this value.
|
|
|
|
|
|
|
| |
This can create circular imports in unittests, which causes difficult to
debug errors.
Fixes #1076
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
This introduces a new config option 'thread_focus_linewise',
(defaults to True), which determines if the message texts are
split into individually focussable lines in thread mode.
fixes #645
|
|\
| |
| | |
Remove remaining uses of cmp
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The calculation wants to sort first by length, then by string value (so
'z' would come before 'aa'). The calculation does this by deciding that
if one value has a length of 1, and the other doesn't. Currently it does
this by calling min, and max, and calling len 4 times. This is
pretty inefficient, and more complicated that necessary.
Instead, this patch uses 'is not' with booleans to figure out if one and
only one of the lengths is 1.
|
| |
| |
| |
| |
| |
| | |
This is both a performance issue (since cmp is slower than rich
comparisons), and a python3 issue since cmp (and __cmp__) are gone in
python 3.
|
|/
|
|
| |
Fixes #1016
|
|\
| |
| | |
Use absolute_imports from __future__
|