Subject: bug#2667: Still seeing inconsistent fonts

From: Kenichi Handa <[email-masked]>
Date: Thu, 21 May 2009 10:15:56 +0900

In article <[email-masked]>, Stefan Monnier <[email-masked]> writes:

> > But, if we can use this heuristic:

> >    X fonts that have the same property values except for
> >    size related properties supports the same set of
> >    characters on all display.  For example, all these fonts 
[...]

> That assumption is obviously not guaranteed to hold, and I
> don't think it really holds in practice, but it looks like
> an acceptable tradeoff, since the cases where it doesn't
> hold shouldn't be too frequent.

So, you mean that we should install that change, right?

> > -static Lisp_Object xfont_list_pattern P_ ((Lisp_Object, Display *, char *));
> > +static int xfont_chars_supported P_ ((Lisp_Object, XFontStruct *,
> > +				      struct charset *, struct charset *));

> Please just use ANSI-style declarations rather than K&R in new code.

Ah, I didn't realize that we switched to ANSI-style.

> > +  /* Two special cases to avoid opening rather big fonts.  */
> > +  if (AREF (props, 2), Qja)
> > +    return Fcons (intern ("kana"), Fcons (intern ("han"), Qnil));
> > +  if (AREF (props, 2), Qko)
> > +    return Fcons (intern ("hangul"), Qnil);

> You need EQ (..) around those two tests.

Of course, sorry for the incorrect patch.

> > +  if (NILP (val))
> > +    script = Qnil;
> > +  else
> > +    script = XCDR (val);

> Aka: script = CDR (val);

Ok.  I didn't know CDR macro.

> > +  if (! repertory && NILP (xfont_scripts_cache))
> > +    {
> > +      Lisp_Object args[2];
> > +
> > +      args[0] = QCtest;
> > +      args[1] = Qequal;
> > +      xfont_scripts_cache = Fmake_hash_table (2, args);
> > +    }
> [...]
> > @@ -996,6 +1173,8 @@
> >  void
> >  syms_of_xfont ()
> >  {
> > +  staticpro (&xfont_scripts_cache);
> > +  xfont_scripts_cache = Qnil;
> >    xfont_driver.type = Qx;
> >    register_font_driver (&xfont_driver, NULL);
> >  }

> Why not just:

> @@ -996,6 +1173,8 @@
>  void
>  syms_of_xfont ()
>  {
> +  staticpro (&xfont_scripts_cache);
> +  {
> +    Lisp_Object args[2];
> +    args[0] = QCtest;
> +    args[1] = Qequal;
> +    xfont_scripts_cache = Fmake_hash_table (2, args);
> +  }
>    xfont_driver.type = Qx;
>    register_font_driver (&xfont_driver, NULL);
>  }

I usually hesitate using a Lisp symbol Qxxxx in syms_of_XXX
if I don't know where it is initialized, and wanted to avoid
increasing the temacs size where possible.

---
Kenichi Handa
[email-masked]