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