diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index d7b857fa4..ca3a7af8e 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -990,12 +990,19 @@ object BuiltinCommands { val exchange = StandardMain.exchange exchange.channelForName(channel) match { case Some(c) if ContinuousCommands.isInWatch(s0, c) => - c.prompt(ConsolePromptEvent(s0)) + if (c.terminal.prompt != Prompt.Watch) { + c.terminal.setPrompt(Prompt.Watch) + c.prompt(ConsolePromptEvent(s0)) + } else if (c.terminal.isSupershellEnabled) { + c.terminal.printStream.print(ConsoleAppender.ClearScreenAfterCursor) + c.terminal.printStream.flush() + } + val s1 = exchange.run(s0) val exec: Exec = getExec(s1, Duration.Inf) val remaining: List[Exec] = - Exec(s"${ContinuousCommands.waitWatch} $channel", None) :: - Exec(FailureWall, None) :: s1.remainingCommands + Exec(FailureWall, None) :: Exec(s"${ContinuousCommands.waitWatch} $channel", None) :: + s1.remainingCommands val newState = s1.copy(remainingCommands = exec +: remaining) if (exec.commandLine.trim.isEmpty) newState else newState.clearGlobalLog diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index 00205d251..1943bc083 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -226,9 +226,8 @@ object MainLoop { // temporarily set the prompt to running during task evaluation c.terminal.setPrompt(Prompt.Running) (() => { - c.terminal.setPrompt(prevPrompt) + if (c.terminal.prompt != Prompt.Watch) c.terminal.setPrompt(prevPrompt) ITerminal.set(prevTerminal) - c.terminal.setPrompt(prevPrompt) c.terminal.flush() }) -> progressState.put(Keys.terminalKey, Terminal(c.terminal)) case _ => (() => ()) -> progressState.put(Keys.terminalKey, Terminal(ITerminal.get)) diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index b416446f7..c5ba2aec9 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -1344,8 +1344,7 @@ private[sbt] object ContinuousCommands { private[sbt] val postWatchCommand = watchCommand(postWatch) { (channel, state) => val cs = watchState(state, channel) StandardMain.exchange.channelForName(channel).foreach { c => - c.terminal.setPrompt(Prompt.Watch) - c.unprompt(ConsoleUnpromptEvent(Some(CommandSource(channel)))) + c.terminal.setPrompt(Prompt.Pending) } val postState = state.get(watchStates) match { case None => state @@ -1360,7 +1359,10 @@ private[sbt] object ContinuousCommands { cs.callbacks.onExit() StandardMain.exchange .channelForName(channel) - .foreach(_.unprompt(ConsoleUnpromptEvent(Some(CommandSource(channel))))) + .foreach { c => + c.terminal.setPrompt(Prompt.Pending) + c.unprompt(ConsoleUnpromptEvent(Some(CommandSource(channel)))) + } afterWatchState.get(watchStates) match { case None => afterWatchState case Some(w) => afterWatchState.put(watchStates, w - channel)