From 32e82acd5c4222924f3732ff5eef522f1d2416ba Mon Sep 17 00:00:00 2001 From: pawank06 Date: Fri, 9 Jan 2026 20:58:00 +0530 Subject: [PATCH 1/5] feature(~): handle ~ as home dir navigation --- src/main.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 3eee9eb..e07c426 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,8 +83,18 @@ fn main() { let args = &parts[1..]; let full_path = args.join(" "); - let path = Path::new(&full_path); + println!("path {}", path.display()); + if path == "~" { + match env::var("HOME") { + Ok(val) => { + if let Err(e) = env::set_current_dir(&val) { + eprintln!("cd: {} {}", &val, e) + } + } + Err(e) => eprintln!("Couldn't able to read env variable HOME: {}", e), + } + } if !path.exists() { println!("cd: {}: No such file or directory", full_path); } else if !path.is_dir() { From 63e082274cb01f68b88e09eecac0717127f03352 Mon Sep 17 00:00:00 2001 From: pawank06 Date: Fri, 9 Jan 2026 21:03:38 +0530 Subject: [PATCH 2/5] fix(~): move everything else to else case --- src/main.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index e07c426..53069c8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,7 +84,7 @@ fn main() { let args = &parts[1..]; let full_path = args.join(" "); let path = Path::new(&full_path); - println!("path {}", path.display()); + if path == "~" { match env::var("HOME") { Ok(val) => { @@ -94,14 +94,15 @@ fn main() { } Err(e) => eprintln!("Couldn't able to read env variable HOME: {}", e), } - } - if !path.exists() { - println!("cd: {}: No such file or directory", full_path); - } else if !path.is_dir() { - println!("cd: {}: Not a directory", full_path); } else { - if let Err(e) = env::set_current_dir(&full_path) { - eprintln!("cd: {} {}", path.display(), e); + if !path.exists() { + println!("cd: {}: No such file or directory", full_path); + } else if !path.is_dir() { + println!("cd: {}: Not a directory", full_path); + } else { + if let Err(e) = env::set_current_dir(&full_path) { + eprintln!("cd: {} {}", path.display(), e); + } } } } From f1778b02f9d77f51b8baa9c6ff72c8336fbc8170 Mon Sep 17 00:00:00 2001 From: pawank06 Date: Fri, 9 Jan 2026 21:28:25 +0530 Subject: [PATCH 3/5] fix(~): expanding any path that start with ~ --- src/main.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 53069c8..c2f121f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,12 +84,18 @@ fn main() { let args = &parts[1..]; let full_path = args.join(" "); let path = Path::new(&full_path); - - if path == "~" { + let path_str = full_path.as_str(); + if path_str == "~" || path_str.starts_with("~/") { match env::var("HOME") { Ok(val) => { - if let Err(e) = env::set_current_dir(&val) { - eprintln!("cd: {} {}", &val, e) + let expanded = if path_str == "~" { + val.clone() + } else { + path_str.replacen("~", &val, 1) + }; + + if let Err(e) = env::set_current_dir(&expanded) { + eprintln!("cd: {} {}", &expanded, e) } } Err(e) => eprintln!("Couldn't able to read env variable HOME: {}", e), From e83497009015ef1bc4c9c5487d4b9168a71976d5 Mon Sep 17 00:00:00 2001 From: pawank06 Date: Fri, 9 Jan 2026 21:31:37 +0530 Subject: [PATCH 4/5] fix(~): improve error message --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index c2f121f..d93147f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,7 +68,7 @@ fn main() { println!("{}: not found", query); } } - Err(e) => eprintln!("Couldn't read PATH environment variable: {}", e), + Err(e) => eprintln!("Unable to read PATH environment variable: {}", e), } } } @@ -98,7 +98,7 @@ fn main() { eprintln!("cd: {} {}", &expanded, e) } } - Err(e) => eprintln!("Couldn't able to read env variable HOME: {}", e), + Err(e) => eprintln!("cd: Unable to read HOME environment variable: {}", e), } } else { if !path.exists() { From 24adfa411b057eaa88bbd5c4d862a8b94f71f8f4 Mon Sep 17 00:00:00 2001 From: pawank06 Date: Fri, 9 Jan 2026 21:39:55 +0530 Subject: [PATCH 5/5] fix(cd): list cd in builtin --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index d93147f..69ef7ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,7 +36,7 @@ fn main() { } let query = &parts[1]; - let builtin = ["exit", "echo", "type", "pwd"]; + let builtin = ["exit", "echo", "type", "pwd", "cd"]; if builtin.contains(query) { println!("{} is a rshell builtin", query); @@ -68,7 +68,7 @@ fn main() { println!("{}: not found", query); } } - Err(e) => eprintln!("Unable to read PATH environment variable: {}", e), + Err(e) => eprintln!("cd: Unable to read PATH environment variable: {}", e), } } }