Skip to content

Instantly share code, notes, and snippets.

@lotem
Created July 9, 2012 12:23
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lotem/3076166 to your computer and use it in GitHub Desktop.
Save lotem/3076166 to your computer and use it in GitHub Desktop.
自動識別西文及數字組成的用戶名
# default.custom.yaml
# 全局範圍識別輸入串爲 rime + 任意數字序列,以及形如 rimeime-1.2.3 的常用西文短語
# 也可將本組 patch 寫入 <輸入方案ID>.custom.yaml 使這組規則僅在一款輸入方案中有效
#
# 第一例,輸入 rime 之後,再輸入任意一個數字,則立即識別爲西文輸入
# 再加上 default.yaml 原有的 email 規則,識別包含 @ 字符的郵箱,於是可以一氣呵成 rime123@company.com
# 第二例,輸入到 rimeime 時,立即識別爲西文輸入,並可跟隨任意位數字及指定的符號
patch:
recognizer/patterns/rime123: "^rime[0-9]+$"
recognizer/patterns/rimeime: "^rimeime[-_.0-9]*$"
@redleafnew
Copy link

redleafnew commented Jan 22, 2024

谢谢。我退回到以前的了,这样如果确实想输入分号就选2,临时英文就接着输入也不错。
image

另外

schema_list:
    - schema: wubixinshiji
    - schema: easy_en  

如果加载一次easy_en,后面如果有英文单词就会匹配,哪怕后面是再注释了,也可以。
完美了。多谢。

@gfgkmn
Copy link

gfgkmn commented Jan 22, 2024

好的, 你这个(同时存在半角和全角)确实无法做到双分号上屏, 因为这里有一个二元语义, 逻辑上冲突了, 第二个分号到底是要上屏备选2, 全角分号. 还是第二个分号只想做为一个顶格键直接上屏.

@gfgkmn
Copy link

gfgkmn commented Jan 22, 2024

感谢反馈, 这样我也修复了一个自己使用的bug.

@redleafnew
Copy link

好的, 你这个(同时存在半角和全角)确实无法做到双分号上屏, 因为这里有一个二元语义, 逻辑上冲突了, 第二个分号到底是要上屏备选2, 全角分号. 还是第二个分号只想做为一个顶格键直接上屏.

是用来上屏中文(全角)分号的,我没有用冒号和分号作为候选上屏的。用的以前极点的逻辑,1个分号临时英文,2个分号输入分号,有时输入中文时确实需要分号。

@gfgkmn
Copy link

gfgkmn commented Jan 22, 2024

搞定了. 对我这边是完美了. 不过不知道你适用不适用,
放出来供其他朋友参考.

参见上面的考虑.

最后的模式组

starts_with_semicolon: ';[;A-Za-z_<>\[\]\-+=~@.#?!%^&$*()\\]*$'

最后的函数

function append_original_filter(input, env)
    local envengine = env.engine
    local envcontext = envengine.context
    local composition = envcontext.composition
    local segmentation = composition:toSegmentation()
    local schema = envengine.schema

    if(not composition:empty()) then
        local seg = composition:back()
        if schema.schema_id == "easy_en" then
            yield(Candidate("string", seg.start, seg._end, segmentation.input, ""))
        elseif segmentation.input:sub(1, 1) == ";" and segmentation.input:len() > 1  then
            if segmentation.input:sub(2, 2) == ";" then
                envengine:commit_text(";")
                envcontext:clear()
                return
            else
                yield(Candidate("space", seg.start, seg._end, string.sub(segmentation.input, 2), ""))
            end
        end
    end
    for cand in input:iter() do
        yield(cand)
    end
end

这样就可以使用分号上屏分号了, 空格, 回车也同样上屏分号.

@redleafnew
Copy link

我的出不来,按分号就是上屏个分号。没有临时拼音出现了,改了rime.rua和方案中的
image

@YaoLiMuMu
Copy link

YaoLiMuMu commented Jan 23, 2024 via email

@redleafnew
Copy link

修改return键为commit_composition

editor:
bindings:
Return: commit_composition
这个主要是为了让回车上屏的时候, 同样上屏正常, 不会把前置的分号输出出来.
这样基本上就比较完美了.> 修改return键为commit_composition

大佬,正常输入的时候回车就上屏第一个候选了,能不能正常输入中文时,按回车时上屏的刚才输入的编码。同时实现分号的临时英文,回车时英文。如果这个 Return: commit_composition注释后,正常输入中文时回车为编码上屏,临时英文时,英文的前面会有一个分号。
2024-03-23_16-26-37

@redleafnew
Copy link

2024-03-23_16-28-48

@zwjzxh520
Copy link

作者大大,麻烦整理一下最终版?从最开始的评论依次跟着评论调整下来,效果还是差强人意。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment