SBT-0.7.7 在启动器中捆绑了 JLine,它工作正常。例如:
"C:\Program Files (x86)\Java\jre7\bin\java.exe" -jar C:\scala\sbt-launch-0.7.7.jar
我可以使用光标键浏览命令历史记录。它在 SBT-0.13.5 中不起作用:
"C:\Program Files (x86)\Java\jre7\bin\java.exe" -jar C:\scala\sbt_launch_135.jar
当我按下光标键时,会出现可打印的字符,例如“pHpP”。在 target/.history 文件中,我们看到字符代码为“0xE0 0x48 0xE0 0x50”。在 Java8 和 64 位 Java 中也是如此。我还尝试了各种版本的 SBT 启动器和 jline.terminal 的各种值,例如-Djline.terminal =jline.AnsiWindowsTerminal无济于事。我还尝试了 -Djline.WindowsTerminal.directConsole=false - 然后光标键根本不起作用。在所有情况下,我都可以使用CTRL+P和CTRL+N浏览历史。
SBT-0.13.* 从 Ivy 存储库%HOMEPATH%.sbt\boot\scala-2.10.3\org.scala-sbt\sbt\0.13.1\jline-2.11.jar 加载 JLine我检查了 JLine 的源代码。2.10.3 版有一个原始配置文件keybindings.properties和WindowsTerminal.java中的函数readVirtualKey()处理光标键。所有版本的 JLine 都会在临时目录(如%HOMEPATH%\AppData\Local\Temp\jline_.dll )中安装一个帮助 DLL ,这可能是有效的。
为什么它不能正常工作?如何使光标键起作用?