             }
     }
     
-    static func tweak() {
-        selectPrevious()
-        Timer.scheduledTimer(timeInterval: 0.3, target: self, selector: #selector(selectPrevious), userInfo: nil, repeats: false)
+    static func nonCJKSource() -> InputSource? {
+        return inputSources.first(where: { !$0.isCJK })
     }
 
-    @objc
     static func selectPrevious() {
         let src = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)!
 
         let down = CGEvent(keyboardEventSource: src, virtualKey: CGKeyCode(kVK_Space), keyDown: true)!
         let up = CGEvent(keyboardEventSource: src, virtualKey: CGKeyCode(kVK_Space), keyDown: false)!
 
-        let flag = CGEventFlags(rawValue: CGEventFlags.maskShift.rawValue | CGEventFlags.maskCommand.rawValue)
+        let flag = CGEventFlags(rawValue: CGEventFlags.maskAlternate.rawValue | CGEventFlags.maskCommand.rawValue)
         down.flags = flag;
         up.flags = flag;
 

        self.tisInputSource = tisInputSource
        id = InputSource.getProperty(tisInputSource, kTISPropertyInputSourceID)!
        name = InputSource.getProperty(tisInputSource, kTISPropertyLocalizedName)!

        let imageURL: URL? = InputSource.getProperty(tisInputSource, kTISPropertyIconImageURL)
        if imageURL != nil {

    let tisInputSource: TISInputSource
    let id: String
    let name: String
    let isCJK: Bool

    var icon: NSImage? = nil

