TTY

TTY 模块包含 tty.ReadStreamtty.WriteStream 两个类。在大多数情况下,开发者都需要直接调用该模块。

当 Node.js 检测到当前环境处于 TTY 上下文时,则 process.stdin 会指向一个 tty.ReadStream 实例,process.stdout 会指向一个 tty.WriteStream 实例。检测 Node.js 是否处于 TTY 上下文有一个更方便的方式,那就是检查 process.stdout.isTTY

  1. $ node -p -e "Boolean(process.stdout.isTTY)"
  2. true
  3. $ node -p -e "Boolean(process.stdout.isTTY)" | cat
  4. false

Class: ReadStream

该类是 net.socket 的子类,表示 TTY 中的可读部分。在大多数情况下,任何 Node.js 程序(isatty(0) 为 true)中的 process.stdin 都是唯一的 tty.ReadStream 实例。

rs.isRaw

布尔值,默认值为 false,标示当前 tty.ReadStream 实例是否为 raw 状态。

rs.setRawMode(mode)

mode 的值必须为 true 或者 false,该值决定了 tty.ReadStream 为原始设备或默认设置,并且它也决定了 isRaw 的值。

Class: WriteStram

该类是 net.socket 的子类,表示 TTY 中的可写部分。在大多数情况下,任何 Node.js 程序(isatty(0) 为 true)中的 process.stdout 都是唯一的 tty.WriteStream 实例。

事件:’resize’

columnsrows 属性变化时,refreshSize() 方法就会触发该事件:

  1. process.stdout.on('resize', () => {
  2. console.log('screen size has changed!');
  3. console.log(`${process.stdout.columns}x${process.stdout.rows}`);
  4. });

ws.columns

数值,标示 TTY 当前的列数,该属性会被 resize 事件更新。

ws.rows

数值,标示 TTY 当前的行数,该属性会被 resize 事件更新。

tty.isatty(fd)

如果 fd 参数和终端有关,那么该方法返回 true,否则返回 false

tty.setRawMode(mode)


该方法已被废除,请使用 tty.ReadStream#setRawMode() 替代,比如 process.stdin.setRawMode