diff --git a/Packages/vChewing_Shared/Sources/Shared/Protocols/InputSignalProtocol.swift b/Packages/vChewing_Shared/Sources/Shared/Protocols/InputSignalProtocol.swift index c77bf48b..1eada955 100644 --- a/Packages/vChewing_Shared/Sources/Shared/Protocols/InputSignalProtocol.swift +++ b/Packages/vChewing_Shared/Sources/Shared/Protocols/InputSignalProtocol.swift @@ -14,6 +14,7 @@ extension NSEvent: InputSignalProtocol {} // MARK: - InputSignalProtocol public protocol InputSignalProtocol { + var modifierFlags: NSEvent.ModifierFlags { get } var isTypingVertical: Bool { get } var text: String { get } var inputTextIgnoringModifiers: String? { get } diff --git a/Source/Modules/KeyHandler_HandleInput.swift b/Source/Modules/KeyHandler_HandleInput.swift index 1026d7ef..20c0428c 100644 --- a/Source/Modules/KeyHandler_HandleInput.swift +++ b/Source/Modules/KeyHandler_HandleInput.swift @@ -318,14 +318,12 @@ extension KeyHandler { // MARK: 全形/半形阿拉伯數字輸入 (FW / HW Arabic Numbers Input) if state.type == .ofEmpty { - if input.isMainAreaNumKey, input.isShiftHold, input.isOptionHold, !input.isControlHold, !input.isCommandHold { - // NOTE: 將來棄用 macOS 10.11 El Capitan 支援的時候,把這裡由 CFStringTransform 改為 StringTransform: - // https://developer.apple.com/documentation/foundation/stringtransform + if input.isMainAreaNumKey, input.modifierFlags == [.shift, .option] { guard let stringRAW = input.mainAreaNumKeyChar else { return false } - let string = NSMutableString(string: stringRAW) - CFStringTransform(string, nil, kCFStringTransformFullwidthHalfwidth, true) + let newStringFW = stringRAW.applyingTransform(.fullwidthToHalfwidth, reverse: true) ?? stringRAW + let newStringHW = stringRAW.applyingTransform(.fullwidthToHalfwidth, reverse: false) ?? stringRAW stateCallback( - IMEState.ofCommitting(textToCommit: prefs.halfWidthPunctuationEnabled ? stringRAW : string as String) + IMEState.ofCommitting(textToCommit: prefs.halfWidthPunctuationEnabled ? newStringHW : newStringFW) ) stateCallback(IMEState.ofEmpty()) return true