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

Emacs の標準のインデント動作を変更したい -- namespace ではインデントしたくないんだ! --

問題点

namespace の {} 内でインデントしてしまう。

namespace My {
    namespace World {
        void func()
        {
            // ...
        }
    }
}

namespace はネストすることも多いし、インデントしたくないなあ……。 例えばこんな感じで…。

namespace My {
namespace World {

void func()
{
    // ...
}

} // End of namespace World
} // End of namespace My

さらにもともとインデントしているファイルは 勝手にインデントを変更せず、そのままにしたいなあ…

namespace Their {
    namespace World {
        void func()
        {
            // ...
        }
    }
}

処方箋

Emacs の設定を変更。c-offset-alist の innamespace などの設定を (c-lineup-dont-change) に変える。

Customize で C Offsets Alistを変える。

  1. M-x customize
    • Programming で Enter
    • Language で Enter
    • C を選択して Enter
    • C Offsets Alist を選択して Enter
    • (M-x customize-apropos で c offsets alist を検索してもいける)
  2. C Offsets Alist の 一覧が開く
  3. 下記の設定値の左のチェックボックスを ON にして…
    • namespace-open
    • namespace-close
    • innamespace
  4. 値を (c-lineup-dont-change) に書き換える
  5. State ボタンをおして…
  6. Save for Future Sessions を実行 ==> .emacs とかに設定が書かれる。

以上。

おまけ

  • extern "C" {} とかもインデントしたくない場合は
    • extern-lang-open
    • extern-lang-close
    • inextern-lang
  • も同じ設定にする。

参考資料