2013-02-08 42 views
5

我對emacs自動完成模式非常興奮。但是我的代碼庫很大,有時候,當我輸入時,它會嘗試提示完成,它搜索所有可能的單詞並掛起。這是非常煩人的。如何在後臺執行自動完成查詢?

有沒有辦法在並行進程中在後臺運行搜索,所以emacs仍然會響應用戶操作。並且只有當查詢完成時該地點持有,建議自動完成?

就像,鍵盤輸入是一個主要過程,永遠不會被延遲,自動完成作爲機器資源上的殘留。

回答

3

emacs-jedi恰恰爲Python自動完成。您可以使用init property將請求發送到後臺進程,然後將結果存儲在某處。在candidate屬性中,您可以處理存儲的結果以將其傳遞給自動完成。這是ac源定義。詳情請看源代碼。

(ac-define-source jedi-direct 
    '((candidates . jedi:ac-direct-matches) 
    (prefix . jedi:ac-direct-prefix) 
    (init . jedi:complete-request) 
    (requires . -1))) 

emacs-ipython-notebook也使用類似的技術,但我想Emacs的絕地更容易閱讀。

+0

據我所知,它是用於Python的。我需要一些通用的機制,以便從閱讀字符中進行通用自動完成;來自TAGS等 – Necto

+0

對,可能我的回答是誤導。但是,無論如何,您可以使用該技術(使用init來發送請求等)。您需要使用某種RPC與後臺進程進行通信。使用[EPC](https://github.com/kiwanami/emacs-epc)作爲emacs-jedi可以做到這一點。它是一個通用的RPC,並具有Perl,Python和elisp實現。 – tkf