diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index 8d48490b5..c1fe9ef9e 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -145,6 +145,7 @@ Start hinting. - `tab`: Open the link in a new tab. - `tab-bg`: Open the link in a new background tab. - `window`: Open the link in a new window. + - `hover` : Hover over the link. - `yank`: Yank the link to the clipboard. - `yank-primary`: Yank the link to the primary selection. - `fill`: Fill the commandline with the command given as diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py index c990b5b32..05fb51e85 100644 --- a/qutebrowser/browser/hints.py +++ b/qutebrowser/browser/hints.py @@ -40,7 +40,7 @@ ElemTuple = collections.namedtuple('ElemTuple', ['elem', 'label']) Target = usertypes.enum('Target', ['normal', 'tab', 'tab_bg', 'window', 'yank', - 'yank_primary', 'fill', 'rapid', + 'yank_primary', 'fill', 'hover', 'rapid', 'rapid_win', 'download', 'userscript', 'spawn']) @@ -115,6 +115,7 @@ class HintManager(QObject): Target.yank: "Yank hint to clipboard...", Target.yank_primary: "Yank hint to primary selection...", Target.fill: "Set hint in commandline...", + Target.hover: "Hover over a hint...", Target.rapid: "Follow hint (rapid mode)...", Target.rapid_win: "Follow hint in new window (rapid mode)...", Target.download: "Download hint...", @@ -335,22 +336,26 @@ class HintManager(QObject): target = Target.window else: target = self._context.target - self.set_open_target.emit(target.name) # FIXME Instead of clicking the center, we could have nicer heuristics. # e.g. parse (-webkit-)border-radius correctly and click text fields at # the bottom right, and everything else on the top left or so. # https://github.com/The-Compiler/qutebrowser/issues/70 pos = elem.rect_on_view().center() - log.hints.debug("Clicking on '{}' at {}/{}".format( - elem, pos.x(), pos.y())) - events = ( + action = "Hovering" if target == Target.hover else "Clicking" + log.hints.debug("{} on '{}' at {}/{}".format( + action, elem, pos.x(), pos.y())) + events = [ QMouseEvent(QEvent.MouseMove, pos, Qt.NoButton, Qt.NoButton, Qt.NoModifier), - QMouseEvent(QEvent.MouseButtonPress, pos, Qt.LeftButton, - Qt.NoButton, Qt.NoModifier), - QMouseEvent(QEvent.MouseButtonRelease, pos, Qt.LeftButton, - Qt.NoButton, Qt.NoModifier), - ) + ] + if target != Target.hover: + self.set_open_target.emit(target.name) + events += [ + QMouseEvent(QEvent.MouseButtonPress, pos, Qt.LeftButton, + Qt.NoButton, Qt.NoModifier), + QMouseEvent(QEvent.MouseButtonRelease, pos, Qt.LeftButton, + Qt.NoButton, Qt.NoModifier), + ] for evt in events: self.mouse_event.emit(evt) @@ -685,6 +690,7 @@ class HintManager(QObject): Target.window: self._click, Target.rapid: self._click, Target.rapid_win: self._click, + Target.hover: self._click, # _download needs a QWebElement to get the frame. Target.download: self._download, } diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index eba965ad1..a7cfacf65 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -923,6 +923,7 @@ KEY_DATA = collections.OrderedDict([ ('hint all tab', ['F']), ('hint all window', ['wf']), ('hint all tab-bg', [';b']), + ('hint all hover', [';h']), ('hint images', [';i']), ('hint images tab', [';I']), ('hint images tab-bg', ['.i']),