jde-mode でのインデントスタイル

どうもです。

何? javaでのインデントスタイルの慣習みたいなんがあるの?

public class foo {
  public Foo() {
  }

  public void main(String[] args) {
    try {
      System.out.println("Hi, there.");
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

今までは,↑みたいに書いていたんですが,どうやら,有名な本とかを見るに,

public class Foo
{
  public Foo()
  {
  }

  public void main(String[] args)
  {
    try
    {
      System.out.println("Hi, there.");
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}

って書くのがよろしいとの判断を下しました,ワタシが。


そこで,何も考えずに,書き方を変えたら,

public Foo()
  {
  }

って,インデントされた。あうあうあー?


関係していそうな,設定は以下。

(defun my-jde-mode-hook-func ()
  (interactive)
  (c-set-style "stroustrup")
  (setq c-basic-offset 2)
  (setq tab-width 2)
  (setq indent-tabs-mode nil)
  ;; ...
  )


で,ググったりヘルプ見たりした結果,以下のようにすることで解決。

(defun my-jde-mode-hook-func ()
  (interactive)
  (c-set-style "stroustrup")
  (setq c-basic-offset 2)
  (c-set-offset 'inline-open 0) ;; <--- これを追加。
  (setq tab-width 2)
  (setq indent-tabs-mode nil)
  ;; ...
  )

道程

C-cC-s で,対象となるsyntactic-symbolを見つけることができる。
もしくは,C-cC-o を使うと,インタラクティブに変更することができます。


で,調べると,inline-open というシンボルらしい。
そして,その値は,「+」になっていた。
なので,こいつを「0」にしたらいいんじゃね?
と,これが罠だったらあっさりはまる感じの発想で変更しました。
結果,目標達成です!


で,この設定を.emacsに書いときましょっというわけで,上記のようになるわけです。
c-set-offset 関数は,色んなシンボルを変更できるので便利そうですね。
オレオレ色に染めたいときにはとても重宝しそうですね。

まとめ

(c-set-offset 'inline-open 0)