批量添加微软 fluent emoji 到思源

:sparkles:思源对文档和emoji提供自定义图标的支持,这些图标不仅可以用于文档,也可以用于行内。

  • 这个方案是通过添加 自定义 emoji 表情包的方式增加微软表情包,全套大概一万多个。可酌情使用。
  • 按照习惯,先上教程再上示例,所以图片在步骤 下方
  • 本教程主要是为了配合思源插件:emoji 增强(siyuan-plugin-emoji-enhance)的按文件夹分组功能,将源文件自动分组。

首先说明缺点:

  1. 暂时没有找到合适的 fluent emoji 字体,因此本方案不能替换思源内置的 emoji。
  2. 文件较多较大,数量 1W+(四种风格总共),大小 100MB。酌情挑选使用。

步骤

前置条件

  1. 下载 fluent emoji 的压缩包文件:GitHub - microsoft/fluentui-emoji: A collection of familiar, friendly, and modern emoji from Microsoft
  2. 绿色按钮:Code —> Download ZIP
  3. 在思源中安装 emoji增强(siyuan plugin emoji enhance)
  4. 安装 python https://www.python.org/

具体步骤

  1. 解压缩下载的 ZIP 文件
  2. 找到解压缩后的文件夹
  3. 文件夹路径 --> assets 下创建一个 python 文件 organize_emoji.py
  4. 复制代码到 python 文件,并在这个文件夹下运行
  5. 运行命令:python3 organize_emoji.py
  6. 代码:
import os
import json
import shutil

# 设定当前目录为工作目录
root_dir = '.'

# 功能:递归遍历文件夹,寻找最底层的目录
def move_files_and_remove_dir(path, group):
    # 判断是否是最底层目录
    if all(os.path.isdir(os.path.join(path, x)) for x in os.listdir(path)):
        for dir_name in os.listdir(path):
            # 递归调用处理下一层目录
            move_files_and_remove_dir(os.path.join(path, dir_name), group)
    else:
        # 移动文件到目标目录
        target_folder = os.path.join(root_dir, f"{group}_{os.path.basename(path)}")
        os.makedirs(target_folder, exist_ok=True)
        for file in os.listdir(path):
            src_file = os.path.join(path, file)
            dst_file = os.path.join(target_folder, file)
            shutil.move(src_file, dst_file)
        # 检查是否可以删除原目录
        if not os.listdir(path):
            os.rmdir(path)

# 遍历所有顶级文件夹
for emoji_folder in os.listdir(root_dir):
    emoji_path = os.path.join(root_dir, emoji_folder)
    if os.path.isdir(emoji_path) and 'metadata.json' in os.listdir(emoji_path):
        metadata_path = os.path.join(emoji_path, 'metadata.json')

        # 读取metadata.json获取group信息
        with open(metadata_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
            group = data.get('group')

        # 处理此emoji文件夹下的所有文件
        for item in os.listdir(emoji_path):
            item_path = os.path.join(emoji_path, item)
            if os.path.isdir(item_path):
                move_files_and_remove_dir(item_path, group)

        # 删除原emoji目录
        shutil.rmtree(emoji_path, ignore_errors=True)

# 打印完成信息
print("文件已按照分组信息和风格分类。原文件夹已删除。")


5. 稳妥起见关闭思源,然后将 assets中的所有文件夹 复制到 思源的emojis文件夹 下方
6. 打开思源
7. 顺便给个 css 片段,修一下 emoji 增强的分组栏

.emojis>.fn__flex {
    overflow-x: scroll;
}

介绍

微软 fluent 分为四种风格:

  1. 3D:PNG 格式,效果好
  2. 多彩 Color:SVG 格式,效果与 3D 有些区别的立体图标
  3. 扁平 Flat:SVG 格式,扁平化图标
  4. 高对比 High Contrast(黑白):SVG 格式,黑白图标

思源中结合插件的样式

可以看到底部已经按默认类型和风格分好组了。