librime icon indicating copy to clipboard operation
librime copied to clipboard

中文输入模式下输入数字或英文字母后,紧接着的标点会自动变成英文标点,怎么禁用这个功能?

Open cy18 opened this issue 4 years ago • 9 comments

有时候一句中文最后出现一个英文单词或者数字,这时候其实是想要中文标点的,但是出来的却是英文标点。想把这个功能禁用掉,但是搜了半天没搜到相关的网页,过来请教下。

cy18 avatar Jun 12 '20 00:06 cy18

又搜了下,发现是0.9.12添加的第三条新功能,看了下源码,好像没有提供关闭的选项?

小狼毫 0.9.12 <2012-05-05>

    用 Shift+Del 刪除已記入用戶詞典的詞條,詳見 Issue 117
    可選用Shift或Control爲中西文切換鍵,詳見 Issue 133
    數字後的句號鍵識別爲小數點、冒號鍵識別爲時分秒分隔符
    解決在QQ等應用程序中的定位問題
    支持設置爲系統默認輸入法
    支持多個Windows用戶(新用戶執行一次佈署後方可使用)

cy18 avatar Jul 22 '20 03:07 cy18

另外问一下,既然数字后面能自动换成英文的句号和冒号,那么英文后面是不是也应该自动换一下。 或者让这个功能可以配置就好啦。

iDvel avatar May 14 '22 13:05 iDvel

这个现在是可以配置的了吗

sweepingmonk123 avatar Apr 08 '23 12:04 sweepingmonk123

另外问一下,既然数字后面能自动换成英文的句号和冒号,那么英文后面是不是也应该自动换一下。 或者让这个功能可以配置就好啦。

大佬这个可配置了吗?

dnxxymcj avatar Jul 01 '23 12:07 dnxxymcj

我也想知道

gxh1996 avatar Sep 15 '23 02:09 gxh1996

还没有禁用选项吗?这个属实很影响使用

fyang93 avatar Nov 15 '23 06:11 fyang93

用lua可以实现

local P = {}

function P.init(env) end

function P.fini(env) end

function P.func(key_event, env)
    env.engine.context.commit_history:clear()
    return 2
end

return P

mokapsing avatar Jan 10 '24 07:01 mokapsing

lua实现代码,供参考 原理:中文模式下,监测到输入数字后的按键代码是46(.)或58(:)时,输入对应的中文标点

local P = {}

function P.init(env)
end

function P.fini(env)
end

function P.func(key, env)
    -- return 0,1,2
    -- 0拒绝,librime不做处理
    -- 1接受,仅本processor处理
    -- 2跳过,本processor不做处理

    if key:release() then -- 不处理按键释放事件
        return 2
    end

    if key:ctrl() or key:alt() or key:super() then -- 不处理的按键事件
        return 2
    end
    local context = env.engine.context
    if context:is_composing() or context:get_option("ascii_mode") then -- 有未上屏的编码,英文模式
        return 2
    end

    local keycode = key.keycode
    local char = {
        [46] = "。",
        [58] = ":",
        [44] = ","
    }
    if char[keycode] then
        local last_ch = context.commit_history:back()
        if last_ch and last_ch.text:match("%d$") then
            env.engine:commit_text(char[keycode])
            context:clear()
            return 1
        end
    end

    return 2
end

return P

s92671 avatar Jan 11 '24 00:01 s92671