librime icon indicating copy to clipboard operation
librime copied to clipboard

feat(candidate): allow arbitrary per-candidate data

Open ksqsf opened this issue 2 months ago • 2 comments

允許給 Candidate 增加任意用字符串索引的數據。(此項變更僅面向插件,用戶無法直接使用。)

爲 Candidate 增加三個新的公開接口:

void set_data(const string& data_tag, an<void> datum);
an<void> get_data(const string& data_tag);
vector<string> get_data_keys();

插件可調用該接口,在產生 Candidate 時,附加任意數據。其中,datum 可設爲 null,則作用類似於 tags,但粒度是 Candidate。

一個可能的用例是:與 librime-lua 整合後,可以讓用戶編寫任意「Action Candidate」,這些 Candidate 不用來上屏文字,而是觸發任意邏輯。如:

  • 輸入 F ,得到候選「切換爲繁體」,選擇後不上屏任何內容,而是設置 simplification 爲 false
  • 輸入 J ,得到候選「切換爲簡體」,選擇後不上屏任何內容,而是設置 simplification 爲 true

接口本身還可以進一步討論。不過因爲這個接口只用於插件(考慮到插件已經和 librime 本體強綁定),日後要修改或許也不會有太大困難。

ksqsf avatar Oct 07 '25 21:10 ksqsf

@lotem 来点反馈?

这个功能本身肯定是有必要的。比如说可以把 spelling hints 放到 data 里,这样就不需要占用 comment。

具体设计上可以再探讨。一个可能的简化法是改成 map<string, string>。

ksqsf avatar Oct 14 '25 17:10 ksqsf

好的。

可否提供带模板参数的 get/set,因为用家总要做类型转换。

lotem avatar Oct 15 '25 00:10 lotem