mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
55c6aad3a7
commit
e0f8b301d7
9 changed files with 22 additions and 16 deletions
|
|
@ -15,7 +15,7 @@ impl Manager {
|
||||||
};
|
};
|
||||||
|
|
||||||
let cwd = self.cwd().clone();
|
let cwd = self.cwd().clone();
|
||||||
let old: Vec<_> = self.selected_or_hovered();
|
let old: Vec<_> = self.selected_or_hovered(true);
|
||||||
|
|
||||||
let root = max_common_root(&old);
|
let root = max_common_root(&old);
|
||||||
let old: Vec<_> = old.into_iter().map(|p| p.strip_prefix(&root).unwrap().to_owned()).collect();
|
let old: Vec<_> = old.into_iter().map(|p| p.strip_prefix(&root).unwrap().to_owned()).collect();
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ impl Manager {
|
||||||
};
|
};
|
||||||
|
|
||||||
let opt = opt.into() as Opt;
|
let opt = opt.into() as Opt;
|
||||||
let selected = if opt.hovered { vec![&hovered] } else { self.selected_or_hovered() };
|
let selected = if opt.hovered { vec![&hovered] } else { self.selected_or_hovered(false) };
|
||||||
if Self::quit_with_selected(&selected) {
|
if Self::quit_with_selected(&selected) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ impl Manager {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut opt = opt.into() as Opt;
|
let mut opt = opt.into() as Opt;
|
||||||
opt.targets = self.selected_or_hovered().into_iter().cloned().collect();
|
opt.targets = self.selected_or_hovered(false).into_iter().cloned().collect();
|
||||||
|
|
||||||
if opt.force {
|
if opt.force {
|
||||||
return self.remove_do(opt, tasks);
|
return self.remove_do(opt, tasks);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ impl Manager {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let selected: HashSet<_> = self.selected_or_hovered().into_iter().cloned().collect();
|
let selected: HashSet<_> = self.selected_or_hovered(false).into_iter().cloned().collect();
|
||||||
if selected.is_empty() {
|
if selected.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,9 @@ impl Manager {
|
||||||
pub fn hovered_folder(&self) -> Option<&Folder> { self.tabs.active().hovered_folder() }
|
pub fn hovered_folder(&self) -> Option<&Folder> { self.tabs.active().hovered_folder() }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn selected_or_hovered(&self) -> Vec<&Url> { self.tabs.active().selected_or_hovered() }
|
pub fn selected_or_hovered(&self, sorted: bool) -> Vec<&Url> {
|
||||||
|
self.tabs.active().selected_or_hovered(sorted)
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn hovered_and_selected(&self) -> Vec<&Url> { self.tabs.active().hovered_and_selected() }
|
pub fn hovered_and_selected(&self) -> Vec<&Url> { self.tabs.active().hovered_and_selected() }
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ impl Tab {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut s = OsString::new();
|
let mut s = OsString::new();
|
||||||
let mut it = self.selected_or_hovered().into_iter().peekable();
|
let mut it = self.selected_or_hovered(true).into_iter().peekable();
|
||||||
while let Some(u) = it.next() {
|
while let Some(u) = it.next() {
|
||||||
s.push(match opt.type_.as_str() {
|
s.push(match opt.type_.as_str() {
|
||||||
"path" => u.as_os_str(),
|
"path" => u.as_os_str(),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use std::collections::HashSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use yazi_shared::{event::Cmd, render};
|
use yazi_shared::{event::Cmd, render};
|
||||||
|
|
||||||
|
|
@ -18,9 +18,9 @@ impl Tab {
|
||||||
let idx = self.current.cursor;
|
let idx = self.current.cursor;
|
||||||
|
|
||||||
if opt.unset {
|
if opt.unset {
|
||||||
self.mode = Mode::Unset(idx, HashSet::from([idx]));
|
self.mode = Mode::Unset(idx, BTreeSet::from([idx]));
|
||||||
} else {
|
} else {
|
||||||
self.mode = Mode::Select(idx, HashSet::from([idx]));
|
self.mode = Mode::Select(idx, BTreeSet::from([idx]));
|
||||||
};
|
};
|
||||||
render!();
|
render!();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
use std::{collections::HashSet, fmt::Display, mem};
|
use std::{collections::BTreeSet, fmt::Display, mem};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Eq, PartialEq)]
|
#[derive(Clone, Debug, Default, Eq, PartialEq)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
#[default]
|
#[default]
|
||||||
Normal,
|
Normal,
|
||||||
Select(usize, HashSet<usize>),
|
Select(usize, BTreeSet<usize>),
|
||||||
Unset(usize, HashSet<usize>),
|
Unset(usize, BTreeSet<usize>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mode {
|
impl Mode {
|
||||||
pub fn visual_mut(&mut self) -> Option<(usize, &mut HashSet<usize>)> {
|
pub fn visual_mut(&mut self) -> Option<(usize, &mut BTreeSet<usize>)> {
|
||||||
match self {
|
match self {
|
||||||
Mode::Normal => None,
|
Mode::Normal => None,
|
||||||
Mode::Select(start, indices) => Some((*start, indices)),
|
Mode::Select(start, indices) => Some((*start, indices)),
|
||||||
|
|
@ -17,7 +17,7 @@ impl Mode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn take_visual(&mut self) -> Option<(usize, HashSet<usize>)> {
|
pub fn take_visual(&mut self) -> Option<(usize, BTreeSet<usize>)> {
|
||||||
match mem::take(self) {
|
match mem::take(self) {
|
||||||
Mode::Normal => None,
|
Mode::Normal => None,
|
||||||
Mode::Select(start, indices) => Some((start, indices)),
|
Mode::Select(start, indices) => Some((start, indices)),
|
||||||
|
|
|
||||||
|
|
@ -58,11 +58,15 @@ impl Tab {
|
||||||
|
|
||||||
impl Tab {
|
impl Tab {
|
||||||
// --- Current
|
// --- Current
|
||||||
pub fn selected_or_hovered(&self) -> Vec<&Url> {
|
pub fn selected_or_hovered(&self, sorted: bool) -> Vec<&Url> {
|
||||||
if self.selected.is_empty() {
|
if self.selected.is_empty() {
|
||||||
self.current.hovered().map(|h| vec![&h.url]).unwrap_or_default()
|
self.current.hovered().map(|h| vec![&h.url]).unwrap_or_default()
|
||||||
} else {
|
} else if !sorted {
|
||||||
self.selected.keys().collect()
|
self.selected.keys().collect()
|
||||||
|
} else {
|
||||||
|
let mut vec: Vec<_> = self.selected.iter().collect();
|
||||||
|
vec.sort_unstable_by(|a, b| a.1.cmp(b.1));
|
||||||
|
vec.into_iter().map(|(k, _)| k).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue