Dokumentation
Die API-Vervollständigungsfunktion am Punkt finden Sie in der Dokumentation von completion-at-point-functions
Jede Funktion an diesem Hook wird abwechselnd ohne Argument aufgerufen und sollte entweder nil zurückgeben, um zu bedeuten, dass sie zum Zeitpunkt nicht anwendbar ist, oder eine Funktion ohne Argument, um die Vervollständigung durchzuführen (entmutigt), oder eine Liste des Formulars (START END COLLECTION) PROPS) wobei START und END die zu vervollständigende Entität begrenzen und Punkt enthalten sollten, COLLECTION die Fertigstellungstabelle ist, die zum Vervollständigen verwendet werden soll, und PROPS eine Eigenschaftsliste für zusätzliche Informationen.
start
, end
Und props
liegen auf der Hand, aber ich denke , das Format collection
nicht richtig definiert ist. Dazu sehen Sie die Dokumentation von try-completion
oderall-completions
Wenn COLLECTION eine Liste ist, sind die Schlüssel (Autos der Elemente) die möglichen Vervollständigungen. Wenn ein Element keine Nachteilezelle ist, ist das Element selbst die mögliche Vervollständigung. Wenn COLLECTION eine Hash-Tabelle ist, sind alle Schlüssel, die Zeichenfolgen oder Symbole sind, mögliche Vervollständigungen. Wenn COLLECTION ein Obarray ist, sind die Namen aller Symbole im Obarray die möglichen Vervollständigungen.
COLLECTION kann auch eine Funktion sein, um die Fertigstellung selbst durchzuführen. Es erhält drei Argumente: die Werte STRING, PREDICATE und nil. Was auch immer es zurückgibt, wird zum Wert von "Try-Completion".
Beispiel
Unten finden Sie ein einfaches Beispiel für die Vervollständigung an der Punktfunktion, bei der die in definierten Wörter verwendet werden /etc/dictionaries-common/words
, um die Wörter im Puffer zu vervollständigen
(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))))))))
Die Vervollständigungsfunktion sucht an einem bestimmten Punkt nach Wörtern (die Bibliothek thingatpt
wird verwendet, um die Wortgrenzen zu ermitteln) und vervollständigt sie anhand der Wörter in der /etc/dictionaries-common/words
Datei. Die Eigenschaft :exclusive
ist so festgelegt, no
dass Emacs andere CapF-Funktionen verwenden können, wenn unsere fehlschlagen. Schließlich werden einige zusätzliche Eigenschaften festgelegt, um die Integration im Unternehmensmodus zu verbessern.
Performance
Die Wortdatei auf meinem System hatte 99171 Einträge und Emacs konnte sie ohne Probleme vervollständigen, daher denke ich, dass 15000 Einträge kein Problem sein sollten.
Integration in den Firmenmodus
Der Unternehmensmodus lässt sich sehr gut in die completion-at-point-functions
Verwendung des company-capf
Backends integrieren, sodass er für Sie props
sofort einsatzbereit sein sollte. Sie können jedoch die vom Unternehmen angebotenen Vervollständigungen verbessern, indem Sie im Ergebnis der CapF-Funktion zusätzliche Rückgaben zurückgeben . Die derzeit unterstützten Requisiten sind
:company-doc-buffer
- Wird vom Unternehmen verwendet, um Metadaten für den aktuellen Kandidaten anzuzeigen
:company-docsig
- Wird vom Unternehmen verwendet, um Metadaten über den Kandidaten im Minibuffer wiederzugeben
:company-location
- Wird vom Unternehmen verwendet, um zum Standort des aktuellen Kandidaten zu springen
@ Iqbal Ansari gab eine tolle Antwort. Hier ist eine ergänzende Antwort, hoffe es wird helfen.
Hier ist eine Implementierung mit dem klassischen Abschlussmechanismus von emacs, 2009.
Das Folgende ist der Code, der die Vervollständigung ausführt.
Es folgt eine Implementierung unter Verwendung der Schnittstelle des Ido-Modus. Viel einfacher.
Sie müssen xyz-kwdList als Liste Ihrer Wörter definieren.
quelle
null
dienot
Verwendung von Kamelkennungen und griechischen Symbolen, die nur in Ihren eigenen Modi sinnvoll sind.completion-at-point-functions
Nichtbeantwortung der Frage, um die es ging (ich bin nicht einverstanden mit @wasamasa über dasnull
vs-not
Ding).completion-at-point-functions
sollen Abschlussdaten zurückgeben, nicht den Abschluss selbst ausführen. Die Funktionen in Ihrer Antwort können also nicht als Einträge in verwendet werdencompletion-at-point-functions
.