diff --git a/src/main.rs b/src/main.rs
index d7f3ae4a130420612747a566f1c34e5af26c9142..273d5a330564f49a6f0b8a3281c313ddee0b2dc1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -553,6 +553,27 @@ pub fn set_var(variables: &mut Vec<Variable>, name: &str, value: &str) {
     }
 }
 
+fn print_prompt(modes: &Vec<Mode>) {
+        for mode in modes.iter().rev() {
+            if mode.value {
+                print!("+ ");
+            } else {
+                print!("- ");
+            }
+        }
+
+        let cwd = match env::current_dir() {
+            Ok(path) => match path.to_str() {
+                Some(path_str) => path_str.to_string(),
+                None => "?".to_string()
+            },
+            Err(_) => "?".to_string()
+        };
+
+        print!("ion:{}# ", cwd);
+        stdout().flush();
+}
+
 fn real_main() {
     let commands = Command::vec();
     let mut variables: Vec<Variable> = vec![];
@@ -572,24 +593,8 @@ fn real_main() {
     }
 
     loop {
-        for mode in modes.iter().rev() {
-            if mode.value {
-                print!("+ ");
-            } else {
-                print!("- ");
-            }
-        }
-
-        let cwd = match env::current_dir() {
-            Ok(path) => match path.to_str() {
-                Some(path_str) => path_str.to_string(),
-                None => "?".to_string()
-            },
-            Err(_) => "?".to_string()
-        };
 
-        print!("ion:{}# ", cwd);
-        stdout().flush();
+        print_prompt(&modes);
 
         if let Some(command_original) = readln() {
             let command = command_original.trim();