librime
librime copied to clipboard
feat(candidate): allow arbitrary per-candidate data
允許給 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 本體強綁定),日後要修改或許也不會有太大困難。
@lotem 来点反馈?
这个功能本身肯定是有必要的。比如说可以把 spelling hints 放到 data 里,这样就不需要占用 comment。
具体设计上可以再探讨。一个可能的简化法是改成 map<string, string>。
好的。
可否提供带模板参数的 get/set,因为用家总要做类型转换。