summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-11-29 16:49:02 +0100
committerAnton Khirnov <anton@khirnov.net>2021-11-29 16:49:02 +0100
commit5a09515d0f0f595a2e6f3662499b324ba63d014d (patch)
treec74eac35b35fe5de0c90ec0fce29fdf702bf9abf
parent503ab8de493481355e8e8b0dc1fbe9fa049353bb (diff)
commands/search: allow reversing search results
-rw-r--r--alot/commands/globals.py11
-rw-r--r--alot/commands/search.py28
2 files changed, 33 insertions, 6 deletions
diff --git a/alot/commands/globals.py b/alot/commands/globals.py
index bcd9a2c3..d7d5e250 100644
--- a/alot/commands/globals.py
+++ b/alot/commands/globals.py
@@ -80,6 +80,8 @@ class ExitCommand(Command):
@registerCommand(MODE, 'search', usage='search query', arguments=[
(['--sort'], {'help': 'sort order', 'choices': list(SORT_NAME.keys())}),
+ (['--reverse'], { 'help' : 'display messages in reverse order',
+ 'action' : 'store_true' }),
(['query'], {'nargs': argparse.REMAINDER, 'help': 'search string'})])
class SearchCommand(Command):
@@ -87,7 +89,9 @@ class SearchCommand(Command):
:ref:`search.exclude_tags <search.exclude_tags>` setting."""
repeatable = True
- def __init__(self, query, sort=None, **kwargs):
+ _reverse = None
+
+ def __init__(self, query, sort=None, reverse = False, **kwargs):
"""
:param query: notmuch querystring
:type query: str
@@ -98,6 +102,8 @@ class SearchCommand(Command):
"""
self.query = ' '.join(query)
self.order = SORT_NAME[sort] if sort else None
+ self._reverse = reverse
+
super().__init__(**kwargs)
def apply(self, ui):
@@ -116,7 +122,8 @@ class SearchCommand(Command):
ui.update()
else:
ui.buffer_open(buffers.SearchBuffer(ui, self.query,
- sort_order=self.order))
+ sort_order=self.order,
+ reverse = self._reverse))
else:
ui.notify('empty query string')
diff --git a/alot/commands/search.py b/alot/commands/search.py
index 27625ce1..e0a4db56 100644
--- a/alot/commands/search.py
+++ b/alot/commands/search.py
@@ -35,19 +35,32 @@ class OpenThreadCommand(Command):
ui.buffer_open(tb)
tb.focus_next_matching(query)
+_opt_reverse = (['--reverse'],
+ { 'help' : 'display messages in reverse order',
+ 'default' : False,
+ 'action' : 'store_true' }
+)
@registerCommand(MODE, 'refine', help='refine query', arguments=[
(['--sort'], {'help': 'sort order',
- 'choices': list(SORT_NAME.keys())}),
+ 'choices': list(SORT_NAME.keys())}), _opt_reverse,
(['query'], {'nargs': argparse.REMAINDER, 'help': 'search string'})])
@registerCommand(MODE, 'sort', help='set sort order', arguments=[
+ _opt_reverse,
(['sort'], {'help': 'sort order', 'choices': [
'oldest_first', 'newest_first', 'message_id', 'unsorted']}),
])
+@registerCommand(MODE, 'reverse',
+ help = 'toggle whether the sorting order is reversed',
+ forced = { 'toggle_reverse' : True })
class RefineCommand(Command):
+ _reverse = None
+ _toggle_reverse = None
+
"""refine the querystring of this buffer"""
- def __init__(self, query=None, sort=None, **kwargs):
+ def __init__(self, query=None, sort=None, reverse = None,
+ toggle_reverse = False, **kwargs):
"""
:param query: new querystring given as list of strings as returned by
argparse
@@ -57,11 +70,13 @@ class RefineCommand(Command):
self.querystring = None
else:
self.querystring = ' '.join(query)
- self.sort_order = SORT_NAME[sort] if sort else None
+ self.sort_order = SORT_NAME[sort] if sort else None
+ self._reverse = reverse
+ self._toggle_reverse = toggle_reverse
super().__init__(**kwargs)
def apply(self, ui):
- if self.querystring or self.sort_order:
+ if self.querystring or self.sort_order or self._toggle_reverse:
sbuffer = ui.current_buffer
oldquery = sbuffer.querystring
if self.querystring not in [None, oldquery]:
@@ -69,6 +84,11 @@ class RefineCommand(Command):
sbuffer = ui.current_buffer
if self.sort_order:
sbuffer.sort_order = self.sort_order
+ if self._reverse is not None:
+ sbuffer.reverse = self._reverse
+ if self._toggle_reverse:
+ sbuffer.reverse = not sbuffer.reverse
+
sbuffer.rebuild()
ui.update()
else: