tonsky / FiraCode

Free monospaced font with programming ligatures
SIL Open Font License 1.1
77.1k stars 3.1k forks source link

Fine-tuned letter pairs - a mistake? #1245

Open davidpiano opened 3 years ago

davidpiano commented 3 years ago

There's a picture on this site showing the idea behind the fine-tuned letter pairs. In my humble-but-strong opinion, all of the pairs shown in green in that picture (i.e. the "after" examples that have been tuned) are regressions, and should be put back the way they were - the red versions are far better. Horizontal strokes being at different heights on different letters IS the fine-tuning that makes everything more readable, and putting them all at the same height is actually undoing the fine-tuning that was already there in the original. (I realize this would ruin the Fl ligature, and to me that could only be a bonus - that Fl ligature might be the only truly ugly thing you've added to the font.)

Imagine if you had looked at the four characters | I 1 l and thought "This is a terrible mess, they're so inconsistent - we must make them all look exactly the same!" 😄 But you didn't do that, you allowed them to stay different, because they should be different. But you took away some differences between other characters, when there was no good reason for doing that. Making things inconsistent in the right way is exactly what makes it all work, not a disadvantage.

To be clear, I do think almost everything you've done with Fira Code is useful and well done. I use it every day, and I like it better than other comparable fonts. I just wish you hadn't mistakenly removed one of the really helpful features of the original, and I hope it's not too disruptive to put it back.

EDIT: I also want to be clear that it's only the shapes and measurements of letters I'm talking about - for example, the tuned punctuation is a great idea and works fine.

RubenVerg commented 3 years ago

What distinguishes an i from a f is that the i has a dot and the f a hook, not the height at which there is an horizontal line in either of them, that varies between fonts. Making those all the same makes it easier to notice the dot or the hook, I think.

Also you might want to try onums for number readability, those work awesome for me. Don't pipes also take up the full height, so they connect to others in the same column?

davidpiano commented 3 years ago

There's a law (in most languages) that every i has a dot and every f has a hook, but no law anywhere that "dot" vs "hook" must be the only way to distinguish an i from an f. You're using the same logic as forcing all your friends to get exactly the same haircut so you can concentrate on distinguishing them by their eye colours only. 😄 Friends having different haircuts is just fine, and having additional distinguishing details on letters is just fine too.

If people had to use these letters for some kind of box-drawing, then eliminating all distinctive details would be right. But there's already a good set of box-drawing characters, so we can afford to let the letters be letters.

And my example with the | I 1 l characters is not off-topic, it really is the same issue - after being so careful to make sure there are distinctive details to those characters, it's counterproductive to go around erasing the carefully-tuned distinctive details from the other characters. The top of the 1 and the top of the I are not exactly the same height, and they really shouldn't be "tuned" to be the same; in the original Fira the bar of the f and the top serif of the i are not exactly the same height either, and so-called "tuning" them has caused the same kind of problem - they're harder to read because of forced uniformity.

If you stare at two letters in large size for a long time, the uneven heights do look wrong. But staring at two large letters is not the goal; the goal is to read, and when you're reading instead of staring, the original uneven version is clearer, and the mistakenly "tuned" version is more blurry.

Something I meant to say already in the OP but kept forgetting: A lazy designer would have made all heights the same in the first place. It took some planning and some thinking to make them different, to decide how much different, and so on. It's not an accident or a stupid mistake that these details are different - just the opposite.

davidpiano commented 3 years ago

When I talked about the | I 1 l characters, I meant they're already good! I'm sorry, I think I said it in a stupid way that made it sound like I was criticizing those too.

I'm saying those characters are already good because you were careful to keep the different little details of each of them.

And I'm saying please put back the different little details of all the other characters, instead of forcing them to match in ways that they don't need to match.

wopian commented 3 years ago

Many fonts have the horizontal strokes at the same height—a quick look at Google Fonts shows at least half of the monospace typefaces being a consistent height. In my opinion, I find those that do this to be a more readable typeface, so it's mostly a matter of opinion for which is more readable.

Perhaps it should be added as a stylistic set so that users can disable it if desired.

tonsky commented 3 years ago

Hey @davidpiano, if you are talking about Fl Tl, I agree. I realized that when I was drawing the illustration, that this might not be a good idea. But letter pairs were already in, so I decided to leave them. I am considering removing them in the next versions. Thanks for reminding!

capiet commented 2 years ago

I like the fine-tuned letters for example in Jetbrains Mono and also tried to use Fira Code in VS Code. I don't know why but this feature doesn't work properly there. Also, I tried to input some example text using Google Fonts and the letters pairs weren't fine-tuned there too. How does it work properly? I've attached the image from Google Fonts as an example. image

alexeyten commented 2 years ago

Have you turned on font ligatures in VSCode?

Probably Google fonts version is “optimized” and don't have this tuning.

image

image

capiet commented 2 years ago

@alexeyten thanks for your help! I didn't expect that the ligatures should be turned on. I thought that it's default behaviour of the font. It works in VS Code, but Windows Terminal doesn't support the ligatures, so I'm going to switch back on Jetbrains Mono.

alexeyten commented 2 years ago

Windows terminal (not cmd.exe) does support ligatures

capiet commented 2 years ago

@alexeyten Thanks for your response again. I have tried and the Windows Terminal actually supports the font ligatures. It's a big surpise for me, because I have tried the fonts with ligatures a few times.