vercel / geist-font

https://vercel.com/font
SIL Open Font License 1.1
2.36k stars 64 forks source link

Capital 'o' and zero characters are impossible to tell which is which. #23

Closed LeviticusNelson closed 11 months ago

LeviticusNelson commented 11 months ago

Is there a design choice to why these two are essentially the same design? As a developer using geist mono, I feel like there should be a different design for the zero char to tell the difference without a second look.

I provided what the two characters look like side-to-side:

Screenshot 2023-10-28 at 12 40 59 PM
christianlegge commented 11 months ago

Thanks for creating this issue; I was considering trying out this font and now I don't have to bother.

adamdotjs commented 11 months ago

It doesn't seem to be mentioned anywhere, but there is a stylistic set for the zero character (and others). If your IDE supports them, you can enable it with the ss09 flag.

image

LeviticusNelson commented 11 months ago

Hi @adamdotjs, for wezterm config the assume_emoji_presentation = true option set the character to zero.ss09 somehow. I feel like that shouldn't happen but I still think that the zero.ss09 character should be default. Update 1: It looks like wezterm is not even using the geist mono font, but falling back to jetbrains mono 😔 Update 2: I figured out how to make it work for wezterm:

config.font = wezterm.font_with_fallback({
    { family = "Geist Mono", weight = "Medium", harfbuzz_features = { "ss09=1" } },
})
skrewde commented 11 months ago

This is a pretty serious issue, hope it gets addressed soon.

emonadeo commented 11 months ago

It might also be a good idea to use the "zero" feature tag instead of the arbitrary stylistic set "ss09".

This would also enable it to be activated in CSS like this:

font-variant-numeric: slashed-zero;

instead of this:

font-feature-settings: "ss09";
daiyam commented 11 months ago

I think the slashed-zero should be the default zero. In the current state, the zero and O are too much similar.

JohnPhamous commented 11 months ago

Fixed in #46 and available in the 1.0.1 release on GitHub and on npm.