Xushengfeng 在 终端排版的哪些事 中发帖
最近想复刻一下warp终端,重复造轮子之余,尝试写一下终端显示
像html一样,有的字符是显示出来的,有的则表示样式,还有的定位光标
样式相关的就先不展开了(要不是ai帮忙,解析器要忙死我了),我主要分享一下排版相关
终端是网格排布的,不像浏览器那样灵活规划间距等,有的字符宽,有的窄,对于a M等英文来说,宽度为1,对于cjk文字和emoji等,宽度为2。有些等宽字体不一定是1:2,但在终端渲染中就强制为1:2。所以有时候终端上的汉字间距会宽一点,如果折腾过字体的话,有时候非等宽字体下汉字间距就更恐怖了。
然后是光标,就像我们打字那样,光标随着打字在往后移动,普通打字时如果把光标往前,这时的输入相当于插入。但是对于终端来说,实际上的行为是覆盖,类似于Insert键。比如ab|cd输入e后变成的是abe|d,把c覆盖掉了(平时输命令时不是这样的,是因为shell帮忙处理了)。像进度条...