auto-complete.elの環境整備

auto-complete.el便利 - 技術日記@kiwanami

ac-next-or-next-line/ac-previous-or-previous-lineは気に入ったのでそのまま流用。「;」で補完確定はホームポジション上だけになかなかいいと思う。名案。
C-M-p/C-M-nにac-previous/ac-nextを割り当てていたがなじまないのでやめた。つい癖でC-nとか押してしまう。

やはりif + prognは美しくないので条件を反転させておいた。

(defun ac-next-or-next-line (arg)
  (interactive "p")
  (if (/= (length ac-candidates) 1)
      (ac-next)
    (ac-abort)
    (next-line arg)))
(defun ac-previous-or-previous-line (arg)
  (interactive "p")
  (if (/= (length ac-candidates) 1)
      (ac-previous)
    (ac-abort)
    (previous-line arg)))

「;」でのみ補完確定するならば、C-mのバインドを空にしておくとEnterが元の挙動になる。

(define-key ac-complete-mode-map "\C-m" nil)

C-mでも2ストロークで連打するには辛いので、補完で使わない「;」を補完決定にしてみた。

辛いのかな…つーか、候補選択でC-n/C-p使うからその流れでC-m押しちゃうんだよね。
本当に辛いならac-next/ac-previousに「,」なり「/」なり割り当てたほうがいいかもしれない。候補選択は多くの場合ac-nextだから「,」にac-nextを割り当ててみるか。「:」だと「:」を含むシンボルが補完できんから。

(define-key ac-complete-mode-map "," 'ac-next)

しばらくしたら慣れるかな。