Tài liệu
Việc hoàn thành API tại chức năng điểm có thể được tìm thấy trong tài liệu về completion-at-point-functions
Mỗi hàm trên hook này được gọi lần lượt mà không có bất kỳ đối số nào và sẽ trả về nil có nghĩa là nó không được áp dụng tại điểm hoặc một hàm không có đối số để thực hiện hoàn thành (không khuyến khích) hoặc danh sách biểu mẫu (START END THU . PROPS) trong đó START và END phân định thực thể cần hoàn thành và nên bao gồm điểm, THU THẬP là bảng hoàn thành để sử dụng để hoàn thành nó và PROPS là danh sách thuộc tính để biết thêm thông tin.
start
, end
và props
rõ ràng, nhưng tôi nghĩ định dạng của collection
không được xác định đúng. Cho rằng bạn có thể xem tài liệu của try-completion
hoặcall-completions
Nếu THU THẬP là tồn tại, các phím (ô tô của các yếu tố) là sự hoàn thành có thể. Nếu một phần tử không phải là một ô khuyết điểm, thì chính phần tử đó là sự hoàn thành có thể. Nếu THU THẬP là bảng băm, tất cả các khóa là chuỗi hoặc ký hiệu là sự hoàn thành có thể. Nếu THU THẬP là một obarray, tên của tất cả các biểu tượng trong obarray là hoàn thành có thể.
THU THẬP cũng có thể là một chức năng để tự hoàn thành. Nó nhận được ba đối số: các giá trị CHUINGI, PREDICATE và nil. Bất cứ thứ gì nó trả về đều trở thành giá trị của 'hoàn thành thử'.
Thí dụ
Dưới đây là một ví dụ đơn giản về hoàn thành tại hàm điểm, sử dụng các từ được định nghĩa /etc/dictionaries-common/words
để hoàn thành các từ trong bộ đệm
(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))))))))
Hàm hoàn thành tìm từ tại điểm (thư viện thingatpt
được sử dụng để tìm giới hạn của từ) và hoàn thành nó so với các từ trong /etc/dictionaries-common/words
tệp, thuộc tính :exclusive
được đặt thành để no
emacs có thể sử dụng các hàm capf khác nếu chúng ta thất bại. Cuối cùng, một số thuộc tính bổ sung được thiết lập để tăng cường tích hợp chế độ công ty.
Hiệu suất
Tệp từ trên hệ thống của tôi có 99171 mục và emacs có thể hoàn thành chúng mà không gặp vấn đề gì, vì vậy tôi đoán 15000 mục không phải là vấn đề.
Tích hợp với chế độ công ty
Chế độ công ty tích hợp rất tốt với completion-at-point-functions
việc sử dụng company-capf
phụ trợ, vì vậy nó sẽ hoạt động tốt cho bạn, nhưng bạn có thể tăng cường các hoàn thành do công ty cung cấp bằng cách trả lại bổ sung props
trong kết quả của chức năng capf. Các đạo cụ hiện đang được hỗ trợ là
:company-doc-buffer
- Được sử dụng bởi công ty để hiển thị siêu dữ liệu cho ứng viên hiện tại
:company-docsig
- Được sử dụng bởi công ty để lặp lại siêu dữ liệu về ứng cử viên trong xe buýt nhỏ
:company-location
- Được sử dụng bởi công ty để nhảy đến vị trí của ứng cử viên hiện tại