unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#54115: 27.2; `face-remap-set-base' bug with only two args
@ 2022-02-22 17:47 Drew Adams
  2022-02-22 18:22 ` Eli Zaretskii
  2022-02-23 11:51 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 6+ messages in thread
From: Drew Adams @ 2022-02-22 17:47 UTC (permalink / raw)
  To: 54115

(I see the same problem (same code) in an Emacs 28 pretest snapshot.)

emacs -Q

Eval the source-code defun of `face-remap-set-base'.

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

Evaluate (face-remap-set-base 'variable-pitch 'default).

Debugger entered--Lisp error: (wrong-type-argument listp default)
* car(default)
* (eq (car specs) face)
* (and (eq (car specs) face) (null (cdr specs)))
* (or (null specs) (and (eq (car specs) face) (null (cdr specs))))
* (if (or (null specs) (and (eq (car specs) face) (null (cdr specs)))) (face-remap-reset-base face) (make-local-variable 'face-remapping-alist) (let ((entry (assq face face-remapping-alist))) (if entry (setcar (last entry) specs) (setq face-remapping-alist (cons (list face specs) face-remapping-alist)))) (force-mode-line-update))
* (closure (t) (face &rest specs) "Set the base remapping of FACE in the current buff..." (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)))) (face-remap-reset-base face) (make-local-variable 'face-remapping-alist) (let ((entry (assq face face-remapping-alist))) (if entry (setcar (last entry) specs) (setq face-remapping-alist (cons (list face specs) face-remapping-alist)))) (force-mode-line-update)))(variable-pitch default)
* apply((closure (t) (face &rest specs) "Set the base remapping of FACE in the current buff..." (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)))) (face-remap-reset-base face) (make-local-variable 'face-remapping-alist) (let ((entry (assq face face-remapping-alist))) (if entry (setcar (last entry) specs) (setq face-remapping-alist (cons (list face specs) face-remapping-alist)))) (force-mode-line-update))) (variable-pitch default))
* face-remap-set-base(variable-pitch default)
  (progn (face-remap-set-base 'variable-pitch 'default))
  eval((progn (face-remap-set-base 'variable-pitch 'default)) t)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

Should the test perhaps be this:

(if (or (null specs) (eq specs face)) ; default

instead of this?

(if (or (null specs)
	(and (eq (car specs) face)
        (null (cdr specs)))) ; default


In GNU Emacs 27.2 (build 1, x86_64-w64-mingw32)
 of 2021-03-26 built on CIRROCUMULUS
Repository revision: deef5efafb70f4b171265b896505b92b6eef24e6
Repository branch: HEAD
Windowing system distributor 'Microsoft Corp.', version 10.0.19043
System Description: Microsoft Windows 10 Pro (v10.0.2009.19043.1526)






^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#54115: 27.2; `face-remap-set-base' bug with only two args
  2022-02-22 17:47 bug#54115: 27.2; `face-remap-set-base' bug with only two args Drew Adams
@ 2022-02-22 18:22 ` Eli Zaretskii
  2022-02-22 18:45   ` bug#54115: [External] : " Drew Adams
  2022-02-23 11:51 ` Lars Ingebrigtsen
  1 sibling, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2022-02-22 18:22 UTC (permalink / raw)
  To: Drew Adams; +Cc: 54115

> From: Drew Adams <drew.adams@oracle.com>
> Date: Tue, 22 Feb 2022 17:47:33 +0000
> 
> (I see the same problem (same code) in an Emacs 28 pretest snapshot.)
> 
> emacs -Q
> 
> Eval the source-code defun of `face-remap-set-base'.
> 
> M-x debug-on-entry face-remap-set-base
> 
> Evaluate (face-remap-set-base 'variable-pitch 'default).
> 
> Debugger entered--Lisp error: (wrong-type-argument listp default)
> * car(default)
> * (eq (car specs) face)
> * (and (eq (car specs) face) (null (cdr specs)))

How is this different from bug#46973?





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#54115: [External] : Re: bug#54115: 27.2; `face-remap-set-base' bug with only two args
  2022-02-22 18:22 ` Eli Zaretskii
@ 2022-02-22 18:45   ` Drew Adams
  2022-02-22 19:16     ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Drew Adams @ 2022-02-22 18:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 54115@debbugs.gnu.org

> > (I see the same problem (same code) in an Emacs 28 pretest snapshot.)
> >
> > emacs -Q
> >
> > Eval the source-code defun of `face-remap-set-base'.
> >
> > M-x debug-on-entry face-remap-set-base
> >
> > Evaluate (face-remap-set-base 'variable-pitch 'default).
> >
> > Debugger entered--Lisp error: (wrong-type-argument listp default)
> > * car(default)
> > * (eq (car specs) face)
> > * (and (eq (car specs) face) (null (cdr specs)))
> 
> How is this different from bug#46973?

1. I'd forgotten about that bug filing.  Thx.
2. That's a doc bug.  This is a behavior bug.

So far, there's been no improvement of the doc
or correction of the behavior.

Feel free to merge the two bugs, if you like.

And please let us know how to pass a single
face for SPECS.  Clearly passing a list with
only one face doesn't work.

Labeling this "wishlist" doesn't help anyone
trying to use `face-remap-set-base' to set
the base remapping of FACE to another (single)
face.
___

The doc says this:

"If SPECS is empty or a single face 'eq' to FACE, call 'face-remap-reset-base'
to use the normal definition of FACE as the base remapping"

But SPECS is specifies with &rest, which means
that it's necessarily a _list_ (empty or not).
There's no way that SPECS can be a single face.
SPECS can be a list that contains only a single
face, but it can't be a face.

The doc string apparently gets mixed up from
the fact that the code in some cases resets
SPEC to the single face it contains.  But as
an argument SPECS is always a list.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#54115: [External] : Re: bug#54115: 27.2; `face-remap-set-base' bug with only two args
  2022-02-22 18:45   ` bug#54115: [External] : " Drew Adams
@ 2022-02-22 19:16     ` Eli Zaretskii
  2022-02-22 22:31       ` Drew Adams
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2022-02-22 19:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: 54115

> From: Drew Adams <drew.adams@oracle.com>
> CC: "54115@debbugs.gnu.org" <54115@debbugs.gnu.org>
> Date: Tue, 22 Feb 2022 18:45:11 +0000
> 
> > > (I see the same problem (same code) in an Emacs 28 pretest snapshot.)
> > >
> > > emacs -Q
> > >
> > > Eval the source-code defun of `face-remap-set-base'.
> > >
> > > M-x debug-on-entry face-remap-set-base
> > >
> > > Evaluate (face-remap-set-base 'variable-pitch 'default).
> > >
> > > Debugger entered--Lisp error: (wrong-type-argument listp default)
> > > * car(default)
> > > * (eq (car specs) face)
> > > * (and (eq (car specs) face) (null (cdr specs)))
> > 
> > How is this different from bug#46973?
> 
> 1. I'd forgotten about that bug filing.  Thx.
> 2. That's a doc bug.  This is a behavior bug.

Then how is it different from bug#45264?

> So far, there's been no improvement of the doc
> or correction of the behavior.

So which is it -- a doc bug or a behavior bug?

> And please let us know how to pass a single
> face for SPECS.

You can't.  A face spec doesn't allow single faces.  See defface.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#54115: [External] : Re: bug#54115: 27.2; `face-remap-set-base' bug with only two args
  2022-02-22 19:16     ` Eli Zaretskii
@ 2022-02-22 22:31       ` Drew Adams
  0 siblings, 0 replies; 6+ messages in thread
From: Drew Adams @ 2022-02-22 22:31 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 54115@debbugs.gnu.org

> > > How is this different from bug#46973?
> >
> > 1. I'd forgotten about that bug filing.  Thx.
> > 2. That's a doc bug.  This is a behavior bug.
> 
> Then how is it different from bug#45264?
> 
> > So far, there's been no improvement of the doc
> > or correction of the behavior.
> 
> So which is it -- a doc bug or a behavior bug?

I won't argue.  It seems to me that following the
doc/description, the behavior observed is not what
is described.  Is there a doc bug, a behavior bug,
or both?

> > And please let us know how to pass a single
> > face for SPECS.
> 
> You can't.  A face spec doesn't allow single faces.  See defface.

For defface we say one thing about what a face
spec is.  But here we say something different.
We say here:

 "SPECS, should form either a list of face names,
  or a property list of attribute/value pairs."

(And note that that doesn't allow for a mix of
the two: some face names and some attribute/value
pairs.)

Maybe there's some unspoken, special meaning of
"forms" intended here, other than meaning only
that SPECS, which is (by &rest) the list of
evaluated args after the first, should _be_ a
list of face names or a property list...

IOW, AFAICT we say that elements of list SPECS
can be face names.  And in particular SPECS can
be a list with just one element, which is a face
name.

Do you see the doc/behavior problem now?  If this
is a misunderstanding of what the doc _wants_ to
say, then please correct it to say what's needed.
If you need help with the wording, please speak up.

Further adding to the confusion is the fact that
when introducing "the following functions" (such
as `face-remap-set-base') we talk about
`face-remapping-alist' entries of the form:

(FACE RELATIVE-SPEC-1 RELATIVE-SPEC-2 ... BASE-SPEC)

and we say that each of those elements except FACE
can be "either a face name, or a property list of
attribute/value pairs".  (The comma is better
removed, BTW.)

A careful reading reminds us that this is about the
_alist_ entries, and not about the SPECS we see in
the descriptions of those "following functions".
Nevertheless, we've introduced things with "SPEC" in
their name (RELATIVE-SPEC-N) which can be face names.

So in some places (e.g. defface) we say that a face
SPEC can't be a face name.  In other places we say
it can.

And again, in this particular place we pretty clearly
suggest that SPECS elements can be face names.

Again, I don't claim to correctly understand what the
behavior is or should be.  I'm just reading the doc
and then trying to use the function as it seems to
say it can be used, and getting an error.

Please clarify.  If you do that here (bug thread) and
you would like help rewording, to make the doc more
clear, let me know.  One way or another, I think you
should be able to see what the misunderstanding is
and clarify things.  Thank you.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#54115: 27.2; `face-remap-set-base' bug with only two args
  2022-02-22 17:47 bug#54115: 27.2; `face-remap-set-base' bug with only two args Drew Adams
  2022-02-22 18:22 ` Eli Zaretskii
@ 2022-02-23 11:51 ` Lars Ingebrigtsen
  1 sibling, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2022-02-23 11:51 UTC (permalink / raw)
  To: Drew Adams; +Cc: 54115

Drew Adams <drew.adams@oracle.com> writes:

> Evaluate (face-remap-set-base 'variable-pitch 'default).

Fixed in bug#46973.

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





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-02-23 11:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-22 17:47 bug#54115: 27.2; `face-remap-set-base' bug with only two args Drew Adams
2022-02-22 18:22 ` Eli Zaretskii
2022-02-22 18:45   ` bug#54115: [External] : " Drew Adams
2022-02-22 19:16     ` Eli Zaretskii
2022-02-22 22:31       ` Drew Adams
2022-02-23 11:51 ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).