diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala index f12e06d1f..ddc2cb647 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala @@ -644,20 +644,23 @@ private[sbt] object ProgressState { val isRunning = terminal.prompt == Prompt.Running val isBatch = terminal.prompt == Prompt.Batch val isWatch = terminal.prompt == Prompt.Watch + val noPrompt = terminal.prompt == Prompt.NoPrompt if (terminal.isSupershellEnabled) { if (!pe.skipIfActive.getOrElse(false) || (!isRunning && !isBatch)) { terminal.withPrintStream { ps => - val info = if (isRunning || isBatch && pe.channelName.fold(true)(_ == terminal.name)) { - pe.items.map { item => - val elapsed = item.elapsedMicros / 1000000L - s" | => ${item.name} ${elapsed}s" + val info = + if ((isRunning || isBatch || noPrompt) && pe.channelName + .fold(true)(_ == terminal.name)) { + pe.items.map { item => + val elapsed = item.elapsedMicros / 1000000L + s" | => ${item.name} ${elapsed}s" + } + } else { + pe.command.toSeq.flatMap { cmd => + val tail = if (isWatch) Nil else "enter 'cancel' to stop evaluation" :: Nil + s"sbt server is running '$cmd'" :: tail + } } - } else { - pe.command.toSeq.flatMap { cmd => - val tail = if (isWatch) Nil else "enter 'cancel' to stop evaluation" :: Nil - s"sbt server is running '$cmd'" :: tail - } - } val currentLength = info.foldLeft(0)(_ + terminal.lineCount(_)) val previousLines = state.progressLines.getAndSet(info) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala index 53c4f3849..bd50e9e75 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala @@ -45,4 +45,5 @@ private[sbt] object Prompt { private[sbt] case object Batch extends NoPrompt private[sbt] case object Watch extends NoPrompt private[sbt] case object Loading extends NoPrompt + private[sbt] case object NoPrompt extends NoPrompt } diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index 0c2d50414..a416840ac 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -126,7 +126,8 @@ trait Terminal extends AutoCloseable { private[sbt] val progressState = new ProgressState(1) private[this] val promptHolder: AtomicReference[Prompt] = new AtomicReference(Prompt.Running) private[sbt] final def prompt: Prompt = promptHolder.get - private[sbt] final def setPrompt(newPrompt: Prompt): Unit = promptHolder.set(newPrompt) + private[sbt] final def setPrompt(newPrompt: Prompt): Unit = + if (prompt != Prompt.NoPrompt) promptHolder.set(newPrompt) /** * Returns the number of lines that the input string will cover given the current width of the diff --git a/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala b/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala index dac0c9565..397dba7a0 100644 --- a/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala +++ b/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala @@ -25,6 +25,7 @@ private[sbt] final class ConsoleChannel( override val userThread: UserThread = new UserThread(this) private[sbt] def terminal = Terminal.console + if (System.console == null) terminal.setPrompt(Prompt.NoPrompt) } private[sbt] object ConsoleChannel { private[sbt] def defaultName = "console0"