当一个变量过时时,如何支持多个版本的Emacs config?

当一个变量过时时,如何支持多个版本的Emacs config?,emacs,Emacs,我在许多计算机上共享我的Emacs配置。其中一些我可以轻松地维护自己的emacs副本,而另一些我没有这种奢侈。我看到了以下信息: “禁用的命令挂钩”是一个过时的变量(从Emacs 22.1开始);使用“禁用的命令功能” 这发生在启动时,因为我的配置设置为字节编译任何尚未编译的文件。问题是,我仍然有一两个Emacs21实例。我如何既支持旧的又支持新的?我的谷歌fu不适合我 我尝试使用此宏: (defmacro WhenEmacsOlderThan (major minor &rest bo

我在许多计算机上共享我的Emacs配置。其中一些我可以轻松地维护自己的emacs副本,而另一些我没有这种奢侈。我看到了以下信息:

“禁用的命令挂钩”是一个过时的变量(从Emacs 22.1开始);使用“禁用的命令功能”

这发生在启动时,因为我的配置设置为字节编译任何尚未编译的文件。问题是,我仍然有一两个Emacs21实例。我如何既支持旧的又支持新的?我的谷歌fu不适合我

我尝试使用此宏:

(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)