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/globals.py | 11 +++++++++-- alot/commands/search.py | 28 ++++++++++++++++++++++++---- 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 ` 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: -- cgit v1.2.3