设置另一个进程的终端大小(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