auto-completeに関数と変数の情報源を追加

ac-source-symbolsは大雑把すぎるので、もう少し細かく制御できる情報源を追加しました。一つは関数をオムニ補完するac-source-functionsという情報源で、もう一つは変数を補完するac-source-variablesという情報源です。

ac-source-functionsは(の直後のシンボルに対してオムニ補完を行います。従来のac-source-symbolsでは、(の直後でも変数などを入力できたため、若干精度に問題がありました。ac-source-variablesはac-source-symbolsと同じくシンボルに対して補完を行いますが、変数のみを補完するので、例えば関数の引数に関数が補完候補となるようなことはありません。これもac-source-symbolsでは問題でした。

この二つは同時に使用することが推奨されます。また、ac-source-functionsはオムニ補完なのでac-source-variablesより優先度が高く設定されている*1必要があります。設定例は次のようになるでしょう。

(add-hook 'emacs-lisp-mode-hook
          (lambda ()
            (setq ac-sources (append '(ac-source-functions ac-source-variables) ac-sources))))

ac-source-symbolsとac-source-variablesは共存することができますが、基本的にはこの二つの情報源を使用する場合はac-source-symbolsは使わないほうがいいでしょう。

さらに今回、情報源の記号に対応しました。次のスクリーンショットを見てもらえば分かると思いますが、補完候補の右端にfという記号があります。これはac-source-functionsによって生成された補完候補であることを示しています。他にもvやsがあり、前者はac-source-variables、後者はac-source-symbolsになります。

また、実験的ではありますが、ヘルプにも対応しています。ヘルプが利用可能な情報源はac-source-functions, ac-source-variables, ac-source-symbolsです。ヘルプを表示するには補完候補にカーソルをあわせて少し待ちます。すると自動的にヘルプが表示されるはずです。ちなみにスクロールバーの表示に小さなバグがあります。

ヘルプを表示しないようにするには次のコードを評価してください。正式なやり方ではないですが悪しからず。

(setq ac-quick-help-delay 9999)

*1:ac-sourcesで先頭にあるということ