diff --git a/src/compiler/scala/tools/nsc/interpreter/JLineReader.scala b/src/compiler/scala/tools/nsc/interpreter/JLineReader.scala index 10f9724..2970276 100644 --- a/src/compiler/scala/tools/nsc/interpreter/JLineReader.scala +++ b/src/compiler/scala/tools/nsc/interpreter/JLineReader.scala @@ -42,7 +42,7 @@ class JLineReader(_completion: => Completion) extends InteractiveReader { def readOneKey(prompt: String) = { this.print(prompt) this.flush() - this.readVirtualKey() + this.readCharacter() } def eraseLine() = consoleReader.resetPromptLine("", "", 0) def redrawLineAndFlush(): Unit = { flush() ; drawLine() ; flush() } diff --git a/src/compiler/scala/tools/nsc/interpreter/session/FileBackedHistory.scala b/src/compiler/scala/tools/nsc/interpreter/session/FileBackedHistory.scala index dddfb1b..e598ac5 100644 --- a/src/compiler/scala/tools/nsc/interpreter/session/FileBackedHistory.scala +++ b/src/compiler/scala/tools/nsc/interpreter/session/FileBackedHistory.scala @@ -13,7 +13,7 @@ import FileBackedHistory._ /** TODO: file locking. */ trait FileBackedHistory extends JLineHistory with JPersistentHistory { - def maxSize: Int + def maxSize: Int = 2500 protected lazy val historyFile: File = defaultFile private var isPersistent = true diff --git a/src/compiler/scala/tools/nsc/interpreter/session/JLineHistory.scala b/src/compiler/scala/tools/nsc/interpreter/session/JLineHistory.scala index 18e0ee7..fc33192 100644 --- a/src/compiler/scala/tools/nsc/interpreter/session/JLineHistory.scala +++ b/src/compiler/scala/tools/nsc/interpreter/session/JLineHistory.scala @@ -13,7 +13,6 @@ package session trait JLineHistory extends JHistory with History { def size: Int def isEmpty: Boolean - def index: Int def clear(): Unit def get(index: Int): CharSequence def add(line: CharSequence): Unit @@ -42,7 +41,8 @@ object JLineHistory { addLineToFile(item) } } - override def toString = "History(size = " + size + ", index = " + index + ")" + override def toString = "History(size = " + size + ", _index = " + index + ")" + override def maxSize: Int = 2500 } def apply(): JLineHistory = try new JLineFileHistory catch { case x: Exception => new SimpleHistory() } diff --git a/src/compiler/scala/tools/nsc/interpreter/session/SimpleHistory.scala b/src/compiler/scala/tools/nsc/interpreter/session/SimpleHistory.scala index 9f4e2b9..8933849 100644 --- a/src/compiler/scala/tools/nsc/interpreter/session/SimpleHistory.scala +++ b/src/compiler/scala/tools/nsc/interpreter/session/SimpleHistory.scala @@ -10,7 +10,7 @@ package session import scala.collection.mutable.{ Buffer, ListBuffer } import scala.collection.JavaConverters._ -class SimpleHistory extends JLineHistory { +class SimpleHistory extends JMemoryHistory with JLineHistory { private var _index: Int = 0 private val buf: Buffer[String] = new ListBuffer[String] private def toEntries(): Seq[JEntry] = buf.zipWithIndex map { case (x, i) => Entry(i, x) } @@ -32,27 +32,27 @@ class SimpleHistory extends JLineHistory { def maxSize: Int = 2500 def last = if (isEmpty) fail("last") else buf.last - def size = buf.size - def index = _index - def isEmpty = buf.isEmpty - def clear() = buf.clear() - def get(idx: Int): CharSequence = buf(idx) - def add(item: CharSequence): Unit = buf += item - def replace(item: CharSequence): Unit = { + override def size = buf.size + override def index = _index + override def isEmpty = buf.isEmpty + override def clear() = buf.clear() + override def get(idx: Int): CharSequence = buf(idx) + override def add(item: CharSequence): Unit = buf += item + override def replace(item: CharSequence): Unit = { buf trimEnd 1 add(item) } - def entries(idx: Int): JListIterator[JEntry] = toEntries().asJava.listIterator(idx) - def entries(): JListIterator[JEntry] = toEntries().asJava.listIterator() - def iterator: JIterator[JEntry] = toEntries().iterator.asJava - - def current() = if (index >= 0 && index < buf.size) buf(index) else fail("current()") - def previous() = (index > 0) && minusOne - def next() = (index <= lastIndex) && plusOne - def moveToFirst() = (size > 0) && (index != 0) && setTo(0) - def moveToLast() = (size > 0) && (index < lastIndex) && setTo(lastIndex) - def moveTo(idx: Int) = (idx > 0) && (idx <= lastIndex) && setTo(idx) - def moveToEnd(): Unit = setTo(size) + override def entries(idx: Int): JListIterator[JEntry] = toEntries().asJava.listIterator(idx) + override def entries(): JListIterator[JEntry] = toEntries().asJava.listIterator() + override def iterator: JIterator[JEntry] = toEntries().iterator.asJava + + override def current() = if (index >= 0 && index < buf.size) buf(index) else fail("current()") + override def previous() = (index > 0) && minusOne + override def next() = (index <= lastIndex) && plusOne + override def moveToFirst() = (size > 0) && (index != 0) && setTo(0) + override def moveToLast() = (size > 0) && (index < lastIndex) && setTo(lastIndex) + override def moveTo(idx: Int) = (idx > 0) && (idx <= lastIndex) && setTo(idx) + override def moveToEnd(): Unit = setTo(size) // scala legacy interface def asList: List[JEntry] = toEntries().toList