GNU bug report logs -
#911
23.0.60; custom-set-faces causes "New Frame" to fail (max-specpdl-size)
Previous Next
Reported by: Ian Miller <emacs <at> soroban.fastmail.fm>
Date: Sun, 7 Sep 2008 11:45:04 UTC
Severity: normal
Tags: unreproducible
Done: Chong Yidong <cyd <at> stupidchicken.com>
Bug is archived. No further changes may be made.
Full log
Message #72 received at 911-done <at> emacsbugs.donarmstrong.com (full text, mbox):
> When creating a new frame `frame-set-background-mode' gets called
> which eventually calls `face-spec-recalc'... which calls
> `face-spec-set-2' two times for the default face background, one time
> for #ffffff and one time for DarkSlateGray. `face-spec-set-2' calls
> `set-face-attribute', which calls `internal-set-lisp-face-attribute'
> which calls Fmodify_frame_parameters which calls
> `frame-set-background-mode' again.
The Emacs face code strikes again, huh.
> (>= (apply '+ (color-values "DarkSlateGrey"))
> (* (apply '+ (color-values "white")) .6))
>
> evaluates to nil while
>
> (>= (apply '+ (color-values "#ffffff"))
> (* (apply '+ (color-values "white")) .6))
>
> evaluates to t. This means that `bg-mode' never equals `old-bg-mode'
> but continuously alternates between 'light and 'dark, so
> `frame-set-background-mode' will call `face-spec-recalc' thus sending
> Emacs into a nasty loop.
>
> Note that the looping behavior is due to the second call in the dolist
> (that for DarkSlateGrey). The first call (for #ffffff) terminates.
>
> I'm not sure how to fix this because that looping has no specific entry
> point.
How about defining a variable `frame-set-background-mode-bg-mode'? If
it's nil, frame-set-background-mode uses the existing calculation to
determine whether it's light or dark; if it's non-nil, it uses that
existing value. This should prevent the oscillation.
This bug report was last modified 16 years and 287 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.