テキスト入力中に補完候補を自動的に表示してくれる auto-complete.el をリリースしました
テキスト入力中に補完候補を自動的に表示してくれる auto-complete.el をリリースしました。 Visual Studio とか Eclipse には昔から搭載されている一般的な補完機能なのですが、どういうわけか Emacs にはないようなので作ってしまいました [*] 。
| [*] | 僕の知るかぎりだと company-mode が一番近い |
テキストが入力されたら、そのテキストにマッチする単語あるいはシンボルらしきものをバッファから探してきてポップアップします。よくあるインターフェースなので、スクリーンショットを見ればどういうものか一発で分かると思います。

まだよく分からないという人はデモを見てください。
http://www.cx4a.org/pub/ac-demo/ac-demo.html
情報は EmacsWiki のページに集約する予定です。
http://www.emacswiki.org/emacs/AutoComplete
auto-complete.el を使うには、 EmacsWiki のページあるいは下記の URL から auto-complete.el をダウンロードしてきて、
http://www.cx4a.org/pub/auto-complete.el
load-path の通ったディレクトリにコピーします。
後は、以下のコードを .emacs に書いておけば OK です。
(require 'auto-complete) (global-auto-complete-mode t)
動作確認するには、適当なバッファ(例えば .emacs のバッファ)に移動して、適当な文字列を入力します。その文字列にマッチするバッファ内の文字列が候補されたら OK です。動作しなかったら M-x auto-complete-mode して auto-complete-mode が有効なことを確認してください。
使い方は、
- TAB:
- 補完を実行する。すでに実行されていたら次の候補を選択する。
- C-n/<down>:
- 次の候補を選択する。
- C-p/<up>:
- 前の候補を選択する。
- C-m/RET:
- 補完を実行して終了する。
です。
Enjoy.
- Category(s)
- emacs
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/auto-complete/tbping
情報源による拡張が可能な auto-complete 0.1.0 をリリースしました
情報源による拡張が可能な auto-complete 0.1.0 をリリースしました。
以下の URL から取得できます。
http://www.emacswiki.org/emacs/AutoComplete
目にみえる変更は少ないのですが、 Anything ばりの拡張性を持つようになりました。さまざまな候補機能を一緒に使えるようになっており、色々夢が広がった感じになっているのではないかと思います。
前のバージョンからの主な変更点は以下のようになっています。
- 情報源による拡張
- オプションの追加
- インターフェースの変更
- ポップアップメニューの表示位置の改善
- 色々なバグフィックス
情報源による拡張
0.1.0 での一番の変更は情報源によって拡張可能にしたことです。
auto-complete は補完を実行するために以下の二つの変数を利用します。
- ac-find-function
- ac-candidate-function
ac-find-function は補完対象となる文字列の開始位置を返す関数を入れる変数で、デフォルトでは ac-default-find という関数が入っています。 ac-candidate-function は候補を文字列のリストとして返す関数を入れる変数で、前回は現在のバッファ内の単語を拾って返す関数を入れていましたが、今回の変更で ac-sources-candidate という関数を入れるようになりました。そしてこの ac-sources-candidate という関数が、情報源の定義である ac-sources` 変数を利用して候補を生成する関数で、今回の変更の要となっているのです。
ac-sources-candidate は ac-sources を利用して候補を生成するため、利用者は自分が好きな情報源を ac-sources に設定することで、さまざまな補完機能をまとめて利用することができるようになっています。
ac-sources 変数は、グローバル変数になっており、デフォルトでは ac-source-words-in-buffer 情報源のみを利用するようになっています。この情報源は前のバージョンの補完関数の内容と完全に一致するため、前のバージョンと今回のバージョンのデフォルトの挙動は完全に一致するようになっています。 0.1.0 の段階ではビルトインの情報源として以下が定義されています。
- ac-source-words-in-buffer:
- 現在のバッファ内の単語を補完する情報源
- ac-source-symbols:
- Emacs Lisp のシンボルを補完する情報源
- ac-source-abbrev:
- ローカルの abbrev を補完する情報源
- ac-source-files-in-current-dir:
- カレントディレクトリのファイルを補完する情報源
- ac-source-yasnippet:
- Yasnippet の情報源
例えば ac-source-abbrev と ac-source-words-in-buffer を情報源として使いたい場合は、 .emacs に以下のように記述します。
(setq ac-sources '(ac-source-abbrev ac-source-words-in-buffer))
これでローカル abbrev やバッファ内の単語を同時に補完できるようになります。
また、 Emacs Lisp mode の場合だけ ac-source-symbols を追加したい場合は、 .emacs に以下のように記述します。
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(make-local-variable 'ac-sources)
(add-to-list 'ac-sources 'ac-source-symbols)))
ac-sources はグローバル変数なので make-local-variable の呼び出しがないと他のバッファへも影響してしまうので注意してください。
オプションの追加
ac-auto-start というオプションを追加しました。この変数を t にしておくと、これまでと同じように文字をタイプすると自動的に補完が開始されます。この変数を nil にしておくと、文字をタイプしても自動的に補完が開始されません。 nil にする場合は以下のようなキーバインドを追加しておくとよいかもしれません。
(global-set-key "\M-/" 'ac-start)
ac-auto-start を数値にすると、補完対象の文字列の長さがその数値以上の場合のみに補完が開始されます。ちょっと文字を打つ場合は補完を開始したくないというときに便利かもしれません。
インターフェースの変更
前のバージョンではデフォルトのバインディングとして C-n と C-p を候補の選択に使っていましたが、使いにくいという声がきかれたため、デフォルトでは C-n と C-p は使わないようにしました。
C-n と C-p で候補を選択したいという人は、 .emacs に以下のコードを追加してください。
(define-key ac-complete-mode-map "\C-n" 'ac-next) (define-key ac-complete-mode-map "\C-p" 'ac-previous)
- Category(s)
- emacs
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/auto-complete-0-1-0/tbping
"Error in post-command-hook: (wrong-type-argument wholenump -16)"
原因はわかっていません。補完候補に日本語が含まれているときに出やすいようです。
環境は、Mac OS X 10.5 GNU Emacs 22.2.1 (i386-apple-darwin8.11.1, Carbon Version 1.6.0) です。
バッファの最後にいる場合は適当にスクロールするようにしておきました。
> Anonymous User さん
最新にすれば直ってると思います。
日本語対応ありがとうございました。
早速、最新版を試してみたのですが、まだ同じような現象が続いています。
補完候補に日本語などのMBCSが含まれるとき、menuが崩れ、エラーとなる状況です。
で、ac-menuを生成するところが怪しいと思い、ac-candidate-widthの値25->80に変えたところ。
menuの崩れは解消できないものの、エラーは出ないです。
一応既存のものはあるっちゃあるみたいですねー。
http://cedet.sourceforge.net/intellisense.shtml
でもMeadowで動かないのでこっちはパス
現在の最新ではどうでしょうか。
最新版で試してみました。
menuの崩れもありませんし、ac-candidate-widthをデフォルト25のままでも問題なく動作しました。
ありがとうございました。愛用させてもらいます。
ところで動作についての質問があります。
CarbonEmacs(GNU Emacs 22.2.50.1)で実行しているのですが、TABキーを入力しなくても補完一覧がイキナリ表示されてしまっています。
これは意図してのものでしょうか。説明文だと、TABキー入力をトリガにして補完リストが表示されるように読めたのですが…。
勘違いしていたらすみません。
もし可能でしたら、設定で切り替えられるようにしてもらえると嬉しいです。
仕様です。が、いきなり補完されると邪魔という意見は聞いているので、次のバージョンでそのあたりを設定で切り替えられるようにします。しばしお待ちを。
リリース当日に試させてもらったのですが、該当候補があった場合、いちいちC-n, C-p, C-mが食われちゃうとプログラムを書く速度が劇的に下がった為、一旦外しました。
該当候補があった場合、自動で候補表示というアイデアは良いと思うのですが、キーバインドをM-n, M-p, M-m等別の別のキーにバインドするというアイデアはどうでしょうか?
僕が試した場合、自動で候補が表示されてから、補完が不要な場合はいちいちC-gで補完中止する等しないといけなくて、実用的に利用できないように感じたのですが、皆さんどうされてらっしゃるんでしょうか。
ご参考までに。
http://d.hatena.ne.jp/rubikitch/20081117/1226920228
ウィンドウ右側の方で候補を出るケースでは、オーバーレイが折りかえされて、見た目がおかしくなるようです。
なるほど。非常に貴重な意見です。一応 ac-complete-mode-map を define-key で操作してやれば自分の好きなキーバインドに変更することができますが、何も考えずに今のようなキーバインドになっているので、もう一度一から考えなおしてみます。
> ウィンドウ下部で補完をした場合、候補を上部に出すパッチを書いてみました。vimみたいに。
ありがとうございます。早速取り込みました。
> ウィンドウ右側の方で候補を出るケースでは、オーバーレイが折りかえされて、見た目がおかしくなるようです。
次のバージョンで直ります。
もう少しで次のバージョンをリリースするのでもう少しお待ちを。
http://www.emacswiki.org/emacs/AutoComplete
一応テストしてますが、 unstable な扱いなので気をつけてください。今までのコメントで指摘された問題はほぼ全て解決してます。
ありがとうございました。
せっかくなので、自分のページでもauto-complete.elを紹介しておきました。
直近で欲しかったauto-complete.el 0.1.0対応のdabbrev補完ac-sourceを書いてみました。
車輪の再発明ですが。。。。
(load "wnn7egg-leim")
(set-input-method "japanese-egg-wnn7")
した環境だと自動的にac-startしませんでした。エラーは出ませんしdebug-on-errorしても何も出ませんでした。
# M-x ac-startしてあげると期待通りに動作します
参考までにwnn7egg-leimは
http://www.omronsoft.co.jp/SP/pcunix/wnn7/support/wnn7egg_src.html
http://www.omronsoft.co.jp/SP/pcunix/wnn7/support/modules/wnn7egg/wnn7-elisp-el-1.02-1.tgz
から入手できます。
EmacsWiki に AutoCompleteSources というページを作ってソース定義を公開してくれると助かります。
> hirose31 さん
うーん、よくわからりませんが、
M-x help-for-help RET k <適当な文字>
を実行して、でてきたコマンド名が self-insert-command じゃない場合は、 ac-trigger-command-p という関数の or の中に
(eq this-command '<そのコマンド名>)
を記述して再定義すると動きだすかと思います。
でばっちし動きました!!!
すでにAutoCompleteSourcesを有志の方が作成してくれていました^^
デフォルトで js2-mode でも動くようにしてもらえると嬉しいです。211行目のac-modesの定義に加えるだけだとは思いますが。
http://www.omronsoft.co.jp/SP/pcunix/wnn7/support/wnn7egg_src.html
http://www.omronsoft.co.jp/SP/pcunix/wnn7/support/modules/wnn7egg/wnn7-elisp-el-1.02-1.tgz
から入手できます。
早速、最新版を試してみたのですが、まだ同じような現象が続いています。
補完候補に日本語などのMBCSが含まれるとき、menuが崩れ、エラーとなる状況です。
で、ac-menuを生成するところが怪しいと思い、ac-candidate-widthの値25->80に変えたところ
http://www.emacswiki.org/emacs/AutoComplete
一応テストしてますが、 unstable な扱いなので気をつけてください。今までのコメントで指摘された問題はほぼ全て解決してます。
(add-to-list 'ac-ignore "//") も効果なく、どうにか対策する方法はないでしょうか。
unix(centOS)だと通常の反応速度のようです。
bridesmaid dresses, bridesmaid gowns, cheap bridesmaid
Cheap Prom Dresses
Homecoming Dresses
Quinceanera Dresses
prom Dresses
wedding dress, wedding dresses, bridesmaid dress, bridesmaid dresses, mother of the wedding dress, mother of the wedding dresses,flowergirl dress
Ball Gown Wedding Dresses
Beach Wedding Dresses
Bridesmaid Dresses
Column Wedding Dresses
Prom Dresses, Homecoming Dresses, Quinceanera Dresses
Prom Dresses
wedding Dresses
evening Dresses
runescape coins
runescape cash
runescape sale
runescape guide
runescape millions
runescape armor
runescape stuff
runescape2 gold money
cheapest runescape
fast easy runescape
rune gold money
rs gp
rs coins
rs cash
rs sale
rs stuff
rs armor
cheapest rs
buy cheap rs
fast easy rs
rs currency
runescape cheats
runescape gp
runescape coins
runescape cash
runescape sale
runescape guide
runescape millions
runescape armor
runescape stuff
runescape2 gold money
cheapest runescape
fast easy runescape
rune gold money
rs gp
rs coins
rs cash
rs sale
rs stuff
rs armor
cheapest rs
buy cheap rs
fast easy rs
rs currency
runescape cheats
rs gold
rs money
rs items
rs power leveling
rs powerleveling
rs accounts
runescape gold
runescape money
runescape gp
runescape coins
runescape cash
runescape sale
cheapest runescape
runescape items
runescape power leveling
runescape powerleveling
runescape accounts
buy runescape
cheap runescape
runescape gp
runescape coins
runescape cash
runescape sale
runescape guide
runescape millions
runescape armor
runescape stuff
runescape2 gold money
cheapest runescape
fast easy runescape
rune gold money
rs gp
rs coins
rs cash
rs sale
rs stuff
rs armor
cheapest rs
buy cheap rs
fast easy rs
runescape gp
runescape coins
runescape cash
runescape sale
runescape guide
runescape millions
runescape armor
runescape stuff
runescape2 gold money
cheapest runescape
fast easy runescape
rune gold money
rs gp
rs coins
rs cash
rs sale
rs stuff
rs armor
cheapest rs
buy cheap rs
fast easy rs