From f7031502e4bb31d55d514e73613f6f4761232808 Mon Sep 17 00:00:00 2001 From: Anthony Date: Tue, 18 Dec 2012 18:57:42 -0500 Subject: [PATCH] Multi-line prompt text offset issue (ticket #625) --- util/complete/src/main/scala/sbt/LineReader.scala | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/util/complete/src/main/scala/sbt/LineReader.scala b/util/complete/src/main/scala/sbt/LineReader.scala index 9f3ca9036..6bde880cb 100644 --- a/util/complete/src/main/scala/sbt/LineReader.scala +++ b/util/complete/src/main/scala/sbt/LineReader.scala @@ -43,13 +43,22 @@ abstract class JLine extends LineReader readLineDirectRaw(prompt, mask) private[this] def readLineDirectRaw(prompt: String, mask: Option[Char]): String = { + val newprompt = handleMultilinePrompt(prompt) val line = mask match { - case Some(m) => reader.readLine(prompt, m) - case None => reader.readLine(prompt) + case Some(m) => reader.readLine(newprompt, m) + case None => reader.readLine(newprompt) } if (inputEof.get) null else line } + private[this] def handleMultilinePrompt(prompt: String): String = { + var lines = """\r?\n""".r.split(prompt) + lines.size match { + case 0 | 1 => prompt + case _ => reader.printString(lines.init.mkString("\n") + "\n"); lines.last; + } + } + private[this] def resume() { jline.Terminal.resetTerminal