# 用 Keyboard Maestro 打造流畅的 Emoji 输入体验

> 本文公开全文。

原文：https://utgd.net/article/21376

我其实不喜欢用 Emoji，最近几年写杂文，已经几乎不用（除了广告部分）。在部分浏览器中，我编写的脚注会被自动加上箭头 Emoji 符号，这至今仍然困扰着我。

不过，正所谓入乡随俗，工作中，如果同事或客户也在用，不妨礼尚往来。常言道，伸手不打笑脸人，只要你别用表示“呵呵”的那个微笑表情，大概率可以缓和沟通气氛。

也罢，macOS 不仅自带 Emoji 输入窗口，还预设了两组快捷键，其中一个竟是 fn\-E，不知道是多爱发表情的设计师才能想出那么铺张浪费的键位设计。

——既然是不得已而用之，我其实没记住 fn\-E 这个蹩脚的按钮和另一个不常用的键位（我真的想不起来是 ⌃Control\-⌃Control\-Space 还是 ⌃Control\-⌘Command\-Space，也不愿让表情符号输入占用常用键位。难受的事情最好只难受一次，我想在 macOS 下统一表情输入，在各处都采用 Rocket 式的触发方式：输入 \:表情名称，即可展开表情窗口。包括 Slack 在内，不少软件都支持在检测到前述文本模式时弹出可选表情（不限于 Emoji）。

很快，我用 Keyboard Maestro 设计了一套类似的 Emoji 输入方案，贵在通用，交互设计不一定最合理，但我只需要记住一次。不同于 Slack 或 Rocket，为避免误触，我设计的触发方式是 \:表情名称 加空格或回车等表示上屏的按键，这样在 Slack 中还可以保留原有的表情输入方式。

Keyboard Maestro 动作下载

本方案虽简单，却串联了 Keyboard Maestro 中的多个高级特性，可以作为动作设计练习。首先是触发方式，利用正则表达式以覆盖可能的交互，\:\[A\-Za\-z\]\+\\s 表示先后键入冒号（不区分中英文）、表情的英文名（仅限英文，避免输入数值比值时误触发）和空格或回车。与 Slack 或 Rocket 的操作仅在于多了空格或回车，充当确认机制，避免轻易误触。

比起快捷键，文本输入模式（Typed String）作为触发机关（Trigger）更为有趣，它基本就是打字的自然延伸。硬要说的话，可以让你“手不离键盘主区域”，非常 Geek（尽管 Geek 与否不是我最在意的）。我在《用 Keyboard Maestro 把任何软件变成 Markdown 编辑器》和《用 Keyboard Maestro 快速插入 Markdown 格式脚注》等文章中也介绍过文本输入模式机关，可供参阅。

在这个简单的动作中，还用到了另一个高级特性：%TriggerValue% Token，这是一个 Keyboard Maestro 内置的变量，可以自动捕获触发动作的机关并将其传递给后续操作，在本例中，%TriggerValue% 就是你所按下的按键，再配合一个文本替换模块——再次用到了正则表达式——修剪前面的冒号和末尾的空白字符，就得到了刚刚输入的表情名称，Keyboard Maestro 会将其自动填入新展开的原生 Emoji 窗口，无缝衔接。

继续深挖，还可以看到本地变量 %localMinja%，考虑到本动作只是临时使用，故采用本地变量，避免干扰其他 Keyboard Maestro 动作。这又是一个值得注意的设计细节。

麻雀虽小，五脏俱全，一个私人小需求引发的小巧 Macro，也能串联一系列 Keyboard Maestro 高级特性。

---

[前往标准阅读页](https://utgd.net/article/21376?audience=web)
