2015-06-07 82 views
7

我正在爲終端中的使用創建Go應用程序。以下代碼要求用戶將文本輸入到終端。Go中的光標鍵終端輸入

package main 

import (
    "bufio" 
    "fmt" 
    "os" 
) 

func main() { 
    for { 
     fmt.Println("Please input something and use arrows to move along the text left and right") 
     in := bufio.NewReader(os.Stdin) 
     _, err := in.ReadString('\n') 
     if err != nil { 
      fmt.Println(err) 
     } 
    } 
} 

問題是,用戶不能使用左右箭頭沿着剛輸入的文本去修改它。當他按下箭頭時,控制檯打印^[[D^[[C^[[A^[[B標誌。

輸出:

Please input something and use arrows to move along the text left and right 
hello^[[D^[[C^[[A^[[B 

如何使箭頭鍵的行爲更加人性化,讓人類沿着剛剛輸入的文本瀏覽,使用左,右箭頭?

我想,我應該注意圖書館,如termbox-gogocui,但如何正確使用它們爲此目的,我不知道。

回答

3

一個更簡單的例子是carmark/pseudo-terminal-go,在那裏你可以放一個terminal in raw mode並受益於完整的上下左右光標移動。

terminal.go#NewTerminal()

// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is 
// a local terminal, that terminal must first have been put into raw mode. 
// prompt is a string that is written at the start of each input line (i.e. 
// "> "). 
func NewTerminal(c io.ReadWriter, prompt string) *Terminal 

terminal/terminal.goterminal/terminal_test.go,以及MakeRaw()

+1

我不能安裝這個庫。 '$ go get github.com/carmark/pseudo-terminal-go'輸出 'package github.com/carmark/pseudo-terminal-go \t imports terminal:無法識別的導入路徑「terminal」' –

+0

@MaximYefremov我同意。更多的是給出一個關於終端實現的代碼示例,以及它需要處於原始模式的事實。 – VonC

+0

它工作的很好,你必須導入「github.com/carmark/pseudo-terminal-go/terminal」 –