diff --git a/README.md b/README.md index c80fb9e..4417a2c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - 简体 | 全拼 | 双拼 - 主要功能 - [melt_eng](https://github.com/tumuyan/rime-melt) 英文输入 + - [优化英文输入体验](https://dvel.me/posts/make-rime-en-better/) - [两分输入法](http://cheonhyeong.com/Simplified/download.html) 拼字 - 简繁切换 - 日期、时间、星期 diff --git a/double_pinyin.schema.yaml b/double_pinyin.schema.yaml index 48b5cac..7582433 100755 --- a/double_pinyin.schema.yaml +++ b/double_pinyin.schema.yaml @@ -79,11 +79,11 @@ engine: - uniquifier # 去重 -# 限制码长,默认 100。(最多能输入的字符个数) +# Lua 配置: 限制码长,默认 100。(最多能输入的字符个数) code_length_limit_processor: 100 -# 日期、时间、星期、ISO 8601、时间戳的触发关键字 +# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字 date_translator: date: date # 日期: 2022-11-29 time: time # 时间: 18:13 diff --git a/double_pinyin_flypy.schema.yaml b/double_pinyin_flypy.schema.yaml index 954f05d..30394e4 100755 --- a/double_pinyin_flypy.schema.yaml +++ b/double_pinyin_flypy.schema.yaml @@ -79,11 +79,11 @@ engine: - uniquifier # 去重 -# 限制码长,默认 100。(最多能输入的字符个数) +# Lua 配置: 限制码长,默认 100。(最多能输入的字符个数) code_length_limit_processor: 100 -# 日期、时间、星期、ISO 8601、时间戳的触发关键字 +# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字 date_translator: date: date # 日期: 2022-11-29 time: time # 时间: 18:13 diff --git a/rime.lua b/rime.lua index 9c6adfd..09eec33 100755 --- a/rime.lua +++ b/rime.lua @@ -151,8 +151,8 @@ end function long_word_filter(input, env) -- 提升 count 个词语,插入到第 idx 个位置,默认 2、4。 local config = env.engine.schema.config - local count = config:get_string(env.name_space .. "/count") or 2 - local idx = config:get_string(env.name_space .. "/idx") or 4 + local count = config:get_int(env.name_space .. "/count") or 2 + local idx = config:get_int(env.name_space .. "/idx") or 4 local l = {} local firstWordLength = 0 -- 记录第一个候选词的长度,提前的候选词至少要比第一个候选词长 @@ -162,7 +162,7 @@ function long_word_filter(input, env) local i = 1 for cand in input:iter() do leng = utf8.len(cand.text) - if (firstWordLength < 1 or i < tonumber(idx)) then + if (firstWordLength < 1 or i < idx) then i = i + 1 firstWordLength = leng yield(cand) @@ -177,7 +177,7 @@ function long_word_filter(input, env) -- end -- 换了个正则,否则中英混输的也会被提升 -- elseif ((leng > firstWordLength) and (s2 < count)) and (string.find(cand.text, "^[%w%p%s]+$")==nil) then - elseif ((leng > firstWordLength) and (s2 < tonumber(count))) and (string.find(cand.text, "[%w%p%s]+") == nil) then + elseif ((leng > firstWordLength) and (s2 < count)) and (string.find(cand.text, "[%w%p%s]+") == nil) then yield(cand) s2 = s2 + 1 else @@ -189,6 +189,35 @@ function long_word_filter(input, env) end end ------------------------------------------------------------- +-- 降低部分英语单词在候选项的位置 +-- https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题 +-- 感谢大佬 @[Shewer Lu](https://github.com/shewer) 指点 +function reduce_english_filter(input, env) + local config = env.engine.schema.config + local idx = config:get_int(env.name_space .. "/idx") -- 要插入的位置 + local words = {} -- 要过滤的词 + local list = config:get_list(env.name_space .. "/words") + for i = 0, list.size - 1 do + table.insert(words, list:get_value_at(i).value) + end + + local l = {} + local code = env.engine.context.input -- 当前编码 + for cand in input:iter() do + table.insert(l, cand) + end + for _, word in ipairs(words) do + if (code == word) then + first_element = table.remove(l, 1) + table.insert(l, 2, first_element) + break + end + end + for _, cand in ipairs(l) do + yield(cand) + end +end +------------------------------------------------------------- -- v 模式,单个字符优先 -- 因为设置了英文翻译器的 initial_quality 大于 1,导致输入「va」时,候选项是「van vain …… ā á ǎ à」 -- 把候选项应改为「ā á ǎ à …… van vain」,让单个字符的排在前面 @@ -196,7 +225,7 @@ function v_filter(input, env) local code = env.engine.context.input -- 当前编码 local l = {} for cand in input:iter() do - -- 特殊情况处理 + -- 特殊情况处理 if (cand.text == "Vs.") then yield(cand) end @@ -205,6 +234,7 @@ function v_filter(input, env) for _, v in ipairs(arr) do if (v == cand.text and string.len(code) == 2 and string.find(code, "v") == 1) then yield(cand) + break end end -- 以 v 开头、2 个长度的编码、候选项为单个字符的,提到前面来。 @@ -214,7 +244,7 @@ function v_filter(input, env) table.insert(l, cand) end end - for i, cand in ipairs(l) do + for _, cand in ipairs(l) do yield(cand) end end @@ -237,9 +267,9 @@ function code_length_limit_processor(key, env) local ctx = env.engine.context local config = env.engine.schema.config -- 限制 - local length_limit = config:get_string(env.name_space) or 100 + local length_limit = config:get_int(env.name_space) or 100 if (length_limit ~= nil) then - if (string.len(ctx.input) > tonumber(length_limit)) then + if (string.len(ctx.input) > length_limit) then -- ctx:clear() ctx:pop_input(1) -- 删除输入框中最后个编码字符 return 1 diff --git a/rime_ice.schema.yaml b/rime_ice.schema.yaml index 16da919..c6d9b15 100755 --- a/rime_ice.schema.yaml +++ b/rime_ice.schema.yaml @@ -6,7 +6,7 @@ schema: schema_id: rime_ice name: 雾凇拼音 - version: "1.2.4" + version: "1.3.0" author: - Dvel description: | @@ -65,18 +65,19 @@ engine: - reverse_lookup_translator@liangfen # 反查,两分拼字 - lua_translator@unicode # Unicode filters: - - lua_filter@long_word_filter # 长词优先 - - simplifier@emoji # Emoji - - simplifier@traditionalize # 简繁切换 - - lua_filter@v_filter # v 模式 symbols 优先(否则是英文优先) - - uniquifier # 去重 + - lua_filter@long_word_filter # 长词优先 + - simplifier@emoji # Emoji + - simplifier@traditionalize # 简繁切换 + - lua_filter@v_filter # v 模式 symbols 优先(否则是英文优先) + - lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置 + - uniquifier # 去重 -# 限制码长,默认 100。(最多能输入的字符个数) +# Lua 配置: 限制码长,默认 100。(最多能输入的字符个数) code_length_limit_processor: 100 -# 日期、时间、星期、ISO 8601、时间戳的触发关键字 +# Lua 配置: 日期、时间、星期、ISO 8601、时间戳的触发关键字 date_translator: date: rq # 日期: 2022-11-29 time: sj # 时间: 18:13 @@ -85,13 +86,26 @@ date_translator: timestamp: ts # 时间戳: 1669716794 -# 长词优先,提升 count 个词语,插入到第 idx 个位置。 +# Lua 配置: 长词优先,提升 count 个词语,插入到第 idx 个位置。 # 示例:将 2 个词插入到第 4、5 个候选项,输入 jie 得到「1接 2解 3姐 4饥饿 5极恶」 long_word_filter: count: 2 idx: 4 +# Lua 配置: 降低部分英语单词在候选项的位置 +# 详细介绍 https://dvel.me/posts/make-rime-en-better/#短单词置顶的问题 +# 正常情况: 输入 rug 得到 「1.rug 2.如果 …… 」 +# 降低之后: 输入 rug 得到 「1.如果 2.rug …… 」 +reduce_english_filter: + idx: 2 # 降低到第 idx 个位置 + words: # 要降低的单词,匹配的是输入码,即全小写。 + - rug + - bus + - ship + # words: [rug, bus, ship] # 这么写也行 + + # 从 default 继承快捷键 key_binder: import_preset: default