TABを押したとき状況に応じてインデントしたり補完したり

debbrev を用いた補完は便利なんだけどデフォルトのキーバインドが押しにくい。
補完機能のキーバインドは C-SPC が VisualStudio や eclipse などで 使われているけど、emacs ではマーク設定に使用するので衝突してしまう。
そこでシェルで補完機能に使われている TAB に白羽の矢が立つのだが、こちらもインデントで使用済。
でもインデントと補完なら住み分けができるんじゃない? ってことでカーソルが行頭にあるかカーソル前が空白のときはインデント、そうでなければ補完を行う Emacsスニペットを書いてみた。C++ モードの挙動を変更する形で。

(add-hook 'c++-mode-hook 
  '(lambda ()
    (define-key c++-mode-map "\t" 
      (lambda ()
	(interactive)
	(if (looking-back "\s\\|^") (c-indent-command) (command-execute 'dabbrev-expand))))))