cider
cider copied to clipboard
Invalid face box when starting in debug mode
Hello, after updating to the latest version of cider, I get an error when starting Emacs. I am using straight.el, and the latest comit from master.
Expected behavior
I expect Emacs and Cider to initialize without errors.
Actual behavior
This is the backtrace:
Debugger entered--Lisp error: (error "Invalid face box" :line-width -1 :color base5)
set-face-attribute(cider-result-overlay-face #<frame *scratch* - GNU Emacs at cyrus 0xe51720> :background "#23272e" :box (:line-width -1 :color base5))
face-spec-set-2(cider-result-overlay-face #<frame *scratch* - GNU Emacs at cyrus 0xe51720> (:background "#23272e" :box (:line-width -1 :color base5)))
face-spec-recalc(cider-result-overlay-face #<frame *scratch* - GNU Emacs at cyrus 0xe51720>)
face-spec-set(cider-result-overlay-face ((((class color) (background light)) :background "grey90" :box (:line-width -1 :color "yellow")) (((class color) (background dark)) :background "grey10" :box (:line-width -1 :color "black"))) face-defface-spec)
custom-declare-face(cider-result-overlay-face ((((class color) (background light)) :background "grey90" :box (:line-width -1 :color "yellow")) (((class color) (background dark)) :background "grey10" :box (:line-width -1 :color "black"))) "Face used to display evaluation results at the end of line.\nIf `cider-overlays-use-font-lock' is non-nil, this face is\napplied with lower priority than the syntax highlighting." :group cider :package-version (cider "0.9.1"))
load-with-code-conversion("/home/loren/.emacs.d/straight/build/cider/cider-overlays.el" "/home/loren/.emacs.d/straight/build/cider/cider-overlays.el" nil t)
require(cider-overlays)
load-with-code-conversion("/home/loren/.emacs.d/straight/build/cider/cider-test.el" "/home/loren/.emacs.d/straight/build/cider/cider-test.el" nil t)
require(cider-test)
load-with-code-conversion("/home/loren/.emacs.d/straight/build/cider/cider-repl.el" "/home/loren/.emacs.d/straight/build/cider/cider-repl.el" nil t)
require(cider-repl)
load-with-code-conversion("/home/loren/.emacs.d/straight/build/cider/cider.el" "/home/loren/.emacs.d/straight/build/cider/cider.el" t t)
require(cider nil t)
(not (require 'cider nil t))
(if (not (require 'cider nil t)) (display-warning 'use-package (format "Cannot load %s" 'cider) :error) (condition-case err (progn (progn (setq nrepl-log-messages t) (setq cider-font-lock-dynamically '(macro core function var)) (setq cider-overlays-use-font-lock t)) t) ((debug error) (funcall use-package--warning80 :config err))))
(condition-case err (if (not (require 'cider nil t)) (display-warning 'use-package (format "Cannot load %s" 'cider) :error) (condition-case err (progn (progn (setq nrepl-log-messages t) (setq cider-font-lock-dynamically '(macro core function var)) (setq cider-overlays-use-font-lock t)) t) ((debug error) (funcall use-package--warning80 :config err)))) ((debug error) (funcall use-package--warning80 :catch err)))
load-with-code-conversion("/home/loren/.emacs.d/init.el" "/home/loren/.emacs.d/init.el" t t)
load("/home/loren/.emacs.d/init" noerror nomessage)
startup--load-user-init-file(#f(compiled-function () #<bytecode -0x44b8bda67495314>) #f(compiled-function () #<bytecode -0x1f3c61addc086335>) t)
command-line()
normal-top-level()
Steps to reproduce the problem
- Run
emacs --debug-init - The error hits you
Environment & Version information
CIDER version information
;; CIDER 1.13.0-snapshot (package: 1.13.0-snapshot), nREPL 1.0.0
;; Clojure 1.11.1, Java 17.0.7
Lein / Clojure CLI version
Clojure CLI version 1.11.1.1413
Emacs version
GNU Emacs 30.0.50
Operating system
NixOS unstable flake
Thanks for the report!
Have you tried with Emacs 29?
(make sure to remove .elc files after switching versions)
Hi @vemv, @bbatsov. I was using emacs-plus 30.0.60 on macOS, and I was delighted. However, as soon as I installed CIDER, I got problems when opening a clojure file. I also hit the
(error "Invalid face box" :line-width -1 :color base5)
error, and could not found a solution to this problem other than downgrading to emacs-plus 29.4 (such a shame).
Is there a solution, that allows me to use Emacs 30.0.60 ? Note: I'm using Doom Emacs.
Hi @oscarvarto !
I'd try running M-x toggle debug-on-error before CIDER is loaded at all (which probably is as simply as starting Emacs without any .clj file open, and then opening a .clj file).
You should get a stacktrace.
Feel free to post it here. It also may give you enough info to do a quick research yourself.
Cheers - V
I reinstalled Emacs 30.0.60. I got the error as expected. Here is the stack trace:
Debugger entered--Lisp error: (error "Invalid face box" :line-width -1 :color base5)
set-face-attribute(cider-result-overlay-face #<frame *Minibuf-1* – Doom Emacs 0x130830a00> :background "#303030" :box (:line-width -1 :color base5))
face-spec-set-2(cider-result-overlay-face #<frame *Minibuf-1* – Doom Emacs 0x130830a00> (:background "#303030" :box (:line-width -1 :color base5)))
face-spec-recalc(cider-result-overlay-face #<frame *Minibuf-1* – Doom Emacs 0x130830a00>)
face-spec-set(cider-result-overlay-face ((((class color) (background light)) :background "grey90" :box (:line-width -1 :color "yellow")) (((class color) (background dark)) :background "grey10" :box (:line-width -1 :color "black"))) face-defface-spec)
custom-declare-face(cider-result-overlay-face ((((class color) (background light)) :background "grey90" :box (:line-width -1 :color "yellow")) (((class color) (background dark)) :background "grey10" :box (:line-width -1 :color "black"))) "Face used to display evaluation results at the end of line.\nIf `cider-overlays-use-font-lock' is non-nil, this face is\napplied with lower priority than the syntax highlighting." :group cider :package-version (cider "0.9.1"))
load-with-code-conversion("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-overlays.el" "/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-overlays.el" nil t)
require(cider-overlays)
load-with-code-conversion("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-test.el" "/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-test.el" nil t)
require(cider-test)
load-with-code-conversion("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-repl.el" "/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider-repl.el" nil t)
require(cider-repl)
load-with-code-conversion("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider.el" "/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/cider/cider.el" nil t)
cider--setup-clojure-major-mode((keymap (menu-bar keymap (clojure menu-item "Clojure" (keymap "Clojure" (Toggle\ between\ string\ &\ keyword menu-item "Toggle between string & keyword" clojure-toggle-keyword-string) (Align\ expression menu-item "Align expression" clojure-align) (Cycle\ privacy menu-item "Cycle privacy" clojure-cycle-privacy) (Cycle\ if\,\ if-not menu-item "Cycle if, if-not" clojure-cycle-if) (Cycle\ when\,\ when-not menu-item "Cycle when, when-not" clojure-cycle-when) (Cycle\ not menu-item "Cycle not" clojure-cycle-not) (Toggle\ \#_\ ignore\ form menu-item "Toggle #_ ignore form" clojure-toggle-ignore) (Toggle\ \#_\ ignore\ of\ surrounding\ form menu-item "Toggle #_ ignore of surrounding form" clojure-toggle-ignore-surrounding-form) (Add\ function\ arity menu-item "Add function arity" clojure-add-arity) (Promote\ \#\(\)\ fn\ literal menu-item "Promote #() fn literal" clojure-promote-fn-literal) (ns\ forms menu-item "ns forms" (keymap "ns forms" (Insert\ ns\ form\ at\ the\ top menu-item "Insert ns form at the top" clojure-insert-ns-form) (Insert\ ns\ form\ here menu-item "Insert ns form here" clojure-insert-ns-form-at-point) (Update\ ns\ form menu-item "Update ns form" clojure-update-ns) (Sort\ ns\ form menu-item "Sort ns form" clojure-sort-ns) (Rename\ ns\ alias menu-item "Rename ns alias" clojure-rename-ns-alias))) (Convert\ collection menu-item "Convert collection" (keymap "Convert collection" (Convert\ to\ list menu-item "Convert to list" clojure-convert-collection-to-list) (Convert\ to\ quoted\ list menu-item "Convert to quoted list" clojure-convert-collection-to-quoted-list) (Convert\ to\ map menu-item "Convert to map" clojure-convert-collection-to-map) (Convert\ to\ vector menu-item "Convert to vector" clojure-convert-collection-to-vector) (Convert\ to\ set menu-item "Convert to set" clojure-convert-collection-to-set))) (Refactor\ ->\ and\ ->> menu-item "Refactor -> and ->>" (keymap "Refactor -> and ->>" (Thread\ once\ more menu-item "Thread once more" clojure-thread) (Fully\ thread\ a\ form\ with\ -> menu-item "Fully thread a form with ->" clojure-thread-first-all) (Fully\ thread\ a\ form\ with\ ->> menu-item "Fully thread a form with ->>" clojure-thread-last-all) (nil "--") (Unwind\ once menu-item "Unwind once" clojure-unwind) (Fully\ unwind\ a\ threading\ macro menu-item "Fully unwind a threading macro" clojure-unwind-all))) (Let\ expression menu-item "Let expression" (keymap "Let expression" (Introduce\ let menu-item "Introduce let" clojure-introduce-let) (Move\ to\ let menu-item "Move to let" clojure-move-to-let) (Forward\ slurp\ form\ into\ let menu-item "Forward slurp form into let" clojure-let-forward-slurp-sexp) (Backward\ slurp\ form\ into\ let menu-item "Backward slurp form into let" clojure-let-backward-slurp-sexp))) (Documentation menu-item "Documentation" (keymap "Documentation" (View\ a\ Clojure\ guide menu-item "View a Clojure guide" clojure-view-guide) (View\ a\ Clojure\ reference\ section menu-item "View a Clojure reference section" clojure-view-reference-section) (View\ the\ Clojure\ cheatsheet menu-item "View the Clojure cheatsheet" clojure-view-cheatsheet) (View\ the\ Clojure\ style\ guide menu-item "View the Clojure style guide" clojure-view-style-guide))) (nil "--") (Report\ a\ clojure-mode\ bug menu-item "Report a clojure-mode bug" clojure-mode-report-bug) (Clojure-mode\ version menu-item "Clojure-mode version" clojure-mode-display-version)))) (3 keymap (18 . clojure-refactor-map) (32 . clojure-align)) (67108922 . clojure-toggle-keyword-string) keymap (27 keymap (113 . prog-fill-reindent-defun) (17 . prog-indent-sexp))) clojure-mode-hook)
#f(compiled-function () #<bytecode 0x526aa35bfc7b>)()
eval-after-load-helper("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/clojure-mode/clojure-mode.elc")
do-after-load-evaluation("/Users/oscarvarto/doom-emacs/.local/straight/build-30.0.60/clojure-mode/clojure-mode.elc")
clojure-mode()
#<subr set-auto-mode-0>(clojure-mode nil)
apply(#<subr set-auto-mode-0> (clojure-mode nil))
set-auto-mode-0(clojure-mode nil)
set-auto-mode--apply-alist((("\\.ya?ml\\'" . yaml-ts-mode) ("\\.ts\\'" . typescript-ts-mode) ("\\.tsx\\'" . tsx-ts-mode) ("\\.toml\\'" . toml-ts-mode) ("\\.rs\\'" . rust-ts-mode) ("\\(?:\\.\\(?:rbw?\\|ru\\|rake\\|thor\\|jbuilder\\|rabl\\|gemspec\\|podspec\\)\\|/\\(?:Gem\\|Rake\\|Cap\\|Thor\\|Puppet\\|Berks\\|Brew\\|Vagrant\\|Guard\\|Pod\\)file\\)\\'" . ruby-ts-mode) ("\\.py[iw]?\\'" . python-ts-mode) ("\\.lua\\'" . lua-ts-mode) ("\\.json\\'" . json-ts-mode) ("\\.js\\'" . js-ts-mode) ("\\.java\\'" . java-ts-mode) ("\\.html\\'" . html-ts-mode) ("\\.heex\\'" . heex-ts-mode) ("go\\.mod\\'" . go-mod-ts-mode) ("\\.go\\'" . go-ts-mode) ("\\.ex\\'" . elixir-ts-mode) ("[/\\]\\(?:Containerfile\\|Dockerfile\\)\\(?:\\.[^/\\]*\\)?\\'" . dockerfile-ts-mode) ("\\.css\\'" . css-ts-mode) ("\\.cpp\\'" . c++-ts-mode) ("\\.cmake\\'" . cmake-ts-mode) ("\\.cs\\'" . csharp-ts-mode) ("\\.c\\'" . c-ts-mode) ("\\.sh\\'" . bash-ts-mode) ("\\.fsscript\\'" . fsharp-mode) ("\\.fsx\\'" . fsharp-mode) ("\\.fsi\\'" . fsharp-mode) ("\\.fs\\'" . fsharp-mode) ("\\.clj\\'" . clojure-mode) ("\\.cljs\\'" . clojure-mode) ("\\.kt\\'" . kotlin-mode) ("\\.txt\\'" . text-mode) ("\\.scala\\'" . scala-mode) ("\\.py\\'" . python-mode) ("\\.nuon\\'" . nushell-mode) ("Procfile\\'" . yaml-mode) ("templates/.+\\.php\\'" . web-mode) ("wp-content/themes/.+/.+\\.php\\'" . web-mode) ("\\.eco\\'" . web-mode) ("\\.jinja2?\\'" . web-mode) ("\\.twig\\'" . web-mode) ("\\.svelte\\'" . web-mode) ("\\.mustache\\'" . web-mode) ("\\.hbs\\'" . web-mode) ("\\.ejs\\'" . web-mode) ("\\.as[cp]x\\'" . web-mode) ("\\.jsp\\'" . web-mode) ("\\.[lh]?eex\\'" . web-mode) ("\\.erb\\'" . web-mode) ("\\.\\(?:tpl\\|blade\\)\\(?:\\.php\\)?\\'" . web-mode) ("\\.[px]?html?\\'" . web-mode) ...) nil nil)
#<subr set-auto-mode>()
apply(#<subr set-auto-mode> nil)
#f(advice auto-minor-mode-set :after #<subr set-auto-mode>)()
apply(#f(advice auto-minor-mode-set :after #<subr set-auto-mode>) nil)
(progn (apply fn args))
(unwind-protect (progn (apply fn args)) (when (buffer-live-p buf) (with-current-buffer buf (evil-change-state old-state))))
(let ((evil-state evil-state) (evil-previous-state evil-previous-state) (evil-previous-state-alist (copy-tree evil-previous-state-alist)) (evil-next-state evil-next-state) (old-state evil-state) (inhibit-quit t) (buf (current-buffer))) (unwind-protect (progn (apply fn args)) (when (buffer-live-p buf) (with-current-buffer buf (evil-change-state old-state)))))
(evil-save-state (apply fn args))
(if evil-state (evil-save-state (apply fn args)) (apply fn args))
+evil--persist-state-a(#f(advice auto-minor-mode-set :after #<subr set-auto-mode>))
apply(+evil--persist-state-a #f(advice auto-minor-mode-set :after #<subr set-auto-mode>) nil)
#f(advice +evil--persist-state-a :around #f(advice auto-minor-mode-set :after #<subr set-auto-mode>))()
so-long--set-auto-mode(#f(advice +evil--persist-state-a :around #f(advice auto-minor-mode-set :after #<subr set-auto-mode>)))
apply(so-long--set-auto-mode #f(advice +evil--persist-state-a :around #f(advice auto-minor-mode-set :after #<subr set-auto-mode>)) nil)
set-auto-mode()
normal-mode(t)
#<subr after-find-file>(nil t nil nil nil)
apply(#<subr after-find-file> (nil t))
(progn (fset #'sit-for #'ignore) (apply fn args))
(unwind-protect (progn (fset #'sit-for #'ignore) (apply fn args)) (fset #'sit-for old))
(let* ((old (symbol-function #'sit-for))) (unwind-protect (progn (fset #'sit-for #'ignore) (apply fn args)) (fset #'sit-for old)))
doom--shut-up-autosave-a(#<subr after-find-file> nil t)
apply(doom--shut-up-autosave-a #<subr after-find-file> (nil t))
#f(advice doom--shut-up-autosave-a :around #<subr after-find-file>)(nil t)
apply(#f(advice doom--shut-up-autosave-a :around #<subr after-find-file>) (nil t))
#f(advice chain-doom-first-buffer-hook-to-find-file-hook-h :before #f(advice doom--shut-up-autosave-a :around #<subr after-find-file>) ((depth . -101)))(nil t)
apply(#f(advice chain-doom-first-buffer-hook-to-find-file-hook-h :before #f(advice doom--shut-up-autosave-a :around #<subr after-find-file>) ((depth . -101))) (nil t))
after-find-file(nil t)
find-file-noselect-1(#<buffer core.clj> "~/clojureDev/hello-clojure/src/hello_clojure/core.clj" nil nil "~/clojureDev/hello-clojure/src/hello_clojure/core.clj" (31322602 16777229))
#<subr find-file-noselect>("~/clojureDev/hello-clojure/src/hello_clojure/core.clj" nil nil nil)
apply(#<subr find-file-noselect> "~/clojureDev/hello-clojure/src/hello_clojure/core.clj" (nil nil nil))
(setq ret (apply f filename args))
(let ((props nil) (coding-system nil) (ret nil)) (condition-case err (if (and (stringp filename) (not (editorconfig--disabled-for-filename filename))) (progn (setq props (editorconfig-call-get-properties-function filename)) (setq coding-system (editorconfig-merge-coding-systems (gethash 'end_of_line props) (gethash 'charset props))) (puthash (expand-file-name filename) coding-system editorconfig--filename-codingsystem-hash))) (error (display-warning '(editorconfig editorconfig--advice-find-file-noselect) (format "Failed to get properties, styles will not be applied: %S" err) :warning))) (setq ret (apply f filename args)) (clrhash editorconfig--filename-codingsystem-hash) (condition-case err (save-current-buffer (set-buffer ret) (if (and props (not (editorconfig--disabled-for-majormode major-mode))) (progn (if (and (file-remote-p filename) (not ...) (not ...) coding-system (not ...)) (progn (set-buffer-file-coding-system coding-system))) (condition-case err (run-hook-with-args 'editorconfig-hack-properties-functions props) (error (display-warning ... ... :warning))) (setq editorconfig-properties-hash props) (editorconfig-set-local-variables props) (condition-case err (run-hook-with-args 'editorconfig-after-apply-functions props) (error (display-warning ... ...)))))) (error (display-warning '(editorconfig editorconfig--advice-find-file-noselect) (format "Error while setting variables from EditorConfig: %S" err)))) ret)
editorconfig--advice-find-file-noselect(#<subr find-file-noselect> "~/clojureDev/hello-clojure/src/hello_clojure/core.clj" nil nil nil)
apply(editorconfig--advice-find-file-noselect #<subr find-file-noselect> ("~/clojureDev/hello-clojure/src/hello_clojure/core.clj" nil nil nil))
find-file-noselect("~/clojureDev/hello-clojure/src/hello_clojure/core.clj" nil nil nil)
find-file("~/clojureDev/hello-clojure/src/hello_clojure/core.clj")
#f(compiled-function () (interactive nil) #<bytecode 0x23553879455a8ef>)()
apply(#f(compiled-function () (interactive nil) #<bytecode 0x23553879455a8ef>) nil)
consult-recent-file()
funcall-interactively(consult-recent-file)
command-execute(consult-recent-file)
I'll try to find a solution myself, but any guidance/suggestion is very welcome, as I consider myself a newbie with elisp.
Seems like it's a known bug in Doom: https://github.com/doomemacs/themes/pull/817
It's a single-character change so you could quite easily find and patch the source file if you don't want to wait for the PR to be merged :)
Thanks a lot, @yuhan0 !