簡體   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