microsoft / terminal

The new Windows Terminal and the original Windows console host, all in the same place!
MIT License
95.95k stars 8.35k forks source link

Glyphs '…' and '⇕' overlap proceeding text in some fonts #15680

Closed djdv closed 1 year ago

djdv commented 1 year ago

Windows Terminal version

2f0d3dc17a09493a17ef45551deea864914854c2

Windows build number

10.0.25393.0

Other Software

Powershell Core v7.3.5

Steps to reproduce

Use the symbols '…' or '⇕' with text proceeding it. Like "…abc⇕abc" The 'a's will be overlapped by the symbols.

I'm specifically using the Iosevka font, but other fonts I've tried have the same overlapping problem. Where some do not. I think this only occurs in proportion fonts, but I'm not exactly sure the common link between the fonts that don't render this correctly. All monospace fonts seem to render as expected.

Expected Behavior

Non-overlapping characters. I'm pretty sure the ellipses glyph was spaced correctly at some point, but is no longer. Unfortunately, I'm not sure the exact commit when this changed. It was some time ago but I haven't reported it until now.

Using the same fonts in something like Notepad doesn't cause the rendering problem so I assume it has to do with the terminal render engine and not the fonts themselves. image

extra context: I use the ellipses as a prefix when the cwd is too long (…AppData\Local\Temp). And the is used within posh-git.

Actual Behavior

Characters after the glyphs get overstruck. image

lhecker commented 1 year ago

That behavior is correct, and it's always been something like that. Are you sure you're using the right Iosevka variant, the same one you used to use?

This is Iosevka in the old text renderer (note the incorrect cursor position): image

And this is the now fixed text renderer, where the Terminal determines the spacing between glyphs and not the font: image

This is why you need to use "Iosevka Fixed" (no ligatures) or "Iosevka Term" (ligatures): image

djdv commented 1 year ago

Thanks for that. I do remember encountering that cursor issue. I think with '⚠️' in particular (and/or some other symbols). Switching to the "Iosevka Term" variant does indeed render as expected.

I've bounced between PragmataPro and the standard Iosevka as the renderer has changed, but not any of their variants, until now. On a personal note, I must have avoided the "Term" variant due to the smaller symbols (I have poor eyesight so I bias against that :-)