From 5a09515d0f0f595a2e6f3662499b324ba63d014d Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 29 Nov 2021 16:49:02 +0100 Subject: commands/search: allow reversing search results --- alot/commands/search.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'alot/commands/search.py') 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: -- cgit v1.2.3