我在徘徊如何摆脱elisp的警告。 我的设置如下:
我有init.el文件,它设置" emacs-root"变量:
;; root of all emacs-related stuff
(defvar emacs-root
(if (or (eq system-type 'cygwin)
(eq system-type 'gnu/linux)
(eq system-type 'linux)
(eq system-type 'darwin))
"~/.emacs.d/" "z:/.emacs.d/"
"Path to where EMACS configuration root is."))
然后在我的init.el中
;; load plugins with el-get
(require 'el-get-settings)
在el-get-settings.el中我正在使用el-get加载包并附加" el-get / el-get"文件夹到加载路径:
;; add el-get to the load path, and install it if it doesn't exist
(add-to-list 'load-path (concat emacs-root "el-get/el-get"))
问题在于我对“emacs-root”' 在添加到列表的最后一个表达式中:"引用自由变量' emacs-root'"
我在这里做错了什么,有没有办法让编译器满意?
这个设置工作正常顺便说一下 - 我在加载时没有任何问题,只是这个恼人的警告。
问候,罗马
答案 0 :(得分:4)
在编译引用变量emacs-root
的文件时,必须已定义变量。
避免警告的最简单方法是添加
(eval-when-compile (defvar emacs-root)) ; defined in ~/.init.el
在违规表格之前的el-get-settings.el
中。
或者,您可以将defvar
从init.el
移至el-get-settings.el
。
请注意,您可以在eval-when-compile
中使用defvar
来加速加载已编译的文件(当然,如果您这样做,则不应在平台之间复制已编译的文件):
(defvar emacs-root
(eval-when-compile
(if (or (eq system-type 'cygwin)
(eq system-type 'gnu/linux)
(eq system-type 'linux)
(eq system-type 'darwin))
"~/.emacs.d/"
"z:/.emacs.d/"))
"Path to where EMACS configuration root is.")
另请注意,问题中的原始defvar emacs-root
如果已损坏,则会在Windows上将变量emacs-root
设置为"Path to where EMACS configuration root is."
。