                    ::out-channel
                    ::options]))
 
-(defn process-input-text [terminal text]
-  (cond
-    (.startsWith text "\n")
-    (do 
-      
-      )
-    ))
+(declare process-input-text)
 
 (defprotocol ITerminal
   (init [this])
   (current-position [this])
   (move-to! [this col row])
   (put-char! [this char])
+  (delete-char! [this])
   (up-char! [this])
   (right-char! [this])
   (down-char! [this])
   (left-char! [this])
+  (beginning-of-line! [this])
+  (end-of-line! [this])
+  (new-line! [this])
+  (delete-backward-char! [this])
   (in> [this input options])
   (in>> [this input options])
   (refresh! [this])

          (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)))


  (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
