Doom emacs 里的vterm显示apple color emoji有问题

doom 带的 emoji module 用的图片版 emojione,看起来不太美,而且 emacs-plus 显示 emoji 有错乱,于是换用了 emacs-mac,在普通文本窗口以及eshell里显示完美,但是 vterm 里显示:family:这样的会分成三个字符,:swimming_woman:和:swimming_man:字符后面会多一个性别图标。

如果用emojione,那么vterm是正常的,所以感觉是emacs-mac对vterm窗口有啥特殊设置,导致没有渲染对组合颜文字。

图片最下面是 vterm。

1 个赞

我之前看过 emacs-mac 表情渲染实现,其实处理的也不全,不过应该是说 vterm 不支持连字还是啥(我不知道叫啥)所以导致没有组合的没有拼起来

emacs 里可以这样输入那个 family,是三个 emoji 字符用 ZWJ 组合起来的:

C-x 8 RET woman
C-x 8 RET zero width joiner 
C-x 8 RET woman
C-x 8 RET zero width joiner
C-x 8 RET girl

在 eshell,shell, term,ansi-term,scratch 里都是正常的,也就是说 emacs-mac 是正确处理了这种组合颜文字。

M-x trace-function 看了下 vterm–write-input,其 input 参数是正常的,并没有丢失 ZWJ,但是不知道在哪个环节在渲染时丢了 ZWJ,渲染成了三个独立的颜文字。

2 个赞

搞定了: fix rendering of combining characters by Dieken · Pull Request #473 · akermu/emacs-libvterm · GitHub

4 个赞

btw, interesting, why do the family emoji equal “two women and one girl”? :sweat_smile: :sweat_smile:

1 个赞