mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
9d1c5041fd
commit
0d11c52e4d
4 changed files with 34 additions and 15 deletions
|
|
@ -137,7 +137,7 @@ impl Executor {
|
|||
|
||||
// Sorting
|
||||
"sort" => {
|
||||
let b = cx.manager.current_mut().files.set_sorter(FilesSorter {
|
||||
let b = cx.manager.active_mut().set_sorter(FilesSorter {
|
||||
by: SortBy::try_from(exec.args.get(0).cloned().unwrap_or_default())
|
||||
.unwrap_or_default(),
|
||||
reverse: exec.named.contains_key("reverse"),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use std::{collections::{BTreeMap, BTreeSet}, mem, ops::Deref, path::{Path, PathBuf}};
|
||||
|
||||
use anyhow::Result;
|
||||
use config::manager::SortBy;
|
||||
use tokio::fs;
|
||||
|
||||
use super::{File, FilesSorter};
|
||||
|
|
@ -124,15 +125,22 @@ impl Files {
|
|||
|
||||
pub fn update_size(&mut self, items: BTreeMap<PathBuf, u64>) -> bool {
|
||||
self.sizes.extend(items);
|
||||
self.sorter.sort(&mut self.items);
|
||||
if self.sorter.by == SortBy::Size {
|
||||
self.sorter.sort(&mut self.items);
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
pub fn update_search(&mut self, items: Vec<File>) -> bool {
|
||||
if !items.is_empty() {
|
||||
let (hidden, items): (Vec<_>, Vec<_>) = items.into_iter().partition(|f| f.is_hidden);
|
||||
self.items.extend(items);
|
||||
self.hidden.extend(hidden);
|
||||
if self.show_hidden {
|
||||
self.items.extend(items);
|
||||
} else {
|
||||
let (hidden, items): (Vec<_>, Vec<_>) = items.into_iter().partition(|f| f.is_hidden);
|
||||
self.items.extend(items);
|
||||
self.hidden.extend(hidden);
|
||||
}
|
||||
|
||||
self.sorter.sort(&mut self.items);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,11 +40,8 @@ impl Folder {
|
|||
self.cursor = self.cursor.min(len.saturating_sub(1));
|
||||
self.set_page(true);
|
||||
|
||||
if let Some(h) = self.hovered.as_ref().map(|h| h.path_owned()) {
|
||||
self.hover(&h);
|
||||
}
|
||||
self.hover_repos();
|
||||
self.hovered = self.files.duplicate(self.cursor);
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
|
|
@ -110,6 +107,11 @@ impl Folder {
|
|||
if new > self.cursor { self.next(new - self.cursor) } else { self.prev(self.cursor - new) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn hover_repos(&mut self) -> bool {
|
||||
self.hover(&self.hovered.as_ref().map(|h| h.path_owned()).unwrap_or_default())
|
||||
}
|
||||
|
||||
pub fn hover_force(&mut self, file: File) -> bool {
|
||||
if self.hover(file.path()) {
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use shared::{Defer, MIME_DIR};
|
|||
use tokio::task::JoinHandle;
|
||||
|
||||
use super::{Folder, Mode, Preview, PreviewLock};
|
||||
use crate::{emit, external::{self, FzfOpt, ZoxideOpt}, files::{File, Files, FilesOp}, input::InputOpt, Event, BLOCKER};
|
||||
use crate::{emit, external::{self, FzfOpt, ZoxideOpt}, files::{File, Files, FilesOp, FilesSorter}, input::InputOpt, Event, BLOCKER};
|
||||
|
||||
pub struct Tab {
|
||||
pub(super) mode: Mode,
|
||||
|
|
@ -401,6 +401,16 @@ impl Tab {
|
|||
#[inline]
|
||||
pub fn preview_reset_image(&mut self) -> bool { self.preview.reset_image() }
|
||||
|
||||
// --- Sorter
|
||||
pub fn set_sorter(&mut self, sorter: FilesSorter) -> bool {
|
||||
if !self.current.files.set_sorter(sorter) {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.current.hover_repos();
|
||||
true
|
||||
}
|
||||
|
||||
// --- Show hidden
|
||||
pub fn set_show_hidden(&mut self, state: Option<bool>) -> bool {
|
||||
let state = state.unwrap_or(!self.show_hidden);
|
||||
|
|
@ -424,14 +434,13 @@ impl Tab {
|
|||
}
|
||||
|
||||
applied |= match self.current.hovered {
|
||||
Some(ref hovered) if hovered.is_dir() => self
|
||||
.history
|
||||
.get_mut(hovered.path())
|
||||
.map(|f| f.files.set_show_hidden(state))
|
||||
.unwrap_or(false),
|
||||
Some(ref h) if h.is_dir() => {
|
||||
self.history.get_mut(h.path()).map(|f| f.files.set_show_hidden(state)).unwrap_or(false)
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
|
||||
self.current.hover_repos();
|
||||
applied
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue