-
Notifications
You must be signed in to change notification settings - Fork 8
/
TISInputSource.swift
40 lines (32 loc) · 1.1 KB
/
TISInputSource.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import Cocoa
import InputMethodKit
extension TISInputSource {
private func getProperty(_ key: CFString) -> AnyObject? {
guard let cfType = TISGetInputSourceProperty(self, key) else { return nil }
return Unmanaged<AnyObject>.fromOpaque(cfType).takeUnretainedValue()
}
var id: String {
return getProperty(kTISPropertyInputSourceID) as! String
}
var category: String {
return getProperty(kTISPropertyInputSourceCategory) as! String
}
var isKeyboardInputSource: Bool {
return category == (kTISCategoryKeyboardInputSource as String)
}
var isSelectable: Bool {
return getProperty(kTISPropertyInputSourceIsSelectCapable) as! Bool
}
var isSelected: Bool {
return getProperty(kTISPropertyInputSourceIsSelected) as! Bool
}
var sourceLanguages: [String] {
return getProperty(kTISPropertyInputSourceLanguages) as! [String]
}
var isCJKV: Bool {
if let lang = sourceLanguages.first {
return ["ko", "ja", "vi"].contains(lang) || lang.hasPrefix("zh")
}
return false
}
}