home
home copied to clipboard
关于yaml的patch补丁语法问题
首先我只在wiki里找到了关于patch的一些语法介绍:
patch:
"一級設定項/二級設定項/三級設定項": 新的設定值
"另一個設定項": 新的設定值
"再一個設定項": 新的設定值
"含列表的設定項/@0": 列表第一個元素新的設定值
"含列表的設定項/@last": 列表最後一個元素新的設定值
"含列表的設定項/@before 0": 在列表第一個元素之前插入新的設定值(不建議在補靪中使用)
"含列表的設定項/@after last": 在列表最後一個元素之後插入新的設定值(不建議在補靪中使用)
"含列表的設定項/@next": 在列表最後一個元素之後插入新的設定值(不建議在補靪中使用)
其次我根据https://github.com/rime/rime-emoji这个编写了一份相似的patch配置,非常开心,发现了特别的打开方式。这两份patch配置单独使用都没问题,但当我将两份patch配置同时应用到一个输入法方案时,发现会冲突,然后我检查build目录里生成的schema.yaml,确定了使用上述的patch语法会有问题,比如: rime-emoji这份patch配置里的emoji_suggestion.yaml:
patch:
switches/@next:
name: emoji_suggestion
reset: 1
states: [ "🈚️️\uFE0E", "🈶️️\uFE0F" ]
'engine/filters/@before 0':
simplifier@emoji_suggestion
emoji_suggestion:
opencc_config: emoji.json
option_name: emoji_suggestion
tips: all
switches/@next和我编写的switches/@next:相互覆盖,同样ngine/filters/@before 0也是,谁覆盖谁,取决于打到输入法方案里的顺序,也就是相同配置项,只能最后一个生效。 因为没有更多的文档说明,所以我不太清楚这是特性还是bug,对此语法有了解的同学,请多多指教
是特性,所以「不建议在补丁中使用」。可以改用 /+
操作符在列表末尾添加任意多个项目,且不会覆盖。
https://github.com/rime/home/wiki/Configuration
patch:
foo/+:
- ...
- ...
@next
向列表末尾追加一項。可以向一個列表多次追加,每次追加之後,@next
都指向下一個位置。
不過 patch:
節點是個YAML map,而YAML語法中,map的key不能重複。樓主遇到的應該是這個問題。
是特性,所以「不建议在补丁中使用」。可以改用
/+
操作符在列表末尾添加任意多个项目,且不会覆盖。 https://github.com/rime/home/wiki/Configurationpatch: foo/+: - ... - ...
我觉得「不建议在补丁中使用」不应该是阻止用户使用的理由,毕竟这种语法很方便制作通用配置,而且rime-emoji这份配置方案是官方demo,值得学习借鉴。回归主题,请问/+可以实现@next语义,那@before 0之类的有相关的操作符可以替换吗,有相关的wiki吗?谢谢 ........... 我看到你给的链接了,谢谢
@next
向列表末尾追加一項。可以向一個列表多次追加,每次追加之後,@next
都指向下一個位置。不過
patch:
節點是個YAML map,而YAML語法中,map的key不能重複。樓主遇到的應該是這個問題。
确实,请问这个问题有解吗
确实,请问这个问题有解吗
樓上不是給出了嘛。續寫列表。
或者在方案裏用 __patch
命令,可以指定補丁組成的列表。
确实,请问这个问题有解吗
樓上不是給出了嘛。續寫列表。
或者在方案裏用
__patch
命令,可以指定補丁組成的列表。
具体怎么写?
比方上下文有两个 switches/@next
patch:
switches/@next:
111
switches/@next: (新添加)
222
同时不方便合并成
patch:
switches/+
- 111
- 222
@lotem