语境 :
我正在使用 Luke Smith 的st
(suckless-terminal)版本幺半群大多数 Unicode 符号的字体,我注意到当它看到一些表情符号时通常会崩溃,比如U1F970
,st
尝试加载彩色表情符号字体(目前是Apple Color Emoji
,但对于其他用户来说默认是Noto Color Emoji
,我尝试了两者,但有同样的问题)和崩溃:
X Error of failed request: BadLength (poly request too large or internal Xlib length error)
Major opcode of failed request: 139 (RENDER)
Minor opcode of failed request: 20 (RenderAddGlyphs)
Serial number of failed request: 850
Current serial number in output stream: 883
如果我想避免这种崩溃,我有几个“不满意”的解决方案:
st
根本不要使用。并且不要使用存在相同问题的任何其他软件。- 我安装了
ttf-ancient-fonts-symbola
.我可以使用它并且到处都有无色表情符号。
使用此解决方案,我需要删除彩色表情符号,因为每次我有Noto
或Apple
使用彩色表情符号时,默认情况下都会采用它而不是Symbola
. - 当我启动时禁用字体
st
(.
文件名之前的a足以隐藏它),然后再次启用它。看起来像是作弊,并且在启动其他软件时可能会导致问题。 - 将表情符号存储在个人
user
文件夹中,创建另一个用户user_2
,启动st
并再次user_2
成为user
。
有没有办法做到这一点 ?如果是这样,这是避免崩溃的最简单方法吗? - 使用来自的解决方案卢克·史密斯 (Luke Smith) 的 St 在 Github 上:
If st crashes when viewing emojis, install libxft-bgra from the AUR.
可能对我不起作用,因为我没有使用基于 Arch 的发行版
(我目前使用的是 Ubuntu 20.04LTS。如果有人知道在其上安全使用 AUR 的方法,为什么不呢,但这似乎不太可能)。
我想做的事 :
告诉我的计算机允许Apple Color Emoji
除我选择的软件之外的所有软件
(目前,它只是st
(pango-view
我仅使用第二个软件进行一些测试),或使用其他软件xft
),
并告诉st
我使用它想要的任何“允许st
”的东西对于表情符号,最好是Symbola
.
或者告诉我的电脑至少Symbola
默认为emoji
家人拍摄。
如果可能,“默认情况下仅适用于st
”。
我认为可以有一个解决方案font-config
。
我尝试过的事情(非详尽):
使用font-config
,有一些标签,例如仅<match><test><string>st</string></test>…</match>
针对目标(我可以告诉它“将字体设为粗体,仅适用于 st,仅适用于某些尺寸”。它在我的计算机上工作)。 还有其他标签,例如全局禁止一种(或多种,具有全局模式)字体。st
<selectfont><rejectfont><glob>/path/to/emoji/font</glob></rejectfont></selectfont>
我尝试将它们结合起来,但看起来不可能。这是一个不起作用的代码:(
字体在所有地方都被删除,而不是“仅用于st
”)。
<match>
<test qual="all" name="prgname" target="pattern" compare="eq"><string>St</string></test>
<selectfont>
<rejectfont>
<glob>/home/user/.local/share/fonts/Apple*</glob>
</rejectfont>
</selectfont>
</match>
我认为<selectfont>
标签不应该位于<match>
标签内。
这问题实际上是已知的,并且不仅与 相关st
。我在这里尝试了几乎所有解决方案,但仍然出现崩溃。
我尝试过的示例,类似于某人对此问题提出的建议:
<match target="pattern">
<test name="family"><string>emoji</string></test>
<edit name="family" mode="append"><string>Symbola</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Apple Color Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Symbola</string></edit>
</match>
但无论有没有它, 的输出fc-match --verbose :family=emoji | grep '^.family:
仍然是family: "Apple Color Emoji"(s)
。
当我用默认的等宽字体代替 时,monospace
它仍然不起作用。我在这里做错了什么吗?emoji
Apple Color Emoji
我找到了设置默认字体的解决方案(如下例子),
<alias>
<family>monospace</family>
<prefer><family>Cantarell</family></prefer>
</alias>
我设置monospace
为一种名为的随机字体Cantarell
并且它有效。
它也适用于其他字体,包括但如果我写emoji
而不是monospace
,这里,它的作品!
因此,有一种方法可以更改默认字体。这是一个好的开始,但它不针对软件,并且似乎没有emoji
以相同的方式对待。 如果我同时启用和,则表情符号的默认值是,并且此解决方案不允许我再次设置为默认值。sans-serif
serif
monospace
Noto Color Emoji
Apple Color Emoji
Noto Color Emoji
Apple Color Emoji
我还注意到此配置适用于sans-serif
(而不是monospace
),但不适用于sans
,即使:family=sans
每次:family=sans-serif
我在 上尝试时都有类似的结果fc-match
。同样的评论mono
代替monospace
.也许,这三个词的意思是sans
,,,mono
和emoji
有一些共同点。
但这“共同点”是什么?
有没有办法做出emoji
像这样的作品monospace
?