librime-lua
librime-lua copied to clipboard
如何用编码发送按键
我想用zl来代替回车,打完zl之后跳到下一行,有方法能实现吗
按照大佬们的零星经验,自己试着写了一段lua,但好像没用,不知道是哪里出了问题 function processor(key, env) local engine = env.engine local context = engine.context local input_text = env.engine.context.input if (input_text:find"zl")== 1 then context:clear() env.engine.process_key(Return) end end
env.engine:process_key(Return) -- Return = KeyEvent("Return")
按照大佬们的零星经验,自己试着写了一段lua,但好像没用,不知道是哪里出了问题
function processor(key, env)
local Rejected,Accepted,Noop = 0,1,2
local engine = env.engine
local context = engine.context
-- local input_text = context.input
if context.input:match("^zl") then -- (input_text:find"zl")== 1 then
context:clear()
env.engine:process_key( KeyEvent("Return") )
return 1 --Accepted
end
return 2 --Noop
end
按照大佬们的零星经验,自己试着写了一段lua,但好像没用,不知道是哪里出了问题
function processor(key, env) local Rejected,Accepted,Noop = 0,1,2 local engine = env.engine local context = engine.context -- local input_text = context.input if context.input:match("^zl") then -- (input_text:find"zl")== 1 then context:clear() env.engine:process_key( KeyEvent("Return") ) return 1 --Accepted end return 2 --Noop end
好像还是不行啊,只能清屏,不能回车。 是因为我用的版本的原因吗 我用的是官网的0.14.3
KeyEvent 函數在官方下載的小狼毫中,好似 librime-lua 版本太舊不支持?! 這邊經驗是 mac 鼠鬚管以下運作正常
key:eq(KeyEvent("Shift+Return"))
後來移到 win 小狼毫卻不行且日誌報錯! 查一下報錯日誌,看看有沒有提示 KeyEvent 問題就知道!
可能
查看 wiki
KeyEvent 函數在官方下載的小狼毫中,好似 librime-lua 版本太舊不支持?! 這邊經驗是 mac 鼠鬚管以下運作正常
key:eq(KeyEvent("Shift+Return"))後來移到 win 小狼毫卻不行且報錯! 查一下報錯日誌,看看有沒有提示 KeyEvent 問題就知道!
mac 版本有更新 librime-lua 2021/7 (可能是 #113 ) win 打包的安裝版 2020 ,要手動更換 rime.dll
這邊 win 小狼毫更換過 rime 官方編譯純 librime(rime.dll)過, 應該還是版本未滿 XD 需自行編譯或拿到更新版 rime.dll 有能力推薦自行編譯,把版本都編譯到最新
剛剛這邊給的key:repr("Release+Return")代碼經測試不可行XD engine:process_key(KeyEvent("Return")) 在 mac 鼠鬚管底下已編譯含最新 librime-lua 可行!
這邊 win 小狼毫更換過官方編譯純 librime(rime.dll)過, 應該還是版本未滿 XD 需要會自行編譯 rime.dll 有能力推薦自行編譯,把版本都編譯到最新
以下不是很確定,查之前試功能留下的代碼,改以下試試,不保證可行:
key:repr("Release+Return")
最新新版 CI 還沒砍 ( mac & win ) https://github.com/hchunhui/librime-lua/suites/9748346318/artifacts/467986280
换了1.7.3内核的板本,运行日志没有发现KeyEvent报错,但还是不行 "Release+Return"、"Return"、"Shift+Return"都试了一遍,都不生效 头大
if context.input:match("^zl") then
context:clear()
engine:commit_text("\n")
return 1
end
if context.input:match("^zl") then context:clear() engine:commit_text("\n") return 1 end
大佬牛的,改成\r可以实现换行了 虽说方法折中,但总算是实现了
send_sequence: https://www.zhihu.com/question/27121962/answer/820366880
方法解法千變萬化! 慢慢玩耐心試吧!
請觸發 return 後再看日誌!
engine:press_key() 等同遞歸函式
bool engine->process_key(key) -- 大腸包小腸
int processors -->ProcessKeyEvent(key) -- 小腸包大腸
bool engine->process_key( f_key)
只能用在會可被 processors accepted 的key Noop Rejected 都有失控的風險 且必須小心用 很是麻煩
https://github.com/rime/librime/blob/9086de3dd802d20f1366b3080c16e2eedede0584/src/rime/engine.cc#L96-L115
之前錯碼試 engine:process_key("Right") 就造成鼠鬚管程式崩潰! 然後重開機再改回來,即可XD 的確必須要小心!
後來的作法是改走原生 rime 中的 key_binder 去達成想要的功能!
這是在折騰啥? Rime不能向系統發送按鍵,只能輸出文字。
这是在折腾啥? Rime不能向系统发送按键,只能输出文字。
mac可以用lua实现,win不行,win用户感觉很受伤
這是在折騰啥? Rime不能向系統發送按鍵,只能輸出文字。
有沒有考慮加上 Engine::CommitKeys(vector<KeyEvent> ) 給前端
mac可以用lua实现,win不行,win用户感觉很受伤
librime-lua 版本問題換 rime.dll 理應可以解決?! 不知你是換上面 shewer 大大提供的連結嗎? 換完後有重開機和重新部署嗎? 另外 librime 版本 和 librime-lua 版本 是兩回事! 兩個同樣 librime 1.7.3 内核,librime-lua 版本不一定一樣!
https://github.com/hchunhui/librime-lua/suites/9748346318/artifacts/467986280
mac可以用lua实现,win不行,win用户感觉很受伤
librime-lua 版本問題換 rime.dll 理應可以解決?! 不知你是換上面 shewer 大大提供的連結嗎? 換完後有重開機和重新部署嗎? 另外 librime 版本 和 librime-lua 版本 是兩回事! 兩個同樣 librime 1.7.3 内核,librime-lua 版本不一定一樣!
https://github.com/hchunhui/librime-lua/suites/9748346318/artifacts/467986280
我不会编译,用的是https://github.com/fxliang/weasel和其他几个编译好的版本,据说是已经用上最新的hchunhui/librime-lua,但都没用,只好作罢 至于部署问题,我是KeyEvent("Return") 部署无较后,再换成commit_text("1")再部署测试,而KeyEvent不能实现,commit_text能实现,所以程序运行应该是正常的,应该跟重新开机和部署没关系
mac可以用lua实现,win不行,win用户感觉很受伤
librime-lua 版本问题换 rime.dll 理应可以解决?! 不知你是换上面 shewer 大大提供的连结吗? 换完后有重开机和重新部署吗? 另外 librime 版本 和 librime-lua 版本 是两回事! 两个同样 librime 1.7.3 内核,librime-lua 版本不一定一样!
https://github.com/hchunhui/librime-lua/suites/9748346318/artifacts/467986280
用链接里的rime.dll 替换了,再测试了一遍,还是不行
這是在折騰啥? Rime不能向系統發送按鍵,只能輸出文字。
有沒有考慮加上 Engine::CommitKeys(vector ) 給前端
輸入法的API沒有這種能力。 如果寫成外掛程序,那也沒必要通過Rime實現,可以在一個插件裏直接發系統調用。這樣一來,程序的權限要比正經的輸入法高。
用链接里的rime.dll 替换了,再测试了一遍,还是不行
shewer 大大用 win 小狼毫,問他看看好了 這邊主用 mac 鼠鬚管 但之前確實更過小狼毫的 rime.dll,使 librime-lua 增加那時新版功能過!
https://github.com/fxliang/weasel 應該不是官方版吧?!新改新增外觀候選框可圓弧,但 librime 核心還是三年前的
用链接里的rime.dll 替换了,再测试了一遍,还是不行
shewer 大大用 win 小狼毫,問他看看好了 這邊主用 mac 鼠鬚管 但之前確實更過小狼毫的 rime.dll,使 librime-lua 增加那時新版功能過!
https://github.com/fxliang/weasel 應該不是官方版吧?!新改新增外觀候選框可圓弧,但 librime 核心還是三年前的
改用fcitx5 了 win10 放在硬碟裡備著沒在用 :)
哎哀欸! Win 小狼毫置換 rime.dll 親測可行! 可使 env.engine:process_key(KeyEvent("Return")) 作用
Win10,Rime官方編譯版 更換 shewer 大大提供的核心 librime 連結
置換好後,功能還是舊版本! 『請重新開機』!!! 就會變成新核心和 librime-lua!

哎哀诶! Win 小狼毫置换 rime.dll 亲测可行! 可使 env.engine:process_key(KeyEvent("Return")) 作用
Win10,Rime官方编译版 更换 shewer 大大提供的核心 librime 连结
置换好后,功能还是旧版本! 『请重新开机』!!! 就会变成新核心和 librime-lua!

照你说的重新又替换了一次,重新开机了,还是不行
我的lua是按照shewer大大指导写的,应该没问题吧
engine:commit_text("\r") 能用,
env.engine:process_key(KeyEvent("Return")) 用不了

我猜是 processors 都不處理 not composing + Return 吧 commit_text 可以在不增加複雜度下完成工作就用吧. 用process_key() 只會增加複雜度和不可控。
要找出在空字串時按下"Return" 是那個processor (Noop Reject ) 這和每個人的方案 engine/processors 排列組合求不一樣都會產生不一樣的結果 檢查process_key() 返回值看看
if context.input:match("^zl") then
context:clear()
local res = env.engine:process_key(KeyEvent("Return"))
env.engine:commit_text( res and "-true\r" or "-false\r")
return 1
end
如果寫成外掛程序,那也沒必要通過Rime實現,可以在一個插件裏直接發系統調用。這樣一來,程序的權限要比正經的輸入法高。
我的想法 是增加一個 類似 using CommitSink = signal<void (const string& commit_text)>;
using CommitKeys= singnal<void(const vector
給前端 應用
我猜是 processors 都不处理 not composing + Return 吧 commit_text 可以在不增加复杂度下完成工作就用吧. 用process_key() 只会增加复杂度和不可控。
要找出在空字串时按下"Return" 是那个processor (Noop Reject ) 这和每个人的方案 engine/processors 排列组合求不一样都会产生不一样的结果 检查process_key() 返回值看看
if context.input:match("^zl") then context:clear() local res = env.engine:process_key(KeyEvent("Return")) env.engine:commit_text( res and "-true\r" or "-false\r") return 1 end
返回-false
nt.com/54584047/208468462-1d9e3ba8-8ab6-4c9e-b42a-6864e4b3fe7e.png)