当一个变量过时时,如何支持多个版本的Emacs config?
我在许多计算机上共享我的Emacs配置。其中一些我可以轻松地维护自己的emacs副本,而另一些我没有这种奢侈。我看到了以下信息: “禁用的命令挂钩”是一个过时的变量(从Emacs 22.1开始);使用“禁用的命令功能” 这发生在启动时,因为我的配置设置为字节编译任何尚未编译的文件。问题是,我仍然有一两个Emacs21实例。我如何既支持旧的又支持新的?我的谷歌fu不适合我 我尝试使用此宏:当一个变量过时时,如何支持多个版本的Emacs config?,emacs,Emacs,我在许多计算机上共享我的Emacs配置。其中一些我可以轻松地维护自己的emacs副本,而另一些我没有这种奢侈。我看到了以下信息: “禁用的命令挂钩”是一个过时的变量(从Emacs 22.1开始);使用“禁用的命令功能” 这发生在启动时,因为我的配置设置为字节编译任何尚未编译的文件。问题是,我仍然有一两个Emacs21实例。我如何既支持旧的又支持新的?我的谷歌fu不适合我 我尝试使用此宏: (defmacro WhenEmacsOlderThan (major minor &rest bo
(defmacro WhenEmacsOlderThan (major minor &rest body)
`(if (or (< emacs-major-version ,major) (and (= emacs-major-version ,major)
(< emacs-minor-version ,minor)))
(progn ,@body)
nil
)
)
但我仍然在较新的Emacs版本中看到关于过时变量的信息。我错过了什么
我还发现了其他类似的问题,但目的是隐藏信息。我想了解我为什么看到这条消息,以及如何以跨版本兼容的方式避免问题
谢谢。您是否可以直接检查
禁用的命令钩子
是否已过时
(defun make-obsolete (obsolete-name current-name &optional when)
....
(put obsolete-name 'byte-obsolete-info
所以也许
(if (not (get disabled-command-hook 'byte-obsolete-info))
(setq disabled-command-hook nil))
该消息是一个警告,因此您的
(setq disabled command hook nil)
仍将工作,但当该变量被删除时,警告也将消失,因此最好做好准备。你可以做:
(setq disabled-command-hook nil) ;; Obsolete since Emacs-22.
(setq disabled-command-function nil)
因此,它将在所有版本中工作。您还可以通过以下方式避免警告:
(if (boundp 'disabled-command-hook)
(setq disabled-command-hook nil)) ;; Obsolete since Emacs-22.
(setq disabled-command-function nil)
不,对(get)的调用也会生成一个过时的变量消息。是的,使用(boundp)进行检查是有效的。嗯,我肯定我试过了。哦,我已经相应地更新了我的代码。谢谢
(if (boundp 'disabled-command-hook)
(setq disabled-command-hook nil)) ;; Obsolete since Emacs-22.
(setq disabled-command-function nil)