use super::KeyBinding;
use super::types::{Key, KeyCombo};
use crate::app::update::action::Action;
pub const GLOBAL_KEYS: &[KeyBinding] = &[
KeyBinding {
key_short: "q",
key: "q",
desc_short: "Quit",
description: "Quit application",
action: Action::Quit,
combos: &[KeyCombo::plain(Key::Char('q'))],
},
KeyBinding {
key_short: "?",
key: "?",
desc_short: "Help",
description: "Toggle help",
action: Action::OpenHelp,
combos: &[KeyCombo::plain(Key::Char('?'))],
},
KeyBinding {
key_short: "^P",
key: "Ctrl+P",
desc_short: "Tables",
description: "Open Table Picker",
action: Action::OpenTablePicker,
combos: &[KeyCombo::ctrl(Key::Char('p'))],
},
KeyBinding {
key_short: "^K",
key: "Ctrl+K",
desc_short: "Palette",
description: "Open Command Palette",
action: Action::OpenCommandPalette,
combos: &[KeyCombo::ctrl(Key::Char('k'))],
},
KeyBinding {
key_short: ":",
key: ":",
desc_short: "Cmd",
description: "Enter command line",
action: Action::EnterCommandLine,
combos: &[KeyCombo::plain(Key::Char(':'))],
},
KeyBinding {
key_short: "f",
key: "f",
desc_short: "Focus",
description: "Toggle Focus mode",
action: Action::ToggleFocus,
combos: &[KeyCombo::plain(Key::Char('f'))],
},
KeyBinding {
key_short: "f",
key: "f",
desc_short: "Exit Focus",
description: "Exit Focus mode",
action: Action::ToggleFocus,
combos: &[KeyCombo::plain(Key::Char('f'))],
},
KeyBinding {
key_short: "1/2/3",
key: "1/2/3",
desc_short: "Pane",
description: "Switch pane focus",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "Tab/⇧Tab",
key: "Tab/⇧Tab",
desc_short: "InsTabs",
description: "Inspector prev/next tab",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "r",
key: "r",
desc_short: "Reload",
description: "Reload metadata",
action: Action::ReloadMetadata,
combos: &[KeyCombo::plain(Key::Char('r'))],
},
KeyBinding {
key_short: "s",
key: "s",
desc_short: "SQL",
description: "Open SQL Editor",
action: Action::OpenSqlModal,
combos: &[KeyCombo::plain(Key::Char('s'))],
},
KeyBinding {
key_short: "e",
key: "e",
desc_short: "ER Diagram",
description: "Open ER Diagram",
action: Action::OpenErTablePicker,
combos: &[KeyCombo::plain(Key::Char('e'))],
},
KeyBinding {
key_short: "c",
key: "c",
desc_short: "Connections",
description: "Open Connection Selector",
action: Action::OpenConnectionSelector,
combos: &[KeyCombo::plain(Key::Char('c'))],
},
KeyBinding {
key_short: "^E",
key: "Ctrl+E",
desc_short: "Export",
description: "Export result to CSV",
action: Action::RequestCsvExport,
combos: &[KeyCombo::ctrl(Key::Char('e'))],
},
KeyBinding {
key_short: "^R",
key: "Ctrl+R",
desc_short: "Read-Only",
description: "Enable Read-Only mode",
action: Action::ToggleReadOnly,
combos: &[KeyCombo::ctrl(Key::Char('r'))],
},
KeyBinding {
key_short: "^R",
key: "Ctrl+R",
desc_short: "Read-Write",
description: "Disable Read-Only mode",
action: Action::ToggleReadOnly,
combos: &[KeyCombo::ctrl(Key::Char('r'))],
},
KeyBinding {
key_short: "^O",
key: "Ctrl+O",
desc_short: "History",
description: "Open Query History",
action: Action::OpenQueryHistoryPicker,
combos: &[KeyCombo::ctrl(Key::Char('o'))],
},
];
pub const NAVIGATION_KEYS: &[KeyBinding] = &[
KeyBinding {
key_short: "j/↓",
key: "j / ↓",
desc_short: "Down",
description: "Move down / scroll",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "k/↑",
key: "k / ↑",
desc_short: "Up",
description: "Move up / scroll",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "g",
key: "g / Home",
desc_short: "Top",
description: "First item / top",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "G",
key: "G / End",
desc_short: "Bottom",
description: "Last item / bottom",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "H",
key: "H",
desc_short: "Viewport Top",
description: "First visible item",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "M",
key: "M",
desc_short: "Viewport Mid",
description: "Middle of visible items",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "L",
key: "L",
desc_short: "Viewport Btm",
description: "Last visible item",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "zz/zt/zb",
key: "zz / zt / zb",
desc_short: "Scroll To",
description: "Scroll cursor to center/top/bottom",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "^D/^U",
key: "Ctrl+D / Ctrl+U",
desc_short: "Half Page",
description: "Scroll half page down/up",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "^F/^B",
key: "Ctrl+F/B / PgDn/Up",
desc_short: "Full Page",
description: "Scroll full page down/up",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "h/l / ←→",
key: "h / l",
desc_short: "H-Scroll",
description: "Scroll left/right",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "]",
key: "]",
desc_short: "Next Page",
description: "Next page (Preview)",
action: Action::ResultNextPage,
combos: &[KeyCombo::plain(Key::Char(']'))],
},
KeyBinding {
key_short: "[",
key: "[",
desc_short: "Prev Page",
description: "Previous page (Preview)",
action: Action::ResultPrevPage,
combos: &[KeyCombo::plain(Key::Char('['))],
},
];
pub const FOOTER_NAV_KEYS: &[KeyBinding] = &[
KeyBinding {
key_short: "j/↓",
key: "j / ↓",
desc_short: "Scroll",
description: "Move down/up",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "k/↑",
key: "k / ↑",
desc_short: "Scroll",
description: "Move down/up",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "g/G H/M/L",
key: "g / G / H / M / L",
desc_short: "Top/Bot/Viewport",
description: "First/Last item, Viewport top/mid/bot",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "h/l / ←→",
key: "h / l / ← / →",
desc_short: "H-Scroll",
description: "Scroll left/right",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "]/[",
key: "] / [",
desc_short: "Page",
description: "Next/Previous page",
action: Action::None,
combos: &[],
},
];
pub const RESULT_ACTIVE_KEYS: &[KeyBinding] = &[
KeyBinding {
key_short: "Enter",
key: "Enter",
desc_short: "Select",
description: "Enter cell selection at the current viewport anchor",
action: Action::ResultActivateCell,
combos: &[KeyCombo::plain(Key::Enter)],
},
KeyBinding {
key_short: "Y",
key: "Y",
desc_short: "Yank Cell",
description: "Copy the active cell value to clipboard",
action: Action::ResultCellYank,
combos: &[KeyCombo::plain(Key::Char('Y'))],
},
KeyBinding {
key_short: "dd",
key: "d, d",
desc_short: "Stage Del",
description: "Stage the active row for deletion (red highlight; :w to commit)",
action: Action::StageRowForDelete,
combos: &[], },
KeyBinding {
key_short: "u",
key: "u",
desc_short: "Unstage",
description: "Unstage the last staged row deletion",
action: Action::UnstageLastStagedRow,
combos: &[KeyCombo::plain(Key::Char('u'))],
},
KeyBinding {
key_short: "h/l",
key: "h / l",
desc_short: "Cell",
description: "Move cell left/right",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "j/k",
key: "j / k",
desc_short: "Row",
description: "Move the active row up/down",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "g/G H/M/L",
key: "g / G / H / M / L",
desc_short: "Top/Bot/Viewport",
description: "Jump the active row to first/last or viewport top/mid/bot",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "Esc",
key: "Esc",
desc_short: "Back",
description: "Exit cell selection and return to scroll mode without clearing staged deletes",
action: Action::ResultExitToScroll,
combos: &[KeyCombo::plain(Key::Esc)],
},
KeyBinding {
key_short: "i",
key: "i",
desc_short: "Edit",
description: "Edit active cell",
action: Action::ResultEnterCellEdit,
combos: &[KeyCombo::plain(Key::Char('i'))],
},
KeyBinding {
key_short: "Esc",
key: "Esc",
desc_short: "Discard",
description: "Discard the pending draft and stay in cell selection",
action: Action::ResultDiscardCellEdit,
combos: &[KeyCombo::plain(Key::Esc)],
},
KeyBinding {
key_short: "yy",
key: "y, y",
desc_short: "Yank Row",
description: "Copy the active row values to clipboard (TSV)",
action: Action::ResultRowYank,
combos: &[],
},
];
pub const HISTORY_KEYS: &[KeyBinding] = &[
KeyBinding {
key_short: "^H",
key: "Ctrl+H",
desc_short: "History",
description: "Toggle Result History",
action: Action::OpenResultHistory,
combos: &[KeyCombo::ctrl(Key::Char('h'))],
},
KeyBinding {
key_short: "]/[",
key: "] / [",
desc_short: "History",
description: "Navigate history newer/older",
action: Action::None,
combos: &[],
},
KeyBinding {
key_short: "^H",
key: "Ctrl+H",
desc_short: "Back",
description: "Exit history (back to latest)",
action: Action::None,
combos: &[],
},
];
pub const INSPECTOR_DDL_KEYS: &[KeyBinding] = &[KeyBinding {
key_short: "y",
key: "y",
desc_short: "Yank",
description: "Copy DDL to clipboard",
action: Action::DdlYank,
combos: &[KeyCombo::plain(Key::Char('y'))],
}];