読者です 読者をやめる 読者になる 読者になる

namespaceのインデント

namespace A { namespace B { namespace C {
namespace D { namespace E {
    class hoge;
}}
    class foo : D::E::hoge
    {
    };
}}}

いま仕事で書いてるコーディングスタイルはこうなんですが、emacsのデフォルトだとnamespaceのインデントが合いません。ちょっと調べたら意外と簡単そうなので書いてみました。

(defun my-c-namespace-indent (langelem)
  (save-excursion
    (if (or (looking-at "[ \t]*namespace[ \t{]")
            (looking-at "[ \t]*namespace[ \t]+[_a-zA-Z]")
            (looking-at "[ \t]*}"))
        0
      (if (progn (goto-char (cdr langelem))
                 (skip-chars-backward " \t")
                 (bolp))
          4))))
(c-set-offset 'innamespace 'my-c-namespace-indent)

namespaceを閉じたり開いたりするときはインデントをゼロにして、それ以外は4なんですが行頭のnamespaceにしか反応しない。
うん、いい感じ。