diff --git a/source/caret_notater.h b/source/caret_notater.h
new file mode 100644
index 0000000..2589a16
--- /dev/null
+++ b/source/caret_notater.h
@@ -0,0 +1,29 @@
+#ifndef CARET_NOTATER
+#define CARET_NOTATER
+
+static inline
+int is_caret(char c) {
+    return (0 <= c && c <= 31);
+}
+
+static inline
+char to_caret_char(char c) {
+    return c + '@';
+}
+
+char * string_to_caret_notation(const char * input, int size, char * output) {
+    int output_empty_end = 0;
+    for (int i = 0; i < size; i++) {
+        if (is_caret(input[i])) {
+            output[output_empty_end++] = '^';
+            output[output_empty_end++] = to_caret_char(input[i]);
+        } else {
+            output[output_empty_end++] = input[i];
+        }
+    }
+    output[output_empty_end] = '\0';
+
+    return output;
+}
+
+#endif
diff --git a/source/tui.c b/source/tui.c
index cc13dc3..1c8ba59 100644
--- a/source/tui.c
+++ b/source/tui.c
@@ -4,6 +4,8 @@
 #include <ncurses.h>
 #include <readline/readline.h>
 
+#include "caret_notater.h"
+
 extern bool do_execute;
 
 size_t entry_lines;
@@ -91,6 +93,8 @@ void tui_append_back(const entry_t entry) {
     const int TIME_SIZE = 20;
     char time_buffer[TIME_SIZE];
     strftime(time_buffer, TIME_SIZE, "%Y-%m-%d %H:%M:%S", tm_info);
+    const size_t entry_len = strlen(entry.command);
+    char caret_notation_buffer[entry_len*2];
 
     if (entry_line_index == selection_relative) {
         wattron(entry_window, A_REVERSE);
@@ -99,7 +103,10 @@ void tui_append_back(const entry_t entry) {
                     "%s  %.*s",
                         time_buffer,
                         COLS-2-(TIME_SIZE-1)-2, // XXX: this is horrible
-                        entry.command
+                        string_to_caret_notation(entry.command,
+                                                    entry_len,
+                                                    caret_notation_buffer
+                                                )
                 );
     if (entry_line_index == selection_relative) {
         wattroff(entry_window, A_REVERSE);