diff options
Diffstat (limited to 'src/font.c')
-rw-r--r-- | src/font.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/font.c b/src/font.c index 564c53ae54e..575975ced73 100644 --- a/src/font.c +++ b/src/font.c @@ -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; } |