Initial stubbing out of a new config

This commit is contained in:
Florian Bruhin 2017-06-08 17:43:34 +02:00
parent 2f26490536
commit 00c8d8da34
7 changed files with 123 additions and 42 deletions

View File

@ -148,7 +148,8 @@ def init(args, crash_handler):
log.init.debug("Connecting signals...")
config_obj = objreg.get('config')
config_obj.style_changed.connect(style.get_stylesheet.cache_clear)
# FIXME:conf
# config_obj.style_changed.connect(style.get_stylesheet.cache_clear)
qApp.focusChanged.connect(on_focus_changed)
_process_args(args)

View File

@ -106,6 +106,8 @@ class CommandRunner(QObject):
The new command string if an alias was found. Default value
otherwise.
"""
# FIXME:conf
return default
parts = text.strip().split(maxsplit=1)
try:
alias = config.get('aliases', parts[0])

View File

@ -285,9 +285,10 @@ def _get_cmd_completions(include_hidden, include_aliases, prefix=''):
bindings = ', '.join(cmd_to_keys.get(obj.name, []))
cmdlist.append((prefix + obj.name, obj.desc, bindings))
if include_aliases:
for name, cmd in config.section('aliases').items():
bindings = ', '.join(cmd_to_keys.get(name, []))
cmdlist.append((name, "Alias for '{}'".format(cmd), bindings))
# FIXME:conf
# if include_aliases:
# for name, cmd in config.section('aliases').items():
# bindings = ', '.join(cmd_to_keys.get(name, []))
# cmdlist.append((name, "Alias for '{}'".format(cmd), bindings))
return cmdlist

View File

@ -37,7 +37,7 @@ import collections.abc
from PyQt5.QtCore import pyqtSignal, QObject, QUrl, QSettings
from PyQt5.QtGui import QColor
from qutebrowser.config import configdata, configexc, textwrapper
from qutebrowser.config import configdata, configexc, textwrapper, newconfig
from qutebrowser.config.parsers import keyconf
from qutebrowser.config.parsers import ini
from qutebrowser.commands import cmdexc, cmdutils
@ -132,7 +132,8 @@ def get(*args, **kwargs):
def section(sect):
"""Get a config section from the global config."""
return objreg.get('config')[sect]
config = objreg.get('config')
return newconfig.SectionStub(config, sect)
def _init_main_config(parent=None):
@ -242,13 +243,20 @@ def _init_misc():
QSettings.setPath(fmt, QSettings.UserScope, path)
def _init_new_config(parent):
new_config = newconfig.NewConfigManager(parent)
new_config.read_defaults()
objreg.register('config', new_config)
def init(parent=None):
"""Initialize the config.
Args:
parent: The parent to pass to QObjects which get initialized.
"""
_init_main_config(parent)
# _init_main_config(parent)
_init_new_config(parent)
_init_key_config(parent)
_init_misc()

View File

@ -27,6 +27,8 @@ DATA: A global read-only copy of the default config, an OrderedDict of
sections.
"""
# FIXME:conf reintroduce interpolation?
import sys
import re
import collections
@ -121,6 +123,13 @@ SECTION_DESC = {
DEFAULT_FONT_SIZE = '10pt' if sys.platform == 'darwin' else '8pt'
# FIXME:conf what to do about this?
MONOSPACE = (' xos4 Terminus, Terminus, Monospace, '
'"DejaVu Sans Mono", Monaco, '
'"Bitstream Vera Sans Mono", "Andale Mono", '
'"Courier New", Courier, "Liberation Mono", '
'monospace, Fixed, Consolas, Terminal')
def data(readonly=False):
@ -155,7 +164,7 @@ def data(readonly=False):
"the filename will be appended."),
('default-page',
SettingValue(typ.FuzzyUrl(), '${startpage}'),
SettingValue(typ.FuzzyUrl(), 'https://start.duckduckgo.com/'),
"The page to open if :open -t/-b/-w is used without URL. Use "
"`about:blank` for a blank page."),
@ -1051,7 +1060,7 @@ def data(readonly=False):
"Top border color of the completion widget category headers."),
('completion.category.border.bottom',
SettingValue(typ.QssColor(), '${completion.category.border.top}'),
SettingValue(typ.QssColor(), 'black'),
"Bottom border color of the completion widget category headers."),
('completion.item.selected.fg',
@ -1068,7 +1077,7 @@ def data(readonly=False):
('completion.item.selected.border.bottom',
SettingValue(
typ.QssColor(), '${completion.item.selected.border.top}'),
typ.QssColor(), '#bbbb00'),
"Bottom border color of the selected completion item."),
('completion.match.fg',
@ -1076,11 +1085,11 @@ def data(readonly=False):
"Foreground color of the matched text in the completion."),
('completion.scrollbar.fg',
SettingValue(typ.QssColor(), '${completion.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Color of the scrollbar handle in completion view."),
('completion.scrollbar.bg',
SettingValue(typ.QssColor(), '${completion.bg}'),
SettingValue(typ.QssColor(), '#333333'),
"Color of the scrollbar in completion view"),
('statusbar.fg',
@ -1092,7 +1101,7 @@ def data(readonly=False):
"Background color of the statusbar."),
('statusbar.fg.private',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in private browsing mode."),
('statusbar.bg.private',
@ -1100,7 +1109,7 @@ def data(readonly=False):
"Background color of the statusbar in private browsing mode."),
('statusbar.fg.insert',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in insert mode."),
('statusbar.bg.insert',
@ -1108,25 +1117,25 @@ def data(readonly=False):
"Background color of the statusbar in insert mode."),
('statusbar.fg.command',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in command mode."),
('statusbar.bg.command',
SettingValue(typ.QssColor(), '${statusbar.bg}'),
SettingValue(typ.QssColor(), 'black'),
"Background color of the statusbar in command mode."),
('statusbar.fg.command.private',
SettingValue(typ.QssColor(), '${statusbar.fg.private}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in private browsing + command "
"mode."),
('statusbar.bg.command.private',
SettingValue(typ.QssColor(), '${statusbar.bg.private}'),
SettingValue(typ.QssColor(), 'grey'),
"Background color of the statusbar in private browsing + command "
"mode."),
('statusbar.fg.caret',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in caret mode."),
('statusbar.bg.caret',
@ -1134,7 +1143,7 @@ def data(readonly=False):
"Background color of the statusbar in caret mode."),
('statusbar.fg.caret-selection',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Foreground color of the statusbar in caret mode with a "
"selection"),
@ -1148,7 +1157,7 @@ def data(readonly=False):
"Background color of the progress bar."),
('statusbar.url.fg',
SettingValue(typ.QssColor(), '${statusbar.fg}'),
SettingValue(typ.QssColor(), 'white'),
"Default foreground color of the URL in the statusbar."),
('statusbar.url.fg.success',
@ -1200,11 +1209,11 @@ def data(readonly=False):
"Background color of selected odd tabs."),
('tabs.fg.selected.even',
SettingValue(typ.QtColor(), '${tabs.fg.selected.odd}'),
SettingValue(typ.QtColor(), 'white'),
"Foreground color of selected even tabs."),
('tabs.bg.selected.even',
SettingValue(typ.QtColor(), '${tabs.bg.selected.odd}'),
SettingValue(typ.QtColor(), 'black'),
"Background color of selected even tabs."),
('tabs.bg.bar',
@ -1255,7 +1264,7 @@ def data(readonly=False):
"Color gradient start for download backgrounds."),
('downloads.fg.stop',
SettingValue(typ.QtColor(), '${downloads.fg.start}'),
SettingValue(typ.QtColor(), '#0000aa'),
"Color gradient end for download text."),
('downloads.bg.stop',
@ -1356,23 +1365,23 @@ def data(readonly=False):
"Default monospace fonts."),
('completion',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used in the completion widget."),
('completion.category',
SettingValue(typ.Font(), 'bold ${completion}'),
SettingValue(typ.Font(), 'bold ' + DEFAULT_FONT_SIZE + MONOSPACE),
"Font used in the completion categories."),
('tabbar',
SettingValue(typ.QtFont(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.QtFont(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used in the tab bar."),
('statusbar',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used in the statusbar."),
('downloads',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used for the downloadbar."),
('hints',
@ -1380,7 +1389,7 @@ def data(readonly=False):
"Font used for the hints."),
('debug-console',
SettingValue(typ.QtFont(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.QtFont(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used for the debugging console."),
('web-family-standard',
@ -1432,19 +1441,19 @@ def data(readonly=False):
"The default font size for fixed-pitch text."),
('keyhint',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used in the keyhint widget."),
('messages.error',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used for error messages."),
('messages.warning',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used for warning messages."),
('messages.info',
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + ' ${_monospace}'),
SettingValue(typ.Font(), DEFAULT_FONT_SIZE + MONOSPACE),
"Font used for info messages."),
('prompts',

View File

@ -0,0 +1,61 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2014-2017 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
"""New qutebrowser configuration code."""
from PyQt5.QtCore import pyqtSignal, QObject
from qutebrowser.config import configdata
class SectionStub:
# FIXME get rid of this once we get rid of sections
def __init__(self, conf, name):
self._conf = conf
self._name = name
def __getitem__(self, item):
return self._conf.get(self._name, item)
class NewConfigManager(QObject):
# FIXME:conf QObject?
changed = pyqtSignal(str, str) # FIXME:conf stub... where is this used?
def __init__(self, parent=None):
super().__init__(parent)
self._values = {}
def _key(self, sect, opt):
return sect + ' -> ' + opt
def read_defaults(self):
for name, section in configdata.data().items():
for key, value in section.items():
self._values[self._key(name, key)] = value
def get(self, section, option):
val = self._values[self._key(section, option)]
return val.typ.transform(val.value())

View File

@ -40,7 +40,7 @@ def get_stylesheet(template_str):
Return:
The formatted template as string.
"""
colordict = ColorDict(config.section('colors'))
colordict = ColorDict(config)
template = jinja2.Template(template_str)
return template.render(color=colordict, font=config.section('fonts'),
config=objreg.get('config'))
@ -70,10 +70,13 @@ def _update_stylesheet(obj):
obj.setStyleSheet(get_stylesheet(obj.STYLESHEET))
class ColorDict(collections.UserDict):
class ColorDict:
"""A dict aimed at Qt stylesheet colors."""
def __init__(self, config):
self._config = config
def __getitem__(self, key):
"""Override dict __getitem__.
@ -86,11 +89,7 @@ class ColorDict(collections.UserDict):
else, return the plain value.
"""
try:
val = self.data[key]
except KeyError:
log.config.exception("No color defined for {}!".format(key))
return ''
val = self._config.get('colors', key)
if isinstance(val, QColor):
# This could happen when accidentally declaring something as
# QtColor instead of Color in the config, and it'd go unnoticed as