Open yawn0305 opened 1 year ago
按照大佬们的零星经验,自己试着写了一段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 都有失控的風險 且必須小心用 很是麻煩
之前錯碼試 engine:process_key("Right") 就造成鼠鬚管程式崩潰! 然後重開機再改回來,即可XD 的確必須要小心!
後來的作法是改走原生 rime 中的 key_binder 去達成想要的功能!
這是在折騰啥? Rime不能向系統發送按鍵,只能輸出文字。
这是在折腾啥? Rime不能向系统发送按键,只能输出文字。
mac可以用lua实现,win不行,win用户感觉很受伤
這是在折騰啥? Rime不能向系統發送按鍵,只能輸出文字。
有沒有考慮加上 Engine::CommitKeys(vector
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
把 context:clear() 去掉 engine:process_key(KeyEvent("Return")) 能作用 就代表 librime-lua 版本有升上去! 但兩個加在一起無法處理,如 shewer 說的
請一步一步試吧!
engine:commit_text('\r')或 engine:commit_text('\n') 可以用就用吧! 不過在某些軟體上,如:mac 版 sublime,不吃 \r 或 \n
把 context:clear() 去掉 engine:process_key(KeyEvent("Return")) 能作用 就代表 librime-lua 版本有升上去! 但两个加在一起有冲突无法处理,如 shewer 说的
请一步一步试吧!
engine:commit_text('\r')或 engine:commit_text('\n') 可以用就用吧! 不过在某些软体上,如:mac 版 sublime,不吃 \r 或 \n
试了一下,去掉context:clear()后,env.engine:process_key( KeyEvent("Return") )就能生效了 说明版本应该是没问题了 看来就是 shewer 说的,not composing状态无法使用
你那是剛好 , engine/processors 的組合排列都會有不同 的結果 拿到別的方案用不一定行。 重點還是 engine:process_key(KeyEvent("Return")) 被那個 processor 處理了( accepted rejected noop) 。
還要檢查log是不是 error 中斷 造成的結果
以上面的script
input :"zl" engine->process_key( anykey) -- 井沒有把當下key 加入 input (啥key 都可以)
zla zlb zl\s zl\n zl{Contron-n} ......
別忘了 原作者的重點 librime 只能處理 text , 功能鍵都是處理librime環境下的機制 "F4" accepted 打開 switches menu
"F4" rejected 退回"F4" 前端處理 真的user按下的"F4" "F4" noop ->unhandle_key 同上
你那是剛好 , engine/processors 的組合排列都會有不同 的結果 拿到別的方案用不一定行。 重點還是 engine:process_key(KeyEvent("Return")) 被那個 processor 處理了 還要檢查log是不是 error 中斷 造成的結果
E20221220 15:10:00.609894 11008 lua_gears.cc:193] LuaProcessor::ProcessKeyEvent of Return error(2): D:\Rime\lua\Return.lua:8: C stack overflow 刚看了一下日志,人又晕了
你那是剛好 , engine/processors 的組合排列都會有不同 的結果 拿到別的方案用不一定行。 重點還是 engine:process_key(KeyEvent("Return")) 被那個 processor 處理了 還要檢查log是不是 error 中斷 造成的結果
E20221220 15:10:00.609894 11008 lua_gears.cc:193] LuaProcessor::ProcessKeyEvent of Return error(2): D:\Rime\lua\Return.lua:8: C stack overflow 刚看了一下日志,人又晕了
process_key() 進入infinite loop
我想用zl来代替回车,打完zl之后跳到下一行,有方法能实现吗