diff --git a/kitty/fonts/common.py b/kitty/fonts/common.py index 92a5ac0fa..f42417334 100644 --- a/kitty/fonts/common.py +++ b/kitty/fonts/common.py @@ -417,7 +417,7 @@ def get_named_style(face_or_descriptor: Union[Face, Descriptor]) -> Optional[Nam d: Descriptor = face_or_descriptor vd = get_variable_data_for_descriptor(d) if d['descriptor_type'] == 'fontconfig': - ns = d.get('named_instance', -1) + ns = d.get('named_style', -1) if ns > -1 and ns < len(vd['named_styles']): return vd['named_styles'][ns] axis_map = {} @@ -444,7 +444,7 @@ def get_axis_map(face_or_descriptor: Union[Face, Descriptor]) -> Dict[str, float d: Descriptor = face_or_descriptor vd = get_variable_data_for_descriptor(d) if d['descriptor_type'] == 'fontconfig': - ns = d.get('named_instance', -1) + ns = d.get('named_style', -1) if ns > -1 and ns < len(vd['named_styles']): base_axis_map = vd['named_styles'][ns]['axis_values'].copy() axis_map = {} diff --git a/kitty/fonts/core_text.py b/kitty/fonts/core_text.py index 0f809d21a..1b5965037 100644 --- a/kitty/fonts/core_text.py +++ b/kitty/fonts/core_text.py @@ -248,6 +248,11 @@ def set_named_style(name: str, font: CoreTextFont, vd: VariableData) -> bool: for i, ns in enumerate(vd['named_styles']): if ns['name'].lower() == q: return set_axis_values(ns['axis_values'], font, vd) + if vd['elided_fallback_name']: + for i, ns in enumerate(vd['named_styles']): + eq = ' '.join(ns['name'].replace(vd['elided_fallback_name'], '').strip().split()).lower() + if q == eq: + return set_axis_values(ns['axis_values'], font, vd) return False diff --git a/kitty/fonts/fontconfig.py b/kitty/fonts/fontconfig.py index 0fbec5483..3913bf0d6 100644 --- a/kitty/fonts/fontconfig.py +++ b/kitty/fonts/fontconfig.py @@ -245,6 +245,12 @@ def set_named_style(name: str, font: FontConfigPattern, vd: VariableData) -> boo if ns['name'].lower() == q: font['named_style'] = i return True + if vd['elided_fallback_name']: + for i, ns in enumerate(vd['named_styles']): + eq = ' '.join(ns['name'].replace(vd['elided_fallback_name'], '').strip().split()).lower() + if q == eq: + font['named_style'] = i + return True return False diff --git a/kitty_tests/fonts.py b/kitty_tests/fonts.py index 3b1d9a9a0..cc7b2dbc9 100644 --- a/kitty_tests/fonts.py +++ b/kitty_tests/fonts.py @@ -114,6 +114,11 @@ class Selection(BaseTest): self.ae(get_named_style(face)['name'], 'Black') face = face_from_descriptor(ff['bi']) self.ae(get_named_style(face)['name'], 'Black Italic') + opts.font_family = parse_font_spec('family=SourceCodeVF variable_name=SourceCodeUpright wght=470') + opts.italic_font = parse_font_spec('family=SourceCodeVF variable_name=SourceCodeItalic style=Black') + ff = get_font_files(opts) + self.assertFalse(get_named_style(ff['medium'])) + self.ae(get_named_style(ff['italic'])['name'], 'Black Italic') if has('cascadia code'): opts = Options() opts.font_family = parse_font_spec('family="cascadia code"')