[英]Emacs: dbus-related error when trying to switch to latex mode
自从我几天前开始使用dbus与Emacs(意思是我用dbus-support重新编译),当我打开一个乳胶文件或尝试手动切换到乳胶模式时,我得到了
File mode specification error: (invalid-function dbus-ignore-errors)
并且emacs在基本模式中停止。
我使用dbus作为Zeitgeist-Support并且工作正常,直到重新编译,Auctex工作得同样好。 我检查了dbus函数是否与结果一起可用:它们出现在帮助中(包括“dbus-ignore-errors”)但是它们似乎不适用于执行 - 扩展 - commad(Mx),这意味着它们不会在完成时出现并且无法执行。 另一方面,它们可用于lisp-eval。
我不知道这些功能是否正常,但无论如何,auctex功能的可用性似乎存在某种问题?
禁用zeitgeist-plugin不会改变这种情况。
有什么建议?
最好的祝福
马蒂亚斯
错误invalid-function
通常意味着在定义某个宏之前编译了一段Emacs Lisp代码,并且现在尝试将该宏作为函数调用。 要解决此问题,请找到有问题的模块,并在确保定义了宏(在这种情况下为dbus-ignore-errors
)之后重新编译它。
在Auctex的情况下,这发生是因为tex.el
包含以下内容:
;; Require dbus at compile time to prevent errors due to `dbus-ignore-errors'
;; not being defined.
(eval-when-compile (and (featurep 'dbusbind)
(require 'dbus nil :no-error)))
也就是说,它尝试加载dbus库,但忽略了失败。 如果正在编译Auctex的Emacs不支持dbus,则在编译tex.el
时, dbus-ignore-errors
将被编译为函数调用。 这没问题,因为dbus-ignore-errors
调用受featurep
测试保护。
如果这个字节编译的文件,然后装入一个Emacs实例不支持DBUS,我们突然到达,这个行,并尝试调用宏的功能,这将失败, invalid-function
。 这就是为什么在加载到支持dbus的Emacs之前需要重新编译文件的原因。
解决此问题的一种方法是将dbus-ignore-errors
行包装到eval
,更改此行:
(dbus-ignore-errors (dbus-get-unique-name :session))
对此:
(eval '(dbus-ignore-errors (dbus-get-unique-name :session)))
这将推迟决定如何评估该表达式直到运行时,当Emacs知道dbus-ignore-errors
是一个宏时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.