Oops, I forgot to fix the ultimate culprit that would still cause problems. Here's the new diff for util.c. It wildcards the family name and drops back to iso8859-1, so it'll match the first scalable monospace font in the most basic usable encoding, and if a system doesn't have one of those then you really can't make anything work anyway, so sayonara, goodbye, adieu. There's no point to adding a full wildcard at the end -- that'll just create an unreadable result that'll probably be bold and italic looking like tiny pin-pricks on any modern hi-res display so it still won't really work. Just don't ever wildcard a FontSet! (Also don't wild-card the weight and don't expect "bold" either!)
diff --git a/util.c b/util.c
index 3cc91503..b9e35f73 100644
--- a/util.c
+++ b/util.c
@@ -313,7 +313,7 @@ UpdateFont(MyFont *font, int height)
static void
GetFont(MyFont *font)
{
- char *deffontname = "fixed,*";
+ const char *deffontname =
"-*-*-medium-r-normal--0-100-%d-%d-m-*-iso8859-1";
char **missing_charset_list_return;
int missing_charset_count_return;
char *def_string_return;
@@ -338,15 +338,20 @@ GetFont(MyFont *font)
XFreeFontSet(dpy, font->font_set);
}
- asprintf(&basename2, "%s,*", font->basename);
+ /* xxx eliminate the VERY bad ",*" hack but keep the asprintf() for now
*/
+ asprintf(&basename2, "%s", font->basename);
if((font->font_set = XCreateFontSet(dpy, basename2,
&missing_charset_list_return,
&missing_charset_count_return,
&def_string_return)) == NULL) {
- fprintf(stderr, "Failed to get fontset %s\n", basename2);
+ fprintf(stderr, "Failed to get fontset \"%s\"\n", basename2);
+ free(basename2);
if(Scr->DefaultFont.basename) {
- deffontname = Scr->DefaultFont.basename;
+ asprintf(&basename2, "%s", Scr->DefaultFont.basename);
+ } else {
+ asprintf(&basename2, deffontname, Scr->xres, Scr->yres);
}
+ fprintf(stderr, "trying default fontset \"%s\"\n", basename2);
if((font->font_set = XCreateFontSet(dpy, deffontname,
&missing_charset_list_return,
&missing_charset_count_return,
@@ -356,7 +361,16 @@ GetFont(MyFont *font)
exit(1);
}
}
- free(basename2);
+ if (missing_charset_count_return) {
+ fprintf(stderr, "%d charsets are missing from fontset \"%s\"\n",
+ missing_charset_count_return, basename2);
+ for (i = 0; i < missing_charset_count_return; i++) {
+ fprintf(stderr, "font for charset %s is lacking.\n",
+ missing_charset_list_return[i]);
+ }
+ XFreeStringList(missing_charset_list_return);
+ }
+
font_extents = XExtentsOfFontSet(font->font_set);
fnum = XFontsOfFontSet(font->font_set, &xfonts, &font_names);
@@ -373,6 +387,12 @@ GetFont(MyFont *font)
font->avg_height = 0;
font->avg_fheight = 0.0;
font->avg_count = 0;
+ if(CLarg.PrintErrorMessages) { /* xxx overload, but kinda like old twm
*/
+ fprintf(stderr, "created fontset with %d fonts (%d missing) for
\"%s\"\n",
+ fnum, missing_charset_count_return,
+ basename2);
+ }
+ free(basename2);
}
--
Greg A. Woods <[email protected]>
Kelowna, BC +1 250 762-7675 RoboHack <[email protected]>
Planix, Inc. <[email protected]> Avoncote Farms <[email protected]>
pgpoTwRqnEFZ4.pgp
Description: OpenPGP Digital Signature
