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
|
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: 批次集中處理某些常用功能鍵
|
// MARK: 批次集中處理某些常用功能鍵
|
||||||
|
|
||||||
if let keyCodeType = KeyCode(rawValue: input.keyCode) {
|
if let keyCodeType = KeyCode(rawValue: input.keyCode) {
|
||||||
switch keyCodeType {
|
switch keyCodeType {
|
||||||
case .kEscape: return handleEsc()
|
case .kEscape: return handleEsc()
|
||||||
case .kTab: return rotateCandidate(reverseOrder: input.isShiftHold)
|
case .kTab, .kContextMenu: return revolveCandidate(reverseOrder: input.isShiftHold)
|
||||||
case .kUpArrow, .kDownArrow, .kLeftArrow, .kRightArrow:
|
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) {
|
handleArrowKey: switch (keyCodeType, delegate.isVerticalTyping) {
|
||||||
case (.kLeftArrow, false), (.kUpArrow, true): return handleBackward(input: input)
|
case (.kLeftArrow, false), (.kUpArrow, true): return handleBackward(input: input)
|
||||||
case (.kRightArrow, false), (.kDownArrow, true): return handleForward(input: input)
|
case (.kRightArrow, false), (.kDownArrow, true): return handleForward(input: input)
|
||||||
case (.kUpArrow, false), (.kLeftArrow, true):
|
case (.kUpArrow, false), (.kLeftArrow, true):
|
||||||
return rotation ? rotateCandidate(reverseOrder: true) : handleClockKey()
|
return rotation ? revolveCandidate(reverseOrder: true) : handleClockKey()
|
||||||
case (.kDownArrow, false), (.kRightArrow, true):
|
case (.kDownArrow, false), (.kRightArrow, true):
|
||||||
return rotation ? rotateCandidate(reverseOrder: false) : handleClockKey()
|
return rotation ? revolveCandidate(reverseOrder: false) : handleClockKey()
|
||||||
default: break handleArrowKey // 該情況應該不會發生,因為上面都有處理過。
|
default: break handleArrowKey // 該情況應該不會發生,因為上面都有處理過。
|
||||||
}
|
}
|
||||||
case .kHome: return handleHome()
|
case .kHome: return handleHome()
|
||||||
|
|
Loading…
Reference in New Issue