Skip to content

fix: Caps Lock 中英切换不再吞掉已输入拼音 - #11

Open
chriscco wants to merge 1 commit into
thesadbee:mainfrom
chriscco:fix/caps-lock-commit-code
Open

fix: Caps Lock 中英切换不再吞掉已输入拼音#11
chriscco wants to merge 1 commit into
thesadbee:mainfrom
chriscco:fix/caps-lock-commit-code

Conversation

@chriscco

@chriscco chriscco commented Sep 1, 2026

Copy link
Copy Markdown

需求 / 问题

用中文输入法打字时,经常出现忘记切换到英文输入法、已经打了几个拼音字母才发现的情况。这时按 Caps Lock 想切到英文,期望的行为是像 macOS 原生中文输入法那样:已经打出的字符原样落到输入框里,不会消失,然后继续用英文输入。

但 TriFecta 目前的行为是:按下 Caps Lock 后,还没上屏的拼音直接被吞掉、凭空消失,需要重新输入,体验上不如原生输入法顺手。

根因

data/plum/default.yamlascii_composer.switch_key.Caps_Lock 配置为 clear

查看 librime 源码 src/rime/gear/ascii_composer.ccSwitchAsciiMode() 的实现:

} else if (style == kAsciiModeSwitchCommitCode) {
  ctx->ClearNonConfirmedComposition();
  ctx->Commit();
} else if (style == kAsciiModeSwitchClear || ...) {
  ctx->Clear();
}
  • clearctx->Clear():直接丢弃尚未上屏的组合,这就是已输入拼音消失的原因。
  • commit_codectx->Commit():把已输入的拼音原样提交为文本,与 macOS 原生输入法切换时的表现一致。

修改

data/plum/default.yaml

-    Caps_Lock: clear
+    Caps_Lock: commit_code

单行配置改动,不涉及代码逻辑,行为已对照 librime 源码确认。

ascii_composer.switch_key 的 Caps_Lock 由 clear 改为 commit_code。

librime 中 clear 对应 ctx->Clear(),会直接丢弃尚未上屏的拼音组合;
commit_code 对应 ctx->ClearNonConfirmedComposition(); ctx->Commit(),
会把已输入的拼音原样提交为文本。之前配置为 clear 导致中文输入到一半
按 Caps 切换英文时,已经打出的字符直接消失,而不是像 macOS 原生输入法
那样原样落到输入框里。改为 commit_code 后行为与原生一致。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant