| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
| |
Drop it also from the corresponding UI functions, where it does not do
anything.
|
|
|
|
|
| |
They are currently private staticmethods and there is no good reason to
keep them inside UI, they only make the already large class larger.
|
|
|
|
|
|
|
| |
They are treated as coroutines now, but this does not seem to be
documented.
This is a step towards making commands synhronous again.
|
|
|
|
|
|
|
|
|
|
|
| |
Add a class that encapsulates the handler and is responsible for
managing the temporary file, if one is needed.
Use this class for both rendering inline content and displaying
attachments externally.
External attachments are now wrapped in an asyncio task that is added to
a pool of tasks managed by ui.
|
|
|
|
|
| |
Allows computing message/thread counts asynchronously in a separate
thread.
|
|
|
|
| |
Bump python dependency to 3.7, which added create_task().
|
| |
|
|
|
|
| |
This is not an error state, just normal operation.
|
|
|
|
| |
Should produce better results in most situations.
|
| |
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
|
|
|
| |
It is an utterly useless number.
|
| |
|
| |
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
Tagstrings with double-width characters resulted in not enough
horizontal space being allocated, which lead urwid to draw the
statusline in two lines instead of one (see #742).
This lets urwid calculate the necessary width itself, using its pack()
method.
|
|
|
|
|
|
|
|
|
|
| |
Urwid + asyncio has been known to have very high CPU usage for 4 years
now, and it hasn't been fixed. That basically makes it impossible to
switch event loops. We can still get the asyncio syntax goodness but
using the twisted asyncioreactor and then initializing urwid with the
Twisted loop which doesn't have this problem.
Fixes #1302
|
|
|
|
|
| |
This is recommended since other implementations can use this hook to
return their own Future compatible implementations.
|
|
|
|
|
|
| |
The "2" version was used in non-twisted contexts, now that we don't use
twisted we can drop this and rename the "2" variant to the normal
variant.
|
|
|
|
|
| |
This moves the actual event loop to be the default asyncio eventloop
instead of the twisted reactor.
|
|
|
|
|
|
| |
This patch is sketchy, it makes the UI start up slowly, and it breaks in
a bunch of cases where it get's defereds but asyncio doesn't expect
that.
|
|
|
|
|
|
|
|
|
|
|
| |
asyncio's Futures are much like twisted's Deferreds, they represent a
value that is not yet available, and they can be awaited like a
coroutine.
For the moment we still need to return a deferred because the twisted
eventloop doesn't use Futures, it uses Deferreds; once we can remove
twisted's eventloop we can remove the conversion from a Future to a
deferred.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
asyncio doesn't have a loopingCall helper, so I've implemented a
coroutine that does the same thing, it takes a callable, a period, and
then forwards all other arguments. This is tested and working.
|
|
|
|
|
|
| |
This allows twisted deferred's (which is all an inlineCallback actually
is) to be mixed with asyncio coroutines (async def), by wrapping them in
a special twisted function for handling asyncio coroutines.
|
|
|
|
|
|
|
|
| |
This puts the twisted event loop into the asyncio framework. This means
that we're currently running all over our twisted.defered's and
twisted.inlineCallbacks through asyncio, using the twisted loop. This
will allow incremental updates from twisted's event loop to a standard
asyncio event loop.
|
|
|
|
|
| |
This splits buffers.py, which contained all buffer classes, into several smaller files.
issue #1226
|
|
|
|
| |
They are not needed for python >= 3.0.
|
| |
|
| |
|
|
|
|
| |
In python 3 xrange is range, to get a list one must wrap range in list.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
As well as reducing duplication and adding screen size detection to
:pipeto and :pyshell, this ensures that the screen is always restarted,
resulting in cleaner error handling if an error occurs while the screen
is stopped.
|
|\
| |
| | |
Fix `LANG=C alot` with custom bindings.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Reproduction steps:
- Set a custom binding in your config file. E.g.:
[bindings]
S = toggletags spam
- start alot with LANG=C: LANG=C alot
- variant A: type ö
- variant B: type :search ö
Problem: the urwid encoding is set to 'narrow', such that all key events
are passed down as `str`, not `unicode`. At the same time, ConfigObj reads
the custom binding as a unicode string. The interaction of both leads to
crashes.
Related to #673
|
|\ \
| |/
|/| |
Fix for issue 1164 - Cannot select key for encryption by number keys
|
| | |
|
| |
| |
| |
| | |
and a list of return objects for choices.
|
|\ \
| | |
| | | |
[WIP] Fix writing/loading history, if a command contains non-ascii character(s)
|
| |/
| |
| |
| |
| |
| |
| |
| | |
Bug:
- alot -l log -d debug
- :search ö<enter>
- quit alot
- in log file: stacktrace with UnicodeEncodeError, when writing the histfile.
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
| |
Use fallback, if an enviroment variable is unset *or* empty.
Bug:
- XDG_CONFIG_HOME='' alot
Problem:
Does not find the configuration file (among others), because
os.environ.get('XDG_CONFIG_HOME', '~/.config') returns '', instead of
'~/.config'.
|
| |
|
|
|
|
|
|
| |
In python3 Exception doesn't have a message attribute, the only way to
get the string output is to call str() on the Exception. This also works
in python 2.7, so go ahead and make that change.
|
|
|
|
|
|
|
| |
This can create circular imports in unittests, which causes difficult to
debug errors.
Fixes #1076
|
|
|
|
|
|
|
|
| |
This creates a deferred that runs on a user configurable timer and is
provided the ui. This deferred will re-fire after the number of seconds
specified by the timer are eclipsed. By default this is 300 seconds.
Fixes #522
|
|\
| |
| | |
Use absolute_imports from __future__
|
| | |
|