GNU bug report logs - #4988
23.1; In Emacs 23, face-spec-set amends instead of setting

Previous Next

Package: emacs;

Reported by: trentbuck <at> gmail.com

Date: Fri, 20 Nov 2009 14:35:03 UTC

Severity: normal

Done: Chong Yidong <cyd <at> gnu.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 4988 in the body.
You can then email your comments to 4988 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-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>:
bug#4988; Package emacs. (Fri, 20 Nov 2009 14:35:04 GMT) Full text and rfc822 format available.

Acknowledgement sent to trentbuck <at> gmail.com:
New bug report received and forwarded. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>. (Fri, 20 Nov 2009 14:35:04 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):

From: trentbuck <at> gmail.com
To: bug-gnu-emacs <at> gnu.org
Subject: 23.1; In Emacs 23, face-spec-set amends instead of setting
Date: Fri, 20 Nov 2009 06:28:16 -0800 (PST)
In Emacs 22,

    (face-spec-set 'ido-subdir '((t :inherit dired-directory)))

sets the ido-subdir face.  In Emacs 23, the same form merely amends
the defface spec -- the defface's :foreground "red" property isn't
unset.  This problem has existed for a long time; until recently I was
working around it with filthy kludges of the form

    (put 'ido-subdir 'face-alias 'dired-directory)

Today, I wanted to make w3m-anchor inherit from the 'link face, but to
override :underline.  So I tried this, and rediscovered the problem.

    (face-spec-set 'w3m-anchor '((t :inherit link :underline nil)))

The elisp code below, when loaded by emacs -Q, demonstrates the
problem (by taking snapshots of customize-face's rendering of the face
after each attempt).

I apologize for the ranting below.  By this point, I am sick of trying
to wade through all this new 'theme-foo crap that manages to make the
face subsystem even more obtuse and confusing than it already was.

    ;; Goal: to completely destory upstream's ido-subdir's spec and
    ;; replace it with a simple (t :inherit 'dired-directory).
    ;;
    ;; Load this with emacs -Q -l example.el

    (require 'dired)
    (require 'ido)

    (defun snapshot (description)
      (customize-face 'ido-subdir)
      (search-forward "Attributes: ")
      (kill-ring-save (point-at-bol)
                      (point-max))
      (switch-to-buffer "*scratch*")
      (insert description)
      (insert "\n")
      (yank)
      (insert "\n"))

    (snapshot "Before doing anything")

    (face-spec-set 'ido-subdir '((t :inherit dired-directory)) t)
    (snapshot "face-spec-set with FOR-DEFFACE does nothing.  Just checking...")

    (face-spec-set 'ido-subdir '((t :inherit dired-directory)))
    (snapshot "face-spec-set without FOR-DEFFACE *amends* in Emacs 23,
    whereas in Emacs 22 it used to work as advertised -- it *set* the face!")

    (face-spec-reset-face 'ido-subdir)
    (face-spec-set 'ido-subdir '((t :inherit dired-directory)))
    (snapshot "Does a face-spec-RESET-face work?  No!")

    (custom-set-faces '(ido-subdir ((t :inherit dired-directory))))
    (snapshot "CUSTOM-SET-FACES works (if you comment out the previous
    attempts above), but it's aesthetically ugly to have multiple C-S-F
    calls in my .emacs.  Nor do I want to sort my .emacs configuration by
    the kind of variables I set -- foo face configuration belongs with foo
    variable configuration and foo helper functions.")

    (face-spec-set 'ido-subdir '((t :foreground nil :inherit dired-directory)))
    (snapshot "Yes, I can use :foreground nil, but to do so, I need to
    know that upstream is using :foreground and not something else.  Am I
    expected to use :foo nil for *ALL* properties, in case upstream
    decides to set another property in the next release?!")


In GNU Emacs 23.1.1 (i486-pc-linux-gnu)
 of 2009-09-14 on raven, modified by Debian
configured using `configure  '--build=i486-linux-gnu' '--host=i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim' '--with-x=no' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: C
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_AU.utf8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: rcirc

Minor modes in effect:
  shell-dirtrack-mode: t
  rcirc-low-priority-flag: t
  rcirc-omit-mode: t
  diff-auto-refine-mode: t
  rcirc-track-minor-mode: t
  xterm-mouse-mode: t
  savehist-mode: t
  icomplete-mode: t
  partial-completion-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  use-hard-newlines: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
t , SPC DEL DEL SPC E V E R SPC g o o DEL DEL DEL b 
e c o m e SPC e DEL t e l e v i s i o n SPC r p DEL 
DEL p r e s e n t e r s RET E v e n SPC o n e s SPC 
w i t h SPC n o SPC f a c i a l SPC ESC b ESC [ 1 ~ 
C-k E v e n SPC t h e SPC w u s s y SPC o n e s SPC 
w i t h SPC n o SPC m o u s t a c h e , SPC l i k e 
SPC M a c C DEL G u y v e r ESC [ 1 ~ C-k C-x ESC O 
D ESC O B ESC O A ESC O A ESC [ 4 ~ ESC O C C-x ESC 
O C ESC x r e p o r t SPC e m a c s SPC b u g RET f 
a c e - s p e c - s e t SPC n o w SPC a m e n d s ESC 
[ 1 ~ C-k TAB C-g C-x ESC O B TAB I SPC n e v e r SPC 
c l a i m e d SPC h e SPC w a s SPC c o o l SPC - - 
SPC j u s t SPC h i s SPC n a m e SPC i s SPC c o o 
l RET C-r j e w i s h RET RET RET C-x ESC O D C-x ESC 
O C ESC x ESC O A RET

Recent messages:
Mark saved where search started [6 times]
Mark set
Mark activated
Quit
Mark set
Mark saved where search started
Mark set [2 times]
Quit [2 times]
windmove-do-window-select: Minibuffer is inactive
Mark saved where search started




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#4988; Package emacs. (Sun, 25 Nov 2012 04:58:01 GMT) Full text and rfc822 format available.

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

From: Chong Yidong <cyd <at> gnu.org>
To: trentbuck <at> gmail.com
Cc: 4988-done <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org
Subject: Re: bug#4988: 23.1;
	In Emacs 23, face-spec-set amends instead of setting
Date: Sun, 25 Nov 2012 12:55:43 +0800
trentbuck <at> gmail.com writes:

> In Emacs 22,
>
>  (face-spec-set 'ido-subdir '((t :inherit dired-directory)))
>
> sets the ido-subdir face.  In Emacs 23, the same form merely amends
> the defface spec -- the defface's :foreground "red" property isn't
> unset.

I've committed a change to face-spec-set in trunk which fixes this.




Reply sent to Chong Yidong <cyd <at> gnu.org>:
You have taken responsibility. (Sun, 25 Nov 2012 04:58:02 GMT) Full text and rfc822 format available.

Notification sent to trentbuck <at> gmail.com:
bug acknowledged by developer. (Sun, 25 Nov 2012 04:58:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 23 Dec 2012 12:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 12 years and 182 days ago.

Previous Next


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