如何通过Node.js从命令行提示符获取坐标?及命令行尺寸咨询
Node.js 获取命令行光标坐标与窗口尺寸
一、获取命令行窗口的宽高
Node.js 里直接通过 process.stdout 就能拿到窗口的尺寸数据:
process.stdout.columns:窗口宽度(按字符数计算)process.stdout.rows:窗口高度(按行数计算)
简单示例:
console.log(`当前窗口宽度:${process.stdout.columns}`); console.log(`当前窗口高度:${process.stdout.rows}`);
如果需要实时监听窗口尺寸变化,绑定 resize 事件即可:
process.stdout.on('resize', () => { console.log(`窗口尺寸更新:宽 ${process.stdout.columns} / 高 ${process.stdout.rows}`); });
二、获取光标当前坐标
Node.js 没有直接提供光标位置的API,得用终端的ANSI控制序列来查询。原理是发送查询指令,再捕获终端返回的结果解析:
const readline = require('readline'); // 配置终端为原始模式,避免自动回显和换行 readline.emitKeypressEvents(process.stdin); process.stdin.setRawMode(true); // 发送ANSI查询光标位置指令:\x1B[6n process.stdout.write('\x1B[6n'); process.stdin.on('data', (data) => { // 终端返回的格式是 \x1B[行号;列号R,用正则解析 const result = data.toString().match(/^\x1B\[(\d+);(\d+)R$/); if (result) { const row = parseInt(result[1], 10); const col = parseInt(result[2], 10); console.log(`当前光标位置:行 ${row},列 ${col}`); // 恢复终端正常模式并退出 process.stdin.setRawMode(false); process.exit(); } });
这段代码在Windows、Linux、macOS上都能运行,前提是你的终端支持ANSI控制序列(大部分现代终端都支持)。
三、获取命令行提示符的长度
提示符的内容由当前Shell的配置决定(比如bash的PS1环境变量),Node.js里可以通过process.env.PS1拿到。注意很多提示符会带颜色等ANSI转义序列,这些不会显示,要先去掉再算真实长度:
const rawPrompt = process.env.PS1 || ''; // 去除所有ANSI格式转义序列 const visiblePrompt = rawPrompt.replace(/\x1B\[[0-9;]*m/g, ''); console.log(`提示符可见长度:${visiblePrompt.length}`);
内容的提问来源于stack exchange,提问作者Severin Koch
相关产品推荐
相关产品推荐

