[英]Allow line editing when reading input from the command line
我已經知道如何從用戶鍵盤獲取輸入。 我可以使用readLine()
方法或
let input = FileHandle.standardInput
let inputData = input.availableData
var text = String(data: inputData, encoding: .utf8)
但是,當用戶按下箭頭鍵按鈕時,這兩種方法也將獲得。 我想過濾輸入以刪除這些數據。 我希望用戶可以寫一些東西,也許可以使用向左箭頭鍵返回,更改某些內容並插入數據而不會出現問題。 謝謝!
您正在尋找的是macOS上libedit提供的“行編輯功能”。
為了通過Swift命令行工具使用它,您需要
#include <readline/readline.h>
在橋接頭文件中, 這是一個最小的Swift程序示例:
while let cString = readline("prompt>") {
let line = String(cString: cString)
free(cString)
print(line)
}
重要提示:您必須在終端中運行它,它在Xcode調試器控制台中無法正常工作。
可以在輸入Return之前編輯每條輸入行,這與在Terminal中可以執行的操作類似。 與
while let cString = readline("prompt>") {
add_history(cString) // <-- ADDED
let line = String(cString: cString)
free(cString)
print(line)
}
您甚至可以使用向上/向下箭頭鍵導航到先前輸入的行。
有關更多信息,請在終端中致電man 3 readline
。
這是一個可能的輔助函數:
func readlineHelper(prompt: String? = nil, addToHistory: Bool = false) -> String? {
guard let cString = readline(prompt) else { return nil }
defer { free(cString) }
if addToHistory { add_history(cString) }
return(String(cString: cString))
}
用法示例:
while let line = readlineHelper(addToHistory: true) {
print(line)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.