diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index f7bcd713c..13078efe2 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -172,6 +172,7 @@ class HintContext: tab = attr.ib(None) group = attr.ib(None) hint_mode = attr.ib(None) + first = attr.ib(False) def get_args(self, urlstr): """Get the arguments, with {hint-url} replaced by the given URL.""" @@ -612,6 +613,9 @@ class HintManager(QObject): modeman.enter(self._win_id, usertypes.KeyMode.hint, 'HintManager.start') + if self._context.first: + self._fire(strings[0]) + return # to make auto_follow == 'always' work self._handle_auto_follow() @@ -620,7 +624,8 @@ class HintManager(QObject): @cmdutils.argument('win_id', win_id=True) def start(self, # pylint: disable=keyword-arg-before-vararg group=webelem.Group.all, target=Target.normal, - *args, win_id, mode=None, add_history=False, rapid=False): + *args, win_id, mode=None, add_history=False, rapid=False, + first=False): """Start hinting. Args: @@ -632,6 +637,7 @@ class HintManager(QObject): add_history: Whether to add the spawned or yanked link to the browsing history. group: The element types to hint. + first: Click the first hinted element without prompting. - `all`: All clickable elements. - `links`: Only links. @@ -713,6 +719,7 @@ class HintManager(QObject): self._context.rapid = rapid self._context.hint_mode = mode self._context.add_history = add_history + self._context.first = first try: self._context.baseurl = tabbed_browser.current_url() except qtutils.QtValueError: diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index 7034d030c..1784e4b7d 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -2271,6 +2271,7 @@ bindings.default: ;R: hint --rapid links window ;d: hint links download ;t: hint inputs + gi: hint inputs --first h: scroll left j: scroll down k: scroll up diff --git a/tests/end2end/features/hints.feature b/tests/end2end/features/hints.feature index a1c4d0bde..c3b857bc4 100644 --- a/tests/end2end/features/hints.feature +++ b/tests/end2end/features/hints.feature @@ -509,3 +509,17 @@ Feature: Using hints And I press the key "hello" And I press the key "" Then data/hello.txt should be loaded + + Scenario: Using --first with normal links + When I open data/hints/html/simple.html + And I hint with args "all --first" + Then data/hello.txt should be loaded + + Scenario: Using --first with inputs + When I open data/hints/input.html + And I hint with args "inputs --first" + And I wait for "Entering mode KeyMode.insert (reason: clicking input)" in the log + # ensure we clicked the first element + And I run :jseval console.log(document.activeElement.id == "qute-input"); + And I run :leave-mode + Then the javascript message "true" should be logged