设置另一个进程的终端大小(ala`stty columns`)?

时间:2017-07-28 11:16:32

标签: go terminal tty

我正在使用github.com/kr/pty包为我产生的外部进程创建伪TTY。但是它们的终端大小似乎小于终端仿真器窗口大小(即ncurses和其他终端UI只会在xterm / Konsole /的左上角绘制)。

我已经提出了pty包的一个错误,因为解决这个问题的想法是使用包本身,但是如果我可以自己设置TTY的维度(在代码中),那么解决它可能会很方便

我将如何做到这一点?

注意:该项目是用Go(Golang)编写的,所以理想情况下我需要在C或Go中做这方面的建议。此外,我正在研究的项目非常强调跨平台兼容性,因此了解所需的系统调用是否特定于操作系统将非常方便。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。原来创建一个新的伪TTY是错误的方法,我实际上可以使用标准的Go库来实现我想要的:

cmd := exec.Command(name, parameters...)

cmd.SysProcAttr = &syscall.SysProcAttr{
    Ctty: int(os.Stdout.Fd()) // set the TTY
}

// These must be the respective Std os.File as using a Reader/Writer 
// wouldn't work if you're trying to assign a TTY to your terminal
// emulator.
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr