我正在尝试构建一个与HTTP API对话的小型emacs插件。不幸的是,url-retrieve
函数在emacs< = 22中有不同的签名。我不特别想支持这些旧版本,但我也不想通过生成异常来破坏用户的emacs安装。如果emacs低于某个最低版本,我是否可以中止elisp源文件的处理?
(关于构建适用于不同版本的emacs的elisp包的最佳实践的任何指示都将非常感激 - 我非常喜欢elisp初学者。)
答案 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)
(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。 ; - )