In this post I will show how one can edit bitmap fonts in pcf or bdf
format under GNU/Linux. The reason for writing this article was a wish
on mine part to edit the X11 core fonts in order to add a dotted or
slashed zero.
Motivation
I use urxvt with stock settings (except color) as terminal emulator.
If not defined to otherwise in the configfile urxvt uses the default fonts of
the X windowing system. The X default fonts are in fact a complete
collection of fonts which are called misc-fixed. They are available
in different sizes whereas urxvt uses 6×13 as a default.
The misc-fixed fonts are bitmap fonts.
This means that every character is defined pixel for pixel.
This leads to a few advantages over truetype or freetype fonts which are
constructed out of splines:
- Faster to display: There is no need to convert the character to
actual pixels before displaying it. - Pixel-perfect: As bitmap fonts are already stored in pixels they can
be displayed exactly as defined beforehand. There is no need of
anti-aliasing, the font is sharp as hell. This is the main reason why I
use bitmap fonts.
The pixel perfection is the biggest downside of bitmap fonts at the same
time. As soon as a bitmap font should be scaled in any way, they start to
look blurry.
Dotted / slashed zero
A dotted or slashed zero is a typographic term and means, that the
number zero is crossed or has a small dot inside. This makes the zero
far more distinguishable from the capital letter O. There’s a nice
article on Wikipedia on that topic.
Unfortunately the misc-fixed fonts don’t have a dotted zero. 🙁
But this is going to change…
Needed tools
Three tools are needed. It’s very likely that you must install the
first two.
- pcf2bdf: This tool is used to convert the bitmap font from the
binary pcf format into the ASCII-based bdf format (bitmap distribution
format). On a modern Linux the bitmap fonts are stored in pcf
format and additionally compressed with gzip. On archlinux this is only
available in AUR: pcf2bdf. - gbdfed: The graphical bdf editor is used to edit bitmap fonts. On
archlinux gbdfed is available only an AUR as well: gbdfed.
The official site: gbdfed official site. - bdftopcf: This tool is used to convert the edited bdf file back
into pcf format. It’s shipped with X, so theres a high possibility
that you don’t have to install it. 😉
Editing the pcf font files
On most systems the font files will lay under
/usr/share/fonts/misc/
You can list all installed fonts with it corresponding name and path with the
fc-list utility:
$ fc-list
The next step is to copy the font file you want to edit and unzip it:
$ cp /usr/share/fonts/misc/6x13-ISO8859-1.pcf.gz /tmp/
$ cd /tmp/
$ gunzip 6x13-ISO8859-1.pcf.gz
After that we can convert the pcf file into bdf format:
$ pcf2bdf -o 6x13-ISO8859-1.bdf 6x13-ISO8859-1.pcf
Now we can edit the font with gbdfed:
$ gbdfed 6x13-ISO8859-1.bdf
After that we convert the bdf file back into pcf format:
$ bdftopcf -o 6x13-ISO8859-1.pcf 6x13-ISO8859-1.bdf
Compress it and copy it back. Make sure to have a backup of your
original font…
$ gzip 6x13-ISO8859-1.pcf
# cp 6x13-ISO8859-1.pcf.gz /usr/share/fonts/misc/
Afterwards we force a rebuild of the fontcache:
$ fc-cache -f
You might have to restart the X server as well.
And we’re finished:
If you don’t want to overwrite your original font file you have to
rename the font inside of gbdfed, copy the modified font to
~/.fonts
and run fc-cache -f ~/.fonts
. After that you have to
specify the font inside of urxvts configfile / .Xresources:
URxvt.font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1