aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-05 00:40:18 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-05 00:40:18 +0300
commitb4b69b3539fc02d855c9b626cb205074e1541c78 (patch)
tree71f61897e2847f4627b8cdb38b80cd036de49deb /src/app/mod.rs
parent6b3f6462810e400fbbfbc21240b677732b0549ec (diff)
fix: open a default workspace when sessions are empty
refs #366
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs43
1 files changed, 43 insertions, 0 deletions
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
@@ -2644,6 +2675,18 @@ mod tests {
}
#[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(
&crate::config::NewTerminalCwdConfig::Path("/tmp/herdr-fixed".into()),