Ctrl+Space应继续完善,适配switch_key中的所有上屏模式
在最近的更新中,Ctrl+Space切换中英文的问题基本改善了,但现存的问题是Control+Space默认执行清除编码操作,并且用户无法自定义该快捷键的功能。这可能与用户的使用习惯存在冲突。
Control+Space来上屏编码,这种行为在其他主流输入法中得到支持,并可以通过设置进行调整。
此外,用户设置中英切换键的习惯有多样化,会有只使用Control+Space进行中英文切换的情况。依赖单一的Shift键或Ctrl键在某些软件中容易导致误触。
因此,建议将Control+Space的功能与ascii_composer/switch_key中定义的其他状态一致化,纳入可配置选项中。这样可以确保所有切换键的功能一致。
支持楼上所说的需求。
#1389 之前提过此事,作者没当回事儿,直接关了。
先让librime支持了ascii_composer/switch_key里设置Control+space再看有没有会的大神来处理这个,如何?
否则这个就要硬编码一点逻辑,会和后端的路线越行越远分叉了。
支持,希望开发者早日完全实现这一功能。
感觉Ctrl+Space按键特殊的一点是——该快捷键可以在系统中变更,用户可能会改成别的组合键。
因此,输入法中用Control+space命名不妥,用ToggleImeOnOpenClose或者toggleime等命名更恰当,来表示“输入法/非输入法切换”这一行为。
先让librime支持了
ascii_composer/switch_key里设置Control+space再看有没有会的大神来处理这个,如何?否则这个就要硬编码一点逻辑,会和后端的路线越行越远分叉了。
噢,原来是这个原因,明白了,感谢大神解惑
这个问题(切换中英时会清除输入框中未提交的内容), 可以通过lua脚本解决。
-
如果你是Windows系统,你要禁用掉系统Ctrl+space禁用输入法的快捷键, 这个目前只能通过修改注册表来完成。 而且要注意,Windows的大版本更新会重置这些注册表,这时你需要重新禁用这个快捷键。具体方法详见https://github.com/rime/weasel/issues/717#issuecomment-1464936922
-
注释掉你配置中原有的Control+Space快捷键。
-
然后将以下脚本保存为
toggle_ascii.lua文件,把它放到文件夹.../Rime/lua/下:
-- toggle_ascii.lua
local toggle_ascii = {}
function toggle_ascii.init(env)
end
function toggle_ascii.func(key, env)
local engine = env.engine
local context = env.engine.context
if not key:release()
and (key:repr() == "Control+space")
then
local target_state = not context:get_option("ascii_mode")
if context:is_composing() then
context:clear_non_confirmed_composition()
context:commit()
end
context:set_option("ascii_mode", target_state)
return 1
end
return 2
end
return toggle_ascii
- 修改用户文件夹的文件
.../Rime/rime.lua, 添加如下内容:
-- Control+space切换中英脚本
toggle_ascii = require("toggle_ascii")
- 在你的schema配置文件
schema_name.custom.yaml中添加(比如我的schema是double_pinyin_flypy,就修改double_pinyin_flypy.custom.yaml文件,没有就自己新建一个):
patch:
# 开启Control+space切换中英脚本
engine/processors/+:
- lua_processor@toggle_ascii
- 重新部署输入法
- 补充,关键在于lua脚本中的这几个函数调用:
context:clear_non_confirmed_composition()
context:commit()
context:set_option("ascii_mode", target_state)
前两行负责将未提交的内容上屏,最后一行负责切换中英文。
- 补充2,这个脚本是大概一年多前写的,我自己用下来一直没问题
使用安装包进行的安装,没有rime.lua文件可进行修改,有什么解决办法吗?
使用安装包进行的安装,没有rime.lua文件可进行修改,有什么解决办法吗?
更建议从https://github.com/iDvel/rime-ice 这种完善的配置开始, 改出自己需要的配置 如果使用weasel的默认配置, 自行新建对应名称的文件/文件夹即可
这个问题(切换中英时会清除输入框中未提交的内容), 可以通过lua脚本解决。
- 如果你是Windows系统,你要禁用掉系统Ctrl+space禁用输入法的快捷键, 这个目前只能通过修改注册表来完成。 而且要注意,Windows的大版本更新会重置这些注册表,这时你需要重新禁用这个快捷键。具体方法详见如何关闭禁用输入法这个功能 #717 (comment)
- 注释掉你配置中原有的Control+Space快捷键。
- 然后将以下脚本保存为
toggle_ascii.lua文件,把它放到文件夹.../Rime/lua/下:-- toggle_ascii.lua
local toggle_ascii = {}
function toggle_ascii.init(env) end
function toggle_ascii.func(key, env) local engine = env.engine local context = env.engine.context
if not key:release() and (key:repr() == "Control+space") then local target_state = not context:get_option("ascii_mode") if context:is_composing() then context:clear_non_confirmed_composition() context:commit() end context:set_option("ascii_mode", target_state) return 1 end return 2end
return toggle_ascii 3. 修改用户文件夹的文件
.../Rime/rime.lua, 添加如下内容:-- Control+space切换中英脚本 toggle_ascii = require("toggle_ascii") 4. 在你的schema配置文件
schema_name.custom.yaml中添加(比如我的schema是double_pinyin_flypy,就修改double_pinyin_flypy.custom.yaml文件,没有就自己新建一个):patch:
开启Control+space切换中英脚本
engine/processors/+: - lua_processor@toggle_ascii 5. 重新部署输入法
- 补充,关键在于lua脚本中的这几个函数调用:
context:clear_non_confirmed_composition() context:commit()
context:set_option("ascii_mode", target_state) 前两行负责将未提交的内容上屏,最后一行负责切换中英文。
- 补充2,这个脚本是大概一年多前写的,我自己用下来一直没问题
非常感谢,试了您的方案,完美解决