aboutsummaryrefslogtreecommitdiff
path: root/src/session.rs
diff options
context:
space:
mode:
authorGolden-Pigeon <goldenpigeon2000@gmail.com>2026-05-22 02:39:02 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-22 02:43:30 +0300
commit1daf54ecbf960c42d612ed4ad2764045a606fb30 (patch)
treec6ee19c7e8032ac77f5c00bc17bc6a1bd93d2272 /src/session.rs
parent0148c1379b76c5c0a9d05588c07dcb06ec32f93f (diff)
feat: show named session command hints
refs #199
Diffstat (limited to 'src/session.rs')
-rw-r--r--src/session.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/session.rs b/src/session.rs
index b164fecc..f00797c0 100644
--- a/src/session.rs
+++ b/src/session.rs
@@ -92,6 +92,20 @@ pub fn active_name() -> Option<String> {
.filter(|name| validate_name(name).is_ok())
}
+pub fn local_attach_command() -> String {
+ match active_name() {
+ Some(name) => format!("herdr session attach {name}"),
+ None => "herdr".to_string(),
+ }
+}
+
+pub fn local_stop_command() -> String {
+ match active_name() {
+ Some(name) => format!("herdr session stop {name}"),
+ None => "herdr server stop".to_string(),
+ }
+}
+
pub fn explicit_session_requested() -> bool {
EXPLICIT_SESSION_REQUESTED.load(Ordering::Relaxed)
}
@@ -476,6 +490,44 @@ mod tests {
}
#[test]
+ fn local_attach_command_uses_default_launch_for_default_session() {
+ let _guard = env_lock().lock().unwrap();
+ std::env::remove_var(SESSION_ENV_VAR);
+
+ assert_eq!(local_attach_command(), "herdr");
+ }
+
+ #[test]
+ fn local_attach_command_uses_session_attach_for_named_session() {
+ let _guard = env_lock().lock().unwrap();
+ std::env::set_var(SESSION_ENV_VAR, "work");
+
+ assert_eq!(local_attach_command(), "herdr session attach work");
+
+ std::env::remove_var(SESSION_ENV_VAR);
+ }
+
+ #[test]
+ fn local_stop_command_uses_server_stop_for_default_session() {
+ let _guard = env_lock().lock().unwrap();
+ std::env::remove_var(SESSION_ENV_VAR);
+
+ assert_eq!(local_stop_command(), "herdr server stop");
+
+ std::env::remove_var(SESSION_ENV_VAR);
+ }
+
+ #[test]
+ fn local_stop_command_uses_session_stop_for_named_session() {
+ let _guard = env_lock().lock().unwrap();
+ std::env::set_var(SESSION_ENV_VAR, "work");
+
+ assert_eq!(local_stop_command(), "herdr session stop work");
+
+ std::env::remove_var(SESSION_ENV_VAR);
+ }
+
+ #[test]
fn explicit_session_socket_ignores_inherited_socket_override() {
let _guard = env_lock().lock().unwrap();
let config_home =