auto-complete-etags Ver.0.1 をリリースしてみました。

どもです。

これは何?

auto-complete-mode のソースの1つです。
etags で作ったタグファイルを補完元として使用します。


また,現時点で,c-mode の場合のみ,タグファイルからソースを開いて,
シグニチャとかを拾ってきて,クイックヘルプで表示します。
どうなるかは,動画を見てもらえればわかると思います。
動画内でのやっていることは,

  • M-x select-tags-table で,CUnit のヘッダから作ったタグファイルを指定。
  • 色々補完してみる。
  • 次に M-x select-tags-table で,テスト用のタグを指定して,補完。
  • That's all をタイプしようするが,タイポしてまごつく。

です。


想定している使われ方

現在使用中のタグから補完候補を見つけてほしい場合に使います。


使用しているライブラリのヘッダファイルとかに対してタグファイルを作っておくと
便利かと思います。また,C言語の場合は,ac-etags-use-document を t にしておくと,
シグニチャとかを適当に拾ってきてクイックヘルプで表示します。(後述)

インストールと設定

※ワタシの環境は,WindowsXP, Cygwin, NTEmacs 23.2 です。
他の環境では試してないので,色々と問題が発生するかもしれません。


https://github.com/whitypig/auto-complete-etags
からダウンロードしてロードパスの通ったところへ置きます。
もしくは,install-from なんとかとかいうやつを使う。


基本は以下の通りです。
ac-auto-start を2にしているので,これが気に入らない場合は,
require する前に,auto-complete-etags.el の195行目を適当に変更して下さい。
あと,フェイスも自分色に染めて下さい。

(require 'auto-complete-etags)
(add-to-list 'ac-sources 'ac-source-etags)

;; If you want this to show documentation, also add the following:
(setq ac-etags-use-document t)


しかし,これでは常に ac-source-etags を使うことになってしまうので,
あるメジャーモードのフックなどで指定するのがいいと思います。
以下はワタシの設定からの抜粋です。
c-mode でバッファを開いたときに,auto-complete-mode を有効にして,
補完もとであるソースに,ac-source-etags を追加しています。

;;; function to be called when entering c-mode.
(defun my-c-mode-common-hook-func ()
  (interactive)
  "Function to be called when entering into c-mode."
  (when (and (require 'auto-complete nil t) (require 'auto-complete-config nil t))
    (auto-complete-mode t)
    (setq ac-auto-start 2)
    (setq ac-sources '(ac-source-words-in-same-mode-buffers
                       ac-source-dictionary))
    (when (require 'auto-complete-etags nil t)
      (add-to-list 'ac-sources 'ac-source-etags)
      (setq ac-etags-use-document t)))
  ;; ...
  )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook-func)


ac-source-etasg を指定しても,現在使用中のタグが無ければ何もしないはずです。


デフォルトで補完候補の上限数を ac-etags-candidates-limit で,
40にしていますが,多いと思えば少なく,少ないと思えば多くしてください。
たしか,nil にすると,上限なしだったはず。


エラーがでたりおかしくなった場合は,M-x auto-complete-mode して,
ac-sources から ac-source-etags を削除してから,
もっかい,M-x auto-complete-mode すれば,それ以降 ac-source-etags を
使用しないようになるはずです。具体的には,
(delq 'ac-source-etags ac-sources) を評価すれば削除されます。


それから,もちろんですが,etags で作ったタグファイルが必要です。

クイックヘルプの表示

デフォルトで nil に設定している ac-etags-use-document を t に
すると,c-mode でバッファを編集していて,かつ,タグの定義元のファイルも
c-mode ならば,とりあえずのシグニチャ的なものを拾ってきて表示します。
デモ用の動画では,わかりやすくするために,ac-quick-help-delay を 0.5 に
設定していますが,もうちょっと遅い方がいいかもしれません。
確かデフォルトでは,1.5 だったはず。
それから,お行儀が悪いですが,クイックヘルプを表示する際に,
エコーエリア(ミニバッファのところ)にも表示しています。

最後に

例のバグがとれたので,仰々しくエントリにしてみました。
基本的にお行儀の悪いことはしていないと思うので,
使っても大丈夫だとは思います。
今後,色々と機能を追加していく予定です。そもそも c-mode のみしか,
ドキュメントを取得できないのは痛い。
もちのろんで,使用は自己責任でお願いします。
もしも使ってもらえて,不具合を見つけて教えてもらえれば,
なるべく早く対応します。


今回のものを作る際に,といっても大した物は作ってませんが,
色々なコードを参考にさせてもらいました。
改めて,オープンソースソフトウェアの作者様方に,ありがとー!!