This commit is contained in:
2025-11-18 12:33:34 -07:00
parent 1323d15333
commit 6ca21b407d
2 changed files with 31 additions and 11 deletions

View File

@@ -42,7 +42,7 @@ impl Widget for &App {
let (x_max, y_max) = self.screen.how_many_cells_fit_in(&area, &self.vars); let (x_max, y_max) = self.screen.how_many_cells_fit_in(&area, &self.vars);
let is_selected = |x: usize, y: usize| -> bool { let is_selected = |x: usize, y: usize| -> bool {
if let Mode::Visual((mut x1, mut y1)) = self.mode { if let Mode::Visual((mut x1, mut y1)) | Mode::VisualCmd((mut x1, mut y1), _)= self.mode {
let (mut x2, mut y2) = self.grid.cursor(); let (mut x2, mut y2) = self.grid.cursor();
x1 += 1; x1 += 1;
y1 += 1; y1 += 1;
@@ -80,10 +80,6 @@ impl Widget for &App {
y_idx = y as usize - 1 + self.screen.scroll_y(); y_idx = y as usize - 1 + self.screen.scroll_y();
} }
if is_selected(x.into(), y.into()) {
style = style.fg(Color::LightMagenta).bg(Color::Blue);
}
const ORANGE1: Color = Color::Rgb(200, 160, 0); const ORANGE1: Color = Color::Rgb(200, 160, 0);
const ORANGE2: Color = Color::Rgb(180, 130, 0); const ORANGE2: Color = Color::Rgb(180, 130, 0);
@@ -171,6 +167,10 @@ impl Widget for &App {
} }
None => should_render = false, None => should_render = false,
} }
if is_selected(x.into(), y.into()) {
style = style.bg(Color::Blue);
}
if (x_idx, y_idx) == self.grid.cursor() { if (x_idx, y_idx) == self.grid.cursor() {
should_render = true; should_render = true;
style = Style::new().fg(Color::Black).bg(Color::White); style = Style::new().fg(Color::Black).bg(Color::White);

View File

@@ -1,5 +1,8 @@
use std::{ use std::{
cmp::{max, min}, fmt::Display, fs, path::PathBuf cmp::{max, min},
fmt::Display,
fs,
path::PathBuf,
}; };
use ratatui::{ use ratatui::{
@@ -12,7 +15,7 @@ use crate::app::{
app::App, app::App,
error_msg::StatusMessage, error_msg::StatusMessage,
logic::{ logic::{
calc::{CSV_EXT, CUSTOM_EXT, LEN}, calc::{CSV_EXT, CUSTOM_EXT, Grid, LEN},
cell::CellType, cell::CellType,
}, },
}; };
@@ -153,7 +156,24 @@ impl Mode {
return; return;
} }
match args[0] { match args[0] {
"foo" => {} "export" => {
if let Some(arg1) = args.get(1) {
let (x1, y1) = pos;
let (x1, y1) = (*x1, *y1);
let (x2, y2) = app.grid.cursor();
let (low_x, hi_x) = if x1 < x2 { (x1, x2) } else { (x2, x1) };
let (low_y, hi_y) = if y1 < y2 { (y1, y2) } else { (y2, y1) };
let mut g = Grid::new();
for (i, x) in (low_x..=hi_x).enumerate() {
for (j, y) in (low_y..=hi_y).enumerate() {
g.set_cell_raw((i, j), app.grid.get_cell_raw(x, y).clone());
}
}
g.save_to(arg1).expect("Failure");
}
app.mode = Mode::Normal
}
_ => {} _ => {}
} }
} }