提问人:cidra 提问时间:6/15/2022 最后编辑:cidra 更新时间:6/15/2022 访问量:306
多个 Emacs Lisp 配置文件导致“自由变量”和“函数未知定义”警告
Multiple Emacs Lisp config files lead to "free variable" and "function not known to be defined" warnings
问:
我一直在寻找 emacs 配置文件,以便学习如何以最佳方式构建我的 Emacs 配置。现在我正在查看 purcell 的配置文件,它们看起来非常整洁且易于阅读。
但是,对于我发现的每个配置文件,总是存在相同的问题:“自由变量” 以及所有包含的文件上的“未知定义功能”警告。每次都看到 flymake 的所有红色下划线是相当令人沮丧的,这也让我怀疑这是否真的是编写配置文件的最佳方式。
下面是上面提到的存储库中的文件:
;;; init-python.el --- Python editing -*- lexical-binding: t -*-
(setq auto-mode-alist
(append '(("SConstruct\\'" . python-mode)
("SConscript\\'" . python-mode))
auto-mode-alist))
;;WARNING: assignment to free variable ‘python-shell-interpreter’
(setq python-shell-interpreter "python3")
(require-package 'pip-requirements)
(when (maybe-require-package 'toml-mode)
(add-to-list 'auto-mode-alist '("poetry\\.lock\\'" . toml-mode)))
;;WARNING: reference to free variable ‘black’
(when (maybe-require-package 'reformatter)
(reformatter-define black :program "black" :args '("-")))
(provide 'init-python)
;;WARNING: the following functions are not known to be defined: require-package, maybe-require-package, reformatter-define
;;; init-python.el ends here
是从包中定义的变量。
和 在名为 'd 的自定义本地文件中定义,因此该文件无法直接识别它们。
变量警告是最“复杂”的:我想这是由于包不包括在内,因为也不包括在内。python-shell-interpreter
python-mode
require-package
maybe-require-package
init-elpa.el
requires
init.el
black
reformatter
maybe-require-package
这让我头疼。如果我没看错的话,根本问题是包含的文件(等)依赖于包含文件()中的内容,而没有明确说明。init-python.el
init.el
有没有更好的方法可以在多个文件之间构建 Emacs Lisp 配置?
答:
python-shell-interpreter 是从包中定义的变量。
python-mode
添加到文件的顶部(或只是在依赖于该文件的代码上方)。(require 'python-mode)
require-package 和 maybe-require-package 在名为
init-elpa.el
添加到文件中(我假设它是功能)。(require 'init-elpa)
provide
init-elpa
这是 init.el 文件所必需的
这很好 -- 如果已经加载了相关库,则不执行任何操作。即使有一个总体的 init 文件加载其他文件,每个文件对它需要的东西也是明智的(除非有循环依赖关系)。require
require
黑色变量警告是最“复杂”的:我想这是由于包不包括在内,因为也不包括在内。
reformatter
maybe-require-package
我猜这是一个宏,该符号实际上并没有用作变量。当只需要宏时,通常会从它的预期名称来看,它可能根本无法加载。如果这一切都是准确的,您可以使用此包装器来处理误报:reformatter-define
black
(eval-when-compile (require 'reformatter))
maybe-require-package
reformatter
(with-suppressed-warnings ((free-vars black))
...)
有关处理字节编译警告和错误的更多信息,请参阅。C-hig(elisp)Compiler Errors
评论