parent
013f906c3b
commit
efe96462c9
@ -830,8 +830,28 @@ class CommandDispatcher:
|
|||||||
args: Arguments to pass to the userscript.
|
args: Arguments to pass to the userscript.
|
||||||
"""
|
"""
|
||||||
cmd = os.path.expanduser(cmd)
|
cmd = os.path.expanduser(cmd)
|
||||||
userscripts.run(cmd, *args, url=self._current_url(),
|
env = {
|
||||||
win_id=self._win_id)
|
'QUTE_MODE': 'command',
|
||||||
|
}
|
||||||
|
|
||||||
|
idx = self._current_index()
|
||||||
|
tabbed_browser = self._tabbed_browser()
|
||||||
|
if idx != -1:
|
||||||
|
env['QUTE_TITLE'] = tabbed_browser.tabText(idx)
|
||||||
|
|
||||||
|
webview = tabbed_browser.currentWidget()
|
||||||
|
if webview is not None and webview.hasSelection():
|
||||||
|
env['QUTE_SELECTED_TEXT'] = webview.selectedText()
|
||||||
|
env['QUTE_SELECTED_HTML'] = webview.selectedHtml()
|
||||||
|
|
||||||
|
try:
|
||||||
|
url = tabbed_browser.current_url()
|
||||||
|
except qtutils.QtValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
env['QUTE_URL'] = url.toString(QUrl.FullyEncoded)
|
||||||
|
|
||||||
|
userscripts.run(cmd, *args, win_id=self._win_id, env=env)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window')
|
@cmdutils.register(instance='command-dispatcher', scope='window')
|
||||||
def quickmark_save(self):
|
def quickmark_save(self):
|
||||||
|
@ -443,16 +443,24 @@ class HintManager(QObject):
|
|||||||
window=self._win_id)
|
window=self._win_id)
|
||||||
download_manager.get(url, elem.webFrame().page())
|
download_manager.get(url, elem.webFrame().page())
|
||||||
|
|
||||||
def _call_userscript(self, url, context):
|
def _call_userscript(self, elem, context):
|
||||||
"""Call an userscript from a hint.
|
"""Call an userscript from a hint.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
url: The URL to open as a QUrl.
|
elem: The QWebElement to use in the userscript.
|
||||||
context: The HintContext to use.
|
context: The HintContext to use.
|
||||||
"""
|
"""
|
||||||
cmd = context.args[0]
|
cmd = context.args[0]
|
||||||
args = context.args[1:]
|
args = context.args[1:]
|
||||||
userscripts.run(cmd, *args, url=url, win_id=self._win_id)
|
env = {
|
||||||
|
'QUTE_MODE': 'hints',
|
||||||
|
'QUTE_SELECTED_TEXT': str(elem),
|
||||||
|
'QUTE_SELECTED_HTML': elem.toOuterXml(),
|
||||||
|
}
|
||||||
|
url = self._resolve_url(elem, context.baseurl)
|
||||||
|
if url is not None:
|
||||||
|
env['QUTE_URL'] = url.toString(QUrl.FullyEncoded)
|
||||||
|
userscripts.run(cmd, *args, win_id=self._win_id, env=env)
|
||||||
|
|
||||||
def _spawn(self, url, context):
|
def _spawn(self, url, context):
|
||||||
"""Spawn a simple command from a hint.
|
"""Spawn a simple command from a hint.
|
||||||
@ -767,6 +775,7 @@ class HintManager(QObject):
|
|||||||
Target.hover: self._click,
|
Target.hover: self._click,
|
||||||
# _download needs a QWebElement to get the frame.
|
# _download needs a QWebElement to get the frame.
|
||||||
Target.download: self._download,
|
Target.download: self._download,
|
||||||
|
Target.userscript: self._call_userscript,
|
||||||
}
|
}
|
||||||
# Handlers which take a QUrl
|
# Handlers which take a QUrl
|
||||||
url_handlers = {
|
url_handlers = {
|
||||||
@ -774,7 +783,6 @@ class HintManager(QObject):
|
|||||||
Target.yank_primary: self._yank,
|
Target.yank_primary: self._yank,
|
||||||
Target.run: self._run_cmd,
|
Target.run: self._run_cmd,
|
||||||
Target.fill: self._preset_cmd_text,
|
Target.fill: self._preset_cmd_text,
|
||||||
Target.userscript: self._call_userscript,
|
|
||||||
Target.spawn: self._spawn,
|
Target.spawn: self._spawn,
|
||||||
}
|
}
|
||||||
elem = self._context.elems[keystr].elem
|
elem = self._context.elems[keystr].elem
|
||||||
|
@ -24,10 +24,11 @@ import os.path
|
|||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from PyQt5.QtCore import (pyqtSignal, pyqtSlot, QObject, QStandardPaths,
|
from PyQt5.QtCore import (pyqtSignal, pyqtSlot, QObject, QStandardPaths,
|
||||||
QSocketNotifier, QProcessEnvironment, QProcess, QUrl)
|
QSocketNotifier, QProcessEnvironment, QProcess)
|
||||||
|
|
||||||
from qutebrowser.utils import message, log, objreg, standarddir
|
from qutebrowser.utils import message, log, objreg, standarddir
|
||||||
from qutebrowser.commands import runners, cmdexc
|
from qutebrowser.commands import runners, cmdexc
|
||||||
|
from qutebrowser.config import config
|
||||||
|
|
||||||
|
|
||||||
class _QtFIFOReader(QObject):
|
class _QtFIFOReader(QObject):
|
||||||
@ -305,19 +306,26 @@ else:
|
|||||||
UserscriptRunner = _DummyUserscriptRunner
|
UserscriptRunner = _DummyUserscriptRunner
|
||||||
|
|
||||||
|
|
||||||
def run(cmd, *args, url, win_id):
|
def run(cmd, *args, win_id, env):
|
||||||
"""Convenience method to run an userscript."""
|
"""Convenience method to run an userscript.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
cmd: The userscript binary to run.
|
||||||
|
*args: The arguments to pass to the userscript.
|
||||||
|
win_id: The window id the userscript is executed in.
|
||||||
|
env: A dictionary of variables to add to the process environment.
|
||||||
|
"""
|
||||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||||
window=win_id)
|
window=win_id)
|
||||||
# We don't remove the password in the URL here, as it's probably safe to
|
|
||||||
# pass via env variable..
|
|
||||||
urlstr = url.toString(QUrl.FullyEncoded)
|
|
||||||
commandrunner = runners.CommandRunner(win_id, tabbed_browser)
|
commandrunner = runners.CommandRunner(win_id, tabbed_browser)
|
||||||
runner = UserscriptRunner(win_id, tabbed_browser)
|
runner = UserscriptRunner(win_id, tabbed_browser)
|
||||||
runner.got_cmd.connect(
|
runner.got_cmd.connect(
|
||||||
lambda cmd: log.commands.debug("Got userscript command: {}".format(
|
lambda cmd: log.commands.debug("Got userscript command: {}".format(
|
||||||
cmd)))
|
cmd)))
|
||||||
runner.got_cmd.connect(commandrunner.run_safely)
|
runner.got_cmd.connect(commandrunner.run_safely)
|
||||||
runner.run(cmd, *args, env={'QUTE_URL': urlstr})
|
user_agent = config.get('network', 'user-agent')
|
||||||
|
if user_agent is not None:
|
||||||
|
env['QUTE_USER_AGENT'] = user_agent
|
||||||
|
runner.run(cmd, *args, env=env)
|
||||||
runner.finished.connect(commandrunner.deleteLater)
|
runner.finished.connect(commandrunner.deleteLater)
|
||||||
runner.finished.connect(runner.deleteLater)
|
runner.finished.connect(runner.deleteLater)
|
||||||
|
Loading…
Reference in New Issue
Block a user