pub mod buffer;
pub mod input;
pub mod motions;
pub mod operators;
pub mod render;
pub mod search;
pub mod visual;
use crossterm::event::KeyEvent;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VimMode {
Normal,
Insert,
Visual(VisualKind),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VisualKind {
Char,
Line,
Block,
}
#[derive(Debug, Clone)]
pub struct VimModeConfig {
pub insert_allowed: bool,
pub visual_allowed: bool,
}
impl Default for VimModeConfig {
fn default() -> Self {
Self {
insert_allowed: true,
visual_allowed: true,
}
}
}
impl VimModeConfig {
pub fn read_only() -> Self {
Self {
insert_allowed: false,
visual_allowed: true,
}
}
}
#[allow(dead_code)]
pub enum EditorAction {
Handled,
Unhandled(KeyEvent),
ExecuteQuery(String),
ExecuteQueryNewTab(String),
CloseBuffer,
SaveBuffer,
CompileToDb,
PickConnection,
CloseResultTab,
PickTheme,
ForceQuit,
SaveAndClose,
}
pub const LEADER_KEY: char = ' ';
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Operator {
Delete,
Yank,
Change,
Indent,
Dedent,
Uppercase,
Lowercase,
}
#[derive(Debug, Clone)]
pub struct MotionRange {
pub start_row: usize,
pub start_col: usize,
pub end_row: usize,
pub end_col: usize,
pub linewise: bool,
}
#[derive(Debug, Clone)]
pub struct Snapshot {
pub lines: Vec<String>,
pub cursor_row: usize,
pub cursor_col: usize,
}
#[allow(dead_code)]
#[derive(Debug, Clone, Default)]
pub struct Register {
pub content: String,
pub linewise: bool,
}
#[derive(Debug, Clone)]
pub struct SearchState {
pub pattern: String,
pub forward: bool,
pub active: bool,
pub input_buffer: String,
}
impl Default for SearchState {
fn default() -> Self {
Self {
pattern: String::new(),
forward: true,
active: false,
input_buffer: String::new(),
}
}
}
#[derive(Debug, Clone)]
pub struct EditRecord {
pub keys: Vec<KeyEvent>,
}
pub const SCROLLOFF: usize = 3;