Go中的光标键终端输入

时间:2015-06-07 02:58:32

标签: go terminal

我正在创建一个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

如何使箭头键表现得更加用户友好,让人类使用左右箭头沿着刚刚输入的文本导航?

我想,我应该关注像termbox-gogocui之类的图书馆,但是如何将它们用于此目的,我不知道。

1 个答案:

答案 0 :(得分:2)

一个更简单的示例是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()