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 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> {
|
pub struct Opt<'a> {
|
||||||
url: Option<Cow<'a, Url>>,
|
url: Option<Cow<'a, Url>>,
|
||||||
|
|
@ -30,10 +30,17 @@ impl<'a> Tab {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
render!(match opt.state {
|
let b = match opt.state {
|
||||||
Some(true) => self.selected.add(&url),
|
Some(true) => render_and!(self.selected.add(&url)),
|
||||||
Some(false) => self.selected.remove(&url),
|
Some(false) => render_and!(self.selected.remove(&url)) | true,
|
||||||
None => self.selected.remove(&url) || self.selected.add(&url),
|
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 yazi_shared::{event::Cmd, render};
|
||||||
|
|
||||||
use crate::tab::Tab;
|
use crate::{notify::Notify, tab::Tab};
|
||||||
|
|
||||||
pub struct Opt {
|
pub struct Opt {
|
||||||
state: Option<bool>,
|
state: Option<bool>,
|
||||||
|
|
@ -23,27 +23,22 @@ impl From<Option<bool>> for Opt {
|
||||||
|
|
||||||
impl Tab {
|
impl Tab {
|
||||||
pub fn select_all(&mut self, opt: impl Into<Opt>) {
|
pub fn select_all(&mut self, opt: impl Into<Opt>) {
|
||||||
let mut b = false;
|
let iter = self.current.files.iter().map(|f| &f.url);
|
||||||
match opt.into().state {
|
let (removal, addition): (Vec<_>, Vec<_>) = match opt.into().state {
|
||||||
Some(true) => {
|
Some(true) => (vec![], iter.collect()),
|
||||||
for f in self.current.files.iter() {
|
Some(false) => (iter.collect(), vec![]),
|
||||||
// FIXME
|
None => iter.partition(|&u| self.selected.contains(u)),
|
||||||
b |= self.selected.add(&f.url);
|
};
|
||||||
}
|
|
||||||
}
|
render!(self.selected.remove_many(&removal) > 0);
|
||||||
Some(false) => {
|
let added = self.selected.add_many(&addition);
|
||||||
for f in self.current.files.iter() {
|
|
||||||
// FIXME
|
render!(added > 0);
|
||||||
b |= self.selected.remove(&f.url);
|
if added != addition.len() {
|
||||||
}
|
Notify::_push_warn(
|
||||||
}
|
"Select all",
|
||||||
None => {
|
"Some files cannot be selected, due to path nesting conflict.",
|
||||||
for f in self.current.files.iter() {
|
);
|
||||||
// FIXME
|
|
||||||
b |= self.selected.remove(&f.url) || self.selected.add(&f.url);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
render!(b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ impl Selected {
|
||||||
///
|
///
|
||||||
/// let url1 = Url::from("/a/b/c");
|
/// let url1 = Url::from("/a/b/c");
|
||||||
/// let url2 = Url::from("/a/b/d");
|
/// 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 {
|
pub fn add_many(&mut self, urls: &[&Url]) -> usize {
|
||||||
// If it has appeared as a parent
|
// If it has appeared as a parent
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue