2026-05-26 16:18:11 +08:00
2026-05-24 15:45:31 +08:00
2026-05-26 16:18:11 +08:00
2026-04-26 23:13:28 +08:00
2026-05-24 15:45:31 +08:00
2026-05-24 15:45:31 +08:00
2026-05-26 16:18:11 +08:00
2026-04-26 22:06:49 +08:00
2026-04-26 22:08:27 +08:00
2026-05-26 16:18:11 +08:00

cc_rime

cc_rime 是一个给 CC:Tweaked / ComputerCraft 使用的中文输入法项目。

它把项目拆成两部分:

  • server/:基于 Rime 的候选词服务
  • ime_lib.lua:运行在 CC 端的输入法 / 屏幕键盘库

项目用途

在 CC:Tweaked 中要实现中文输入,通常要补两件事:

  • 中文显示
  • 拼音到汉字的输入法转换

本项目中:

  • 中文显示由 utf8display 负责
  • 中文输入与屏幕键盘由 ime_lib.lua 负责

文档入口

  • IME_LIB_USAGE.mdime_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/ykeyboard.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
}

返回值中最重要的字段:

  • preedit
  • candidates
  • length

其中 length 可用于客户端在选词后消费对应长度的拼音输入。

依赖

CC 侧:

  • CC:Tweaked / ComputerCraft
  • utf8display
  • 开启 HTTP API

服务端侧:

  • Docker

或者你自行准备:

  • librime
  • librime-data
  • librime-plugin-lua
  • librime-plugin-octagram
  • Python 3
  • FastAPI
  • Uvicorn

相关项目

Description
用于cc:t的中文输入法
Readme GPL-2.0 166 KiB
Languages
Lua 71.4%
Python 16.2%
HTML 11.3%
Dockerfile 1.1%