m2ym/auto-complete — Issue #78: c++のメソッド補完が動作しない
Author: yaruopooner
Created: 2012-03-01 17:23:59+00:00
State: open

（実行環境）
Emacs：GNU Emacs 23.4.1 (i386-mingw-nt6.1.7601)

クラスのメンバ、メソッドなどを補完させるために
. -> :: などでauto-completeを実行しても補完対象のポップアップがでない。

auto-complete.el
v1.3.1までは動作していました。
v1.4にて動作しなくなりました。

ac-start の下記変更により if 評価結果が異なるため発生しているようです。

v1.3.1

(if (or (null point)
(member (setq prefix (buffer-substring-no-properties point (point)))
ac-ignores))

v1.4

(if (or (null point)
(progn
(setq prefix (buffer-substring-no-properties point (point)))
(ac-stop-word-p prefix)))

ac-stop-word-p
↓
ac-buffer-dictionary
↓
ac-file-dictionary
と呼び出されて、内部で dict/c++-mode の予約語を

(split-string (buffer-string) "\n")

した結果に、空文字 "" が含まれているため

(defun ac-stop-word-p (word)

のword に空文字が与えられた場合、

(member word (ac-buffer-dictionary)))))

の評価が空文字同士でマッチして "" が返るため以前と挙動が変わるようです。

split-stringを↓のようにしてテストしたところ期待する挙動が得えられました。

(split-string (buffer-string) "\n" t)

とりあえず、これですべて通常通り動作しました。
ちなみにdict以下のファイルは大抵最終行に改行コードがはいっているので他のモードでも同じような挙動がおきるかも。