sbtでCommandを呼び出すCommandを定義する

sbtでandroid開発をしていると~;android:package-debug;android:start-deviceみたいなコマンドをよく使うと思います。(たぶん
コンパイルから実機へのインストールまで一気にやってくれるので便利なのですが、コマンドが長いので打つのが面倒です。
そこでaliasっぽく上記のコマンドを呼び出すコマンドを新たに定義してみます。

既存コマンドを呼び出す

既存のコマンドを呼び出すにはCommand.processを使います。
コマンド名とstateを引数にとり、そのコマンドを実行してくれます。

def process (command: String, state: State): State

コマンドを定義する

Command.processを使用する新しいコマンドを定義するためにCommand.commandを使います。
例えば、冒頭のandroid:package〜を呼び出すコマンドandroidStartDeviceはこんな感じになります。

def androidStartDevice = Command.command("androidStartDevice") { state =>
    Command.process("android:package-debug", state)
    Command.process("android:start-device", state)
}

full configurationの設定ファイルに書く

Build.scalaなどの設定ファイルで定義したcommandをcommandsに追加してやればOKです。

  lazy val root = Project (
    id = "root",
    base = file("."),
    settings = Defaults.defaultSettings ++ Seq (
      commands ++= Seq (
        androidStartDevice
      )
    )
  )

  def androidStartDevice = Command.command("androidStartDevice") { state =>
    Command.process("reload", state)
    Command.process("android:package-debug", state)
    Command.process("android:start-device", state)
  }

あとはsbtのコンソールから定義したコマンドを呼べばよいです。
勝手に補完も効いてくれます。

% sbt
> ~androidStartDevice

こちらを参考にさせて頂きました。

sbtでコマンドを定義する - tototoshiの日記