diff --git a/src/main.rs b/src/main.rs index bb68f66..661245e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -456,7 +456,8 @@ impl Application for App { Message::SelectAll(entity_opt) => { let entity = entity_opt.unwrap_or_else(|| self.tab_model.active()); if let Some(terminal) = self.tab_model.data::>(entity) { - log::warn!("TODO: SELECT ALL"); + let mut terminal = terminal.lock().unwrap(); + terminal.select_all(); } } Message::SystemThemeModeChange(_theme_mode) => { diff --git a/src/terminal.rs b/src/terminal.rs index 34cd98e..7687260 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -4,7 +4,8 @@ use alacritty_terminal::{ event::{Event, EventListener, Notify, OnResize, WindowSize}, event_loop::{EventLoop, Msg, Notifier}, grid::Dimensions, - index::Point, + index::{Column, Line, Point, Side}, + selection::{Selection, SelectionType}, sync::FairMutex, term::{ cell::Flags, @@ -284,6 +285,19 @@ impl Terminal { } } + pub fn select_all(&mut self) { + { + let mut term = self.term.lock(); + let grid = term.grid(); + let start = Point::new(Line(-(grid.history_size() as i32)), Column(0)); + let end = Point::new(Line(grid.screen_lines() as i32), Column(grid.columns())); + let mut selection = Selection::new(SelectionType::Lines, start, Side::Left); + selection.update(end, Side::Right); + term.selection = Some(selection); + } + self.update(); + } + pub fn set_config(&mut self, config: &crate::Config, themes: &HashMap) { let mut update_cell_size = false; let mut update = false;