message: Handle Ctrl+C with Prompt
diff: @@ -16,7 +16,7 @@ pub use self::flow::FlowLogic;
  use fnv::FnvHashMap;
  use std::fs::File;
  -use std::io::{self, Read, Write};
  +use std::io::{self, ErrorKind, Read, Write};
  use std::env;
  use std::mem;
  use std::process;
  @@ -72,7 +72,6 @@ impl<'a> Shell<'a> {
  }
  }
  fn readln(&mut self) -> Option<String> {
  - let prompt = self.prompt();
  let funcs = &self.functions;
  let vars = &self.variables;
  let builtins = self.builtins;
  @@ -84,6 +83,8 @@ impl<'a> Shell<'a> {
  // Collect each result into a vector to avoid borrowing issues.
  .collect::<Vec<SmallString>>();
  + loop {
  + let prompt = self.prompt();
  let line = self.context.read_line(prompt, &mut move |Event { editor, kind }| {
  if let EventKind::BeforeComplete = kind {
  let (words, pos) = editor.get_words_and_cursor_position();
  @@ -153,12 +154,14 @@ impl<'a> Shell<'a> {
  });
  match line {
  - Ok(line) => Some(line),
  + Ok(line) => return Some(line),
  + Err(ref err) if err.kind() == ErrorKind::Interrupted => continue,
  Err(err) => {
  let stderr = io::stderr();
  let mut stderr = stderr.lock();
  let _ = writeln!(stderr, "ion: liner: {}", err);
  - None
  + return None
  + }
  }
  }
  }
  