Documentazione
La funzione di completamento dell'API al punto è disponibile nella documentazione di completion-at-point-functions
Ogni funzione su questo hook viene chiamata a turno senza alcun argomento e dovrebbe restituire zero per indicare che non è applicabile al punto, o una funzione di nessun argomento per eseguire il completamento (scoraggiato) o un elenco del modulo (INIZIA COLLEZIONE FINE . PROPS) dove START e END delimitano il completamento dell'entità e dovrebbero includere un punto, COLLECTION è la tabella di completamento da utilizzare per completarla e PROPS è un elenco di proprietà per ulteriori informazioni.
start
, end
E props
sono evidenti, ma penso che il formato del collection
non è definito in modo corretto. Per questo è possibile consultare la documentazione di try-completion
oall-completions
Se la COLLEZIONE è una lista, le chiavi (macchine degli elementi) sono i possibili completamenti. Se un elemento non è una cella contro, allora l'elemento stesso è il possibile completamento. Se COLLECTION è una tabella hash, tutte le chiavi che sono stringhe o simboli sono i possibili completamenti. Se COLLECTION è un obarray, i nomi di tutti i simboli nell'obarray sono i possibili completamenti.
La COLLEZIONE può anche essere una funzione per eseguire il completamento stesso. Riceve tre argomenti: i valori STRING, PREDICATE e zero. Qualunque cosa ritorni diventa il valore di "try-completamento".
Esempio
Di seguito è riportato un semplice esempio di completamento nella funzione punto che utilizza le parole definite in /etc/dictionaries-common/words
per completare le parole nel buffer
(defvar words (split-string (with-temp-buffer
(insert-file-contents-literally "/etc/dictionaries-common/words")
(buffer-string))
"\n"))
(defun words-completion-at-point ()
(let ((bounds (bounds-of-thing-at-point 'word)))
(when bounds
(list (car bounds)
(cdr bounds)
words
:exclusive 'no
:company-docsig #'identity
:company-doc-buffer (lambda (cand)
(company-doc-buffer (format "'%s' is defined in '/etc/dictionaries-common/words'" cand)))
:company-location (lambda (cand)
(with-current-buffer (find-file-noselect "/etc/dictionaries-common/words")
(goto-char (point-min))
(cons (current-buffer) (search-forward cand nil t))))))))
La funzione di completamento cerca la parola al punto (la libreria thingatpt
viene utilizzata per trovare i limiti della parola) e la completa in base alle parole nel /etc/dictionaries-common/words
file, la proprietà :exclusive
è impostata in no
modo tale che emacs possa usare altre funzioni capf in caso di errore. Infine, sono state impostate alcune proprietà aggiuntive per migliorare l'integrazione in modalità azienda.
Prestazione
Il file di parole sul mio sistema aveva 99171 voci ed emacs è stato in grado di completarle senza problemi, quindi immagino che 15000 voci non dovrebbero essere un problema.
Integrazione con la modalità azienda
La modalità Azienda si integra molto bene con l' completion-at-point-functions
utilizzo del company-capf
back - end, quindi dovrebbe funzionare per te, ma puoi migliorare i completamenti offerti dalla società restituendo ulteriori props
risultati nel risultato della funzione capf. Gli oggetti di scena attualmente supportati sono
:company-doc-buffer
- Utilizzato dalla società per visualizzare i metadati per il candidato corrente
:company-docsig
- Utilizzato dalla compagnia per echeggiare i metadati sul candidato nel minibuffer
:company-location
- Utilizzato dalla società per passare alla posizione del candidato corrente