summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock16
-rw-r--r--Cargo.toml1
-rw-r--r--src/sessions.rs17
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);
}