diff --git a/lib/text_bringer/echo_area.rb b/lib/text_bringer/echo_area.rb
index <HASH>..<HASH> 100644
--- a/lib/text_bringer/echo_area.rb
+++ b/lib/text_bringer/echo_area.rb
@@ -43,7 +43,7 @@ module TextBringer
             if c == "\n"
               break
             end
-            @window << c
+            @window << escape(c)
             @buffer.forward_char
           end
           if @buffer.point_at_mark?(saved)
diff --git a/lib/text_bringer/window.rb b/lib/text_bringer/window.rb
index <HASH>..<HASH> 100644
--- a/lib/text_bringer/window.rb
+++ b/lib/text_bringer/window.rb
@@ -36,7 +36,7 @@ module TextBringer
             @window.clrtoeol
             break if @window.cury == @window.maxy - 1
           end
-          @window << c
+          @window << escape(c)
           break if @window.cury == @window.maxy - 1 &&
             @window.curx == @window.maxx - 1
           @buffer.forward_char
@@ -80,6 +80,12 @@ module TextBringer
       end
     end
 
+    def escape(s)
+      s.gsub(/[\0-\b\v-\x1f]/) { |c|
+        "^" + (c.ord ^ 0x40).chr
+      }
+    end
+
     def beginning_of_line
       e = @buffer.point
       @buffer.beginning_of_line
Display control characters in caret notation.