You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何监听控制台尺寸变化以重新绘制TUI界面

Node.js 终端窗口大小变化监听及TUI重绘方案

核心实现逻辑

Node.js 标准输出对象 process.stdout 原生提供了 resize 事件,当关联的终端窗口尺寸被用户调整时会自动触发该事件,你只需要监听该事件并在回调中执行重绘逻辑即可。

完整代码示例

// 注册终端尺寸变化监听
process.stdout.on('resize', () => {
  // 获取调整后的最新终端宽高
  const currentColumns = process.stdout.columns
  const currentRows = process.stdout.rows
  
  // 执行你的TUI重绘逻辑
  renderTUI(currentColumns, currentRows)
})

/**
 * 自定义TUI渲染函数
 * @param {number} width 终端宽度(列数)
 * @param {number} height 终端高度(行数)
 */
function renderTUI(width, height) {
  // 示例:清空原有屏幕内容
  process.stdout.write('\x1B[2J\x1B[0f')
  // 写入适配新尺寸的界面内容
  process.stdout.write(`当前终端尺寸:${width} 列 × ${height} 行`)
}

注意事项

  • 该事件仅在 Node.js 进程绑定 TTY 终端时生效,如果你通过管道、重定向等非交互方式运行脚本,resize 事件不会触发
  • Windows 平台的 cmd、PowerShell,以及类 Unix 系统下的 iTerm2、xterm、GNOME Terminal 等主流终端均支持该事件触发
  • 极端场景下部分老旧终端不会主动发送 resize 信号,可搭配间隔100ms以上的定时轮询获取尺寸做兜底兼容
  • 如果你使用 blessed、ink 等第三方 TUI 开发库,多数库已经内置了 resize 事件的封装,可直接调用库提供的对应API,不需要手动监听底层事件

内容的提问来源于stack exchange,提问作者Alectionik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:21:04