From b4b69b3539fc02d855c9b626cb205074e1541c78 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Fri, 5 Jun 2026 00:40:18 +0300 Subject: fix: open a default workspace when sessions are empty refs #366 --- src/app/mod.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/app/mod.rs') diff --git a/src/app/mod.rs b/src/app/mod.rs index 0c2feb67..1914c895 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -806,6 +806,10 @@ impl App { needs_render = true; } + if self.ensure_default_workspace() { + needs_render = true; + } + let now = Instant::now(); self.sync_animation_timer(now); self.sync_host_mouse_capture(&mut host_mouse_capture_active)?; @@ -934,6 +938,33 @@ impl App { Ok(()) } + pub(crate) fn ensure_default_workspace(&mut self) -> bool { + if !self.state.workspaces.is_empty() || self.state.mode == Mode::Onboarding { + return false; + } + + let previous_mode = self.state.mode; + let preserve_mode = matches!( + previous_mode, + Mode::ReleaseNotes | Mode::ProductAnnouncement | Mode::Settings + ); + let cwd = self.resolve_new_terminal_cwd(None); + + match self.create_workspace_with_options(cwd, true) { + Ok(_) => { + if preserve_mode { + self.state.mode = previous_mode; + } + true + } + Err(err) => { + tracing::error!(err = %err, "failed to create default workspace"); + self.state.mode = Mode::Navigate; + false + } + } + } + pub(crate) fn dismiss_release_notes(&mut self) { let preview = self .state @@ -2643,6 +2674,18 @@ mod tests { assert_eq!(cwd, std::path::PathBuf::from("/tmp/herdr-source")); } + #[test] + fn new_terminal_cwd_follow_without_source_uses_home() { + let Some(home) = std::env::var_os("HOME").map(std::path::PathBuf::from) else { + return; + }; + + let cwd = + creation::resolve_new_terminal_cwd(&crate::config::NewTerminalCwdConfig::Follow, None); + + assert_eq!(cwd, home); + } + #[test] fn new_terminal_cwd_path_uses_configured_path() { let cwd = creation::resolve_new_terminal_cwd( -- cgit v1.2.3