Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何拦截即将上屏的字符串并修改他? #371

Open
hoofcushion opened this issue Oct 29, 2024 · 4 comments
Open

如何拦截即将上屏的字符串并修改他? #371

hoofcushion opened this issue Oct 29, 2024 · 4 comments

Comments

@hoofcushion
Copy link

如题

@shewer
Copy link
Contributor

shewer commented Oct 29, 2024

可以用 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

@hoofcushion
Copy link
Author

如何在 engine 前注册 commit notifier?或 select notifier? 如何拦截消息让 engine 接收不到?如果用 lua filter 的话,会将候选项的显示效果造成影响。

@shewer
Copy link
Contributor

shewer commented Oct 31, 2024

你可以先查一下 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

@shewer
Copy link
Contributor

shewer commented Oct 31, 2024

發送 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants