mod terminal;

use std::io::Write;
use self::terminal::{Terminal, Event, Key};

pub struct Interface {
    choices: Vec<String>,
    terminal: Terminal
}

impl Interface {
    /// Creates a new Interface with the provided input choices.
    pub fn with_choices(choices: Vec<String>) -> Interface {
        let mut term = Terminal::from("/dev/tty").unwrap();
        term.set_raw_mode().unwrap();

        Interface {
            choices: choices,
            terminal: term
        }
    }

    // Starts the interface
    pub fn run(&mut self) {
        let ref mut term = self.terminal;

        write!(term, "{} choices to search through\r\n", self.choices.len());

        for event in term.events().unwrap() {
            match event {
                Ok(Event::Key(Key::Ctrl('c'))) => {
                    return;
                },

                Ok(event) => write!(term, "{:?}\r\n", event),
                Err(err) => write!(term, "{:?}\r\n", err),
            };
        }
    }
}

mod terminal;

pub struct Interface {
    choices: Vec<String>
}

impl Interface {
    /// Creates a new Interface with the provided input choices.
    pub fn with_choices(choices: Vec<String>) -> Interface {
        Interface {
            choices: choices
        }
    }

    // Starts the interface
    pub fn run(&mut self) {
        println!("{} choices to search through", self.choices.len());
    }
}

--- 
+++ 
@@ -1,19 +1,40 @@
 mod terminal;
 
+use std::io::Write;
+use self::terminal::{Terminal, Event, Key};
+
 pub struct Interface {
-    choices: Vec<String>
+    choices: Vec<String>,
+    terminal: Terminal
 }
 
 impl Interface {
     /// Creates a new Interface with the provided input choices.
     pub fn with_choices(choices: Vec<String>) -> Interface {
+        let mut term = Terminal::from("/dev/tty").unwrap();
+        term.set_raw_mode().unwrap();
+
         Interface {
-            choices: choices
+            choices: choices,
+            terminal: term
         }
     }
 
     // Starts the interface
     pub fn run(&mut self) {
-        println!("{} choices to search through", self.choices.len());
+        let ref mut term = self.terminal;
+
+        write!(term, "{} choices to search through\r\n", self.choices.len());
+
+        for event in term.events().unwrap() {
+            match event {
+                Ok(Event::Key(Key::Ctrl('c'))) => {
+                    return;
+                },
+
+                Ok(event) => write!(term, "{:?}\r\n", event),
+                Err(err) => write!(term, "{:?}\r\n", err),
+            };
+        }
     }
 }
Add terminal to Interface, use for printing, events
