summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2014-12-11 21:17:43 +0100
committerFlorian Bruhin <git@the-compiler.org>2014-12-11 21:17:43 +0100
commit451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c (patch)
tree3fe5675c3a282a76c02bb264ff66f82ffea032cb
parent3579caf1ff0d7cf2701317a9f7a0d12acad07b41 (diff)
downloadqutebrowser-451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c.tar.gz
qutebrowser-451df7bbf421adf7a1ef8ce5bc58ac52ed0d436c.zip
Handle flags with args correctly with split=False.
-rw-r--r--qutebrowser/commands/command.py4
-rw-r--r--qutebrowser/commands/runners.py9
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)