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]>

Attachment: pgpoTwRqnEFZ4.pgp
Description: OpenPGP Digital Signature

Reply via email to