【发布时间】:2020-04-23 15:03:02
【问题描述】:
我想用 ANSI 转义码 \033[6n 获取终端的位置。我这样做很简单:
System.out.print("\033[6n");
这将在标准输入中做出响应,例如 [[33;225R。我如何得到这个回复?我试过System.in.read(),但这会等待用户按Enter,这是我不想要的。
【问题讨论】:
我想用 ANSI 转义码 \033[6n 获取终端的位置。我这样做很简单:
System.out.print("\033[6n");
这将在标准输入中做出响应,例如 [[33;225R。我如何得到这个回复?我试过System.in.read(),但这会等待用户按Enter,这是我不想要的。
【问题讨论】:
在 Unix 系统上使用:
Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "stty raw -echo </dev/tty" }).waitFor();
System.out.print("\033[6n");
Reader inputReader = System.console().reader();
int byteBuffer;
StringBuilder buffer = new StringBuilder();
while ((byteBuffer = inputReader.read()) > -1) {
if (byteBuffer == 3) {
break;
} else if (byteBuffer == 27) {
buffer.append("\\033");
} else {
buffer.append((char)byteBuffer);
if ('R' == byteBuffer) {
break;
}
}
}
Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "stty -raw echo </dev/tty" }).waitFor();
System.out.println("Input: " + buffer);
【讨论】: