Files
Lu Fan(SonnyCalcr) 75d8c710a9 feat(server,windows,engine): 新增顿号自定义,翻页方式移到快捷键页 (#1071)
- 设置「输入」页在智能标点上方新增「顿号自定义」:\ 和 / 各一个勾,至少保留一个,
  未勾选的键按原样输出。新装默认两个都开;升级用户的配置里没有 / 这一项,
  模板合并时补成关,保持原来只有 \ 出顿号。
- 新增 worker 消息 EnumerationCommaKeysChanged(38),载荷见
  engine/contracts/enumeration_comma.h;旧 DLL 忽略它,保持只用 \。
- 选候选时按 / 改为按配置上屏「候选 + 、」;未作顿号的 \ 或 / 跟在候选后原样上屏。
  小键盘 / 与小键盘 . 一样始终输出原字符。
- 「翻页方式」从「输入」页移到「快捷键」页。
- AtLeastOneChecks 从辅助码页移到公共绑定,两页共用。
2026-10-18 23:49:41 +08:00

31 lines
1.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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