今天测试 Emacs 在 Windows 终端的真彩 patch 时在 Windows Terminal 中观察到了在 *Help* Buffer 中滚动出现字符“拖影”或者叫“幽灵字符”的现象:
这一情况在非 Windows Terminal 的旧 cmd 中不会出现(下图使用了 conhost.exe 来启动 cmd)
不知道这是我个人机器的问题,还是 Windows Terminal 普遍存在的问题?
复现方式很简单,通过 C-h v cursor-type
打开一个变量的 *Help* buffer(或者是任意其他帮助文本足够长的变量或函数),并确保窗口采用上下分屏来使得 *Help* buffer 无法完全显示所有的帮助文本。接着将光标置于 *Help* buffer 第一行通过 C-n
向下移动到达 buffer 底部,最后观察 *Help* buffer 的显示效果截图即可。
注:可通过 (setopt scroll-step 1)
使滚动连续。
普遍的. 我的华硕和联想笔记本都有这种情况, Windows 11.
4 个赞
更有可能是 conpty (windows terminal 团队同时在维护的上游 project)的问题,猜测所有的 windows 平台的 terminal 都会有这个问题。
1 个赞
bug#79298: patch: full color in windows terminal
邮件里的两个附件打在 master 上就行。编译后在 Win10/11 终端里试试 emacs -nw
用了可以发个 feedback 邮件
SPQR
7
还有一种可能是widows terminal的gpu渲染有问题,gpu渲染这块每过一段时间就会有regression
,如果有软件渲染的选项可以打开试试
1 个赞
根据文档的说法,我们可以设定 experimental.rendering.forceFullRepaint
为 true
来强制重绘整个屏幕的所有帧:Windows 终端呈现设置 | Microsoft Learn。
不过这一文档的最后更新时间为 2023 年的十月,已经过去两年了
,我通过在 settings.json 添加这一项或 rendering.forceFullRepaint
似乎没有起到什么作用。WT 的图形化配置界面提供了选择 WARP 软渲染的选项,但是似乎也没有什么用。
相关资料还是太少了,这个可能有点类似 The windows terminal works abnormally. - Microsoft Q&A
虽然很狗血,不过我发现这是系统显示语言的问题,如果把设置里面的系统显示语言设置为英文则不会出现这个问题。
具体设置位置是:设置 → 时间和语言 → 语言和区域 → Windows 显示语言 → 选择 English (United States) 或其他英语。
考虑到引号(双引号,单引号)的全角半角字符使用了相同的 Unicode 码点,我怀疑即使设定 WT 的字体是等宽字体,WT 在系统为中文(不知道日文是什么情况)时获取的引号字符为全角宽度,但显示效果仍然是半角,这就导致了这个问题…
目前还在 bug-gnu-emacs 上和 Eli 继续讨论。
2 个赞