sbt のプロンプトに git のブランチ名を表示させる

sbt は簡単にプロンプトが変えられることはご存知でしょうか。


build.sbt で shellPrompt を定義するだけです。
shellPrompt の型は SettingKey[State => String] なので := の右側には State => String という型の関数を定義します。
state ってなにって感じですが、簡単なものならとりあえず気にせずに設定できます。


固定の文字列を返すパターン

shellPrompt := { state => "( ゚A゚ )> " }


毎回変わるパターン

shellPrompt := { state => (new java.util.Date).toString + "> "}


よしださんがこの機能を使って git のブランチを表示させることをやっていて、

shellPrompt := { state =>
  Project.extract(state).currentProject.id +
    "git branch".lines_!.find{_.head == '*'}.map{_.drop(1)}.getOrElse("") + "> "
}


便利そうだったので、だいたいそんな感じのやつを sbt-git にプルリってマジられました。
git のブランチを zsh で表示させるとかは結構前からやっていてすごく便利。

https://github.com/sbt/sbt-git/pull/17

あと stash の状態とかも付け足すしても便利かなあ。


shellPrompt でむずかしいのは、すでにカスタマイズしてる人の設定とぶつかってどっちかが上書かれちゃうってとこですね。うまく合成できたらいいんですが。今回はあまり考えないことにしました。