在 Go 中捕获 space 键而无需输入
Capture the space key in Go without following enter
我正在寻找一个轻量级的,在最好的情况下是纯 go 实现来捕获 space 而无需跟随 enter .
我看到有人在 Go 或 termbox 中使用 C 作为 extern。真的没有其他方法可以捕捉每一次键盘敲击吗?
我已经考虑过直接打开设备(在 Linux 中)并尝试从那里读取。
任何有关如何执行此操作的建议都很棒!
没有更多信息,很难找到一个完美的例子来满足您的需求。但是,基本思想是您需要将终端切换到原始模式,输入会立即传递给您的应用程序。 x/crypto/ssh/terminal
是一个提供此功能的流行库:[=13=]
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 实现来捕获 space 而无需跟随 enter .
我看到有人在 Go 或 termbox 中使用 C 作为 extern。真的没有其他方法可以捕捉每一次键盘敲击吗?
我已经考虑过直接打开设备(在 Linux 中)并尝试从那里读取。
任何有关如何执行此操作的建议都很棒!
没有更多信息,很难找到一个完美的例子来满足您的需求。但是,基本思想是您需要将终端切换到原始模式,输入会立即传递给您的应用程序。 x/crypto/ssh/terminal
是一个提供此功能的流行库:[=13=]
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
}
}
}