aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-21 16:56:43 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-21 16:56:43 +0300
commitf99d51e42e2bcb5f18f6eb962a4a08d6b05cceda (patch)
tree68239df74cdd3329d26c4b5a444570af38c2c65d
parentced3fea29cabaceee26d8b94f8e04cd181430949 (diff)
fix: close global menu before detach
-rw-r--r--CHANGELOG.md19
-rw-r--r--src/app/input/modal.rs5
-rw-r--r--src/app/input/sidebar.rs1
3 files changed, 15 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c96ec07d..1625ac0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,20 +2,21 @@
## Unreleased
+### Breaking Changes Please Read
+- herdr now defaults to a persistent server/client session model. running `herdr` starts or reattaches to a background session server instead of launching the old single-process UI.
+- quitting the UI in default mode now detaches the current client and leaves the shared session running. use `herdr server stop` to stop the background server explicitly.
+- the old monolithic behavior is still available as an escape hatch with `herdr --no-session`.
+
### Added
-- herdr now defaults to a persistent server/client session model. launching `herdr` starts or reattaches to a background session server, and `herdr server stop` shuts that server down explicitly.
-- The thin client, headless server, and their integration coverage are now part of the main product, including detach and reattach flows, multi-client attach, and auto-detect launch.
+- Persistent sessions are now the default product behavior. You can detach and reattach without stopping pane processes.
+- Added the thin client and headless server as first-class product components, including auto-detect launch, explicit `herdr client`, and `herdr server stop`.
+- Sessions now restore cleanly after full restart, preserving workspaces, tabs, panes, and running process state.
+- Multi-client attach is now supported. Multiple clients can connect to the same shared session.
### Changed
- In persistence mode, in-app quit actions now detach the current client by default instead of shutting down the whole background server.
- The current persistence model is a shared session view across attached clients. It is not yet full tmux-style per-client independent navigation.
-
-### Fixed
-- Headless client input routing now re-encodes keys for the focused pane's negotiated keyboard protocol, fixing broken modified keys like Ghostty CSI-u `Ctrl-C` sequences reaching panes as literal text.
-- Thin-client frame blitting now resets style state correctly between cells, fixing modifier leakage artifacts such as long underline-like horizontal lines.
-- Client/server mode now restores the host terminal default foreground and background theme sync, so libghostty panes no longer fall back to a black background when attached through the persistence client.
-- Client-side persistence notifications no longer leak plain text into the pane area.
-- Clipboard copy in persistence mode now routes through attached clients correctly, and SSH sessions prefer OSC 52 over remote clipboard helpers.
+- Restored sessions now land in terminal mode, while fresh sessions still start in navigate mode.
## [0.4.11] - 2026-04-16
diff --git a/src/app/input/modal.rs b/src/app/input/modal.rs
index 2ba9b6f4..fe909326 100644
--- a/src/app/input/modal.rs
+++ b/src/app/input/modal.rs
@@ -121,7 +121,10 @@ pub(super) fn request_quit_or_detach(state: &mut AppState) {
pub(super) fn apply_global_menu_action(state: &mut AppState, action: GlobalMenuAction) {
match action {
- GlobalMenuAction::Quit => request_quit_or_detach(state),
+ GlobalMenuAction::Quit => {
+ leave_modal(state);
+ request_quit_or_detach(state);
+ }
GlobalMenuAction::WhatsNew => open_update_release_notes(state),
GlobalMenuAction::Keybinds => open_keybind_help(state),
GlobalMenuAction::ReloadKeybinds => {
diff --git a/src/app/input/sidebar.rs b/src/app/input/sidebar.rs
index 34845861..9de8868b 100644
--- a/src/app/input/sidebar.rs
+++ b/src/app/input/sidebar.rs
@@ -602,6 +602,7 @@ mod tests {
assert!(app.state.detach_requested);
assert!(!app.state.should_quit);
+ assert_ne!(app.state.mode, Mode::GlobalMenu);
}
#[test]