diff options
author | Canop <cano.petrole@gmail.com> | 2021-04-20 14:28:55 +0200 |
---|---|---|
committer | Canop <cano.petrole@gmail.com> | 2021-04-20 14:28:55 +0200 |
commit | 87db0b89a7975216f6810392945a0e57548406e0 (patch) | |
tree | e81ddc29ff15e7c4eb61092b98798dda884d80e5 /src/app | |
parent | e1bc9547cc0aae6652a62c0ca2187ded9acb03a8 (diff) |
staging area filtered with pattern
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/app_state.rs | 1 | ||||
-rw-r--r-- | src/app/panel_state.rs | 13 | ||||
-rw-r--r-- | src/app/selection.rs | 23 |
3 files changed, 18 insertions, 19 deletions
diff --git a/src/app/app_state.rs b/src/app/app_state.rs index e126f8e..474aa00 100644 --- a/src/app/app_state.rs +++ b/src/app/app_state.rs @@ -8,7 +8,6 @@ use { /// global mutable state #[derive(Debug, Default)] pub struct AppState { - pub stage: Stage, } diff --git a/src/app/panel_state.rs b/src/app/panel_state.rs index 67a5921..6023f66 100644 --- a/src/app/panel_state.rs +++ b/src/app/panel_state.rs @@ -55,6 +55,7 @@ pub trait PanelState { fn on_pattern( &mut self, _pat: InputPattern, + _app_state: &AppState, _con: &AppContext, ) -> Result<CmdResult, ProgramError> { Ok(CmdResult::Keep) @@ -302,7 +303,7 @@ pub trait PanelState { CmdResult::HandleInApp(Internal::panel_right) } Internal::clear_stage => { - app_state.stage.paths.clear(); + app_state.stage.clear(); if let Some(panel_id) = cc.app.stage_panel { CmdResult::ClosePanel { validate_purpose: false, @@ -328,7 +329,7 @@ pub trait PanelState { Internal::open_staging_area => { if cc.app.stage_panel.is_none() { CmdResult::NewPanel { - state: Box::new(StageState::new(self.tree_options(), con)), + state: Box::new(StageState::new(app_state, self.tree_options(), con)), purpose: PanelPurpose::None, direction: HDir::Right, } @@ -344,7 +345,7 @@ pub trait PanelState { } } else { CmdResult::NewPanel { - state: Box::new(StageState::new(self.tree_options(), con)), + state: Box::new(StageState::new(app_state, self.tree_options(), con)), purpose: PanelPurpose::None, direction: HDir::Right, } @@ -382,7 +383,7 @@ pub trait PanelState { app_state.stage.add(path); if cc.app.stage_panel.is_none() { return CmdResult::NewPanel { - state: Box::new(StageState::new(self.tree_options(), con)), + state: Box::new(StageState::new(app_state, self.tree_options(), con)), purpose: PanelPurpose::None, direction: HDir::Right, }; @@ -420,7 +421,7 @@ pub trait PanelState { con: &AppContext, ) -> CmdResult { if let Some(path) = self.selected_path() { - if app_state.stage.paths.iter().any(|p| p==path) { + if app_state.stage.contains(path) { self.unstage(app_state, cc, con) } else { self.stage(app_state, cc, con) @@ -521,7 +522,7 @@ pub trait PanelState { Command::DoubleClick(x, y) => self.on_double_click(*x, *y, screen, con), Command::PatternEdit { raw, expr } => { match InputPattern::new(raw.clone(), expr, con) { - Ok(pattern) => self.on_pattern(pattern, con), + Ok(pattern) => self.on_pattern(pattern, app_state, con), Err(e) => Ok(CmdResult::DisplayError(format!("{}", e))), } } diff --git a/src/app/selection.rs b/src/app/selection.rs index 07d5e1e..949f2f5 100644 --- a/src/app/selection.rs +++ b/src/app/selection.rs @@ -7,13 +7,12 @@ use { crate::{ errors::ProgramError, launchable::Launchable, - path::longest_common_ancestor, stage::Stage, }, std::{ fs::OpenOptions, io::Write, - path::{Path, PathBuf}, + path::Path, }, }; @@ -97,18 +96,18 @@ impl Selection<'_> { } impl<'a> SelInfo<'a> { - pub fn common_path(&self) -> Option<PathBuf> { - match self { - SelInfo::None => None, - SelInfo::One(sel) => Some(sel.path.into()), // TODO way to avoid this clone ? - SelInfo::More(stage) => Some(longest_common_ancestor(&stage.paths)) - } - } + //pub fn common_path(&self) -> Option<PathBuf> { + // match self { + // SelInfo::None => None, + // SelInfo::One(sel) => Some(sel.path.into()), // TODO way to avoid this clone ? + // SelInfo::More(stage) => Some(longest_common_ancestor(&stage.paths)) + // } + //} pub fn count_paths(&self) -> usize { match self { SelInfo::None => 0, SelInfo::One(_) => 1, - SelInfo::More(stage) => stage.paths.len(), + SelInfo::More(stage) => stage.len(), } } pub fn common_stype(&self) -> Option<SelectionType> { @@ -116,8 +115,8 @@ impl<'a> SelInfo<'a> { SelInfo::None => None, SelInfo::One(sel) => Some(sel.stype), SelInfo::More(stage) => { - let stype = SelectionType::from(&stage.paths[0]); - for path in stage.paths.iter().skip(1) { + let stype = SelectionType::from(&stage.paths()[0]); + for path in stage.paths().iter().skip(1) { if stype != SelectionType::from(path) { return None; } |