Windows快速搜索Emoji小工具

Windows快速搜索Emoji小工具

Repo参考

起因

在Windows下输入Emoji表情符号向来不是一件很简单的事。最开始我主要依赖于搜狗输入法自带的表情搜索功能,但搜狗默认是将表情符号输出为GIF图片写入剪贴板,并不适合已经全面支持Emoji的Windows10系统。微信PC客户端添加了有限的Emoji表情支持,且强制将Emoji转化为存在的Apple版本对应符号的图片。这样一来,较新的版本的Emoji如Emoji 5.0以及Emoji 11.0就不能很好地得到支持了。由于各大网站对Emoji的支持逐渐普及,如何更好输入这些表情符号自然成了一个小的需求。

为了简化这个过程,我尝试在一款叫做Wox的Windows快捷索引工具下开发插件。Wox的一个好处就是当其常驻后台时,只需通过Alt+Enter即可唤醒,再配合自定义关键字即可执行诸多快捷功能如计算器、查单词、搜网页等等。搜索表情符号的插件是一位泰国程序员前些日子刚刚开发的。当我准备写自己的插件时发现已经有人做过这件事,索性作罢。但他的插件存在一个不大不小的问题——搜索结果中的Emoji是黑白线框图。对于默认主题的Wox搜索栏而言还好,但对于自定义后深色主题而言,搜索结果展示不够美观和直观,经常看不清。为了解决这个问题,我进行了一些探索。

SVG color fonts

emoji black and white on windows

emoji support status

这些链接分别介绍了这个问题产生的原因,以及几种可行的解决方法。下面是我在修改插件和递PR前的一些总结。

Problem analysis

On Windows, Emoji characters, which is represented in Unicode, are displayed with the font Segoe UI Symbol. As a font, it does support a font color attribute, but can only have one single font color. However, for Emoji icons, it can have multiple colors. Therefore, the sketch icon cannot be in colored format due to compatibility issues. Some softwares such as Chrome, Outlook do support colored Emojis, but they are in-built rendered. Hence we need to associate each Emoji character with an svg or png icon.

Solutions

  1. use svg or png to display
  2. use OpenType-SVG fonts

Download emojis

  1. download the full emoji list within April 2018 Microsoft update. total number: 2873
  2. run rename.py to rename each emoji with it own emoji unicode, and delete those with modifiers removed all the files with skin tone modifiers that is to say, filename with ‘modifier’ and ‘type’
  3. follow the instructions in readme to make it work.

遇到的困难与问题

过程中确实遇到了一些想吐槽的问题,记录如下

给这帮人的目录结构跪下了

  • Wox自带的Wox.Infrastructure类对应的项目文件在主项目中被写死成../../Wox.Infrastructure/Wox.Infrastructure.csproj…… 导致编译的DLL文件在没有源码的情况下无法直接添加到引用

  • Wox.Plugins/Emoji的作者把输出目录定到了../../Output 目录,后来才发现是和Wox自己的输出目录相同。估计作者是在Wox主程序目录下进行的开发……

  • 插件作者直接发布了debug版……

  • 看起来插件作者直接把文件夹内容粘贴到了repo里面……根本没有对VS进行解决方案版本管理

方案1还是方案2

方案1是通过字体原生地解决这个问题,而方案2则是通过添加图标来变相解决这个问题。首先当然考虑的是方案1,但正如上面分析可知,Windows下仅有少数应用或场景支持彩色显示的Emoji字体。而更多的则采用了兼容性较好的线框显示。令人意外的是,在Windows 10桌面上Emoji文件名字符串就能以彩色显示,但文件夹里却显示为黑白。同样地,在Chrome、Edge、Outlook等软件中能够彩色显示,而Word却只能显示为黑白。这些表现不禁让人非常困惑,到底哪些软件能支持彩色显示?又为什么会出现这种差异?另外,在Wox里,如果希望展示为彩色显示,自然需要更改显示字体。但经过尝试发现,Wox既没有提供更改字体的API,改变字体后显示的图标同样是黑白线框的。因此方案1未能成行。

方案2比较简单,就是将展示结果中的图标换成对应的Emoji图案的图像文件。但是这里又产生了一点小的曲折:如何映射Emoji和图像文件呢?最简单的想法便是将图像文件全部对应命名为Emoji字符,这样输入字符即可找到图像,非常简洁。然而,这种方法对于Emoji 1.0之前便已存在于Unicode中的那些符号字符而言会出现问题,大致是由于其编码长度不同,在解析过程中可能会被当成1或两个字符,具体也可参考readme中的介绍。对此我的应对方式是分别对两类Emoji进行不同的命名,将无法直接命名为Emoji字符的图像转而命名为其Unicode编码,再在插件中进行判断,从而实现了显示。

版本号之殇

Emoji versions

Pip versions

题外话,在了解Emoji标准时,发现其版本号出现了5.0 → 11.0的巨大飞跃。这不禁让我想起半年内从9升级到18的PIP……

Chen Ting

Chen Ting

The page aimed to exhibit activities & achievements during Ting's undergraduate & graduate period. Meanwhile, other aspects such as lifestyles, literary work, travel notes, etc. would interweave in the narration.

Leave a Comment

Disqus might be GFW-ed. Excited!