mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
46e7c4d102
commit
b1f03ba841
3 changed files with 19 additions and 17 deletions
|
|
@ -66,7 +66,7 @@ impl<'a> Widget for Folder<'a> {
|
||||||
|
|
||||||
let is_selected = self.folder.files.is_selected(f.path());
|
let is_selected = self.folder.files.is_selected(f.path());
|
||||||
if (!self.is_selection && is_selected)
|
if (!self.is_selection && is_selected)
|
||||||
|| (self.is_selection && mode.pending(i, is_selected))
|
|| (self.is_selection && mode.pending(self.folder.offset() + i, is_selected))
|
||||||
{
|
{
|
||||||
buf.set_style(
|
buf.set_style(
|
||||||
Rect { x: area.x.saturating_sub(1), y: i as u16 + 1, width: 1, height: 1 },
|
Rect { x: area.x.saturating_sub(1), y: i as u16 + 1, width: 1, height: 1 },
|
||||||
|
|
|
||||||
|
|
@ -79,11 +79,7 @@ impl Files {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn select_many(&mut self, path: Option<&Path>, state: Option<bool>) -> bool {
|
pub fn select_all(&mut self, state: Option<bool>) -> bool {
|
||||||
if let Some(path) = path {
|
|
||||||
return self.select(path, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
match state {
|
match state {
|
||||||
Some(true) => {
|
Some(true) => {
|
||||||
self.selected = self.iter().map(|f| f.path_owned()).collect();
|
self.selected = self.iter().map(|f| f.path_owned()).collect();
|
||||||
|
|
@ -176,19 +172,27 @@ impl Files {
|
||||||
// --- Selected
|
// --- Selected
|
||||||
pub fn selected(&self, pending: &BTreeSet<usize>, unset: bool) -> Vec<&File> {
|
pub fn selected(&self, pending: &BTreeSet<usize>, unset: bool) -> Vec<&File> {
|
||||||
if self.selected.is_empty() && (unset || pending.is_empty()) {
|
if self.selected.is_empty() && (unset || pending.is_empty()) {
|
||||||
return Default::default();
|
return Vec::new();
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut items =
|
let selected: BTreeSet<_> = self.selected.iter().collect();
|
||||||
Vec::with_capacity(self.selected.len() + if !unset { pending.len() } else { 0 });
|
let pending: BTreeSet<_> =
|
||||||
|
pending.iter().filter_map(|&i| self.items.get(i)).map(|f| &f.path).collect();
|
||||||
|
|
||||||
for (i, item) in self.iter().enumerate() {
|
let selected: BTreeSet<_> = if unset {
|
||||||
let b = self.selected.contains(&item.path);
|
selected.difference(&pending).cloned().collect()
|
||||||
if !unset && (b || pending.contains(&i)) {
|
} else {
|
||||||
items.push(item);
|
selected.union(&pending).cloned().collect()
|
||||||
} else if unset && b && !pending.contains(&i) {
|
};
|
||||||
|
|
||||||
|
let mut items = Vec::with_capacity(selected.len());
|
||||||
|
for item in &self.items {
|
||||||
|
if selected.contains(&item.path) {
|
||||||
items.push(item);
|
items.push(item);
|
||||||
}
|
}
|
||||||
|
if items.len() == selected.len() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
items
|
items
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -191,9 +191,7 @@ impl Tab {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn select_all(&mut self, state: Option<bool>) -> bool {
|
pub fn select_all(&mut self, state: Option<bool>) -> bool { self.current.files.select_all(state) }
|
||||||
self.current.files.select_many(None, state)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn visual_mode(&mut self, unset: bool) -> bool {
|
pub fn visual_mode(&mut self, unset: bool) -> bool {
|
||||||
let idx = self.current.cursor();
|
let idx = self.current.cursor();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue