This commit is contained in:
sxyazi 2023-08-28 17:31:56 +08:00
parent 9d1c5041fd
commit 0d11c52e4d
No known key found for this signature in database
4 changed files with 34 additions and 15 deletions

View file

@ -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"),

View file

@ -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;
}

View file

@ -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;

View file

@ -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
}
}