How to save and load history between invocations o

2019-05-07 15:34发布

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.

标签: scala jline
2条回答
该账号已被封号
2楼-- · 2019-05-07 16:13

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()
查看更多
别忘想泡老子
3楼-- · 2019-05-07 16:13

There's a comment. I thought you said there wasn't any documentation?

/**
 * {@link History} using a file for persistent backing.
 * <p/>
 * Implementers should install shutdown hook to call {@link FileHistory#flush}
 * to save history to disk.
 *
 * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
 * @since 2.0
 */
public class FileHistory

Compare to Scala REPL internal history.

查看更多
登录 后发表回答