Documentação
A função de conclusão no ponto da API pode ser encontrada na documentação de completion-at-point-functions
Cada função desse gancho é chamada alternadamente, sem argumento algum, e deve retornar nulo para significar que não é aplicável no momento, ou uma função sem argumento para executar a conclusão (desencorajada) ou uma lista do formulário (START END COLLECTION PROPS) onde START e END delimitam a entidade a ser concluída e deve incluir o ponto, COLLECTION é a tabela de conclusão a ser usada para concluí-la e PROPS é uma lista de propriedades para obter informações adicionais.
start
, end
e props
são óbvias, mas acho que o formato de collection
não está definido corretamente. Para isso, você pode ver a documentação try-completion
ouall-completions
Se COLLECTION for uma lista, as chaves (carros dos elementos) são as possíveis conclusões. Se um elemento não for uma célula contras, o próprio elemento é a conclusão possível. Se COLLECTION for uma tabela de hash, todas as chaves que são seqüências de caracteres ou símbolos são as possíveis conclusões. Se COLEÇÃO é uma matriz, os nomes de todos os símbolos na matriz são as possíveis conclusões.
COLEÇÃO também pode ser uma função para realizar a conclusão em si. Ele recebe três argumentos: os valores STRING, PREDICATE e nil. O que quer que ele retorne se torna o valor de `tentativa de conclusão '.
Exemplo
Abaixo está um exemplo simples da função de conclusão no ponto que usa as palavras definidas /etc/dictionaries-common/words
para completar as palavras no 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))))))))
A função de conclusão procura a palavra no ponto (a biblioteca thingatpt
é usada para encontrar os limites da palavra) e a completa com as palavras do /etc/dictionaries-common/words
arquivo; a propriedade :exclusive
está configurada para no
que o emacs possa usar outras funções capf se falharmos. Finalmente, algumas propriedades adicionais são definidas para aprimorar a integração no modo da empresa.
atuação
O arquivo de palavras no meu sistema tinha 99171 entradas e o emacs conseguiu concluí-las sem problemas, então acho que 15000 entradas não devem ser um problema.
Integração com o modo empresa
O modo Empresa integra-se muito bem ao completion-at-point-functions
uso do company-capf
back - end, portanto, ele deve funcionar props
imediatamente , mas você pode aprimorar as conclusões oferecidas pela empresa retornando mais informações no resultado da função capf. Os adereços atualmente suportados são
:company-doc-buffer
- Usado pela empresa para exibir metadados do candidato atual
:company-docsig
- Usado pela empresa para ecoar metadados sobre o candidato no minibuffer
:company-location
- Usado pela empresa para ir para o local do candidato atual