From d8a917575d5a87d6be9811c8cff88fbd9ac1ba2b Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 7 Oct 2014 20:39:02 +0200 Subject: [PATCH] Add a cmdutils.check_exclusive function. --- qutebrowser/browser/commands.py | 11 ++++------- qutebrowser/commands/cmdutils.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 3af00ea60..da9369411 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -115,9 +115,8 @@ class CommandDispatcher: errstr += " - {}".format(url.errorString()) raise cmdexc.CommandError(errstr) tabbed_browser = self._tabbed_browser() - if sum(1 for e in (tab, background, window) if e) > 1: - raise cmdexc.CommandError("Only one of -t/-b/-w can be given!") - elif window: + cmdutils.check_exclusive((tab, background, window), 'tbw') + if window: tabbed_browser = self._tabbed_browser(window=True) tabbed_browser.tabopen(url) elif tab: @@ -229,8 +228,7 @@ class CommandDispatcher: QTabBar.SelectLeftTab, QTabBar.SelectRightTab, or None if no change should be made. """ - if sum(1 for e in (left, right, opposite) if e) > 1: - raise cmdexc.CommandError("Only one of -l/-r/-o can be given!") + cmdutils.check_exclusive((left, right, opposite), 'lro') if left: return QTabBar.SelectLeftTab elif right: @@ -488,8 +486,7 @@ class CommandDispatcher: bg: Open in a background tab. window: Open in a new window. """ - if sum(1 for e in (tab, bg, window) if e) > 1: - raise cmdexc.CommandError("Only one of -t/-b/-w can be given!") + cmdutils.check_exclusive((tab, bg, window), 'tbw') widget = self._current_widget() frame = widget.page().currentFrame() url = self._current_url() diff --git a/qutebrowser/commands/cmdutils.py b/qutebrowser/commands/cmdutils.py index e98464ed2..ea9f7aeaf 100644 --- a/qutebrowser/commands/cmdutils.py +++ b/qutebrowser/commands/cmdutils.py @@ -82,6 +82,21 @@ def arg_or_count(arg, count, default=None, countzero=None): raise ValueError("Either count or argument have to be set!") +def check_exclusive(flags, names): + """Check if only one flag is set with exclusive flags. + + Raise a CommandError if not. + + Args: + flags: An iterable of booleans to check. + names: An iterable of flag names for the error message. + """ + if sum(1 for e in flags if e) > 1: + argstr = '/'.join('-' + e for e in names) + raise cmdexc.CommandError("Only one of {} can be given!".format( + argstr)) + + class register: # pylint: disable=invalid-name """Decorator to register a new command handler.