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