yasnippet と anything-c-yasnippet の起動をタブに統一

yasnippet, anything-c-yasnippetのまとめエントリー - IMAKADO::BLOG で、yasnippet と anything-c-yasnippet の起動方法が別々になっているのをタブに統一したい。

タブを押したとき、

  1. yasnippet で候補があったら、yasnippet を実行
  2. yasnippet で候補がなかったら、anything-c-yasnippet を実行
;; スニペット展開で候補がないときの処理
(defun my-anything-c-yas-complete ()
  (interactive)
  (let (word start end)
    ;; カーソル手前の単語を取得
    (save-excursion
      (setq end (point))
      (re-search-backward "^\\|\\<\\w")
      (setq start (point))
      (setq word (buffer-substring-no-properties start end)))

    ;; カーソル手前が単語でないときか、コメント/ リテラルであるときは、処理をわ
    ;; ける
    (if (or (not (string-match "\\w+" word))
            (memq (get-text-property (point) 'face)
                  '(font-lock-comment-face
                    font-lock-doc-face
                    font-lock-string-face)))
        ;; オリジナルの TAB 処理
        (funcall (or (lookup-key (current-local-map) (kbd "TAB"))
                     (lookup-key (current-global-map) (kbd "TAB"))))
      ;; anything-c-yasnippet
      (anything-c-yas-complete)
    )))
;; スニペット展開で候補がなかったら、anything でリスト表示
(setq-default yas/fallback-behavior '(apply my-anything-c-yas-complete))

2010/07/10 修正 global-local-map -> current-global-map
2010/07/11 いろいろ修正