如何以编程方式访问macOS特殊字符列表开发Alfred工作流?
解决方案:无需维护字符列表,实现Alfred快速插入特殊字符
我完全懂你的痛点——macOS字符查看器确实难用,而emojilib又只覆盖表情符号。下面几个方案能帮你不用手动维护字符列表,快速实现Alfred里的特殊字符检索:
1. 用Python内置模块unicodedata(零依赖,推荐)
Python自带的unicodedata模块可以直接访问完整的Unicode字符数据库,不需要额外安装任何库。你可以写一个小脚本,根据字符名称搜索目标符号(比如希腊字母、数学符号),完全符合纯键盘操作的需求。
示例脚本(适配Alfred Script Filter):
import unicodedata import sys import json def find_symbols(query): results = [] # 覆盖常用特殊字符的Unicode码点范围:希腊字母、数学运算符、集合符号等 ranges = [ (0x0370, 0x03FF), # 希腊字母及扩展 (0x2200, 0x22FF), # 数学运算符 (0x2190, 0x21FF), # 箭头符号 (0x25A0, 0x25FF), # 几何图形 (0x2600, 0x26FF) # 杂项符号(可选) ] for start, end in ranges: for codepoint in range(start, end + 1): char = chr(codepoint) name = unicodedata.name(char, "") if not name: continue # 支持大小写不敏感搜索,同时可以扩展中文关键词映射 if query.upper() in name.upper() or query in get_chinese_aliases(char): results.append({ "title": f"{char} ({name})", "subtitle": "Press Enter to insert", "arg": char, "icon": {"type": "font", "value": char} }) return results def get_chinese_aliases(char): # 自定义常用符号的中文别名,方便中文搜索 aliases = { "∈": ["属于", "in"], "⇒": ["蕴含", "推出", "implies"], "Σ": ["求和", "西格玛", "sigma"], "α": ["阿尔法", "alpha"], "β": ["贝塔", "beta"], "∩": ["交集", "intersection"], "∪": ["并集", "union"] } return aliases.get(char, []) if __name__ == "__main__": query = sys.argv[1] if len(sys.argv) > 1 else "" items = find_symbols(query) print(json.dumps({"items": items}))
把这个脚本作为Alfred的Script Filter,设置触发关键词(比如char),输入char sigma就能找到所有Sigma相关字符,选中后直接插入。
2. 使用第三方库symbols(类emojilib体验)
如果你想要更接近emojilib的键值对结构,可以用symbols库,它专门整理了数学符号、希腊字母等特殊字符,安装后直接调用即可:
首先安装库:
pip install symbols
然后编写Alfred适配脚本:
from symbols import symbols import sys import json def search_symbols(query): results = [] query_lower = query.lower() for char, info in symbols.items(): if query_lower in info["name"].lower() or query_lower in info["keywords"]: results.append({ "title": f"{char} ({info['name']})", "subtitle": "Press Enter to insert", "arg": char, "icon": {"type": "font", "value": char} }) return results if __name__ == "__main__": query = sys.argv[1] if len(sys.argv) > 1 else "" items = search_symbols(query) print(json.dumps({"items": items}))
这个库的结构和emojilib几乎一致,你可以直接复用现有emoji工作流的逻辑,只需要替换数据源即可。
3. 扩展技巧:优化搜索体验
- 快捷别名:在脚本里添加常用符号的缩写映射,比如输入
impl直接匹配⇒,输入alpha直接匹配α - 排序优化:把常用字符放在结果顶部,比如根据使用频率记录(可以用Alfred的Workflow Data存储使用次数)
- 离线可用:以上方案都是完全离线的,不需要联网访问外部服务
内容的提问来源于stack exchange,提问作者GTF
相关产品推荐
相关产品推荐

