home icon indicating copy to clipboard operation
home copied to clipboard

关于自定义短语的字数限制

Open skw2022 opened this issue 2 years ago • 7 comments

请问自定义短语有字数限制吗?具体规则是怎样的? 我简单测试了一下,只加载明月拼音简化字,定义一条编码为vv的短语,取编码为vv是为了避免其他词库的重码混进来,测得短语长度最大为313个汉字,超过的话就会崩溃; 再定义两条编码为vv的短语,这时每条短语长度就不能再为313个汉字了,会崩溃,经多次测试,每条长度只能为153个汉字,两条合计为306个汉字,比313少了7。而且,两条可以不一样长,只要长度合计不超过306即可。 似乎字数限制是与同屏显示的重码短语的总字数有关。如果有三条重码短语,估计字数之和应该又比306要少几个汉字吧? 这种超字数崩溃或许就是一个bug。希望能修复这个bug,解除这个限制,至少这个同屏重码字数要在3000字以上。

skw2022 avatar Aug 28 '22 03:08 skw2022

iDvel给我推荐 Alfred 的 snippets ,看介绍,它是一个效率工具。个人觉得输入法的短语功能可能比它好用,一样可以是效率工具。 以前的拼音加加的短语功能比较强大,可以定义很多需要快速输出的内容,堪称人类大脑的扩展,本人一直使用,但它可能有十年没升级了,直到最近系统从win7升级为win10,必须寻找替代工具。 它的短语定义使用TXT文件,这点和rime很像,直接编辑,保存即可生效(应该是后台自动编译)。格式:编码=短语,无需定义权重,权重就是定义的先后顺序,比较傻瓜。允许使用“/”进行分行,没有单条短语的字数限制,也没有短语条数的限制,我目前最多一条短语300多个汉字,有近万行。这或许就是它长久保持生命力的原因。 期望rime也能实现相关的功能,最关键是字数限制的问题。

skw2022 avatar Aug 28 '22 13:08 skw2022

我猜是太長一屏顯示不下,前端崩潰了

LEOYoon-Tsaw avatar Aug 28 '22 13:08 LEOYoon-Tsaw

atext 也可以試試 Espanso

shewer avatar Aug 29 '22 08:08 shewer

我猜是太長一屏顯示不下,前端崩潰了

测试时,短语太长已经撑出屏幕了,但rime还没死,继续加长到一定程度,才死。估计是另一个参数在影响。建议自动识别长度自适应,或增加设置显示宽度的参数,而不限制定义长度。

skw2022 avatar Aug 29 '22 09:08 skw2022

atext 也可以試試 Espanso

谢谢!不想试其他工具,就想使用rime,能用输入法解决的问题,就用输入法解决。

skw2022 avatar Aug 29 '22 09:08 skw2022

或使用librime-lua lua_processor 不要使用 candidate 只要match keyword 直接commit_text

-- filename: snippet_proc.lua
local function load_snippets()
  return {
     ['/abc'] = ('abc'):rep(10000),
  }
end
local function commit_text(eng,text)
     eng:commit_text(text)
end

local M = {}

function M.init(env)
    env.snippets= load_snippets()
end

function M.func(key,env)
   local input = env.engine.context.input  or ""
   local char =  key.keycode >0x21 and key.keycode <0x80 
         and string.char( key.keycode) or ""
   local text = #char >0 and env.snippets[input .. char] 
   if text then 
      commit_text(env.engine, text)
       env.engine.context:clear() -- 增加 clear input
       return 1 -- accepted
   end
   return 2 -- Noop
end

return M

-- in  rime.lua
--     snippet_proc= require('snippet_proc')

-- in custom.yaml
        engine/processors/@after 0: lua_processor@snippet_proc

shewer avatar Aug 29 '22 12:08 shewer

或使用librime-lua lua_processor 不要使用 candidate 只要match keyword 直接commit_text

-- filename: snippet_proc.lua
local function load_snippets()
  return {
     ['/abc'] = ('abc'):rep(10000),
  }
end
local function commit_text(eng,text)
     eng:commit_text(text:sub(1,2020) )
end

local M = {}

function M.init(env)
    env.snippets= load_snippets()
end

function M.func(key,env)
   local input = env.engine.context.input  or ""
   local char =  key.keycode >0x21 and key.keycode <0x80 
         and string.char( key.keycode) or ""
   local text = #char >0 and env.snippets[input .. char] 
   if text then 
      commit_text(env.engine, text)
       return 1 -- accepted
   end
   return 2 -- Noop
end

return M

-- in  rime.lua
--     snippet_proc= require('snippet_proc')

-- in custom.yaml
        engine/processors/@after 0: lua_processor@snippet_proc

arch linux Ver: librime 1.7.3 librime-lua 177 lua Lua 5.4 還是有長度限制 我測試 text:sub(1,202x) ok 超過就不行了,整個卡住

shewer avatar Aug 29 '22 13:08 shewer