From 6a1dcf594a8b6aa72820f04b529aa3454cf3fc61 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 4 Mar 2019 18:28:18 +0200 Subject: [PATCH] Fix invocation with -rv on the command line * lisp/frame.el (frame-set-background-mode): Avoid errors from 'face-spec-match-p' when the face was not yet realized for FRAME. (Bug#34725) --- lisp/frame.el | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lisp/frame.el b/lisp/frame.el index 8a4a0b6639b..7fe3282eb59 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1119,9 +1119,23 @@ face specs for the new background mode." ;; most faces are unmodified). (dolist (face (face-list)) (and (not (get face 'face-override-spec)) - (not (face-spec-match-p face - (face-user-default-spec face) - (selected-frame))) + (not (and + ;; If the face was not yet realized for the + ;; frame, face-spec-match-p will signal an + ;; error, so treat such a missing face as + ;; having a mismatched spec; the call to + ;; face-spec-recalc below will then realize + ;; the face for the frame. This happens + ;; during startup with -rv on the command + ;; line for the initial frame, because frames + ;; are not recorded in the pdump file. + (assq face (frame-face-alist)) + (face-spec-match-p face + (face-user-default-spec face) + ;; FIXME: why selected-frame and + ;; not the frame that is the + ;; argument to this function? + (selected-frame)))) (push face locally-modified-faces))) ;; Now change to the new frame parameters (modify-frame-parameters frame params) -- 2.39.2