Subject: bug#1852: 23.0.60; describe-face: Wrong type argument: symbolp, (:slant oblique)

From: Stephen Berman <[email-masked]>
Date: Mon, 12 Jan 2009 13:19:07 +0100

On Sun, 11 Jan 2009 21:38:45 -0500 Chong Yidong <[email-masked]> wrote:

> Stephen Berman <[email-masked]> writes:
>
>> Your fix prevents the error from being raised at step 4 above; however,
>> the behavior is nevertheless still not what I would naively expect:
>> namely, now it switches to a *Help* buffer describing variable-pitch
>> face, containing the line
>>          Slant: unspecified
>> i.e., this is not the face that I clicked to get a description of (as
>> the tooltip also promises).  Wouldn't it be better (if readily
>> implementable) to exclude `(:slant oblique)' from the the describe-face
>> link?
>
> The "face" you are trying to customize is actually two faces---the
> `variable-pitch' face plus an anonymous face consisting of the
> property-value pair (:slant oblique).  

I was obviously confused above, but I also think it's confusing to say
there are two faces here and to call `(:slant oblique)' an anonymous
face. `(variable-pitch (:slant oblique))' is simply the value of the
face property (as indeed the *Help* buffer explicitly says; I don't know
why I was confused).

>                                        The best that Custom can do is to
> allow you to customize the former.  The latter can't be customized
> because it lacks a face name (how would we save the customized face?).

Since the value of the face property can contain named faces, I expect
these to be customizable, and indeed, when I type `C-u
C-x =' on the `A' of `Authors' in the *About GNU Emacs* buffer, the
*Help* buffer shows this:

     There are text properties here:
       face                 (link variable-pitch)

and when I click on this value I do indeed get a buffer describing both
the link and variable-pitch faces, each with an accompanying customize
button.  Since `(:slant oblique)' in the previous case is not a named
face, it cannot, as you say, be customized.  But for this reason, I
think it would be better, as I suggested, to have `(:slant oblique)' not
be clickable in the output of `C-u C-x ='.

I found two other cases that seem buggy:

(a) Type `C-u C-x =' on any of the letters in `GNU Emacs' or `GNU/Linux'
in the line directly below the Emacs logo in the *About GNU Emacs*
buffer.  The resulting *Help* buffer shows this as the value of the face
property:

      face                 (link (variable-pitch (:foreground "red")))

This is not a valid value of the face property; instead, it should be this:

      face                 (link variable-pitch (:foreground "red"))

Moreover, I would expect clicking on the value to show me descriptions
of the link and variable-pitch faces, as above.  Instead, there is only
a description of the link face.  (I would recommend two clickable links
here, one for each named face, and none for the property-value pair.)

(b) In a Text mode buffer, mark a region of text, click the menu entry
Edit->Text Properties->Foreground Color->red, and on one of the
resulting red characters type `C-u C-x ='.  The *Help* buffers shows:

      face                 ((:foreground "red"))

which is fine, but when I click on the value, I get an empty *Help*
buffer.  This is another reason for this type of face value not to be
overlayed with a clickable link.

Steve Berman