GNU bug report logs - #46973
26.3; (elisp) `Face Remapping'

Previous Next

Package: emacs;

Reported by: Drew Adams <drew.adams <at> oracle.com>

Date: Sat, 6 Mar 2021 18:17:02 UTC

Severity: wishlist

Found in version 26.3

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 46973 in the body.
You can then email your comments to 46973 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Sat, 06 Mar 2021 18:17:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Drew Adams <drew.adams <at> oracle.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 06 Mar 2021 18:17:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Drew Adams <drew.adams <at> oracle.com>
To: "bug-gnu-emacs <at> gnu.org" <bug-gnu-emacs <at> gnu.org>
Subject: 26.3; (elisp) `Face Remapping'
Date: Sat, 6 Mar 2021 18:16:07 +0000
I'm not sure this is a bug, but the doc seems unclear to me - it seems
to contradict what I see.

Everywhere in this node, SPECS seems to be the same thing, modulo the
special indication of SPECS containing a nil value for
`face-remap-set-base'.  And that meaning seems to be (everywhere) that
SPECS can be "either a list of face names, or a property list of
attribute/value pairs."

But if I do something like this, where SPECS (being a &rest arg) is the list `(variable-pitch)', which is a list of face names:

(add-hook 'some-mode-hook
          (lambda ()
            (face-remap-set-base 'default 'variable-pitch)))

I get an error saying that `variable-pitch' isn't a list.
(And trying '(variable-pitch) instead gives the same error.)

I'm probably missing something - what is it?  Or is it possible that
`face-remap-set-base' has a different meaning of SPECS?

Feel free to close, if this isn't a (doc) bug, but I'd appreciate an
explanation, so I understand better.  Thx.


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.19041
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Sat, 13 Mar 2021 10:36:02 GMT) Full text and rfc822 format available.

Message #8 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Drew Adams <drew.adams <at> oracle.com>
Cc: 46973 <at> debbugs.gnu.org
Subject: Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Sat, 13 Mar 2021 12:35:34 +0200
> From: Drew Adams <drew.adams <at> oracle.com>
> Date: Sat, 6 Mar 2021 18:16:07 +0000
> 
> But if I do something like this, where SPECS (being a &rest arg) is the list `(variable-pitch)', which is a list of face names:
> 
> (add-hook 'some-mode-hook
>           (lambda ()
>             (face-remap-set-base 'default 'variable-pitch)))
> 
> I get an error saying that `variable-pitch' isn't a list.
> (And trying '(variable-pitch) instead gives the same error.)
> 
> I'm probably missing something - what is it?  Or is it possible that
> `face-remap-set-base' has a different meaning of SPECS?

The doc string of face-remap-set-base says:

  The remaining arguments, SPECS, specify the base of the remapping.
  Each one of SPECS should be either a face name or a property list
  of face attribute/value pairs, like in a ‘face’ text property.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Mon, 15 Mar 2021 16:37:02 GMT) Full text and rfc822 format available.

Message #11 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Drew Adams <drew.adams <at> oracle.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: "46973 <at> debbugs.gnu.org" <46973 <at> debbugs.gnu.org>
Subject: RE: [External] : Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Mon, 15 Mar 2021 16:36:03 +0000
> > But if I do something like this, where SPECS (being a &rest arg) is the
> list `(variable-pitch)', which is a list of face names:
> >
> > (add-hook 'some-mode-hook
> >           (lambda ()
> >             (face-remap-set-base 'default 'variable-pitch)))
> >
> > I get an error saying that `variable-pitch' isn't a list.
> > (And trying '(variable-pitch) instead gives the same error.)
> >
> > I'm probably missing something - what is it?  Or is it possible that
> > `face-remap-set-base' has a different meaning of SPECS?
> 
> The doc string of face-remap-set-base says:
> 
>   The remaining arguments, SPECS, specify the base of the remapping.
>   Each one of SPECS should be either a face name or a property list
>   of face attribute/value pairs, like in a ‘face’ text property.

You just cited the same doc I cited.

In `(face-remap-set-base 'default 'variable-pitch)' do
you not agree that SPECS is the list `(variable-pitch)',
which is a list of one face name?

Again, what am I missing?

 M-x debug-on-entry face-remap-set-base

Stepping through shows that SPECS is indeed the list
`(variable-pitch)'.  The first (and only) spec is the
face (name) `variable-pitch'.

To me, it looks like either a doc bug or a code bug.
The `while' loop sets SPECS to `variable-pitch'.  And
the subsequent `if' tries to take its car.

Contrast with `face-remap-add-relative', which also
has an &rest SPECS arg, and whose elements can also
each be "a face name or a property list of face
attribute/value pairs."

The code for `face-remap-add-relative' does this:

  (while (and (consp specs) (null (cdr specs)))
    (setq specs (car specs)))

which is different from what `face-remap-set-base' does:

  (while (and (consp specs)
              (not (null (car specs)))
              (null (cdr specs)))
    (setq specs (car specs)))

I'm not saying that the two should necessarily be
the same.  I am saying that the latter doesn't
seem to work for SPECS that's a list of face names.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 11:52:01 GMT) Full text and rfc822 format available.

Message #14 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Drew Adams <drew.adams <at> oracle.com>
Cc: 46973 <at> debbugs.gnu.org
Subject: Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Wed, 23 Feb 2022 12:50:52 +0100
Drew Adams <drew.adams <at> oracle.com> writes:

> (add-hook 'some-mode-hook
>           (lambda ()
>             (face-remap-set-base 'default 'variable-pitch)))
>
> I get an error saying that `variable-pitch' isn't a list.
> (And trying '(variable-pitch) instead gives the same error.)

Looks like this regression was introduced by cece37cf09de9, which just
wanted to simplify the specs list.  But then the test after that wasn't
adjusted.  I've now fixed this in Emacs 29.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




bug marked as fixed in version 29.1, send any further explanations to 46973 <at> debbugs.gnu.org and Drew Adams <drew.adams <at> oracle.com> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Wed, 23 Feb 2022 11:52:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 15:57:02 GMT) Full text and rfc822 format available.

Message #19 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Drew Adams <drew.adams <at> oracle.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: "46973 <at> debbugs.gnu.org" <46973 <at> debbugs.gnu.org>
Subject: RE: [External] : Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Wed, 23 Feb 2022 15:56:21 +0000
> > (add-hook 'some-mode-hook
> >           (lambda ()
> >             (face-remap-set-base 'default 'variable-pitch)))
> >
> > I get an error saying that `variable-pitch' isn't a list.
> > (And trying '(variable-pitch) instead gives the same error.)
> 
> Looks like this regression was introduced by cece37cf09de9, which just
> wanted to simplify the specs list.  But then the test after that wasn't
> adjusted.  I've now fixed this in Emacs 29.

Thanks for fixing this.  I downloaded face-remap.el
from MASTER, and I see that you applied the fix I
suggested: (if (or (null specs) (eq specs face)).

I see from the commit log that the regression was
introduced in 2008.  Which Emacs release was that?

[And how do I find that release @ from the web
interface to the repo, here?
https://repo.or.cz/emacs.git/commit/cece37cf09de9]






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 16:58:01 GMT) Full text and rfc822 format available.

Message #22 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Drew Adams <drew.adams <at> oracle.com>
Cc: larsi <at> gnus.org, 46973 <at> debbugs.gnu.org
Subject: Re: bug#46973: [External] : Re: bug#46973: 26.3;
 (elisp) `Face Remapping'
Date: Wed, 23 Feb 2022 18:57:36 +0200
> From: Drew Adams <drew.adams <at> oracle.com>
> Date: Wed, 23 Feb 2022 15:56:21 +0000
> Cc: "46973 <at> debbugs.gnu.org" <46973 <at> debbugs.gnu.org>
> 
> I see from the commit log that the regression was
> introduced in 2008.  Which Emacs release was that?

Emacs 23.1.

> [And how do I find that release @ from the web
> interface to the repo, here?
> https://repo.or.cz/emacs.git/commit/cece37cf09de9]

I don't think you can.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 17:25:01 GMT) Full text and rfc822 format available.

Message #25 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Drew Adams <drew.adams <at> oracle.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: "larsi <at> gnus.org" <larsi <at> gnus.org>,
 "46973 <at> debbugs.gnu.org" <46973 <at> debbugs.gnu.org>
Subject: RE: bug#46973: [External] : Re: bug#46973: 26.3; (elisp) `Face
 Remapping'
Date: Wed, 23 Feb 2022 17:23:54 +0000
> > I see from the commit log that the regression was
> > introduced in 2008.  Which Emacs release was that?
> 
> Emacs 23.1.
> 
> > [And how do I find that release @ from the web
> > interface to the repo, here?
> >
> https://urldefense.com/v3/__https://repo.or.cz/emacs.git/commit/cece37cf09de9
> __;!!ACWV5N9M2RV99hQ!efT4BhwnL86QkgYo3P5AiPsR9THcH0JRhkI6cAB1EyCKVZXlVsna4KmG
> -JIMiqYG$ ]
> 
> I don't think you can.

I see.  Thank you.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 22:11:02 GMT) Full text and rfc822 format available.

Message #28 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Mauro Aranda <maurooaranda <at> gmail.com>
To: Drew Adams <drew.adams <at> oracle.com>
Cc: 46973 <at> debbugs.gnu.org
Subject: Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Wed, 23 Feb 2022 19:10:32 -0300
Drew Adams <drew.adams <at> oracle.com> writes:

> [And how do I find that release @ from the web
> interface to the repo, here?
> https://repo.or.cz/emacs.git/commit/cece37cf09de9]

Not sure if this is reliable enough, but you can click in "tree" and
then look for the configure.ac (or configure.in) file.  The second
argument for AC_INIT is the Emacs version for that revision.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Wed, 23 Feb 2022 22:56:02 GMT) Full text and rfc822 format available.

Message #31 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Drew Adams <drew.adams <at> oracle.com>
To: Mauro Aranda <maurooaranda <at> gmail.com>
Cc: "46973 <at> debbugs.gnu.org" <46973 <at> debbugs.gnu.org>
Subject: RE: [External] : Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Wed, 23 Feb 2022 22:55:22 +0000
Thanks, Mauro!

> > [And how do I find that release # from the web
> > interface to the repo, here?
> > https://repo.or.cz/emacs.git/commit/cece37cf09de9]
> 
> Not sure if this is reliable enough, but you can click in "tree" and
> then look for the configure.ac (or configure.in) file.  The second
> argument for AC_INIT is the Emacs version for that revision.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Thu, 24 Feb 2022 06:50:01 GMT) Full text and rfc822 format available.

Message #34 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Mauro Aranda <maurooaranda <at> gmail.com>
Cc: 46973 <at> debbugs.gnu.org, drew.adams <at> oracle.com
Subject: Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Thu, 24 Feb 2022 08:49:56 +0200
> Resent-From: Mauro Aranda <maurooaranda <at> gmail.com>
> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
> Resent-CC: bug-gnu-emacs <at> gnu.org
> Resent-Sender: help-debbugs <at> gnu.org
> From: Mauro Aranda <maurooaranda <at> gmail.com>
> Date: Wed, 23 Feb 2022 19:10:32 -0300
> Cc: 46973 <at> debbugs.gnu.org
> 
> Drew Adams <drew.adams <at> oracle.com> writes:
> 
> > [And how do I find that release @ from the web
> > interface to the repo, here?
> > https://repo.or.cz/emacs.git/commit/cece37cf09de9]
> 
> Not sure if this is reliable enough, but you can click in "tree" and
> then look for the configure.ac (or configure.in) file.  The second
> argument for AC_INIT is the Emacs version for that revision.

AFAIU, that is not reliable enough for finding out the Emacs release
where a particular change was first part of the tarball.  This just
tells you what is the _next_ release of Emacs _from_that_branch_.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46973; Package emacs. (Thu, 24 Feb 2022 11:53:02 GMT) Full text and rfc822 format available.

Message #37 received at 46973 <at> debbugs.gnu.org (full text, mbox):

From: Mauro Aranda <maurooaranda <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 46973 <at> debbugs.gnu.org, drew.adams <at> oracle.com
Subject: Re: bug#46973: 26.3; (elisp) `Face Remapping'
Date: Thu, 24 Feb 2022 08:52:38 -0300
Eli Zaretskii <eliz <at> gnu.org> writes:

>> Drew Adams <drew.adams <at> oracle.com> writes:
>> 
>> > [And how do I find that release @ from the web
>> > interface to the repo, here?
>> > https://repo.or.cz/emacs.git/commit/cece37cf09de9]
>> 
>> Not sure if this is reliable enough, but you can click in "tree" and
>> then look for the configure.ac (or configure.in) file.  The second
>> argument for AC_INIT is the Emacs version for that revision.
>
> AFAIU, that is not reliable enough for finding out the Emacs release
> where a particular change was first part of the tarball.  This just
> tells you what is the _next_ release of Emacs _from_that_branch_.

Ah yes, you're right.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 25 Mar 2022 11:24:08 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 26 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.