有没有一种方法可以编写始终保持向上兼容的.emacs?
从版本18开始,我就一直在使用Emacs。Emacs Lisp不是我的常规编程语言,但几年前我花了一些时间研究它,以创建一个比迄今为止任何GUI IDE都好的.Emacs 这是一次性的工作,从那以后,我完全忘记了如何用lisp编程 唉,每次我升级我的Emacs(18>19>20>21>22>23),我的.Emacs中就有东西坏了,我最终花了太多的时间(有时是几天)来修复这些东西 在我常规编程的许多其他语言中,编写永不过时的代码是可能的。另一方面,在emacs中,我永远无法预测事情会发生怎样的变化。例如,在21.4.1版之前一直使用的有没有一种方法可以编写始终保持向上兼容的.emacs?,emacs,elisp,dot-emacs,Emacs,Elisp,Dot Emacs,从版本18开始,我就一直在使用Emacs。Emacs Lisp不是我的常规编程语言,但几年前我花了一些时间研究它,以创建一个比迄今为止任何GUI IDE都好的.Emacs 这是一次性的工作,从那以后,我完全忘记了如何用lisp编程 唉,每次我升级我的Emacs(18>19>20>21>22>23),我的.Emacs中就有东西坏了,我最终花了太多的时间(有时是几天)来修复这些东西 在我常规编程的许多其他语言中,编写永不过时的代码是可能的。另一方面,在emacs中,我永远无法预测事情会发生怎样的变化
[M-TAB]
,在23版中不再有效,必须用“\M-\t”
替换。另一个例子是dired-ommit切换
,它曾在版本21中工作,但在版本22中停止工作,被dired-ommit模式
取代
现在,我知道如果.emacs做的不多,就有可能编写一个“几乎为空的”.emacs,它可以(可能)与将来的版本保持兼容
但是my.emacs是巨大的,设计用于在许多不同的操作系统(以及它们不同的风格、版本和版本,包括非GUI系统)上运行,而无需进行任何更改。我希望有一个保证始终工作的核心API或子集
真的有这样一种方法来编写一个始终保持向上兼容的.emacs吗
如果是这样的话,我在哪里可以找到一本“烹饪书”或权威指南来完成这项工作?我很同情你,我也分享你的痛苦。答案是不,恐怕没有这样的圣杯。正如您所说,如果您的init文件足够简单,那么您可能不需要更改任何内容。事实上,即使不是这样:init文件名和Emacs查找它的位置都随着时间的推移而发生了变化。由于无法预测任何东西的未来变化,因此没有人能够保证未来的兼容性 我认为以下几点是使.emacs或init.el(我现在正在练习)易于维护的许多通用方法中的几点
例如:
(当(=emacs主要版本24)
;加载24小时的设置
)
(当(boundp'some variable)…)
或(当(fboundp'some function)…)
。(当您使用时,请从(需要'cl)
开始,对于那些在内置时没有的旧版本。)
当所有其他操作都失败时,区分emacs主要版本
、emacs次要版本
和运行xemacs
(定义为(字符串匹配“xemacs\\\\\清晰”emacs版本)
)
避免使用仅在较新版本中支持的语法和库函数
当您坚持使用文档化的接口时,很少会出现故障。因此,试着寻找一种方法来完成手册中提到的事情,如果没有其他方法,只会退回到修改一些随机的非自定义变量。根据我的经验,如果您允许偶尔的条件限制,那么在所有版本中(至少对于GNU Emacs,XEmacs有时更难取悦)总是有一种相当简单的方法让某些东西工作
例如,“\e\t”
始终适用于M-TAB
。使用直接忽略模式
,如果前者不存在,则返回到直接忽略切换
:
(set (if boundp 'dired-omit-mode 'dired-omit-mode 'dired-omit-toggle) t)
是的,有点痛,但不像你想象的那么剧烈。我维护了一个.emacs
,它可以在所有DOS、Windows和unix上使用19.23之后的任何东西(IIRC,我已经有一段时间没有使用19.34之前的任何东西进行测试了)。事实上,与Windows兼容比跟上GNU Emacs版本变化更为沉重
至于烹饪书,版本之间的大部分差异都与未被广泛使用的特性有关(否则,维护人员会更加重视严格的向上兼容性)。由于Emacs很大,毫无疑问,您可以使用大量的Emacs,但是编写食谱的人不会听说。你得随机应变。幸运的是,这并不太难。Feature detect=fboundp=or=boundp=而不是此处所示的版本检测将有助于使.emacs.el更能抵抗更改。