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

问题描述:

我正在使用github.com/kr/pty包为我生成的外部进程创建伪TTY。然而,它们的终端尺寸似乎比终端模拟器的窗口尺寸小(即,ncurses和其他终端用户界面只会在xterm/Konsole的左上角绘制/不管)。设置另一个进程的终端大小(ala`stty columns`)?

我已经提出了一个pty包的错误,因为解决这个问题的想法可能与包本身有关,但是如果我可以自己设置TTY的维度, )。

我该怎么做呢?

注意该项目是用Go(Golang)编写的,因此理想情况下我需要在C或Go中这样做。另外,我正在开发的这个项目非常强调跨平台兼容性,因此知道所需的任何系统调用是否都是特定操作系统会很方便。

我找到了解决方案。结果创建一个新的伪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