Golang:如何`删除终端中的向后滚动(又名“已保存的行”)

时间:2017-07-14 15:41:41

标签: go terminal

如何使用Go?

删除终端中的回滚

在使用终端的OS X中,我可以运行:

$ print '\e[3J'

它将“删除回滚(又名'已保存的线')。”太好了!

但是,在Go中,当我跑步时:

exec.Command("print", `\e[3J`).CombinedOutput() 

我收到错误exec: "print": executable file not found in $PATH,这是有道理的:

$ type -a print
print is a shell builtin

Slack中有用的Gophers提到我应该考虑直接传达终端应用程序(无论是Terminal,iTerm,iTerm2等)。但是,即使看到这个问题,我也不知所措:https://www.iterm2.com/documentation-scripting.html

2 个答案:

答案 0 :(得分:2)

fmt.Printf(string([]byte{0x1b,'[', '3', 'J'}))

应该足够了。但是你真的应该使用一个终端库,它根据使用的终端仿真器知道要使用哪些代码。

类似于termbox-go

对于通常可用的代码及其字节值,您可以 尝试xterm-docu,但是你的 因使用不同的终端仿真器,里程可能会有所不同。

答案 1 :(得分:2)

print是一个内置的shell,因此无法从go执行。您可以使用/bin/echo二进制文件,/usr/bin/clear或仅fmt.Println转义序列:

seq := "\x1b\x5b\x48"

// option 1
out, _ := exec.Command("/bin/echo", seq).Output()
fmt.Println(string(out))

// option 2
out, _ := exec.Command("/usr/bin/clear").Output()
fmt.Println(string(out))

// option 3 (prefered)
fmt.Println(seq)