Closed tywtyw2002 closed 4 months ago
只要是使用 option 都可以 在 lua 中設定 實現的方法 可以用 lua_processor ( active_text = context.input + key_event( ascii code) , commit_notifier (使用 candidate ,把 cand.text 設成空字串 用comment 或是 type 操作)
感谢。
@shewer 在求教下
现在通过代码在translator
模式下,可以做到 用vxxzx
去设置输入法状态是ascii mode。
但是在输入vxxz
时候出现候选选项("EN Mode")的时候,没法按回车键去切换,请问如何写code 才能实现按回车就可以执行这个功能呢。
local prefix = "vxxz"
local function do_translator(input, seg, env)
selector = input:sub(5)
if selector == "x" then
env.engine.context:clear()
env.engine.context:set_option("ascii_mode", 1)
else
yield(Candidate("qsnipx", seg.start, seg._end, "EN Mode", "x"))
end
end
local function translator(input, seg, env)
if input:sub(1, 4) == prefix then
return do_translator(input, seg, env)
end
end
return translator
在一般情況下 space : commit candidate return : commit input 按下 return 應該是 commit context.input 的碼吧 如果只想要用 translator 而不用 processor ,可以試用 commit candidate + commit_notifier 方式 在commit 時 cand.text 是空字串,檢查 candidate.type 和解碼 cand.comment 字串執行命令
ex: candidate('cmd', seg._start, seg._end, '' , cmd_text) cand.quality 設定最高 字典table dict = { abc= { abcd , abcz,abcy}, abcd= cmd_text1, abcz=cmd_text2, abcy=cmd_text3}
local function get_dict_table( dict_name)
-- load dict file .....
local dict = {
}
return dict
end
local T={}
function T.init(env)
env.quality=2.5
env.dict = get_dict_table()
env.commit_notyfier = env.engine.context.commit_notyfier:connect(function(ctx)
local cand=ctx:get_selected_candidate()
if cand.type =="cmd" then
excute(cand.comment)
end
end)
end
function T.fini(env)
env.commit_notifier:disconnect()
end
local function get_candidates(input, seg, env, cands)
cands = cands or {}
local res = env.dict[input]
if type( res) == "string"
local cand = Candidate('cmd', seg._start, seg._end, '', res)
cand.quality = env.quality
table.insert(cands, cand)
elseif type(res) == "table" then
for _,v in ipairs( res) do
get_candidates(v, seg, env, cands)
end
end
return cands
end
function T.func(input, seg, env)
for _, cand in ipairs( get_candidates(input,seg, env) )
yield(cand)
end
end
return T
直接用T.func 遞迴, 省去 get_candidates
function T.func(input, seg, env)
local res = env.dict[input]
if type(res) == "string" then
local cand = Candidate('cmd', seg._start, seg._end, '', res)
cand.quality = env.quality
yield(cand)
elseif type(res) == "table" then
for _,v in next, res do
T.func( v, seg, env)
end
end
end
好的,感谢。 周末折腾以下
像
traditionalization
,ascii_mode
这样的开关。我是想实现用指令来快速切换rime的模式。 比如说
vxxa
切换成繁体,全角,英文符号,emoji。vxax
切换成纯英文模式,英文符号,emoji。 ...