use anyhow::Result; use git2::Config; use crate::config::utils::get_input; #[derive(Clone, Debug)] pub struct KeyBindings { pub(crate) abort: Vec, pub(crate) action_break: Vec, pub(crate) action_drop: Vec, pub(crate) action_edit: Vec, pub(crate) action_fixup: Vec, pub(crate) action_pick: Vec, pub(crate) action_reword: Vec, pub(crate) action_squash: Vec, pub(crate) confirm_no: Vec, pub(crate) confirm_yes: Vec, pub(crate) edit: Vec, pub(crate) force_abort: Vec, pub(crate) force_rebase: Vec, pub(crate) help: Vec, pub(crate) insert_line: Vec, pub(crate) move_down: Vec, pub(crate) move_down_step: Vec, pub(crate) move_end: Vec, pub(crate) move_home: Vec, pub(crate) move_left: Vec, pub(crate) move_right: Vec, pub(crate) move_selection_down: Vec, pub(crate) move_selection_up: Vec, pub(crate) move_up: Vec, pub(crate) move_up_step: Vec, pub(crate) open_in_external_editor: Vec, pub(crate) rebase: Vec, pub(crate) redo: Vec, pub(crate) remove_line: Vec, pub(crate) show_commit: Vec, pub(crate) show_diff: Vec, pub(crate) toggle_visual_mode: Vec, pub(crate) undo: Vec, } impl KeyBindings { pub(super) fn new(git_config: &Config) -> Result { let confirm_no = get_input(git_config, "interactive-rebase-tool.inputConfirmNo", "n")? .iter() .map(|s| s.as_str().to_lowercase()) .collect(); let confirm_yes = get_input(git_config, "interactive-rebase-tool.inputConfirmYes", "y")? .iter() .map(|s| s.as_str().to_lowercase()) .collect(); Ok(Self { abort: get_input(git_config, "interactive-rebase-tool.inputAbort", "q")?, action_break: get_input(git_config, "interactive-rebase-tool.inputActionBreak", "b")?, action_drop: get_input(git_config, "interactive-rebase-tool.inputActionDrop", "d")?, action_edit: get_input(git_config, "interactive-rebase-tool.inputActionEdit", "e")?, action_fixup: get_input(git_config, "interactive-rebase-tool.inputActionFixup", "f")?, action_pick: get_input(git_config, "interactive-rebase-tool.inputActionPick", "p")?, action_reword: get_input(git_config, "interactive-rebase-tool.inputActionReword", "r")?, action_squash: get_input(git_config, "interactive-rebase-tool.inputActionSquash", "s")?, confirm_no, confirm_yes, edit: get_input(git_config, "interactive-rebase-tool.inputEdit", "E")?, force_abort: get_input(git_config, "interactive-rebase-tool.inputForceAbort", "Q")?, force_rebase: get_input(git_config, "interactive-rebase-tool.inputForceRebase", "W")?, help: get_input(git_config, "interactive-rebase-tool.inputHelp", "?")?, insert_line: get_input(git_config, "interactive-rebase-tool.insertLine", "I")?, move_down: get_input(git_config, "interactive-rebase-tool.inputMoveDown", "Down")?, move_down_step: get_input(git_config, "interactive-rebase-tool.inputMoveStepDown", "PageDown")?, move_end: get_input(git_config, "interactive-rebase-tool.inputMoveEnd", "End")?, move_home: get_input(git_config, "interactive-rebase-tool.inputMoveHome", "Home")?, move_left: get_input(git_config, "interactive-rebase-tool.inputMoveLeft", "Left")?, move_right: get_input(git_config, "interactive-rebase-tool.inputMoveRight", "Right")?, move_selection_down: get_input(git_config, "interactive-rebase-tool.inputMoveSelectionDown", "j")?, move_selection_up: get_input(git_config, "interactive-rebase-tool.inputMoveSelectionUp", "k")?, move_up_step: get_input(git_config, "interactive-rebase-tool.inputMoveStepUp", "PageUp")?, move_up: get_input(git_config, "interactive-rebase-tool.inputMoveUp", "Up")?, open_in_external_editor: get_input(git_config, "interactive-rebase-tool.inputOpenInExternalEditor", "!")?, rebase: get_input(git_config, "interactive-rebase-tool.inputRebase", "w")?, redo: get_input(git_config, "interactive-rebase-tool.inputRedo", "control+y")?, remove_line: get_input(git_config, "interactive-rebase-tool.removeLine", "delete")?, show_commit: get_input(git_config, "interactive-rebase-tool.inputShowCommit", "c")?, show_diff: get_input(git_config, "interactive-rebase-tool.inputShowDiff", "d")?, toggle_visual_mode: get_input(git_config, "interactive-rebase-tool.inputToggleVisualMode", "v")?, undo: get_input(git_config, "interactive-rebase-tool.inputUndo", "control+z")?, }) } }