auto-complete (2)

auto-complete - まにっき

あ、minor-mode のキー設定のやり方、ずーっと勘違いしてた。fallback しなくても nil にしてあげればよかったのか。

auto-complete のカスタマイズ

;; 関数名が `ac-' で始まらないといけない。
(defun ac-my-complete ()
  (interactive)
  (if my-ac-explicit-complete
      (ac-complete)
    (ac-abort)
    (ac-fallback-command)))

(defvar my-ac-explicit-complete nil)
(defvar my-ac-explicit-complete-commands 
  '(ac-next ac-previous ac-isearch))

(defun my-ac-set-explicit-complete ()
  (setq my-ac-explicit-complete
	(memq this-command my-ac-explicit-complete-commands)))

;; キー設定
(eval-after-load 'auto-complete
  '(progn
     (define-key ac-completing-map "\C-i" nil)
     (define-key ac-completing-map (kbd "M-TAB") nil)
     (define-key ac-completing-map "\C-s" nil)

     (define-key ac-completing-map "\r" 'ac-my-complete)
     (define-key ac-completing-map "\ei" 'ac-expand)
     (define-key ac-completing-map "\e\r" 'ac-complete)
     (define-key ac-completing-map "\es" 'ac-isearch)))

(add-hook 'auto-complete-mode-hook
          (lambda ()
            (add-hook 'post-command-hook 'my-ac-set-explicit-complete)))

とはいえ、たまに書くだけの ruby とか python のときは auto-complete が便利だけど、最近 elisp 書くときはほとんど C-[ C-i ばっかりな気がする。やっぱり慣れた方使っちゃう。