diff --git a/README.md b/README.md index 305cc6e..ffc4e75 100644 --- a/README.md +++ b/README.md @@ -459,7 +459,15 @@ datetime_formats: -**英文方案:** ①支持英文整句,支持独立使用与万象拼音挂接使用②输入hello则得到hello,输入首字母大写Hello则得到Hello和一众首字母大写的联想词,输入前两码大写HEllo则得到全为大写的HELLO和一众大写英文。还有一个项目。③英文自动加空格,off: 关闭; before: 总是前加; after: 总是后加,smart: 智能模式连续输入英文时第二个单词前开始加空格,非输入状态的回车与空格都能打断加空格状态,也就是说你自己按了空格/回车再输入英文就不会加空格,可以想象一下回车后从头输入出现了空格的尴尬。 +**英文方案:** + +①支持英文整句,支持与万象拼音挂接使用,支持独立使用,能在输入中自动完成句中空格的添加 + +②尾部~的含义,在输入句子的时候,当最后一个单词还未输入完全,如this is english只输入到了eng~这个时候就会出现~代表了一个不在词库中、未稳定的状态,这能保证你的输入视觉上的完美,也可以随时上屏。其本质是空码补全,因此有时候输入一个如scx~时候你可以空格上屏也可以拍下回车,兼容多种习惯。 + +③输入hello则得到hello,输入首字母大写Hello则得到Hello和一众首字母大写的联想词,输入前两码大写HEllo则得到全为大写的HELLO和一众大写英文。 + +④英文智能加空格,off: 关闭; before: 总是前加; after: 总是后加,smart: 智能模式连续输入英文时第二个单词前开始加空格,非输入状态的回车与空格都能打断加空格状态,也就是说你自己按了空格/回车再输入英文就不会加空格,可以想象一下回车后从头输入出现了空格的尴尬。支持加空格状态延时销毁,可在方案中配置,超时就不加空格,你忽然鼠标定位到行首,稍作停顿就不会在行首输出空格了,默认设置5秒可根据你输入单词的速度做调整,在紧凑的输入中,前面提到的空格、回车动作都能立即生效。 @@ -481,7 +489,7 @@ datetime_formats: **中文无感造词Lua(仅PRO):** 在关闭调频的情况下,通过逐步选字选词的方式上屏将为你记录整段,且不会产生小碎片,所造词汇与db用户词是一回事,遵循用户词管理的相关逻辑,其中直接上屏不造词。相比按需造词更加不打断输入。 -**英文造词Lua:** 例如当输入scx的时候没有任何候选,此时可以追加\,```scx\```可以触发创建候选,但是有的时候我们想要任意编码进行英文造词,但是又有汉字在前面怎么办,本着一次不行就来两次的原则```nihao\\```末尾输入两个就可以了。当然你也可以统一理解为按两下来触发强制英文候选。然后空格上屏他就记录到了en.userdb,导出和同步与用户词逻辑一致。 +**英文造词Lua:** 在任意英文输入编码后面,如:```nihao\\```末尾输入两个就可以触发英文造词。然后空格上屏他就记录到了en.userdb,导出和同步与用户词逻辑一致。 **用户词删除:** 使用Ctrl+del是rime系统删除用户词,就可以将用户词标记为c<=0,这在rime系统中就表现为不使用,假性删除。 diff --git a/lua/super_english.lua b/lua/super_english.lua index 2859f77..d32411c 100644 --- a/lua/super_english.lua +++ b/lua/super_english.lua @@ -33,7 +33,7 @@ end -- 辅助函数:判断是否为置顶表词汇 local function is_table_type(c) local t = fast_type(c) - return t == "table" or t == "user_table" or t == "fixed" + return t == "user_table" or t == "fixed" end -- [Time] 封装统一的时间获取函数 (单位: 秒, 带小数) local function get_now() @@ -240,8 +240,8 @@ function F.init(env) env.delim_check_pattern = "[" .. escaped_delims .. "]" env.prev_commit_is_eng = false - env.last_commit_time = 0 - + env.last_commit_time = 0 --记录上次提交时间 + env.comp_start_time = nil -- 记录本次输入开始的时间 if env.engine.context then env.update_notifier = env.engine.context.update_notifier:connect(function(ctx) local curr_input = ctx.input @@ -251,6 +251,13 @@ function F.init(env) else env.block_derivation = false end + -- 如果输入框为空,重置开始时间 + if curr_input == "" then + env.comp_start_time = nil + -- 如果输入框不为空,且还没记录开始时间,说明是“刚刚开始打字” + elseif env.comp_start_time == nil then + env.comp_start_time = get_now() + end end) env.commit_notifier = env.engine.context.commit_notifier:connect(function(ctx) local commit_text = ctx:get_commit_text() @@ -311,11 +318,12 @@ function F.func(input, env) -- [Check 2] 时间自然过期 elseif effective_prev_is_eng and env.spacing_timeout > 0 then - local now = get_now() - -- now 是秒(带小数), last_commit_time 是秒(带小数), spacing_timeout 是配置的秒数(如 0.5) - if (now - env.last_commit_time) > env.spacing_timeout then + -- 取“输入开始时间”保证输入中 + local check_time = env.comp_start_time or get_now() + -- 计算间隙:(开始打字时间 - 上次上屏时间) + if (check_time - env.last_commit_time) > env.spacing_timeout then effective_prev_is_eng = false - env.prev_commit_is_eng = false -- 更新状态避免重复计算 + env.prev_commit_is_eng = false end end