SGI Screen Font customization: sgiscreen-9x20 -------------------------------------------- The SGI Screen fonts, designed under the auspices of Silicon Graphics and released under the X/MIT license, are some of the nicest, most readable bitmap monospaced fonts around. I grabbed the 9x18 size from this page [1] (includes links to bdf, pcf, ttf & fon versions of the font) and customized it a bit to suit my tastes. There are other places to find these fonts [2], but I found conversion from the bdf format to be a bit tricky [3], so I used the fon format (SGIScreen_18) and converted it using utilities from the psftools [4] package like so: % fon2fnts SGIScreen.fon % fnt2psf SGIScreen_18.fnt SGIScreen_18.psf % psf2txt SGIScreen_18.psf SGIScreen_18.txt At this point the bitmapped font is represented in a text-file that can be edited with a text editor (where pixels = characters). I opened it with Vim and added two rows of pixels on top to give it a little more "white space" and provide room for diacritical marks: % vim SGIScreen_18.txt :%s/Bitmap: --------- \\/Bitmap: --------- \\ --------- \\ --------- \\ --------- \\/g This makes it a "9x20" font, though the individual glyphs are the same size as those in the original 9x18, just with a little more vertical spacing. % mv SGIScreen_18.txt sgiscreen-9x20.txt I then added a few characters to better cover the European alphabets, slightly changed the shapes of a few characters, scooted things left & right to make for more even spacing, added box-drawing characters, then converted the text file back to a psf font: % txt2psf sgiscreen-9x20.txt sgiscreen-9x20.psf And I believe I may have done something like this to set the Unicode character table (as well as adjusting Unicode values manually in the sgiscreen_9x20.txt): psfgettable Lat15-Terminus16.psf Lat15-Terminus16.u psfaddtable sgiscreen-9x20.psf Lat15-Terminus16.u sgiscreen-9x20.psfu Apologies for not documenting all the changes I made to this font more thoroughly... Some day I hope to have more time to refine this documentation and the font itself a bit more. If you have any questions, suggestions or end up making any improvements to the font, please contact me: ### Conversion back to BDF and PCF fonts psf2bdf --iso10646 --256 --fontname=sgiscreen-9x20 sgiscreen-9x20.psf sgiscreen-9x20.bdf without the --iso10646 in there no unicode encoding was included. And after converting to BDF, it was necessary to go in and edit the BDF file to get a PCF font that would work under the Terminology terminal emulator. So I took a look at an original BDF font file for Scr18.bdf and made changes. The sgiscreen-9x20.bdf generated above had a header that looked like this: STARTFONT 2.1 FONT sgiscreen-9x20 SIZE 20 75 75 FONTBOUNDINGBOX 9 20 0 -5 STARTPROPERTIES 3 FONT_DESCENT 5 FONT_ASCENT 15 DEFAULT_CHAR 255 ENDPROPERTIES CHARS 256 so using Scr18.bdf as a model, I edited it to look like this: STARTFONT 2.1 FONT sgiscreen-9x20 SIZE 20 72 72 FONTBOUNDINGBOX 9 20 0 -5 STARTPROPERTIES 22 _DEC_DEVICE_FONTNAMES "FM=Screen" FONTNAME_REGISTRY "" FAMILY_NAME "Screen" FOUNDRY "SGI" WEIGHT_NAME "Medium" SLANT "R" SETWIDTH_NAME "Normal" ADD_STYLE_NAME "" PIXEL_SIZE 20 POINT_SIZE 200 RESOLUTION_X 72 RESOLUTION_Y 72 SPACING "M" AVERAGE_WIDTH 90 CHARSET_REGISTRY "ISO8859" CHARSET_ENCODING "1" + CHARSET_COLLECTIONS "ASCII ISO8859-1 ADOBE-STANDARD" FULL_NAME "Screen" CAP_HEIGHT 12 FONT_ASCENT 15 FONT_DESCENT 5 X_HEIGHT 9 ENDPROPERTIES CHARS 256 Now this command converts it to a usable pcf font: bdftopcf sgiscreen-9x20.bdf -o sgiscreen-9x20.pcf Yay! Footnotes --------- [1] http://steveblock.com/2005/07/sgi-screen-font/ [2] The SGI Screen fonts are available here as well: http://ftp.jaist.ac.jp/pub/pkgsrc/current/pkgsrc/fonts/sgi-fonts/ (pcf format only) http://download.opensuse.org/repositories/M17N/openSUSE_Tumbleweed/noarch/sgi-fonts-1.0-1867.1.noarch.rpm (pcf format only) ftp://patches-europe.sgi.com/pub/linux/ProPack1.4/SRPMS/sgi-fonts-1.0-1.src.rpm (bdf format only) [3] Running bdf2psf against a *.bdf font seems to be problematic... Sending a *.pcf through pcf2bdf first seems to work better for some reason: % pcf2bdf -v -o Scr18.bdf Scr18.pcf % bdf2psf --fb Scr18.bdf /usr/share/bdf2psf/standard.equivalents /usr/share/bdf2psf/fontsets/Lat15.256 256 Scr16_lat15.psf [4] http://www.seasip.info/Unix/PSF/ To-Do ----- * use "AD SOFT HYPHEN" for something else? (combine it with 2D?) : ­ * missing the "U+2013" EN DASH: "–" (UTF-8: e2 80 93 UTF-16BE: 2013 Decimal: –) * this list could be much longer... * Maybe give the ® mark a little more space to the adjoining characters: iPod® Versions -------- v1.0 * Moved the M-dash 2014 and the quotation dash 2015 to be with the 2500 Box Drawing Horizontal character * Make N-dash 2013 what was the M-dash edit: 2012/03/17 Sat 19:47 PDT v1.1 * changed lowercase l, characters 108 & 236-239 * changed ¦ character 166 (unicode 000000a6), made it spaced vertically symmetrical * raised ° character 176 (degree symbol, unicode 000000b0) two pixels edit: 2012/08/08 Wed 12:59 PDT v1.2 * changed these characters: i í î ï j (lowered the top of the main stroke to give more space around the dot) v1.3 * added [00002329] & [0000232a] to angle bracket left & right respectively * added lambda [000003bb] * added Beta [000003b2] * added Capital omega [000003a9] * added small omega [000003c9] * added small eta [000003b7] * added [00002032] (prime) to [00000027] * added [000003c6] (small phi) * added [000021d2] (double rt arrow) * added [000003c3] (small sigma) * added [00002261] (identical to) * added [000022b3] (CONTAINS AS NORMAL SUBGROUP) * added [0000222a] (union) * added [00002032] (prime) to [00000027] (quote) 2012/12/21 Fri 8:19 PST got rid of [000000b8] (does that diacritical get used by itself ever?) to make room for [0000222a] (union) got rid of [000000a8] to make room for [000003b1] (small alpha) changed [000025c0] (left triangle) to [00002190] (left arrow) and [000025b6] (right triangle) to [00002192] (right arrow) 2208 (element of) ? 221a (square root) ? hmmmm...maybe add a few more?: > We already tried going full-APL but it only proved that it wasn't a > good idea When you say *full-APL* do you mean *in one leap*? Then I agree it's not a good idea, but how about going to APL *in stages*? First introduce just some operators (e.g. × ∧ ∨ ∈ ≥ ≤ ≠ → ⇒ only), then introduce more gradually until all APL operators are in use? Then keep on introducing other symbols from Unicode not in APL. would need these three: ∧ LOGICAL AND UTF-8: e2 88 a7 UTF-16BE: 2227 Decimal: ∧ Uppercase: U+2227 ∨ LOGICAL OR UTF-8: e2 88 a8 UTF-16BE: 2228 Decimal: ∨ Uppercase: U+2228 ∈ ELEMENT OF UTF-8: e2 88 88 UTF-16BE: 2208 Decimal: ∈ Uppercase: U+2208 ?? ----