WSL2 中的 Emacs 在 Windows Terminal 下会显示错乱

如图所示,在terminal里使用emacs时会时不时出现这样的错乱显示(行号被一些随机的文件内容遮盖了),不知道大家有没有遇到这个问题?是如何解决的的呢?

Emacs 28.0.91

image

遇到过, 而且 tmux 在 Windows Terminal 下面也会这种情况. 我的解决方案比较麻烦, Windows 启的 Xorg server 运行 WSL2 里面的终端程序.

遇到过,凡是与fringe有关的配置都会在Windows Terminal下产生不可预知的问题。我的方法也是使用GUI版本,如果你用的是Win11的话,那么系统已经自带了wslg(但我是用下来,会在启动emacs时有卡键现象,C-g或Esc可取消,但是这样的情况发生让我有点恼火),或者在Win10下使用X410(Microsoft Store有售,非常建议购买),当然别的mobaxterm、Vsxsrv、Xming等等也都是可以的。

好吧,我之前一直在用 Xming,最近想试试纯 terminal 才发现这个问题。 谢谢啦。

嗯,我也一直是用 GUI 的,就是想试试用terminal

吐槽一下今天遇到的坑,升级到 nerd font v3 字体以后,终端 WSL emacs 频繁遇到显示故障/伪影的问题,你说的这个就是其中一种显示故障。百思不得其解。最后发现是 nerd font 的锅,解决方案是升级到 windows terminal 的 preview 版。

此外, alacritty 也有这个问题,但是因为 windows 环境下没有装 rust 工具链,没有兴趣自行编译最新分支查看是否解决了这个问题。

实在是想用terminal版的话可以试一试wezterm,至少nerd-fonts在Windows Terminal的图标显示问题在wezterm里面是没有的,还有你截图里面的这种文字错位wezterm也没有,不过我没有在wezterm里面跑过emacs

谢谢,我已经放弃了,GUI 爽多了。

wslg在我电脑上有太多 bug了,比如经常性的 emacs 缩小到任务栏以后就再也不能重新打开这个窗口了,只能杀掉进程重新 emacsclient -c,所以干脆还是用 terminal 版本了。

我可以确定就是 nerd font 的问题,因为不只 emacs,vim, tmux等所有用到了 nerd font 显示图标的 TUI app 都遇到了显示的问题。不过 preview 版都没有显示问题了。

这几天试玩了一下 windows 11 上的各个终端模拟器,发现出了 windows terminal preview 之外,所有的终端模拟器(包括 windows terminal stable, alacritty,wezterm,contour,vscode 自带的终端)都不支持一些 nerd font v3 的字符(v2 版本的字符可以正常显示,但是 v2 使用的字符在 v3 已经被移除),都会有相同的显示 bug。只有 windows terminal preview 能正常显示。

这个是我的 tmux 的配置,里面使用到了 nerd font v3 的字符,朋友们如果有兴趣可以试一下在自己的 windows 上的终端模拟器能否显示正常。

set -g status-left '#[fg=magenta,bg=default]#[bg=magenta,fg=default]󰍹 #{session_name}#[fg=magenta,bg=default]#[fg=yellow,bg=default]'

setw -g window-status-format '#[fg=yellow,bg=default]#[bg=yellow,fg=default] #I:#W#F#[fg=yellow,bg=default]'
setw -g window-status-current-format '#[fg=magenta,bg=default]#[fg=default,bg=magenta] #I:#W#F#[fg=magenta,bg=default]'

set -g status-right '#[fg=yellow,bg=default]#[fg=default,bg=yellow] #(whoami) 󰴕 #H#[fg=yellow,bg=default]#[fg=magenta,bg=default]#[fg=default,bg=magenta] %m/%d/%y %H:%M#[fg=magenta,bg=default]'

个人强烈怀疑是 windows 对 utf8 字符的处理有问题导致的。同样版本号的 alacritty 和 wezterm 在 macos 显示完全正常。但在 windows 里,tmux 的 status bar 直接显示崩溃,无法显示任何内容。

最新版本的wezterm已经支持了nerd font v3,字体正常显示