diff --git a/Source/Modules/InputHandler_HandleInput.swift b/Source/Modules/InputHandler_HandleInput.swift index bcc17c30..04ad530f 100644 --- a/Source/Modules/InputHandler_HandleInput.swift +++ b/Source/Modules/InputHandler_HandleInput.swift @@ -119,21 +119,37 @@ extension InputHandler { return true } + // MARK: Ctrl+Command+[] 輪替候選字 + + // Shift+Command+[] 被 Chrome 系瀏覽器佔用,所以改用 Ctrl。 + revolveCandidateWithBrackets: if input.modifierFlags == [.control, .command] { + if state.type != .ofInputting { break revolveCandidateWithBrackets } + // 此處 JIS 鍵盤判定無法用於螢幕鍵盤。所以,螢幕鍵盤的場合,系統會依照 US 鍵盤的判定方案。 + let isJIS: Bool = KBGetLayoutType(Int16(LMGetKbdType())) == kKeyboardJIS + switch (input.keyCode, isJIS) { + case (30, true): return revolveCandidate(reverseOrder: true) + case (42, true): return revolveCandidate(reverseOrder: false) + case (33, false): return revolveCandidate(reverseOrder: true) + case (30, false): return revolveCandidate(reverseOrder: false) + default: break + } + } + // MARK: 批次集中處理某些常用功能鍵 if let keyCodeType = KeyCode(rawValue: input.keyCode) { switch keyCodeType { case .kEscape: return handleEsc() - case .kTab: return rotateCandidate(reverseOrder: input.isShiftHold) + case .kTab, .kContextMenu: return revolveCandidate(reverseOrder: input.isShiftHold) case .kUpArrow, .kDownArrow, .kLeftArrow, .kRightArrow: - let rotation: Bool = input.isOptionHold && state.type == .ofInputting + let rotation: Bool = (input.isOptionHold || input.isShiftHold) && state.type == .ofInputting handleArrowKey: switch (keyCodeType, delegate.isVerticalTyping) { case (.kLeftArrow, false), (.kUpArrow, true): return handleBackward(input: input) case (.kRightArrow, false), (.kDownArrow, true): return handleForward(input: input) case (.kUpArrow, false), (.kLeftArrow, true): - return rotation ? rotateCandidate(reverseOrder: true) : handleClockKey() + return rotation ? revolveCandidate(reverseOrder: true) : handleClockKey() case (.kDownArrow, false), (.kRightArrow, true): - return rotation ? rotateCandidate(reverseOrder: false) : handleClockKey() + return rotation ? revolveCandidate(reverseOrder: false) : handleClockKey() default: break handleArrowKey // 該情況應該不會發生,因為上面都有處理過。 } case .kHome: return handleHome()