mirror of https://github.com/sbt/sbt.git
43 lines
881 B
Scala
43 lines
881 B
Scala
/* sbt -- Simple Build Tool
|
|
* Copyright 2008, 2009 Mark Harrah
|
|
*/
|
|
package xsbt.boot
|
|
|
|
import jline.ConsoleReader
|
|
abstract class JLine extends NotNull
|
|
{
|
|
protected[this] val reader: ConsoleReader
|
|
def readLine(prompt: String) = JLine.withJLine { unsynchronizedReadLine(prompt) }
|
|
private[this] def unsynchronizedReadLine(prompt: String) =
|
|
reader.readLine(prompt) match
|
|
{
|
|
case null => None
|
|
case x => Some(x.trim)
|
|
}
|
|
}
|
|
private object JLine
|
|
{
|
|
def terminal = jline.Terminal.getTerminal
|
|
def createReader() =
|
|
terminal.synchronized
|
|
{
|
|
val cr = new ConsoleReader
|
|
terminal.enableEcho()
|
|
cr.setBellEnabled(false)
|
|
cr
|
|
}
|
|
def withJLine[T](action: => T): T =
|
|
{
|
|
val t = terminal
|
|
t.synchronized
|
|
{
|
|
t.disableEcho()
|
|
try { action }
|
|
finally { t.enableEcho() }
|
|
}
|
|
}
|
|
}
|
|
object SimpleReader extends JLine
|
|
{
|
|
protected[this] val reader = JLine.createReader()
|
|
} |