fix: 输入中持续保持英文加空格的记录状态,哪怕你输入的慢点

This commit is contained in:
amzxyz
2026-01-05 13:00:10 +08:00
parent ab6d2c9a11
commit 873fc3491c
2 changed files with 25 additions and 9 deletions

View File

@@ -459,7 +459,15 @@ datetime_formats:
<img src="https://storage.deepin.org/thread/202509260130219621_首选成对符号1.jpg" height="80"> <img src="https://storage.deepin.org/thread/202509260130208277_首选成对符号2.jpg" height="80"> <img src="https://storage.deepin.org/thread/202509260130199763_首选成对符号3.jpg" height="80">
**英文方案:** ①支持英文整句支持独立使用与万象拼音挂接使用②输入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秒可根据你输入单词的速度做调整在紧凑的输入中前面提到的空格、回车动作都能立即生效。
<img src="https://storage.deepin.org/thread/202509260133175234_首字母大写.jpg" height="80">
<img src="https://storage.deepin.org/thread/202509260133175362_双字母大写.jpg" height="80">
@@ -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系统中就表现为不使用假性删除。

View File

@@ -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