diff options
author | Florian Bruhin <git@the-compiler.org> | 2014-12-11 21:17:43 +0100 |
---|---|---|
committer | Florian Bruhin <git@the-compiler.org> | 2014-12-11 21:17:43 +0100 |
commit | 451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c (patch) | |
tree | 3fe5675c3a282a76c02bb264ff66f82ffea032cb | |
parent | 3579caf1ff0d7cf2701317a9f7a0d12acad07b41 (diff) | |
download | qutebrowser-451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c.tar.gz qutebrowser-451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c.zip |
Handle flags with args correctly with split=False.
-rw-r--r-- | qutebrowser/commands/command.py | 4 | ||||
-rw-r--r-- | 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) |