Rya*_*son 10 emacs compatibility packaging elisp
我维护了一个相当好用的emacs包(ido-ubiquitous),在下一个版本中,我打算放弃对Emacs 23及以下版本的支持.使用Emacs 23及以下版本的用户将能够继续使用我当前版本的软件包.
但是,我不希望让Emacs 23用户通过ELPA或git或其他东西升级,最终得到与他们的emacs不兼容的新版本.是否有一种普遍接受的方式来优雅地处理这个问题?我有没有选择将新版本重命名为"ido-ubiquitous-ng"或其他什么?
要通过package.el阻止更新,请将特殊依赖项添加(emacs "24.1")到Package-Requires列表中.请参阅Emacs Lisp手册中的库标题,在Package-Requires:标题的描述中:
[...]包代码自动定义名为"emacs"的包,其中包含当前运行的Emacs的版本号.这可用于要求包的最小版本的Emacs.
为Emacs 23及以下独立分发的package.el 不提供此特殊包.因此,任何在Emacs 23上安装软件包的尝试都将失败,并显示一条消息,抱怨"emacs"无法安装,从而保留旧的兼容版本.
但是,在使用它时,请准备好处理来自Emacs 24用户的投诉.许多用户package.el在升级到Emacs 24时显然不会删除旧版本.因此旧版本package.el会覆盖新的内置版本,导致安装时出现虚假错误.
我不认识Elget.可能会要求其作者在这件事上提供帮助.
如果用户以传统方式安装您的软件包(例如Git子模块,分发软件包等),我认为您无法真正阻止更新.您只能在更新软件包之后抱怨,这可能为时已晚,因为现在已经存在不兼容的代码.
您可以选择添加详细的显式版本检查error.不过,我认为这是多余的.如果您真的使用Emacs 24,那么您将使用不兼容的功能,因此无论您是否明确地阻止它,您的包都无法成功加载.所以省去多余的代码:)
首先,请不要重命名您的包裹.很少有用户可以在每个已安装的软件包上关注新闻.因此,许多用户不会立即意识到该软件包已重命名,并且在没有通知或警告的情况下继续使用过时的版本.实际上,你会惩罚你的软件包的Emacs 24用户.
添加特殊依赖项以防止通过package.el进行意外更新.添加突出的文档,您的软件包需要Emacs 24,就像您的Github自述文件的第一部分一样.然后,让事情休息.任何其他事情都可能更值得麻烦.
根据我的个人经验,Emacs用户并不愚蠢(好吧,至少大多数用户不是).他们阅读文档.他们理解文档.
Emacs 23的用户知道他们的Emacs已经过时了.他们中的许多人都期望不兼容和破损.如果软件包突然中断,他们将在Github上寻求建议,意识到该软件包不再适用于Emacs 23,并且要么返回上一个工作版本,要么(希望)升级他们的Emacs.