diff --git a/main/SettingGraph.scala b/main/SettingGraph.scala index dda05d482..8b0e7fbc9 100644 --- a/main/SettingGraph.scala +++ b/main/SettingGraph.scala @@ -57,7 +57,7 @@ object Graph // [info] | // [info] +-quux def toAscii[A](top: A, children: A => Seq[A], display: A => String): String = { - val maxColumn = jline.Terminal.getTerminal.getTerminalWidth - 8 + val maxColumn = JLine.usingTerminal(_.getTerminalWidth) - 8 val twoSpaces = " " + " " // prevent accidentally being converted into a tab def limitLine(s: String): String = if (s.length > maxColumn) s.slice(0, maxColumn - 2) + ".." diff --git a/util/complete/LineReader.scala b/util/complete/LineReader.scala index 1318061af..ecd1eafd9 100644 --- a/util/complete/LineReader.scala +++ b/util/complete/LineReader.scala @@ -62,10 +62,16 @@ private object JLine val t = terminal t.synchronized { f(t) } } - def createReader() = + /** For accessing the JLine Terminal object. + * This ensures synchronized access as well as re-enabling echo after getting the Terminal. */ + def usingTerminal[T](f: jline.Terminal => T): T = withTerminal { t => - val cr = new ConsoleReader t.enableEcho() + f(t) + } + def createReader() = + usingTerminal { t => + val cr = new ConsoleReader cr.setBellEnabled(false) cr }