mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
f9e6e87756
commit
6e548f469f
3 changed files with 32 additions and 30 deletions
|
|
@ -1,8 +1,8 @@
|
|||
use std::borrow::Cow;
|
||||
|
||||
use yazi_shared::{event::Cmd, fs::Url, render};
|
||||
use yazi_shared::{event::Cmd, fs::Url, render, render_and};
|
||||
|
||||
use crate::tab::Tab;
|
||||
use crate::{notify::Notify, tab::Tab};
|
||||
|
||||
pub struct Opt<'a> {
|
||||
url: Option<Cow<'a, Url>>,
|
||||
|
|
@ -30,10 +30,17 @@ impl<'a> Tab {
|
|||
return;
|
||||
};
|
||||
|
||||
render!(match opt.state {
|
||||
Some(true) => self.selected.add(&url),
|
||||
Some(false) => self.selected.remove(&url),
|
||||
None => self.selected.remove(&url) || self.selected.add(&url),
|
||||
});
|
||||
let b = match opt.state {
|
||||
Some(true) => render_and!(self.selected.add(&url)),
|
||||
Some(false) => render_and!(self.selected.remove(&url)) | true,
|
||||
None => render_and!(self.selected.remove(&url) || self.selected.add(&url)),
|
||||
};
|
||||
|
||||
if !b {
|
||||
Notify::_push_warn(
|
||||
"Select one",
|
||||
"This file cannot be selected, due to path nesting conflict.",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use yazi_shared::{event::Cmd, render};
|
||||
|
||||
use crate::tab::Tab;
|
||||
use crate::{notify::Notify, tab::Tab};
|
||||
|
||||
pub struct Opt {
|
||||
state: Option<bool>,
|
||||
|
|
@ -23,27 +23,22 @@ impl From<Option<bool>> for Opt {
|
|||
|
||||
impl Tab {
|
||||
pub fn select_all(&mut self, opt: impl Into<Opt>) {
|
||||
let mut b = false;
|
||||
match opt.into().state {
|
||||
Some(true) => {
|
||||
for f in self.current.files.iter() {
|
||||
// FIXME
|
||||
b |= self.selected.add(&f.url);
|
||||
}
|
||||
}
|
||||
Some(false) => {
|
||||
for f in self.current.files.iter() {
|
||||
// FIXME
|
||||
b |= self.selected.remove(&f.url);
|
||||
}
|
||||
}
|
||||
None => {
|
||||
for f in self.current.files.iter() {
|
||||
// FIXME
|
||||
b |= self.selected.remove(&f.url) || self.selected.add(&f.url);
|
||||
}
|
||||
}
|
||||
let iter = self.current.files.iter().map(|f| &f.url);
|
||||
let (removal, addition): (Vec<_>, Vec<_>) = match opt.into().state {
|
||||
Some(true) => (vec![], iter.collect()),
|
||||
Some(false) => (iter.collect(), vec![]),
|
||||
None => iter.partition(|&u| self.selected.contains(u)),
|
||||
};
|
||||
|
||||
render!(self.selected.remove_many(&removal) > 0);
|
||||
let added = self.selected.add_many(&addition);
|
||||
|
||||
render!(added > 0);
|
||||
if added != addition.len() {
|
||||
Notify::_push_warn(
|
||||
"Select all",
|
||||
"Some files cannot be selected, due to path nesting conflict.",
|
||||
);
|
||||
}
|
||||
render!(b);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ impl Selected {
|
|||
///
|
||||
/// let url1 = Url::from("/a/b/c");
|
||||
/// let url2 = Url::from("/a/b/d");
|
||||
/// assert!(s.add_many(&[&url1, &url2]));
|
||||
/// assert_eq!(2, s.add_many(&[&url1, &url2]));
|
||||
/// ```
|
||||
pub fn add_many(&mut self, urls: &[&Url]) -> usize {
|
||||
// If it has appeared as a parent
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue