2016-04-17 13 views
0

Also, ich lehre mich etwas Golang, indem ich ein einfaches Ressourcen-Management-Spiel mit Ncurses. Ich verwende this library, um Golang mit ncurses zu verbinden.Akzeptieren nur alphanumerische Zeichen in Golang und ncurses

Ich habe ein einfaches Texteingabefeld erstellt, das jeweils ein Zeichen aufnimmt, anzeigt und dann zu einer Zeichenfolge hinzufügt, die die Antwort des Benutzers enthält. Hier ist, wie es aussieht:

// 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) 
} 

jedoch die Pfeil und Funktionstasten scheinen, als keycodes bereits mit den normalen a-zA-Z-Zeichen assoziiert kommen zu werden. Zum Beispiel, Pfeil nach rechts kommt als 67 und F1 als 80. Irgendwelche Ideen, was ich hier falsch mache, oder wenn es einen besseren Ansatz gibt, um alphanumerics durch Ncurses aufzunehmen? Ich möchte ncurses Felder und Klassen so gut wie möglich meiden, denn hier geht es darum, Golang zu lernen, nicht ncurses. Vielen Dank!

Antwort

3

Wenn Sie den Keypad Modus nicht aktivieren, (n) gibt Curses die einzelnen Bytes zurück, die einen speziellen Schlüssel bilden.

zu beheben, fügen Sie diese Initialisierung Ihres Programms:

stdscr.Keypad(true) // allow keypad input 

die Sondertasten wie Pfeil nach rechts zurück als Werte über 255 goncurses definiert Symbole für diejenigen, beispielsweise KEY_RIGHT.

+0

Ja, das war es genau. Vielen Dank! –

Verwandte Themen