bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#911: 23.0.60; custom-set-faces causes "New Frame" to fail (max-specp


From: martin rudalics
Subject: bug#911: 23.0.60; custom-set-faces causes "New Frame" to fail (max-specpdl-size)
Date: Sun, 21 Sep 2008 20:30:36 +0200
User-agent: Thunderbird 2.0.0.16 (Windows/20080708)

Ian Miller has patiently continued to debug this and we finally came to
the conclusion that the following sequence of events leads to the error.

Ian uses

  (custom-set-faces
   '(default ((t (... :background "DarkSlateGray" ...)))))

When creating a new frame `frame-set-background-mode' gets called which
eventually calls `face-spec-recalc'.  The latter has this loop

      (dolist (spec theme-faces)
        (face-spec-set-2 face frame (cadr spec))))

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.  Now

(>= (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.  In fact, Ian told me

> Incidently, whilst testing I have found that the same bug does indeed
> manifest itself elsewhere. Normally I have the toolbar disabled in my
> .emacs, but after stripping everything out of .emacs for testing
> purposes, I noticed that I get the following errors whenever I hover
> over an icon in the toolbar:
>
>   Error while displaying tooltip: (error Variable binding depth exceeds
>   max-specpdl-size)
>   Read a directory, to operate on its files
>   Error while displaying tooltip: (error Variable binding depth exceeds
>   max-specpdl-size)
>   Read an existing file into an Emacs buffer

which seems due to the fact that x_create_tip_frame calls
`modify-frame-parameters' ...

Anyone out there with good ideas for a fix?

martin







reply via email to

[Prev in Thread] Current Thread [Next in Thread]