Search code examples
scalajline

How to save and load history between invocations of Scala JLine


I'm using Scala JLine in my CLI program. It's working fine, but it forgets my history every time I restart my program. I see a class called FileHistory, and I see the ConsoleReader class has a method called setHistory() which takes an instance of FileHistory. I would expect calling that method would cause it to create or load and save a file containing my history. But it doesn't.

Unfortunately the documentation is nigh nonexistent. How can I make it so the next time I run my JLine-enabled program it remembers the commands that I had typed in the previous run?

Update

Correct answer given below by mirandes. Thanks to mirandes and som-snytt both for their helpful (yea solvent) responses.


Solution

  • This worked for me:

    import scala.tools.jline.console.ConsoleReader
    import scala.tools.jline.console.history.FileHistory
    import java.io.File
    
    val reader : ConsoleReader = new ConsoleReader() 
    
    val history = new FileHistory(new File(".history"))
    reader.setHistory(history) 
    

    Before exiting the app, make sure you flush the history.

    reader.getHistory.asInstanceOf[FileHistory].flush()