auto-complete.el便利

出た当初から非常に便利に使っている。やはりトリガーキーを引き金に補完候補を出すのではなくて、常に出すというのは補完への意識がまた違った感覚になって面白い。

コードも短いため、補完の挙動を修正したり、キーバインドを修正したりしていたが、やはりかなり大幅な修正が行われているようで、コードの変化も含めて今後も楽しみ。id:rubikitchさんのコードレビューも非常に参考になる。

自分のところでは以下のような関数を追加して使っている。

;;2008-11-19版のソース用
(defun ac-next-or-next-line (arg)
  (interactive "p")
  (if (= (length ac-candidates) 1)
      (progn (ac-abort)
             (next-line arg))
    (ac-next)))
(defun ac-previous-or-previous-line (arg)
  (interactive "p")
  (if (= (length ac-candidates) 1)
      (progn (ac-abort)
             (previous-line arg))
    (ac-previous)))
(define-key ac-complete-mode-map "\C-n" 'ac-next-or-next-line)
(define-key ac-complete-mode-map "\C-p" 'ac-previous-or-previous-line)
(define-key ac-complete-mode-map [down] 'ac-next-or-next-line)
(define-key ac-complete-mode-map [up] 'ac-previous-or-previous-line)
(define-key ac-complete-mode-map ";" 'ac-complete)

まず、キーを打っていると勝手に補完候補選択モードになるため、そのままだとカーソールの移動と候補の選択がかぶってしまう。特に、短い単語だとそのまま打ち切ってしまうことが多いため、すぐに移動を行おうとした場合に候補選択が行われてしまってかなり困る。試行錯誤の結果、選択候補が1つの場合(補完せずに打ったほとんどの場合)はカーソールの移動を行いたいことが多かったので、上下キーは候補の数で挙動を変えるようにしてみた。
もう一つは、補完決定のキーがEnterだと遠すぎて、C-mでも2ストロークで連打するには辛いので、補完で使わない「;」を補完決定にしてみた。


最近はEmacsで業務システムのUIを作るというのは、実はいけているんじゃないかと思い始めてきた。EmacsFirefox+GMのように試しながら構築できる環境が、UI設計・開発には非常に重要になっている。