[rime-lua] 适用于五笔输入的改进版单字优先脚本

本脚本解决了由于动态词频导致五笔输入时词组优先级高于单字的问题,并且在官方示例脚本的基础上进行了如下改进:

  1. 优化了性能,解决了退格时卡顿的问题。
  2. 仅当键入长度 < 4 时才使单字强制优先(因为键入 4 码时期望输入词组的机率较高)
  3. 只改变优先级最高的单字的顺序,即如果有多个单字,只将正常排序时的第一个单字候选移至最前。
--[[
single_char_filter: 候选项重排序,使单字优先(当键入长度<4,且只使一个单字优先,其它单字正常排序)
--]]

local function filter(input, env)
    local inputKeys = env.engine.context.input

    if (#inputKeys < 4) then
        local l = {}

        for cand in input:iter() do
            if (utf8.len(cand.text) == 1) then
                yield(cand)
                break
            else
                table.insert(l, cand)
            end
        end

        if (#l > 0) then
            for _, cand in ipairs(l) do
                yield(cand)
            end
        end
    end

    for cand in input:iter() do
        yield(cand)
    end
end

return filter

安装方法

需要 Fcitx 5 和 librime-lua。

  1. 将以上脚本复制到 ~/.local/share/fcitx5/rime/lua/single_char.lua 里(一般需要新建)。

  2. ~/.local/share/fcitx5/rime/rime.lua 里,加入

    package.path = "./lua/?.lua;"..package.path
    
    -- 单字优先
    single_char_filter = require("single_char")
    
  3. 编辑或新建wubi86.custom.yaml,加入以下部分:

    patch:
      engine/+:
        filters/+:
          - lua_filter@single_char_filter
    
  4. 重新部署 Rime。

效果

1

2

1赞