[英]Java: “History” for cli commands, how to make ouput “editable”?
我想在我的java程序中添加一个“历史记录”功能,如bash等所知,因此按箭头键应该显示以前的发送命令。
将过去的命令写入默认输出是没有问题的,如果向上箭头被击中了3次,它将以新的三行显示,并且在不可编辑的输出中。 我希望将programm的输出写在输入字段中,所以我只需要按Enter键即可重新发送命令。
这可能吗?
亲切的问候
如果您想推出自己的解决方案,这将帮助您入门。
您想要从使用缓冲输入更改为直接输入。 您可以通过直接与System.in
接口来实现。 您应该创建一个线程来处理此问题,并使其在循环中对System.in.read()
的调用中阻塞,一次读取一个字节。
每次读取一个字节时,请使用正在读取的当前命令来更新自己的缓冲区。 键入的每个字符都将其添加到缓冲区中。 如果该字符是\\b
,则删除缓冲区中的最后一个字符。 当您检测到\\r
或\\n
,请在缓冲区中执行命令并将其清除。
如果您收到向上或向下箭头,请向System.out
发送一个等于缓冲区长度的\\b
s。 这将删除正在输入的任何当前命令的本地副本。 然后将新命令输出到System.out
并将其输入缓冲区,替换其中的任何内容。 这将允许用户删除,添加或仅按Enter提交。 这模仿了bash的功能。
您还可以检测\\t
(制表符)字符并实现制表符完成功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.