今天更新最新版本emacs,发现会提示:
Warning (files): Missing
lexical-binding' cookie in "~/gccemacs_260201/share/emacs/site-lisp/site-start.el". You can add one withM-x elisp-enable-lexical-binding RET’. See(elisp)Selecting Lisp Dialect' and(elisp)Converting to Lexical Binding’ for more information.
搜索了下貌似没发现解决办法,于是去找源码,发现是这个commit (Fload, Feval_buffer): Emit a warning when lexbind is unset (bug#74145) · emacs-mirror/emacs@9f25d46 (github.com)
解决办法1:上advice,在early-init里添加:
(require 'cl-macs) (define-advice internal–get-default-lexical-binding (:around (orig-fn &rest args)) (cl-letf (((symbol-function #'display-warning) (lambda (&rest _) )))))
代码意思就是让display-warning执行为空,其它逻辑都没变。
再手动修改share\emacs\site-lisp\site-start.el,行首添加;; -*- lexical-binding: t; -*-,或者m-x elisp-enable-lexical-binding,我用的网上编译的windows版本,不清楚为何安装自带的el文件也有这个问题?
解决方法2:(setq internal--get-default-lexical-binding-function nil)也行,这个设置就不知道有没有什么副作用了。