给定终端/tty的列+行,如何计算可以容纳的min/max字节数
Given column + rows of a terminal / tty, how to calculate min/max number of bytes that can fit
假设我们使用 node.js:
获取终端的当前列和行
console.log('rows:', process.stdout.rows);
console.log('columns:', process.stdout.columns);
有没有办法计算终端可以容纳的字节数window?我的意思是我猜它是行*列,但我真的不知道。
我的猜测是 rows*columns
是可以容纳的 max 字节数,但实际上,它可能更少,并不准确。
最大数量取决于 window 的标称大小(行乘以列)以及字符单元格的 编码方式 。节点应用程序假定所有内容都编码为 UTF-8,这意味着每个单元格可以是 4 个字节(例如,参见 this answer)。
除此之外,您必须允许在每行末尾换行(除非您一直依赖 line-wrapping)。换行符是一个字节。
所以...
(1 + 列) * 行 * 4
作为第一个近似值。
如果您考虑组合字符,这可能会增加估计值,但是(参见this answer)that[=34]的限制=] 定义不明确。实际上,这些在欧洲字符中很少使用,但在一些亚洲字符中使用 (ymmv)。
假设我们使用 node.js:
获取终端的当前列和行console.log('rows:', process.stdout.rows);
console.log('columns:', process.stdout.columns);
有没有办法计算终端可以容纳的字节数window?我的意思是我猜它是行*列,但我真的不知道。
我的猜测是 rows*columns
是可以容纳的 max 字节数,但实际上,它可能更少,并不准确。
最大数量取决于 window 的标称大小(行乘以列)以及字符单元格的 编码方式 。节点应用程序假定所有内容都编码为 UTF-8,这意味着每个单元格可以是 4 个字节(例如,参见 this answer)。
除此之外,您必须允许在每行末尾换行(除非您一直依赖 line-wrapping)。换行符是一个字节。
所以...
(1 + 列) * 行 * 4
作为第一个近似值。
如果您考虑组合字符,这可能会增加估计值,但是(参见this answer)that[=34]的限制=] 定义不明确。实际上,这些在欧洲字符中很少使用,但在一些亚洲字符中使用 (ymmv)。