2023-10-06 22:35:27 -07:00
|
|
|
//! # Default Keybindings
|
|
|
|
//!
|
|
|
|
//! The keybindings are set up here. We define some iamb-specific keybindings, but the default Vim
|
|
|
|
//! keys come from [modalkit::env::vim::keybindings].
|
2022-12-29 18:00:59 -08:00
|
|
|
use modalkit::{
|
|
|
|
editing::action::WindowAction,
|
|
|
|
env::vim::keybindings::{InputStep, VimBindings},
|
|
|
|
env::vim::VimMode,
|
2024-02-27 21:21:05 -08:00
|
|
|
key::TerminalKey,
|
|
|
|
keybindings::{EdgeEvent, EdgeRepeat, InputBindings},
|
2022-12-29 18:00:59 -08:00
|
|
|
};
|
|
|
|
|
2023-03-01 18:46:33 -08:00
|
|
|
use crate::base::{IambAction, IambInfo, Keybindings, MATRIX_ID_WORD};
|
2023-02-09 23:05:02 -08:00
|
|
|
|
|
|
|
type IambStep = InputStep<IambInfo>;
|
2022-12-29 18:00:59 -08:00
|
|
|
|
2023-10-06 22:35:27 -07:00
|
|
|
/// Initialize the default keybinding state.
|
2022-12-29 18:00:59 -08:00
|
|
|
pub fn setup_keybindings() -> Keybindings {
|
|
|
|
let mut ism = Keybindings::empty();
|
|
|
|
|
|
|
|
let vim = VimBindings::default()
|
|
|
|
.submit_on_enter()
|
2023-03-01 18:46:33 -08:00
|
|
|
.cursor_open(MATRIX_ID_WORD.clone());
|
2022-12-29 18:00:59 -08:00
|
|
|
|
|
|
|
vim.setup(&mut ism);
|
|
|
|
|
|
|
|
let ctrl_w = EdgeEvent::Key("<C-W>".parse::<TerminalKey>().unwrap());
|
|
|
|
let ctrl_m = EdgeEvent::Key("<C-M>".parse::<TerminalKey>().unwrap());
|
|
|
|
let ctrl_z = EdgeEvent::Key("<C-Z>".parse::<TerminalKey>().unwrap());
|
|
|
|
let key_m_lc = EdgeEvent::Key("m".parse::<TerminalKey>().unwrap());
|
|
|
|
let key_z_lc = EdgeEvent::Key("z".parse::<TerminalKey>().unwrap());
|
|
|
|
|
|
|
|
let cwz = vec![
|
|
|
|
(EdgeRepeat::Once, ctrl_w.clone()),
|
|
|
|
(EdgeRepeat::Once, key_z_lc),
|
|
|
|
];
|
|
|
|
let cwcz = vec![
|
|
|
|
(EdgeRepeat::Once, ctrl_w.clone()),
|
|
|
|
(EdgeRepeat::Once, ctrl_z),
|
|
|
|
];
|
2023-02-09 23:05:02 -08:00
|
|
|
let zoom = IambStep::new()
|
|
|
|
.actions(vec![WindowAction::ZoomToggle.into()])
|
|
|
|
.goto(VimMode::Normal);
|
2022-12-29 18:00:59 -08:00
|
|
|
|
|
|
|
ism.add_mapping(VimMode::Normal, &cwz, &zoom);
|
2023-02-09 23:05:02 -08:00
|
|
|
ism.add_mapping(VimMode::Visual, &cwz, &zoom);
|
2022-12-29 18:00:59 -08:00
|
|
|
ism.add_mapping(VimMode::Normal, &cwcz, &zoom);
|
2023-02-09 23:05:02 -08:00
|
|
|
ism.add_mapping(VimMode::Visual, &cwcz, &zoom);
|
2022-12-29 18:00:59 -08:00
|
|
|
|
|
|
|
let cwm = vec![
|
|
|
|
(EdgeRepeat::Once, ctrl_w.clone()),
|
|
|
|
(EdgeRepeat::Once, key_m_lc),
|
|
|
|
];
|
|
|
|
let cwcm = vec![(EdgeRepeat::Once, ctrl_w), (EdgeRepeat::Once, ctrl_m)];
|
2023-02-09 23:05:02 -08:00
|
|
|
let stoggle = IambStep::new()
|
|
|
|
.actions(vec![IambAction::ToggleScrollbackFocus.into()])
|
|
|
|
.goto(VimMode::Normal);
|
2022-12-29 18:00:59 -08:00
|
|
|
ism.add_mapping(VimMode::Normal, &cwm, &stoggle);
|
2023-02-09 23:05:02 -08:00
|
|
|
ism.add_mapping(VimMode::Visual, &cwm, &stoggle);
|
2022-12-29 18:00:59 -08:00
|
|
|
ism.add_mapping(VimMode::Normal, &cwcm, &stoggle);
|
2023-02-09 23:05:02 -08:00
|
|
|
ism.add_mapping(VimMode::Visual, &cwcm, &stoggle);
|
2022-12-29 18:00:59 -08:00
|
|
|
|
|
|
|
return ism;
|
|
|
|
}
|