因此,我从标准lisp模式派生出来,为自定义Lisp创建了一个主要模式。然而,当emacs进入它时,它也会自动激活粘液模式,这将覆盖我的大部分绑定。据我所知,这是因为黏液注册了一些钩子与Lisp模式,我的模式也触发了他们,但我不确定。有什么办法可以避免这种情况吗?
发布于 2016-03-28 20:50:26
如果您使用的是define-derived-mode,那么父模式的主体和模式挂钩将运行。
有关细节,请参阅https://stackoverflow.com/a/19295380。
如果您在lisp-mode-hook中启用了lisp-mode-hook,并且您的新模式是从lisp-mode派生出来的,那么最简单的方法就是在派生模式的模式钩子中再次禁用slime-mode。
编辑:实际上,我相信您可以通过操作模式主体中的delayed-mode-hooks来防止祖先模式的模式挂钩运行。
(不能阻止祖先模式的主体运行。)
不过,我建议你不要这样做。我认为,如果您发现自己想要处理派生模式机制(特别是如果您计划共享代码),那么您就不应该使用派生模式。
您可能应该从lisp-mode和emacs-lisp-mode的实现中得到启示。它们不是从另一个派生出来的,而是不同的模式(每个模式都来自prog-mode)。但是,它们的(独立的)键映射有一个共享的父键映射,这意味着许多键绑定都做同样的事情。
我建议使用这些代码作为模板来创建一个新的lisp主要模式。
发布于 2016-03-29 13:28:50
正确的方法是继承lisp模式的父模式。理想情况下,所有类似Lisp的主要模式都应该使用一个父lispish-mode,但目前还没有这样的模式,因此您必须使用prog-mode,然后手动从lisp-mode中安装/复制所需的内容。
我欢迎添加一个lispish-mode的补丁(如果它有一个更好的名称,它会更好),但到目前为止,我每次查看它,都会发现Lispish模式之间有太多的差异,以至于无法共享。
发布于 2019-04-14 14:43:38
我看到了解决这个问题的两种方法。
lisp-mode-hook中的钩子函数,以便它测试(eq major-mode 'lisp-mode),因此不以派生模式执行。lisp-mode-hook:
(删除我的-驯服-Lisp-模式() (let ((Lisp-模式-钩子零))(Lisp-模式)(定义派生模式我的自定义Lisp模式我的驯服-Lisp模式"CustomLisp“”我的自定义Lisp的主要模式.“)https://stackoverflow.com/questions/36268882
复制相似问题