Incorrect Font Fallback Behavior (we fall back to Segoe UI sometimes!) #5796

Open
opened 2026-01-31 00:21:56 +00:00 by claunia · 7 comments
Owner

Originally created by @schorrm on GitHub (Jan 7, 2020).

notes from @DHowett - we're also falling back to Segoe UI Symbol when box-drawing glyphs don't exist. We should have a smart internal font fallback table that we consult even when we allow customization in #2664.

Environment

Microsoft Windows [Version 10.0.18362.535]
Windows Terminal version (if applicable): 0.7.3451.0

Steps to reproduce

Print anything in Hebrew when using a font without Hebrew glyphs (e.g. Cascadia Code or Consolas).

image

Expected behavior

So, leaving aside RTL being tough, there's a very specific error here. Namely, font fallback in the code seems to be:
Consolas --> Lucida Console --> Courier New.
This should fail the first two, but the Hebrew charset is covered in Courier New, so that should be the font used here. If you set the font to Courier New, you can see that the font rendering itself is not messed up. Still RTL is tough, but -- the ransom note aspect of it is gone.

image

Actual behavior

With the benefit of super zooming in, it seems to me that the font being used for Hebrew is Segoe UI. I assume that it's some sort of system default, MSFT and whatnot, but that's really not good. Courier New may be jarring, as you'd expect from fallback, but given that it's at least monospaced I assume that the ransom note aspect of the text rendering here wouldn't happen. Segoe UI is not monospaced, and I think that's why you get the ransom note like variation in text sizes.

An important clarification / note: this is NOT a regression. This is not a new bug, it's been around forever. The only new thing is that I read the source code yesterday and realized that it wasn't supposed to happen.

Originally created by @schorrm on GitHub (Jan 7, 2020). _notes from @DHowett_ - we're also falling back to `Segoe UI Symbol` when box-drawing glyphs don't exist. We should have a smart internal font fallback table that we consult _even when we allow customization in #2664._ <!-- This bug tracker is monitored by Windows Terminal development team and other technical folks. **Important: When reporting BSODs or security issues, DO NOT attach memory dumps, logs, or traces to Github issues**. Instead, send dumps/traces to secure@microsoft.com, referencing this GitHub issue. If this is an application crash, please also provide a Feedback Hub submission link so we can find your diagnostic data on the backend. Use the category "Apps > Windows Terminal (Preview)" and choose "Share My Feedback" after submission to get the link. Please use this form and describe your issue, concisely but precisely, with as much detail as possible. --> # Environment ```none Microsoft Windows [Version 10.0.18362.535] Windows Terminal version (if applicable): 0.7.3451.0 ``` # Steps to reproduce Print anything in Hebrew when using a font without Hebrew glyphs (e.g. Cascadia Code or Consolas). ![image](https://user-images.githubusercontent.com/16987694/71894989-7fd88200-3158-11ea-9f4d-312e96b4a133.png) # Expected behavior So, leaving aside RTL being tough, there's a very specific error here. Namely, font fallback in the code seems to be: Consolas --> Lucida Console --> Courier New. This should fail the first two, but the Hebrew charset **is** covered in Courier New, so that should be the font used here. If you set the font to Courier New, you can see that the font rendering itself is not messed up. Still RTL is tough, but -- the ransom note aspect of it is gone. ![image](https://user-images.githubusercontent.com/16987694/71894712-afd35580-3157-11ea-8a84-370d919b13a7.png) # Actual behavior With the benefit of super zooming in, it seems to me that the font being used for Hebrew is *Segoe UI*. I assume that it's some sort of system default, MSFT and whatnot, but that's really not good. Courier New may be jarring, as you'd expect from fallback, but given that it's at least monospaced I assume that the ransom note aspect of the text rendering here wouldn't happen. Segoe UI is not monospaced, and I think that's why you get the ransom note like variation in text sizes. An important clarification / note: this is **_NOT_** a regression. This is not a new bug, it's been around forever. The only new thing is that I read the source code yesterday and realized that it wasn't supposed to happen. <!-- What's actually happening? -->
claunia added the Area-RenderingIssue-BugProduct-TerminalPriority-2 labels 2026-01-31 00:21:56 +00:00
Author
Owner

@DHowett-MSFT commented on GitHub (Jan 9, 2020):

We're probably going to resolve this one when we knock it out with /dup #2664. The fallback list we're using isn't actually for looking up characters, if I recall properly-- it's what we use when the user's provided font just doesn't exist.

Thanks for the report!

@DHowett-MSFT commented on GitHub (Jan 9, 2020): We're probably going to resolve this one when we knock it out with /dup #2664. The fallback list we're using isn't actually for looking up characters, if I recall properly-- it's what we use when the user's provided font just doesn't exist. Thanks for the report!
Author
Owner

@ghost commented on GitHub (Jan 9, 2020):

Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!

@ghost commented on GitHub (Jan 9, 2020): Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!
Author
Owner

@DHowett commented on GitHub (Aug 13, 2020):

You know, I've changed my mind and would rather treat this as a separate rendering bug. We should try to make sure the default fallback set is as robust as we can before giving users the ability to configure one of their own. We may even want to go so far as to make sure their fallback set is applied on top of ours.

@DHowett commented on GitHub (Aug 13, 2020): You know, I've changed my mind and would rather treat this as a separate rendering bug. We should try to make sure the default fallback set is as robust as we can before giving users the ability to configure one of their own. We may even want to go so far as to make sure their fallback set is applied _on top_ of ours.
Author
Owner

@schorrm commented on GitHub (Aug 13, 2020):

Basic Comparison table of glyph & alphabet support for the grab bag of fonts I have on my computer

Font                     Glyph Count  Greek    Cyrillic    Armenian    Hebrew    Arabic
---------------------  -------------  -------  ----------  ----------  --------  --------
Cascadia Code Regular           1624  ✅       ✅          ❌          ❌        ❌
Cascadia Mono Regular           1624  ✅       ✅          ❌          ❌        ❌
Consolas                        3030  ✅       ✅          ✅          ❌        ❌
Courier New                     3763  ✅       ✅          ✅          ✅        ✅
Cousine                         2385  ✅       ✅          ❌          ✅        ❌
Fira Code Regular               1638  ✅       ✅          ❌          ❌        ❌
Kawkab Mono                     1852  ✅       ✅          ❌          ❌        ✅
Liberation Mono                 2392  ✅       ✅          ❌          ✅        ❌
Lucida Console                   667  ✅       ✅          ❌          ❌        ❌
Monaco                          1104  ❌       ✅          ❌          ❌        ❌
Noto Mono                        897  ✅       ✅          ❌          ❌        ❌
SF Mono Regular                 1442  ✅       ✅          ❌          ❌        ❌
Source Code Pro                 1585  ✅       ✅          ❌          ❌        ❌
Ubuntu Mono                     1296  ✅       ✅          ❌          ❌        ❌
* Arial                         4503  ✅       ✅          ✅          ✅        ✅
* Segoe UI                      5344  ✅       ✅          ✅          ✅        ✅
* Times New Roman               4685  ✅       ✅          ✅          ✅        ✅
@schorrm commented on GitHub (Aug 13, 2020): Basic Comparison table of glyph & alphabet support for the grab bag of fonts I have on my computer ``` Font Glyph Count Greek Cyrillic Armenian Hebrew Arabic --------------------- ------------- ------- ---------- ---------- -------- -------- Cascadia Code Regular 1624 ✅ ✅ ❌ ❌ ❌ Cascadia Mono Regular 1624 ✅ ✅ ❌ ❌ ❌ Consolas 3030 ✅ ✅ ✅ ❌ ❌ Courier New 3763 ✅ ✅ ✅ ✅ ✅ Cousine 2385 ✅ ✅ ❌ ✅ ❌ Fira Code Regular 1638 ✅ ✅ ❌ ❌ ❌ Kawkab Mono 1852 ✅ ✅ ❌ ❌ ✅ Liberation Mono 2392 ✅ ✅ ❌ ✅ ❌ Lucida Console 667 ✅ ✅ ❌ ❌ ❌ Monaco 1104 ❌ ✅ ❌ ❌ ❌ Noto Mono 897 ✅ ✅ ❌ ❌ ❌ SF Mono Regular 1442 ✅ ✅ ❌ ❌ ❌ Source Code Pro 1585 ✅ ✅ ❌ ❌ ❌ Ubuntu Mono 1296 ✅ ✅ ❌ ❌ ❌ * Arial 4503 ✅ ✅ ✅ ✅ ✅ * Segoe UI 5344 ✅ ✅ ✅ ✅ ✅ * Times New Roman 4685 ✅ ✅ ✅ ✅ ✅ ```
Author
Owner

@schorrm commented on GitHub (Aug 13, 2020):

I would suggest probably Consolas --> Courier New as the basic fallback order?

@schorrm commented on GitHub (Aug 13, 2020): I would suggest probably Consolas --> Courier New as the basic fallback order?
Author
Owner

@mangelozzi commented on GitHub (Aug 13, 2020):

Segoe UI doesnt have unicode block symbols. And those are often the missing symbols required to be found.

@mangelozzi commented on GitHub (Aug 13, 2020): Segoe UI doesnt have unicode block symbols. And those are often the missing symbols required to be found.
Author
Owner

@schorrm commented on GitHub (Aug 14, 2020):

@michael-angelozzi great point. Coverage table with:

Font                     Glyph Count  Greek    Cyrillic    Armenian    Hebrew    Arabic    Box Drawing    Block Elements
---------------------  -------------  -------  ----------  ----------  --------  --------  -------------  ----------------
Cascadia Code Regular           1624  ✅       ✅          ❌          ❌        ❌        ✅             ✅
Cascadia Mono Regular           1624  ✅       ✅          ❌          ❌        ❌        ✅             ✅
Consolas                        3030  ✅       ✅          ✅          ❌        ❌        ✅             ❌
Courier New                     3763  ✅       ✅          ✅          ✅        ✅        ❌             ❌
Cousine                         2385  ✅       ✅          ❌          ✅        ❌        ❌             ❌
Fira Code Regular               1638  ✅       ✅          ❌          ❌        ❌        ❌             ❌
Kawkab Mono                     1852  ✅       ✅          ❌          ❌        ✅        ✅             ❌
Liberation Mono                 2392  ✅       ✅          ❌          ✅        ❌        ❌             ❌
Lucida Console                   667  ✅       ✅          ❌          ❌        ❌        ❌             ❌
Monaco                          1104  ❌       ✅          ❌          ❌        ❌        ❌             ❌
Noto Mono                        897  ✅       ✅          ❌          ❌        ❌        ❌             ❌
SF Mono Regular                 1442  ✅       ✅          ❌          ❌        ❌        ✅             ❌
Source Code Pro                 1585  ✅       ✅          ❌          ❌        ❌        ✅             ❌
Ubuntu Mono                     1296  ✅       ✅          ❌          ❌        ❌        ❌             ❌
* Arial                         4503  ✅       ✅          ✅          ✅        ✅        ❌             ❌
* Segoe UI                      5344  ✅       ✅          ✅          ✅        ✅        ❌             ❌
* Times New Roman               4685  ✅       ✅          ✅          ✅        ✅        ❌             ❌
@schorrm commented on GitHub (Aug 14, 2020): @michael-angelozzi great point. Coverage table with: ``` Font Glyph Count Greek Cyrillic Armenian Hebrew Arabic Box Drawing Block Elements --------------------- ------------- ------- ---------- ---------- -------- -------- ------------- ---------------- Cascadia Code Regular 1624 ✅ ✅ ❌ ❌ ❌ ✅ ✅ Cascadia Mono Regular 1624 ✅ ✅ ❌ ❌ ❌ ✅ ✅ Consolas 3030 ✅ ✅ ✅ ❌ ❌ ✅ ❌ Courier New 3763 ✅ ✅ ✅ ✅ ✅ ❌ ❌ Cousine 2385 ✅ ✅ ❌ ✅ ❌ ❌ ❌ Fira Code Regular 1638 ✅ ✅ ❌ ❌ ❌ ❌ ❌ Kawkab Mono 1852 ✅ ✅ ❌ ❌ ✅ ✅ ❌ Liberation Mono 2392 ✅ ✅ ❌ ✅ ❌ ❌ ❌ Lucida Console 667 ✅ ✅ ❌ ❌ ❌ ❌ ❌ Monaco 1104 ❌ ✅ ❌ ❌ ❌ ❌ ❌ Noto Mono 897 ✅ ✅ ❌ ❌ ❌ ❌ ❌ SF Mono Regular 1442 ✅ ✅ ❌ ❌ ❌ ✅ ❌ Source Code Pro 1585 ✅ ✅ ❌ ❌ ❌ ✅ ❌ Ubuntu Mono 1296 ✅ ✅ ❌ ❌ ❌ ❌ ❌ * Arial 4503 ✅ ✅ ✅ ✅ ✅ ❌ ❌ * Segoe UI 5344 ✅ ✅ ✅ ✅ ✅ ❌ ❌ * Times New Roman 4685 ✅ ✅ ✅ ✅ ✅ ❌ ❌ ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#5796