--- Begin Message ---
Subject: |
26.3; `face-remap-set-base' seems to be bugged |
Date: |
Tue, 15 Dec 2020 16:31:31 -0800 (PST) |
See https://emacs.stackexchange.com/a/62301/105
(defface foo '((t (:background "red"))) "...")
(face-remap-set-base 'font-lock-keyword-face 'foo)
The &rest arg SPECS is `(foo)', which is, as required, a list of
(one) face.
But the code actually expects `foo' itself to be a list. It raises
an error, because it sets SPECS to just `foo' and then tries to
take the car of it.
(while (and (consp specs)
(not (null (car specs)))
(null (cdr specs)))
(setq specs (car specs))) ; <=========
(if (or (null specs)
(and (eq (car specs) face) ; <=========
(null (cdr specs))))
Is there a doc bug (both manual and doc string)? Or is there a code
bug? Or am I missing something?
In GNU Emacs 26.3 (build 1, x86_64-w64-mingw32)
of 2019-08-29
Repository revision: 96dd0196c28bc36779584e47fffcca433c9309cd
Windowing system distributor `Microsoft Corp.', version 10.0.18362
Configured using:
`configure --without-dbus --host=x86_64-w64-mingw32
--without-compress-install 'CFLAGS=-O2 -static -g3''
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#45264: 26.3; `face-remap-set-base' seems to be bugged |
Date: |
Sat, 19 Dec 2020 20:58:02 +0200 |
> Date: Sat, 19 Dec 2020 10:32:16 -0800 (PST)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: 45264@debbugs.gnu.org
>
> The confusion is from the doc not saying explicitly
> that each element of SPECS is a face spec, and NOT a
> face.
SPECS has no "elements". SPECS stands for arguments to the function
beyond the 1st arg FACE. Each such argument is either a face name or
a list of attribute/value pairs.
I changed the doc string to be more clear about that.
> 2. "why you thought the argument could be a list of
> one or more faces?"
>
> The doc string explicitly says that elements of
> SPECS can be face names:
>
> Each list element should be either a face name or...
That's after it says that you should consider SPECS as "forming" a
list of elements.
--- End Message ---