From 94ac2ca56c50805068807b98e84baf0d3846ea87 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 1 Jul 2017 22:18:48 +0200 Subject: [PATCH] Merge :wq into :quit and add an alias --- qutebrowser/app.py | 20 +++++++++- qutebrowser/commands/command.py | 61 +++++++++++++------------------ qutebrowser/config/configdata.yml | 1 + 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index ec10f82f1..9ccf37078 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -642,7 +642,25 @@ class Quitter: else: return True - @cmdutils.register(instance='quitter', name='quit', ignore_args=True) + @cmdutils.register(instance='quitter', name='quit') + @cmdutils.argument('session', completion=usertypes.Completion.sessions) + def quit(self, save=False, session=None): + """Quit qutebrowser. + + Args: + save: When given, save the open windows even if auto_save.session is + turned off. + session: The name of the session to save. + """ + if session is not None and not save: + raise cmdexc.CommandError("Session name given without --save!") + if save: + if session is None: + session = sessions.default + self.shutdown(session=session) + else: + self.shutdown() + def shutdown(self, status=0, session=None, last_window=False, restart=False): """Quit qutebrowser. diff --git a/qutebrowser/commands/command.py b/qutebrowser/commands/command.py index b40f7ab16..148be8393 100644 --- a/qutebrowser/commands/command.py +++ b/qutebrowser/commands/command.py @@ -90,7 +90,7 @@ class Command: def __init__(self, *, handler, name, instance=None, maxsplit=None, hide=False, modes=None, not_modes=None, debug=False, - ignore_args=False, deprecated=False, no_cmd_split=False, + deprecated=False, no_cmd_split=False, star_args_optional=False, scope='global', backend=None, no_replace_variables=False): # I really don't know how to solve this in a better way, I tried. @@ -121,7 +121,6 @@ class Command: self._scope = scope self._star_args_optional = star_args_optional self.debug = debug - self.ignore_args = ignore_args self.handler = handler self.no_cmd_split = no_cmd_split self.backend = backend @@ -225,33 +224,31 @@ class Command: else: self.desc = "" - if not self.ignore_args: - for param in signature.parameters.values(): - # https://docs.python.org/3/library/inspect.html#inspect.Parameter.kind - # "Python has no explicit syntax for defining positional-only - # parameters, but many built-in and extension module functions - # (especially those that accept only one or two parameters) - # accept them." - assert param.kind != inspect.Parameter.POSITIONAL_ONLY - if param.name == 'self': - continue - if self._inspect_special_param(param): - continue - if (param.kind == inspect.Parameter.KEYWORD_ONLY and - param.default is inspect.Parameter.empty): - raise TypeError("{}: handler has keyword only argument " - "{!r} without default!".format(self.name, - param.name)) - typ = self._get_type(param) - is_bool = typ is bool - kwargs = self._param_to_argparse_kwargs(param, is_bool) - args = self._param_to_argparse_args(param, is_bool) - callsig = debug_utils.format_call( - self.parser.add_argument, args, kwargs, - full=False) - log.commands.vdebug('Adding arg {} of type {} -> {}'.format( - param.name, typ, callsig)) - self.parser.add_argument(*args, **kwargs) + for param in signature.parameters.values(): + # https://docs.python.org/3/library/inspect.html#inspect.Parameter.kind + # "Python has no explicit syntax for defining positional-only + # parameters, but many built-in and extension module functions + # (especially those that accept only one or two parameters) accept + # them." + assert param.kind != inspect.Parameter.POSITIONAL_ONLY + if param.name == 'self': + continue + if self._inspect_special_param(param): + continue + if (param.kind == inspect.Parameter.KEYWORD_ONLY and + param.default is inspect.Parameter.empty): + raise TypeError("{}: handler has keyword only argument {!r} " + "without default!".format( + self.name, param.name)) + typ = self._get_type(param) + is_bool = typ is bool + kwargs = self._param_to_argparse_kwargs(param, is_bool) + args = self._param_to_argparse_args(param, is_bool) + callsig = debug_utils.format_call(self.parser.add_argument, args, + kwargs, full=False) + log.commands.vdebug('Adding arg {} of type {} -> {}'.format( + param.name, typ, callsig)) + self.parser.add_argument(*args, **kwargs) return signature.parameters.values() def _param_to_argparse_kwargs(self, param, is_bool): @@ -453,12 +450,6 @@ class Command: kwargs = {} signature = inspect.signature(self.handler) - if self.ignore_args: - if self._instance is not None: - param = list(signature.parameters.values())[0] - self._get_self_arg(win_id, param, args) - return args, kwargs - for i, param in enumerate(signature.parameters.values()): arg_info = self.get_arg_info(param) if i == 0 and self._instance is not None: diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index c60598d99..ef18d9a9f 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -4,6 +4,7 @@ aliases: default: w: session-save q: quit + wq: quit --save type: name: Dict keytype: