问题标签 [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.

0 投票
1 回答
712 浏览

jline - 如何使用 jline3 显示所有命令

我有一个TreeCompleter按预期工作的(Scala 代码):

但是,如果用户的第一个按键是选项卡,我希望显示所有顶级节点值,这应该向他们显示可用命令。如何才能做到这一点?

包含上述代码的 github 项目在这里:https ://github.com/mslinn/jline-example/blob/master/src/main/scala/CliLoop.scala

我不在乎答案是用 Java 还是 Scala,谢谢!

0 投票
1 回答
150 浏览

java - 从 TreeCompleter 获取 jline3 命令的集合

我有一个TreeCompleter按预期工作的(Scala 代码):

如何获取命令名称的集合?对于本示例,这些名称是:bindkeyclscustomhelpsettestkeytput

包含上述代码的 github 项目在这里:https ://github.com/mslinn/jline-example/blob/master/src/main/scala/CliLoop.scala

我不在乎答案是用 Java 还是 Scala,谢谢!

0 投票
1 回答
723 浏览

jline - 如何使用 jline3 显示命令历史记录?

我希望在用户按下向上箭头键时显示最近输入的命令。

是这样定义的Terminal(Scala 代码):

是这样定义的LineReader

更新:我发现上述内容实际上适用于某些控制台,而不是其他控制台。我仍在发现什么有效,什么无效。任何见解将不胜感激。

0 投票
0 回答
30 浏览

jline3 - 我们可以用 JLine3 扩展父终端吗?

我们可以扩展父终端(我们从 JLine 开始的那个)并从那里使用可用的命令吗?

0 投票
1 回答
139 浏览

java - Java/Scala 交互式 CLI,输入时没有换行

我想创建一个接受 bash 等输入命令的 CLI,但它在终端的其余部分显示内容,因此当按下 enter 时它不能卷起所有行。它应该只是删除命令行。

我正在尝试JLine3。停止新enterRawMode行但也停止命令缓冲、编辑等。

LineReader在“原始模式”之上尝试过,但它再次带来了新的线条。

尝试使用stty 标志,但找不到专门停止新行的标志。

0 投票
1 回答
405 浏览

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...

0 投票
1 回答
290 浏览

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)或以某种方式修改它......谁能解释问题是什么?

0 投票
3 回答
764 浏览

java - JLine NonBlockingReader 的合同似乎坏了

我之前关于JLine的问题之后。操作系统:W10,使用 Cygwin。

根据 Javadoc(从源代码本地制作)peek看起来像这样:

public int peek(长时间超时)

查看输入流中是否有一个字节在等待而不实际消耗该字节。

参数: timeout - 等待的时间量,0 == 永远 返回:-1 在 eof 上,-2 如果超时过期而没有可用的输入或读取的字符(不消耗它)。

它没有说明这里涉及什么时间单位......我假设毫秒,但我也尝试使用“1”,以防万一它是秒。

peek命令功能足够强大,因为它代表您能够检测多字节 Unicode 输入,并具有一点超时独创性:假设多字节 Unicode 字符的字节到达速度将比人输入的速度快。 ..

但是,如果它永远不会解除阻塞,这意味着您必须将peek命令放入超时机制中,您必须自己滚动。下一个字符输入当然会解除阻塞。如果这是一个Enter循环while将结束。但是,如果你想在输入下一个字符之前打印一个字符(或做任何事情),那么peek超时似乎不起作用的事实会阻止你这样做。

0 投票
1 回答
2698 浏览

java - 构建后JLine3“无法创建系统终端”

我只是尝试用 Jansi 实现 JLine,但它总是抛出相同UnsupportedOperationExceptionorg.jline.terminal.impl.jansi.JansiSupportImpl#winSysTerminal. 检查此方法只有一个简单if的方法决定此异常。

Fernflower 对给定源的反编译

所以版本号一定是问题......为了检查它们,我将检测版本的代码复制到我的源代码

结果让我感到惊讶:虽然它package org.fusesource.jansi, jansi, version 1.17.1, Major: 1, Minor: 17在 IntelliJ 中返回,但控制台不起作用,因为 Intellijs 虚拟控制台,它仅package org.fusesource.jansi在我在构建后从命令行运行它时才返回。这一定是由 intellij 删除包含信息的清单引起的。它们无法打包,因为它们与运行 jar 文件所需的清单名称相同。

你们知道任何解决方案或解决方法吗?你如何处理这个异常?还是有什么我失败了?

0 投票
1 回答
309 浏览

java - Java : Jline3 : 超过一个词的自动完成

我想使用多个单词自动完成,例如:

所以所有的建议都应该包含这两个关键字。理想情况下,它应该适用于无限的关键字。

我阅读了完成 wiki,但我不知道要遵循哪条路径来实现这一目标。