notes/pl/scala/tools/amm/sample/presentation-mode.txt
Ihar Hancharenka 5dff80e88e first
2023-03-27 16:52:17 +03:00

54 строки
2.0 KiB
Plaintext

https://www.reddit.com/r/scala/comments/5gpujf/preloading_code_snippets_in_the_ammonite_repl_you/
https://gist.github.com/lihaoyi/1ebdd89b065a741a1ea72b5d780b9ab1
lihaoyi Ammonite$ amm
Loading...
Welcome to the Ammonite Repl 0.8.0
(Scala 2.11.8 Java 1.8.0_112)
@ {
val funnyFilter = ammonite.terminal.Filter.simple(" ")((b, c, m) =>
if (FunnyFrontEnd.nextLine == Nil) (b.take(c) ++ " " ++ b.drop(c), c+1)
else {
val head :: tail = FunnyFrontEnd.nextLine
FunnyFrontEnd.nextReader = new java.io.StringReader(head)
FunnyFrontEnd.nextLine = tail
(b, c)
}
)
object FunnyFrontEnd extends ammonite.repl.AmmoniteFrontEnd(funnyFilter){
var nextLine = List.empty[String]
var nextReader = new java.io.StringReader("")
def setNextLines(s: Seq[String]) = nextLine = s.toList
override def readLine(reader: java.io.Reader,
output: java.io.OutputStream,
prompt: String,
colors: ammonite.util.Colors,
compilerComplete: (Int, String) => (Int, Seq[String], Seq[String]),
history: IndexedSeq[String]) = {
val readerX = new java.io.Reader{
def close() = {reader.close(); nextReader.close()}
def read(cbuf: Array[Char], off: Int, len: Int) = {
val preRead = nextReader.read(cbuf, off, len)
if(preRead == len) preRead
else{
val preReadNum = math.max(0, preRead)
val postRead = reader.read(cbuf, off + preReadNum, len - preReadNum)
if (postRead == -1) -1 else postRead + preReadNum
}
}
}
super.readLine(readerX, output, prompt, colors, compilerComplete, history)
}
}
repl.frontEnd() = FunnyFrontEnd
}
funnyFilter: AnyRef with ammonite.terminal.Filter{def op(ti: ammonite.terminal.TermInfo): Option[ammonite.terminal.TermState]} = $sess.cmd0.funnyFilter:1
defined object FunnyFrontEnd
@ FunnyFrontEnd.setNextLines(Seq("println(\"Hello\")", "println(\"World\")"))
@ println("Hello")
Hello
@ println("World")
World