microsoft / microsoft/terminal

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

Open
#4,130 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Area-Rendering Issue-Bug Priority-2 Product-Terminal
Dominant language
C++
Stars
105k
Forks
9.6k
Avg merge
3d 17h
Merged PRs (30d)
29

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue by printing Hebrew in Windows Terminal with Cascadia Code or Consolas, then inspect the font-fallback implementation and its handling of missing glyphs. Confirm the fallback sequence and verify that Hebrew uses an appropriate monospaced fallback instead of Segoe UI; also check the existing box-drawing fallback behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.