#windows #scala #sbt #jline
#Windows #scala #sbt #jline
Вопрос:
В SBT-0.7.7 JLine был включен в программу запуска, и он работает нормально. Например.:
"C:Program Files (x86)Javajre7binjava.exe" -jar C:scalasbt-launch-0.7.7.jar
Я могу использовать клавиши курсора для навигации по истории команд. Это не работает в SBT-0.13.5:
"C:Program Files (x86)Javajre7binjava.exe" -jar C:scalasbt_launch_135.jar
Когда я нажимаю клавиши курсора, вместо них появляются печатные символы, например «pHpP». В целевом файле /.history мы видим, что коды символов равны «0xE0 0x48 0xE0 0x50». Это то же самое в Java8 и в 64-разрядной Java. Я также пробовал различные версии SBT launcher и различные значения для jline.terminal, например -Djline.terminal=jline .AnsiWindowsTerminal безрезультатно. Я также пробовал -Djline.WindowsTerminal.directConsole=false — тогда клавиши курсора вообще не выполняют никаких функций. Во всех случаях я могу использовать CTRL Pи CTRL Nдля навигации по истории.
SBT-0.13. * загружает JLine из репозитория Ivy%HOMEPATH%.sbtbootscala-2.10.3org.scala-sbtsbt.13.1jline-2.11.jar Я просмотрел исходный код JLine. Версия 2.10.3 имеет примитивный конфигурационный файл keybindings.properties и функцию readVirtualKey() в WindowsTerminal.java управляет клавишами управления курсором. Все версии JLine устанавливают вспомогательную DLL во временном каталоге, например %HOMEPATH%AppDataLocalTempjline_.dll , что, по-видимому, работает.
Почему это работает неправильно? Как заставить клавиши курсора работать?
Ответ №1:
попробуйте передать следующее свойство процессу sbt, т.е.:
sbt -Dinput.encoding=Cp1252
как упоминалось здесь