summaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorCanop <cano.petrole@gmail.com>2021-04-20 14:28:55 +0200
committerCanop <cano.petrole@gmail.com>2021-04-20 14:28:55 +0200
commit87db0b89a7975216f6810392945a0e57548406e0 (patch)
treee81ddc29ff15e7c4eb61092b98798dda884d80e5 /src/app
parente1bc9547cc0aae6652a62c0ca2187ded9acb03a8 (diff)
staging area filtered with pattern
Diffstat (limited to 'src/app')
-rw-r--r--src/app/app_state.rs1
-rw-r--r--src/app/panel_state.rs13
-rw-r--r--src/app/selection.rs23
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;
}