fix(input) Write user input only in Normal mode

closes 184

Added the Action::NoOp from
https://github.com/zellij-org/zellij/issues/184
This commit is contained in:
a-kenji 2021-02-22 16:49:37 +01:00
parent dbbb0792c9
commit f3f23972eb
3 changed files with 12 additions and 8 deletions

View file

@ -39,6 +39,8 @@ pub enum Action {
CloseFocus,
/// Create a new tab.
NewTab,
/// Do nothing.
NoOp,
/// Go to the next tab.
GoToNextTab,
/// Go to the previous tab.

View file

@ -227,6 +227,7 @@ impl InputHandler {
.unwrap();
self.command_is_executing.wait_until_pane_is_closed();
}
Action::NoOp => {}
}
should_break

View file

@ -165,15 +165,16 @@ pub fn key_to_actions(
mode: &InputMode,
keybinds: &Keybinds,
) -> Vec<Action> {
if let Some(mode_keybinds) = keybinds.get(mode) {
mode_keybinds
let mode_keybind_or_action = |action: Action| {
keybinds
.get(mode)
.unwrap_or_else(|| unreachable!("Unrecognized mode: {:?}", mode))
.get(key)
.cloned()
// FIXME in command mode, unbound keystrokes should probably do nothing instead of
// writing to the terminal. Will be easier to implement after a big refactor of the
// input system (@categorille)
.unwrap_or_else(|| vec![Action::Write(input)])
} else {
unreachable!("Unrecognized mode: {:?}", mode);
.unwrap_or_else(|| vec![action])
};
match *mode {
InputMode::Normal => mode_keybind_or_action(Action::Write(input)),
_ => mode_keybind_or_action(Action::NoOp),
}
}