diff options
-rw-r--r-- | Cargo.lock | 16 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/sessions.rs | 17 |
3 files changed, 31 insertions, 3 deletions
diff --git a/Cargo.lock b/Cargo.lock index ec8123b0a..2210d2bd8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1175,6 +1175,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] +name = "lev_distance" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d234d89ecf5621c935b69a4c7266c9a634a95e465081682be47358617ce825b" + +[[package]] name = "libc" version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2153,6 +2159,15 @@ dependencies = [ ] [[package]] +name = "suggestion" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "015336207b7660be204f5012fcdb84b3ff35442b26cea77ebe6103929a56e54b" +dependencies = [ + "lev_distance", +] + +[[package]] name = "syn" version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2868,6 +2883,7 @@ dependencies = [ "names", "rand 0.8.4", "ssh2", + "suggestion", "zellij-client", "zellij-server", "zellij-utils", diff --git a/Cargo.toml b/Cargo.toml index cb620e3e8..4e6b8e242 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ zellij-server = { path = "zellij-server/", version = "0.21.0" } zellij-utils = { path = "zellij-utils/", version = "0.21.0" } log = "0.4.14" dialoguer = "0.9.0" +suggestion = "0.1.0" [dev-dependencies] insta = { version = "1.6.0", features = ["backtrace"] } diff --git a/src/sessions.rs b/src/sessions.rs index a13c6c7c1..0cc870a7e 100644 --- a/src/sessions.rs +++ b/src/sessions.rs @@ -1,6 +1,7 @@ use std::os::unix::fs::FileTypeExt; use std::time::SystemTime; use std::{fs, io, process}; +use suggestion::Suggest; use zellij_utils::{ consts::ZELLIJ_SOCK_DIR, envs, @@ -149,9 +150,19 @@ pub(crate) fn session_exists(name: &str) -> Result<bool, io::ErrorKind> { pub(crate) fn assert_session(name: &str) { match session_exists(name) { - Ok(result) if result => return, - Ok(_) => println!("No session named {:?} found.", name), - Err(e) => eprintln!("Error occurred: {:?}", e), + Ok(result) => { + if result { + return; + } else { + println!("No session named {:?} found.", name); + if let Some(sugg) = get_sessions().unwrap().suggest(name) { + println!(" help: Did you mean `{}`?", sugg); + } + } + } + Err(e) => { + eprintln!("Error occurred: {:?}", e); + } }; process::exit(1); } |