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
|
// Sorting
|
||||||
"sort" => {
|
"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())
|
by: SortBy::try_from(exec.args.get(0).cloned().unwrap_or_default())
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
reverse: exec.named.contains_key("reverse"),
|
reverse: exec.named.contains_key("reverse"),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
use std::{collections::{BTreeMap, BTreeSet}, mem, ops::Deref, path::{Path, PathBuf}};
|
use std::{collections::{BTreeMap, BTreeSet}, mem, ops::Deref, path::{Path, PathBuf}};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use config::manager::SortBy;
|
||||||
use tokio::fs;
|
use tokio::fs;
|
||||||
|
|
||||||
use super::{File, FilesSorter};
|
use super::{File, FilesSorter};
|
||||||
|
|
@ -124,15 +125,22 @@ impl Files {
|
||||||
|
|
||||||
pub fn update_size(&mut self, items: BTreeMap<PathBuf, u64>) -> bool {
|
pub fn update_size(&mut self, items: BTreeMap<PathBuf, u64>) -> bool {
|
||||||
self.sizes.extend(items);
|
self.sizes.extend(items);
|
||||||
self.sorter.sort(&mut self.items);
|
if self.sorter.by == SortBy::Size {
|
||||||
|
self.sorter.sort(&mut self.items);
|
||||||
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_search(&mut self, items: Vec<File>) -> bool {
|
pub fn update_search(&mut self, items: Vec<File>) -> bool {
|
||||||
if !items.is_empty() {
|
if !items.is_empty() {
|
||||||
let (hidden, items): (Vec<_>, Vec<_>) = items.into_iter().partition(|f| f.is_hidden);
|
if self.show_hidden {
|
||||||
self.items.extend(items);
|
self.items.extend(items);
|
||||||
self.hidden.extend(hidden);
|
} 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);
|
self.sorter.sort(&mut self.items);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,8 @@ impl Folder {
|
||||||
self.cursor = self.cursor.min(len.saturating_sub(1));
|
self.cursor = self.cursor.min(len.saturating_sub(1));
|
||||||
self.set_page(true);
|
self.set_page(true);
|
||||||
|
|
||||||
if let Some(h) = self.hovered.as_ref().map(|h| h.path_owned()) {
|
self.hover_repos();
|
||||||
self.hover(&h);
|
|
||||||
}
|
|
||||||
self.hovered = self.files.duplicate(self.cursor);
|
self.hovered = self.files.duplicate(self.cursor);
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,6 +107,11 @@ impl Folder {
|
||||||
if new > self.cursor { self.next(new - self.cursor) } else { self.prev(self.cursor - new) }
|
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 {
|
pub fn hover_force(&mut self, file: File) -> bool {
|
||||||
if self.hover(file.path()) {
|
if self.hover(file.path()) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use shared::{Defer, MIME_DIR};
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
|
|
||||||
use super::{Folder, Mode, Preview, PreviewLock};
|
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 struct Tab {
|
||||||
pub(super) mode: Mode,
|
pub(super) mode: Mode,
|
||||||
|
|
@ -401,6 +401,16 @@ impl Tab {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn preview_reset_image(&mut self) -> bool { self.preview.reset_image() }
|
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
|
// --- Show hidden
|
||||||
pub fn set_show_hidden(&mut self, state: Option<bool>) -> bool {
|
pub fn set_show_hidden(&mut self, state: Option<bool>) -> bool {
|
||||||
let state = state.unwrap_or(!self.show_hidden);
|
let state = state.unwrap_or(!self.show_hidden);
|
||||||
|
|
@ -424,14 +434,13 @@ impl Tab {
|
||||||
}
|
}
|
||||||
|
|
||||||
applied |= match self.current.hovered {
|
applied |= match self.current.hovered {
|
||||||
Some(ref hovered) if hovered.is_dir() => self
|
Some(ref h) if h.is_dir() => {
|
||||||
.history
|
self.history.get_mut(h.path()).map(|f| f.files.set_show_hidden(state)).unwrap_or(false)
|
||||||
.get_mut(hovered.path())
|
}
|
||||||
.map(|f| f.files.set_show_hidden(state))
|
|
||||||
.unwrap_or(false),
|
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.current.hover_repos();
|
||||||
applied
|
applied
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue