簡體   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