emacs 配置代码生效时间跟代码执行顺序有关系吗 ?

我这里遇到了一个配置问题,是这样的
每次启动 Emacs 都会看到一个警告
[Treemacs] Warning: coudn’t find default background colour for icons, falling back on #2d2d31.
详细查看后发现问题出在 treemacs-icons.el 中的这个代码位置

(eval-and-compile
  (defvar treemacs--not-selected-icon-background
    (pcase (face-attribute 'default :background nil t)
      ('unspecified
       (prog1 "#2d2d31"
         (unless (boundp 'treemacs-no-load-time-warnings)
           (message "[Treemacs] Warning: coudn't find default background colour for icons, falling back on #2d2d31."))))
      ('unspecified-bg
       (prog1 "#2d2d31"
         (unless (boundp 'treemacs-no-load-time-warnings)
           (message "[Treemacs] Warning: background colour is unspecified, icons will likely look wrong. Falling back on #2d2d31."))))
      (other other)))
  "Background for non-selected icons.")

问题在其中的 (unless (boundp 'treemacs-no-load-time-warnings)
只要我设置 treemacs-no-load-time-warnings 就能过滤这个 Warning


首先我尝试了新建一个init-treemacs.el ,写下

(use-package treemacs
  :init
  (setq treemacs-no-load-time-warnings t)
)

在主要的配置文件 init.el(require 'init-treemacs) 重启过后,还是会出现 Warning


尝试在 init.el 中直接设置
(setq treemacs-no-load-time-warnings t)
重启后没有 Warning

什么鬼 ??


新的发现
本来 (require init-treemacs)` 写在最后一行,把他位置一到这个模块上面就可以了

(require 'init-treemacs)
(require 'init-program)

init-program 的内容是

(use-package geiser
  :defer t
  :hook (scheme-mode . geiser-mode)
  :init
  (setenv "MITSCHEME_LIBRARY_PATH"
	  "/usr/bin/chezscheme9.5")
  (add-to-list 'exec-path "/usr/bin/chezscheme9.5")
  (setq scheme-program-name "chezscheme9.5"
	geiser-chez-binary "chezscheme9.5"
	geiser-active-implementations '(chez)))



;; MODULE Julia
(use-package julia-mode
  :defer t
  :config
  (setq julia-repl-switches nil
	julia-snail-extra-args nil
	julia-indent-offset 2)
  :commands julia-snail-mode)
(use-package lsp-julia
  :config
  (setq lsp-julia-default-environment "~/.julia/environments/v1.5"))

;; MODULE c++-mode
(use-package c++-mode
  :mode "\\.cc\\'")

(use-package web-mode
  :ensure t
  :mode ("\\.html\\'" "\\.css\\'" "\\.js\\'" "\\.vue\\'" "\\.jsp\\'")
  :custom
  (web-mode-markup-indent-offset 2)
  (web-mode-css-indent-offset 2)
  (web-mode-code-indent-offset 2))

;; MODULE Typescript mode

;; MODULE for compile programe
(use-package antlr-mode
  :mode "\\.g4\\'")

我想是不是加载了 lsp 的问题

init-program 里面的 lsp-julia 注释掉就行了
或者说,任何 lsp 的相关配置都需要 defer

这里又有一个发现,设置 lsp-julia 加载 defer 后,再次加载 julia 文件时,lsp不能找到对应的 language server,需要修改配置为

(use-package lsp-julia
    :after treemacs
   ....)