dbrock / zenburn-el

The zenburn color theme for GNU Emacs
39 stars 13 forks source link

Infinite recursion #13

Open dabrahams opened 13 years ago

dabrahams commented 13 years ago

Can't prove this is a zenburn issue, but chances seem good that it's related:

  color-theme-spec-resolve-inheritance((:inherit))
  (let ((more-atts ...) att val) (while more-atts (setq att ... val ... more-atts ...) (cond ... ...)))
  (progn (setq atts (delq ... ...)) (let (... att val) (while more-atts ... ...)))
  (if face (progn (setq atts ...) (let ... ...)))
  (when face (setq atts (delq ... ...)) (let (... att val) (while more-atts ... ...)))
  (let ((face ...)) (when face (setq atts ...) (let ... ...)) atts)
  color-theme-spec-resolve-inheritance((:inherit))
  (let ((more-atts ...) att val) (while more-atts (setq att ... val ... more-atts ...) (cond ... ...)))
  (progn (setq atts (delq ... ...)) (let (... att val) (while more-atts ... ...)))
  (if face (progn (setq atts ...) (let ... ...)))
  (when face (setq atts (delq ... ...)) (let (... att val) (while more-atts ... ...)))
  (let ((face ...)) (when face (setq atts ...) (let ... ...)) atts)
  color-theme-spec-resolve-inheritance((:inherit))
  (color-theme-spec-maybe-invert (color-theme-spec-resolve-inheritance (color-theme-face-attr-construct face ...)))
  (color-theme-spec-canonical-font (color-theme-spec-maybe-invert (color-theme-spec-resolve-inheritance ...)))
  (let ((atts ...)) (if atts (\` ...) (\` ...)))
  color-theme-spec(custom-face-tag)
  mapcar(color-theme-spec (default Buffer-menu-buffer-face apt-utils-broken apt-utils-broken-face apt-utils-description apt-utils-description-face apt-utils-field-contents apt-utils-field-contents-face apt-utils-field-keyword apt-utils-field-keyword-face apt-utils-normal-package apt-utils-normal-package-face apt-utils-summary apt-utils-summary-face apt-utils-version apt-utils-version-face apt-utils-virtual-package apt-utils-virtual-package-face bold bold-italic bongo-unfilled-seek-bar border breakpoint-disabled breakpoint-disabled-bitmap breakpoint-disabled-bitmap-face breakpoint-enabled breakpoint-enabled-bitmap breakpoint-enabled-bitmap-face buffer-menu-buffer button c-nonbreakable-space-face calendar-today calendar-today-face change-log-acknowledgement change-log-conditionals change-log-date change-log-date-face change-log-email change-log-file change-log-function change-log-list change-log-name circe-highlight-nick-face circe-my-message-face circe-originator-face circe-prompt-face circe-server-face comint-highlight-input comint-highlight-prompt compilation-column-number ...))
  (let ((faces ...)) (mapcar (quote color-theme-spec) faces))
  color-theme-get-face-definitions()
  (cons (color-theme-get-vars) (color-theme-get-face-definitions))
  (cons (color-theme-get-params) (cons (color-theme-get-vars) (color-theme-get-face-definitions)))
  (cons (quote color-theme-snapshot) (cons (color-theme-get-params) (cons ... ...)))
  (backquote-list* (quote color-theme-snapshot) (color-theme-get-params) (color-theme-get-vars) (color-theme-get-face-definitions))
  (list (quote quote) (backquote-list* (quote color-theme-snapshot) (color-theme-get-params) (color-theme-get-vars) (color-theme-get-face-definitions)))
  (list (quote color-theme-install) (list (quote quote) (backquote-list* ... ... ... ...)))
  (list (quote lambda) nil "The color theme in use when the selection buffer was created.\n\\[color-theme-select] creates the color theme selection buffer.  At the\nsame time, this snapshot is created as a very simple undo mechanism.\nThe snapshot is created via `color-theme-snapshot'." (quote (interactive)) (list (quote color-theme-install) (list ... ...)))
  (\` (lambda nil "The color theme in use when the selection buffer was created.\n\\[color-theme-select] creates the color theme selection buffer.  At the\nsame time, this snapshot is created as a very simple undo mechanism.\nThe snapshot is created via `color-theme-snapshot'." (interactive) (color-theme-install ...)))
  (eval (\` (lambda nil "The color theme in use when the selection buffer was created.\n\\[color-theme-select] creates the color theme selection buffer.  At the\nsame time, this snapshot is created as a very simple undo mechanism.\nThe snapshot is created via `color-theme-snapshot'." ... ...)))
  color-theme-make-snapshot()
  (fset (quote color-theme-snapshot) (color-theme-make-snapshot))
  (progn (fset (quote color-theme-snapshot) (color-theme-make-snapshot)) (setq color-themes (delq ... color-themes) color-themes (delq ... color-themes) color-themes (append ... color-themes)))
  (if (or (not ...) (not ...)) (progn (fset ... ...) (setq color-themes ... color-themes ... color-themes ...)))
  (when (or (not ...) (not ...)) (fset (quote color-theme-snapshot) (color-theme-make-snapshot)) (setq color-themes (delq ... color-themes) color-themes (delq ... color-themes) color-themes (append ... color-themes)))
  color-theme-select(nil)
  call-interactively(color-theme-select t nil)
  execute-extended-command(nil)
  call-interactively(execute-extended-command nil nil)
dabrahams commented 13 years ago

Yeah, this patch to color-theme.el helps catch the problem:


--- /tmp/color-theme.el 2011-09-28 14:39:53.000000000 -0400
+++ color-theme.el  2011-09-28 14:31:02.000000000 -0400
@@ -767,6 +767,7 @@
       ;; remove :inherit face from atts -- this assumes only one
       ;; :inherit attribute.
       (setq atts (delq ':inherit (delq face atts)))
+      (unless atts (debug))
       (let ((more-atts (color-theme-spec-resolve-inheritance
            (color-theme-face-attr-construct
             face (selected-frame))))

When I start commenting out bits of zenburn it gets a little further... the alias for Buffer-menu-buffer-face, the apt-utils stuff...

dabrahams commented 13 years ago

Hmm, that patch seems a little too eager; it might not be valid.

dabrahams commented 13 years ago

More on this: it's definitely a zenburn interaction. I put color-theme.el and zenburn.el in the appropriate places and then did

emacs -Q -l <thefilebelow>

(setq load-path (append (list "/Users/dave/.emacs.d/el-get/color-theme" "/Users/dave/.emacs.d/el-get/color-theme-zenburn") load-path))
(require 'color-theme)
(require 'zenburn)
(color-theme-zenburn) ;; comment out this line to see it work
(color-theme-select)
(color-theme-zenburn) ;; as long as color-theme-select is called first, we can do this here 
(color-theme-select)  ;; and call color-theme-select again