Стрелки клавиш курсора не работают в SBT 0.13.* . Подозреваю Jline. Как их включить?

#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
 

как упоминалось здесь