Pi Store
更多

为输入法插上编程的翅膀——librime-lua 初探

11/07 14:37

如何用 Lua 语言扩展 RIME 的各个工序,实现云拼音、多语言翻译、自动添加空格等等需求。


要论小众输入法,RIME 中州韵输入引擎绝对是绕不开的话题。站内已经有数篇文章推介它,但本文希望更近一步,介绍一个真正能解放 RIME 潜力的项目:librime-lua

简而言之,此项目能让用户用 lua 脚本语言进一步定制输入法。librime-lua 将 librime(即 RIME 后端引擎)提供的 C++ API 以 lua 对象的形式提供,我们能用一种极其简单易学的脚本语言扩展 RIME 的各个工序,实现云拼音、多语言翻译、自动添加空格等等需求。

除了少数 Linux 发行版外,librime-lua 是预置在 RIME 中的默认插件之一,无需额外安装编译。在 RIME 前端对应的用户目录中新建 lua 目录后,就可以在该目录下新建、编写 librime lua 脚本了。导入、配置这些脚本的办法可以参考少数派的以往文章或者官方文档,这里不再赘述。

本文中,我将介绍几个具体的案例以体现 librime lua 强大的扩展能力。

自动标点切换和补全

如果你像我一样频繁混用中英文,还惯用 Markdown 写作的话,短时间内多次切换中英标点想必已经成为家常便饭。不妨直接来看,如果有了 librime lua,我们能做到何种效果:

 

上面的录制过程中,我全程没有切换中英文模式,也没有切换标点输入模式,由脚本根据已经输入上下文判断,进而改变、补全要上屏的标点:

  • 中文后中文标点;
  • 输入英文、数字后,部分标点、按键自动变为英文,数字后的英文直接上屏:例如输入网址时,先打了 https,那么后面的冒号、斜杠、点号都会被调整为 ASCII 字符,直到网址输入完毕;
  • 对于固定搭配的标点,此脚本还可以为你自动补全。例如 Markdown 的图片插入语法:![](),当输入到第二个字符 [ 时,脚本会将全部语法符号全部补全。

本例脚本的功能可以总结为:根据情况对同样的按键做不同的处理。这用到了 lua_processor 的能力。一个输入法引擎,吃进去的是按键,吐出来的是汉字,RIME 将其分为几道工序。processor 是第一道工序,负责处理按键事件,或者直接放行,或者直接拦截,或者触发其他事件。下面两行是本脚本的主函数:

function P.func( key, env )
end

用户每有一次按键事件都会触发上面的函数,向其传入一个 key 参数,其中含有本次按键的键值、是否为组合键等信息。因此,本例的脚本抽象下来只有两步:

  • 比对本次按键string.char( key.keycode )是否为设定的标点符号;
  • 根据之前的输入context.commit_history:latest_text()的类型处理按键。

生成、记录英文候选词

展示完 lua_processor,我们再来看看 lua_translator,在这道工序中,输入法的编码部分会被转换为候选词。这个接口允许我们动态生成候选词。

会员专属文章,欢迎加入少数派会员。
优质内容
权益周边
会员社群
power+
评论区
全部评论0
成为少数派会员方可评论,立即加入 。若已是少数派会员,点击登录
还没有评论,来发表第一个评论吧
全部评论
还没有评论,来发表第一个评论吧
成为少数派会员方可评论,立即加入 。若已是少数派会员,点击登录
会员新功能
内容侧边栏
点击这里拉开侧边栏,即可查看会员内容列表,快速切换内容。