diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py index 1102fb93a..ed6b126ef 100644 --- a/qutebrowser/config/config.py +++ b/qutebrowser/config/config.py @@ -611,6 +611,8 @@ def init(parent=None): val = ConfigContainer(instance) key_instance = KeyConfig(instance) + configtypes.Font.monospace_fonts = val.fonts.monospace + config_commands = ConfigCommands(instance, key_instance) objreg.register('config-commands', config_commands) diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index f5a6f742a..9afbc2c77 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -39,11 +39,6 @@ DATA = None # FIXME:conf what to do about this? DEFAULT_FONT_SIZE = '10pt' if sys.platform == 'darwin' else '8pt' -MONOSPACE = (' xos4 Terminus, Terminus, Monospace, ' - '"DejaVu Sans Mono", Monaco, ' - '"Bitstream Vera Sans Mono", "Andale Mono", ' - '"Courier New", Courier, "Liberation Mono", ' - 'monospace, Fixed, Consolas, Terminal') Option = collections.namedtuple('Option', ['name', 'typ', 'default', diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index 66be6b7a9..6751b233b 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -1685,7 +1685,11 @@ fonts.monospace: Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal type: Font - desc: Default monospace fonts. + desc: >- + Default monospace fonts. + + Whenever "monospace" is used in a font setting, it\'s replaced with the + fonts listed here. fonts.completion.entry: default: 8pt monospace diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py index 24722f510..e266bd38a 100644 --- a/qutebrowser/config/configtypes.py +++ b/qutebrowser/config/configtypes.py @@ -849,6 +849,8 @@ class Font(BaseType): * Size: _number_ `px`/`pt` """ + # Gets set when the config is initialized. + monospace_fonts = None font_regex = re.compile(r""" ^( ( @@ -875,6 +877,8 @@ class Font(BaseType): # as family. raise configexc.ValidationError(value, "must be a valid font") + if value.endswith(' monospace') and self.monospace_fonts is not None: + return value.replace('monospace', self.monospace_fonts) return value @@ -955,6 +959,8 @@ class QtFont(Font): # hopefully nobody will ever have a font with quotes in the family (if # that's even possible), we take a much more naive approach. family = family.replace('"', '').replace("'", '') + if family == 'monospace': + family = self.monospace_fonts font.setFamily(family) return font diff --git a/tests/unit/config/test_configtypes.py b/tests/unit/config/test_configtypes.py index 7101f7b9f..99acd3097 100644 --- a/tests/unit/config/test_configtypes.py +++ b/tests/unit/config/test_configtypes.py @@ -1260,6 +1260,16 @@ class TestFont: with pytest.raises(configexc.ValidationError): klass().to_py(val) + def test_monospace_replacement(self, klass, monkeypatch): + monkeypatch.setattr(configtypes.Font, 'monospace_fonts', 'Terminus') + if klass is configtypes.Font: + expected = '10pt Terminus' + elif klass is configtypes.QtFont: + desc = FontDesc(QFont.StyleNormal, QFont.Normal, 10, None, + 'Terminus'), + expected = Font.fromdesc(*desc) + assert klass().to_py('10pt monospace') == expected + class TestFontFamily: