- 设置「输入」页在智能标点上方新增「顿号自定义」:\ 和 / 各一个勾,至少保留一个, 未勾选的键按原样输出。新装默认两个都开;升级用户的配置里没有 / 这一项, 模板合并时补成关,保持原来只有 \ 出顿号。 - 新增 worker 消息 EnumerationCommaKeysChanged(38),载荷见 engine/contracts/enumeration_comma.h;旧 DLL 忽略它,保持只用 \。 - 选候选时按 / 改为按配置上屏「候选 + 、」;未作顿号的 \ 或 / 跟在候选后原样上屏。 小键盘 / 与小键盘 . 一样始终输出原字符。 - 「翻页方式」从「输入」页移到「快捷键」页。 - AtLeastOneChecks 从辅助码页移到公共绑定,两页共用。
31 lines
1.3 KiB
C++
31 lines
1.3 KiB
C++
#pragma once
|
||
|
||
// 中文标点状态下哪些键输出顿号「、」:反斜杠 \ 和斜杠 /,设置里各一个勾、至少留一个。没勾的键不再是
|
||
// 中文标点,按原样输出。Server 把这组勾通过 EnumerationCommaKeysChanged 发给 TSF,TSF 据此决定吃不吃键、
|
||
// 换成什么字。
|
||
namespace FanyImeEnumerationComma
|
||
{
|
||
inline constexpr unsigned kBackslash = 1;
|
||
inline constexpr unsigned kSlash = 2;
|
||
// 旧 Server 不发这个消息,TSF 保持历史行为:只有 \ 出顿号。
|
||
inline constexpr unsigned kLegacyKeys = kBackslash;
|
||
|
||
// EnumerationCommaKeysChanged 的载荷(一个字符):'1' 只有 \,'2' 只有 /,'3' 两个都是。两个都没勾不是
|
||
// 合法配置,按 '1' 发,和 TSF 的历史行为一致。
|
||
inline constexpr wchar_t PayloadFor(bool backslash, bool slash)
|
||
{
|
||
const unsigned keys = (backslash ? kBackslash : 0u) | (slash ? kSlash : 0u);
|
||
return static_cast<wchar_t>(L'0' + (keys == 0 ? kLegacyKeys : keys));
|
||
}
|
||
|
||
inline constexpr bool IsValidPayload(wchar_t payload)
|
||
{
|
||
return payload == L'1' || payload == L'2' || payload == L'3';
|
||
}
|
||
|
||
inline constexpr unsigned KeysFromPayload(wchar_t payload)
|
||
{
|
||
return IsValidPayload(payload) ? static_cast<unsigned>(payload - L'0') : kLegacyKeys;
|
||
}
|
||
} // namespace FanyImeEnumerationComma
|