Rime 大佬说说 librime 是干啥的呗

偶尔刷到这个库:

但看了半天不知道这是一个完整输入法,还是说与 rime 交互的。大佬给说说呗~

我虽然算是的 rime 老用户了,但我操作 rime 的方法,是用 AutoHotkey 操作配置文件,然后调用 rime 命令行重新部署,从来没认真使用过 rime-api…

这个是用 autohotkey 把 rime 的 c 语言风格的 API 包起来,方便 ahk 调用,简单的示例可以看 tools 目录里的 rime_api_console.ahk,(相对)完整的示例可以见 GitHub - amorphobia/rabbit: 🐇️玉兔毫:由 AutoHotkey 实现的 Rime 输入法引擎前端 (写得很烂)

1 个赞

谢谢大佬解惑。
不过我看玉兔毫时,看到它使用了 GetCaretPos(),难道 Window 输入法 API 无法获取光标位置吗?以前写 AHK 脚本无法获取光标位置时,一直认为只有输入法才能准确获取。

大佬这库能添加一些示例吗?比如添加词组,调整词位之类的。
类似这个库的示例:

我本来想看看库本身,试着写示例,但看了下,完全看不懂。太多层了

DllCall(this.fp(RimeLeversApi.backup_user_dict_offset()), "Ptr", RimeStruct.c_str(dict_name).Ptr, "CDecl Int")

这种定义结构偏移的方法,也太抽象了,难道是脚本生成的?

    static data_size_offset := (*) => 0
    static schema_id_offset := (*) => RimeStatus.data_size_offset() + A_IntSize + A_IntPaddingSize
    static schema_name_offset := (*) => RimeStatus.schema_id_offset() + A_PtrSize
    static is_disabled_offset := (*) => RimeStatus.schema_name_offset() + A_PtrSize
    static is_composing_offset := (*) => RimeStatus.is_disabled_offset() + A_IntSize

librime 并没有把词库管理的内部细节暴露为 API,诸如“添加词组”、“调整词位”的操作无法仅用 librime api 实现

如果是“输入法”级别的例子,可以看 librime-ahk/tools/rime_api_console.ahk at master · amorphobia/librime-ahk · GitHub

结构体偏移是 c 语言的知识,librime 虽然没有承诺未来版本一定兼容,但根据提交历史来看,可以假设不会有 breaking change

不是脚本生成的,是用正则表达式把 librime_api.h 相关方法摘出来,然后用支持多行编辑的编辑器全部编辑好的

据我所知 Windows 输入法的 API 也就是 TSF 框架是可以获取光标位置,但玉兔毫没有使用 TSF 框架,因为注册为系统输入法需要管理员权限,所以才需要一些 hack

感觉这个ahk脚本很强大,请问能否获取当前小狼毫输入法的一些状态(如方案、asciimode)

再请教个问题, librime 能获取当前的输入码和候选框内容吗?

+++

搜索到一个好玩的,看示例真不错