You can't use it for a terminal of course, and occasionally I find comments relying on monospace alignment. Other than that I see no downside to proportional fonts.
I use Input, which gives more room to special characters and is pretty nice overall: https://input.djr.com/
In code, you can always choose a style that discourages spatial alignment.
A proportional font in Emacs doesn't look right to my eye. My guess is that there are subtleties in the spacing between letters when a browser or a book publisher renders the text that Emacs does not know about.
Going to check that font out - thank you for the suggestion. :)
How do you vertically align by =
www = 1
iii = 2 www =
1
iii =
2
llanfair =
3Your suggestion is not only much worse by joining the columns, wasting more space, but it's also invalid in many syntaxes
So, now, how do you do that in three lines?
(www, iii, llanfair) =
(1, 2, 3)There are now some excellent mono faces that have broken from a lot of the traditional monospace design elements and that look and feel very much like proportional fonts. Quadraat sans mono, cartograph cf, triplicate, I've seen a good homebrew alegreya sans mono variant too. I don't know of any free ones, though inconsolata-g is well in that direction. But I expect more of this trend over the next few years.
The main reason I have felt no inclination to use proportional fonts when coding is that proportional fonts tend to be _very_ bad at distinguishing homoglyphs and that is the _last_ thing you want when trying to find the syntax error or undefined variable. Although I will admit that I haven't look very hard for a proportional font that's actually meant for programming.
The other reason is that sometimes I read code where someone has created an ASCII diagram in the comments, or have other structures or whitespace where vertical alignment matters. (This used to be highly popular in C, although it's viewed as a bad practice in "modern" times.)
I find monospace code very easy to read, so I guess at the end of the day, proportional fonts have a few disadvantages with no real upside. For me at least.
What's the distinction you're making here; are you saying Visual Basic isn't an IDE? Because AFAICS it very much is. (Or was, whatever. For its time, not even a bad IDE AFAICR.)
That is the problem, though. I edit with neovim inside of wezterm. The few times I've seen proportional used for code, I've thought that it looked interesting but realistically, I live in a vt100 universe and all things considered, it's really not that bad.
I'm interested in Atkinson Hyperlegible Mono as a programming font. I think monospaced is a defining characteristic of programming fonts. Basically, legibility is just different for programming and text (although I clearly read too much Verdana).
I do like quasi-proportional fonts like Iosevka Aile, where very wide or very narrow characters are allowed something more like their natural widths. I think, though I'm not sure, that the widths are worked out so that "Wl" (wide + narrow) is the same length as "xx" (2 x normal), for example. My experience using Iosevka Aile in Emacs is that things usually-but-not-always align like they're supposed to, which is a better trade-off than fully proportional fonts.
Have you ever gotten deep into how tab stops work in Word?
The deeper you go the more you realize fun things like Tables are as much "Tab Stops with Borders" as they are a separate concept to Word. The UI/UX of both reflect each other.
WYSIWYG word processors and design tools have lots of ways to align proportional fonts.
The big thing is that to do it well they need a ton of metadata: this "paragraph" has tab stops at 1", 2", 4", and 5.5", two of the stops are right-justified and one is centered. Word makes it surprisingly easy to edit all of that metadata easily and visually in the Ruler up top.
If you are sticking to plain text documents that are easy to source control, where and how do you store that metadata? How do you keep it from being a distraction from the code you want to write?
It's not an insurmountable problem, we could do some really cool things if we tried. One half-baked thought off the top of my head here is that I bet you could do something rather cool with easily embedded CSS Grid descriptions in nearby comments and Tab/Newline-delimited sequences auto-populating cells in the grid. Given how much of our code is HTML rendered anyway and how ubiquitous HTML renderers are in our digital lives, CSS Grid isn't the worst model to reuse for something like this, and might be something someone could build a prototype with relatively quickly.
For example, it could switch to a monospace font when a "fullscreen" program like vim switches to the other buffer.
Or maybe it could even render different fonts per line.
No, according to what seems to be the common definitions in this thread (dunno if that's the "official" one, or if such a thing even exists), they're better for readability, not legibility. And I agree with user bjourne's comment[1], "Typos feel way harder to spot in proportional fonts." What we need for coding is mainly legibility, not readability.
Well, at least usually, while writing and editing. For getting an overview of a large codebase, the increased readability of a proportional font might be better. (So what we really need may be a quick way to switch our editor or IDE between proportional and non-proportional fonts.)
designed for low-vision developers.
IBM's Plex Mono also a great contender for a "professional" programming font.
It's not free, but I love it. You can customize some variations too (like how zeroes look; I use the "invisible slash" look) and it has some support for terminal symbols and programming ligatures used by terminal tweaks like Powerline, etc.
I wrote a post about subsetting, in context of my personal site, here: https://www.naiyerasif.com/post/2024/06/27/how-i-subset-font...
It's ideal for 'wordy' languages such as C++ where a typical line length can often go over 150 characters, and then you don't have to scroll sideways.
Maple has many ligatures, I personally like the hypervisible [TODO]. Overall I find it very legible, even on small sizes, and pleasing also for writing e.g. in Markdown.
[1] https://font.subf.dev/en/ / https://github.com/subframe7536/maple-font
The ligatures for keywords is clever. I appreciate those niceties. Like rendering small gaps in large numbers, eg '1000000' looks like '1 000 000'.
IIRC Berkeley or Monospaced have a few neat tricks like that.
But in any case, the correct font for coding is Cascadia Code. I don’t know why more Linux people don’t use it. Just because it’s from Microsoft?
May be worded differently, like: it doesn't support ligatures, but it doesn't affect me because I don't use them.
> As software developers, we always strive for better tools but rarely consider a font as such.
We must travel in different circles, it feels to me like half the developers on HN, blogs, and social media are WAY more concerned with the aesthetic of their development environment than actually getting any real work done with it!
About a half of the article is about these "mirror image glyphs". Why would they be a problem for the proclaimed purpose of character distinction? Has anyone ever mixed up "b" and "q"?
I learned about mirror glyphs through a document linked in the Accessible Perceptual Contrast Algorithm (APCA) website. For context, APCA is the system that aims to supplant current color calculation methods in the Web Content Accessibility Guidelines (WCAG).
https://www.researchgate.net/publication/338149302_Evaluatin...
The real reason it’s important is that for some the glyphs are too much alike and can be confused. The brain may rotate of flips things sometimes.
Either that, or I made the correct slash and my teacher interpreted it incorrectly!
Unfortunately, I found "Atkinson Hyperlegible Mono" (IDE/Terminal) to be a tad stunted for my liking. I wear glasses but not that bad and I like to use my computer without glasses. I personally like "Monaco" with a tad larger font-size. The other reason I try to stick to more common fonts and pick one of the better of them is to be able to use any IDE (helping/discussing with team members) and not feeling uncomfortable without "my favorite font."
Again, very personal, but I tried "Atkinson Hyperlegible" for the website for about a month or so and I found it to be neither modern, nor professional nor vintage/classic but more like the website warming up to the reader/visiter, “Hey, are you OK? Finding it hard to read, I'm going to make some scientific fixes to help you read!”
Available on Homebrew: https://formulae.brew.sh/cask/font-atkinson-hyperlegible#def...
Only problem is that it doesn’t have all the nerd font glyphs so it can’t handle the nice oh-my-zsh themes well, like the powerline-10k theme. I still use it despite that though.
Good. That's a feature, not a bug. I want -> to render as a dash and a greater than sign. Not an arrow. I can't even articulate why, other than a deep seated distrust of magic.
config.harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' }Which editors on which OS's provide a toggle for that?
And then you run Vim or Emacs in said terminal...
Sublime Text: Set "font_options" to "dlig". There are other settings to choose which character tables are allowed to use ligatures or not.
Visual Studio Code: Set "editor.fontLigatures" to "true". You can also put CSS font features to choose which ligatures you want to enable.
And ligatures are a must for me because I find that symbols don't line up nicely in a ton of fonts and it annoys me a lot.
There is also something to be said for each character being the instructions for how you type it. How to type “->”? Press - then >. With ligatures, that goes out the window, and at least for me, I have to quickly look up in my memory how to type ≥ or ⟹.
That said I do very much like Commit Mono’s “smart kerning”, where characters are adjusted slightly based on the characters surrounding them. I guess you could call it a soft version of ligatures. For instance, when an m is between two i‘s, the i‘s get pushed away a tad to give the m a bit more room to breathe. Similarly, when you type an ellipses (...), the dots get pushed ever so slightly closer together than they would be naively.
Legibility refers to how easily individual characters can be identified. But good readability depends on how easily your brain can recognize whole words—through pattern recognition of word shapes.
When characters are too similar in shape and size, it becomes harder to distinguish the unique shape of each word, which reduces readability (which often happens with these highly legible fonts) — even if each individual letter is technically more clear.
For example, if you grew up in an English-speaking country, your computer likely defaulted to Arial or Helvetica as its sans-serif font. Over time, your brain became familiar with how words looked in those typefaces—their proportions and shapes.
Because fonts like Inter and SF share similar proportions, your brain finds them easier to process, which makes them feel more readable.
I don't think anything is more readable to me. It hit the sweet spot of being condensed enough for easy reading but still with highly legible individual characters too.
I have always wished someone could have made a scalable version to bring it into the future of high resolution displays.
I even found a ~30 year old screenshot with some xterms in it, so I could verify that my memory isn't just distorted. The glyphs are different. But, the screenshot also feels a little foreign to me, so my memory may also be distorted ;-)
At this point, I keep coming back to Noto Sans Mono Medium as my fallback.
It's kind of pleasing shapes at 12 point for me, but too small on my screens... incrementally scaling up to 13,14,15 seems to degrade the quality.
Readable fonts are for longer form texts where the flow of reading is more important than correctly identfying individual characters.
Both have valid use cases and there are fonts who mange to do both pretty well.
I am thinking about the regular one on text, not mono on code.
And then there are fonts that I don't like aesthetically and generally avoid, but come to the rescue in the wee hours of the morning when you really have to get something done and your eyes have gone blurry.
https://github.com/madmalik/mononoki
That said, the differences between 0 and 8, while better than my previous favorites, still aren't as stark as I'd like them to be.
Why not use a monospaced serif font in the first place? I get that they don't seem to be common, but maybe they should be.
On high-DPI screens, like the one I'm currently using, serif monospace fonts can also look really good. For example, I'm typing in Latin Modern Mono (based on TeX's default typewriter font) in this text box.
Also, it's great that it's available as a Nerd variant. It makes it super easy to install on Linux with Embellish.
Can I ask why?
So it was a genuine curiosity of me. Sorry if it sounded rude or accusatory or similar.
Yeah, certainly.
> It's quite interesting to find someone who can use the same one over and over.
I like to solve some problems once, and once I solve them sufficiently, I don't prefer to touch them, so I can focus on other things. It's not that I don't look for better solutions, but I don't actively seek them.
Same is true for tools. I prefer to master a single tool over the years to jump from tool to tool.
I'm not that young, so using it makes my computer a little cozier and friendlier, without sacrificing any readability or font quality. =D
If you wanna take a look, it's at https://usgraphics.com/products/berkeley-mono
> Fira Code uses uniform length for +, =, and -. - and _ share similar length. The /\ characters join together and render smaller compared to the other fonts.
This "joining" is a ligatures thing, I'm almost certain, at least for `<>`. I can't for the life of me get anything on macOS to render `/\` as joined, though. Stumped. I've no preference either way, it's just weird to see a familiar font rendered so strangely. Maybe it's a Windows font rendering thing ?
A very fair comparison, though I'd argue legibility isn't always worthwhile; the MICR (?) fonts on checks are quite legible (perhaps machine-legible) but too weird to use.
also, TIL IntelliJ bundles Fira Code for quite some time now
- What do you mean by squished?
- What device and browser are you using?
- Are all images affected or just certain ones?
A screenshot would help a lot if possible.
Here's an interesting take on the two: https://neil.computer/notes/berkeley-mono-december-update/
See if you can figure why I linked this one.
---
More about Andalé: https://en.wikipedia.org/wiki/Andalé_Mono
This conversation may still be going on 20 years from now: https://nedbatchelder.com/blog/200602/monospace_fonts_compar...
Nice we have more choice since this capture in 2006: https://www.donationcoder.com/forum/?topic=2499.0
My brain thinks these fonts are bizarre. Not only that, the wildly different antialiasing schemes from windows to mac to browser would trigger double-bizarre-ness since I would never be looking at exactly the same antialiased text.
When I set Segoe UI for the first time, I instantly knew I could stop experimenting. I am not being facetious.
I also have to switch between different font rendering scenarios daily, it’s such a pain. If I could use vscode exclusively all would be well, but I’m stuck with windows font rendering in Rider usually. Segoe is one of the few fonts that looks great.
English for "crossbar" or "a crossbar stroke".
maybebyte•6mo ago
The visual comparisons use examples from an accessibility paper on homoglyphs and mirror glyphs. I chose JetBrains Mono and Fira Code as a baseline, since many developers use these fonts and find them familiar.
While Atkinson Hyperlegible Mono excels at character distinction, nothing is perfect. I detail trade-offs in the "Caveats" section, below the installation instructions.
I'm curious to hear others' experiences and thoughts. I'm fascinated by what role font choice plays in legibility and accessibility, but the research is relatively sparse in this area.
esafak•6mo ago
My impression is that while legible it is too fat. You'll notice that Fira Code and JetBrains Mono are similarly wide -- and narrower than Atkinson Hyperlegible Mono.
maybebyte•6mo ago
https://github.com/googlefonts/atkinson-hyperlegible-next-mo...
I'd recommend getting it from there rather than the Braille Institute's website since they require an email and EULA, but here's the other download link anyway.
https://www.brailleinstitute.org/freefont/
Also, Nerd Fonts added Atkinson Hyperlegible Mono in their v3.4.0 release.
https://github.com/ryanoasis/nerd-fonts/releases/tag/v3.4.0
With Nerd Fonts, I'd recommend downloading both and setting up a fallback system through fontconfig though. Unfortunately, some versions (Nerd Fonts, official download) are still missing the backtick/grave glyph.
https://github.com/googlefonts/atkinson-hyperlegible-next-mo...
tracker1•6mo ago
alienbaby•6mo ago
jasperry•6mo ago
maybebyte•6mo ago
For what it's worth, I generated the comparison images with Harfbuzz and ImageMagick, so in theory I could publish the script and then anyone could make their own comparison images. Fair warning: it's a quick and dirty shell script, written only to get the job done.
wentin•6mo ago
maybebyte•6mo ago
dijit•6mo ago
wentin•6mo ago
wentin•6mo ago
illiac786•6mo ago
wentin•6mo ago
maybebyte•6mo ago
ta8645•6mo ago
This particular font seems to have very inconsistent kerning. The "isMultipleOf" identifier pushes the s & M & u and e & O way too tightly together, and the remaining letters seem inconsistently spaced as well.
jherdman•6mo ago
forsakenharmony•6mo ago
tony2016•6mo ago
ninetyninenine•6mo ago
kybernetikos•6mo ago
ninetyninenine•6mo ago
Additionally the legibility metric used by the site isn’t even quantitative. It’s qualitative and opinionated so it’s not like there was an objective measure that says Atkinson is in actuality more hyperlegible… the hyper legibility is an opinion.