使用 Go 制作全屏终端应用程序

Rob*_*rst 5 shell command-line-interface go tty stty

我正在尝试构建一个全屏终端应用程序。我使用 Go 作为我选择的语言。我已经弄清楚如何读取os.Stdin,但我不清楚如何清除终端窗口并操纵光标位置。我还想捕获终端输入而不打印(回显)。

我的问题是:

  1. 如何有效地清除列/行坐标并将其打印到终端?
  2. 如何阻止终端打印按下的按键

我的意图:

我想创建一个全屏终端应用程序,它呈现自己的 UI 并在内部处理输入(热键/导航/等...)。

如果有任何库涵盖此类用例,请随时推荐它们。

vas*_*man 5

清除终端和设置位置的最简单方法是通过 ansi 转义码。然而,这可能不是理想的方式,因为终端的变化可能会反过来影响您。

fmt.Print("\033[2J") //Clear screen
fmt.Printf("\033[%d;%dH", line, col) // Set cursor position
Run Code Online (Sandbox Code Playgroud)

更好的选择是使用像goncursestermbox-go这样的库(来源:第二个来自 Tim Cooper 的评论)。

有了这样的库,你可以做这样的事情:

import (
    gc "code.google.com/p/goncurses"
)

func main() {
    s, err := gc.Init()
    if err != nil {
        panic(err)
    }
    defer gc.End()
    s.Move(5, 2)
    s.Println("Hello")
    s.GetChar()
}
Run Code Online (Sandbox Code Playgroud)

上面的代码复制自Rosetta代码