NSEvent // Make .text() safer.
This commit is contained in:
parent
d92c5d3669
commit
af715ad8d8
|
@ -23,10 +23,7 @@ public extension NSEvent {
|
|||
isARepeat: Bool? = nil,
|
||||
keyCode: UInt16? = nil
|
||||
) -> NSEvent? {
|
||||
let oldChars: String = {
|
||||
if self.type == .flagsChanged { return "" }
|
||||
return self.characters ?? ""
|
||||
}()
|
||||
let oldChars: String = text
|
||||
return NSEvent.keyEvent(
|
||||
with: type ?? self.type,
|
||||
location: location ?? locationInWindow,
|
||||
|
@ -78,7 +75,10 @@ public extension NSEvent {
|
|||
|
||||
public extension NSEvent {
|
||||
var isTypingVertical: Bool { charactersIgnoringModifiers == "Vertical" }
|
||||
var text: String { characters ?? "" }
|
||||
/// NSEvent.characters 的類型安全版。
|
||||
/// - Remark: 注意:必須針對 event.type == .flagsChanged 提前返回結果,
|
||||
/// 否則,每次處理這種判斷時都會因為讀取 event.characters? 而觸發 NSInternalInconsistencyException。
|
||||
var text: String { isFlagChanged ? "" : characters ?? "" }
|
||||
var inputTextIgnoringModifiers: String? {
|
||||
guard charactersIgnoringModifiers != nil else { return nil }
|
||||
return charactersIgnoringModifiers ?? characters ?? ""
|
||||
|
@ -313,7 +313,7 @@ public enum EmacsKey {
|
|||
public extension NSEvent {
|
||||
func layoutTranslated(to layout: LatinKeyboardMappings = .qwerty) -> NSEvent {
|
||||
let mapTable = layout.mapTable
|
||||
if type == .flagsChanged { return self }
|
||||
if isFlagChanged { return self }
|
||||
guard modifierFlags == .shift || modifierFlags.isEmpty else { return self }
|
||||
if !mapTable.keys.contains(keyCode) { return self }
|
||||
guard let dataTuplet = mapTable[keyCode] else { return self }
|
||||
|
|
|
@ -89,7 +89,7 @@ public extension SessionCtl {
|
|||
/// 這裡不判斷 flags 的話,用方向鍵前後定位光標之後,再次試圖觸發組字區時、反而會在首次按鍵時失敗。
|
||||
/// 同時注意:必須針對 event.type == .flagsChanged 提前返回結果,
|
||||
/// 否則,每次處理這種判斷時都會因為讀取 event.characters? 而觸發 NSInternalInconsistencyException。
|
||||
if event.type == .flagsChanged { return true }
|
||||
if event.isFlagChanged { return true }
|
||||
|
||||
/// 沒有文字輸入客體的話,就不要再往下處理了。
|
||||
guard let inputHandler = inputHandler, client() != nil else { return false }
|
||||
|
|
Loading…
Reference in New Issue