我已经知道如何从用户键盘获取输入。
我可以使用readLine()
方法或
let input = FileHandle.standardInput
let inputData = input.availableData
var text = String(data: inputData, encoding: .utf8)
但是,当用户按下箭头键按钮时,这两种方法也会得到解决。 我想过滤输入以删除这些数据。我希望用户可以写一些东西,也许可以使用向左箭头键返回,更改某些内容并插入数据而不会出现问题。 谢谢!
答案 0 :(得分:2)
您正在寻找的是libedit在macOS上提供的“行编辑功能”。
要通过Swift命令行工具使用它,您需要
import threading
import time
class ledPulse(object):
instance_count = 0 #count how many istance of the class are created
def __init__(self, ledDriver):
self.status = "OFF"
self.ledPulseThread = threading.Thread(target=self.ledPulseThread) # create a thread for our streamV function
self.ledColor = [30, 40, 50]
self.ledDriver = ledDriver
self.msgTopic = ""
self.counter = 0
ledPulse.instance_count += 1
def ledPulseThread(self):
print("starting thread")
while self.status == "ON":
print("nonstop | status = ", self.Status)
self.ledDriver[0] = [0, 0, 0]
self.ledDriver.write()
time.sleep(0.2)
print("{0} sec | color {2} | driver {3} | instance {4} | deca {1}".format(self.counter, self.msgTopic, self.ledColor, self.ledDriver.write(), ledPulse.instance_count ))
self.ledDriver[0] = self.ledColor
self.ledDriver.write()
time.sleep(0.2)
self.counter = self.counter + 1
print("stopping thread")
self.counter = 0
#raise SystemExit
在桥接头文件中,这是Swift程序的最小示例:
#include <readline/readline.h>
重要:您必须在终端中运行它,它在Xcode调试器控制台中无法正常工作。
在输入 Return 之前,可以编辑每个输入行, 类似于您在终端机中可以执行的操作。还有
while let cString = readline("prompt>") {
let line = String(cString: cString)
free(cString)
print(line)
}
您甚至可以使用向上/向下箭头键导航到先前输入的 行。
有关更多信息,请在终端上致电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))
}