auto-complete.elとscheme-complete.elを連携させてみた
auto-complete.elとscheme-complete.elと,それぞれのソースを読みながら頑張った.一先ず動く所まで漕ぎ着けたのがこれ.
(add-to-list 'ac-modes 'scheme-mode) (defvar ac-source-scheme-complete '((candidates . (lambda () (all-completions ac-target (sort (mapcar 'symbol-name (scheme-env-filter #'(lambda (x) t) (save-excursion (if (scheme-in-string-p) (scheme-beginning-of-string)) (scheme-current-env)))) #'(lambda (a b) (> (length a) (length b))))))))) (add-hook 'scheme-mode-hook '(lambda () (add-to-list 'ac-sources 'ac-source-scheme-complete)))
いろいろとこれでいいのかはよく分からない.ふと思ったけど,これ結構重いかもね.scheme-complete.elはちょっと重かった記憶がある.もしself-insert-commandの度にがたがたなるようだったら,ちょっと考えないとなぁ.(追記:4000行くらいのソースで試したら使い物にならなかった.毎回scheme-current-envを呼ぶのがいけないのかな.)
どこかにac-sourcesはmake-local-variableしろって書いてあった気がするけど,(少なくとも)version 0.3.0からはmake-variable-buffer-localされてるから,必要ないよね.
ac-source-symbolsにSchemeのシンボルが入ってるのは気のせいかな?ac-sourcesは(ac-source-symbols ac-source-words-in-buffer)なのに,バッファにないSchemeのシンボルが補完候補に出てくる.string-ci<=?とか.実際,上で定義したac-source-scheme-completeが入ってると,sortしてるから出る順番が違うし,ac-source-symbols自体に混じってそう.
あと,こういう時にM-:が割と便利ね.補完ができればもっと便利なんだけど.