]> code.delx.au - gnu-emacs/commitdiff
Be more tolerant to fonts named "Foobar-12"
authorEli Zaretskii <eliz@gnu.org>
Wed, 1 Jul 2015 16:33:56 +0000 (19:33 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 1 Jul 2015 16:33:56 +0000 (19:33 +0300)
* src/frame.c (x_set_font): If font_spec_from_name returns nil,
don't barf; instead, request a new fontset to be generated.  This
avoids unnecessarily rejecting fonts named against XLFD rules.  See
http://lists.gnu.org/archive/html/help-emacs-windows/2015-06/msg00001.html,
for the description of the original problem.

* lisp/faces.el (set-face-attribute): Don't be fooled too easily
by a hyphen in a font's name.

lisp/faces.el
src/frame.c

index ac6486ee46c8a067139a545b92be87f9577098e6..9857a7bd4de763993e7150695e82c2a9360f9ac8 100644 (file)
@@ -753,7 +753,7 @@ is specified, `:italic' is ignored."
   (setq args (purecopy args))
   (let ((where (if (null frame) 0 frame))
        (spec args)
-       family foundry)
+       family foundry orig-family orig-foundry)
     ;; If we set the new-frame defaults, this face is modified outside Custom.
     (if (memq where '(0 t))
        (put (or (get face 'face-alias) face) 'face-modified t))
@@ -769,9 +769,16 @@ is specified, `:italic' is ignored."
     (when (or family foundry)
       (when (and (stringp family)
                 (string-match "\\([^-]*\\)-\\([^-]*\\)" family))
+        (setq orig-foundry foundry
+              orig-family family)
        (unless foundry
          (setq foundry (match-string 1 family)))
-       (setq family (match-string 2 family)))
+       (setq family (match-string 2 family))
+        ;; Reject bogus "families" that are all-digits -- those are some
+        ;; weird font names, like Foobar-12, that end in a number.
+        (when (string-match "\\`[0-9]*\\'" family)
+          (setq family orig-family)
+          (setq foundry orig-foundry)))
       (when (or (stringp family) (eq family 'unspecified))
        (internal-set-lisp-face-attribute face :family (purecopy family)
                                          where))
index e3ad82f5f808b2e15f7516e229b4ad685403ca6c..9e695982d2b641c2dd71430a726a6ff2464a1ce1 100644 (file)
@@ -3607,10 +3607,12 @@ x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
          Lisp_Object ascii_font = fontset_ascii (fontset);
          Lisp_Object spec = font_spec_from_name (ascii_font);
 
-         if (NILP (spec))
-           signal_error ("Invalid font name", ascii_font);
-
-         if (! font_match_p (spec, font_object))
+         /* SPEC might be nil because ASCII_FONT's name doesn't parse
+            according to stupid XLFD rules, which, for example,
+            disallow font names that include a dash followed by a
+            number.  So in those cases we simply request x_new_font
+            below to generate a new fontset.  */
+         if (NILP (spec) || ! font_match_p (spec, font_object))
            fontset = -1;
        }
     }