我正在创建一个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-go或gocui之类的图书馆,但是如何将它们用于此目的,我不知道。
答案 0 :(得分:2)
一个更简单的示例是carmark/pseudo-terminal-go
,您可以在其中放置terminal in raw mode,并从完全上下左右光标移动中受益。
// 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.go和terminal/terminal_test.go
以及MakeRaw()