Open hoofcushion opened 3 weeks ago
可以用 select_notifyer or commit_notifier(但要註冊在 engine 前) 上屏 有 Context::Commit() & Select() 在 processor: selector xxxx_editor 中實現 你可以 在這兩個前 加入入 lua_processor 檢查條件 直接使用 engine:commit_text(string)
但我覺的用 lua_filter 去修改 candidate 比較簡單 , 熱鍵 設定 option or recognizer 定義 tag
local F ={}
function F.init(env)
env.tag= "t1"
end
function F.tags_match(seg,env)
return env.env.engine.context:get_option(xxx) or seg.tags[env.tag]
end
function F.fini(env)
end
function F.func(inp, env)
for cand in inp:iter() do
if ... then
....
yield( replace_cand)
else
yield(cand)
end
end
return F
如何在 engine 前注册 commit notifier?或 select notifier? 如何拦截消息让 engine 接收不到?如果用 lua filter 的话,会将候选项的显示效果造成影响。
你可以先查一下 wiki / script 說明
context.commit_notifier:connect( func[, group: size_t])
context.commit_notifirer:connect( func) -- 最後
context.commit_notifirer:connect( func, 1) -- 2
context.commit_notifirer:connect( func, 0) -- 1
還有 已經排入候選的candidate 是無法 替換的 ,所以在 engine call OnCommit() 還是取用 原來的candidate.text , 除非是 SimpleCandidate 類 才可以更改text
發送 select_notifier 是 selector 送出來的 發送 commit_notifier 是 editor_xxxx 送出來的 要欄下 要在這兩個processor 前加入 lua_processor 由你自己處理 可以看一下 librime source code https://github.com/rime/librime/blob/b74f5fa0b7377ba6103df7b6e757fbf84d36cf1f/src/rime/gear/selector.cc#L118
如题