use crate::poem::Verse; use std::env; /// cd /// /// The builtin `cd` command. Used to change directories. This must be /// implemented by the shell, since the `pwd` is context sensitive within a /// process. If no arguments are given, `cd` will take the user back to their /// home directory (i.e. `~`). /// /// # Shell Example /// ```sh /// cd ~/.config # Change into /home//.config /// ``` pub fn incant(verse: &Verse) -> i32 { let path = match verse.clause() { Some(path) => path[0].to_string(), None => match env::var("HOME") { Ok(val) => val, Err(_) => { eprintln!("cd: unknown home, staying in pwd"); return 1; } }, }; match std::env::set_current_dir(&path) { Ok(_) => 0, Err(e) => { eprintln!( "cd: unable to change into {}: {}", path, e.to_string().to_lowercase() ); 1 } } }