如何使用Java在终端获取当前光标位置?

4
我看过了JLine、Lanterna和其他工具,但我没有发现一种简单的方法来查找终端中当前光标的位置。我看过了许多转义代码、tput等工具,但我正在寻找用Java获取光标所在列和行的最简单方法。也许我没有在这些库中找到正确的调用方式...
如何最简单地获取终端中光标的行和列?
我正在寻找一个纯文本库,以便我可以重新编写缓冲区。我知道ansi转义代码以及如何操作它们以产生我想要的效果。我的目标是制作一个Java提示库,类似于Node的Inquirer.js。它有许多从用户那里获取信息的简单方法(列表、问题、拆分列表等)。所有这些都是文本——因此没有UI,因此不使用Swing。我不想使用Swing,我只想要一个良好的终端UI体验。

你需要这个功能在多个操作系统上工作,还是只需要一个?我有一种感觉它可能需要一些本地代码。 - Sam
使用ANSI控制字符看起来很有前途,如果您不担心支持Windows的话。 - Sam
输出 <ESC>[6n 应该返回输入类似于 <ESC>[{Row};{Column}R 的内容,其中 <ESC> 取决于您使用的终端类型。可以在此处找到类似于 bash 的解决方案:https://dev59.com/-XE85IYBdhLWcg3w3Xdp。 - Sam
@Sam,现在唯一剩下的部分就是找出如何让Java运行控制字符并随后读取它。我想将该控制序列写入标准输出,然后从标准输入解析<ESC>[{Row};{Column}R<ESC>可能会起作用——必须尝试一下...(我有些怀疑,但值得一试)。 - lucidquiet
@Krispy 是的。我已经在谷歌上搜索过了。我也意识到机会很小。但这并不意味着不可能或者我不应该问。我也觉得这个赏金值得一试...但是没有运气。 - lucidquiet
显示剩余6条评论
2个回答

0

编辑2

通过http://docs.oracle.com/javase/7/docs/api/javax/swing/text/Caret.html Caret接口,您可以创建一个CaretListener对象以查找插入符号位置。

因此,您需要创建一个新的CaretListener,以响应GUI,并使用getDot()方法。

这可能会有所帮助...无论如何都附加了代码。 http://bestjavapractices.blogspot.com.au/2011/11/get-current-caret-position-in.html

目前,这只适用于GUI/Swing组件,我不确定这是否适用于您想要的终端应用程序,在该应用程序中,我假设您将使用命令行参数等来使其正常工作。

我认为您无法这样做,因为我认为终端实际上只是打印输出,但无论如何,我会继续检查一段时间。

如果您能告诉我您尝试使用插入符号进行的操作,那将有助于我的努力。

希望这有所帮助。

如果不行,您可能需要查看更多的文本工具包,比如


抱歉,我所说的光标并不是指鼠标光标...我指的是插入符号。我的错误。在文本意义上的行和列。 - lucidquiet
这个链接可能会有帮助:http://docs.oracle.com/javase/7/docs/api/javax/swing/text/Caret.html。我会尽快检查并回复! - BoydyBoydy
我正在寻找一个纯文本库,以便我可以重新编写缓冲区。我知道ansi转义代码以及如何操作它们以产生我想要的效果。我试图做的是制作一个Java提示库,类似于Node的Inquirer.js。它有许多简单的方法从用户那里获取信息(列表、问题、分割列表等)。所有这些都是文本--所以所有这些都没有UI,因此不使用Swing。我不想要Swing,我只想要一个良好的终端UI体验。 - lucidquiet
好的,抱歉,我希望有更多知识的人能够帮助你。祝你好运! - BoydyBoydy

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接