iDvel / rime-ice

Rime 配置:雾凇拼音 | 长期维护的简体词库
https://dvel.me/posts/rime-ice/
GNU General Public License v3.0
10k stars 660 forks source link

让仓库更加模块化,与其它方案共存得更好 #1064

Open wrvsrx opened 3 weeks ago

wrvsrx commented 3 weeks ago

摘要

rime 生态(librime-lua 等插件)的更新允许我们以更加模块化的形式制作方案,可以讲仓库修改的更模块化,与其它方案共存得更好。

相关应用

该议题涉及所有 Rime 版本

系统信息

该议题涉及所有系统

详细说明

rime-ice 极大便利了用户的使用,不过当前的一些文件结构跟设计阻止了它跟其它输入方案的并存。这个 issue 提出一些模块化方面的问题和解决方案。具体的实现我可以提 PR,希望先咨询开发者的意见。

  1. rime.lua 无法与其他包含 rime.lua 的方案共存

    解决方案:从 22 年 这个 PR 后,librime-lua 支持不经过 rime.lua 加载函数,我们可以直接用这套方式加载函数。

  2. 双拼跟默认方案里的双拼重名。

    解决方案:改名,double_pinyin_flypy.schema.yaml 重命名为 double_pinyin_flypy_ice.schema.yaml 之类的

  3. default.yaml 容易直接覆盖掉其它输入方案的设置

    解决方案:arch linux 的 aur 打包 rime-ice-git 用一些替换脚本做到了这一点。我们可以在仓库中做类似的替换(当然有些方法可以避免 aur 脚本可能导致的冗余)使设置模块化。在仓库的 default.yaml 中只保留对模块化设置的导入,这样新手用户可以直接 clone 仓库使用,需要模块化设置的用户可以通过 plum 安装或直接删掉 default.yaml 即可(现在删掉 default.yaml 会破坏掉很多仓库内部的 __include

  4. 仓库中有大量重复的代码,能否通过 __include 实现代码复用?

补充信息

No response

iDvel commented 3 weeks ago

很早就改到了新版的 Lua 加载方式,但是有部分 Linux 和安卓用户反应他们的 librime 版本没有跟上,就又改回来了。目前这样还能写个注释,也不影响自己用新版的方式来加入自己的 Lua 脚本。

我觉得现在这样挺好的,即便不太懂配置,复制粘贴之后,只需要打开 default.yaml 和自己用的方案文件,照着注释简单改一改就好了,不需要的方案直接删除也 OK。

wrvsrx commented 2 weeks ago
  1. 我翻到过 23 年的那个改回来的 commit,那个 commit 里面提到官方小狼毫,同文跟 iRIME。第一个已经 23 年 6 月恢复更新(指 release 新版本,不仅指更新 repo),第二个在持续更新。iRIME 现在的情况不清楚(不用 app store),我们能否认为对于还在维护的软件,librime-lua 都已经更新到了支持新版加载(22 年年中)之后的版本,rime-ice 最终还是要跟着新的版本走吧。

    至于 linux,只要不是 centos 钉子户 librime-lua 应该都更新了。

  2. 我也支持保留 default.yaml,这会非常便于新人用户的使用。我的建议是说能否调整依赖,使得删除 default.yaml (或者说用 rime-prelude 中的 default.yaml)并不会影响整个系统的使用;已经重命名跟 rime-double-pinyin 等官方包中命名冲突的部分,增强兼容性。这一点我已经在打包自用的 rime-ice 时验证过可行性。

  3. 我们还可以进一步改善易用性。现在双拼用户使用时仍然需要 patch melt_eng 跟 radical_pinyin,我们可以通过 "__include" 在不引入重复代码的情况下创建 melt_eng_double 跟 radical_pinyin_double,让用户不需要再手动 patch 后面两者。这一点我已经在打包自用的 rime-ice 时验证过可行性。

everyx commented 1 week ago

双拼跟默认方案里的双拼重名 rime.lua 无法与其他包含 rime.lua 的方案共存 现在双拼用户使用时仍然需要 patch melt_eng 跟 radical_pinyin

这些如果在官方仓库中能处理是更好。

default.yaml 容易直接覆盖掉其它输入方案的设置

保留 default.yaml 侵入性太强,也与打包原则有所违背,应该由发行版维护者处理。例如

Nullizer commented 3 days ago

出一个升级librime的小教程比刻意去兼容老版本更好

wrvsrx commented 2 days ago

@iDvel 开发者怎么想?

如果对这个提案感兴趣的话我可以逐步弄一些 PR

iDvel commented 2 days ago

这个我觉得是没啥必要,看看大家怎么想嘛。


我是认为目前这样很好,保留 default.yaml 是肯定的,复制粘贴后就开箱即用。 prelude 里面的 default.yaml 也是包含了 punctuatorkey_binderrecognizer 等等内容。 官方的双拼一样是引用的 default:

https://github.com/rime/rime-double-pinyin/blob/69bf85d4dfe8bac139c36abbd68d530b8b6622ea/double_pinyin.schema.yaml#L134-L141

这些属性(候选项个数、标点、快捷键等等)也都是比较通用的选择,写在 default 里很合适。 目前雾凇的 default.yaml 里没有不该存在于 default 里的自定义属性。 最主要的是,用户完全可以无视雾凇或其他任何方案的 default.yaml,通过创建 default.custom.yaml 来覆盖这些属性。


重命名或者加前缀,感觉问题不是很大,毕竟雾凇现在算是一个整合包了,不是单一的输入方案或词库。 如果要在雾凇基础上加一个五笔或日文什么的,其实也不算问题吧。


Lua 加载方式改到不需要 rime.lua 的倒是可以的,之前回退了一次后一直没改。 可让用户找到的一些不会修改的、带 rime.lua 的脚本不与目前的冲突,仍然可以一键拉取更新。

wrvsrx commented 1 day ago

我的主要目的是允许 rime-ice 可以被各个 linux 发行版方便地用作一套方案而非整合包,所以下面的建议与分析都是希望在维持 rime-ice 作为整合包的便利性的同时,提高 rime-ice 的模块化程度以及与其它方案的共存性。

除了开发者提出的三点外,还有一个可以模块化的地方是 melt_engradical_pinyin

当前 melt_eng 跟 radical_pinyin 中仍然需要双拼用户手动更改设置,完全可以通过 __include__patch 避免用户的手动设置。

以上几点我可以拆成几个 PR,您意向如何?

iDvel commented 1 day ago

重命名我觉得没必要,重命名要改方案、词库、Lua ……

拆分 default.yaml 的问题我是这个意思,任何方案之间的这个文件冲突,都不影响用户自己用 default.custom.yaml 进行覆盖。愿意在某一方案的基础上改,就保留它的 default.yaml;或者直接删除,在 prelude 的基础上改,都可以。

英文方案和拆字方案不是已经用一行 __include 设定了嘛,用户只要在注释里选择一行就可以了,打补丁也很容易,也有自动的 plum 补丁。

感谢变更 Lua 加载方式的 PR,我改改一些注释后合并。