Subject: bug#12213: 24.1; Cannot customize help-argument-name face

From: Raffaele Ricciardi <[email-masked]>
Date: Fri, 17 Aug 2012 09:09:55 +0100

On 08/17/2012 08:15 AM, Glenn Morris wrote:
 > Raffaele Ricciardi wrote:
 >
 >> - emacs -Q
 >> - M-x customize-face RET help-argument-name RET
 >> - set face foreground (i.e. "yellow")
 >> - click on "Set for this session"
 >> - M-x describe-face RET help-argument-name RET
 >> - all the fields in the face specification are "unspecified"
 > [...]
 >> In GNU Emacs 24.1.1 (i686-pc-linux-gnu, GTK+ Version 2.20.1)
 >>   of 2012-06-12 on debian
 >
 > Thanks for the report, but I cannot reproduce this on x86_64.
 > I tried on RHEL6 and Debian testing, GTK and Lucid toolkits, and it
 > works fine for me.

I have isolated a contributory cause: the bug shows up only when I use a 
bitmap
font.  With a TrueType font, everything works. At first.

No matter the kind of font used, my Emacs behaves weirdly in regard to the
`help-argument-name' face.  `describe-face' correctly describes the 
face, but
if I use it in `font-lock-add-keywords', then the `default' face gets used
instead.  This is strange because Help mode does use the face as expected.

How to reproduce:

  - emacs -Q

  - evaluate:

(defun rr-Info-mode-highlight-argument-names ()
   "Highlight argument names the way they are highlighted in Help mode."
   ;; To avoid highlighting uppercase single letters in the text, highlight
   ;; only symbols more than one character long.
   (font-lock-add-keywords nil
                           '(("\\_<[A-Z][-A-Z[:digit:]]+\\_>"
                              . help-argument-name))))

(add-hook 'Info-mode-hook #'rr-Info-mode-highlight-argument-names)

  - C-h S define-minor-mode RET

Place the cursor over an uppercase argument name, and:

M-x describe-face RET

Emacs says the `default' face is being used.  Now, replace the
`help-argument-name' face with 'font-lock-comment-face' in the hook 
above and
retry.  The highlighting now works.

Moreover, if I "recreate" the face as a copy of the `default' face - 
e.g. by using
`copy-face' - beforehand, then customizations become persistent with a 
bitmap
font as well, but `font-lock-add-keywords' keeps using the `default' 
face instead.

Hope this helps.

Incidentally, I think that the default `help-argument-name' face or any 
other
face looking the same as the 'default' face is an undesirable feature. 
Every
face should look different from `default', to let users know they can 
customize
them. I understand that choosing a color for every face may be a lot of 
work,
but then having a default foreground color that is different from 
`default' when
defining a new face in the Emacs standard libraries would be enough.  If you
want to keep the default foreground color, then I suggest that you use other
attributes like Underline, Weight, etc.

 > (There seems to be an implicit "click on Show All
 > Attributes" in the recipe.)

Indeed there is.  Sorry for the oversight.

Cheers.