我正在寻找一种轻量级且最好的情况下使用go的实现,以捕获空间而无需后续输入。
我见过有人在Go或termbox中使用C作为extern。真的没有其他方法可以捕获每个键盘笔触吗?
我已经考虑过直接打开设备(在Linux中)并尝试从那里读取内容。
关于如何执行此操作的任何建议都很棒!
最佳答案
没有更多信息,很难找到您要寻找的完美示例。但是,基本思想是您需要将终端切换到原始模式,在该模式下,输入会立即传递到应用程序。 x/crypto/ssh/terminal
是一个流行的库,它提供以下功能:
package main
import (
"fmt"
"os"
"golang.org/x/crypto/ssh/terminal"
)
func main() {
oldState, err := terminal.MakeRaw(0)
if err != nil {
panic(err)
}
defer terminal.Restore(0, oldState)
for {
var oneChar [1]byte
_, err := os.Stdin.Read(oneChar[:])
const ETX = '\x03' // ^C
const EOT = '\x04' // ^D
if err != nil || oneChar[0] == ETX || oneChar[0] == EOT {
break
}
if oneChar[0] == ' ' {
fmt.Println("Space pressed!\r")
break
}
}
}
关于go - 在Go中捕获空格键而无需按Enter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50086253/