aboutsummaryrefslogtreecommitdiff
path: root/src/app/input/navigate.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-26 02:07:33 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-26 02:07:33 +0300
commit3d1ef155bf9846f39725bf22c54666da2bc42330 (patch)
treef4b4c3eca6c6f821dbfe86bcee0fd6a5d9ab9da9 /src/app/input/navigate.rs
parentef4182efd9f15e6c13d91d45e525b094cdcee2fe (diff)
feat: add live config reload
Diffstat (limited to 'src/app/input/navigate.rs')
-rw-r--r--src/app/input/navigate.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs
index 23b93379..b961c6d3 100644
--- a/src/app/input/navigate.rs
+++ b/src/app/input/navigate.rs
@@ -350,6 +350,7 @@ pub(crate) enum NavigateAction {
Fullscreen,
EnterResizeMode,
ToggleSidebar,
+ ReloadConfig,
Detach,
}
@@ -422,6 +423,12 @@ fn navigate_action_for_key(state: &AppState, key: &KeyEvent) -> Option<NavigateA
return Some(NavigateAction::ToggleSidebar);
}
if kb
+ .reload_config
+ .is_some_and(|(code, mods)| key_matches(key, code, mods))
+ {
+ return Some(NavigateAction::ReloadConfig);
+ }
+ if kb
.detach
.is_some_and(|(code, mods)| key_matches(key, code, mods))
{
@@ -498,6 +505,10 @@ pub(super) fn execute_navigate_action(state: &mut AppState, action: NavigateActi
state.sidebar_collapsed = !state.sidebar_collapsed;
leave_navigate_mode(state);
}
+ NavigateAction::ReloadConfig => {
+ state.request_reload_config = true;
+ leave_navigate_mode(state);
+ }
NavigateAction::Detach => {
state.detach_requested = true;
leave_navigate_mode(state);
@@ -583,6 +594,21 @@ mod tests {
}
#[test]
+ fn custom_reload_config_key_requests_reload_and_exits_navigate() {
+ let mut state = state_with_workspaces(&["test"]);
+ state.keybinds.reload_config = Some((KeyCode::Char('g'), KeyModifiers::empty()));
+ state.keybinds.reload_config_label = Some("g".into());
+
+ handle_navigate_key(
+ &mut state,
+ KeyEvent::new(KeyCode::Char('g'), KeyModifiers::empty()),
+ );
+
+ assert!(state.request_reload_config);
+ assert_eq!(state.mode, Mode::Terminal);
+ }
+
+ #[test]
fn movement_action_stays_in_navigate_mode() {
let mut state = state_with_workspaces(&["a", "b"]);
state.selected = 0;