cc_rime
cc_rime 是一个给 CC:Tweaked / ComputerCraft 使用的中文输入法项目。
它把项目拆成两部分:
server/:基于 Rime 的候选词服务ime_lib.lua:运行在 CC 端的输入法 / 屏幕键盘库
项目用途
在 CC:Tweaked 中要实现中文输入,通常要补两件事:
- 中文显示
- 拼音到汉字的输入法转换
本项目中:
- 中文显示由
utf8display负责 - 中文输入与屏幕键盘由
ime_lib.lua负责
文档入口
IME_LIB_USAGE.md:ime_lib的完整使用说明demo/imelib_demo.lua:完整输入法示例demo/imelib_key_demo.lua:纯屏幕键盘示例
快速开始
1. 启动服务端
服务端目录在 server/。
如果你使用 Docker:
docker build -t cc-rime-server ./server
docker run --rm -p 8000:8000 cc-rime-server
健康检查:
curl http://127.0.0.1:8000/health
2. 在 CC 中使用 ime_lib
推荐方式是你自己先加载 utf8display,再把实例传给 ime.run(...):
local utf8display = require("utf8display")
local ime = require("ime_lib")
local root = term.current()
local textWindow = window.create(root, 1, 1, 31, 3)
local mainWindow = window.create(root, 1, 4, 31, 4)
local keyboardWindow = window.create(root, 1, 8, 31, 5)
local text = ime.run({
main = {
term = mainWindow,
x = 1,
y = 4,
BackgroundColor = colors.lightBlue,
},
text = {
term = textWindow,
},
keyboard = {
term = keyboardWindow,
x = 1,
y = 8,
},
InputText = "预置文本",
submitOnEmptyPinyin = false,
exitEvent = "ime_exit",
API_URL = "https://rime.liulikeji.cn/query",
utf8api = utf8display,
})
utf8display.print(text)
InputText 可用于在启动输入法时,先向内部已提交文本和 text 输出区预置一段内容。
submitOnEmptyPinyin = false 可用于让 Enter 在拼音为空时不结束 ime.run(...)。
exitEvent = "ime_exit" 可用于在外部调用 os.queueEvent("ime_exit") 时结束输入法循环。
main.x/y 和 keyboard.x/y 可用于指定各自窗口左上角坐标,供鼠标点击命中计算使用。
也可以网络加载
local ime = load(http.get(https://git.liulikeji.cn/xingluo/cc_rime/raw/branch/main/ime_lib.lua).readAll())()
ime_lib 支持什么
ime_lib.lua 目前支持:
- 拼音输入候选查询
- 候选词显示与选词上屏
- 实时文本输出窗口
- 屏幕键盘
keyboard-only模式- 自定义候选 API URL
- 自定义
utf8display实例 / 远程库 URL - 自定义字体 URL / 路径 / 缓存策略
- 预置初始文本
InputText - 控制空拼音时
Enter是否结束输入法submitOnEmptyPinyin - 自定义外部结束事件
exitEvent - 分别配置
main/keyboard的鼠标点击坐标原点x/y
详细参数请看:
文档:docs/IME_LIB_API.md
按键行为
中文模式
- 小写
a-z:进入拼音缓冲区并请求候选 - 大写
A-Z:直接写入文本,不进入拼音 1-9:有候选时按当前屏幕编号选词;没有候选时直接输入数字0:始终直接输入0=:有候选时向后翻页;没有候选时直接输入=-:有候选时向前翻页;没有候选时直接输入-Backspace:优先删除拼音缓冲区;没有拼音时删除已上屏文本最后一个 UTF-8 字符Space:提交当前原始拼音,并追加一个空格Enter:提交当前原始拼音;当没有拼音且submitOnEmptyPinyin ~= false时结束ime.run(...)Shift:短按切换中英文模式,不参与字符大小写判定- 其他数字、符号、标点:直接写入文本
英文模式
- 收到的
char直接写入文本 Backspace/Delete/Space/Enter等功能键仍由输入法主循环处理
Demo 说明
demo/imelib_demo.lua
完整输入法示例,包含:
main输入法窗口text实时文本窗口keyboard屏幕键盘窗口utf8api注入API_URL配置- 候选数字选词与
-/=翻页
demo/imelib_key_demo.lua
纯屏幕键盘示例,包含:
keyboard-only模式- 并发打印
key/key_up/char事件
旧文件说明
ime_demo.lua是旧版演示脚本- 它仍然可以帮助理解项目的早期实现,但新的调用建议优先使用
ime_lib.lua
服务端接口
默认候选接口:
POST /query
请求体示例:
{
"input": "jintianxiawu",
"limit": 6
}
返回值中最重要的字段:
preeditcandidateslength
其中 length 可用于客户端在选词后消费对应长度的拼音输入。
依赖
CC 侧:
- CC:Tweaked / ComputerCraft
utf8display- 开启 HTTP API
服务端侧:
- Docker
或者你自行准备:
librimelibrime-datalibrime-plugin-lualibrime-plugin-octagram- Python 3
- FastAPI
- Uvicorn
相关项目
Languages
Lua
71.4%
Python
16.2%
HTML
11.3%
Dockerfile
1.1%