         let ranges = currentEditorView.rangesOfVisible(char)
         let rects = ranges.map(currentEditorView.rectFromRange)
         
-        labelsController!.initialize(Array(zip(ranges, rects)))
+        // TODO: Temporary
+        if ranges.count >= 26 * 2 {
+            removeTextField()
+            currentEditorView.window?.makeFirstResponder(currentEditorView)
+            return
+        }
+        
+        state = .ShowCandidates
+        labelsController.initialize(Array(zip(ranges, rects)))
+    }
+
+    private func jump(candidateInfo: CandidateInfo) {
+        currentEditorView.setSelectedRange(candidateInfo.range)
+        currentEditorView.window?.makeFirstResponder(currentEditorView)
     }
     
     // MARK:- SingleCharTextFieldDelegate
     
     func didRecieveChar(textField: SingleCharTextField, char: Character) {
-        hideTextField()
-        showResults(char)
+        switch state {
+        case .InputChar:
+            hideTextField()
+            showResults(char)
+        case .ShowCandidates:
+            if let result = labelsController.next(char) {
+                removeTextField()
+                state = .Inactive
+                jump(result)
+            }
+        default:
+            break
+        }
     }
     
 }
    }
    
    private func hideTextField() {
        inputTextField.removeFromSuperview()
    }
    

        let textFieldRect = NSRect(origin: currentEditorView.cursorPosition, size: textFieldSize)
        
        inputTextField.frame = textFieldRect
        inputTextField.alphaValue = 1
        
        currentEditorView.addSubview(inputTextField)
        
