mrxvt is my favorite
terminal-emulator to use on Lucifer
because it is fast and supports multiple tabs. I like to pair it with
the bitmapped font
console8x16 from Konsole because that font looks
good in my opinion while giving me the nostalgia kick of using an OldSkool PC font.
Unfortunately, the two do not work well together when it comes to displaying box-drawing
characters. Until now.
mrxvt is quite fast, especially when paired with a bitmapped font – try
repeatedly executing something like
time cat /usr/man/man1/xterm.1
in mrxvt (of course,after warming up the file-cache to make it a fair
comparison) and then in some other terminal. It does not depend on heavy
GUI-toolkits like Gtk+ or Qt and only uses X for rendering content. On old
hardware like Lucifer, it provides a snappy UX compared to other
terminal-emulators and that is why I prefer it. Sadly it has not been actively
developed for many years and lacks some features like proper UTF-8 support,
which is a deal-breaker for many folks (though not for me).
I really like the glyphs on
console8x16 and it is my favorite
bitmapped font to use on older hardware with a lower display-resolution. Lars
Doelle, the creator of Konsole, used the old VGA BIOS font as a base (the same
as that used by the Linux VGA console or the Linux Framebuffer with the VGA8x16
font) and then extended it beyond code-point 255 to support various characters.
It was used in Konsole till at least KDE 3.5.10.
Sadly it has become quite hard to find it these days as most people have moved
on from using bitmapped fonts to using proportional fonts. So I preserved a
copy of the source for the font here.
Recently however, I was once again able to find a copy of the source preserved
in the Git-repository of the Trinity
Desktop Environment (KDE 3.5 lives!) here.
I was also able to find a copy in the source-archives for kdebase-3.5.10
as the file
these copies of the file should have an MD5-checksum of
console8x16 does provide the box-drawing characters and both
Konsole and xterm are able to correctly render them while using
console8x16 as a font, mrxvt is not. The reason is that when asked
to switch to the VT100 Alternate
Character Set (ACS) by a terminal-based application via the ANSI escape-sequence
ESC ( 0 in order to render the box-drawing characters and then
given the characters corresponding to the lines, mrxvt simply tries to load the
glyph at code-point
<ASCII-code> - 0x5f for each such
character, which is normally reserved for various control-characters. Since
console8x16 does not provide glyphs for these code-points, mrxvt is
not able to render lines and the display gets messed up. (xterm uses a more
sophisticated fallback-mechanism in such cases in order to correctly render
For example, here is how mrxvt renders the output of the command
--msgbox 'Hello World!' 0 0 when using
Here is a small shell-script that lets you check the glyphs from ACS as rendered by your terminal-emulator:
#!/usr/bin/env bash # Check the rendering of box-drawing characters on a terminal: # https://en.wikipedia.org/wiki/Box-drawing_character#Unix,_CP/M,_BBS for n in $(seq 95 126); do x=$(printf "%x" $n) y=$(expr $n - 95) printf "%03d (0x$x) -> %02d (0x%02x): \x$x -> \x1b(0\x$x\x1b(B\n" $n $y $y done
When I run this script, this is what I see with mrxvt using the
Since BDF is
a text-based file-format, I was able to edit the source for
console8x16 to insert the right glyphs at the code-points expected
by mrxvt, so that the latter could correctly render the box-drawing characters.
You can find the source for the updated font here.
You can compile it to a format that can be used by X by running:
bdftopcf -t -o mconsole8x16.pcf mconsole8x16.bdf && \ gzip --best mconsole8x16.pcf
Copy it over to a directory that is in the font-path of your X server (do not
forget to run
mkfontdir on the directory after copying over the
I did not bother to populate all the characters in the ACS, so this is what I
now see when I run the script above in mrxvt using the modified
However, this limited fix-up is good enough to render the box-drawing characters in most applications. For example, the botched-up dialog-box shown earlier now renders as:
Now that mrxvt can properly render (a patched)
console8x16, I am
happily using the dynamic duo once again on Lucifer.
By the way,
console8x16 was originally edited using XmBDFEditor
by Mark Leisher, which seems to
be no longer available. I came to know later that it was replaced by gbdfed, which uses
Gtk+ instead of the Motif toolkit used by
xmbdfed, and provides
more features. Before I stumbled upon
gbdfed though, I tried
searching for the sources of
xmbdfed and was finally able to snag
copy of the xmbdfed-4.7 sources via the Internet Archive Wayback Machine.
The sources need to be patched
up a bit before they can be compiled on a modern Linux desktop. Once you
have that, you can use it explore a BDF font, modify it, create your own glyphs
or fonts, etc. (Of course,
gbdfed works better on a modern system.)
If you simply want to see the glyphs provided by a font, use the standard
xfd utility instead.
Update (2021-11-14): Added a few screen-shots to the post to illustrate
the problem and the solution. Added a pointer to