KeyHandler // Add FW numeral input support.
This commit is contained in:
parent
74785b0df2
commit
29dc4b0268
|
@ -115,6 +115,9 @@ enum KeyCodeBlackListed: UInt16 {
|
||||||
/// 注意:第 95 號 Key Code(逗號)為 JIS 佈局特有的數字小鍵盤按鍵。
|
/// 注意:第 95 號 Key Code(逗號)為 JIS 佈局特有的數字小鍵盤按鍵。
|
||||||
let arrNumpadKeyCodes: [UInt16] = [65, 67, 69, 71, 75, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 95]
|
let arrNumpadKeyCodes: [UInt16] = [65, 67, 69, 71, 75, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 95]
|
||||||
|
|
||||||
|
/// 主鍵盤區域的數字鍵的 KeyCode。
|
||||||
|
let arrMainAreaNumKey: [UInt16] = [18, 19, 20, 21, 22, 23, 25, 26, 28, 29]
|
||||||
|
|
||||||
// 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: UInt16 {
|
enum CharCode: UInt16 {
|
||||||
case yajuusenpaiA = 114
|
case yajuusenpaiA = 114
|
||||||
|
@ -211,8 +214,15 @@ struct InputSignal: CustomStringConvertible {
|
||||||
return code.rawValue != KeyCode.kNone.rawValue
|
return code.rawValue != KeyCode.kNone.rawValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 摁 Alt+Shift+主鍵盤區域數字鍵 的話,根據不同的 macOS 鍵盤佈局種類,會出現不同的符號結果。
|
||||||
|
// 然而呢,KeyCode 卻是一致的。於是這裡直接準備一個換算表來用。
|
||||||
|
let mapMainAreaNumKey: [UInt16: String] = [
|
||||||
|
18: "1", 19: "2", 20: "3", 21: "4", 23: "5", 22: "6", 26: "7", 28: "8", 25: "9", 29: "0",
|
||||||
|
]
|
||||||
|
|
||||||
/// 單獨用 flags 來判定數字小鍵盤輸入的方法已經失效了,所以必須再增補用 KeyCode 判定的方法。
|
/// 單獨用 flags 來判定數字小鍵盤輸入的方法已經失效了,所以必須再增補用 KeyCode 判定的方法。
|
||||||
var isNumericPadKey: Bool { arrNumpadKeyCodes.contains(keyCode) }
|
var isNumericPadKey: Bool { arrNumpadKeyCodes.contains(keyCode) }
|
||||||
|
var isMainAreaNumKey: Bool { arrMainAreaNumKey.contains(keyCode) }
|
||||||
var isShiftHold: Bool { flags.contains([.shift]) }
|
var isShiftHold: Bool { flags.contains([.shift]) }
|
||||||
var isCommandHold: Bool { flags.contains([.command]) }
|
var isCommandHold: Bool { flags.contains([.command]) }
|
||||||
var isControlHold: Bool { flags.contains([.control]) }
|
var isControlHold: Bool { flags.contains([.control]) }
|
||||||
|
|
|
@ -423,6 +423,23 @@ extension KeyHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: 全形/半形阿拉伯數字輸入 (FW / HW Arabic Numbers Input)
|
||||||
|
|
||||||
|
if state is InputState.Empty {
|
||||||
|
if input.isMainAreaNumKey, input.isShiftHold, input.isOptionHold, !input.isControlHold, !input.isCommandHold {
|
||||||
|
// NOTE: 將來棄用 macOS 10.11 El Capitan 支援的時候,把這裡由 CFStringTransform 改為 StringTransform:
|
||||||
|
// https://developer.apple.com/documentation/foundation/stringtransform
|
||||||
|
guard let stringRAW = input.mapMainAreaNumKey[input.keyCode] else { return false }
|
||||||
|
let string = NSMutableString(string: stringRAW)
|
||||||
|
CFStringTransform(string, nil, kCFStringTransformFullwidthHalfwidth, true)
|
||||||
|
stateCallback(
|
||||||
|
InputState.Committing(textToCommit: mgrPrefs.halfWidthPunctuationEnabled ? stringRAW : string as String)
|
||||||
|
)
|
||||||
|
stateCallback(InputState.Empty())
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Punctuation
|
// MARK: Punctuation
|
||||||
|
|
||||||
/// 如果仍無匹配結果的話,先看一下:
|
/// 如果仍無匹配結果的話,先看一下:
|
||||||
|
|
Loading…
Reference in New Issue