Emacsのauto-completeで候補と入力文字が完全に一致している時にRETでac-completeすると、newlineしてしまうので抑止

Emacsのauto-completeをつかっていると、ちょっとカユい挙動があるのです。

(define-key ac-complete-mode-map (kbd "\r") 'ac-complete)

やac-dwim状態だと、リターンキーがac-completeしてくれます。

で、たとえば以下のような時、

new

と入力し、候補が

new
news
newline

みたいな状態で、newsを選ぶと、newsのあとでキャレットがきっちり止まってくれる。

でも、newを選ぶと、newlineしちゃうのです。

気持ちとしては、newを選んだ時も、newsを選んだ時も、candidatesから選ぶ、という同じことをしているのだけど、完全一致した候補を選ぶとnewlineまで付いて来ちゃうというのが、ちょっと嫌なんですね。

ので、筋が良いか悪いかわからないけど、defadviceしてみたら、とりあえずなんちゃってで回避できたみたいです。

(defadvice ac-complete (after advice-ac-complete activate)
  "Inhibit newline when full string was matched with candidate."
  (when (memq this-command '(newline))
    (delete-backward-char 1)
    (message "full string was matched with candidate.")))

ジャンル: Emacs