【问题标题】:How to set system property jline.terminal (to fix no echo while typing on cygwin's mintty)?如何设置系统属性 jline.terminal(在 cygwin 的 mintty 上键入时修复无回声)?
【发布时间】:2014-09-22 13:10:31
【问题描述】:

我已开始在 cygwin, 上使用 sbt,但遇到的问题是我的输入无法在 console 中回显。

advice 之后,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> 

我尝试通过在 ~/.sbtconfig 中输入行 export SBT_OPTS="-Djline.terminal=scala.tools.jline.UnixTerminal" 来自动执行此修复,但我可能没有使用正确的语法,因为回显似乎不起作用。

如何让sbt console自动使用; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")

【问题讨论】:

    标签: sbt mintty


    【解决方案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 shell 中执行 eval sys.props("jline.terminal") 来检查它。它在console 中运行良好(调用sys.props 时删除eval)。

    【讨论】:

    • 您能解释一下您的建议是如何自动化的吗? (作为一个 Scala neubee)我能理解的是每次我开始 sbt 时我都必须输入一些东西。我的理解是否错误,我实际上可以在一些 sbt 初始化文件中输入您的建议,以便在 sbt 启动时自动执行操作?
    • 查看我对答案的更新。打开~/.sbt/0.13/default.sbt 并复制带有initialize 的行。开始sbt
    • 您能解释一下您的建议是如何自动化的吗? (作为Scala neubee)如果我理解正确,我需要在每个项目中创建一个build.sbt,并在其中放入您建议的行,即: $ cat build.sbt initialize := { System.setProperty("jline .terminal", "scala.tools.jline.UnixTerminal") } 这样做会产生“[error] java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: scala.tools.jline.UnixTerminal”(并且没有回显输入)
    • 查看github.com/jline/jline2/wiki/Terminal-Factory-Configuration,您可以在其中找到可能的值来控制您的终端。
    • 感谢您的建议,@Jacek。但是,我暂时停止在 Cygwin 上使用 sbt/scala 并且无法评估您的解决方案:因此无法将 v 标志设为绿色。
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多