ac-mode は拙作 pbe-complete の後継として開発されているものです. pbe-complete の開発は終了しました.
ac-mode の ac とは Advanced Completion の略で, 当初の構想で pbe の略でもある Programing By Example とはと大きく外れてしまい, 全然名前が体をあらわしていなかったため改名しました. (Arayuru HOkan: aho-mode しようかと最後まで悩みました)
PATH の補完, URL の補完, 文字列の補完 (dabbrev), インデントを ひとつのコマンド, つまりひとつのキーでやってしまおうというものです.
例えば文字列 "~/.em" の後にこのコマンドを実行すれば "~/.emacs" と 補完され, "http://www.t" の後に実行すれば "http://www.taiyaki.org/" と 補完されます. さらに文字列の補完よりも行のインデントが適切だと 判断した場合は, インデントを実行するようになっています.
http://www.taiyaki.org/elisp/ac-mode/src/ から ac-mode.el をダウンロードしてください.
ac-mode.el を ~/elisp に置いたとして, 次の 2 行を .emacs に追加してください. 最初の 1 行目は既に書かれていれば必要ありません.
(setq load-path (cons (expand-file-name "~/elisp") load-path)) (autoload 'ac-mode "ac-mode" "Minor mode for advanced completion." t nil)
URL の補完をするためにはホームディレクトリに urls.txt を 作成する必要があります. urls.txt のフォーマットは各行が http: で始まるプレーンテキストでソートされている必要があります. 手で書くことももちろん可能ですが, 以下のスクリプトによって netscape のヒストリから作成可能です.
strings ~/.netscape/history.dat | grep "^http://.*\(/\|\.html\?\)$" | sort | uniq > ~/urls.txt
M-x ac-mode と実行すると, ac-mode の状態がトグルします. TAB キー (\C-i) を押すと文脈を (それなりに) 判断して補完, またはインデントします.
補完をしているときにもう一度 TAB キーを押すと次の候補が表示されます. 補完中にスペースキーを押すとその補完で確定と判断し, カーソルが 単語末まで移動します. またカーソルの移動および文字入力によって, 補完候補の絞り込みが可能になります.
ほとんどの単語上の場合.
文字列末で実行した場合はそのまま補完動作がはじまりますが,
文字列中で実行した場合, 最初の TAB キー (\C-i) は無視されます.
TAB キーをそのまま繰り返すと補完動作がはじまります.
2002-02-17 版以降では bigram 補完にも対応しました. 例えば "This is" という文字列があった場合に, "This " と入力した後で 補完を行うと "This is" と補完されます.
以下のカスタマイズをする場合は .emacs の設定を前述のものから, 次のものに変更してください.
(setq load-path (cons (expand-file-name "~/elisp") load-path)) (load "ac-mode")
Text に限らずたいていのメジャーモードには <モード名>-hook があるので これを利用します.
(add-hook 'text-mode-hook 'ac-mode-on)
ファイルを開いたときに必ず find-file-hooks が呼ばれるのでこれを利用します. 現在のモードが何であるかは M-x describe-variable [enter] major-mode [enter] で確認できます.
(setq ac-mode-exception '(dired-mode hex-mode)) (add-hook 'find-file-hooks 'ac-mode-without-exception)
ac-mode では単語の補完後, カーソルは補完候補の共通部分までしか移動しません. 例えば "ac-mode", "ac-complete" の 2 つがある場合, "ac-mode" と補完しますが カーソルは "ac-" の位置で留まります. これは dabbrev-expand と異なる動作です.
ac-mode では補完後, スペースキー (ac-enter) を押すと補完単語末まで カーソルが移動しますが, dabbrev-expand と同じ動作を行いたい場合は カスタマイズ変数 ac-mode-goto-end-of-word を nil 以外に設定して下さい.
(setq ac-mode-goto-end-of-word t)
ac-mode 限定のメーリングリストではありませんが, 小松が作成している ELisp 全般に関してのメーリングリストを QuickMLで作成しました.
参加される方は, 以下のようなメールを送信してください. また Cc: に自分のメールアドレスを付けないでください. QuickML の仕様上, Cc: に参加者以外のメールアドレスがあると 参加できません.
To: elisp@taiyaki.quickml.com From: (自分のアドレス) Cc: komatsu@taiyaki.org Subject: 参加します (お名前) (本文にかるく自己紹介でもお願いします, 何も書かれていないと QuickML のシステム上登録できません.)