diff options
-rw-r--r-- | alot/commands/globals.py | 52 | ||||
-rw-r--r-- | alot/commands/search.py | 22 |
2 files changed, 74 insertions, 0 deletions
diff --git a/alot/commands/globals.py b/alot/commands/globals.py index af98694d..92918269 100644 --- a/alot/commands/globals.py +++ b/alot/commands/globals.py @@ -994,3 +994,55 @@ class ReloadCommand(Command): except ConfigError as e: ui.notify('Error when reloading config files:\n {}'.format(e), priority='error') + + +@registerCommand( + MODE, 'savequery', + arguments=[ + (['--no-flush'], {'action': 'store_false', 'dest': 'flush', + 'default': 'True', + 'help': 'postpone a writeout to the index'}), + (['alias'], {'help': 'alias to use for query string'}), + (['query'], {'help': 'query string to store', + 'nargs': argparse.REMAINDER}) + ], + help='store query string as a "named query" in the database') +class SaveQueryCommand(Command): + + """save alias for query string""" + repeatable = False + + def __init__(self, alias, query=None, flush=True, **kwargs): + """ + :param alias: name to use for query string + :type alias: str + :param query: query string to save + :type query: str or None + :param flush: immediately write out to the index + :type flush: bool + """ + self.alias = alias + if query is None: + self.query = '' + else: + self.query = ' '.join(query) + self.flush = flush + Command.__init__(self, **kwargs) + + def apply(self, ui): + searchbuffer = ui.current_buffer + query = searchbuffer.querystring + msg = 'saved alias "%s" for query string "%s"' % (self.alias, + self.query) + + try: + ui.dbman.save_named_query(self.alias, self.query) + logging.debug(msg) + ui.notify(msg) + except DatabaseROError: + ui.notify('index in read-only mode', priority='error') + return + + # flush index + if self.flush: + ui.apply_command(commands.globals.FlushCommand()) diff --git a/alot/commands/search.py b/alot/commands/search.py index 3e172dd5..d1dccd71 100644 --- a/alot/commands/search.py +++ b/alot/commands/search.py @@ -7,6 +7,7 @@ import logging from . import Command, registerCommand from .globals import PromptCommand from .globals import MoveCommand +from .globals import SaveQueryCommand as GlobalSaveQueryCommand from .common import RetagPromptCommand from .. import commands @@ -241,3 +242,24 @@ class MoveFocusCommand(MoveCommand): ui.update() else: MoveCommand.apply(self, ui) + + +@registerCommand( + MODE, 'savequery', + arguments=[ + (['--no-flush'], {'action': 'store_false', 'dest': 'flush', + 'default': 'True', + 'help': 'postpone a writeout to the index'}), + (['alias'], {'help': 'alias to use for query string'}), + (['query'], {'help': 'query string to store', + 'nargs': argparse.REMAINDER, + }), + ], + help='store query string as a "named query" in the database. ' + 'This falls back to the current search query in search buffers.') +class SaveQueryCommand(GlobalSaveQueryCommand): + def apply(self, ui): + searchbuffer = ui.current_buffer + if not self.query: + self.query = searchbuffer.querystring + GlobalSaveQueryCommand.apply(self, ui) |