emoji 字体是黑白的在输入法候选框却是彩色的

2024-12-17-21-08-52
2024-12-17-21-09-33

nanguo@suse:~> fc-list :charset=1f40d
/usr/share/fonts/truetype/TwitterColorEmoji-SVGinOT.ttf: Twitter Color Emoji:style=Regular

** 为什么我输入法里的 emoji 是带颜色的,输出后就是黑白的了 **

遇过这个问题(我使用的是 noto color emoji),最后是通过配置 fontconfig 解决的,不过我并不会写配置,我直接拿 arch 那边的配置文件来用了。

https://aur.archlinux.org/cgit/aur.git/tree/75-noto-color-emoji.conf?h=noto-color-emoji-fontconfig

我修改了一下 fontconfig,结果还是不行

<?xml version="1.0"?>
<! DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- 设置 JetBrainsMono Nerd Font 为英文字体 -->
    <match target="font">
        <edit name="family" mode="prepend">
            <string>JetBrainsMono Nerd Font</string>
        </edit>
        <test qual="any" name="lang">
            <string>en</string>
        </test>
    </match>

    <!-- 设置中文字体 -->
    <match target="font">
        <edit name="family" mode="prepend">
            <string>SourceHanSansCN</string>
        </edit>
        <test qual="any" name="lang">
            <string>zh</string>
        </test>
    </match>
    
    <!-- Add generic family. -->
    <match target="pattern">
        <test qual="any" name="family"><string>emoji</string></test>
        <edit name="family" mode="assign" binding="same"><string>Twitter Color Emoji</string></edit>
    </match>

    <!-- This adds Noto Color Emoji as a final fallback font for the default font families. -->
    <match target="pattern">
        <test name="family"><string>sans</string></test>
        <edit name="family" mode="append"><string>Twitter Color Emoji</string></edit>
    </match>

    <match target="pattern">
        <test name="family"><string>serif</string></test>
        <edit name="family" mode="append"><string>Twitter Color Emoji</string></edit>
    </match>

    <match target="pattern">
        <test name="family"><string>sans-serif</string></test>
        <edit name="family" mode="append"><string>Twitter Color Emoji</string></edit>
    </match>

    <match target="pattern">
        <test name="family"><string>monospace</string></test>
        <edit name="family" mode="append"><string>Twitter Color Emoji</string></edit>
    </match>

    <!-- Block Symbola from the list of fallback fonts. -->
    <selectfont>
        <rejectfont>
            <pattern>
                <patelt name="family">
                    <string>Symbola</string>
                </patelt>
            </pattern>
        </rejectfont>
    </selectfont>
    
</fontconfig>

你首先得说是在什么程序里是黑白的,这个程序是像普通开源软件那样直接装在系统里的、使用系统库,还是自带了一堆库的闭源软件,又或者是 flatpak 这种容器解决方案?

这很好理解啊,你输入法的候选窗口用的是一个字体,输出到程序后,程序用的是另一个字体了。