【问题标题】:How to read the cursor position given by the terminal (ANSI Device Status Report) in JAVA如何在JAVA中读取终端给出的光标位置(ANSI设备状态报告)
【发布时间】:2020-05-24 20:29:54
【问题描述】:
import java.util.Scanner;
import java.util.regex.Pattern;

public class dsr {
    final static String ESC = "\u001b";
    final static String ANSI_PREFIX = ESC + "[";
    final static String ANSI_DSR = ANSI_PREFIX + "6n";
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("1234567" + ANSI_DSR);
        System.out.println("@" + scan.next(Pattern.compile(".*")));
    }
}

此代码尝试使用扫描仪从终端读取返回,但返回未被捕获并直接显示。扫描仪等待键盘输入。如何取回返回值^[[5;8R

ANSI_escape_code

【问题讨论】:

  • 尝试做同样的事情——您可以使用System.console().readPassword() 不回声地阅读,但该方法等待换行符。如果您按下输入控制序列^[[5;8R 将被读取。还没弄清楚如何在标准输入上强制换行...

标签: java terminal


【解决方案1】:

您可以构造一个从FileDescriptor.in 文件描述符读取的java.io.FileInputStream - 这将能够从终端读取输出(这是 System.console().readPassword() 内部使用的...)

只需使用类似java.io.InputStreamReader 的实例从文件输入流中读取,直到您获得一个 R 字符(这是光标位置响应的后缀) - 之后您可以使用正则表达式或自己解析它以获得光标位置...

我自己在尝试为 Java 制作 ANSI 图形库时遇到了这个问题,终于弄明白了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多