InputHandler // Add new hotkeys for revolving candidates.
* InputHandler // Add Shift+↑↓ candidate revolving support. * InputHandler // Add (Shift+)kContextMenu candidate revolving support. * InputHandler // Add Ctrl+Command+[] candidate revolving support.
This commit is contained in:
parent
9ce3c2a9e4
commit
84c2232f8c
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue