gpt4 book ai didi

java - 在用户键入时编辑 shell 前缀

转载 作者:行者123 更新时间:2023-12-02 09:14:27 25 4
gpt4 key购买 nike

我正在使用 BufferedReader 从终端读取行:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String cmd;
String displayTime;

while(true)
{
System.out.print(displayTime + "> ");

cmd = in.readLine();

// Process cmd
}

目标是让 shell 前缀显示剩余时间,直到某些内容到期。我有一个单独的线程,通过执行(int 的 run() 方法),每秒按“5:00”、“4:49”等序列更新字符串 displayTime

while(true)
{
Thread.sleep(1000);
decrement(displayTime);
System.out.print("\r" + displayTime + "> ");
}

打印语句开头的回车符“\r”实现了我想要的效果,除了当用户打字时,当回车符中断他们时,他们的光标将重置到开头,并且他们将开始替换字符他们之前已经输入过(尽管 BufferedReader 仍然包含正确的命令,但视觉上它是错误的)。

例如输入“listfiles”的结果:

l
li
lis
list
fist <-- carriage return happens here
fist
filt
file
files

有没有办法编辑 shell 前缀,然后返回到用户之前输入的同一光标位置,以便他们可以无缝恢复?

最佳答案

假设输入来自常规输入(例如,无curses、readline等),则以下转义序列可用于VT100兼容终端(包括大多数xterms、vt102和其他终端仿真器)。 ESC 是转义符 (\033)

  • 保存光标ESC 7
  • 恢复 Curosr 'ESC 8`

println 应该类似于:

     System.out.print("\0337\r" + displayTime +  "> \0338");

您还必须确保 System.out 没有被缓冲。

关于java - 在用户键入时编辑 shell 前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com