在Golang和ncurses只接受字母数字

时间:2016-04-17 17:02:52

标签: go ncurses

所以,我通过使用ncurses创建一个简单的资源管理游戏来教自己一些Golang。我正在使用this library将Golang连接到ncurses。

我制作了一个简单的文本输入面板,一次接收一个字符,显示它,然后将其添加到组成用户响应的字符串中。这是它的样子:

// Accept characters, printing them until end
ch := window.GetChar()
kstr := gc.KeyString(ch)
response := ""
cur := 0
for kstr != "enter" {
    // Diagnostic print to get key code of current character 
    window.Move(0,0)
    window.ClearToEOL()
    window.MovePrint(0, 0, ch)

    // If its a backspace or delete, remove a character
    // Otherwise as long as its a regular character add it
    if ((ch == 127 || ch == 8) && cur != 0){
        cur--
        response = response[:len(response)-1] 
        window.MovePrint(y, (x + cur), " ")
    } else if (ch >= 33 && ch <= 122  && cur <= 52) {
        window.MovePrint(y, (x + cur), kstr)
        response = response + kstr
        cur++
    }

    // Get next character
    ch = window.GetChar()
    kstr = gc.KeyString(ch)
}

但是,箭头和功能键似乎是与已经与正常的a-zA-Z字符相关联的键码。例如,右箭头显示为67,F1显示为80.任何想法我在这里做错了,或者是否有更好的方法通过ncurses接受字母数字?我想尽可能避免使用ncurses字段和类,因为这里的重点是学习Golang,而不是ncurses。谢谢!

1 个答案:

答案 0 :(得分:3)

如果未启用小键盘模式,(n)curses将返回组成特殊键的各个字节。

要修复,请将其添加到程序的初始化中:

stdscr.Keypad(true)   // allow keypad input

将返回特殊键,例如右箭头,其值大于255. goncurses为这些符号定义符号,例如KEY_RIGHT