#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Mode {
#[default]
Normal,
Insert,
Visual,
VisualLine,
VisualBlock,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum Pending {
#[default]
None,
Op { op: Operator, count1: usize },
OpTextObj {
op: Operator,
count1: usize,
inner: bool,
},
OpG { op: Operator, count1: usize },
G,
Find { forward: bool, till: bool },
OpFind {
op: Operator,
count1: usize,
forward: bool,
till: bool,
},
Replace,
VisualTextObj { inner: bool },
Z,
SetMark,
GotoMarkLine,
GotoMarkChar,
SelectRegister,
RecordMacroTarget,
PlayMacroTarget { count: usize },
SquareBracketOpen,
SquareBracketClose,
OpSquareBracketOpen { op: Operator, count1: usize },
OpSquareBracketClose { op: Operator, count1: usize },
SneakFirst { forward: bool, count: usize },
SneakSecond {
c1: char,
forward: bool,
count: usize,
},
OpSneakFirst {
op: Operator,
count1: usize,
forward: bool,
},
OpSneakSecond {
op: Operator,
count1: usize,
c1: char,
forward: bool,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Operator {
Delete,
Change,
Yank,
Uppercase,
Lowercase,
ToggleCase,
Indent,
Outdent,
Fold,
Reflow,
ReflowKeepCursor,
AutoIndent,
Filter,
Comment,
Rot13,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Motion {
Left,
Right,
SpaceFwd,
BackspaceBack,
Up,
Down,
WordFwd,
BigWordFwd,
WordBack,
BigWordBack,
WordEnd,
BigWordEnd,
WordEndBack,
BigWordEndBack,
LineStart,
FirstNonBlank,
LineEnd,
FileTop,
FileBottom,
Find {
ch: char,
forward: bool,
till: bool,
},
FindRepeat {
reverse: bool,
},
MatchBracket,
UnmatchedBracket {
forward: bool,
open: char,
},
WordAtCursor {
forward: bool,
whole_word: bool,
},
SearchNext {
reverse: bool,
},
ViewportTop,
ViewportMiddle,
ViewportBottom,
LastNonBlank,
LineMiddle,
ScreenLineMiddle,
ParagraphPrev,
ParagraphNext,
SentencePrev,
SentenceNext,
ScreenDown,
ScreenUp,
SectionBackward,
SectionForward,
SectionEndBackward,
SectionEndForward,
FirstNonBlankNextLine,
FirstNonBlankPrevLine,
FirstNonBlankLine,
GotoColumn,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TextObject {
Word {
big: bool,
},
Quote(char),
Bracket(char),
Paragraph,
XmlTag,
Sentence,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RangeKind {
Exclusive,
Inclusive,
Linewise,
}
#[derive(Debug, Clone)]
pub enum LastChange {
OpMotion {
op: Operator,
motion: Motion,
count: usize,
inserted: Option<String>,
},
OpTextObj {
op: Operator,
obj: TextObject,
inner: bool,
inserted: Option<String>,
},
LineOp {
op: Operator,
count: usize,
inserted: Option<String>,
},
CharDel { forward: bool, count: usize },
ReplaceChar { ch: char, count: usize },
ToggleCase { count: usize },
JoinLine { count: usize },
Paste {
before: bool,
count: usize,
cursor_after: bool,
reindent: bool,
},
DeleteToEol { inserted: Option<String> },
OpenLine { above: bool, inserted: String },
InsertAt {
entry: InsertEntry,
inserted: String,
count: usize,
},
GnOp {
op: Operator,
forward: bool,
inserted: Option<String>,
},
ReplaceMode { text: String },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InsertEntry {
I,
A,
ShiftI,
ShiftA,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum LastHorizontalMotion {
#[default]
None,
FindChar,
Sneak,
}
#[derive(Debug, Clone)]
pub struct InsertSession {
pub count: usize,
pub row_min: usize,
pub row_max: usize,
pub before_rope: ropey::Rope,
pub reason: InsertReason,
pub start_row: usize,
pub start_col: usize,
}
#[derive(Debug, Clone)]
pub enum InsertReason {
Enter(InsertEntry),
Open { above: bool },
AfterChange,
DeleteToEol,
ReplayOnly,
BlockEdge {
top: usize,
bot: usize,
col: usize,
pad: bool,
},
BlockChange { top: usize, bot: usize, col: usize },
Replace,
}
#[derive(Debug, Clone, Copy)]
pub struct LastVisual {
pub mode: Mode,
pub anchor: (usize, usize),
pub cursor: (usize, usize),
pub block_vcol: usize,
}