问题标签 [jline3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jline - 如何使用 jline3 显示所有命令
我有一个TreeCompleter
按预期工作的(Scala 代码):
但是,如果用户的第一个按键是选项卡,我希望显示所有顶级节点值,这应该向他们显示可用命令。如何才能做到这一点?
包含上述代码的 github 项目在这里:https ://github.com/mslinn/jline-example/blob/master/src/main/scala/CliLoop.scala
我不在乎答案是用 Java 还是 Scala,谢谢!
java - 从 TreeCompleter 获取 jline3 命令的集合
我有一个TreeCompleter
按预期工作的(Scala 代码):
如何获取命令名称的集合?对于本示例,这些名称是:bindkey
、cls
、custom
、help
、set
、testkey
和tput
。
包含上述代码的 github 项目在这里:https ://github.com/mslinn/jline-example/blob/master/src/main/scala/CliLoop.scala
我不在乎答案是用 Java 还是 Scala,谢谢!
jline - 如何使用 jline3 显示命令历史记录?
我希望在用户按下向上箭头键时显示最近输入的命令。
是这样定义的Terminal
(Scala 代码):
是这样定义的LineReader
:
更新:我发现上述内容实际上适用于某些控制台,而不是其他控制台。我仍在发现什么有效,什么无效。任何见解将不胜感激。
jline3 - 我们可以用 JLine3 扩展父终端吗?
我们可以扩展父终端(我们从 JLine 开始的那个)并从那里使用可用的命令吗?
java - Groovy: JLine does not wait for input Gradle
OS: Windows 10, mainly using Cygwin.
I put together a DummyMain.groovy file like so:
}
When I run this by going groovy DummyMain
in its own directory this works as expected and fills me with joy: the reader.read()
line pauses for the next character, and then processes it (i.e. before the user presses Enter to end the line).
But when I comment out the @Grab
and put this line in build.gradle
:
and try to run this file using the simplest possible build.gradle
it fails: the while
loops spins on endlessly without waiting for user input, i.e. endlessly printing "read |-1|...".
This failure to wait happens if I use a Cygwin console or a Windows CMD console to go gradle run
.
From the other print line I can tell that the reader here is class NonBlockingInputStreamReader
in all 3 cases (i.e. Gradle via Cygwin, Gradle via Windoze CMD or groovy
command line command).
However, I find that if I do a gradle installDist
, the resulting "distributed" version of the app works OK: responds to each character entered and waits for the next. Thank God for that! But for testing and development purposes it'd be nice if a solution could be found to the problem of trying to run with Gradle. It seems likely that some tests will fail when they shouldn't as a result of this.
reply to tkruse
here's the build.gradle. DummyMain.groovy is under src\main\groovy\core.
The answerer to the only answer (so far) is the author of JLine. I think it's very unlikely that Gradle uses JLine, and that if that were the case Guillaume Nodet would have mentioned that...
java - JLine 的编码问题
Jline是一个模块,用于在用户按下之前在控制台拦截用户输入Enter
。它使用 JNA 或类似的魔法。
我正在用它做一些实验,当我输入更多“异国情调”的Unicode字符时,我遇到了编码问题。这里的操作系统是 W10,我使用的是 Cygwin。这也是在 Groovy 中,但对 Java 人来说应该是显而易见的。
这适用于单字节 Unicode,并且像“é”(2 字节)这样的字母可以得到很好的处理。但是“ẃ”出了问题:
实际上,当您输入“ẃ”时它输出的二进制文件是 11100001:10111010: 10010010。
这转换为 U+1E92,这是另一个波兰字符“Ẓ”。这确实是打印在response
String
.
不幸的是,JLine 包给你这个reader
,这是类org.jline.utils.NonBlocking$NonBlockingInputStreamReader
......所以我真的不知道我能做些什么来调查它的编码(我假设是 UTF-8)或以某种方式修改它......谁能解释问题是什么?
java - JLine NonBlockingReader 的合同似乎坏了
继我之前关于JLine的问题之后。操作系统:W10,使用 Cygwin。
根据 Javadoc(从源代码本地制作)peek
看起来像这样:
public int peek(长时间超时)
查看输入流中是否有一个字节在等待而不实际消耗该字节。
参数: timeout - 等待的时间量,0 == 永远 返回:-1 在 eof 上,-2 如果超时过期而没有可用的输入或读取的字符(不消耗它)。
它没有说明这里涉及什么时间单位......我假设毫秒,但我也尝试使用“1”,以防万一它是秒。
此peek
命令功能足够强大,因为它代表您能够检测多字节 Unicode 输入,并具有一点超时独创性:假设多字节 Unicode 字符的字节到达速度将比人输入的速度快。 ..
但是,如果它永远不会解除阻塞,这意味着您必须将peek
命令放入超时机制中,您必须自己滚动。下一个字符输入当然会解除阻塞。如果这是一个Enter
循环while
将结束。但是,如果你想在输入下一个字符之前打印一个字符(或做任何事情),那么peek
超时似乎不起作用的事实会阻止你这样做。
java - 构建后JLine3“无法创建系统终端”
我只是尝试用 Jansi 实现 JLine,但它总是抛出相同UnsupportedOperationException
的org.jline.terminal.impl.jansi.JansiSupportImpl#winSysTerminal
. 检查此方法只有一个简单if
的方法决定此异常。
所以版本号一定是问题......为了检查它们,我将检测版本的代码复制到我的源代码
结果让我感到惊讶:虽然它package org.fusesource.jansi, jansi, version 1.17.1, Major: 1, Minor: 17
在 IntelliJ 中返回,但控制台不起作用,因为 Intellijs 虚拟控制台,它仅package org.fusesource.jansi
在我在构建后从命令行运行它时才返回。这一定是由 intellij 删除包含信息的清单引起的。它们无法打包,因为它们与运行 jar 文件所需的清单名称相同。
你们知道任何解决方案或解决方法吗?你如何处理这个异常?还是有什么我失败了?