summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2014-12-13 00:20:56 +0100
committerFlorian Bruhin <git@the-compiler.org>2014-12-13 00:20:56 +0100
commitdae657b4d48f4b07515f5ce6b07d1fa16e04bae8 (patch)
tree1cbefad9a6c81233983883e90b42e6e4b3e639a9
parent987ca1dd4a6347200b796c1072b8999a1914bc16 (diff)
parentd0bed460eb788fb19a65c063f6d32c545bf09e42 (diff)
downloadqutebrowser-dae657b4d48f4b07515f5ce6b07d1fa16e04bae8.tar.gz
qutebrowser-dae657b4d48f4b07515f5ce6b07d1fa16e04bae8.zip
Merge branch 'master' of https://github.com/krobelus/qutebrowser into krobelus-master
-rw-r--r--qutebrowser/browser/hints.py38
1 files changed, 30 insertions, 8 deletions
diff --git a/qutebrowser/browser/hints.py b/qutebrowser/browser/hints.py
index 6a5a84f6b..1d807b8b1 100644
--- a/qutebrowser/browser/hints.py
+++ b/qutebrowser/browser/hints.py
@@ -32,7 +32,7 @@ from PyQt5.QtWebKit import QWebElement
from qutebrowser.config import config
from qutebrowser.keyinput import modeman, modeparsers
from qutebrowser.browser import webelem
-from qutebrowser.commands import userscripts, cmdexc, cmdutils
+from qutebrowser.commands import userscripts, cmdexc, cmdutils, runners
from qutebrowser.utils import usertypes, log, qtutils, message, objreg
@@ -40,7 +40,7 @@ ElemTuple = collections.namedtuple('ElemTuple', ['elem', 'label'])
Target = usertypes.enum('Target', ['normal', 'tab', 'tab_bg', 'window', 'yank',
- 'yank_primary', 'fill', 'hover', 'rapid',
+ 'yank_primary', 'run', 'fill', 'hover', 'rapid',
'rapid_win', 'download', 'userscript',
'spawn'])
@@ -65,6 +65,7 @@ class HintContext:
target: What to do with the opened links.
normal/tab/tab_bg/window: Get passed to BrowserTab.
yank/yank_primary: Yank to clipboard/primary selection
+ run: Run a command.
fill: Fill commandline with link.
rapid: Rapid mode with background tabs
download: Download the link.
@@ -117,6 +118,7 @@ class HintManager(QObject):
Target.window: "Follow hint in new window...",
Target.yank: "Yank hint to clipboard...",
Target.yank_primary: "Yank hint to primary selection...",
+ Target.run: "Run a command on a hint",
Target.fill: "Set hint in commandline...",
Target.hover: "Hover over a hint...",
Target.rapid: "Follow hint (rapid mode)...",
@@ -392,6 +394,18 @@ class HintManager(QObject):
message.info(self._win_id, "URL yanked to {}".format(
"primary selection" if sel else "clipboard"))
+ def _run_cmd(self, url, context):
+ """Run the command based on a hint URL.
+
+ Args:
+ url: The URL to open as a QUrl.
+ context: The HintContext to use.
+ """
+ urlstr = url.toDisplayString(QUrl.FullyEncoded)
+ args = context.get_args(urlstr)
+ commandrunner = runners.CommandRunner(self._win_id)
+ commandrunner.run_safely(' '.join(args))
+
def _preset_cmd_text(self, url, context):
"""Preset a commandline text based on a hint URL.
@@ -462,10 +476,15 @@ class HintManager(QObject):
Return:
A QUrl with the absolute URL, or None.
"""
- try:
- text = elem['href']
- except KeyError:
+ text = None
+ for attr in ('href', 'src'):
+ if attr in elem:
+ text = elem[attr]
+ break
+
+ if text is None:
return None
+
url = QUrl(text)
if not url.isValid():
return None
@@ -526,10 +545,10 @@ class HintManager(QObject):
"""
if not isinstance(target, Target):
raise TypeError("Target {} is no Target member!".format(target))
- if target in (Target.userscript, Target.spawn, Target.fill):
+ if target in (Target.userscript, Target.spawn, Target.run, Target.fill):
if not args:
raise cmdexc.CommandError(
- "'args' is required with target userscript/spawn/fill.")
+ "'args' is required with target userscript/spawn/run/fill.")
else:
if args:
raise cmdexc.CommandError(
@@ -620,6 +639,7 @@ class HintManager(QObject):
- `hover` : Hover over the link.
- `yank`: Yank the link to the clipboard.
- `yank-primary`: Yank the link to the primary selection.
+ - `run`: Run the argument as command.
- `fill`: Fill the commandline with the command given as
argument.
- `rapid`: Open the link in a new tab and stay in hinting mode.
@@ -630,7 +650,7 @@ class HintManager(QObject):
link.
- `spawn`: Spawn a command.
- *args: Arguments for spawn/userscript/fill.
+ *args: Arguments for spawn/userscript/run/fill.
- With `spawn`: The executable and arguments to spawn.
`{hint-url}` will get replaced by the selected
@@ -639,6 +659,7 @@ class HintManager(QObject):
- With `fill`: The command to fill the statusbar with.
`{hint-url}` will get replaced by the selected
URL.
+ - With `run`: Same as `fill`.
"""
tabbed_browser = objreg.get('tabbed-browser', scope='window',
window=self._win_id)
@@ -751,6 +772,7 @@ class HintManager(QObject):
url_handlers = {
Target.yank: self._yank,
Target.yank_primary: self._yank,
+ Target.run: self._run_cmd,
Target.fill: self._preset_cmd_text,
Target.userscript: self._call_userscript,
Target.spawn: self._spawn,