Dokumentasi
Fungsi penyelesaian API pada titik dapat ditemukan dalam dokumentasi completion-at-point-functions
Setiap fungsi pada hook ini dipanggil secara bergantian tanpa argumen dan harus mengembalikan nihil berarti bahwa itu tidak berlaku pada titik, atau fungsi tidak ada argumen untuk melakukan penyelesaian (putus asa), atau daftar formulir (MULAI KOLEKSI MULAI . PROPS) tempat MULAI dan AKHIR membatasi entitas untuk diisi dan harus menyertakan titik, KOLEKSI adalah tabel penyelesaian untuk digunakan untuk melengkapinya, dan PROPS adalah daftar properti untuk informasi tambahan.
start, enddan propssudah jelas, tapi saya pikir formatnya collectiontidak didefinisikan dengan benar. Untuk itu Anda bisa melihat dokumentasi try-completionatauall-completions
Jika KOLEKSI adalah daftar, kunci (mobil elemen) adalah kemungkinan penyelesaian. Jika suatu elemen bukan sel kontra, maka elemen itu sendiri adalah penyelesaian yang mungkin. Jika COLLECTION adalah tabel hash, semua kunci yang merupakan string atau simbol adalah kemungkinan penyelesaian. Jika KOLEKSI adalah obarray, nama-nama semua simbol dalam obarray adalah pelengkap yang mungkin.
KOLEKSI juga bisa menjadi fungsi untuk menyelesaikannya sendiri. Ia menerima tiga argumen: nilai-nilai STRING, PREDICATE dan nil. Apa pun yang dikembalikan menjadi nilai `coba-penyelesaian '.
Contoh
Di bawah ini adalah contoh sederhana penyelesaian pada fungsi titik yang menggunakan kata-kata yang didefinisikan /etc/dictionaries-common/wordsuntuk melengkapi kata-kata dalam 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))))))))
Fungsi penyelesaian mencari kata pada titik (perpustakaan thingatptdigunakan untuk menemukan batas-batas kata) dan melengkapinya dengan kata-kata dalam /etc/dictionaries-common/wordsfile, properti :exclusivediatur ke nosehingga emacs dapat menggunakan fungsi capf lainnya jika kami gagal. Akhirnya beberapa properti tambahan diatur untuk meningkatkan integrasi mode perusahaan.
Performa
File kata-kata di sistem saya memiliki 99171 entri dan emacs dapat menyelesaikannya tanpa masalah, jadi saya kira 15.000 entri seharusnya tidak menjadi masalah.
Integrasi dengan mode perusahaan
Mode perusahaan terintegrasi dengan sangat baik dengan completion-at-point-functionsmenggunakan company-capfbackend, jadi itu harus bekerja di luar kotak untuk Anda, tetapi Anda dapat meningkatkan penyelesaian yang ditawarkan oleh perusahaan dengan mengembalikan tambahan propsdalam hasil fungsi capf. Alat peraga yang saat ini didukung adalah
:company-doc-buffer - Digunakan oleh perusahaan untuk menampilkan metadata untuk kandidat saat ini
:company-docsig - Digunakan oleh perusahaan untuk menggemakan metadata tentang kandidat di minibuffer
:company-location - Digunakan oleh perusahaan untuk melompat ke lokasi kandidat saat ini