Захватить пробел в Go без ввода - PullRequest
0 голосов
/ 29 апреля 2018

Я ищу легкую и в лучшем случае чистую реализацию go для захвата пробел без следующего введите .

Я видел некоторых людей, использующих C как extern в Go или termbox . Неужели нет другого способа фиксировать каждый удар клавиатуры?

Я уже думал об открытии устройства напрямую (в Linux) и попытке чтения оттуда.

Любой совет, как это сделать, был бы великолепен!

1 Ответ

0 голосов
/ 29 апреля 2018

Без дополнительной информации сложно найти идеальный пример того, что вы ищете. Тем не менее, основная идея заключается в том, что вам нужно переключить ваш терминал в сырой режим, где ввод немедленно передается в ваше приложение. 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
        }
    }
}
...