JetBrains Mono Typeface
jetbrains.com
jetbrains.com
I guess my brain likes having distinct continuous symbols to represent different operations - it reminds of of math in school & university. And I don't see a problem during editing, knowing they're made of multiple symbols.
And yes - I feel that I do struggle much more without them.
Completely out-of-the-blue, unproven guess - my mind is used to learning new symbols quick, from all the gaming I've done. And it's much easier to learn a new symbol that's cohesive, continuous & unique, rather than having to read disjoint characters and figure out a different meaning for them.
I wouldn't say its harder to go back, but it does make me do a double take. Overall I would say the effect is quite minor and I'm just fine without the ligatures, but given the option I would enable / prefer them.
Now when they are turned off I feel like something is missing, and scramble to turn then on again. For whatever reason my brain feels more comfortable with them.
if you see the <= "less than or equal to" ligature and hit backspace once it will become <. it's very intuitive. this is how emoji operate to combine a face with a skin tone - it is two characters merged into one.
dunno why so many people see ligatures and clutch their pearls like it is some kind of rock and roll devil symbol.
However, most programming languages really just have a few symbols: arithmetic operators (+, -, /, *), comparison operators (<, >, <=, >=), and logical operators (&&, ||, !). C also has bitwise operators (~, &, |). It's already easy enough to distinguish these without ligatures, so the benefit is negligible here, IMO. I prefer to go without ligatures, because I have no trouble remembering or distinguishing them, and, like someone else mentioned, I find ligatures in a monospace font kind of weird (how they morph into a two column character when you write them, and turn back to a one column character when you delete half of it).
A ligature happening is kind of a "syntax affordance" saying that the code is correct, and it indeed says "!=" and not "! =". It kind of helps my brain elevate the code from "sequences of characters" to "serialised syntax tree".
The fact that the "not equals" operator is the exclamation mark followed by an equals sign is purely an artefact of the practicality of keyboard input. Ligatures are a simple way of stepping away from the raw text and into the meaning of things, just like syntax highlighting helps transform "words" into "tokens" on our brains, or rainbow parens help us visualise the hierarchy of the language in question.
(Though I find rainbow parens a bit too colorful and distracting, so I don't use them in practice, I like the idea behind them)
It is the same idea that proponents of visual coding advocate for, but text as a medium is much better because of how compact we are able to make it without feeling cramped.
It can be seen in the choice of tooling, some people really go ham with multi-cursor editing, find-and-replace patterns, "select next word", editor macros, and other text manipulation based tools. While others (myself included) prefer a more content-aware tool like JetBrains' "rename field", "extract method", "widen selection" (select AST parent's text span), etc.
Which is not to say that either group is more correct or efficient, it's just a pattern I see on people.
As I said before, it certainly affects the choice of tooling, and therefore this property of programmers often places them in either side of the eternal "IDE vs text editor" wars. Which is distinct from the GUI vs TUI wars, but in practice most IDEs are somehow graphical. Structure-ers generally prefer tools to be thorough even if they're slow, while Text-ers prefers tools to be as fast as possible so they can be thorough themselves.
I don't think there is really that much of a difference in code style, the general pains of weirdly styled code are often universal regardless of how you look at it. (Text-ers might dislike identifiers with multiple words because it takes longer to navigate through, while Structure-ers might dislike having complicated expressions for the same reason.)
I guess the main impact I see is from pair programming, it is supremely distracting to watch someone with a different mental model of the code do things in what appears to be this "inefficient" way.
I’m also someone that likes getting the most out of a basic set of tools or features. A less is more kinda person.
Although I’m old skool Mac OS so I need some kind of GUI.
I find ligatures more interesting for the slightly more "exotic" syntaxes like arrows → instead of ->, ⇒ instead of =>, etc. Most of them are incredibly similar to their non-ligature counterparts, and even ones like != don't seem to cause much trouble.
I don't seem to have any trouble switching between ligatures in the IDE and no ligatures on github. I haven't really had to think of them.
I often work with files (both documents and code) where Unicode input is permitted, and it can then be important to know what exactly is written in the file. Fancy ligatures make this ambiguous.
I would also advise against ligatures in terminals, as it can mess up some text-based interfaces.
I guess looking at font that doesn't support ligatures does become a little bit harder, but I can't imagine the switch being too time consuming.
I've been using JetBrains Mono for years now. It's great.
I do not like ligatures either, yet this is my favorite monospaced font. I use JetBrainsMonoNL in all the places.
Most fonts with ligatures can be used without them anyway, making the whole thing moot
e.g if you want the FiraCode improvements[1] over FiraMono without the ligatures. Without editor support, you would have to build it yourself since they don't distribute a NL version.
Cartograph CF - The one I've been using for code for years. Very readable, almost "comic mono"-like choices of some of the lower case glyphs but in a good way. All the character is in the italic which you will either love or hate.
Quadraat sans mono - The entire quadraat family is a collection of masterpieces imo, but are generally too distinctive to be appropriate for most public-facing work. But it's your computer so who cares. I use the mono sans one for my terminal. The lowercase f seems so out of place there but you learn to love it.
Alegreya sans - Not a mono font, but it almost is so if you've ever flirted with proportional fonts for code this is a fun one to try. There is a lot of careful line width variation that gives a lot of the appearance and readability advantages of serifs but keeps most of the visual coherence of sans.
I like all of these because they feel more like normal fonts rather than code fonts. They have careful variation that adds character and improves readability for me. I've switched to an almost-no-color code theme that uses font weight instead, and the details like this become more important that way.
And then only kind of related but if you want to use unusual fonts in your terminal but you have a complex prompt setup, install font forge and learn to use something like https://github.com/ryanoasis/nerd-fonts/blob/master/font-pat... to patch in the extra characters. This can also solve your "I love this font but want a dotted zero" type problems as well. Small skill investment for a small return over a long period of time. You'll always be using fonts.
Victor Mono[0] is another great monospace font.
Font looks awesome otherwise.
Ligatures are optional, so you don’t have to let the existence of those glyphs stop you from using an otherwise-better(-for-you) typeface. Additionally, in VSCode at least, there are extensions that give you even more contextual control.
Don’t ask why. It just feels right lol.
What do most people use?
There's also the Cousine version, which is more or less the same, both are also metrically compatible with Courier New: https://en.wikipedia.org/wiki/Croscore_fonts
After that, I rather enjoy PT Mono, except that the full stop (dot) symbol feels too small, I actually use the PT Fonts for most of my personal webpages because they're decently readable and not too stylized, nor too boring: https://en.wikipedia.org/wiki/PT_Fonts
But frankly, there's a lot of good fonts out there and it's entirely a matter of taste. Some like ligatures, some don't. Some like monospaced fonts, others like proportional ones.
It's also really cool when the OS itself lets you set your font preferences for most applications that you're going to use, I catch myself wishing it'd be easy to do that for all of the JetBrains IDEs and other dev tools at the same time, though. Maybe a simple GUI program or a script that'd let me set those particular preferences for all of my editors in one go.
> q9g (C iI1lL 0Oo8
For Kitty, just install the Symbols Nerd Font (it's a fontset that contains only nerd symbols).
For Wezterm, you don't need to do anything, the glyphs are already built in.
There are non-ligature and non-monospace (for icons only - everything else is monospace) versions.
Great alternative. A side-grade, maybe. Thanks!
Any other fonts with smart kerning?
Fortunately, someone has created them!
But I don’t really like it in terminals - I use SF Mono there.
Personally it is what I use, I like its aesthetic but I also dislike ligatures for coding.
Nerd Fonts has a version of it too if you need the glyphs.
Also it has ligatures too which I love.
I’m a Mac user so….
Doesn't apply to everyone but I'm assuming some familiar with the JetBrains font will also be using some other things JetBrains makes.