2013-02-08 7 views
5

Sono molto eccitato della modalità di completamento automatico di emacs. Ma il mio codebase è grande e, a volte, quando digito, e cerca di completare un completamento, cerca tutte le parole possibili e si blocca. È molto fastidiosoCome eseguire query di completamento automatico in background?

C'è un modo per eseguire la ricerca in background in parallelo, in modo che emacs risponda ancora alle azioni dell'utente. E solo se il punto rimane nel punto in cui la query è terminata, suggerisci il completamento automatico?

Come, l'input da tastiera è un processo primario e non può mai essere ritardato e il completamento automatico funziona come residuo sulle risorse della macchina.

risposta

3

emacs-jedi fa esattamente questo per il completamento automatico di Python. È possibile inviare una richiesta al processo in background utilizzando lo init property e quindi memorizzare il risultato da qualche parte. Nella proprietà candidate, è possibile elaborare il risultato memorizzato per passarlo al completamento automatico. Ecco la definizione ac-source. Si prega di guardare la fonte per i dettagli.

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

emacs-ipython-notebook inoltre usa tecnica simile ma immagino emacs-jedi è più facile da leggere.

+0

Come ho appreso, è per Python. E ho bisogno di un meccanismo generale, per il completamento automatico universale da caratteri letti; da TAGS ecc. – Necto

+0

Giusto, probabilmente la mia risposta era fuorviante. Ma puoi usare la tecnica (usa init per inviare richieste, ecc.) Comunque. È necessario utilizzare una sorta di RPC per comunicare con il processo in background. Usare [EPC] (https://github.com/kiwanami/emacs-epc) come emacs-jedi fa è una possibilità. È un RPC generico e ha implementazione Perl, Python e elisp. – tkf