bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#59347: 29.0.50; `:family` face setting ignored


From: Gregory Heytings
Subject: bug#59347: 29.0.50; `:family` face setting ignored
Date: Sun, 20 Nov 2022 15:35:06 +0000



I'd prefer to delay the discussion of this until after Stefan has time to see why DejaVu Sans is rejected in his cases and describe his findings.

If you already did that, please describe your findings.


It's described in the commit message. DejaVu Sans is rejected because the font of the default face has a 'medium' weight, and DejaVu Sans (like many other fonts) does not explicitly support that weight. For many fonts (and for Emacs until recently), normal, regular and medium are the same weight.


AFAIU, Stefan discovered that the problematic attribute was foundry, and and your patch does nothing about foundry.


I don't know how he reached that conclusion, but it's most likely not the cause of the problem.


It sounds like your patch is for another problem altogether.


I don't think so, at least my intention was to fix this bug (and also at least bug#57555, which is the same one).

+  /* If weight is "medium" in SPEC, also try "normal".  Fonts with an
+     explicit "medium" weight are much less common than fonts with an
+     explicit "normal" weight, and for a long time "medium" and
+     "normal" (a.k.a. "regular" a.k.a. "book") were synonymous in
+     Emacs.  See e.g. bug#59347 and bug#57555.  */
+  weight[0] = AREF (spec, FONT_WEIGHT_INDEX);
+  if (EQ (weight[0], Qmedium))
+    weight[1] = Qnormal, weight[2] = zero_vector;
+  else
+    weight[1] = zero_vector;

This is not enough, IMO: you need to make sure the scoring of candidates is still correct. For example, if the weights of two candidates differ (normal vs medium), but sizes are the same or close, how will that compare with candidates whose weights are identical, but sizes differ? IOW, we need to reconsider how font_score scores the candidates.


I don't understand your question. The patch essentially adds an inner loop in the loop of fond_find_for_lface, to make sure that when weight == medium, we call font_list_entities two times, first with

(family, foundry, registry, adstyle, weight == medium)

and then (if the previous call did not succeed to find a matching font, IOW, if it did not return nil) with

(family, foundry, registry, adstyle, weight == normal)

There is no scoring involved at that point, AFAIU.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]