2016-04-17 14 views
0

したがって、私はncursesを使って簡単なリソース管理ゲームを作ってGolangを教えています。私はthis libraryを使ってGolangとncursesを接続しています。Golangとncursesの英数字のみを受け入れる

私は、一度に1文字ずつ取り込んで表示し、それをユーザーの応答を構成する文字列に追加する単純なテキスト入力パネルを作成しました。ここでは次のようになります。

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

しかし、矢印キーとファンクションキーは、すでに通常の-ZA-Zの文字に関連付けられたキーコードとして上がってくるように見えます。たとえば、右矢印は67、F1は80として表示されます。ここで間違っているアイデアや、ncursesを使用して英数字を入力する方が良い方法はありますか? Ncursesのフィールドやクラスを可能な限り避けたいのですが、ここでのポイントはncursesではなくGolangを学ぶことです。ありがとう!

答えて

3

キーパッドモードを有効にしないと、(n)cursesは特殊キーを構成する個々のバイトを返します。

、修正プログラムの初期にこれを追加するには:255 goncurses上記の値は、例えば、それらの、KEY_RIGHTために定義されたシンボルを持っているような、右矢印などの特殊キーを返します

stdscr.Keypad(true) // allow keypad input 

+0

うん、それはまさにそれだった。本当にありがとう! –

関連する問題