Subject: customize-face obliterates obliterates elements of "face spec" alist.

From: Alan Mackenzie <[email-masked]>
Date: Sun, 26 Apr 2020 11:30:24 +0000

Hello, Emacs.

On master, when a face is set up for a single type of terminal, or
several types of terminal, customize-face disregards this, and
obliterates all members of the "face spec" alist except one, which is
always t.

For example, suppose we have either of these in a custom-set-faces list:

'(font-lock-function-name-face ((((background dark)) (:foreground "cyan" :weight bold))
                                 (t (:foreground "Blue1" :weight bold))))
 
'(font-lock-function-name-face ((((background dark)) (:foreground "cyan" :weight bold))))

.  In a light backgrounded Emacs session (e.g. in X-Windows) run
customize-face on font-lock-function-name-face.  Make some change to the
face and click on <apply and save>.  The (background dark) element has
now been obliterated, leaving (in either case):

'(font-lock-function-name-face ((t (:foreground "Blue1" :weight bold))))

.  This is a bug.  customize-face should respect face settings which are
inapplicable on the current terminal.

#########################################################################

Related wish list item:

To construct these terminal specific face specs, I had to edit the raw
lisp in .emacs.  It took me three tries before I got a valid spec.

I seem to remember that at one point it was possible to add alternative
face specs for other terminal types inside customize-face.  Am I
dreaming, or was this facility removed for some reason?

It would be really nice if one could edit a face spec in full generality
inside customize-face, obviating the need to mess with intricate raw
lisp.

-- 
Alan Mackenzie (Nuremberg, Germany).