diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index 05833be80..1a6cd0538 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -750,25 +750,16 @@ class HintManager(QObject): raise cmdexc.CommandError("No URL set for this page yet!") self._context.args = args self._context.group = group - selector = self._get_selector() + + try: + selector = webelem.css_selector(self._context.group, + self._context.baseurl) + except webelem.Error as e: + raise cmdexc.CommandError(str(e)) + self._context.tab.elements.find_css(selector, self._start_cb, only_visible=True) - def _get_selector(self): - """Get the CSS selectors for this url and hinting group.""" - url = self._context.baseurl - group = self._context.group - - selectors = config.instance.get('hints.selectors', url) - if group not in selectors: - selectors = config.val.hints.selectors - - if group not in selectors: - raise cmdexc.CommandError("Undefined hinting group " - "'{}'!".format(group)) - - return ','.join(selectors[group]) - def current_mode(self): """Return the currently active hinting mode (or None otherwise).""" if self._context is None: diff --git a/qutebrowser/browser/navigate.py b/qutebrowser/browser/navigate.py index 69660e746..baeb7bf5b 100644 --- a/qutebrowser/browser/navigate.py +++ b/qutebrowser/browser/navigate.py @@ -150,6 +150,9 @@ def prevnext(*, browsertab, win_id, baseurl, prev=False, else: browsertab.openurl(url) - selectors = config.instance.get('hints.selectors', baseurl) - link_selector = ','.join(selectors['links']) + try: + link_selector = webelem.css_selector('links', baseurl) + except webelem.Error as e: + raise Error(str(e)) + browsertab.elements.find_css(link_selector, _prevnext_cb) diff --git a/qutebrowser/browser/webelem.py b/qutebrowser/browser/webelem.py index 681033e6d..e39eb5850 100644 --- a/qutebrowser/browser/webelem.py +++ b/qutebrowser/browser/webelem.py @@ -44,6 +44,18 @@ class OrphanedError(Error): pass +def css_selector(group, url): + """Get a CSS selector for the given group/URL.""" + selectors = config.instance.get('hints.selectors', url) + if group not in selectors: + selectors = config.val.hints.selectors + + if group not in selectors: + raise Error("Undefined hinting group {!r}".format(group)) + + return ','.join(selectors[group]) + + class AbstractWebElement(collections.abc.MutableMapping): """A wrapper around QtWebKit/QtWebEngine web element. diff --git a/tests/end2end/features/hints.feature b/tests/end2end/features/hints.feature index 1ecc70966..cf8527b03 100644 --- a/tests/end2end/features/hints.feature +++ b/tests/end2end/features/hints.feature @@ -192,7 +192,7 @@ Feature: Using hints Scenario: Error with invalid hint group When I open data/hints/buttons.html And I run :hint INVALID_GROUP - Then the error "Undefined hinting group 'INVALID_GROUP'!" should be shown + Then the error "Undefined hinting group 'INVALID_GROUP'" should be shown Scenario: Custom hint group When I open data/hints/custom_group.html diff --git a/tests/end2end/features/navigate.feature b/tests/end2end/features/navigate.feature index 23d8dd732..b5ad6ff54 100644 --- a/tests/end2end/features/navigate.feature +++ b/tests/end2end/features/navigate.feature @@ -80,6 +80,11 @@ Feature: Using :navigate And I run :navigate next Then the error "SyntaxError: Failed to execute 'querySelectorAll' on 'Document': '@' is not a valid selector." should be shown + Scenario: Navigating with no next selector + When I set hints.selectors to {'all': ['a']} + And I run :navigate next + Then the error "Undefined hinting group 'links'" should be shown + # increment/decrement Scenario: Incrementing number in URL