Как установить системное свойство jline.terminal (чтобы исправить отсутствие эха при наборе текста в cygwin mintty)?

Я начал использовать sbt на cygwin,, но у меня возникла проблема, что мой ввод не отображался эхом в console.

Следуя этому совету, sbt теперь повторяется, например:

$ sbt
[info] Loading project definition from D:\cygwin\home\Administrator\scala-2.11.2\coursera\example\project\project
[info] Loading project definition from D:\cygwin\home\Administrator\scala-2.11.2\coursera\example\project
[info] Set current project to progfun-example (in build file:/D:/cygwin/home/Administrator/scala-2.11.2/coursera/example/)
> ; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")
[info] ans: java.lang.String = jline.UnixTerminal
> console
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.10.4 (Java HotSpot(TM) Client VM, Java 1.7.0_67).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import example.Lists._
import example.Lists._

scala> 

Я попытался автоматизировать это исправление, введя строку export SBT_OPTS="-Djline.terminal=scala.tools.jline.UnixTerminal" в ~/.sbtconfig, но, возможно, я использую неправильный синтаксис, так как эхо не работает.

Как заставить sbt console автоматически использовать ; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")?


person boardrider    schedule 22.09.2014    source источник


Ответы (1)


В sbt столько всего интересного...

> inspect initialize
[info] Setting: Unit = ()
[info] Description:
[info]  A convenience setting for performing side-effects during initialization.
[info] Provided by:
[info]  */*:initialize
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:153
[info] Delegates:
[info]  *:initialize
[info]  {.}/*:initialize
[info]  */*:initialize
[info] Related:
[info]  */*:initialize

Вы можете использовать initialize, который называется для выполнения побочных эффектов во время инициализации. Со следующим в ~/.sbt/0.13/default.sbt вы можете выполнить System.setProperty:

initialize := {
  System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")
}

В оболочке sbt выполните eval sys.props("jline.terminal"), чтобы проверить это. Он отлично работает в console (сбросить eval при вызове sys.props).

person Jacek Laskowski    schedule 22.09.2014
comment
Не могли бы вы объяснить, как ваше предложение автоматизируется? (Как Scala neubee) все, что я могу понять, это то, что мне нужно что-то вводить каждый раз, когда я запускаю sbt. Я неправильно понимаю, и я действительно могу ввести ваше предложение в какой-нибудь файл инициализации sbt, чтобы действие выполнялось автоматически при запуске sbt? - person boardrider; 22.09.2014
comment
Смотрите мое обновление к ответу. Откройте ~/.sbt/0.13/default.sbt и скопируйте строки с initialize. Начать sbt. - person Jacek Laskowski; 22.09.2014
comment
Не могли бы вы объяснить, как ваше предложение автоматизируется? (Как Scala neubee) Если я вас правильно понял, мне нужно создать build.sbt в каждом проекте и поместить туда строку, которую вы предлагаете, а именно: $ cat build.sbt initialize := { System.setProperty(jline. terminal, scala.tools.jline.UnixTerminal) } При этом возникает [ошибка] java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: scala.tools.jline.UnixTerminal (и отсутствие повторения ввода) - person boardrider; 23.09.2014
comment
См. github.com/jline/jline2/wiki/Terminal-Factory-Configuration где вы можете найти возможные значения для управления вашим терминалом. - person Jacek Laskowski; 23.09.2014
comment
Спасибо за ваше предложение, @Jacek. Однако на данный момент я перестал использовать sbt/scalaна Cygwin и не могу оценить ваше решение: поэтому не могу позеленеть знак v. - person boardrider; 15.09.2015