如何最简单地获取终端中光标的行和列?
我正在寻找一个纯文本库,以便我可以重新编写缓冲区。我知道ansi转义代码以及如何操作它们以产生我想要的效果。我的目标是制作一个Java提示库,类似于Node的Inquirer.js。它有许多从用户那里获取信息的简单方法(列表、问题、拆分列表等)。所有这些都是文本——因此没有UI,因此不使用Swing。我不想使用Swing,我只想要一个良好的终端UI体验。
编辑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组件,我不确定这是否适用于您想要的终端应用程序,在该应用程序中,我假设您将使用命令行参数等来使其正常工作。
我认为您无法这样做,因为我认为终端实际上只是打印输出,但无论如何,我会继续检查一段时间。
如果您能告诉我您尝试使用插入符号进行的操作,那将有助于我的努力。
希望这有所帮助。
如果不行,您可能需要查看更多的文本工具包,比如
Lanterna 的当前版本可以使用 ANSI CSI 读取光标位置: https://github.com/mabe02/lanterna/blob/master/src/main/java/com/googlecode/lanterna/terminal/ansi/ANSITerminal.java#L266
在这里,您可以找到一个简单的 Java 解决方案,如何发送 ANSI 命令并从 System.in 中读取报告的光标位置。 如何在 JAVA 中读取终端给出的光标位置(ANSI 设备状态报告)
<ESC>[6n
应该返回输入类似于<ESC>[{Row};{Column}R
的内容,其中<ESC>
取决于您使用的终端类型。可以在此处找到类似于 bash 的解决方案:https://dev59.com/-XE85IYBdhLWcg3w3Xdp。 - Sam