├── 同文.md ├── 安卓效果.png ├── windows效果.png ├── tag.md ├── 输入码.md ├── editor.md ├── weasel.custom.yaml.md ├── recognizer.md ├── ascii_composer.md ├── rime.md ├── segmentor.md ├── punctuator.md ├── trime-color.md ├── key_binder.md ├── 共享文件夹.md ├── 候选框.md ├── 功能索引.md ├── README.md ├── switches.md ├── filters.md ├── hy.schema.yaml.md ├── 反查.md ├── engine.md ├── segmentors.md ├── 用户文件夹.md ├── translators.md ├── processors.md ├── speller.md ├── 按键.md ├── translator.md ├── preedit_format.md ├── default.custom.yaml.md ├── hy.dict.yaml.md ├── 滤镜.md ├── patch.md ├── rime-lua.md └── trime.md /同文.md: -------------------------------------------------------------------------------- 1 | ## 额外配置 2 | 1. 主题添加 -------------------------------------------------------------------------------- /安卓效果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyaray/rime-note/HEAD/安卓效果.png -------------------------------------------------------------------------------- /windows效果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyaray/rime-note/HEAD/windows效果.png -------------------------------------------------------------------------------- /tag.md: -------------------------------------------------------------------------------- 1 | 内置有:`abc`,`punct` 2 | ## 创建 3 | 由 [[segmentors]] 配合 [[recognizer]] 创建 4 | 5 | ## 配置 6 | [[translator]] 7 | 8 | ## 应用 9 | 1. 被[[translators]]调用生成[[#候选框]] 10 | 2. [[反查#reverse_lookup_filter]]用来生成[[候选框#提示码]] 11 | -------------------------------------------------------------------------------- /输入码.md: -------------------------------------------------------------------------------- 1 | ## 显示调整 2 | [[speller#algebra]] 3 | [[soft/rime/segmentor.md#tips]] 4 | ## 最长编码 5 | [[speller#max_code_length]] 6 | 7 | ## 代码段 8 | 输入码由[[segmentors]]拆成多个代码段,后续由[[translators]]翻译 9 | 10 | ## code 11 | 最终用于和[[用户文件夹#hy.table.bin]]匹配获取文本的编码 12 | 可以有多个音节 13 | 词组的情况下,如果每个字都不是多音字,可省略 -------------------------------------------------------------------------------- /editor.md: -------------------------------------------------------------------------------- 1 | 定制操作键,不支持[[patch#import_preset]] 2 | ## comfirm 3 | 上屏候选项 4 | ## commit_comment 5 | - 上屏候选项备注 6 | ## commit_raw_input 7 | - 上屏原始输入 8 | ## commit_script_text 9 | - 上屏变换后输入 10 | ## revert 11 | - 撤销上次输入 12 | ## back/delete 13 | - 按字符向前/后删除 14 | ## back_syllable 15 | - 按音节回退 16 | ## delete_candidate 17 | - 删除候选项 18 | ## cancel 19 | - 取消 20 | ## noop 21 | - 空 22 | -------------------------------------------------------------------------------- /weasel.custom.yaml.md: -------------------------------------------------------------------------------- 1 | - 和操作系统相关,配置不太多 2 | - [[用户文件夹#build]]里没有`weasel.yaml` 3 | ## app_options 4 | - [ ] cmd.exe设置无效,如果小狼毫能全局默认英文,此bug则可无视 5 | ``` 6 | explorer.exe: {ascii_mode: true} 7 | cmd.exe: {ascii_mode: true} 8 | ``` 9 | preset_color_schemes 10 | 11 | ## style 12 | > ✅✅✅注意,颜色是`BGR` 13 | - `color_scheme`=当前使用的style 14 | ![[附件/小狼毫配色.png]] 15 | [Rime-See-Me/](https://bennyyip.github.io/Rime-See-Me/) 16 | ### label_format 17 | 候选项序号的格式,`%s`代表数字 18 | -------------------------------------------------------------------------------- /recognizer.md: -------------------------------------------------------------------------------- 1 | - 通过[[#patterns]]对不同情况的[[输入码]]定义`pinyin`、`url`、`mail`等名称 2 | - 后续见[[segmentors#matcher|matcher]] 3 | - 非内置`tagName`,其它字段不调用输入法引擎,`输入即输出`〔如`url`等字段〕 4 | 5 | ## patterns 6 | > 注意`数字`,否则可能无法选择项目 7 | > 命令的唯一目的,就是在[tag]里可以指定 8 | > 匹配后就会跳出? 9 | 配合[[segmentor#prefix]]和`suffix`完成段落劃分、[[功能索引#tag]]分配 10 | 11 | ### punct 12 | 配合 [[processors#punctuator]] 13 | `punct: '^z[a-zA-Z\\''"\(\)\[\];]+$'` 用`\D`会影响`-=`等功能按键的翻 14 | 15 | ### reverse_lookup 16 | ❌已淘汰,和[[translators#reverse_lookup_translator]]搭配 17 | -------------------------------------------------------------------------------- /ascii_composer.md: -------------------------------------------------------------------------------- 1 | 2 | > 中英文状态切换键,【可选】输出已上屏按键或候选项,详见[[#值]] 3 | ## good_old_caps_lock 4 | `good_old_caps_lock: true` CapsLock是否输出大写字母 5 | 6 | ## switch_key 7 | 8 | ### 键 9 | > 长按键`shift`不生效,是否优化过? 10 | - `Shift_L/R` 11 | - `Control_L/R` 12 | - `Caps_Lock` 13 | ### 值 14 | - `noop` 无视 15 | - `inline_ascii` 切换为英文,但不上屏(`默认`) 16 | - `commit_code` 切换为英文并上屏之前的字母 17 | - `commit_text` 切换为英文并上屏汉字 18 | - `clear` 切换为英文并清除之前的内容 19 | ``` 20 | Shift_L: inline_ascii 21 | Shift_R: commit_text 22 | Control_L: noop 23 | Control_R: noop 24 | Caps_Lock: clear 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /rime.md: -------------------------------------------------------------------------------- 1 | - 万分感谢`局外人`(QQ`525312750`)的大量帮助,让我终于能清晰地了解rime的处理逻辑细节。 2 | - 感谢`嘿嘿rime`(QQ`178822222`)提供的`patch`相关的方法 3 | # Rime 4 | - [wiki](https://github.com/rime/home/wiki) 5 | - [也致第一次安装RIME的你](https://blog.csdn.net/xianghongai/article/details/79540525) 6 | - [在线笔记](https://www.yuque.com/shenshanhongye/uo23kv/nuvz43) 7 | - [fxliang/weasel at PR](https://github.com/fxliang/weasel/tree/PR) 8 | - [弓辰](https://github.com/lotem) 9 | - [深蓝词库转换工具](https://github.com/studyzy/imewlconverter/releases) 10 | 11 | ## 其他资料 12 | [✅双拼练习](https://github.com/BlueSky-07/Shuang) 13 | [双拼练习](https://github.com/Yidadaa/shuangpin) 14 | 15 | ```tasks 16 | path includes soft/rime 17 | not done 18 | hide recurrence rule 19 | hide task count 20 | sort by start 21 | sort by priority 22 | ``` -------------------------------------------------------------------------------- /segmentor.md: -------------------------------------------------------------------------------- 1 | [Rime_description#segmentor](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#二segmentors) 2 | 3 | ## tag 4 | 设定[[tag]],后续传递给[[translator]]处理(不填则仅针对 `abc`) 5 | 6 | ## prefix 7 | > 须配合 [[recognizer#patterns]] 8 | 设定此[[输入码]]的`前缀`标识,排除无效字符,才能让[[translator]]给出结果 9 | ## suffix 10 | `后缀`标识,如果像拼音这样可以输长句子可能会用到 11 | - [ ] 如果可以用来当常用字的临时开关(比如翻译)用会非常爽,但是目前一按候选框就清空了。 12 | 13 | ## tips 14 | - 按了 [[#prefix]],还未输入时的提示内容 15 | `tips: "【临时拼音】"` 16 | 17 | ## closing_tips 18 | - 设定其结束输入提示符,可不填 19 | - 当按下[[#suffix]]时,会在[[输入码]]后面添加此提示文字(见 `cangjie6_express.schema.yaml` 里,反查后,按`;`时会有效果) 20 | 21 | ## extra_tags 22 | 为此[[segmentor]]所标记的[[输入码#代码段]]加上额外[[tag]],这样下一步就会匹配额外的[[translator]]来生成候选项 23 | 比如临时拼音时,又想输入生僻字。目的都是解决不会五笔的情况,所以合并是合理的 24 | `extra_tags: [unicode]` -------------------------------------------------------------------------------- /punctuator.md: -------------------------------------------------------------------------------- 1 | [注音字母-Unicode字符百科](https://unicode-table.com/cn/blocks/bopomofo) 2 | > 单字符映射为任意内容 3 | - 特殊符号的输出全在这里,key_binder 没处理的热键 4 | - [[共享文件夹#default.yaml|default.yaml]]加载了`punctuation.yaml` 5 | 6 | ## full_shape 7 | ## half_shape 8 | ## ascii_style 9 | ## symbols 10 | ❌❌❌[[反查#reverse_lookup_filter]]不支持,如果需要,转成[[hy.dict.yaml]] 11 | 12 | ## 基础属性 13 | ### use_space 14 | 是否空格顶字 15 | `use_space: true` 16 | ### commit 17 | 原先会在词库里做`matching`了 只有当唯一完全匹配或者空码的时候才会上屏 18 | 放了后就直接上屏。 19 | ❌如果不会上屏,如下操作会有问题,仅测试效果:把 punctuator 放在[[recognizer]]前面,反而会造成打字时,翻页符号等全失效 20 | ### pair 21 | `'"' : {pair: ['“','”']}`重复按键交替上屏 22 | ### 数组 23 | `"(": ["〔", "["]`弹出选单,数字上屏 24 | 25 | ``` 26 | full_shape: 27 | __include: punctuation:/full_shape 28 | half_shape: 29 | __include: punctuation:/half_shape 30 | ``` 31 | -------------------------------------------------------------------------------- /trime-color.md: -------------------------------------------------------------------------------- 1 | ## 背景色 2 | 3 | ### window 4 | #### text_back_color 5 | trime app设置里 6 | #### border_color 7 | 悬浮窗边框,试了没效果 8 | 9 | ### root_background 10 | [3.2.3][[#keyboard_back_color]]+[[#candidate_background]]背景 11 | 12 | ### 候选区 13 | #### back_color 14 | 候选区背景 15 | #### candidate_background 16 | - [ ] [3.2.]候选区整体背景,和[[#back_color]]区别? 17 | #### hilited_back_color 18 | 高亮编码背景,相对于[[#back_color]] 19 | 20 | ### 键盘 21 | #### keyboard_back_color 22 | `键盘`背景,可用图片(需放在`rime/backgrounds`文件夹内) 23 | #### key_back_color 24 | `按键`背景 25 | #### hilited_key_back_color 26 | `按键`点击时背景 27 | #### off_key_back_color 28 | `功能键`背景 29 | #### hilited_off_key_back_color 30 | `功能键`点击时背景 31 | #### long_text_back_color 32 | ❌包含长按功能的背景色,长按功能一般都会用,不用特殊标记 33 | 34 | 35 | ## 文字色 36 | ### text_color 37 | 候选项序号颜色 38 | ### key_text_color 39 | 按键 40 | ### hilited_candidate_back_color 41 | 候选高亮背景 42 | ### key_symbol_color 43 | 按键[[soft/rime/trime#hint]]对应的符号 44 | -------------------------------------------------------------------------------- /key_binder.md: -------------------------------------------------------------------------------- 1 | # key_binder 2 | ## 不在配置内 3 | - [[default.custom.yaml#hotkeys|hotkeys]]不在此配置 4 | - 上屏提示内容`Control+Shift+return` 5 | 6 | ## 可配置项 7 | - `;'`选第`2/3`项 8 | - `,.`候选翻页键 9 | - 详见 `key_bindings.yaml` 10 | 指定按键设置为其他功能,比如逗号作为翻页键,在第一页的情况下(不需要上翻页),直接上屏当前字且输出逗号 11 | 12 | ## bindingg 13 | ### 参数说明 14 | #### when 15 | > 条件 16 | - always 17 | - has_menu 有多个选项 18 | - paging 按过下一页 19 | - composing 操作[[输入码]] 20 | #### 做什么 21 | - send: 发送按键, `escape`则为清空内容 22 | - toggle: 切换开关 23 | - select: `.next`,也可以当[[default.custom.yaml#hotkeys]]直接选择方案 24 | #### accept 25 | > [[按键]] 26 | 27 | ### 选中第2/3项 28 | ```yaml 29 | {when: has_menu, send: 2, accept: semicolon} #分号次选 30 | {when: has_menu, send: 3, accept: apostrophe} #撇号3选 31 | ``` 32 | ### 翻页 33 | ``` 34 | {accept: minus, send: Page_Up, when: paging} #- 35 | {accept: equal, send: Page_Down, when: paging} #= 36 | 37 | {accept: comma, send: Page_Up, when: paging} #, 38 | {accept: period, send: Page_Down, when: paging} #. 39 | ``` 40 | -------------------------------------------------------------------------------- /共享文件夹.md: -------------------------------------------------------------------------------- 1 | ## 文件 2 | 3 | - [[default.yaml]] 4 | ### weasel.yaml 5 | > 发行版设定(`操作系统`相关,用得少) 6 | ### key_bindings.yaml 7 | - 热键定义 8 | ### symbols.yaml 9 | - 修正`punctuation.yaml`并增加/前缀的自定义符号 10 | ### punctuation.yaml 11 | - `标点按键`和`符号` 12 | ### xxx.schema.yaml 13 | > 输入方案 14 | ### xxx.dict.yaml 15 | 输入方案配套的词典源文件 16 | 17 | ### WeaselDeployer.exe 18 | > 重新安装输入方案,列表依赖`schema.yaml`文件, 19 | 重新部署,命令行`WeaselDeployer.exe /deploy` 20 | ### WeaselServer.exe 21 | 算法服务,重新运行后才能删除`%TEMP%`下的文件 22 | 查看`INFO`文件,以`E`开头的内容,就是错误信息 23 | ### rime.dll 24 | - [下载更新](https://github.com/rime/librime/releases) 25 | - 覆盖文件:先停止服务(右键托盘图标),之后双击[[#WeaselServer.exe]] 26 | ## 目录 27 | ### preview 28 | 皮肤 29 | 30 | ### opencc 31 | [[滤镜]] 32 | 33 | ## temp 34 | `rime.weasel.xxx.log.ERROR` 35 | 36 | `E1112 16:02:48.409070 35312 deployment_tasks.cc:667] boost::filesystem::remove: 另一个程序正在使用此文件,进程无法访问。: "C:\Users\ADMINI~1\AppData\Local\Temp\rime.weasel.HUANGYE.Administrator.log.ERROR.20221103-085647.10560" 37 | ` 38 | - 文件无法删除,则先双击[[#WeaselServer.exe]] -------------------------------------------------------------------------------- /候选框.md: -------------------------------------------------------------------------------- 1 | 注意:内容太多会崩溃,特别是[[滤镜]]是对每个字进行处理 2 | ## 隐藏候选框 3 | 4 | ## 用户词典 5 | [[translators#enable_user_dict]]及下面相关设置 6 | ## 顺序 7 | [[translator#initial_quality]] 8 | ## 单结果自动上屏 9 | [[speller#auto_select]] 10 | - 临时方案里,以上方法无效,因为[[recognizer#patterns]]优先级高,要用[[rime-lua]] 11 | 12 | ## 临时其他方案 13 | > 一般用前缀符来调用,如果方案多,建议用`[A-Z]`当前缀 14 | 1. 定义 [[recognizer#patterns]] 15 | 2. 定义 [[segmentors#affix_segmentor]]排除前缀 16 | 3. 定义 [[translators#table_translator]]转成候选项 17 | 4. 如果要提示码,把 `tag` 添加到对应[[reverse_lookup_filter]]的 `tags` 下 18 | 19 | ## 提示码 20 | > ✅✅✅这是rime很核心的特性 21 | > 如果每个字都要处理用[[滤镜]],完整匹配用[[反查]],期待出新方式 22 | - [在*.dict.yaml文件中添加comment列 · Issue #538 · rime/librime](https://github.com/rime/librime/issues/538) 23 | ### 上屏 24 | 1. windows可以`ctrl-shift+enter`上屏 25 | 2. 同文:`{click: Return, long_click: CommitComment}` 26 | 27 | ### 类型 28 | #### 太极符号 29 | 表示字库中不存在,一般在开启[[translator#enable_sentence]]后出现 30 | [# 关于comment中的 太极符号☯️ #1133](https://github.com/rime/home/issues/1133) 31 | 32 | #### 全角/半角 33 | - [[punctuator]]特有的,系统自带 34 | 35 | ## 词组下面还显示单字 36 | 拼音特性,可能是[[translators#script_translator]] -------------------------------------------------------------------------------- /功能索引.md: -------------------------------------------------------------------------------- 1 | ## filter 2 | 3 | ## session 4 | - [ ] 下次打开输入法时,哪些配置会记住,哪些会初始化 5 | ### 会重置的配置 6 | - [[switches#reset]] 7 | ### 会记忆的配置 8 | 9 | ## 热键 10 | ### 切换输入方案 11 | [[default.custom.yaml#hotkeys]] 12 | ### 切换功能 13 | - [[共享文件夹#key_bindings.yaml|key_bindings.yaml]] 14 | - [[processors#key_binder]] 15 | - `,` 在第`2+`页,则返回上一页,否则直接上屏并输出逗号 16 | 17 | ## [[输入码]] 18 | ## [[候选框]] 19 | ## [[tag]] 20 | ## [[反查]] 21 | 22 | ## 万能键 23 | `z`>1时,当五笔的万能键,需要rime先支持模糊匹配编码,再用[[speller#algebra]] 24 | ## 造词 25 | - [[translator#enable_encoder|自动造词]] 26 | 27 | ## 输入英文 28 | 29 | ## 同步 30 | 1. 第一步打开用户文件夹中的installation.yaml文件,修改sync_dir指向位置(这个位置将是RIME的词典与配置存储的地方) 31 | 另外也可修改`installation_id`为自己喜欢的名称(为字母下划线数字,也可以不修改) 32 | 33 | 说明: 34 | 1. 上述中的第四步同步是将从云端同步至本地的词库同步进你的RIME中,而个人配置没有同步进RIME“用户文件夹”中。个人配置需要手动将你设置好的几个文件手动拖入进“用户文件夹”,重新部署以实现配置的同步。 35 | 2. 词库的同步对于RIME讲是一个双向的同步。 36 | 举例,第一步:你在甲电脑使用RIME积累了词汇ABCDE,而后坚果云同步网盘将ABCDE词汇同步进云端。打开乙电脑,坚果云将云端存储的词汇ABCDE同步进本地的“同步文件夹”(也就是sync_dir指向的文件夹)。第二步:乙电脑在之前积累了词汇为EFGH,当乙点击“用户资料同步”后,RIME实现的是一个双向的同步:即乙电脑积累的词汇EFGH同步进“同步文件夹”,“同步文件夹”中的ABCDE同步进“用户文件夹”。 37 | 1. 配置的同步是单向的同步,即由“用户文件夹”指向“同步文件夹” 38 | 2. 原因也简单,如果不是这样,当“用户文件夹”与“同步文件夹”中的配置不一致时不知道采用哪个,那就乱了。 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | rime 输入法的笔记,是用[obsidian](https://obsidian.md/)记录的,里面配置项大部分都进行了双链(以`[[xxx]]`)包裹的内容 2 | 3 | 配置以`hy`为例命名,见 4 | - `hy.dict.yaml.md` 5 | - `hy.schema.yaml.md` 6 | 7 | ## 特色 8 | - 跨平台(windows,MAC,linux,安卓,IOS),各平台统一配置 9 | - 安全:手机上不需要特殊权限 10 | - 功能强:全配置,可扩展:支持`lua`扩展功能 11 | - 候选项增加提示信息:效果如图,提示信息也能输出 12 | - 开源 13 | - 内置特性:按数字后自动修改`.`键输出为小数点,而不是句号 14 | 15 | 16 | 17 | ## 缺点 18 | - 不支持云功能 19 | - 手机是否支持语音录入待验证 20 | - 能否读取通讯录 21 | 22 | ## 使用说明 23 | ### 文件说明 24 | 1. 输入方案配置:`wubi86.schema.yaml` 25 | 2. 主词库:`wubi86.dict.yaml`里面定义了常用单字和要加载的分词库(见`import_tables`配置内容) 26 | 3. 分词库:在`dict`文件夹下,各功能如下 27 | 1. `eng_`开头的是最常用英语,和五笔混打。 28 | 2. `wubi86_user.dict.yaml`定义自定义的词组,第3项数字是当前词组的优先级,影响候选项排序 29 | 3. `wubi86_z.dict.yaml`定义`z`开头的快捷短语,和下面的符号区别是这里支持==提示==,定义的语法不同 30 | 4. `z`开头的符号定义,见`symbols.yaml`,==不支持提示功能==,示例有: 31 | 1. 箭头:`zjt` 32 | 2. 标点:`zbd` 33 | 3. 符号:`zfh` 34 | 4. 数字:`zsz` 35 | 5. 提示内容:`hytips.dict.yaml` 36 | ### 快捷键 37 | 1. 切换输入方案和功能开关:`shift-space` 38 | 2. 开关拆字和拼音提示:`ctrl-/` 39 | 3. 全角/半角切换:`ctrl-,` 40 | 4. 中/英标点:`ctrl-.` 41 | -------------------------------------------------------------------------------- /switches.md: -------------------------------------------------------------------------------- 1 | > 定义开关,设置热键在 [[key_binder]] 2 | > 折叠和展开见[[default.custom.yaml#fold_options]] 3 | > 是否可以定义字符集开关,这样就能实现字符集的自由组合了 4 | [开关](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#開關) 5 | 6 | ## name 7 | > 和[[filter#option_name]]一致 8 | 9 | ### 内置开关 10 | #### ascii_mode 11 | 0英文,1中文 12 | #### full_space 13 | 0半角,1全角 14 | #### ascii_punct 15 | 0中文,1英文标点 16 | #### extended_charset 17 | ❌不好用,但是自己用码表管理更好 18 | 0为CJK字符集,1为全字符集(仅[[translators#table_translator|table_translator]]可用) 19 | #### simplification 20 | > 汉字简繁体转换开关,常规是不用的 21 | 22 | `0不开启,1开启` 23 | 24 | ### 自定义 25 | 26 | ## options 27 | `options: [normal, extended]` 和[[#name]]二选一即可 28 | ## states 29 | 若不写,则[[default.custom.yaml#hotkeys]]不会显示此项 30 | 31 | ## reset 32 | 如果想要记住状态,则 33 | 重置状态,以下情况会生效: 34 | 1. 切换输入方案 35 | 2. 切换输入法 36 | 3. rime重新部署 37 | 38 | ``` 39 | 20221109 40 | 【侯】局局(525312750)  10:41:51 41 | 状态默认值可以被记忆值(保存值)覆盖,而 reset 会反过来覆盖记忆值。 42 | 你无法将一个选项的状态默认值设置为 1,而又允许它的状态在切换时被记忆并在再次初始化时自动恢复。 43 | 44 | 【侯】局局(525312750)  10:43:52 45 | 设定默认值不应当影响记忆和恢复功能,而设定重设值则会使记忆恢复功能失效。 46 | 47 | 【侯】局局(525312750)  10:49:16 48 | 比如一个方案是给多个人使用的,一个开关项可以统一设定一个默认值,同时启用状态记忆功能,这样就可以在不改动方案的情况下适应不同用户的习惯。当我们不能设定非 0 的默认值,就只能设定 reset 为这个值,那么就会有用户无法习惯,而必须改动方案。 49 | 50 | 【侯】局局(525312750)  10:51:04 51 | 同一个用户在不同时间也可能持续使用不同的状态,而 reset 总会重置为同一个状态,所以也不能满足他。 52 | ``` 53 | -------------------------------------------------------------------------------- /filters.md: -------------------------------------------------------------------------------- 1 | [filters](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#四filters) 2 | 上一步已经收集到各个代码段的翻译结果,当输入法需要在界面呈现一页候选项时,就从最末一个代码段的结果集中挑选、直至取够方案中设定的页最大候选数。 3 | 4 | 每从结果集选出一条字词、会经过一组 filters 过滤。多个 filter 串行工作,最终产出的结果进入候选序列。 5 | 6 | filter 可以: 7 | 8 | 1. 改装正在处理的候选项,修改某些属性值:简化字、火星文、菊花文有无有?过时了!有 Rime,你对文字的想象力终于得救 9 | 2. 消除当前候选项,比如有重复(由不同 translator 产生)的候选条目 10 | 3. 插入新的候选项,比如根据已有条目插入关联的结果。见[[滤镜#普通滤镜]] 11 | 4. 修改已有的候选序列 12 | 5. 码表与词典 13 | 6. 词典是 translator 的参考书。 14 | 15 | 他往往与同名输入方案配套使用,如拼音的词典以拼音码查字,仓颉的词典以仓颉码查字。但也可以由若干编码属于同一系统的输入方案共用,如各种双拼方案,都使用和拼音同样的词典,于是不仅復用了码表数据,也可共享用户以任一款此系列方案录入的自造词(仍以码表中的形式即全拼编码记录) 16 | 17 | 这批组件过滤翻译的结果,自定义滤镜皆可使用开关调控 18 | 19 | ## 自定义字符集 20 | [自定义增广字库 · Issue #91 · rime/home](https://github.com/rime/home/issues/91) 21 | - 如果用户可以自定义几个字符集(或其他概念),比如常用字,生僻字,内置词组,自定义词组等几类。然后用[[switches]]可以指定当前生效是哪几个字符集,这样就不需要用字典来判断了?这个不好实现吗? 22 | 23 | ## 参数 24 | 25 | ### uniquifier 26 | 过滤重复的候选字(后面的会`覆盖`前面的),有可能来自 [[#simplifier]] 27 | 28 | ### simplifier 29 | 以`simplifier`开头的都是[[opecc]] 30 | 由 [[switches#simplification]] 值控制开关,进行繁/简转化等功能。 31 | 32 | ### lua_filter 33 | [[rime-lua.md#lua_filter]] 34 | 35 | ### single_char_filter 36 | 单字过滤器,如加载此组件,则屏敝词典中的词组(仅[[translators#table_translator]]有效) 37 | 38 | ### cjk_minifier 39 | 字符集过滤〔仅用于 [[translators#script_translator]],使之支援extended_charset 开关 40 | 41 | ### [[反查#reverse_lookup_filter]] 42 | -------------------------------------------------------------------------------- /hy.schema.yaml.md: -------------------------------------------------------------------------------- 1 | - [✅✅✅必知必会-创作输入方案](https://github.com/rime/home/wiki/RimeWithSchemata) 2 | - [✅Schema.yaml](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md) 3 | 4 | - [输入方案下载](https://github.com/rime/plum#packages) 5 | - [fkxxyz/rime-cloverpinyin](https://github.com/fkxxyz/rime-cloverpinyin/issues) 6 | - [oniondelta/Onio n_Rime_Files: 電腦 Rime 洋蔥方案(注音、雙拼、拼音、形碼、行列30)](https://github.com/oniondelta/Onion_Rime_Files) 7 | - [雾凇拼音,我的 Rime 配置及新手指引](https://dvel.me/posts/my-rime) 8 | - [我的 Rime 配置 2022 - Dvel](https://dvel.me/posts/my-rime-setting-2022) 9 | - [特色功能-开源好用的98五笔输入法-基于Rime的高效五笔输入法](http://www.98wubi.com/tese.html) 10 | ## schema 11 | ### schema_id 12 | 唯一方案名称,在代码中引用此方案时以此名为正,通常由英文、数字、下划线组成 13 | 14 | ### name 15 | ### version 16 | 发布新版前确保升级版本号 17 | ### author 18 | ### description 19 | ### dependencies 20 | > 填写其他方案的[[#schema_id]]列表 21 | > 定义后,[[用户文件夹#build|build]]会生成`xxx.reverse.bin`文件 22 | #### 场景 23 | 1. 反查 24 | 2. 多种方案混用 25 | 26 | #### 相关 27 | [[#dependencies]]和[[default.custom.yaml#schema_list]]区别 28 | 1. 前者是输入方案内部使用, 29 | 30 | ## menu 31 | ### page_size 32 | 优先级比 [[default.custom.yaml#page_size]]高 33 | 候选项个数(不超过10,会无法选字)`page_size: 10` 34 | ### alternative_select_keys 35 | > 指定选字上屏的热键(代替`12345`) 36 | > 当数字键有其他用时,比如? 37 | `alternative_select_keys: aeiou` 38 | ### page_down_cycle 39 | ❌`page_down_cycle: true` 40 | ## switches 41 | [[switches]] 42 | ## engine 43 | [[engine]] 44 | -------------------------------------------------------------------------------- /反查.md: -------------------------------------------------------------------------------- 1 | 主要是显示在[[候选框#提示码]]区域 2 | > 目前反查用在提示功能应该是副产品,期待开发专门实现此功能的组件 3 | > 反查可以分两步走: 4 | > 1. 使用 recognizer 临时使用其他输入方案输出内容 5 | > 2. 在候选项添加comment 6 | > 反查可能会有`简繁体`转换问题,更推荐把词库直接转成自己用的简体或繁体,这样使用过程中就永久少一个转换环节。偶尔的转换,用[[switches]]实现即可 7 | 日常打中文,希望显示英文提示,需要一个[[用户文件夹#hy.reverse.bin]] 8 | 输入临时英文,希望显示中文提示,那么反查的输入方案词库则相反, 9 | 为此我必须要建两个输入方案吗?本质上是一个输入方案的正查和反查, 10 | [linux 拼音输出繁体_解决rime仓颉拼音反查为繁体的问题 - 腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/2106365) 11 | [cedict词典](https://github.com/enjalot/pinyin) 12 | [CC-CEDICT download](https://www.mdbg.net/chinese/dictionary?page=cc-cedict) 13 | 14 | [[soft/rime/rime-lua#librime-lua]] 15 | 16 | ## reverse_lookup_filter 17 | ✅✅✅新反查滤镜,以更灵活的方式反查,`rime1.0`后替代 `reverse_lookup_translator` 18 | > 对于 [[tag]]=`punct`时无效,建议有备注需求的还是放到词库里,并定义成其他`tag` 19 | ❌对比[[滤镜#simplifier选项]],但没有 `option_name`、`show_in_comment`、`tips` 选项,那如何切换开关?? 20 | 21 | [reverse_lookup_filter](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#四reverse_lookup_filter) 22 | [reverse_lookup_translator 如何转成 reverse_lookup_filter](https://github.com/rime/librime/issues/581) 23 | > 此属性虽定义在[[translators]],本质上属于[[filters]] 24 | 可加载多个实例,后接`@+filterName` 25 | - `reverse_lookup_filter@reverse_lookup` 26 | - `reverse_lookup_filter@pinyin_lookup` 27 | - `reverse_lookup_filter@jyutping_lookup` 28 | 29 | ## reverse_lookup_translator 30 | ❌旧方式 31 | 32 | ## 其他 33 | 34 | - 不在五笔里的词组,不会显示反查的五笔编码,比如`你行` 35 | - 可以和能和其他功能合并,比如临时生僻字,见 36 | -------------------------------------------------------------------------------- /engine.md: -------------------------------------------------------------------------------- 1 | - [Rime_description#细项配置](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#細項配置) 2 | - [SpellingAlgebra · rime/home Wiki](https://github.com/rime/home/wiki/SpellingAlgebra#拼寫運算詳解) 3 | - [RimeWithTheDesign框架设计和示例代码](https://github.com/rime/home/wiki/RimeWithTheDesign) 4 | - [輸入法引擎與功能組件](https://github.com/rime/home/wiki/RimeWithSchemata#輸入法引擎與功能組件) 5 | - 流程:`输入码→(棱镜)→code→(词典)→文本` 6 | ``` 7 | 【男】ss(2484799116) 22-11-16 16:16:05 8 | https://github.com/rime/librime/blob/9086de3dd802d20f1366b3080c16e2eedede0584/src/rime/engine.cc#L96-L115 9 | context.input 输入码更新时 10 | 11 | https://github.com/rime/librime/blob/9086de3dd802d20f1366b3080c16e2eedede0584/src/rime/engine.cc#L144-L158 12 | 输入码打tag 13 | https://github.com/rime/librime/blob/9086de3dd802d20f1366b3080c16e2eedede0584/src/rime/engine.cc#L155 14 | 15 | translator+filter 16 | https://github.com/rime/librime/blob/9086de3dd802d20f1366b3080c16e2eedede0584/src/rime/engine.cc#L156 17 | ``` 18 | ## 分类 19 | 20 | - 框架级组件:由Engine创建并调用 21 | - 基础组件:由框架级组件实现类使用 22 | 23 | - [[processors]] 24 | - [[segmentors]] 25 | - [[translators]] 26 | - [[filters]] 27 | 28 | ## 调试 29 | [调试说明](https://github.com/rime/home/wiki/RimeWithSchemata#關於調試) 30 | 31 | 输入引擎,作为整体来看,以`按键消息`为输入,输出包括: 32 | 1. 对按键消息的处理结果:操作系统要一个结果、这按键、输入法接是不接? 33 | 2. 暂存于输入法、尚未完成处理的内容,会展现在输入法[[候选框]]中。 34 | 3. 要「上屏」的文字,并不是每按一键都有输出。通常中文字都会伴随「确认」动作而上屏,有些按键则会直接导致符号上屏,而这些还要视具体场景而定。 35 | 36 | ## context 37 | > 输入法上下文:输入法可能会在多个程序里运行,所以需要保存各自的信息 38 | -------------------------------------------------------------------------------- /segmentors.md: -------------------------------------------------------------------------------- 1 | [segmentors](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#二segmentor) 2 | > rime 可将文字、数字、符号等不同内容连续输入,此时需要将[[输入码]]分成若干个[[输入码#代码段]](比如 `yxi` 被分成`y` `xi`,`ni3hao`→`nǐhao`),这通过数轮代码段划分操作完成。 3 | 1. 每一轮操作中,一众 [[segmentor]] 分别给出起始于某一处、符合特定格式的代码段,识别到的最长代码段成为本轮划分的结果,存入 [[engine#context]] 4 | 2. 排在前面的 [[segmentor]] 也可直接 `continue` 到下一轮。 5 | 3. 而给出这一划分的一个或多个 segmentor 组件则可为该代码段打上`类型标签`;从这一新代码段的结束位置,开始下一轮划分,直到整个输入码序列划分完毕。 6 | 4. 举例来说,【朙月拼音】中,输入码 `2012nian\`,划分为三个编码段: 7 | 8 | | input | tag | translations | 9 | |:-----:|:------:|:------------------------------------ | 10 | | 2012 | number | [ "2012" ], [ "二〇一二" ] | 11 | | nian | abc | [ "年", "念", "唸",... ], [ "nian" ] | 12 | | \ | punct | [ "、", "\\" ] | 13 | 5. 那些标签是初步划分后判定的类型,也可能有一个编码段贴多个标签的情况。 14 | 6. 下一个阶段中,[[translators]] 会把特定类型的编码段翻译为文字。 15 | 16 | ## abc_segmentor 17 | 把常规输入码标记为`abc`,用来查找码表 18 | 仅可设置[[segmentor#extra_tags]]属性 19 | ## ascii_segmentor 20 | > 标识西文段落,如果在英文模式下直接上屏 21 | 22 | ## matcher 23 | 配合[[recognizer#patterns]],如果匹配则标识[[tag]]为定义前面的名称 24 | ✅✅✅一般还需要[[#affix_segmentor]]加工 25 | ## affix_segmentor 26 | ✅✅✅对[[#matcher]]识别的[[tag]]进一步处理,标识[[segmentor#prefix]],[[translator]]才能正确翻译。 27 | 主要工作有: 28 | 1. 删除[[segmentor#prefix]]和 suffix 29 | 2. 标记[[segmentor#extra_tags]] 30 | `affix_segmentor@as_xxx` 31 | 32 | ## punct_segmentor 33 | > 给符号分段并标记为`punct` 34 | 35 | ## fallback_segmentor 36 | > 标识其他未标识段落,把[[输入码]]连成一段 37 | -------------------------------------------------------------------------------- /用户文件夹.md: -------------------------------------------------------------------------------- 1 | ## 文件夹 2 | ### 路径 3 | #### windows: `%APPDATA%\Rime` 4 | #### Android: `存储卡/rime` 5 | 6 | ### build 7 | - 编译后的`最终版`,重新部署就会重新生成这里的文件,是最终配置 8 | - 各文件的编译必定是依据[[hy.schema.yaml#schema_id|schema_id]]的主翻译器和 speller 进行的。 9 | - 有些输入方案没有自己的词库,所以可能只生成`prism.bin`文件, 10 | - 比如`luna_pinyin_simp`,只会生成`luna_pinyin_simp.prism.bin`文件,其他都借用`luna_pinyin`的 11 | - [ ] 编译后的文件如何使用?提速原理? 12 | 删除没用的文件 13 | 1. 临时输入方案,则删除`*.reverse.bin` 和 `*.schema.yaml` 14 | 2. 只用来反查提示用的,则删除`*.schema.yaml` `*.prism.bin` `*.table.bin` 15 | 16 | #### hy.prism.bin 17 | 棱镜文件,音节拼写至词典编码的映射 18 | 1. 生成:主要规则由[[speller#algebra]]指定 19 | 2. 作用:由[[translator]]调用 20 | 21 | 22 | #### hy.table.bin 23 | [[translator#dictionary]]指定的名称 24 | - 固态字典 25 | 26 | #### hy.reverse.bin 27 | > 反查字典,只要在[[hy.schema.yaml#dependencies]]定义就会生成 28 | ✅✅✅想要在备注显示内容,只能依赖此文件,[[#hy.table.bin]]不支持。 29 | - [ ] 想要实现中英互查,就需要根据一个词典生成两份[[#hy.reverse.bin]]文件,可否实现 30 | 31 | ### wubi86.userdb 32 | 用户输入习惯 33 | - 用户词典名为去掉`.`后面内容的名称(`hy.ext.dict.yaml`,用户词典名为`hy`而不是`hy.ext`) 34 | - `UUID/`,用户配置同步目录 35 | - `UUID/*.userdb.txt` Rime生成的用以同步的用户词典 36 | - `hy.userdb.kct` 用户词典 37 | - `hy.userdb.txt` 用户词典快照 38 | - `hy.userdb.snapshot` 同步文件夹 39 | 40 | ### opencc 41 | [[滤镜]] 42 | 43 | ### lua 44 | [lua](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#七lua) 45 | ## 文件 46 | 47 | ### .custom.yaml 48 | - [[default.custom.yaml|default.custom.yaml]] 49 | - [[weasel.custom.yaml|weasel.custom.yaml]] 50 | - [[hy.dict.yaml]] 51 | 52 | ### 自带 53 | #### installation.yaml 54 | `安装信息`(可配置同步目录) 55 | 56 | #### user.yaml 57 | 用户状态信息 58 | -------------------------------------------------------------------------------- /translators.md: -------------------------------------------------------------------------------- 1 | [Rime_collections/Rime_description.md at master · LEOYoon-Tsaw/Rime_collections](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#三translators) 2 | > [[代码段|代码段]],需要转为[[候选框|候选框]] 3 | 4 | ## translators 5 | 二选一,定义所有翻译器,处理逻辑: 6 | 7 | 1. 遍历 [[输入码#代码段]],执行如下命令 8 | 1. 遍历每个翻译器,和当前的 [[tag]] 比较,匹配,则把[[代码段|代码段]]转成候选项。 9 | 2. 代码段可由几种 [[translator]] 分别翻译 10 | 3. 翻译的结果可能有多条,每条结果成为一个展现给用户的候选项。默认显示每条结果的首个选项,按一定规则合并成[[候选框]] 11 | 4. 候选项所对应的编码未必是整个代码段(比如用拼音输句子时,词组后面继续列出单字候选) 12 | ### table_translator 13 | 码表翻译器,从码表里查找[[segmentors#abc_segmentor|abc_segmentor]] 标记的内容,比如在五笔里使用 14 | - 码表为 [[translator#dictionary]] 选项对应的文件,比如[[hy.dict.yaml]] 15 | ```yaml 16 | table_translator #效果等同于 table_translator@translator 17 | table_translator@lt_xxx 18 | ``` 19 | 20 | ### script_translator 21 | 用于拼音等基于音节表的输入方案 22 | 23 | 每个方案有一个主 `translator`(以 `translator:` 定义) 24 | 25 | ## history_translator 26 | `history_translator@l_historyZ` 27 | 28 | ## translator 29 | [[translator]] 30 | 31 | ## punct_translator 32 | 转换标点符号,可能是数字后面自动转英文符号 33 | 34 | ## reverse_lookup_translator 35 | ❌已淘汰:被[[filters#reverse_lookup_filter]]替代 36 | 反查翻译器,用另一种编码方案输入+反查:比如用拼音打字,并显示五笔编码 37 | `reverse_lookup_translator #等同于 reverse_lookup_translator@reverse_lookup` 38 | ## lua_translator 39 | [hchunhui/librime-lua](https://github.com/hchunhui/librime-lua/issues) 40 | [加入 Lua 脚本扩展支持 · Issue #248 · rime/librime](https://github.com/rime/librime/issues/248) 41 | 格式:`lua_translator@函数名` 42 | > 针对[[输入码]] 43 | ``` 44 | - lua_translator@date_translator #自定义日期输出 45 | - lua_translator@week_translator #自定义星期输出 46 | - lua_translator@number_translator #自定义数字转大写以/引导 47 | ``` 48 | -------------------------------------------------------------------------------- /processors.md: -------------------------------------------------------------------------------- 1 | > ✅✅✅逻辑入口,根据[[#处理器]]定义的顺序依次判断按键,比如[[#ascii_composer]]不匹配则交给[[#recognizer]],参考脚本语言的`if` 2 | - [ ] 如果匹配后,是跳过下面处理器还是继续处理? 3 | 4 | > 通过组合可以承担[[engine]]的全部任务,但为了将逻辑继续细分、又设置了[[segmentors]], [[translators]]和[[filters]]功能组件 5 | > 最常见的处理,便是将按键所产生的字符记入上下文中的「[[输入码]]」序列,由下一组件[[segmentors]]开始一轮新的作业 6 | 7 | 1. 对按键的处理结果,返回给操作系统 8 | - 拒:操作系统自己处理 9 | - 收 10 | - 直接处理 11 | - 交给其他`processor` 12 | 1. 暂存于输入法,尚未完成处理的内容,会展现在[[候选框]]中 13 | 2. 要上屏的文字,并不是每按一键都有输出,要视情况而定 14 | 15 | ## 按键分类 16 | > `大写字母`如果未在以下列表匹配,则会自动顶字上屏 17 | - `自定义热键`由 [[#key_binder]] 定义,优先级最高 18 | - `shift` 和 `ctrl` 控制【中英文状态】由 [[ascii_composer]] 处理 19 | - `数字`上屏候选项,`上下键`切换候选项,【换页】由 [[#selector]] 处理 20 | - `空格`,`回车`上屏,`BackSpace`删除[[输入码]]由 [[#express_editor]] 处理 21 | 22 | - `标点符号`由 [[#punctuation]] 处理 23 | - `字母`由 [[speller]] 处理 24 | - `正则判断`由 [[recognizer]] 处理 25 | 26 | ## 处理器 27 | > 基本上都是内置的 28 | - [[ascii_composer]] 29 | - [[recognizer]] 30 | - [[key_binder]] 31 | - [[speller]] 32 | - [[editor]] 33 | 34 | ### [[punctuator]] 35 | ### express_editor 36 | 编辑器,处理回车上屏、回退键等 37 | 和 [[#fluid_editor]] 互斥 38 | 39 | ### fluid_editor 40 | [ascii_punct 開關在 fluid_editor 下行為似乎不正確 · Issue #203 · rime/librime](https://github.com/rime/librime/issues/203) 41 | [请教,语句流 fluid_editor 的一个疑问,谢谢。【rime吧】_百度贴吧](https://tieba.baidu.com/p/1794305386) 42 | 43 | > 和 [[#express_editor]] 互斥 44 | > 句式编辑器,以空格断词、回车上屏的【注音】、【语句流】等输入方案 45 | > 也可以写作 `fluency_editor` 46 | 47 | ### selector 48 | [[候选框]]处理器(数字键、上下、换页) 49 | 50 | ### navigator 51 | [[输入码]] 内的光标移动(左右,Home,End) 52 | 53 | ### chord_composer 54 | 示例`combo_pinyin.schema.yaml` 55 | ❌和弦作曲家等多键并击的输入方案 56 | 并击把键盘分两半,相当于两块键盘。两边同时击键,系统默认在其中一半上按的键先于另一半,由此得出上屏码 57 | 58 | #### [[speller#alphabet]] 59 | #### [[speller#algebra]] 60 | 61 | #### output_format 62 | 并击完成后套用的式样,追加隔音符号 63 | 64 | #### prompt_format 65 | 并击过程中套用的式样,加方括号 66 | 67 | -------------------------------------------------------------------------------- /speller.md: -------------------------------------------------------------------------------- 1 | [speller](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#一speller) 2 | ## 逻辑 3 | > 主要考虑已有候选项后的[[#alphabet]]按键处理逻辑,可用`lun`测试 4 | > [[#auto_select]]开启 5 | > 约定:之前候选项数量 `n` 6 | 1. 已设置[[#max_code_length]] 7 | 1. 之前码长`=max`:则必然`n>1`,会上屏之前首项,并设置当前按键为输入码 8 | 2. 之前码长` 1`补充当前按键 13 | 2. 未设置[[#max_code_length]] 14 | 1. `n > 1`补充当前按键,更新后若`n == 1`,则直接上屏 15 | 16 | ## algebra 17 | ✅✅✅打字的核心拼写处理逻辑,修改输入码。默认只处理小写字母按键为[[输入码]],其他直接上屏 18 | 指定生成[[用户文件夹#hy.prism.bin]]文件的拼写运算规则,也可将一组并击编码转换为拼音音节 19 | 可以实现五笔中`z`当万能键的功能,不过可能会变卡 20 | 语法见[[preedit_format]] 21 | [[编程/正则]] 22 | [algebra](https://github.com/rime/home/issues/1153) 23 | 见`terra_pinyin.custom.yaml` 24 | - 比如输入`yoa`能转成`yao`以匹配`要` 25 | 26 | 27 | ## alphabet 28 | 定义本方案[[输入码]]字母表,包含用于并击的按键。 29 | 击键虽有先后,形成并击时,一律以字母表顺序排列 30 | - `alphabet: zyxwvutsrqponmlkjihgfedcba` 31 | ## use_space 32 | 是否以`空格`作为[[输入码]] 33 | 34 | ## max_code_length 35 | ✅五笔则需要设置此项,这样在此范围内输入码没有找到结果时,不会乱上屏减较码长的内容,比如`luns` 36 | - 如果被`recognizer`识别为url等,则会无效 37 | - 优先级比[[translator#enable_sentence]]高 38 | `max_code_length: 4` 39 | ## auto_clear 40 | 超过长度自动清除[[输入码]] 41 | - 如果错误率低,不需要 42 | `auto_clear: max_length` 43 | 44 | ## auto_select 45 | [五笔 auto_select = true 时如何以 max_code_length = 4 为准 · Issue #289](https://github.com/rime/librime/issues/289) 46 | ✅✅✅单结果可`自动上屏`,且能实现当输入码超过[[#max_code_length]]时,会自动首字上屏。 47 | 如果未设置[[#max_code_length]],在任意码长,只要无码都会自动顶之前有码的首字上屏,剩余输入码变成当前输入码 48 | 在[[recognizer#patterns]]匹配时==无效== 49 | 上面的功能,不一定好用,会导致如下问题: 50 | 1. 如`lua`时,已经无候选项,则会上屏`lu`的首字`较`上屏,再输入码设置为`a` 51 | 2. 唯一时自动上屏,但我们不一定记得住,仍然敲`空格`想要上屏,导致输出了无效的`空格` 52 | 53 | ## auto_select_unique_candidate 54 | ~~❌淘汰了~~ 55 | ## auto_select_pattern 56 | - 自动上屏规则(正则) 57 | `auto_select_pattern: "^([a-y]z|[a-z]{4})$"` 58 | 59 | ## delimiter 60 | 上屏的音节`分隔符`,五笔没用 61 | `delimiter: "'"` 62 | 63 | ## initials 64 | 仅作为起始键 65 | ## finals 66 | 仅作为末尾键 67 | -------------------------------------------------------------------------------- /按键.md: -------------------------------------------------------------------------------- 1 | --- 2 | aliases: 符号, 标点 3 | --- 4 | 5 | ``` 6 | BackSpace 退格 7 | Tab 水平定位符 8 | Linefeed  换行 9 | Clear 清除 10 | Return  回车 11 | Pause 暂停 12 | Sys_Req 印屏 13 | Escape  退出 14 | Delete  删除 15 | Home  原位 16 | Left  左箭头 17 | Up  上箭头 18 | Right 右箭头 19 | Down  下箭头 20 | Prior、Page_Up  上翻 21 | Next、Page_Down 下翻 22 | End 末位 23 | Begin 始位 24 | Shift_L 左Shift 25 | Shift_R 右Shift 26 | Control_L 左Ctrl 27 | Control_R 右Ctrl 28 | Meta_L  左Meta 29 | Meta_R  右Meta 30 | Alt_L 左Alt 31 | Alt_R 右Alt 32 | Super_L 左Super 33 | Super_R 右Super 34 | Hyper_L 左Hyper 35 | Hyper_R 右Hyper 36 | Caps_Lock 大写锁 37 | Shift_Lock  上文件锁 38 | Scroll_Lock 滚动锁 39 | Num_Lock  小键板锁 40 | Select  选定 41 | Print 打印 42 | Execute 执行 43 | Insert  插入 44 | Undo  还原 45 | Redo  重做 46 | Menu  菜单 47 | Find  搜寻 48 | Cancel  取消 49 | Help  帮助 50 | Break 中断 51 | space 52 | exclam  ! 53 | quotedbl  " 54 | numbersign  # 55 | dollar  $ 56 | percent % 57 | ampersand & 58 | apostrophe  ' 59 | parenleft ( 60 | parenright  ) 61 | asterisk  * 62 | plus  + 63 | comma , 64 | minus - 65 | period  . 66 | slash / 67 | colon : 68 | semicolon ; 69 | less  < 70 | equal = 71 | greater > 72 | question  ? 73 | at  @ 74 | bracketleft [ 75 | backslash   76 | bracketright  ] 77 | asciicircum ^ 78 | underscore  _ 79 | grave ` 80 | braceleft { 81 | bar | 82 | braceright  } 83 | asciitilde  ~ 84 | KP_Space  小键板空格 85 | KP_Tab  小键板水平定位符 86 | KP_Enter  小键板回车 87 | KP_Delete 小键板删除 88 | KP_Home 小键板原位 89 | KP_Left 小键板左箭头 90 | KP_Up 小键板上箭头 91 | KP_Right  小键板右箭头 92 | KP_Down 小键板下箭头 93 | KP_Prior、KP_Page_Up  小键板上翻 94 | KP_Next、KP_Page_Down 小键板下翻 95 | KP_End  小键板末位 96 | KP_Begin  小键板始位 97 | KP_Insert 小键板插入 98 | KP_Equal  小键板等于 99 | KP_Multiply 小键板乘号 100 | KP_Add  小键板加号 101 | KP_Subtract 小键板减号 102 | KP_Divide 小键板除号 103 | KP_Decimal  小键板小数点 104 | KP_0  小键板0 105 | KP_1  小键板1 106 | KP_2  小键板2 107 | KP_3  小键板3 108 | KP_4  小键板4 109 | KP_5  小键板5 110 | KP_6  小键板6 111 | KP_7  小键板7 112 | KP_8  小键板8 113 | KP_9  小键板9 114 | ``` 115 | -------------------------------------------------------------------------------- /translator.md: -------------------------------------------------------------------------------- 1 | [Rime_description#translator](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#三translator) 2 | 3 | ## 通用选项 4 | 5 | ### ![[preedit_format]] 6 | ### comment_format 7 | 默认显示编码提示,格式见 [[preedit_format]] 8 | ### echo_translator 9 | > 没有其他候选字时,回显[[输入码]](`Shift+Enter`上屏) 10 | 11 | ### dictionary 12 | - 翻译器将调取此字典文件(如果有扩展,则调用扩展) 13 | - 如果用了其他输入法的词库,则需要定义 [[#prism]] 名称以免覆盖其他输入法映射 14 | - 如果是 `reverse` 相关,则填主[[translator]]里定义的词典 15 | - `dictionary: wubi86_ci_extended` 16 | ``` 17 | - 【侯】局局(525312750) 23:46:28 18 | 涉及 dictionary 选项时,就只与 dictionary 有关。luna_pinyin_simp 方案本身的 dictionary 就是 luna_pinyin 的,所以只能用 luna_pinyin 的,反查也是 19 | ``` 20 | ### enable_sentence 21 | ✅✅✅允许句子输入,可以多个音节组合,是拼音输入法的核心选项 22 | 设置了[[speller#max_code_length]],此选项基本上无效 23 | 默认为`true` 24 | 25 | ### enable_user_dict 26 | > 是否开启用户词典(记录动态字词频、用户词) 27 | - `enable_user_dict: true` 28 | ### user_dict 29 | - [[#enable_user_dict]]开启才生效,见`rime_ice.schema.yaml` 30 | - [ ] 设定用户词典名,和主词典如何协同? 31 | ### disable_user_dict_for_patterns 32 | > 禁止某些编码录入用户词典 33 | ``` 34 | disable_user_dict_for_patterns: 35 | - "^z.*$" 36 | - "^a.**" 37 | ``` 38 | 39 | ### db_class 40 | - [ ] 设定用户词典类型,什么用 41 | `db_class: tabledb #文本` 42 | `db_class: userdb #二进制` 43 | 44 | ## initial_quality 45 | > 此翻译器的优先级,数据越大优先级越高(影响[[候选框]]字序) 46 | > 默认码表为`0` 47 | 48 | ## prism 49 | 设定由此主翻译器的 [[speller]] 生成的[[用户文件夹#hy.prism.bin]]棱镜文件名,或此副编译器调用的棱镜名 50 | 默认指向和[[#dictionary]]同名`prism`文件 51 | 52 | ## 仅table_translator有效 53 | ### enable_encoder 54 | > 是否开启自动造词 55 | ### encode_commit_history 56 | > 对已上屏的内容整合成词条儿,看需求 57 | ### max_phrase_length 58 | - 自动造词的最长字数 59 | ### enable_completion 60 | > 显示尚未输入完整码的字 61 | - `enable_completion: true` 设置后,在[[反查|拼音反查]]里,词组反查会失效 62 | ### sentence_over_completion 63 | > 在无全码对应字而仅有逐键提示时也开启智能组句 64 | ### strict_spelling 65 | > 配合[[speller]]中的fuzz规则,仅以畧拼码组词 66 | ### enable_charset_filter 67 | > 是否开启字符集过滤(启用 [[filters#cjk_minifier]] 后可适用于 [[translators#script_translator]]) 68 | 69 | ## 仅script_translator有效 70 | ### spelling_hints 71 | > 设定多少字以内候选标注完整带调拼音〔仅〕 72 | -------------------------------------------------------------------------------- /preedit_format.md: -------------------------------------------------------------------------------- 1 | > 对[[输入码]]进行修正并显示 2 | - 拼音:输入`lv`,显示`lü` 3 | - 笔画:输入`hspnz`显示`一丨丿丶乙` 4 | [[编程/正则]] 5 | 6 | ## xform 7 | > 替换(不保留原形) 8 | - `xform/^([nl])ue$/$1ve/` 9 | - `nue`和`lue`不匹配,`nve`和`lve`才可获得结果 10 | 11 | ## xlit 12 | > 批量一对一替换 13 | - `xlit/abc/ABC/` abracadabra→ABrACAdABrA 14 | 15 | ## derive 16 | >衍生(保留原形) 17 | 想让`n(ue|ve)`都可获得结果:`derive/^([nl])ue$/$1ve/` 18 | 19 | ## erase 20 | >删除 21 | 删除`dang1`这种格式:`erase/^.*\d$/` 22 | 23 | ## fuzz 24 | >畧拼(此种简拼仅组词,不出单字) 25 | 26 | ## abbrev 27 | >简拼,如`bj`能匹配`bijiao` 28 | >出字优先级较上两组更低 29 | 30 | ## 示例 31 | ### 地球拼音 32 | ``` 33 | - xform/([nl])v/$1ü/ 34 | - xform/([nl])ue/$1üe/ 35 | - xform/([jqxy])v/$1u/ 36 | ``` 37 | ### 双拼 38 | ``` 39 | translator: 40 | dictionary: luna_pinyin # 与【朙月拼音】共用词典 41 | prism: double_pinyin_abc # prism 要以本输入方案的名称来命名,以免把朙月拼音的拼写映射表覆盖掉 42 | preedit_format: # 这段代码用来将输入的双拼码反转为全拼显示;待见双拼码的可以把这段拿掉 43 | - xform/o(\w)/0$1/ # 零声母先改为0,以方便后面的转换 44 | - xform/(\w)q/$1ei/ # 双拼第二码转换为韵母 45 | - xform/(\w)n/$1un/ # 提前转换双拼码 n 和 g,因为转换后的拼音里就快要出现这两个字母了,那时将难以分辨出双拼码 46 | - xform/(\w)g/$1eng/ # 当然也可以采取事先将双拼码变为大写的办法来与转换过的拼音做区分,可谁让我是高手呢 47 | - xform/(\w)w/$1ian/ 48 | - xform/(\[dtnljqx\])r/$1iu/ # 对应多种韵母的双拼码,按搭配的声母做区分(最好别用排除式如 \[^o\]r 容易出状况) 49 | - xform/0r/0er/ # 另一种情况,注意先不消除0,以防后面把e当作声母转换为ch 50 | - xform/(\[nljqx\])t/$1iang/ 51 | - xform/(\w)t/$1uang/ # 上一行已经把对应到 iang 的双拼码 t 消灭,于是这里不用再列举相配的声母 52 | - xform/(\w)y/$1ing/ 53 | - xform/(\[dtnlgkhaevrzcs\])o/$1uo/ 54 | - xform/(\w)p/$1uan/ 55 | - xform/(\[jqx\])s/$1iong/ 56 | - xform/(\w)s/$1ong/ 57 | - xform/(\[gkhaevrzcs\])d/$1ua/ 58 | - xform/(\w)d/$1ia/ 59 | - xform/(\w)f/$1en/ 60 | - xform/(\w)h/$1ang/ 61 | - xform/(\w)j/$1an/ 62 | - xform/(\w)k/$1ao/ # 默默检查:双拼码 o 已经转换过了 63 | - xform/(\w)l/$1ai/ 64 | - xform/(\w)z/$1iao/ 65 | - xform/(\w)x/$1ie/ 66 | - xform/(\w)b/$1ou/ 67 | - xform/(\[nl\])m/$1ve/ 68 | - xform/(\[jqxy\])m/$1ue/ 69 | - xform/(\w)m/$1ui/ 70 | - "xform/(^|\[ '\])a/$1zh/" # 复原声母,音节开始处的双拼字母a改写为zh;其他位置的才真正是a 71 | - "xform/(^|\[ '\])e/$1ch/" 72 | - "xform/(^|\[ '\])v/$1sh/" 73 | - xform/0(\w)/$1/ # 好了,现在可以把零声母拿掉啦 74 | - xform/(\[nljqxy\])v/$1ü/ # 这样才是汉语拼音 :-) 75 | 76 | - 上屏码自定义,拼音有用,把nv显示为nü 77 | - - xform/([nl])v/$1ü/ 78 | - - xform/([nl])ue/$1üe/ 79 | - - xform/([jqxy])v/$1u/ 80 | ``` 81 | -------------------------------------------------------------------------------- /default.custom.yaml.md: -------------------------------------------------------------------------------- 1 | 2 | > 全局设定 3 | > windows相关配置在[[weasel.custom.yaml]] 4 | > 其他输入方案主要配置在[[hy.schema.yaml]] 5 | ## schema_list 6 | > 修改输入方案列表 7 | ``` 8 | - schema: wubi86 # 五笔86 9 | - schema: wubi86.unicode 10 | - schema: terra_pinyin # 地球拼音 dì qiú pīn yīn 11 | - schema: luna_pinyin # 朙月拼音 12 | - schema: py 13 | - schema: wubi98_chr 14 | - schema: wubi98_ci 15 | - schema: wubi98_dz 16 | - schema: wubi98_single 17 | - schema: wubi98_U 18 | - schema: chinese_numbers # 中文数字 19 | - schema: luna_pinyin_simp # 朙月拼音 简化字模式 20 | - schema: luna_pinyin_tw # 朙月拼音 臺灣正體模式 21 | - schema: bopomofo # 注音 22 | - schema: bopomofo_tw # 注音 臺灣正體模式 23 | - schema: jyutping # 粵拼 24 | - schema: cangjie5 # 倉頡五代 25 | - schema: cangjie5_express # 倉頡 快打模式 26 | - schema: quick5 # 速成 27 | - schema: wubi_pinyin # 五笔拼音混合輸入 28 | - schema: double_pinyin # 自然碼雙拼 29 | - schema: double_pinyin_mspy # 微軟雙拼 30 | - schema: double_pinyin_abc # 智能ABC雙拼 31 | - schema: double_pinyin_flypy # 小鶴雙拼 32 | - schema: wugniu # 吳語上海話(新派) 33 | - schema: wugniu_lopha # 吳語上海話(老派) 34 | - schema: sampheng # 中古漢語三拼 35 | - schema: zyenpheng # 中古漢語全拼 36 | - schema: ipa_xsampa # X-SAMPA 國際音標 37 | - schema: emoji # emoji表情 38 | ``` 39 | 40 | ## menu 41 | > 输入法[[候选框]]数量 42 | ### page_size 43 | 优先级比[[hy.schema.yaml#page_size]]低 44 | 45 | ### alternative_select_keys: 46 | `alternative_select_keys: "acegi"` 47 | - 数字键如设置为大写中文,用字母来选择个数 48 | 49 | ## Switcher 50 | > 输入方案切换[[rime#热键]] 51 | ### caption 52 | `caption: [方案选择]` 53 | 54 | ### hotkeys 55 | > 方案选择热键 56 | 内容来源: 57 | 1. [[#schema_list]]定义的输入方案列表 58 | 2. [[hy.schema.yaml#switches]]里的`status`不为空的列表 59 | 60 | ### save_options 61 | > [[switches#reset]]优先级更高 62 | - 开启后,当切换[[switches#内置开关]]状态时,状态会被保存。每当方案初始化时,会恢复保存的状态。 63 | ``` 64 | - full_shape 65 | - ascii_punct 66 | ``` 67 | ### fold_options 68 | [[hy.schema.yaml#switches]] 里的选项折叠成[[#hotkeys]]里的单行 69 | `fold_option: false` 70 | ### abbreviate_options 71 | ✅[[#fold_options]]时才有用:控制是否将每个选项名称略显为首字符 72 | `abbreviate_options: true` 73 | ### option_list_separator 74 | ✅[[#fold_options]]时才有用:分隔符,默认是空格 75 | `option_list_separator: '/'` 76 | -------------------------------------------------------------------------------- /hy.dict.yaml.md: -------------------------------------------------------------------------------- 1 | [dict文件详解](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#dictyaml-詳解) 2 | [DictionaryPack-词典扩展包](https://github.com/rime/home/wiki/DictionaryPack) 3 | [八股文](https://github.com/rime/home/wiki/RimeWithSchemata#八股文) 4 | [大词库的部署优化 · Issue #410 · rime/librime](https://github.com/rime/librime/issues/410#issuecomment-788014012) 5 | > 单字、含词等放在独立词库,生僻字则独立设计为输入方案,可以用按键临时调用,平时则不用 6 | - 是 [[translators]] 的参考书,可以用`#`注释 7 | - 通过 [[#import_tables]] 主码表[[hy.dict.yaml]]在「Librime」引擎中合二为一。主要依据是词频 8 | - [ ] 和 `Custom_phrase.txt` 的区别是什么?? 9 | - [ ] 一个词库,通过多字段,直接定义反查的信息。 10 | ## 词库下载 11 | - [清华大学开放中文词库](https://github.com/thunlp/THUOCL) 12 | - [词库下载](https://github.com/ling0322/webdict) 13 | ## 文件格式要求 14 | 1. UTF-8 nobomb 15 | 2. 以`\t`为列分隔符 16 | 3. 繁、简体和源码表一致 17 | 4. 编码形式和定义一致 18 | 19 | ## 规则说明 20 | - `简介信息`以`---`开始,以`...`结尾 21 | ### name 22 | > 必须和文件名的前半部分一致 23 | 使用场景 24 | - [[#import_tables]] 25 | - [[translator#dictionary]] 26 | ### sort 27 | 字典初始排序 28 | - `sort: by_weight` 词频 29 | - `sort: original` 码表 30 | ### use_preset_vocabulary 31 | 是否导入预设词表[八股文](https://github.com/rime/rime-essay) 32 | 一般不需要,里面的词库太杂了 33 | ### max_phrase_length 34 | 词条长度限制 35 | ### min_phrase_length 36 | 37 | ### columns 38 | > 定义码表各列的内容,用Tab分隔 39 | #### text 字/词 40 | #### [[输入码#code]] 41 | #### weight 词频(非负整数或百分数) 42 | #### stem 43 | 造词码 比如【有】打字是`e`,造词码是`de` 44 | ### vocabulary 45 | ??? 46 | ### import_tables 47 | > 用这个还是用 [[translator#dictionary]] 48 | > 顺序会影响候选项 49 | 50 | 导入的词典只导入词汇,会忽略YAML定义内容 51 | 导入其他词典(字(本身)、词、英语名称、用户词、生僻字分开),发送各格式的日期 52 | 用户词典名为去掉`.`后面内容的名称比如 `hy.ext.dict.yaml`,用户词典名为`hy`而不是`hy.ext` 53 | ``` 54 | import_tables: 55 | - wubi86_ci 56 | - wubi86_eng 57 | ``` 58 | 59 | ### encoder 60 | #### rules 61 | >[[#length]]和[[#formula]] 的条件组合,2个字怎么编码,3个字怎么编码 62 | ##### length_equal 63 | `length_equal: 2` 64 | ##### length_in_range 65 | `length_in_range: [4, 10]` 66 | ##### formula 67 | - `A`=第一个字,`B`=第2个字, `Y`=倒数第2个字, `Z`=最后一个字 68 | - `a`=第一个编码,`b`=第2个编码, `y`=倒数第2个编码, `z`=最后一个编码 69 | - `AaBzCaYzZz` 取第一字首码,第二字尾码、第三字首码、倒数第二字尾码、最後一字尾码 70 | - `AaAzBaBbBz` 取第一字首尾碼、第二字首次尾碼 71 | `formula: "AaAbBaBb"` 72 | 73 | #### exclude_patterns 74 | > 取消某编码的造词资格 75 | - `exclude_patterns: ['^z.*$']` 76 | 77 | #### tail_anchor 78 | - 造词码包含结构分割符〔仅用於仓颉〕 79 | -------------------------------------------------------------------------------- /滤镜.md: -------------------------------------------------------------------------------- 1 | --- 2 | aliases: opencc, simplifier 3 | --- 4 | - [Rime_description#opencc](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md#五simplifier) 5 | - [简繁转换OpenCC](https://github.com/BYVoid/OpenCC) 6 | - `python` 对应的是 `opencc-python-reimplemented` 7 | [[translator#comment_format]] 8 | 9 | 特性:对候选项的每个字进行处理,想要完整匹配见[[候选框#提示码]] 10 | 这种特性有时候会不好用,所以一般由[[switches]]控制开关。 11 | 对其他滤镜结果进行二次转换,只要滤镜顺序对,都会依次处理。 12 | 13 | > 路径:[[用户文件夹]]`\opencc` 14 | > [[附件/rime/同文opencc滤镜制作安装及进阶教程2.0.pdf]] 15 | 16 | ## 说明 17 | ### json 18 | > 配置文件[[#普通滤镜]]和[[#编码滤镜]]通用 19 | > 可以读取`ocd`或`txt`文件,通过 `dict.type` 值区分 20 | > 可对应多个文件 21 | #### name 22 | 似乎无所谓 23 | #### type 24 | #### dict 25 | 1. type 26 | - text 27 | - ocd 28 | - group 多文件 29 | 2. file 30 | #### conversion_chain 31 | 32 | ### 内容文件 33 | #### txt 34 | ##### 格式 35 | > ✅✅✅不要有空行,关键字唯一 36 | - `关键字\t滤镜内容1 滤镜内容2 ...` 37 | #### ocd 38 | > ✅✅✅注意,小狼毫是`32位`,如果给安卓用,要编译成`64位`,或用`txt`格式(效率较低) 39 | txt→ocd: `opencc_dict.exe -i in.txt -o out.ocd` 40 | ocd→txt: `opencc_dict.exe -i in.ocd -o out.txt -f ocd -t text` 41 | 42 | ## 分类 43 | 44 | ### 普通滤镜 45 | > ✅✅✅适用于联想,并把联想内容放到[[候选框]] 46 | - 可生成多项,按原内容将排到后面,中间以`空格`分隔 47 | - 多个滤镜的相同关键字内容可同时存在 48 | - 缺点:无法显示`空格`和`回车` 49 | - [ ] 功能很不错,如何定义?? 50 | 51 | ### 编码滤镜 52 | > 适用于多行,需要排版的内容,显示在[[候选框#提示码]] 53 | - 在滤镜关键字`编码区`显示,适合`多行`及`排版`的复杂内容:诗词,词典等 54 | - 通过滤镜转换对应条目的编码,使用正则使编码变形 55 | - 多个滤镜的相同滤镜关键字内容不会同时显示,会根据 [[filters]] 节点中滤镜顺序显示(下方后执行的会覆盖前面内容),如果有冲突,可以给滤镜设置开关,或让滤镜`关键字`不同 56 | - 缺点 57 | - 用` `代表`空格`,`
`代表`换行` 58 | - 内容直接无法输出,需要用其他方式 59 | 60 | ## 文件 61 | 62 | ## schema设置 63 | 64 | - [[#配置文件]]和[[#内容文件]]放入[[用户文件夹#opencc]] 65 | - [[switches]]添加开关 66 | - [[filters]]添加 `simplifier@hytips` 67 | - 定义hytips的功能 68 | 69 | ## 上屏 70 | [[soft/rime/候选框#上屏]] 71 | 72 | ## simplifier选项 73 | 74 | ### option_name 75 | 和 [[switches#name]] 一致 76 | ### opencc_config 77 | - 全匹配才替换,需要转用[[反查]] 78 | `opencc_config: s2t.json` 79 | `opencc_config: s2tw.json` 80 | ### tags 81 | 设定此 filter 的作用范围 82 | `tags: [ pinyin ]` 挂在指定的[[translator]]上 83 | 84 | ### show_in_comment 85 | 设定是否仅将转换结果显示在备注中,否则和候选框对调位置 86 | - [ ] 简易滤镜,可以添加到候选项中。 87 | ### overwrite_comment 88 | 是否覆盖之前已有备注 89 | 如果不想覆盖,则只能用普通滤镜,添加到候选项中 90 | 91 | ### tips 92 | 是否显示转换前的字 93 | 如果显示,优先级会比较高,比如有中英翻译,翻译会被覆盖,效果:`爲 〔为〕` 94 | `tips: all|char|none(默认)` 95 | ### excluded_types 96 | 取消特定范围〔一般为❌`reverse_lookup_translator`〕转化用字 97 | 98 | ### allow_erase_comment 99 | 是否允许返回空提示码,默认`false` 100 | -------------------------------------------------------------------------------- /patch.md: -------------------------------------------------------------------------------- 1 | > 方案名约定为hy 2 | > 以源文件为基础([[#import_preset]]),[[#patch]]覆盖重新定义的选项(`custom`文件才有效) 3 | [patch原理](https://blog.csdn.net/weixin_42148809/article/details/124827354) 4 | [✅✅✅patch用法](https://github.com/rime/home/wiki/Configuration#補靪) 5 | [CustomizationGuide](https://github.com/rime/home/wiki/CustomizationGuide#定製指南) 6 | 7 | [patch @before last{n} n从10开始有问题 · Issue #592 · rime/librime](https://github.com/rime/librime/issues/592) 8 | ## import_preset和__include的区别 9 | 和上下文相关 10 | 11 | ## import_preset 12 | > 由外部文件导入,实现模块化配置:可对各模块新建 `*.custom.yaml` 文件,每个文件里`patch:`即可实现 13 | > 比如[[#key_binder]]设置`import_preset: default`,会从[[共享文件夹#default.yaml|default.yaml]]导入对应的配置 14 | 用到此方法的模块有 recognizer、key_binder、punctuator 15 | 16 | ## patch 17 | ### 数组操作 18 | #### 修改 19 | #### 插入 20 | ```yaml 21 | 最前插入 22 | xxx/@before 0: a 23 | xxx/@before 1: b 24 | xxx/@before 2: c 25 | 26 | 第1项后面依次插入 27 | xxx/@after 0: a 28 | xxx/@after 1: a 29 | xxx/@after 2: a 30 | 31 | 最后1项前依次插入 32 | xxx/@before last01: a #这里是字符串排序,所以两位数兼容性比较好 33 | xxx/@before last02: b 34 | xxx/@before last03: c 35 | 36 | 末尾依次插入 37 | xxx/+: #推荐 38 | - a 39 | - b 40 | - c 41 | 42 | xxx/@next01: a 43 | xxx/@next02: b 44 | xxx/@next03: c 45 | ``` 46 | 47 | ### 键值对 48 | `xxx/key: value` 49 | 刪除:`xxx/` 50 | ### __include 51 | 52 | 在当前位置包含另一 YAML 节点的內容 53 | 1. 本地节点:`__include: local/node` 54 | 2. 另一文件全部:`__include: config.yaml:/` 55 | 3. 另一文件子节点:`__include: config.yaml:/external/node` 56 | ``` 57 | include_example_5: 58 | __include: some_map 59 | occupation: journalist #新增内容 60 | simplicity: very #覆盖原内容 61 | ``` 62 | 63 | ### __patch 64 | 65 | 修改某些值 66 | ``` 67 | __patch: 68 | key/alpha: value A 69 | key/beta: value B 70 | ``` 71 | 72 | ``` 73 | patch_example_1: 74 | sibling: old value 75 | append_to_list: 76 | - existing item 77 | merge_with_map: 78 | key: value 79 | replace_list: 80 | - item 1 81 | - item 2 82 | replace_map: 83 | a: value 84 | b: value 85 | 86 | __patch: 87 | sibling: new value 88 | append_to_list/+: #添加 list 89 | - appended item 90 | merge_with_map/+: #添加 map 91 | key: new value 92 | new_key: value 93 | replace_list/=: #修改 list 94 | - only item 95 | replace_map/=: #修改 map 96 | only_key: value 97 | ``` 98 | 99 | - "一级设定项/二级设定项/三级设定项": 新的设定值 100 | - "另一个设定项": 新的设定值 101 | - "再一个设定项": 新的设定值 102 | - "含列表的设定项/@n": 列表第n个元素新的设定值,从0开始计数 103 | - "含列表的设定项/@last": 列表最后一个元素新的设定值 104 | - "含列表的设定项/@before 0": 在列表第一个元素之前插入新的设定值(不建议在补丁中使用) 105 | - "含列表的设定项/@after last": 在列表最后一个元素之后插入新的设定值(不建议在补丁中使用) 106 | - "含列表的设定项/@next": 在列表最后一个元素之后插入新的设定值(不建议在补丁中使用) 107 | - `"switches/@0/reset": 1`表示switches的第1项的值改成1 108 | 109 | ## 覆盖式(列表样式) 110 | ✅✅✅ 111 | - 复制原段落(第1行没缩进)到文件 112 | - 粘贴的内容增加2缩进,如果文件没patch则前面行插入没缩进的patch: 113 | - 修改相应的值即可 114 | 115 | ## 插入式(单句样式) 116 | - "engine/filter/@before 3": *** 117 | - 数字从0开始,所以是插到到第4个之前,排在第4个 118 | -------------------------------------------------------------------------------- /rime-lua.md: -------------------------------------------------------------------------------- 1 | [wik](https://github.com/hchunhui/librime-lua/wiki/Scripting) 2 | [[附件/rime/小狼毫版lua脚本使用教程.pdf]] 3 | 可以用在以下4个环节 4 | - lua_processor@p_fun 5 | - lua_segmentor@s_fun 6 | - lua_translator@t_fun 7 | - lua_filter@f_fun 8 | ## api 9 | - https://github.com/rime/weasel/issues/299 10 | - https://github.com/rime/librime/issues/479 11 | - https://github.com/rime/librime/blob/master/tools/rime_api_console.cc 12 | 13 | ## 输入 14 | 15 | ### input 16 | translate 对象,为待过滤的 `Candidate` 流 17 | `input == "date"` 18 | 19 | ### seg 20 | [[输入码#代码段]]在输入码中的位置 21 | `seg.start` 22 | `seg._end` 为什么要加`_` 23 | 24 | ### key_event 25 | `KeyEvent` 对象,为待处理的按键。 26 | 27 | ### env 28 | #### 属性 29 | ##### [[#engine]] 30 | ##### [[#name_space]] 31 | 32 | ## 对象 33 | ### engine 34 | [engine](https://github.com/hchunhui/librime-lua/wiki/Scripting#engine) 35 | `env.engine` 36 | #### 属性 37 | ##### schema 38 | ##### [[#context]] 39 | ##### active_egine 40 | #### 方法 41 | ##### process_key 42 | ##### compose 43 | `env.engine:compose(env.engine.context)` 44 | ##### commit_text 45 | 上屏文本 46 | `commit_text(text)` 47 | ##### apply_schema 48 | 49 | ### name_space 50 | 51 | ### context 52 | [context](https://github.com/hchunhui/librime-lua/wiki/Scripting#context) 53 | `env.engine.context` 54 | > 输入编码上下文,在不同应用输入,会单独记录此对象 55 | > [context](https://github.com/hchunhui/librime-lua/wiki/Scripting#context) 56 | #### 属性 57 | | 属性名 | 类型 | 解释 | 58 | | :-: | :-: | :-: | 59 | | composition | Composition | | 60 | | input | string | 正在输入的编码字符串 | 61 | | caret_pos | number | 脱字符位置 | 62 | | commit_notifier | Notifier | | 63 | | select_notifier | Notifier | | 64 | | update_notifier | Notifier | | 65 | | delete_notifier | Notifier | | 66 | | option_update_notifier | OptionUpdateNotifier | 选项改变通知,使用 connect 方法接收通知 | 67 | | property_update_notifier | PropertyUpdateNotifier | | 68 | | unhandled_key_notifier | KeyEventNotifier | | 69 | #### 方法 70 | ##### get_option 71 | `env.engine.context:get_option(optName)`获取[[switches#options]]当前值 72 | 73 | `refresh_non_confirm_composition()` 74 | 75 | ## 调试 76 | [工具](https://github.com/rime/librime/tree/master/tools) 77 | ## librime-lua 78 | - [rime-lua文档](https://github.com/hchunhui/librime-lua/wiki/Scripting#脚本开发指南) 79 | - [shewer/librime-lua](https://github.com/shewer/librime-lua/releases) 80 | - [✅✅✅shewer/librime-lua-script](https://github.com/shewer/librime-lua-script) 81 | 82 | ## 更新 83 | 更新[[soft/rime/共享文件夹#rime.dll|rime.dll]] 84 | 85 | ## lua_processor 86 | [lua_processor](https://github.com/hchunhui/librime-lua/wiki/Scripting#lua_processor) 87 | 返回值为整数: 88 | 1. `0` kRejected 字符上屏 89 | 2. `1` `kAccepted` 字符不上屏 90 | 3. `2` kNoop,字符不上屏,交给下一个[[processor]] 91 | 92 | 简化形式`processor(key_event[, env])` 93 | 完整形式: 94 | ```lua 95 | { 96 | init = function (env) ... end, 97 | func = function (key_event, env) ... end, 98 | fini = function (env) ... end 99 | } 100 | ``` 101 | 102 | ## lua_segmention 103 | 简化形式:`s_xxx(segmentation[, env])` 104 | 完整形式 105 | ```lua 106 | { 107 | init = function (env) ... end, 108 | func = function (segmentation, env) ... end, 109 | fini = function (env) ... end 110 | } 111 | ``` 112 | 113 | 参数: 114 | 1. segmentation: 115 | 2. env 116 | 返回值为整数: 117 | 1. 0 `kRejected` 字符上屏 118 | 2. 1 `kAccepted` 字符不上屏 119 | 3. 2 `kNoop`,字符不上屏,交给下一个[[processor]] 120 | 121 | ## lua_translator 122 | [lua_translator](https://github.com/hchunhui/librime-lua/wiki/Scripting#lua_translator) 123 | 简化形式`t_xxx(input, seg[, env])` 124 | 完整形式 125 | ```lua 126 | init = function (env) ... end --构造时调用 127 | func = function (input, seg, env) ... end, 128 | fini = function (env) ... end --析构时调用 129 | ``` 130 | 131 | ## lua_filter 132 | [lua_filter](https://github.com/hchunhui/librime-lua/wiki/Scripting#lua_filter) 133 | 简化形式`f_xxx(input[, env, cands])` 134 | 完整形式 135 | ```lua 136 | init = function (env) ... end, 137 | func = function (input, env) ... end, 138 | fini = function (env) ... end, 139 | tags_match = function (segment, env) ... end --- 可选 140 | ``` 141 | > 针对[[候选框]] 142 | > 见[[translators#lua_translator]] 143 | 使用lua自定义过滤,例如过滤字符集、调整排序,后接`@函数名` 144 | lua函数名即用户文件夹内`rime.lua`中函数名,参数为`(input, env)` 145 | 可以[[#get_option]]方式绑定到[[switches]]/[[key_binder]] 146 | - `input`:`Translation` 对象,为待过滤的 `Candidate` 流。 147 | - `env`:lua table 对象。预设 `engine` 和 `name_space` 两个成员,分别是 `Engine` 对象和前述 `name_space` 配置字符串。 148 | 149 | 完整形式是 lua table,其中 `func` 与简化形式意义相同。`init` 与 `fini` 分别在 `lua_filter` 构造与析构时调用。`tags_match` 出现时覆盖 filter 的 `TagsMatch` 方法。 150 | ## 命令 151 | ### log 152 | - info 153 | - warning 154 | - error 155 | ### ReverseDb 156 | 一般用在 init 157 | - [ ] `coredb`是什么数据类型,应该怎么用 158 | ``` 159 | local function init(env) 160 | -- 当此组件被载入时,打开反查库,并存入 `coredb` 中 161 | env.coredb = ReverseDb("build/core2020.reverse.bin") 162 | end 163 | ``` 164 | 165 | 166 | ### config 167 | [config](https://github.com/hchunhui/librime-lua/wiki/Scripting#config) 168 | (方案的)配置。可以通过 `env.engine.schema.config` 获得 169 | ### KeyEvent 170 | [KeyEvent](https://github.com/hchunhui/librime-lua/wiki/Scripting#keyevent) 171 | ### Preedit 172 | ### Composition 173 | 上下文组成的“作品”。(通过此对象,可间接获得“菜单menu”、“候选词”、“片段segment”相关信息) 174 | 175 | 可通过 `env.engine.context.composition` 获得。 176 | ```lua 177 | local composition = env.engine.context.composition 178 | 179 | if(not composition:empty()) then 180 | -- 获得 Segment 对象 181 | local segment = composition:back() 182 | 183 | -- 获得选中的候选词下标 184 | local selected_candidate_index = segment.selected_index 185 | 186 | -- 获取 Menu 对象 187 | local menu = segment.menu 188 | 189 | -- 获得(已加载)候选词数量 190 | local loaded_candidate_count = menu:candidate_count() 191 | end 192 | ``` 193 | ### segmention 194 | [segmention](https://github.com/hchunhui/librime-lua/wiki/Scripting#segmentation) 195 | ### Segment 196 | [✅✅✅Setment](https://github.com/hchunhui/librime-lua/wiki/Scripting#segment) 197 | 分词片段。触发 translator 时作为第二个参数传递给注册好的 lua_translator。 198 | 或者以下方法获得: (在 filter 以外的场景使用) 199 | ```lua 200 | local composition = env.engine.context.composition 201 | if(not composition:empty()) then 202 | local segment = composition:back() 203 | end 204 | --构造方法:`Segment(start_pos, end_pos)` 205 | --1. start_pos: 开始下标 206 | --2. end_pos: 结束下标 207 | ``` 208 | ### 候选项 209 | 210 | ``` 211 | local composition = env.engine.context.composition 212 | 213 | if(not composition:empty()) then 214 | -- 获得 Segment 对象 215 | local segment = composition:back() 216 | 217 | -- 获得选中的候选词下标 218 | local selected_candidate_index = segment.selected_index 219 | 220 | -- 获取 Menu 对象 221 | local menu = segment.menu 222 | 223 | -- 获得(已加载)候选词数量 224 | local loaded_candidate_count = menu:candidate_count() 225 | end 226 | ``` 227 | 228 | #### Candidate 229 | 生成候选项 230 | [Candidate](https://github.com/hchunhui/librime-lua/wiki/Scripting#keyevent) 231 | `Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "注释")` 232 | 233 | #### yield 234 | 发送候选项到[[候选框]] 235 | `yield(Candidate())` 236 | 237 | ## 应用 238 | ### 过滤字符集 239 | 1. 修改字库 240 | -------------------------------------------------------------------------------- /trime.md: -------------------------------------------------------------------------------- 1 | [使用说明](https://github.com/osfans/trime/wiki/UserGuide) 2 | [trime.yaml詳解](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3) 3 | [Trime中为什么没有`共享文件夹`?](https://github.com/osfans/trime/issues/104) 4 | [在设置界面设置候选词数量 by tumuyan · Pull Request #768 · osfans/trime](https://github.com/osfans/trime/pull/768) 5 | [Improvement for logging by WhiredPlanck · Pull Request #866 · osfans/trime](https://github.com/osfans/trime/pull/866) 6 | build文件夹,推荐由PC转过去 7 | > 重启算法服务: 8 | 9 | 10 | ## 路径 11 | `/sdcard/Android/data/com.osfans.trime/rime` 12 | `/sdcard/rime` 13 | 14 | ## 安装步骤 15 | 1. 手机安装release版,`3.2.9`选`配色`有bug,可以先用3.2.8,新版本肯定会修复。 16 | 17 | ## 设置 18 | 1. 键盘设置:拦截相关热键 19 | 20 | ## switches 21 | - `_hide_candidate` 隐藏候选栏`Candidate_switch` 22 | - `_hide_comment` 隐藏候选项注释`Comment_switch` 23 | - `_hide_key_hint` 隐藏按键下方的助记符号`Hint_switch` 24 | - [3.2.6]`_hide_key_symbol` 隐藏按键上方的符号 25 | 26 | ## 键盘要求 27 | 1. 没有直接的数字按键 28 | 2. 没有 CapsLock 功能 29 | 3. 按键`z`和`a`两行按键同列,和实际键盘有出入 30 | 4. 修改常用的符号到按键上 31 | 2. 复制小狼毫的用户文件夹大部分文件,以下是排除列表 32 | - weasel.custom.yaml 33 | - weasel.yaml 34 | - installation.yaml 35 | - user.yaml 36 | - rime.dll 37 | - opencc 如果用`ocd`格式,需要用64位的 `opencc_dict` 编译 38 | - [ ] opencc用了txt格式仍无效,需要做什么??? 39 | 1. 同文不像小狼毫自带几个输入方案,所以还要从[[共享文件夹]]复制 40 | - default.yaml 41 | - 关联输入方案的`schema.yaml`文件 42 | 2. 部署功能因为没有日志非常难受,所以暂时就依赖PC把大部分依赖都build好迁移 43 | 44 | 45 | 46 | ## 键盘整体逻辑 47 | ### 基础定义 48 | 1. 颜色定义:颜色是`RGB`和[[soft/rime/weasel.custom.yaml]]相反 49 | 1. [[#colors]]定义最基础的颜色 50 | 2. [[#fallback_colors]]颜色补充 51 | 3. 主题:[[#preset_color_schemes]]如果只用单风格键盘,只设计一套即可 52 | 2. 按键功能定义:[[#android_keys]]和[[#preset_keys]] 53 | ### 键盘 54 | 1. 根据[[#preset_keys]]制作单个键盘: 55 | - [定制键盘](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#示例给键盘添加删词功能) 56 | - 整体样式[[#style]] 57 | - ![a](https://camo.githubusercontent.com/2328e18764bde46bd20fc0eb30c392123a11b4479190ca683f503960f639f10e/687474703a2f2f696d677372632e62616964752e636f6d2f666f72756d2f7069632f6974656d2f386131393865353166336465623438663562323638393637663731663361323932636635373831622e6a7067) 58 | - ![[附件/小狼毫配色.png]] 59 | - 按键上面按键组合成[[#preset_keyboards]] 60 | 1. 多个键盘:[[#keyboards]]主键盘绑定各子键盘 61 | 62 | ## style 63 | 界面样式及特色功能,具体见 [[#preset_color_schemes]] 64 | 65 | ### 尺寸 66 | #### horizontal_gap 67 | 按键水平间距 68 | #### vertical_gap 69 | 按键行间距 70 | #### candidate_padding 71 | 候选项内边距,如`5` 72 | #### candidate_spacing 73 | 候选间距,如`0.5` 74 | 75 | 76 | ### auto_caps 77 | 是否开启自动句首大写(其中`ascii`:仅英文模式句首大写) 78 | ### background_dim_amount 79 | ❌暂时没用,`tongwenfeng`里定义了`0.5` 80 | ### max_height 81 | ❌暂时没用 82 | ### min_height 83 | ❌暂时没用 84 | ### candidate_use_cursor 85 | 是否打开候选焦点高亮 86 | ### comment_on_top 87 | 候选项注释是否在上方(`false`:在右侧) 88 | ### horizontal 89 | [3.2.3]水平模式。改变方向键的功能(`true`:方向键适配横排候选;`false`:方向键适配竖排候选) 90 | ### keyboards 91 | ✅✅✅键盘配置。除主键盘外,其它需要用到的键盘都要在这里声明。 92 | ### proximity_correction 93 | ✅将按键之间的空白区域分配给相邻的按键,避免空按 94 | 一般`proximity_correction: true` 95 | ### background_folder 96 | [3.2.3]背景图路径,即保存在 background 的哪个子目录。 使用此参数可以方便管理多个主题的图片(当然也可以指定多个主题共用一套图片)。 97 | ### reset_ascii_mode 98 | 不同进程中显示键盘时是否重置中英文状态 99 | ### latin_locale 100 | 在英文状态(ascii_mode)下,朗读按键时所用的语言。 101 | ### locale 102 | 在中文状态下,朗读上屏文本和按键时所用的语言。 103 | ※ 需要先在同文设置界面开启朗读功能。朗读功能还需要手机的 TTS 引擎支持。可使用系统默认引擎,也可安装讯飞语记等第三方引擎。`latin_local`和`local`可以设置的语言也取决于 TTS 引擎。常见的语言:`zh_TW`, `zh_CN`, `zh_HK`, `en_US`, `ja_JP`, `ko_KR`,…… 104 | ### speech_opencc_config 105 | 语音输入简繁转换(默认值`s2t.json`: 将语音识别的结果转换成繁体再上屏) 106 | 需要配合 OpenCC 组件来使用。转换的选项有: 107 | ### layout 108 | > 候选窗口设置 109 | - `position`: 悬浮窗位置 110 | - `left`|`right`|`left_up`|`right_up` 这几种都可以让悬浮窗口动态跟随光标(需要 ≥Android5.0) 111 | - `fixed`|`bottom_left`|`bottom_right`|`top_left`|`top_right` 这几种是固定在屏幕的边角上 112 | - `min_length`: 悬浮窗最小词长(候选词长大于等于`min_length`才会进入悬浮窗) 113 | - `max_length`: 连续排列的多个候选项总字数(包括候选项注释)超过`max_length`时,把超出的候选项移到下一行显示(单个候选项若超长,或者`max_length`数值过大,则由`max_width`决定是否换行) 114 | - `sticky_lines`: 固顶行数(不与其它候选同排,单独一行显示的候选项个数) 115 | - `max_entries`: 最大词条数(允许进入悬浮窗的最大词条数) 116 | - `all_phrases`: 显示所有长词。所有满足`min_length`的词条都显示在悬浮窗(一般只用于 table translator,有可能会改变候选项的显示顺序) 117 | - `border`: 边框宽度(增大边框则向内加粗,也会对悬浮窗圆角产生一点影响) 118 | - `max_width`: 窗口最大宽度(候选超长则自动换行) 119 | - `min_width`: 最小宽度(悬浮窗的初始宽度) 120 | - `margin_x`: 水平边距(左右留白大小) 121 | - `margin_y`: 竖直边距(上下留白大小) 122 | - `line_spacing`: 候选词的行间距(px) 123 | - `line_spacing_multiplier`: 候选词的行间距倍数 124 | - `spacing`: 悬浮窗位置上下偏移量(一般上移为正,下移为负,但当`position`设为 top_xxx 时,方向是相反的) 125 | - `round_corner`: 窗口圆角(同时也会使**候选栏**的高亮候选边框产生圆角) 126 | - `alpha`: 悬浮窗透明度*(`0x00~0xff`。0x00 为全透明) 127 | - `background` 128 | - [3.2.3]❌~~悬浮窗背景*(颜色或图片二选一。比如颜色:0xFFD3FF83;图片:xxx.jpg。图片格式 jpg 与 png 皆可,相应的图片需放置在用户文件夹的 backgrounds 目录下,放在共享文件夹无效~~ 129 | - `elevation`: 悬浮窗阴影 130 | - `movable`: 是否可移动窗口,或仅移动一次 true|false|once 131 | 132 | ### window 133 | > 编码、候选项等组件 [window](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#4悬浮窗口) 134 | #### 窗口移动图标 135 | - `- {start: "", move: 'ㄓ ', end: ""}` 136 | 当`movable`设为可移动时,拖动这个图标即可调整悬浮窗的位置。`move`可改为任意符号,`start` `end`为左右修饰符号,若不需要修饰可简化为`{move: 'ㄓ '}`。 137 | #### 编码 138 | - `- {start: "", composition: "%s", end: "", letter_spacing: 0}` 139 | `composition`若去掉则不显示编码区。`letter_spacing`为字符间距 140 | #### 候选项 141 | - `- {start: "\n", label: "%s.", candidate: "%s", comment: " %s", end: "", sep: " "}` 142 | `start: "\n"`表示这个组件另起一行,`label`候选项序号,`candidate`候选项,`comment`候选项注释,`sep`候选项分隔符。(除`candidate`外,其它都是可选的。比如删掉`label`则不显示候选项序号) 143 | #### 其他按键 144 | > 另外还可以在悬浮窗内放置普通按键,比如地球拼音的声调键: 145 | - `- {start: "\n", click: ";", label: " ˉ ", align: center, end: " "}` 146 | #`click: ";"` `label: " ˉ "`作用与键盘按键相同。`align`对齐方式,left 左对齐|right 右对齐|center 居中,默认为左对齐可省略不写(align 每行组件只需写一个,也可用于上面的编码与候选) 147 | - `- {click: "/", label: " ˊ ", end: " "}` 148 | #`end: " "`的作用是在按键间形成间隙 149 | - `- {click: ",", label: " ˇ ", end: " "}` 150 | - `- {click: "\\", label: " ˋ "}` 151 | 152 | 153 | ## fallback_colors 154 | [fallback_colors](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#二fallback_colors) 155 | [[#style]]未定义的颜色,在这里补充 156 | 因为这个机制,最少只需要`back_color`和`text_color`就可以做出一个配色方案 157 | 158 | ## preset_color_schemes 159 | [preset_color_schemes](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#三preset_color_schemes) 160 | 配色方案 161 | ### dark_scheme 162 | 表示当前是明亮模式,如果系统切换为深色模式,则自动切换到值对应的方案 163 | `dark_scheme: dark` 164 | ### 颜色格式 165 | - `red`、`green`、`blue`…… 166 | - `0xaarrggbb` 167 | - `0xrrggbb` (省略了 aa,表示完全不透明) 168 | - `"#aarrggbb"` (引号不能省略,否则会与注释冲突) 169 | - `"#rrggbb"` (同上) 170 | - `0xaa` 171 | ### [[soft/rime/trime-color]] 172 | 173 | ## android_keys 174 | ❌内置按键以及各种可用的条件、功能查阅,一般没什么用了。见[[#preset_keys]] 175 | [android_keys](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#四android_keys) 176 | 177 | ### when 178 | - `click`: ✅单击 179 | - `long_click`: ✅长按,按键字符同`hint` 180 | - `composing`: ✅输入状态标签(处于输入过程中) 181 | - `swipe_left`: ✅左滑 182 | - `swipe_right`: ✅右滑 183 | - `swipe_up`: ✅上滑 184 | - `swipe_down`: ✅下滑 185 | - `ascii`: 西文标签(处于英文状态时) 186 | - `paging`: 翻页标签(翻页时) 187 | - `has_menu`: 菜单标签(出现候选项时——非空码时) 188 | - #`always`: 始终 189 | - #`hover`: 滑过 190 | - `combo`: 并击 191 | - #`double_click`: 双击 192 | 193 | ### property 194 | #### label 195 | ✅中文状态的按键标签 196 | #### hint 197 | ✅按键助记(用于显示双拼的韵母等,显示在按键下方,修改颜色见[[soft/rime/trime-color#key_symbol_color]]) 198 | #### preview 199 | ✅按键气泡提示,默认读取`label`,空格键默认读取输入方案名 200 | #### send_bindings 201 | 用来控制`composing`、`has_menu`、`paging`时是否发送按键给后台(默认`true`:发送;`false`:不发送,仅改变按键标签,按键的实际功能仍是`click`) 202 | #### states 203 | 状态标签(用于切换开关的状态) 204 | #### width 205 | #### height 206 | #### shift_lock 207 | Shift、Ctrl、Alt、Meta 等修饰键的锁定方式(click:单击锁定,可用于「选择」键;long:长按锁定(`默认`);ascii_long:仅英文状态长按锁定) 208 | #### repeatable 209 | 长按重复 210 | #### gap 211 | 间隔 212 | - [3.2.6]`label_symbol`: 按键的符号标签(通常显示在按键字符上方,当缺少此参数时,显示 long_click 指定的预设按键的的 label) 213 | - `enter_labels`:回车键的文本会动态变化[由App指定Enter键的文字 · Issue #669 · osfans/trime](https://github.com/osfans/trime/issues/669) 214 | #### functional 215 | ✅是否跟随功能键的颜色风格 216 | ### action 217 | - `command`: 执行命令。目前内建支持的值包含:`liquid_keyboard paste_by_char broadcast clipboard date commit run share_text`,其他值会作为 Intent 处理 218 | - `send`: ✅发送按键 219 | - `option`: 命令参数 220 | - `select`: 选择(键盘布局) 221 | - `toggle`: 切换状态 222 | - `commit`: 直接上屏 (用于输出各种网址邮箱等) 223 | - `VOICE_ASSIST`语音输入 224 | #### text 225 | ✅组合键,比如`(){left}`,不能直接用在键盘布局中,要定义到按键后,需要用`click`等绑定才生效 226 | ```yaml 227 | - "{Escape}{/fh}":清空前面的输入码并输入`/fh` (配合 symbols.yaml 可以输入符号) 228 | - "「」{Left}{Keyboard_default}":输出成对符号`「」`并把光标移到符号中间再返回主键盘 229 | - "{Control+Left}":逐词移动。(单个组合键也可以直接用`send: Control+Left`,`text`可以看作是组合键的组合) 230 | ``` 231 | 232 | ```yaml 233 | Date: {label: 日期, send: function, command: date, option: " yyyy-MM-dd "} 234 | Time: {label: 時間, send: function, command: date, option: "HH:mm:ss"} #時間: date 格式 235 | TrimeApp: {label: 同文, send: function, command: run, option: "com.osfans.trime"} #運行程序: run 包名 236 | TrimeCmp: {label: 同文組件, send: function, command: run, option: "com.osfans.trime/.Pref"} #運行程序指定組件: run 包名/組件名 237 | Homepage: {label: 同文主頁, send: function, command: run, option: "https://github.com/osfans/trime"} #查看網頁: run 網址 238 | Wiki: {label: 維基, send: function, command: run, option: "https://zh.wikipedia.org/wiki/%s"} #搜索網頁: %s或者%1$s爲當前字符 239 | Google: {label: 谷歌, send: function, command: run, option: "https://www.google.com/search?q=%s"} #搜索網頁: %s或者%1$s爲當前字符 240 | MoeDict: {label: 萌典, send: function, command: run, option: "https://www.moedict.tw/%3$s"} #搜索網頁: %3$s爲光標前字符 241 | Baidu: {label: 百度搜索, send: function, command: run, option: "https://www.baidu.com/s?wd=%4$s"} #搜索網頁: %4s爲光標前所有字符 242 | Zdic: {label: 漢典, send: function, command: run, option: "http://www.zdic.net/sousuo/?q=%1$s"} #搜索網頁: %s或者%1$s爲當前字符 243 | Zdic2: {label: 漢典, send: function, command: run, option: "http://www.zdic.net/sousuo/?q=%2$s"} #搜索網頁: %2$s爲當前輸入的編碼 244 | WebSearch: {label: 搜索網頁, send: function, command: web_search, option: "%4$s"} #搜索,其他view、dial、edit、search等intent,參考安卓的intent文檔:https://developer.android.com/reference/android/content/Intent.html 245 | ``` 246 | 247 | ## preset_keys 248 | ✅✅✅自定义按键,对[[#android_keys]]的补充 249 | 这里定义的键,默认[[#functional]]为true 250 | > 如果指定的`name`在`android_keys`和`preset_keys`中都找不到,那就以文本形式直接输出(比如`{click: 你好}`,单击该键时,就直接输出「你好」)。在制作特殊符号键盘时,可能需要这种效果。 251 | [preset_keys](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#五preset_keys) 252 | [按键功能组合示例](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#按键功能组合示例) 253 | ```yaml 254 | copy: {label: 复制, send: Control+c} 255 | copy_all: {label: 全誊, text: "{Control+a}{Control+c}"} #全选并复制 256 | `{click: v, composing: "'", long_click: ~, swipe_left: Date, swipe_right: Time}` #打字过程中输出 ', 平时单击输出 v,长按输出 ~ ,左滑输出日期,右滑输出时间 257 | Keyboard_xxx: {label: 符号, send: Eisu_toggle, select: xxx} 258 | ``` 259 | ### 切换键盘 260 | `xxx_keyboard_switch: { label: 显示文字, send: function, command: liquid_keyboard, option: "符号表" }` 261 | 262 | ## preset_keyboards 263 | [preset_keyboards](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#六preset_keyboards) 264 | 预置的键盘布局(一个主题里可以有多个键盘布局) 265 | ### keys 266 | 按键排列顺序 267 | ✅✅✅键盘中每对`{}`代表一个按键,按`从左到右、从上到下`的顺序排列。每行的宽度排满`100`或虽然不足`100`但无法再容纳一个按键又或者每行按键数量达到`columns`的设定值时,转到下一行继续排列。 268 | ### name 269 | 布局名称 270 | ### author 271 | 作者信息 272 | ### ascii_mode 273 | 键盘的默认状态(`0`:中文;`1`:英文) 274 | ### ascii_keyboard 275 | 非标准键盘(比如注音、仓颉、双键等),在切换到英文模式时,自动跳转到这里设定的英文键盘(试验功能,有待完善) 276 | ### reset_ascii_mode 277 | 切换键盘、重新弹出键盘时,是否重置到当前 keyboard 指定的 ascii_mode 描述的状态(默认 false)。与`style/reset_ascii_mode`(指定弹出键盘时是否重置 ASCII 状态)配合使用。 278 | ### label_transform 279 | 中文模式下按键字母标签自动大写(`uppercase`:自动大写,仅对单个字母生效,长标签请直接更改 label;`none`:无,可省略不写) 280 | ### lock 281 | 在不同程序中切换时锁住当前键盘,不返回默认的主键盘。用于单手键盘等。(`true`:锁住;`false`:不锁,可省略不写) 282 | ### columns 283 | 键盘最大列数,超过则自动换行,默认 30 列。 284 | ### width 285 | 按键默认宽度(也可以在按键里面单独定义某个按键的宽度) 286 | ### height 287 | 每行的高度(要想改变单独一行的高度,可以直接在那一行行首的按键里设`height`) 288 | ### [3.2.6]`auto_height_index` 289 | 当使用`style/keyboard_height`参数锁定键盘高度时,由于像素只能取整数,如果缩放产生了余数,哪一行吸收缩放后的余数。第一行即 0,第二行为 1,以此类推;特别的,当值为负数时,为倒序序号(-1 即倒数第一个);当值大于按键行数时,为最后一行。 290 | ### [3.2.6]`keyboard_height` 291 | 键盘锁定的高度。当 style 中锁定键盘高度时,如 preset_keyboard 再次指定键盘高度,则当前键盘以此为准 292 | ### [3.2.6]`keyboard_height_land` 293 | 横屏下键盘锁定的高度,同上 294 | ### key_hint_offset_x 295 | 助记符号 x 方向偏移量(向右为正,下同) 296 | ### key_hint_offset_y 297 | 助记符号 y 方向偏移量(向下为正,下同) 298 | ### key_symbol_offset_x 299 | 长按符号 x 方向偏移量 300 | ### key_symbol_offset_y 301 | 长按符号 y 方向偏移量 302 | ### key_text_offset_x 303 | 按键文本 x 方向偏移量 304 | ### key_text_offset_y 305 | 按键文本 y 方向偏移量 306 | ### key_press_offset_x:按键按下时所有文本 x 方向偏移量 307 | ### key_press_offset_y:按键按下时所有文本 y 方向偏移量 308 | ※以上这几个 offset 也可以直接写在按键中,仅对该按键生效。 309 | - `keys` 310 | 按键排列顺序 311 | 键盘中每对{}括号代表一个按键,按从左到右、从上到下的顺序排列。每行的宽度排满`100`或虽然不足`100`但无法再容纳一个按键又或者每行按键数量达到`columns`的设定值时,转到下一行继续排列。 312 | 313 | ### 布局调用 314 | 315 | `trime.yaml`已经内置了很多种键盘布局,一般常用的输入方案都可以自动匹配到合适的预置键盘。 316 | ※️`style/keyboards`中的`.default`,就是用来自动匹配键盘布局的。 317 | 318 | 自动匹配的过程: 319 | 320 | - 如果输入方案的`schema_id`可以找到对应的键盘布局`ID`,则直接使用这个布局 321 | 比如仓颉五代的`schema_id`是`cangjie5`,在`trime.yaml`中刚好有`ID`为`cangjie5`的键盘布局,那就直接使用它。 322 | - 如果匹配不了`ID`,那根据输入方案的`speller/alphabet`所用的字符,匹配最合适的布局方案 323 | 比如朙月拼音的`speller/alphabet`是`zyxwvutsrqponmlkjihgfedcba`,恰好使用了 26 个英文字母。那就自动套用`预设26键`键盘。 324 | - 如果`ID`和`speller/alphabet`都匹配不到,就用默认的`预设26键`键盘。 325 | 326 | 如果自动匹配的布局不理想,还可以手动设置。如下面的示例。 327 | 328 | #### [](https://github.com/osfans/trime/wiki/trime.yaml%E8%A9%B3%E8%A7%A3#示例指定朙月拼音使用-36-键键盘布局)示例:指定朙月拼音使用 36 键键盘布局 329 | 330 | (36 键键盘比 26 键的多了一排数字键,可以快捷输入数字) 331 | 332 | # trime.custom.yaml 333 | ``` 334 | patch: 335 | "preset_keyboards/luna_pinyin/import_preset": qwerty0 #预设36键布局的ID是qwerty0 336 | ``` 337 | 338 | 如是即可。 339 | 340 | 再看看,重新部署后,补丁融入`trime.yaml`之中,就被展开成这种格式: 341 | 342 | luna_pinyin: 343 | import_preset: qwerty0 344 | 345 | 可以理解成:新建了一个`ID`是`luna_pinyin`的布局,这个布局导入了`qwerty0`的全部设置。 346 | 347 | ⚠ 如果这里指定的键盘出错了,就会自动调用`default`键盘。 348 | --------------------------------------------------------------------------------