Adding a dotted zero to X11 core fonts (misc-fixed)

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. ­čÖü

urxvt-misc-fixed-without-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

gbdfed gbdfed

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:

urxvt with misc-fixed in 6x13 and dotted zero

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

Leave a Reply

Your email address will not be published.