]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow font names that end in "-NN", where NN is a number
authorEli Zaretskii <eliz@gnu.org>
Mon, 29 Jun 2015 16:10:20 +0000 (19:10 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 29 Jun 2015 16:10:20 +0000 (19:10 +0300)
* src/font.c (font_load_for_lface): If the font-spec didn't match
any available fonts, try again without interpreting trailing "-NN"
as the font size.  For the description of the original problem, see
http://lists.gnu.org/archive/html/help-emacs-windows/2015-06/msg00001.html

src/font.c

index 564c53ae54e8b43719b19d2bf1f8c88141382c92..575975ced739d5dd5b877143869b6091872d8820 100644 (file)
@@ -3337,6 +3337,38 @@ font_load_for_lface (struct frame *f, Lisp_Object *attrs, Lisp_Object spec)
       /* No font is listed for SPEC, but each font-backend may have
         different criteria about "font matching".  So, try it.  */
       entity = font_matching_entity (f, attrs, spec);
+      /* Perhaps the user asked for a font "Foobar-123", and we
+        interpreted "-123" as the size, whereas it really is part of
+        the name.  So we reset the size to nil and the family name to
+        the entire "Foobar-123" thing, and try again with that.  */
+      if (NILP (entity))
+       {
+         name = Ffont_get (spec, QCuser_spec);
+         if (STRINGP (name))
+           {
+             char *p = SDATA (name), *q = strrchr (p, '-');
+
+             if (q != NULL && c_isdigit (q[1]))
+               {
+                 char *tail;
+                 double font_size = strtod (q + 1, &tail);
+
+                 if (font_size > 0 && tail != q + 1)
+                   {
+                     Lisp_Object lsize = Ffont_get (spec, QCsize);
+
+                     if ((FLOATP (lsize) && XFLOAT_DATA (lsize) == font_size)
+                         || (INTEGERP (lsize) && XINT (lsize) == font_size))
+                       {
+                         ASET (spec, FONT_FAMILY_INDEX,
+                               font_intern_prop (p, tail - p, 1));
+                         ASET (spec, FONT_SIZE_INDEX, Qnil);
+                         entity = font_matching_entity (f, attrs, spec);
+                       }
+                   }
+               }
+           }
+       }
       if (NILP (entity))
        return Qnil;
     }