Merge remote-tracking branch 'origin/pr/3654'
This commit is contained in:
commit
6e23a6b958
@ -28,6 +28,10 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt
|
|||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
from PyQt5.QtWidgets import QWidget, QApplication
|
from PyQt5.QtWidgets import QWidget, QApplication
|
||||||
|
|
||||||
|
import pygments
|
||||||
|
import pygments.lexers
|
||||||
|
import pygments.formatters
|
||||||
|
|
||||||
from qutebrowser.keyinput import modeman
|
from qutebrowser.keyinput import modeman
|
||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.utils import (utils, objreg, usertypes, log, qtutils,
|
from qutebrowser.utils import (utils, objreg, usertypes, log, qtutils,
|
||||||
@ -150,10 +154,33 @@ class AbstractAction:
|
|||||||
raise WebTabError("{} is not a valid web action!".format(name))
|
raise WebTabError("{} is not a valid web action!".format(name))
|
||||||
self._widget.triggerPageAction(member)
|
self._widget.triggerPageAction(member)
|
||||||
|
|
||||||
def show_source(self):
|
def show_source(self, pygments=False):
|
||||||
"""Show the source of the current page in a new tab."""
|
"""Show the source of the current page in a new tab."""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def _show_source_pygments(self):
|
||||||
|
|
||||||
|
def show_source_cb(source):
|
||||||
|
"""Show source as soon as it's ready."""
|
||||||
|
# WORKAROUND for https://github.com/PyCQA/pylint/issues/491
|
||||||
|
# pylint: disable=no-member
|
||||||
|
lexer = pygments.lexers.HtmlLexer()
|
||||||
|
formatter = pygments.formatters.HtmlFormatter(
|
||||||
|
full=True, linenos='table')
|
||||||
|
# pylint: enable=no-member
|
||||||
|
highlighted = pygments.highlight(source, lexer, formatter)
|
||||||
|
|
||||||
|
tb = objreg.get('tabbed-browser', scope='window',
|
||||||
|
window=self._tab.win_id)
|
||||||
|
new_tab = tb.tabopen(background=False, related=True)
|
||||||
|
# The original URL becomes the path of a view-source: URL
|
||||||
|
# (without a host), but query/fragment should stay.
|
||||||
|
url = QUrl('view-source:' + urlstr)
|
||||||
|
new_tab.set_html(highlighted, url)
|
||||||
|
|
||||||
|
urlstr = self._tab.url().toString(QUrl.RemoveUserInfo)
|
||||||
|
self._tab.dump_async(show_source_cb)
|
||||||
|
|
||||||
|
|
||||||
class AbstractPrinting:
|
class AbstractPrinting:
|
||||||
|
|
||||||
|
@ -1515,11 +1515,15 @@ class CommandDispatcher:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window')
|
@cmdutils.register(instance='command-dispatcher', scope='window')
|
||||||
def view_source(self, edit=False):
|
def view_source(self, edit=False, pygments=False):
|
||||||
"""Show the source of the current page in a new tab.
|
"""Show the source of the current page in a new tab.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
edit: Edit the source in the editor instead of opening a tab.
|
edit: Edit the source in the editor instead of opening a tab.
|
||||||
|
pygments: Use pygments to generate the view. This is always
|
||||||
|
the case for QtWebKit. For QtWebEngine it may display
|
||||||
|
slightly different source.
|
||||||
|
Some JavaScript processing may be applied.
|
||||||
"""
|
"""
|
||||||
tab = self._current_widget()
|
tab = self._current_widget()
|
||||||
try:
|
try:
|
||||||
@ -1534,7 +1538,7 @@ class CommandDispatcher:
|
|||||||
ed = editor.ExternalEditor(self._tabbed_browser)
|
ed = editor.ExternalEditor(self._tabbed_browser)
|
||||||
tab.dump_async(ed.edit)
|
tab.dump_async(ed.edit)
|
||||||
else:
|
else:
|
||||||
tab.action.show_source()
|
tab.action.show_source(pygments)
|
||||||
|
|
||||||
@cmdutils.register(instance='command-dispatcher', scope='window',
|
@cmdutils.register(instance='command-dispatcher', scope='window',
|
||||||
debug=True)
|
debug=True)
|
||||||
|
@ -106,7 +106,11 @@ class WebEngineAction(browsertab.AbstractAction):
|
|||||||
"""Save the current page."""
|
"""Save the current page."""
|
||||||
self._widget.triggerPageAction(QWebEnginePage.SavePage)
|
self._widget.triggerPageAction(QWebEnginePage.SavePage)
|
||||||
|
|
||||||
def show_source(self):
|
def show_source(self, pygments=False):
|
||||||
|
if pygments:
|
||||||
|
self._show_source_pygments()
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._widget.triggerPageAction(QWebEnginePage.ViewSource)
|
self._widget.triggerPageAction(QWebEnginePage.ViewSource)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -23,10 +23,6 @@ import re
|
|||||||
import functools
|
import functools
|
||||||
import xml.etree.ElementTree
|
import xml.etree.ElementTree
|
||||||
|
|
||||||
import pygments
|
|
||||||
import pygments.lexers
|
|
||||||
import pygments.formatters
|
|
||||||
|
|
||||||
import sip
|
import sip
|
||||||
from PyQt5.QtCore import (pyqtSlot, Qt, QEvent, QUrl, QPoint, QTimer, QSizeF,
|
from PyQt5.QtCore import (pyqtSlot, Qt, QEvent, QUrl, QPoint, QTimer, QSizeF,
|
||||||
QSize)
|
QSize)
|
||||||
@ -55,28 +51,8 @@ class WebKitAction(browsertab.AbstractAction):
|
|||||||
"""Save the current page."""
|
"""Save the current page."""
|
||||||
raise browsertab.UnsupportedOperationError
|
raise browsertab.UnsupportedOperationError
|
||||||
|
|
||||||
def show_source(self):
|
def show_source(self, pygments=False):
|
||||||
|
self._show_source_pygments()
|
||||||
def show_source_cb(source):
|
|
||||||
"""Show source as soon as it's ready."""
|
|
||||||
# WORKAROUND for https://github.com/PyCQA/pylint/issues/491
|
|
||||||
# pylint: disable=no-member
|
|
||||||
lexer = pygments.lexers.HtmlLexer()
|
|
||||||
formatter = pygments.formatters.HtmlFormatter(
|
|
||||||
full=True, linenos='table')
|
|
||||||
# pylint: enable=no-member
|
|
||||||
highlighted = pygments.highlight(source, lexer, formatter)
|
|
||||||
|
|
||||||
tb = objreg.get('tabbed-browser', scope='window',
|
|
||||||
window=self._tab.win_id)
|
|
||||||
new_tab = tb.tabopen(background=False, related=True)
|
|
||||||
# The original URL becomes the path of a view-source: URL
|
|
||||||
# (without a host), but query/fragment should stay.
|
|
||||||
url = QUrl('view-source:' + urlstr)
|
|
||||||
new_tab.set_html(highlighted, url)
|
|
||||||
|
|
||||||
urlstr = self._tab.url().toString(QUrl.RemoveUserInfo)
|
|
||||||
self._tab.dump_async(show_source_cb)
|
|
||||||
|
|
||||||
|
|
||||||
class WebKitPrinting(browsertab.AbstractPrinting):
|
class WebKitPrinting(browsertab.AbstractPrinting):
|
||||||
|
Loading…
Reference in New Issue
Block a user