java - 从 Java 中的 ANSI 转义码获取响应
问题描述
我想用 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);
推荐阅读
- java - 在java中收缩数组而不使用新的/另一个数组或任何其他预定义方法
- pytorch - net.zero_grad() 与 optim.zero_grad() pytorch
- python - 如何计算用大熊猫用破折号分隔的数据的平均值
- python - 使用 Python 检索 MacOS 日历事件?
- java - com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.example.myapplication.Orders 类型
- ios - Swift 错误域=NSURLErrorDomain 代码=-999 “已取消”
- angular - 和运算符( && )在 Angular 中不起作用
- c++ - 为什么当我尝试打印地图内容时,我得到的是地址而不是值?在 C++ 中
- php - 如何使用 PHP 将 html 复选框值保存到 MS-SQL 数据库?
- python - 递归下实例变量和实例对象的行为