KeyParser // Nomenclatural regulations for keyCodes.
This commit is contained in:
parent
1c13ac8ca5
commit
62cd4e56e0
|
@ -28,33 +28,66 @@ import Cocoa
|
||||||
|
|
||||||
// Use KeyCodes as much as possible since its recognition won't be affected by macOS Base Keyboard Layouts.
|
// Use KeyCodes as much as possible since its recognition won't be affected by macOS Base Keyboard Layouts.
|
||||||
// KeyCodes: https://eastmanreference.com/complete-list-of-applescript-key-codes
|
// KeyCodes: https://eastmanreference.com/complete-list-of-applescript-key-codes
|
||||||
|
// Also: HIToolbox.framework/Versions/A/Headers/Events.h
|
||||||
@objc enum KeyCode: UInt16 {
|
@objc enum KeyCode: UInt16 {
|
||||||
case none = 0
|
case kNone = 0
|
||||||
case space = 49
|
case kCarriageReturn = 36 // Renamed from "kReturn" to avoid nomenclatural confusions.
|
||||||
case backSpace = 51
|
case kTab = 48
|
||||||
case esc = 53
|
case kSpace = 49
|
||||||
case tab = 48
|
case kSymbolMenuPhysicalKey = 50 // vChewing Specific
|
||||||
case enterLF = 76
|
case kBackSpace = 51 // Renamed from "kDelete" to avoid nomenclatural confusions.
|
||||||
case enterCR = 36
|
case kEscape = 53
|
||||||
case up = 126
|
case kCommand = 55
|
||||||
case down = 125
|
case kShift = 56
|
||||||
case left = 123
|
case kCapsLock = 57
|
||||||
case right = 124
|
case kOption = 58
|
||||||
case pageUp = 116
|
case kControl = 59
|
||||||
case pageDown = 121
|
case kRightShift = 60
|
||||||
case home = 115
|
case kRightOption = 61
|
||||||
case end = 119
|
case kRightControl = 62
|
||||||
case delete = 117
|
case kFunction = 63
|
||||||
case leftShift = 56
|
case kF17 = 64
|
||||||
case rightShift = 60
|
case kVolumeUp = 72
|
||||||
case capsLock = 57
|
case kVolumeDown = 73
|
||||||
case symbolMenuPhysicalKey = 50
|
case kMute = 74
|
||||||
|
case kLineFeed = 76 // Another keyCode to identify the Enter Key.
|
||||||
|
case kF18 = 79
|
||||||
|
case kF19 = 80
|
||||||
|
case kF20 = 90
|
||||||
|
case kF5 = 96
|
||||||
|
case kF6 = 97
|
||||||
|
case kF7 = 98
|
||||||
|
case kF3 = 99
|
||||||
|
case kF8 = 100
|
||||||
|
case kF9 = 101
|
||||||
|
case kF11 = 103
|
||||||
|
case kF13 = 105
|
||||||
|
case kF16 = 106
|
||||||
|
case kF14 = 107
|
||||||
|
case kF10 = 109
|
||||||
|
case kF12 = 111
|
||||||
|
case kF15 = 113
|
||||||
|
case kHelp = 114
|
||||||
|
case kHome = 115
|
||||||
|
case kPageUp = 116
|
||||||
|
case kWindowDelete = 117 // Renamed from "kForwardDelete" to avoid nomenclatural confusions.
|
||||||
|
case kF4 = 118
|
||||||
|
case kEnd = 119
|
||||||
|
case kF2 = 120
|
||||||
|
case kPageDown = 121
|
||||||
|
case kF1 = 122
|
||||||
|
case kLeftArrow = 123
|
||||||
|
case kRightArrow = 124
|
||||||
|
case kDownArrow = 125
|
||||||
|
case kUpArrow = 126
|
||||||
}
|
}
|
||||||
|
|
||||||
// CharCodes: https://theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
|
// CharCodes: https://theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
|
||||||
enum CharCode: UInt /*16*/ {
|
enum CharCode: UInt /*16*/ {
|
||||||
case yajuusenpai = 1_145_141_919_810_893
|
case yajuusenpai = 114_514_19_19_810_893
|
||||||
// - CharCode is not reliable at all. KeyCode is the most accurate. KeyCode doesn't give a phuque about the character sent through macOS keyboard layouts but only focuses on which physical key is pressed.
|
// CharCode is not reliable at all. KeyCode is the most appropriate choice due to its accuracy.
|
||||||
|
// KeyCode doesn't give a phuque about the character sent through macOS keyboard layouts ...
|
||||||
|
// ... but only focuses on which physical key is pressed.
|
||||||
}
|
}
|
||||||
|
|
||||||
class keyParser: NSObject {
|
class keyParser: NSObject {
|
||||||
|
@ -82,19 +115,20 @@ class keyParser: NSObject {
|
||||||
inputTextIgnoringModifiers ?? inputText)
|
inputTextIgnoringModifiers ?? inputText)
|
||||||
self.inputText = inputText
|
self.inputText = inputText
|
||||||
self.inputTextIgnoringModifiers = inputTextIgnoringModifiers
|
self.inputTextIgnoringModifiers = inputTextIgnoringModifiers
|
||||||
self.keyCode = keyCode
|
|
||||||
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
|
|
||||||
self.flags = flags
|
self.flags = flags
|
||||||
self.isFlagChanged = false
|
self.isFlagChanged = false
|
||||||
useVerticalMode = isVerticalMode
|
useVerticalMode = isVerticalMode
|
||||||
|
self.keyCode = keyCode
|
||||||
|
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
|
||||||
emacsKey = EmacsKeyHelper.detect(
|
emacsKey = EmacsKeyHelper.detect(
|
||||||
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags)
|
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags)
|
||||||
cursorForwardKey = useVerticalMode ? .down : .right
|
// Define Arrow Keys
|
||||||
cursorBackwardKey = useVerticalMode ? .up : .left
|
cursorForwardKey = useVerticalMode ? .kDownArrow : .kRightArrow
|
||||||
extraChooseCandidateKey = useVerticalMode ? .left : .down
|
cursorBackwardKey = useVerticalMode ? .kUpArrow : .kLeftArrow
|
||||||
extraChooseCandidateKeyReverse = useVerticalMode ? .right : .up
|
extraChooseCandidateKey = useVerticalMode ? .kLeftArrow : .kDownArrow
|
||||||
absorbedArrowKey = useVerticalMode ? .right : .up
|
extraChooseCandidateKeyReverse = useVerticalMode ? .kRightArrow : .kUpArrow
|
||||||
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .none
|
absorbedArrowKey = useVerticalMode ? .kRightArrow : .kUpArrow
|
||||||
|
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .kNone
|
||||||
super.init()
|
super.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,13 +149,14 @@ class keyParser: NSObject {
|
||||||
}()
|
}()
|
||||||
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
|
self.charCode = AppleKeyboardConverter.cnvApple2ABC(charCode)
|
||||||
emacsKey = EmacsKeyHelper.detect(
|
emacsKey = EmacsKeyHelper.detect(
|
||||||
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: event.modifierFlags)
|
charCode: AppleKeyboardConverter.cnvApple2ABC(charCode), flags: flags)
|
||||||
cursorForwardKey = useVerticalMode ? .down : .right
|
// Define Arrow Keys in the same way above.
|
||||||
cursorBackwardKey = useVerticalMode ? .up : .left
|
cursorForwardKey = useVerticalMode ? .kDownArrow : .kRightArrow
|
||||||
extraChooseCandidateKey = useVerticalMode ? .left : .down
|
cursorBackwardKey = useVerticalMode ? .kUpArrow : .kLeftArrow
|
||||||
extraChooseCandidateKeyReverse = useVerticalMode ? .right : .up
|
extraChooseCandidateKey = useVerticalMode ? .kLeftArrow : .kDownArrow
|
||||||
absorbedArrowKey = useVerticalMode ? .right : .up
|
extraChooseCandidateKeyReverse = useVerticalMode ? .kRightArrow : .kUpArrow
|
||||||
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .none
|
absorbedArrowKey = useVerticalMode ? .kRightArrow : .kUpArrow
|
||||||
|
verticalModeOnlyChooseCandidateKey = useVerticalMode ? absorbedArrowKey : .kNone
|
||||||
super.init()
|
super.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,64 +209,64 @@ class keyParser: NSObject {
|
||||||
guard let code = KeyCode(rawValue: keyCode) else {
|
guard let code = KeyCode(rawValue: keyCode) else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return code.rawValue != KeyCode.none.rawValue
|
return code.rawValue != KeyCode.kNone.rawValue
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isTab: Bool {
|
@objc var isTab: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.tab
|
KeyCode(rawValue: keyCode) == KeyCode.kTab
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isEnter: Bool {
|
@objc var isEnter: Bool {
|
||||||
(KeyCode(rawValue: keyCode) == KeyCode.enterCR)
|
(KeyCode(rawValue: keyCode) == KeyCode.kCarriageReturn)
|
||||||
|| (KeyCode(rawValue: keyCode) == KeyCode.enterLF)
|
|| (KeyCode(rawValue: keyCode) == KeyCode.kLineFeed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isUp: Bool {
|
@objc var isUp: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.up
|
KeyCode(rawValue: keyCode) == KeyCode.kUpArrow
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isDown: Bool {
|
@objc var isDown: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.down
|
KeyCode(rawValue: keyCode) == KeyCode.kDownArrow
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isLeft: Bool {
|
@objc var isLeft: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.left
|
KeyCode(rawValue: keyCode) == KeyCode.kLeftArrow
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isRight: Bool {
|
@objc var isRight: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.right
|
KeyCode(rawValue: keyCode) == KeyCode.kRightArrow
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isPageUp: Bool {
|
@objc var isPageUp: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.pageUp
|
KeyCode(rawValue: keyCode) == KeyCode.kPageUp
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isPageDown: Bool {
|
@objc var isPageDown: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.pageDown
|
KeyCode(rawValue: keyCode) == KeyCode.kPageDown
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isSpace: Bool {
|
@objc var isSpace: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.space
|
KeyCode(rawValue: keyCode) == KeyCode.kSpace
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isBackSpace: Bool {
|
@objc var isBackSpace: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.backSpace
|
KeyCode(rawValue: keyCode) == KeyCode.kBackSpace
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isESC: Bool {
|
@objc var isESC: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.esc
|
KeyCode(rawValue: keyCode) == KeyCode.kEscape
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isHome: Bool {
|
@objc var isHome: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.home
|
KeyCode(rawValue: keyCode) == KeyCode.kHome
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isEnd: Bool {
|
@objc var isEnd: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.end
|
KeyCode(rawValue: keyCode) == KeyCode.kEnd
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isDelete: Bool {
|
@objc var isDelete: Bool {
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.delete
|
KeyCode(rawValue: keyCode) == KeyCode.kWindowDelete
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc var isCursorBackward: Bool {
|
@objc var isCursorBackward: Bool {
|
||||||
|
@ -266,7 +301,7 @@ class keyParser: NSObject {
|
||||||
@objc var isSymbolMenuPhysicalKey: Bool {
|
@objc var isSymbolMenuPhysicalKey: Bool {
|
||||||
// 這裡必須用 KeyCode,這樣才不會受隨 macOS 版本更動的 Apple 動態注音鍵盤排列內容的影響。
|
// 這裡必須用 KeyCode,這樣才不會受隨 macOS 版本更動的 Apple 動態注音鍵盤排列內容的影響。
|
||||||
// 只是必須得與 ![input isShift] 搭配使用才可以(也就是僅判定 Shift 沒被摁下的情形)。
|
// 只是必須得與 ![input isShift] 搭配使用才可以(也就是僅判定 Shift 沒被摁下的情形)。
|
||||||
KeyCode(rawValue: keyCode) == KeyCode.symbolMenuPhysicalKey
|
KeyCode(rawValue: keyCode) == KeyCode.kSymbolMenuPhysicalKey
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue