[英]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.