跳转到内容

在终端里,正经地打中文。

输入法组词期间——拼音、假名、韩文——那段未完成的文字属于键盘, 不属于 shell。在你上屏之前,什么都不该发到远端主机。Moshpit 会在光标处 把这段组词文字画成带下划线的浮层,并随着它变长把终端真正的光标移到它末尾, 让你看到的就是你所在的位置。

  • 组词看不见。引擎内部跟踪了 marked text,却从来没在任何地方渲染出来。 现在它作为带下划线的浮层画在光标处。
  • 光标往回跳。拼音这类输入法每敲一下就替换整个 marked 字符串, 而候选翻页还可能报告过期的选区,所以老老实实记偏移量的做法会抖回词首。 现在光标跟着组词文字的末尾走。
  • 输出把光标抢走。频繁重绘的窗格——agent 状态行、resize、重排—— 以前会在你打到一半时把光标从拼音末尾拽回词首。现在重绘会让位给组词浮层。
  • 删除把整段组词干掉。组词期间的退格现在只从 marked text 里删掉一个字符, 而不是发真正的退格把整段炸掉——这正是拼音键盘下长按连删能用的原因。
  • 上屏时光标弹回。组词结束那一瞬间,终端自己的光标还没移动, 所以「贴着它走」会在你刚打完一个词时把光标往回拽。现在不再贴了。

CJK 字形占两个单元格。这件事的影响不只是好不好看: 一个跨行折行的 URL,如果这一行前面有宽字符,靠数字符数是接不回来的。 Moshpit 改读模拟器自己的软换行标志,所以把折行的 URL 变成链接时不会悄悄截断它。

以上全部是客户端这一侧的事。如果主机上的程序本身没处理好宽字符 ——有些 TUI 确实没有——Moshpit 会忠实渲染它收到的东西,包括错位。 另外终端字体必须包含那些字形:内置的等宽字体对拉丁字母覆盖得好、对 CJK 参差不齐, 所以它们缺的字由系统字体回退来补。