如果emacs< = 22,则停止处理.el文件

时间:2017-03-20 20:10:22

标签: emacs elisp

我正在尝试构建一个与HTTP API对话的小型emacs插件。不幸的是,url-retrieve函数在emacs< = 22中有不同的签名。我不特别想支持这些旧版本,但我也不想通过生成异常来破坏用户的emacs安装。如果emacs低于某个最低版本,我是否可以中止elisp源文件的处理?

(关于构建适用于不同版本的emacs的elisp包的最佳实践的任何指示都将非常感激 - 我非常喜欢elisp初学者。)

2 个答案:

答案 0 :(得分:1)

我不确定是否有办法停止加载文件。您可以拥有一个适用于所有版本的小型lisp文件,除了根据Emacs版本选择性地加载其他文件之外什么都不做。

(if (<= emacs-major-version 22)
    (require 'foo-22)
  (require 'foo-23+))

还有emacs-minor-version(也是一个int)和emacs-version(一个字符串)。

但如果图书馆在旧版本中不起作用,你可能会错误地说出来。无论什么用途,它最终都会破裂,所以你可能会早早地大声失败。

可能更好的是在url-retrieve周围定义一个可用于任一版本的包装器:

(defun foo-url-retrieve (url callback &optional cbargs silent inhibit-cookies)
  "Wrapper for `url-retrieve'."
  (if (<= emacs-major-version 22)
      (url-retrieve url callback cbargs)
    (url-retrieve url callback cbargs silent inhibit-cookies)))

你甚至可以尝试模仿url-retrieve在23岁以上的工作方式。  但我有点同意不关心22岁的版本。

答案 1 :(得分:0)

使用Emacs version

(when (>= 22 emacs-major-version)
  (error "Emacs version %d is not supported" emacs-major-version))

请注意,v22已于近8年前被v23淘汰。我怀疑很多人还在使用它... oops ...把​​它拿回来... Mac OS X Sierra带有22.1。 ; - )