繁体   English   中英

Java:cli命令的“历史记录”,如何使输出“可编辑”?

[英]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 (制表符)字符并实现制表符完成功能。

看一下JLine ,它提供命令历史记录,制表符补全和行编辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM