diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py index 4a27a8073..ad9c81fdd 100644 --- a/qutebrowser/config/config.py +++ b/qutebrowser/config/config.py @@ -520,6 +520,13 @@ class ConfigManager(QObject): if self._initialized: self._after_set(sectname, optname) + @pyqtSlot(str, str, str) + def set_javascript(self, sectname, optname, value): + try: + self.set('conf', sectname, optname, value) + except configtypes.ValidationError as e: + message.error(e) + @cmdutils.register(instance='config') def save(self): """Save the config file.""" diff --git a/qutebrowser/html/settings.html b/qutebrowser/html/settings.html new file mode 100644 index 000000000..d8994e111 --- /dev/null +++ b/qutebrowser/html/settings.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} + +{% block script %} +var cset = function(section, option, el) { + value = el.value; + window.qutesettings.set_javascript(section, option, value); +} +{% endblock %} + +{% block style %} +table { border: 1px solid grey; border-collapse: collapse; } +pre { margin: 2px; } +th, td { border: 1px solid grey; padding: 0px 5px; } +th { background: lightgrey; } +th pre { color: grey; text-align: left; } +{% endblock %} + +{% block content %} +

{{ title }}

+ +{% for section in config.DATA %} + + {% for d, e in config.DATA.get(section).items() %} + + + + + {% endfor %} +{% endfor %} +

{{ section }}

{{ config.SECTION_DESC.get(section)|wordwrap(width=120) }}
{{ d }} (Current: {{ e.value()|truncate(100) }}) + + +
+ +{% endblock %} \ No newline at end of file diff --git a/qutebrowser/network/qutescheme.py b/qutebrowser/network/qutescheme.py index a9695be8e..542281ff2 100644 --- a/qutebrowser/network/qutescheme.py +++ b/qutebrowser/network/qutescheme.py @@ -31,7 +31,8 @@ from PyQt5.QtNetwork import QNetworkReply import qutebrowser from qutebrowser.network import schemehandler, networkreply -from qutebrowser.utils import version, utils, jinja, log, message, docutils +from qutebrowser.utils import (version, utils, jinja, log, message, docutils, + objreg) pyeval_output = ":pyeval was never called" @@ -146,6 +147,19 @@ def qute_help(win_id, request): return utils.read_file(path).encode('UTF-8', errors='xmlcharrefreplace') +def qute_settings(win_id, request): + """Handler for qute:settings. View/change qute configuration""" + from qutebrowser.config import configdata + + cfg = objreg.get('config') + frame = objreg.get('webview', scope='tab').page().mainFrame() + frame.addToJavaScriptWindowObject("qutesettings", cfg) + + html = jinja.env.get_template('settings.html').render( + title='settings', config=configdata, cfg=cfg) + return html.encode('UTF-8', errors='xmlcharrefreplace') + + HANDLERS = { 'pyeval': qute_pyeval, 'version': qute_version, @@ -153,4 +167,5 @@ HANDLERS = { 'log': qute_log, 'gpl': qute_gpl, 'help': qute_help, + 'settings': qute_settings, }