NSEvent // Omit .capslock from .keyModifierFlags().

This commit is contained in:
ShikiSuen 2023-10-28 20:36:28 +08:00
parent 64837d699a
commit dca874dc2a
1 changed files with 12 additions and 8 deletions

View File

@ -94,15 +94,19 @@ public extension NSEvent {
return result <= UInt16.max ? UInt16(result) : UInt16.max return result <= UInt16.max ? UInt16(result) : UInt16.max
} }
var keyModifierFlags: ModifierFlags { modifierFlags.intersection(.deviceIndependentFlagsMask) } var keyModifierFlags: ModifierFlags {
modifierFlags.intersection(.deviceIndependentFlagsMask).subtracting(.capsLock)
}
static var keyModifierFlags: ModifierFlags { Self.modifierFlags.intersection(.deviceIndependentFlagsMask) } static var keyModifierFlags: ModifierFlags {
Self.modifierFlags.intersection(.deviceIndependentFlagsMask).subtracting(.capsLock)
}
var isFlagChanged: Bool { type == .flagsChanged } var isFlagChanged: Bool { type == .flagsChanged }
var isEmacsKey: Bool { var isEmacsKey: Bool {
// isControlHold // isControlHold
[6, 2, 1, 5, 4, 22].contains(charCode) && modifierFlags == .control [6, 2, 1, 5, 4, 22].contains(charCode) && keyModifierFlags == .control
} }
// Alt+Shift+ macOS // Alt+Shift+ macOS
@ -136,7 +140,7 @@ public extension NSEvent {
var beganWithLetter: Bool { text.first?.isLetter ?? false } var beganWithLetter: Bool { text.first?.isLetter ?? false }
var isOptionHold: Bool { keyModifierFlags.contains(.option) } var isOptionHold: Bool { keyModifierFlags.contains(.option) }
var isOptionHotKey: Bool { keyModifierFlags.contains(.option) && text.first?.isLetter ?? false } var isOptionHotKey: Bool { keyModifierFlags.contains(.option) && text.first?.isLetter ?? false }
var isCapsLockOn: Bool { keyModifierFlags.contains(.capsLock) } var isCapsLockOn: Bool { modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock) }
var isFunctionKeyHold: Bool { keyModifierFlags.contains(.function) } var isFunctionKeyHold: Bool { keyModifierFlags.contains(.function) }
var isNonLaptopFunctionKey: Bool { keyModifierFlags.contains(.numericPad) && !isNumericPadKey } var isNonLaptopFunctionKey: Bool { keyModifierFlags.contains(.numericPad) && !isNumericPadKey }
var isEnter: Bool { [KeyCode.kCarriageReturn, KeyCode.kLineFeed].contains(KeyCode(rawValue: keyCode)) } var isEnter: Bool { [KeyCode.kCarriageReturn, KeyCode.kLineFeed].contains(KeyCode(rawValue: keyCode)) }
@ -182,13 +186,13 @@ public extension NSEvent {
// flags == .shift Shift // flags == .shift Shift
var isUpperCaseASCIILetterKey: Bool { var isUpperCaseASCIILetterKey: Bool {
(65 ... 90).contains(charCode) && modifierFlags == .shift (65 ... 90).contains(charCode) && keyModifierFlags == .shift
} }
// .command 簿 // .command 簿
var isSingleCommandBasedLetterHotKey: Bool { var isSingleCommandBasedLetterHotKey: Bool {
((65 ... 90).contains(charCode) && modifierFlags == [.shift, .command]) ((65 ... 90).contains(charCode) && keyModifierFlags == [.shift, .command])
|| ((97 ... 122).contains(charCode) && modifierFlags == .command) || ((97 ... 122).contains(charCode) && keyModifierFlags == .command)
} }
// KeyCode macOS Apple // KeyCode macOS Apple
@ -333,7 +337,7 @@ public extension NSEvent {
func layoutTranslated(to layout: LatinKeyboardMappings = .qwerty) -> NSEvent { func layoutTranslated(to layout: LatinKeyboardMappings = .qwerty) -> NSEvent {
let mapTable = layout.mapTable let mapTable = layout.mapTable
if isFlagChanged { return self } if isFlagChanged { return self }
guard modifierFlags == .shift || modifierFlags.isEmpty else { return self } guard keyModifierFlags == .shift || keyModifierFlags.isEmpty else { return self }
if !mapTable.keys.contains(keyCode) { return self } if !mapTable.keys.contains(keyCode) { return self }
guard let dataTuplet = mapTable[keyCode] else { return self } guard let dataTuplet = mapTable[keyCode] else { return self }
let result: NSEvent? = reinitiate( let result: NSEvent? = reinitiate(