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

时间:2010-12-15 11:29:13

标签: java command-line

我想在我的java程序中添加一个“历史”函数,比如bash等,因此按下箭头键应显示以前的发送命令。

将过去的命令写入默认输出是没有问题的,如果箭头向上命中三次且输出不可编辑,则会在三个新行中输出。我希望将programm的输出写入输入字段,这样我只需按Enter键即可重新发送命令。

这可能吗?

亲切的问候

2 个答案:

答案 0 :(得分:2)

如果你想推出自己的解决方案,这将让你开始。

您希望从使用缓冲输入更改为直接输入。您可以通过直接与System.in连接来完成此操作。你应该创建一个线程来处理这个问题,让它在循环中阻塞对System.in.read()的调用,一次读取一个字节。

每次读取一个字节时,请使用正在读取的当前命令更新您自己的缓冲区。每个输入的字符都会添加到缓冲区中。如果字符是\b,则删除缓冲区中的最后一个字符。当您检测到\r\n时,请在缓冲区中执行该命令并清除它。

如果收到向上或向下箭头,请向\b发送一个等于缓冲区长度的System.out个。这将删除正在输入的任何当前命令的本地副本。然后将新命令打印到System.out并将其输入缓冲区,替换那里的任何内容。这将允许用户删除它,添加它,或者只需按Enter键提交它。这模仿了bash的功能。

您还可以检测\t(制表符)字符并实现制表符完成功能。

答案 1 :(得分:2)

查看JLine,它提供命令历史记录,标签完成和行编辑。