belgeleme
Noktadaki API tamamlama işlevi, dokümantasyonunda bulunabilir. completion-at-point-functions
Bu kancadaki her işlev, herhangi bir argüman olmadan sırayla çağrılır ve noktaya uygulanamayacağı anlamına gelmesi için nil veya geri dönüşü olmayan (cesareti kırılmış) hiçbir argüman işlevi veya formun bir listesi (START END COLLECTION PROPS), START ve END öğelerinin tamamlanmasını sınırlandırdığı ve nokta içermesi gerektiğinde, KOLEKSİYON onu tamamlamak için kullanılacak tamamlama tablosudur ve PROPS ek bilgi için bir özellik listesidir.
start
, end
ve props
açıktır, ancak bence biçimi collection
düzgün tanımlanmadı. Bunun için try-completion
veyaall-completions
KOLEKSİYON bir elist ise, anahtarlar (elemanların arabaları) olası tamamlamalardır. Bir öğe eksilerini içermiyorsa, öğenin kendisi olası tamamlamadır. KOLEKSİYON bir karma tablo ise, dize veya simge olan tüm tuşlar olası tamamlamalardır. KOLEKSİYON bir obarray ise, obarray'deki tüm sembollerin isimleri olası tamamlamalardır.
KOLEKSİYON ayrıca tamamlamayı kendisi yapmak için bir işlev olabilir. Üç argüman alır: STRING, PREDICATE ve nil değerleri. Ne döndürürse döndürsün, 'tamamlama' değeri olur.
Misal
Aşağıda, /etc/dictionaries-common/words
arabellekteki kelimeleri tamamlamak için tanımlanan kelimeleri kullanan nokta işlevindeki tamamlama işlemine basit bir örnek verilmiştir.
(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))))))))
Tamamlama işlevi noktadaki kelimeyi arar (kütüphane thingatpt
kelimenin sınırlarını bulmak için kullanılır) ve /etc/dictionaries-common/words
dosyadaki kelimelere karşı tamamlar ; özellik :exclusive
, no
emacs'ın başarısız olması durumunda diğer capf işlevlerini kullanabilmesi için ayarlanır . Son olarak, şirket modu entegrasyonunu geliştirmek için bazı ek özellikler ayarlanmıştır.
Verim
Sistemimdeki kelime dosyası 99171 girişe sahipti ve emacs bunları herhangi bir sorun olmadan tamamlayabildi, bu yüzden 15000 girişin bir sorun olmaması gerektiğini düşünüyorum.
Şirket modu ile entegrasyon
Şirket modu completion-at-point-functions
, company-capf
arka ucu kullanarak çok iyi bütünleşir , bu nedenle sizin için kutudan çıkarılmalıdır, ancak props
capf işlevi sonucunda ek olarak geri dönerek şirket tarafından sunulan tamamlamaları geliştirebilirsiniz . Şu anda desteklenen aksesuarlar
:company-doc-buffer
- Şirket tarafından mevcut adayın meta verilerini görüntülemek için kullanılır
:company-docsig
- Şirket tarafından minibuffer'daki aday hakkındaki meta verileri yankılamak için kullanılır
:company-location
- Mevcut adayın yerine atlamak için şirket tarafından kullanılır