繁体   English   中英

Emacs:尝试切换到乳胶模式时与dbus相关的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM