设置另一个进程的终端大小(ala `stty columns` )?
Setting the terminal size (ala `stty columns` ) of another process?
我正在使用 github.com/kr/pty
包为我产生的外部进程创建伪 TTY。然而,它们的终端大小似乎小于终端仿真器 window 大小(即 ncurses 和其他终端 UI 只会在 xterm / Konsole / 其他任何东西的左上角绘制)。
我提出了 pty 包的一个错误,因为解决这个问题的想法是使用包本身,但如果我可以自己设置 TTY 的尺寸(在代码)。
我该怎么做?
NB 该项目是用 Go (Golang) 编写的,因此理想情况下,我需要有关使用 C 或 Go 执行此操作的建议。此外,我正在从事的项目非常强调跨平台兼容性,因此了解所需的任何系统调用是否是 OS 特定的会很方便。
我找到了解决方案。原来创建一个新的伪 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
我正在使用 github.com/kr/pty
包为我产生的外部进程创建伪 TTY。然而,它们的终端大小似乎小于终端仿真器 window 大小(即 ncurses 和其他终端 UI 只会在 xterm / Konsole / 其他任何东西的左上角绘制)。
我提出了 pty 包的一个错误,因为解决这个问题的想法是使用包本身,但如果我可以自己设置 TTY 的尺寸(在代码)。
我该怎么做?
NB 该项目是用 Go (Golang) 编写的,因此理想情况下,我需要有关使用 C 或 Go 执行此操作的建议。此外,我正在从事的项目非常强调跨平台兼容性,因此了解所需的任何系统调用是否是 OS 特定的会很方便。
我找到了解决方案。原来创建一个新的伪 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