ようやく、時間がとれたので、ac.jsを読んでみた。
結論:
key event をトリガーにするのは諦めて、入力値の変更をトリガーにしている。 そのために、10 ms 毎に入力値を監視している(idkc() という関数)。その部分だけ抜き出すと、つまりこういうことです。
思った通りの実装ではあったが、
実際やった経験がなかったし、何しろ難読化されているので、
すぐには、突き止められなかった。
ちなみに、難読化されたコードの整形には、GNU indent (on Cygwin) を使いました。
javascript-modeも便利ですね。