From 451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 11 Dec 2014 21:17:43 +0100 Subject: [PATCH] Handle flags with args correctly with split=False. --- qutebrowser/commands/command.py | 4 ++++ qutebrowser/commands/runners.py | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/qutebrowser/commands/command.py b/qutebrowser/commands/command.py index 992adda46..6c7447a1e 100644 --- a/qutebrowser/commands/command.py +++ b/qutebrowser/commands/command.py @@ -44,6 +44,7 @@ class Command: parser: The ArgumentParser to use to parse this command. special_params: A dict with the names of the special parameters as values. + flags_with_args: A list of flags which take an argument. _type_conv: A mapping of conversion functions for arguments. _name_conv: A mapping of argument names to parameter names. _needs_js: Whether the command needs javascript enabled @@ -92,6 +93,7 @@ class Command: self.pos_args = [] self.special_params = {'count': None, 'win_id': None} self.desc = None + self.flags_with_args = [] self._type_conv = {} self._name_conv = {} self._inspect_func() @@ -290,6 +292,8 @@ class Command: args.append(long_flag) args.append(short_flag) self.opt_args[param.name] = long_flag, short_flag + if param.kind == inspect.Parameter.KEYWORD_ONLY: + self.flags_with_args.append(param.name) else: args.append(name) self.pos_args.append((param.name, name)) diff --git a/qutebrowser/commands/runners.py b/qutebrowser/commands/runners.py index 96ef8693b..3ac74498c 100644 --- a/qutebrowser/commands/runners.py +++ b/qutebrowser/commands/runners.py @@ -262,12 +262,17 @@ class CommandRunner(QObject): # second split: ['--foo', '-v', 'bar baz'] # (maxsplit=2) split_args = split.simple_split(argstr, keep=keep) + flag_arg_count = 0 for i, arg in enumerate(split_args): arg = arg.strip() - if not arg.startswith('-'): + if arg.startswith('-'): + if arg.lstrip('-') in self._cmd.flags_with_args: + flag_arg_count += 1 + else: self._args = [] + maxsplit = i + self._cmd.maxsplit + flag_arg_count args = split.simple_split(argstr, keep=keep, - maxsplit=i + self._cmd.maxsplit) + maxsplit=maxsplit) for s in args: # remove quotes and replace \" by " s = re.sub(r"""(^|[^\\])["']""", r'\1', s)