mod cursor;
mod motion;
mod search;
mod types;
mod visual;
pub use crate::selection::SelectionMode;
pub use types::{CopyModeState, Mark, PendingOperator, SearchDirection, VisualMode};
impl CopyModeState {
pub fn set_mark(&mut self, name: char) {
self.marks.insert(
name,
Mark {
col: self.cursor_col,
absolute_line: self.cursor_absolute_line,
},
);
}
pub fn goto_mark(&mut self, name: char) -> bool {
if let Some(mark) = self.marks.get(&name) {
self.cursor_col = mark.col;
self.cursor_absolute_line = mark.absolute_line;
true
} else {
false
}
}
pub fn status_text(&self) -> String {
if self.is_searching {
let dir = match self.search_direction {
SearchDirection::Forward => '/',
SearchDirection::Backward => '?',
};
format!("{}{}", dir, self.search_query)
} else {
let mode = match self.visual_mode {
VisualMode::None => "COPY",
VisualMode::Char => "VISUAL",
VisualMode::Line => "VISUAL LINE",
VisualMode::Block => "VISUAL BLOCK",
};
let pos = format!(
"{}:{} (abs {})",
self.cursor_absolute_line
.saturating_sub(self.scrollback_len),
self.cursor_col,
self.cursor_absolute_line,
);
format!("-- {} -- {}", mode, pos)
}
}
}
#[cfg(test)]
mod tests;