This article examines some of the monospaced TrueType fonts suitable for use in an xterm window, and why you might want to use them.
Some X terminal programs now permit using Xft (TrueType) fonts instead of the traditional X bitmap fonts (see my comparison of X terms for more details of which ones). The main reason for wanting to do this is because TTFs generally look better at medium and large sizes. I was a devotee of the standard 6×13 ‘fixed’ X bitmap font, until an eye disease forced me to switch to something bigger, and I found I didn’t get on with any of the standard X bitmap fonts at larger sizes. At 8pt you can’t beat a bitmap font which was designed at that size, but at 12pt or above, when combined with subpixel anti-aliasing on an LCD screen, TTF fonts look much better, and of course there are many more to choose from.
Getting a list of fonts to try
If you have fontconfig, here’s how to determine which monospaced scalable fonts you have installed, ie those that are suitable for terminal use:
I decided it was time to go through all of the monospaced TTF fonts on my system and figure out which was the best for terminal use. Of course these are just my opinions, and your mileage will certainly vary, not least depending on whether you have an LCD or CRT screen. If you have an LCD, make sure it is set up properly: the edges of characters should be sharp, albeit differently coloured — if they’re blurred, you may not be using the right pixel order (RGB versus BGR). See the diagram about halfway down this page to help determine whether this is the case.
To assess the fonts, I used the following scriptoid to load an xterm for each font and display the same bit of code on each one. Then I peered at them until my vision went squiffy.
sort|tr ‘\n’ ‘\0’|\
xargs -0r -iFONT echo xterm -T “FONT” -fa “FONT” \
-fs 10 -e vim -R -X ~/src/xex/xex \& >do_xterms; \
I have only considered how these fonts look when rendered in white or grey on a black background — the standard programmer’s terminal. If you use dark text on light backgrounds you may have a completely different experience.
I have also only looked at monospaced fonts. gnome-terminal makes a good stab at allowing proportional fonts by kerning them to a monospace grid, but this just doesn’t make any sense to me as you will inevitably get overlaps or excessive space around some characters. Might as well use a font designed for the purpose, and I do wish gnome-terminal at least had an option in its font selection dialog to only show monospaced fonts…
Anyway, on to the fonts.
If you run a poll for the best terminal font, this one will win, but probably only because it’s an MS core font so is pretty ubiquitous… and its sole competition in the core fonts is Courier New, which is no contest. That said, Andale Mono is a very well designed font, easy on the eye and with easy character recognition. It also renders superbly at most scales, though does get patchy at 10pt and below. I personally feel it’s best at 14 or above, and I use it at 14 regularly, particularly because it remains slender while BVSM gets bold at that size.
Bitstream Vera Sans Mono
This is another superb font, indeed the whole Vera family is really good. This one particularly excels at 10-12pt, but suddenly gets very bold at larger sizes which makes it less pleasant than Andale at 14.
Very square, pretty nasty to read for more than 10 seconds. Might find some use as a design font, but not here.
Lookswise, it’s along similar lines to BVSM, with perhaps a touch more style and individuality. More importantly it’s condensed, occupying about 15% less width than BVSM and a little less height for a given point size; or alternatively, a 12pt LettrGoth window is the same width as a 10pt BVSM window. You still can’t quite fit two abreast in a 1280×1024 screen though. 🙁 It renders very well indeed at 14 or below, or 17 or above — slightly bolder in the latter, but still pleasant. The transition between those sizes is less good.
Long ago this was my favourite X font… but nowadays it just can’t compete. It seems very wide and the lines are packed close together, giving a crowded feel. It also looks rather angular compared to more modern fonts. Oddly I think the bitmap versions of this font are better, so perhaps it’s just a poor conversion to TTF.
This is quite simply tiny compared to any of the other fonts here, for a given point size. The vertical size is slightly reduced, but the horizontal size is almost halved. This is a godsend… far too many terminal fonts are unnecessarily wide; the narrower you can get the chars while retaining readability, the larger point size you can select while still being able to fit two terminals side-by-side on your screen. Unfortunately, although the font itself looks very nice and readable, it doesn’t render well at any scale, perhaps simply because it’s too narrow to make effective use of subpixel rendering. Above 14pt it suddenly becomes bolder, and thus overpowering. Below this it’s just not really usable.
One of my favourites. Has a similar “feel” to BVSM, but is much more aesthetic and curvaceous, and has better separation between characters (each character is smaller within its cell, but the cells are the same size as BVSM.) My main complaint is that the c is curved so much it’s almost an o.
OCR A Extended
As you might expect, this is rather more pleasant for a computer to read than a human. It’s quite square and there’s a lot of horizontal space between chars. I have a soft spot for using OCR fonts in graphic design, but I wouldn’t use them in a terminal.
Orator10 BT / Orator15 BT
Seems to be a problem with Orator15 at anything other than 15pt, the glyphs overlap and get clipped so it’s unusable. But at 15 it’s quite aesthetic (bar the odd bit of clipping, now I look at it) – the ratio of x-height to cap height is large, so the chars seem big in their cells, as if they’ve been inflated to fit. This gives a “friendly”, almost youthful (but not childish) feel. But there’s much more space within each char than between them, which makes text seem denser. If the kerning could be increased this might be quite appealing to some people. Orator10, as well as scaling properly, doesn’t seem quite so inflated as Orator15, and has better inter-character spacing. But neither of them seem like they will be easy on the eye for long periods, and the descenders are just too short – there’s almost no difference between a and q.
Square, and has a strange elevated $. Not useful.
Monospaced Serif fonts
As a rule I don’t like serif fonts as much as sans ones, and that is certainly the case for terminal use where serifs just interfere with readability in my view. But here are the serifed ones anyway.
CentSchbook Mono BT
This is rather too flouncy for me — just look at those dollar signs compared to Courier or Prestige. I wouldn’t use this for any dense text, let alone a terminal.
Very similar to Courier 10 Pitch, but doesn’t render quite so well on my screen and the spacing is not so good.
Courier 10 Pitch
This is the best of the Couriers by a mile. Well rendered with no dark patches, and carefully spaced. If I had to use Courier, I’d use this one. But even this one aligns the > too high relative to the -, which makes perl’s -> operator look silly. Yes, this matters.
Like Courier, but somehow uglier. Best avoided. Plus, it fixes the vertical alignment of -> which is wrong in the other couriers, only to get => wrong instead. How hard can it be?
Nimbus Mono L
Yuck. It’s like Courier, but vertically squashed. Very indistinct. Bad.
A serifed monospace font, not dissimilar to CentSchBook Mono. Lots of dark patches at 10pt.
This is like a slightly posher version of Courier – check out those semicolons! I think it sacrifices a little clarity to gain a little aesthetically, while remaining very usable. If you like serifed monospace fonts it’s worth a look.
I’ve excluded the following, either because they don’t have a complete character set (eg MICR mainly contains digits), or they’re symbolic/dingbat fonts.
- MICR 010 BT
- MICR 012 BT
- MICR 013 BT
Fonts that are missing
Many people seem to have Luxi Mono, but I don’t.
FreeMono didn’t show up on the list produced by the fc-list command above, although it does appear on just plain ‘fc-list’, so I’m guessing it’s not marked properly as a monospace font. This may or may not explain why it is rendered atrociously.