使用搜狗輸入法的雙拼時,輸入“womf”然后按下主鍵盤上的數字1,會選擇排名第一的候選詞上屏(大概率是“我們),輸入“womf”然后按下數字鍵盤上的數字1,不會選擇候選詞,而是將輸入文本變成“womf1”,上屏的也將是“womf1”。小狼毫輸入法默認則不是這樣動作的,輸入“womf”后,無論按下主鍵盤還是數字鍵盤上的數字,都會選擇候選詞上屏,而不會是原始輸入加上數字鍵對應的數字上屏。
我看到github上rime輸入法討論區有人提問有沒有辦法讓小狼毫輸入法表現出搜狗輸入法那樣的行為,該問題已經很長時間了,但是沒有有效的回答。查看小狼毫的文檔,也沒有涉及如何配置可以讓主鍵盤與數字鍵盤上的數字按鍵表現出不同行為模式的內容,但是小狼毫輸入法lua插件可以通過key_event:repr()獲取按鍵名稱,從而區分當前按下的數字鍵是主鍵盤上的數字鍵還是數字鍵盤上的數字鍵,這就為通過lua腳本實現按下數字鍵盤上的數字鍵時不選擇候選詞上屏而是直接將原始輸入碼與數字直接上屏創造了條件。編輯如下lua腳本(可以將文件名命名為kp_num_processor.lua),創建一個processor:
-- kp_num_processor.lua
local function processor(key_event, env)local key_code = key_event:repr() -- 獲取按鍵名稱-- 定義數字鍵盤數字鍵的映射local numpad_keys = {["KP_0"] = "0",["KP_1"] = "1",["KP_2"] = "2",["KP_3"] = "3",["KP_4"] = "4",["KP_5"] = "5",["KP_6"] = "6",["KP_7"] = "7",["KP_8"] = "8",["KP_9"] = "9"}-- 檢查是否是數字鍵盤數字鍵if numpad_keys[key_code] thenlocal context = env.engine.context -- 獲取輸入上下文local input_text = context.input -- 獲取當前輸入的原始碼if input_text and input_text ~= "" then-- 如果有輸入的原始碼,拼接原始碼和數字并提交env.engine:commit_text(input_text .. numpad_keys[key_code])context:clear() -- 清空輸入緩沖區else-- 如果沒有原始碼,只提交數字env.engine:commit_text(numpad_keys[key_code])endreturn 1 -- 表示按鍵已處理endreturn 2 -- 未處理,交給其他處理器
endreturn processor
然后在使用的輸入法方案配置文件中配置使用該processor,例如我使用的微軟雙拼方案,就在double_pinyin_mspy.schema.yaml的“engine/processors”結點的第一行增加一個processor:
-- ……前面的配置內容省略
engine:
? processors:
? ? - lua_processor@*kp_num_processor
? ? - lua_processor@*select_character ?# 以詞定字
? ? - ascii_composer
-- ……后續配置內容省略
然后重新部署,就可以愉快的輸入了。
本文內容在小狼毫輸入法0.17.9下測試通過。花了我一兩個月的摸索才算成功😀。