   (out< [this options])
 
   (out<< [this callback options]))
+
+(defn process-input-text [terminal text]
+  (loop [text text]
+    (cond
+      (<= (count text) 0)
+      nil
+      (.startsWith text "\n")
+      (do 
+        (new-line! terminal)
+        (recur (-> text rest rest)))
+      (.startsWith text "\b")
+      (do
+        (delete-backward-char! terminal)
+        (recur (-> text rest rest)))
+      :else
+      (do
+        (put-char! terminal (first text))
+        (right-char! terminal))
+      )))
 
 (defn terminal
   [screen

          (case type
            :key-press
            (>! in-channel key)
            nil)
          )
        (recur)))
    
    (go-loop []
      (let [text (<! in-channel)]
        (put-char! this text)
        (right-char! this)
        (refresh! this))
      (recur)))


  (put-char! [this char]
    (let [[i j] (current-position this)]
      (reset! screen (screen/put-char @screen char i j {}))))

  (delete-char! [this]
    (let [[i j] (current-position this)]
      (reset! screen (screen/clear-block @screen i j))))

  (up-char! [this]
    (let [[i j] (current-position this)]
