Rime 在连续输入 jj 后自动切换到英语
Rime
之前编写了 Rime 小狼毫切换窗口重置默认中英状态,用了一段时间已经养成在输入中文前先按 Control_R 的习惯了,很好。
但另一方面,在保持中文状态下还是经常忘记切回英文。
所以写了个 processor,通过按键抬起事件,检测到输入了 jj 就自动切换回英语。
如果用 env.engine.process_key("Escape") 并不能把已经输入的字符清除掉,这里用 commit_text() 结合 clear() 来模拟 commit_code 的逻辑,把当前内容上屏。
-- force_ascii_mode.lua
-- Typing "jj" while composing (non-ASCII mode) switches to ASCII mode.
-- This prevents accidental Vim movements when composition is active.
local M = {}
function M.init(env)
local config = env.engine.schema.config
local name_space = env.name_space:gsub('^*', '')
local trigger_list = config:get_list(name_space .. "/trigger_inputs")
M.trigger_inputs = {}
if trigger_list then
for i = 0, trigger_list.size - 1 do
local key = trigger_list:get_value_at(i).value
M.trigger_inputs[key] = true
end
end
end
function M.func(key_event, env)
local engine = env.engine
local context = env.engine.context
-- The `is_composing()` check ensures this shortcut only triggers when an IME is active.
if key_event:release() and context:is_composing() then
if M.trigger_inputs[context.input] then
-- keep current input from dropping
engine:commit_text(context.input)
context:clear()
-- reset back to english mode
context:set_option("ascii_mode", true)
return 1
end
end
return 2
end
return M在配置文件中指定按键集合。在小鹤双拼下 jj 对应的 jan 没有意义,所以可用。其他的像 ` 在写 Obsidian Markdown 常用。
engine:
processors:
- lua_processor@*force_ascii_mode # 特定按键组合强制英
force_ascii_mode:
trigger_inputs: # 在小鹤双拼上没意义但会和常用按键习惯冲突的输入
- jj # vim
- win # windows, winget
- brew
- git
- http
- rm
- mv
- cp
- ps
- my # mysql
- "`" # markdown
- "["下一步,考虑让 CapsLock 的行为变得可预测,现在这样是当处于英文状态时,要按两下才能切换到中文。